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;
}