diff --git a/bi.lessconfig.json b/bi.lessconfig.json index 563eaed07..47959db2b 100644 --- a/bi.lessconfig.json +++ b/bi.lessconfig.json @@ -38,5 +38,8 @@ "@color-bi-color-toast-normal": "#2C60DB", "@color-bi-color-toast-text": "#000A19", "@color-bi-text-header-background": "rgba(9, 30, 64, 0.9)", - "@color-bi-text-header-background-theme-dark": "rgba(255, 255, 255, 0.9)" + "@color-bi-text-header-background-theme-dark": "rgba(255, 255, 255, 0.9)", + "@font-down-triangle": "e70b", + "@font-date": "e733", + "@font-trigger-triangle": "e924" } \ No newline at end of file diff --git a/demo/js/base/button/demo.button.js b/demo/js/base/button/demo.button.js index 420a47d77..981683e84 100644 --- a/demo/js/base/button/demo.button.js +++ b/demo/js/base/button/demo.button.js @@ -376,6 +376,15 @@ Demo.Button = BI.inherit(BI.Widget, { this.loaded(); }, 5 * 1000); }, + }, { + type: "bi.button", + text: "文字偏左的按钮", + textAlign: "left", + width: 200, + }, { + type: "bi.button", + text: "小于最小宽度的按钮", + width: 50, }]; return { diff --git a/demo/js/widget/downlist/demo.downlist.js b/demo/js/widget/downlist/demo.downlist.js index 6c5382842..6b72ff61f 100644 --- a/demo/js/widget/downlist/demo.downlist.js +++ b/demo/js/widget/downlist/demo.downlist.js @@ -1,3 +1,15 @@ +(function () { + var CustomIcon = BI.inherit(BI.Widget, { + render: function () { + return { + type: "bi.label", + text: "✨", + }; + }, + }); + BI.shortcut("demo.downlist.icon", CustomIcon); +}()); + Demo.Downlist = BI.inherit(BI.Widget, { props: { baseCls: "demo-downlist" @@ -22,9 +34,9 @@ Demo.Downlist = BI.inherit(BI.Widget, { render: function () { var self = this; - // test + return { - type: "bi.horizontal_adapt", + type: "bi.left", items: [{ type: "bi.down_list_combo", ref: function (_ref) { @@ -131,7 +143,51 @@ Demo.Downlist = BI.inherit(BI.Widget, { // }] }] - ] + ], + }, { + type: "bi.down_list_combo", + el: { + type: "bi.button", + ghost: true, + iconPosition: "right", + icon: "column-next-page-h-font", + text: "自定义 trigger 和 icon 的级联下拉框", + }, + listeners: [{ + eventName: "EVENT_CHANGE", + action: function (v) { + console.log("触发值", v); + } + }, { + eventName: "EVENT_SON_VALUE_CHANGE", + action: function(v) { + console.log("二级菜单触发值", v) + } + }], + items: [ + [{ + el: { + text: "选项一", + value: 1, + icon: { + type: "demo.downlist.icon", + }, + }, + children: [{ + text: "选项一", + value: 11, + icon: { + type: "demo.downlist.icon", + }, + }, { + text: "选项二", + value: 12, + }], + }, { + text: "选项二", + value: 2, + }] + ], }, { type: "bi.multi_layer_down_list_combo", ref: function (_ref) { diff --git a/dist/font/iconfont.eot b/dist/font/iconfont.eot index a44223c9d..015c39e65 100644 Binary files a/dist/font/iconfont.eot and b/dist/font/iconfont.eot differ diff --git a/dist/font/iconfont.svg b/dist/font/iconfont.svg index 88dafb457..2205e4bc4 100644 --- a/dist/font/iconfont.svg +++ b/dist/font/iconfont.svg @@ -14,17 +14,35 @@ /> + + + + + + + + + + + + + + + + + + - + - + - + @@ -258,7 +276,7 @@ - + @@ -432,50 +450,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -592,7 +574,7 @@ - + @@ -620,7 +602,7 @@ - + @@ -658,7 +640,7 @@ - + @@ -798,7 +780,7 @@ - + @@ -886,7 +868,7 @@ - + @@ -988,7 +970,7 @@ - + @@ -1008,7 +990,7 @@ - + @@ -1020,31 +1002,31 @@ - + - + - + - + - + @@ -1056,71 +1038,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -1156,7 +1138,7 @@ - + @@ -1560,7 +1542,7 @@ - + @@ -1660,7 +1642,7 @@ - + @@ -1672,7 +1654,7 @@ - + @@ -1696,7 +1678,7 @@ - + @@ -1844,7 +1826,7 @@ - + @@ -1888,7 +1870,7 @@ - + @@ -1900,11 +1882,11 @@ - + - + diff --git a/dist/font/iconfont.ttf b/dist/font/iconfont.ttf index 57fff7cd5..674d12bbe 100644 Binary files a/dist/font/iconfont.ttf and b/dist/font/iconfont.ttf differ diff --git a/dist/font/iconfont.woff b/dist/font/iconfont.woff index f86675aa2..77bcb44e4 100644 Binary files a/dist/font/iconfont.woff and b/dist/font/iconfont.woff differ diff --git a/dist/font/iconfont.woff2 b/dist/font/iconfont.woff2 index 06408f2fa..379326119 100644 Binary files a/dist/font/iconfont.woff2 and b/dist/font/iconfont.woff2 differ diff --git a/package.json b/package.json index 618409294..728d1c441 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220824175535", + "version": "2.0.20220905163443", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", diff --git a/src/base/0.base.js b/src/base/0.base.js index a8aa11a21..1100c0709 100644 --- a/src/base/0.base.js +++ b/src/base/0.base.js @@ -1,11 +1,9 @@ -BI.prepares.push(function () { - BI.Resizers = new BI.ResizeController(); - BI.Layers = new BI.LayerController(); - BI.Maskers = new BI.MaskersController(); - BI.Bubbles = new BI.BubblesController(); - BI.Tooltips = new BI.TooltipsController(); - BI.Popovers = new BI.PopoverController(); - BI.Drawers = new BI.DrawerController(); - BI.Broadcasts = new BI.BroadcastController(); - BI.StyleLoaders = new BI.StyleLoaderManager(); -}); +BI.Resizers = new BI.ResizeController(); +BI.Layers = new BI.LayerController(); +BI.Maskers = new BI.MaskersController(); +BI.Bubbles = new BI.BubblesController(); +BI.Tooltips = new BI.TooltipsController(); +BI.Popovers = new BI.PopoverController(); +BI.Drawers = new BI.DrawerController(); +BI.Broadcasts = new BI.BroadcastController(); +BI.StyleLoaders = new BI.StyleLoaderManager(); diff --git a/src/base/single/1.text.js b/src/base/single/1.text.js index 50aebf841..2a9c77d85 100644 --- a/src/base/single/1.text.js +++ b/src/base/single/1.text.js @@ -65,7 +65,7 @@ tagName: "span", }); this.text.element.click(function (e) { - o.handler.call(self, self.getValue(), self, e); + !o.disabled && !o.invalid && o.handler.call(self, self.getValue(), self, e); }); BI.createWidget({ type: "bi.default", diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index 11762c86d..9965b1ff1 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -107,8 +107,9 @@ }); } - // 用于 whiteSpace - var textWidth = iconInvisible && o.width ? o.width - o.hgap * 2 : null; + // 用户可能设置的 width 小于按钮的最小宽度 + var actualWidth = (o.minWidth > 0 && o.width < o.minWidth) ? o.minWidth : o.width; + var textWidth = iconInvisible && o.width ? actualWidth - o.hgap * 2 : null; if (BI.isNotNull(o.textWidth)) { // textWidth 需要减去图标 textWidth = o.textWidth - (iconInvisible || isVertical(o.iconPosition) ? 0 : this._const.iconWidth); @@ -141,6 +142,7 @@ // bi.center_adapt 作用:让 hgap 不影响 iconGap。 BI.createWidget({ type: "bi.center_adapt", + horizontalAlign: o.textAlign, element: this, hgap: o.hgap, vgap: o.vgap, @@ -161,7 +163,7 @@ }); if (o.minWidth > 0) { - this.element.css({"min-width": o.minWidth / BI.pixRatio + BI.pixUnit}); + this.element.css({ "min-width": o.minWidth / BI.pixRatio + BI.pixUnit }); } }, diff --git a/src/base/single/editor/editor.textarea.js b/src/base/single/editor/editor.textarea.js index 9f91b0ce4..d3838d29e 100644 --- a/src/base/single/editor/editor.textarea.js +++ b/src/base/single/editor/editor.textarea.js @@ -79,7 +79,7 @@ BI.TextAreaEditor = BI.inherit(BI.Single, { BI.Widget._renderEngine.createElement(document).unbind("mousedown." + self.getName()); }); this.content.element.keydown(function () { - // 水印快速消失 + // 水印快速消失 self._checkWaterMark(); }); this.content.element.keyup(function (e) { @@ -111,7 +111,6 @@ BI.TextAreaEditor = BI.inherit(BI.Single, { cls: "bi-water-mark textarea-watermark", textAlign: "left", whiteSpace: o.scrolly ? "normal" : "nowrap", - title: o.watermark, text: o.watermark, invalid: o.invalid, disabled: o.disabled, diff --git a/src/base/single/input/radio/radio.js b/src/base/single/input/radio/radio.js index d842196ae..68c695277 100644 --- a/src/base/single/input/radio/radio.js +++ b/src/base/single/input/radio/radio.js @@ -9,10 +9,10 @@ BI.Radio = BI.inherit(BI.BasicButton, { baseCls: "bi-radio", selected: false, handler: BI.emptyFn, - width: 14, - height: 14, - iconWidth: 14, - iconHeight: 14, + width: 16, + height: 16, + iconWidth: 16, + iconHeight: 16, }, render: function () { diff --git a/src/base/single/tip/tip.tooltip.js b/src/base/single/tip/tip.tooltip.js index 70c710497..0357530e8 100644 --- a/src/base/single/tip/tip.tooltip.js +++ b/src/base/single/tip/tip.tooltip.js @@ -25,10 +25,12 @@ BI.Tooltip = BI.inherit(BI.Tip, { render: function () { var o = this.options; this.element.addClass("tooltip-" + o.level); + function fn(e) { o.stopPropagation && e.stopPropagation(); o.stopEvent && e.stopEvent(); } + this.element.bind({ click: fn, mousedown: fn, @@ -48,7 +50,7 @@ BI.Tooltip = BI.inherit(BI.Tip, { innerVgap: this._const.vgap, items: BI.map(texts, function (i, text) { return { - type: "bi.label", + type: "bi.text", textAlign: o.textAlign, whiteSpace: "normal", text: text, @@ -58,7 +60,7 @@ BI.Tooltip = BI.inherit(BI.Tip, { }); } else { this.text = BI.createWidget({ - type: "bi.label", + type: "bi.text", element: this, textAlign: o.textAlign, whiteSpace: "normal", diff --git a/src/case/button/icon/iconhalf/icon.half.js b/src/case/button/icon/iconhalf/icon.half.js index 6a46b165e..f8c23afc4 100644 --- a/src/case/button/icon/iconhalf/icon.half.js +++ b/src/case/button/icon/iconhalf/icon.half.js @@ -7,20 +7,34 @@ BI.HalfButton = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.HalfIconButton.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { - extraCls: "bi-half-button bi-high-light-border", - height: 14, + selected: false, width: 14, - selected: false + height: 14, + iconWidth: 14, + iconHeight: 14, }); }, + render: function () { + var o = this.options; + return { + type: "bi.center_adapt", + items: [{ + type: "bi.default", + cls: "bi-half-button bi-high-light-border", + width: o.iconWidth, + height: o.iconHeight, + }], + }; + }, + doClick: function () { BI.HalfButton.superclass.doClick.apply(this, arguments); - if(this.isValid()) { + if (this.isValid()) { this.fireEvent(BI.HalfButton.EVENT_CHANGE); } } }); BI.HalfButton.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.half_button", BI.HalfButton); \ No newline at end of file +BI.shortcut("bi.half_button", BI.HalfButton); diff --git a/src/case/combo/textvaluecombo/combo.textvalue.js b/src/case/combo/textvaluecombo/combo.textvalue.js index dc39d1b1e..b9aaac2ba 100644 --- a/src/case/combo/textvaluecombo/combo.textvalue.js +++ b/src/case/combo/textvaluecombo/combo.textvalue.js @@ -14,7 +14,8 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { value: "", defaultText: "", allowClear: false, - status: "success", // success | warning | error + status: "success", // success | warning | error, + title: null, }); }, @@ -35,6 +36,21 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { const o = this.options; + const title = () => { + if (BI.isFunction(o.title)) { + return o.title(); + } + if (this.options.status === "error") { + return { + level: "warning", + text: o.warningTitle, + }; + } + return { + level: "success", + }; + }; + const trigger = { type: "bi.select_text_trigger", ref: ref => this.trigger = ref, @@ -43,17 +59,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { height: o.height, text: o.text, value: o.value, - title: () => { - if (this.options.status === "error") { - return { - level: "warning", - text: o.warningTitle, - }; - } - return { - level: "success", - }; - }, + title, allowClear: o.allowClear, defaultText: o.defaultText, listeners: [ diff --git a/src/core/4.widget.js b/src/core/4.widget.js index d24c01566..df560dc24 100644 --- a/src/core/4.widget.js +++ b/src/core/4.widget.js @@ -748,7 +748,16 @@ this.purgeListeners(); }, + _assetMounted: function () { + if (!this.isVisible()) { + this._setVisible(true); + this._mount(false, false, false); + this._setVisible(false); + } + }, + _empty: function () { + this._assetMounted(); BI.each(this._children, function (i, widget) { widget && widget._unMount && widget._unMount(); }); @@ -790,6 +799,7 @@ }); }); this._watchers && (this._watchers = []); + this._assetMounted(); this.__d(); this.element.empty(); this.element.unbind(); @@ -799,6 +809,7 @@ }, _destroy: function () { + this._assetMounted(); this.__destroy(); this.element.destroy(); this.purgeListeners(); @@ -806,6 +817,7 @@ destroy: function () { var self = this, o = this.options; + this._assetMounted(); this.__destroy(); if (o.animation) { this._innerSetVisible(false); diff --git a/src/core/plugin.js b/src/core/6.plugin.js similarity index 100% rename from src/core/plugin.js rename to src/core/6.plugin.js diff --git a/src/core/controller/controller.layer.js b/src/core/controller/controller.layer.js index 98470c5a9..6887603f7 100644 --- a/src/core/controller/controller.layer.js +++ b/src/core/controller/controller.layer.js @@ -15,7 +15,10 @@ BI.LayerController = BI.inherit(BI.Controller, { this.layerManager = {}; this.layouts = {}; this.zindex = BI.zIndex_layer; - BI.Resizers.add("layerController" + BI.uniqueId(), BI.bind(this._resize, this)); + }, + + _initResizer: function () { + this.resizer = BI.Resizers.add("layerController" + BI.uniqueId(), BI.bind(this._resize, this)); }, _resize: function () { @@ -38,6 +41,7 @@ BI.LayerController = BI.inherit(BI.Controller, { }, create: function (name, from, op, context) { + BI.isNull(this.resizer) && this._initResizer(); if (this.has(name)) { return this.get(name); } diff --git a/src/core/controller/controller.resizer.js b/src/core/controller/controller.resizer.js index a471cebdf..900bd3927 100644 --- a/src/core/controller/controller.resizer.js +++ b/src/core/controller/controller.resizer.js @@ -5,18 +5,20 @@ * @class */ BI.ResizeController = BI.inherit(BI.Controller, { + init: function () { - var self = this; this.resizerManger = {}; - var fn = BI.debounce(function (ev) { - // if (BI.isWindow(ev.target)) { + }, + + _initResizeListener: function () { + var self = this; + this.resizeHandler = BI.debounce(function (ev) { self._resize(ev); - // } }, 30); if ("onorientationchange" in _global) { - _global.onorientationchange = fn; + _global.onorientationchange = this.resizeHandler; } else { - BI.Widget._renderEngine.createElement(_global).resize(fn); + BI.Widget._renderEngine.createElement(_global).resize(this.resizeHandler); } }, @@ -34,13 +36,14 @@ BI.ResizeController = BI.inherit(BI.Controller, { } if (BI.isFunction(resizer)) { resizer(ev); - return; } }); }, add: function (name, resizer) { var self = this; + BI.isNull(this.resizeHandler) && this._initResizeListener(); + if (this.has(name)) { return this; } diff --git a/src/core/platform/web/config.js b/src/core/platform/web/config.js index 9c4ba840c..6a955a27e 100644 --- a/src/core/platform/web/config.js +++ b/src/core/platform/web/config.js @@ -1,5 +1,5 @@ // 工程配置 -BI.prepares.push(function () { +!(function () { // 注册布局 // adapt类布局优先级规则 // 1、支持flex的浏览器下使用flex布局 @@ -39,16 +39,16 @@ BI.prepares.push(function () { // return BI.extend({}, ob, {type: "bi.table_adapt"}); // } if (supportFlex) { - return BI.extend({}, ob, {type: "bi.flex_horizontal"}); + return BI.extend({}, ob, { type: "bi.flex_horizontal" }); } return BI.extend({ scrollx: true - }, ob, {type: "bi.inline"}); + }, ob, { type: "bi.inline" }); }); BI.Plugin.configWidget("bi.vertical", function (ob) { if (ob.horizontalAlign === BI.HorizontalAlign.Left || ob.horizontalAlign === BI.HorizontalAlign.Right) { if (isSupportFlex()) { - return BI.extend({}, ob, {type: "bi.flex_vertical"}); + return BI.extend({}, ob, { type: "bi.flex_vertical" }); } return BI.extend({}, ob, { horizontalAlign: BI.HorizontalAlign.Stretch, @@ -88,14 +88,14 @@ BI.prepares.push(function () { if ((ob.scrollable !== true && ob.scrollx !== true) || ob.horizontalAlign === BI.HorizontalAlign.Stretch) { return BI.extend({ verticalAlign: BI.VerticalAlign.Top - }, ob, {type: "bi.horizontal_float_fill"}); + }, ob, { type: "bi.horizontal_float_fill" }); } return BI.extend({ horizontalAlign: BI.HorizontalAlign.Stretch - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); } if (BI.Providers.getProvider("bi.provider.system").getResponsiveMode()) { - return BI.extend({}, ob, {type: "bi.responsive_inline"}); + return BI.extend({}, ob, { type: "bi.responsive_inline" }); } return ob; }); @@ -104,9 +104,9 @@ BI.prepares.push(function () { // var isAdapt = !ob.horizontalAlign || ob.horizontalAlign === BI.HorizontalAlign.Center || ob.horizontalAlign === BI.HorizontalAlign.Stretch; // if (!isAdapt || justOneItem) { if (supportFlex) { - return BI.extend({}, ob, {type: "bi.flex_center_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_center_adapt" }); } - return BI.extend({}, ob, {type: "bi.inline_center_adapt"}); + return BI.extend({}, ob, { type: "bi.inline_center_adapt" }); // } // return ob; }); @@ -115,9 +115,9 @@ BI.prepares.push(function () { // var isAdapt = ob.horizontalAlign === BI.HorizontalAlign.Center || ob.horizontalAlign === BI.HorizontalAlign.Stretch; // if (!isAdapt || justOneItem) { if (supportFlex) { - return BI.extend({}, ob, {type: "bi.flex_vertical_center_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_vertical_center_adapt" }); } - return BI.extend({}, ob, {type: "bi.inline_vertical_adapt"}); + return BI.extend({}, ob, { type: "bi.inline_vertical_adapt" }); // } // return ob; }); @@ -126,7 +126,7 @@ BI.prepares.push(function () { var isAdapt = !ob.horizontalAlign || ob.horizontalAlign === BI.HorizontalAlign.Center || ob.horizontalAlign === BI.HorizontalAlign.Stretch; var verticalAlignTop = !ob.verticalAlign || ob.verticalAlign === BI.VerticalAlign.TOP; if (verticalAlignTop && justOneItem) { - return BI.extend({}, ob, {type: "bi.horizontal_auto"}); + return BI.extend({}, ob, { type: "bi.horizontal_auto" }); } var supportFlex = isSupportFlex(); // 在横向自适应场景下我们需要使用table的自适应撑出滚动条的特性(flex处理不了这种情况) @@ -134,24 +134,24 @@ BI.prepares.push(function () { if (isAdapt) { return BI.extend({ horizontalAlign: BI.HorizontalAlign.Center - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); } if (supportFlex) { return BI.extend({ horizontalAlign: BI.HorizontalAlign.Center, scrollx: false - }, ob, {type: "bi.flex_horizontal"}); + }, ob, { type: "bi.flex_horizontal" }); } return BI.extend({ horizontalAlign: BI.HorizontalAlign.Center - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); }); BI.Plugin.configWidget("bi.horizontal_float", function (ob) { if (isSupportFlex()) { - return BI.extend({}, ob, {type: "bi.flex_horizontal_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_horizontal_adapt" }); } if (ob.items && ob.items.length <= 1) { - return BI.extend({}, ob, {type: "bi.inline_horizontal_adapt"}); + return BI.extend({}, ob, { type: "bi.inline_horizontal_adapt" }); } return ob; }); @@ -162,16 +162,16 @@ BI.prepares.push(function () { horizontalAlign: BI.HorizontalAlign.Stretch, verticalAlign: BI.VerticalAlign.Stretch, scrollx: false - }, ob, {type: "bi.flex_horizontal"}); + }, ob, { type: "bi.flex_horizontal" }); } if ((ob.horizontalAlign && ob.horizontalAlign !== BI.HorizontalAlign.Stretch) || (ob.scrollable === true || ob.scrollx === true)) { // 宽度不受限,要用table布局 return BI.extend({ horizontalAlign: BI.HorizontalAlign.Stretch, verticalAlign: BI.VerticalAlign.Stretch - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); } - return BI.extend({}, ob, {type: "bi.horizontal_float_fill"}); + return BI.extend({}, ob, { type: "bi.horizontal_float_fill" }); }); BI.Plugin.configWidget("bi.vertical_fill", function (ob) { if (isSupportFlex()) { @@ -179,7 +179,7 @@ BI.prepares.push(function () { horizontalAlign: BI.HorizontalAlign.Stretch, verticalAlign: BI.VerticalAlign.Stretch, scrolly: false - }, ob, {type: "bi.flex_vertical"}); + }, ob, { type: "bi.flex_vertical" }); } if (ob.scrollable === true || ob.scrollx === true || ob.scrolly === true) { // 有滚动条,降级到table布局处理 @@ -204,18 +204,18 @@ BI.prepares.push(function () { } if (hasAuto) { // 有自动高的时候 - return BI.extend({}, ob, {type: "bi.vtape_auto"}); + return BI.extend({}, ob, { type: "bi.vtape_auto" }); } - return BI.extend({}, ob, {type: "bi.vtape"}); + return BI.extend({}, ob, { type: "bi.vtape" }); }); BI.Plugin.configWidget("bi.horizontal_sticky", function (ob) { if (!isSupportSticky) { - return BI.extend({ scrollx: true }, ob, {type: "bi.horizontal_fill"}); + return BI.extend({ scrollx: true }, ob, { type: "bi.horizontal_fill" }); } }); BI.Plugin.configWidget("bi.vertical_sticky", function (ob) { if (!isSupportSticky) { - return BI.extend({ scrolly: true }, ob, {type: "bi.vertical_fill"}); + return BI.extend({ scrolly: true }, ob, { type: "bi.vertical_fill" }); } }); @@ -223,7 +223,7 @@ BI.prepares.push(function () { if (isSupportFlex()) { // IE下其实也是可以使用flex布局的,只要排除掉出现滚动条的情况 // if (!BI.isIE() || (ob.scrollable !== true && ob.scrolly !== true)) { - return BI.extend({}, ob, {type: "bi.flex_left_right_vertical_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_left_right_vertical_adapt" }); // } } return ob; @@ -232,40 +232,40 @@ BI.prepares.push(function () { if (ob.scrollable === true || ob.scrollx !== false) { if (ob.hgap > 0 || ob.lgap > 0 || ob.rgap > 0) { if (BI.Providers.getProvider("bi.provider.system").getResponsiveMode()) { - return BI.extend({}, ob, {type: "bi.responsive_flex_scrollable_horizontal"}); + return BI.extend({}, ob, { type: "bi.responsive_flex_scrollable_horizontal" }); } - return BI.extend({}, ob, {type: "bi.flex_scrollable_horizontal"}); + return BI.extend({}, ob, { type: "bi.flex_scrollable_horizontal" }); } } if (BI.Providers.getProvider("bi.provider.system").getResponsiveMode()) { - return BI.extend({}, ob, {type: "bi.responsive_flex_horizontal"}); + return BI.extend({}, ob, { type: "bi.responsive_flex_horizontal" }); } }); BI.Plugin.configWidget("bi.flex_vertical", function (ob) { if (ob.scrollable === true || ob.scrollx === true) { if (ob.hgap > 0 || ob.lgap > 0 || ob.rgap > 0) { - return BI.extend({}, ob, {type: "bi.flex_scrollable_vertical"}); + return BI.extend({}, ob, { type: "bi.flex_scrollable_vertical" }); } } }); BI.Plugin.configWidget("bi.table", function (ob) { if (!isSupportGrid()) { - return BI.extend({}, ob, {type: "bi.td"}); + return BI.extend({}, ob, { type: "bi.td" }); } return ob; }); BI.Plugin.configWidget("bi.radio", function (ob) { if (BI.isIE() && BI.getIEVersion() <= 9) { - return BI.extend({}, ob, {type: "bi.image_radio"}); + return BI.extend({}, ob, { type: "bi.image_radio" }); } return ob; }); BI.Plugin.configWidget("bi.checkbox", function (ob) { if (BI.isIE() && BI.getIEVersion() <= 9) { - return BI.extend({}, ob, {type: "bi.image_checkbox"}); + return BI.extend({}, ob, { type: "bi.image_checkbox" }); } return ob; }); @@ -274,6 +274,6 @@ BI.prepares.push(function () { if (BI.isIE() && BI.getIEVersion() < 9) { return ob; } - return BI.extend({}, ob, {type: "bi.half_button"}); + return BI.extend({}, ob, { type: "bi.half_button" }); }); -}); +}()); diff --git a/src/core/utils/i18n.js b/src/core/utils/i18n.js index 9cec7cc48..8611ec0a9 100644 --- a/src/core/utils/i18n.js +++ b/src/core/utils/i18n.js @@ -1,5 +1,8 @@ !(function () { var i18nStore = {}; + + var i18nFormatters = {}; + BI._.extend(BI, { changeI18n: function (i18n) { if (i18n) { @@ -9,6 +12,7 @@ addI18n: function (i18n) { BI.extend(i18nStore, i18n); }, + i18nText: function (key) { var localeText = i18nStore[key] || (BI.i18n && BI.i18n[key]) || ""; if (!localeText) { @@ -16,10 +20,18 @@ } var len = arguments.length; if (len > 1) { - if (localeText.indexOf("{R1}") > -1) { + if (localeText.indexOf("{R1") > -1) { for (var i = 1; i < len; i++) { - var key = "{R" + i + "}"; - localeText = BI.replaceAll(localeText, key, arguments[i] + ""); + var reg = new RegExp(`{R${i},(.*?)}`, "g"); + + var result = reg.exec(localeText); + + if (result) { + var formatName = result[1]; + localeText = BI.replaceAll(localeText, reg, i18nFormatters[formatName](key, arguments[i])); + } else { + localeText = BI.replaceAll(localeText, `{R${i}}`, arguments[i] + ""); + } } } else { var args = Array.prototype.slice.call(arguments); @@ -30,6 +42,10 @@ } } return localeText; + }, + + addI18nFormatter: function (formatName, fn) { + i18nFormatters[formatName] = fn; } }); })(); diff --git a/src/less/base/single/button/item.singleselect.icontext.less b/src/less/base/single/button/item.singleselect.icontext.less deleted file mode 100644 index 2f698d894..000000000 --- a/src/less/base/single/button/item.singleselect.icontext.less +++ /dev/null @@ -1,9 +0,0 @@ -@import "../../../index.less"; - -.bi-single-select-icon-text-item{ - &:active, &.active { - & .b-font:before { - color: @color-bi-text-active-single-select-icon-text-item; - } - } -} \ No newline at end of file diff --git a/src/less/base/single/input/radio.less b/src/less/base/single/input/radio.less index 8e48818e7..0a3345e42 100644 --- a/src/less/base/single/input/radio.less +++ b/src/less/base/single/input/radio.less @@ -18,13 +18,13 @@ border-color: @color-bi-border-hover-active-radio; background-color: @color-bi-background-active-radio; &:after { - width: 6px; - height: 6px; + width: 8px; + height: 8px; display: table; position: absolute; top: 50%; left: 50%; - .border-radius(3px); + .border-radius(4px); background-color: @color-bi-background-active-radio-content; .transform(translate(-50%, -50%)); @transition: all .1s cubic-bezier(.71,-.46,.88,.6),opacity .1s; diff --git a/src/less/base/tree/ztree.less b/src/less/base/tree/ztree.less index 9291efa27..6f6fa77c7 100644 --- a/src/less/base/tree/ztree.less +++ b/src/less/base/tree/ztree.less @@ -50,7 +50,7 @@ &:before { border-left: 1px solid @border-color-dark-gray-line; height: 100%; - left: 15px; + left: 14px; margin-top: 0; } } @@ -92,7 +92,7 @@ } .ztree.solid li a { - height: 32px; + height: 30px; } .ztree li a.curSelectedNode { @@ -143,7 +143,7 @@ } .ztree.solid li span { - line-height: 32px; + line-height: 30px; } .ztree li span.icon { @@ -282,8 +282,8 @@ } .ztree.solid li span.button.switch { - width: 32px; - height: 32px + width: 30px; + height: 30px } .ztree li span.button.switch.noline_open { diff --git a/src/less/widget/multiselect/multiselect.combo.less b/src/less/widget/multiselect/multiselect.combo.less index 0399dd67a..fb8942963 100644 --- a/src/less/widget/multiselect/multiselect.combo.less +++ b/src/less/widget/multiselect/multiselect.combo.less @@ -1,9 +1,12 @@ @import "../../index.less"; + @val: transform .3s ease; -.bi-multi-select-combo{ - & .multi-select-trigger-icon-button{ + +.bi-multi-select-combo, .bi-multi-select-combo-no-bar { + & .multi-select-trigger-icon-button { font-size: @font-size-16; } + // 此combo的trigger_button是absolute上去的,与bi-combo在同一层级,独立写一下 & .bi-combo.bi-combo-popup + .bi-trigger-icon-button { & .x-icon { @@ -11,6 +14,7 @@ .transition(@val); } } + & .bi-combo + .bi-trigger-icon-button { & .x-icon { .rotate(0deg); diff --git a/src/widget/downlist/item.downlist.js b/src/widget/downlist/item.downlist.js index 068c94fab..531806ca0 100644 --- a/src/widget/downlist/item.downlist.js +++ b/src/widget/downlist/item.downlist.js @@ -33,17 +33,21 @@ BI.DownListItem = BI.inherit(BI.BasicButton, { keyword: o.keyword, height: o.height }); + + + var icon = BI.isPlainObject(o.icon) ? o.icon : { + type: "bi.icon", + width: o.iconWidth, + height: o.iconHeight, + } + this.icon = BI.createWidget({ type: "bi.center_adapt", width: 36, height: o.height, items: [{ - el: { - type: "bi.icon", - width: o.iconWidth, - height: o.iconHeight - } - }] + el: icon, + }], }); BI.createWidget(BI.extend({ diff --git a/src/widget/downlist/item.downlistgroup.js b/src/widget/downlist/item.downlistgroup.js index e142a72b7..df4a09ac7 100644 --- a/src/widget/downlist/item.downlistgroup.js +++ b/src/widget/downlist/item.downlistgroup.js @@ -8,11 +8,11 @@ BI.DownListGroupItem = BI.inherit(BI.BasicButton, { }, // invalid: true, iconCls1: "dot-e-font", + icon: "", iconCls2: "pull-right-e-font" }); }, - _init: function () { - BI.DownListGroupItem.superclass._init.apply(this, arguments); + render: function () { var o = this.options; var self = this; this.text = BI.createWidget({ @@ -21,20 +21,29 @@ BI.DownListGroupItem = BI.inherit(BI.BasicButton, { textAlign: "left", text: o.text, value: o.value, - height: o.height - }); - - this.icon1 = BI.createWidget({ - type: "bi.icon_button", - cls: o.iconCls1, - width: 36, height: o.height, - iconHeight: o.iconHeight, - iconWidth: 36, - disableSelected: true, - selected: this._digest(o.value) }); + if (BI.isPlainObject(o.icon)) { + this.icon1 = BI.createWidget({ + width: 36, + height: o.height, + type: "bi.center_adapt", + items: [o.icon], + }); + } else { + this.icon1 = BI.createWidget({ + type: "bi.icon_button", + cls: o.iconCls1, + width: 36, + height: o.height, + iconHeight: o.iconHeight, + iconWidth: 36, + disableSelected: true, + selected: this._digest(o.value), + }); + } + this.icon2 = BI.createWidget({ type: "bi.icon_button", cls: o.iconCls2, @@ -42,27 +51,6 @@ BI.DownListGroupItem = BI.inherit(BI.BasicButton, { forceNotSelected: true }); - var blank = BI.createWidget({ - type: "bi.layout", - width: 24 - }); - BI.createWidget({ - type: "bi.absolute", - element: this, - items: [{ - el: this.icon2, - top: 0, - bottom: 0, - right: 0 - }] - }); - - BI.createWidget(BI.extend({ - element: this - }, BI.LogicFactory.createLogic("horizontal", BI.extend(o.logic, { - items: BI.LogicFactory.createLogicItemsByDirection("left", this.icon1, this.text, blank) - })))); - this.element.hover(function () { if (self.isEnabled()) { self.hover(); @@ -72,6 +60,12 @@ BI.DownListGroupItem = BI.inherit(BI.BasicButton, { self.dishover(); } }); + + return { + type: "bi.horizontal_fill", + columnSize: [36, "fill", 24], + items: [this.icon1, this.text, this.icon2] + } }, _getLevel: function () { @@ -117,8 +111,8 @@ BI.DownListGroupItem = BI.inherit(BI.BasicButton, { }, setValue: function (v) { - this.icon1.setSelected(this._digest(v)); - } + this.icon1.setSelected && this.icon1.setSelected(this._digest(v)); + }, }); BI.DownListGroupItem.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.down_list_group_item", BI.DownListGroupItem); \ No newline at end of file +BI.shortcut("bi.down_list_group_item", BI.DownListGroupItem); diff --git a/src/widget/multilayerselecttree/multilayerselecttree.combo.js b/src/widget/multilayerselecttree/multilayerselecttree.combo.js index 9f5a4afcb..e748ee1c5 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.combo.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.combo.js @@ -13,7 +13,6 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { defaultText: "", itemsCreator: BI.emptyFn, items: [], - value: "", allowEdit: false, allowSearchValue: false, allowInsertValue: false, @@ -289,4 +288,4 @@ BI.MultiLayerSelectTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiLayerSelectTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSelectTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; BI.MultiLayerSelectTreeCombo.EVENT_CLICK_ITEM = "EVENT_CLICK_ITEM"; -BI.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo); \ No newline at end of file +BI.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo); diff --git a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js index c094bac9e..08f9f9a9e 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js @@ -42,7 +42,7 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { self.editor = this; }, defaultText: o.defaultText, - text: this._digest(o.value), + text: BI.isKey(o.value) ? this._digest(o.value) : o.text, value: o.value, height: o.height, tipText: "", diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index f6a8d2718..364f1e008 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -16,7 +16,6 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { defaultText: "", itemsCreator: BI.emptyFn, items: [], - value: "", allowEdit: false, allowSearchValue: false, allowInsertValue: false, @@ -263,4 +262,4 @@ BI.MultiLayerSingleTreeCombo.EVENT_FOCUS = "EVENT_FOCUS"; BI.MultiLayerSingleTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiLayerSingleTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSingleTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; -BI.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo); \ No newline at end of file +BI.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo); diff --git a/src/widget/multilayersingletree/multilayersingletree.trigger.js b/src/widget/multilayersingletree/multilayersingletree.trigger.js index 1ede397e2..b4f5c8dd9 100644 --- a/src/widget/multilayersingletree/multilayersingletree.trigger.js +++ b/src/widget/multilayersingletree/multilayersingletree.trigger.js @@ -42,7 +42,7 @@ BI.MultiLayerSingleTreeTrigger = BI.inherit(BI.Trigger, { self.editor = this; }, defaultText: o.defaultText, - text: this._digest(o.value), + text: BI.isKey(o.value) ? this._digest(o.value) : o.text, value: o.value, height: o.height, tipText: "", diff --git a/src/widget/multiselect/multiselect.combo.nobar.js b/src/widget/multiselect/multiselect.combo.nobar.js index 0fe10f947..b06a40662 100644 --- a/src/widget/multiselect/multiselect.combo.nobar.js +++ b/src/widget/multiselect/multiselect.combo.nobar.js @@ -174,7 +174,7 @@ BI.MultiSelectNoBarCombo = BI.inherit(BI.Single, { value: o.value }, hideChecker: function (e) { - return self.numberCounter.element.find(e.target).length === 0; + return triggerBtn.element.find(e.target).length === 0 && self.numberCounter.element.find(e.target).length === 0; } }); @@ -199,6 +199,21 @@ BI.MultiSelectNoBarCombo = BI.inherit(BI.Single, { } }); + var triggerBtn = BI.createWidget({ + type: "bi.trigger_icon_button", + width: o.height, + height: o.height, + cls: "multi-select-trigger-icon-button" + }); + triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { + self.numberCounter.hideView(); + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } else { + self.combo.showView(); + } + }); + this.numberCounter = BI.createWidget({ type: "bi.multi_select_check_selected_switcher", masker: { @@ -252,6 +267,11 @@ BI.MultiSelectNoBarCombo = BI.inherit(BI.Single, { right: 0, top: 0, bottom: 0 + }, { + el: triggerBtn, + right: 0, + top: 0, + bottom: 0 }, { el: { type: "bi.vertical_adapt", diff --git a/src/widget/multiselect/multiselect.loader.js b/src/widget/multiselect/multiselect.loader.js index 7c45c68c1..3bcde5823 100644 --- a/src/widget/multiselect/multiselect.loader.js +++ b/src/widget/multiselect/multiselect.loader.js @@ -45,6 +45,7 @@ BI.MultiSelectLoader = BI.inherit(BI.Widget, { onLoaded: opts.onLoaded, el: { type: "bi.multi_select_inner_loader", + isDefaultInit: false, } }, opts.el), itemsCreator: function (op, callback) { diff --git a/src/widget/singleselect/trigger/searcher.singleselect.js b/src/widget/singleselect/trigger/searcher.singleselect.js index aa5ece93b..a5674b8f1 100644 --- a/src/widget/singleselect/trigger/searcher.singleselect.js +++ b/src/widget/singleselect/trigger/searcher.singleselect.js @@ -125,9 +125,10 @@ BI.SingleSelectSearcher = BI.inherit(BI.Widget, { setState: function (v) { var o = this.options; - if (BI.isNull(v)) { + if (BI.isUndefined(v)) { this.editor.setState(BI.Selection.None); } else { + v = v || ""; this.editor.setState(o.valueFormatter(v + "") || (v + "")); } }, diff --git a/typescript/base/single/button/buttons/button.ts b/typescript/base/single/button/buttons/button.ts index 55f62ef8b..102db20cb 100644 --- a/typescript/base/single/button/buttons/button.ts +++ b/typescript/base/single/button/buttons/button.ts @@ -10,10 +10,16 @@ export declare class Button extends BasicButton { minWidth?: number; readonly?: boolean; iconCls?: string; - level?: 'common' | 'success' | 'warning' |'ignore', + level?: 'common' | 'success' | 'warning' | 'error' | 'ignore', block?: boolean; // 是否块状显示,即不显示边框,没有最小宽度的限制 + loading?: boolean, // 是否处于加载中 + light?: boolean, // 是否使用浅色 + plain?: boolean, // 是否是朴素按钮,和 clear 的区别是 plain 有悬浮效果 clear?: boolean; // 是否去掉边框和背景 ghost?: boolean; // 是否幽灵显示, 即正常状态无背景 + iconGap?: number; + iconPosition?: string; + textWidth?: number; } & AbstractLabel['props'] & IconLabel['props'] & BasicButton['props']; text: Label; @@ -26,4 +32,12 @@ export declare class Button extends BasicButton { doHighLight(...args: any[]): void; unHighLight(...args: any[]): void; + + loading(): void; + + loaded(): void; + + setIcon(iconCls: string): void; + + isLoading(): boolean; }