|
|
|
@ -3,6 +3,8 @@
|
|
|
|
|
return position === "top" || position === "bottom"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var loadingCls = "button-loading-font anim-rotate"; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 文字类型的按钮 |
|
|
|
|
* @class BI.Button |
|
|
|
@ -54,7 +56,7 @@
|
|
|
|
|
whiteSpace: "nowrap", |
|
|
|
|
textWidth: null, |
|
|
|
|
textHeight: null, |
|
|
|
|
hgap: props.clear ? 0 : 10, |
|
|
|
|
hgap: props.clear ? 0 : (props.plain && !props.text ? 4 : 10), |
|
|
|
|
vgap: 0, |
|
|
|
|
tgap: 0, |
|
|
|
|
bgap: 0, |
|
|
|
@ -86,71 +88,64 @@
|
|
|
|
|
textHeight = lineHeight; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
if (BI.isKey(o.iconCls)) { |
|
|
|
|
this.icon = BI.createWidget({ |
|
|
|
|
type: "bi.icon_label", |
|
|
|
|
cls: o.iconCls, |
|
|
|
|
width: this._const.iconWidth, |
|
|
|
|
height: lineHeight, |
|
|
|
|
lineHeight: lineHeight, |
|
|
|
|
// 不设置,自定义按钮无法居中
|
|
|
|
|
iconWidth: o.iconWidth, |
|
|
|
|
iconHeight: o.iconHeight |
|
|
|
|
}); |
|
|
|
|
this.text = BI.createWidget({ |
|
|
|
|
type: "bi.label", |
|
|
|
|
text: o.text, |
|
|
|
|
textWidth: BI.isNotNull(o.textWidth) ? o.textWidth - this._const.iconWidth : null, |
|
|
|
|
textHeight: textHeight, |
|
|
|
|
height: lineHeight, |
|
|
|
|
value: o.value |
|
|
|
|
}); |
|
|
|
|
var layoutType = "bi.horizontal"; |
|
|
|
|
var gapContainer = { |
|
|
|
|
lgap: o.iconPosition === "left" && o.text ? o.iconGap : 0, |
|
|
|
|
rgap: o.iconPosition === "right" ? o.iconGap : 0, |
|
|
|
|
tgap: o.iconPosition === "top" ? o.iconGap : 0, |
|
|
|
|
bgap: o.iconPosition === "bottom" ? o.iconGap : 0 |
|
|
|
|
}; |
|
|
|
|
var items = [this.icon, BI.extend({ el: this.text }, gapContainer)]; |
|
|
|
|
if (isVertical(o.iconPosition)) { |
|
|
|
|
layoutType = "bi.vertical"; |
|
|
|
|
} |
|
|
|
|
if (o.iconPosition === "right" || o.iconPosition === "bottom") { |
|
|
|
|
items = [BI.extend({ el: this.text }, gapContainer), this.icon]; |
|
|
|
|
} |
|
|
|
|
BI.createWidget({ |
|
|
|
|
type: "bi.center_adapt", |
|
|
|
|
element: this, |
|
|
|
|
hgap: o.hgap, |
|
|
|
|
vgap: o.vgap, |
|
|
|
|
items: [{ |
|
|
|
|
type: layoutType, |
|
|
|
|
horizontalAlign: "center", |
|
|
|
|
verticalAlign: "middle", |
|
|
|
|
items: items |
|
|
|
|
}] |
|
|
|
|
}); |
|
|
|
|
} else { |
|
|
|
|
this.text = BI.createWidget({ |
|
|
|
|
type: "bi.label", |
|
|
|
|
height: o.height, |
|
|
|
|
textAlign: o.textAlign, |
|
|
|
|
whiteSpace: o.whiteSpace, |
|
|
|
|
textWidth: o.textWidth, |
|
|
|
|
textHeight: textHeight, |
|
|
|
|
hgap: o.hgap, |
|
|
|
|
vgap: o.vgap, |
|
|
|
|
tgap: o.tgap, |
|
|
|
|
bgap: o.bgap, |
|
|
|
|
lgap: o.lgap, |
|
|
|
|
rgap: o.rgap, |
|
|
|
|
element: this, |
|
|
|
|
text: o.text, |
|
|
|
|
value: o.value, |
|
|
|
|
title: null, |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
var iconInvisible = !o.loading && !o.iconCls; |
|
|
|
|
this.icon = BI.createWidget({ |
|
|
|
|
type: "bi.icon_label", |
|
|
|
|
cls: o.loading ? loadingCls : o.iconCls, |
|
|
|
|
width: this._const.iconWidth, |
|
|
|
|
height: lineHeight, |
|
|
|
|
lineHeight: lineHeight, |
|
|
|
|
// 不设置,自定义按钮无法居中
|
|
|
|
|
iconWidth: o.iconWidth, |
|
|
|
|
iconHeight: o.iconHeight, |
|
|
|
|
invisible: iconInvisible |
|
|
|
|
}); |
|
|
|
|
// 用于 whiteSpace
|
|
|
|
|
var textWidth = iconInvisible && o.width ? o.width - o.hgap * 2 : null; |
|
|
|
|
if (BI.isNotNull(o.textWidth)) { |
|
|
|
|
// textWidth 需要减去图标
|
|
|
|
|
textWidth = o.textWidth - (iconInvisible || isVertical(o.iconPosition) ? 0 : this._const.iconWidth); |
|
|
|
|
} |
|
|
|
|
this.text = BI.createWidget({ |
|
|
|
|
type: "bi.label", |
|
|
|
|
text: o.text, |
|
|
|
|
whiteSpace: o.whiteSpace, |
|
|
|
|
textAlign: o.textAlign, |
|
|
|
|
textWidth: textWidth, |
|
|
|
|
textHeight: textHeight, |
|
|
|
|
height: lineHeight, |
|
|
|
|
value: o.value, |
|
|
|
|
title: null |
|
|
|
|
}); |
|
|
|
|
var layoutType = "bi.horizontal"; |
|
|
|
|
var gapContainer = { |
|
|
|
|
lgap: o.iconPosition === "left" && o.text ? o.iconGap : 0, |
|
|
|
|
rgap: o.iconPosition === "right" ? o.iconGap : 0, |
|
|
|
|
tgap: o.iconPosition === "top" ? o.iconGap : 0, |
|
|
|
|
bgap: o.iconPosition === "bottom" ? o.iconGap : 0 |
|
|
|
|
}; |
|
|
|
|
var items = [this.icon, BI.extend({el: this.text}, gapContainer)]; |
|
|
|
|
if (isVertical(o.iconPosition)) { |
|
|
|
|
layoutType = "bi.vertical"; |
|
|
|
|
} |
|
|
|
|
if (o.iconPosition === "right" || o.iconPosition === "bottom") { |
|
|
|
|
items = [BI.extend({el: this.text}, gapContainer), this.icon]; |
|
|
|
|
} |
|
|
|
|
// bi.center_adapt 作用:让 hgap 不影响 iconGap。
|
|
|
|
|
BI.createWidget({ |
|
|
|
|
type: "bi.center_adapt", |
|
|
|
|
element: this, |
|
|
|
|
hgap: o.hgap, |
|
|
|
|
vgap: o.vgap, |
|
|
|
|
items: [{ |
|
|
|
|
type: layoutType, |
|
|
|
|
horizontalAlign: "center", |
|
|
|
|
verticalAlign: "middle", |
|
|
|
|
items: items |
|
|
|
|
}] |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
var classArr = ["block", "clear", "ghost", "plain", "loading", "light"]; |
|
|
|
|
// 如果 options 对应的属性为 true 则给元素添加 class
|
|
|
|
|
BI.each(classArr, function (_, clz) { |
|
|
|
@ -160,7 +155,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}); |
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
@ -180,12 +175,27 @@
|
|
|
|
|
} |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
setLoading: function (loading) { |
|
|
|
|
if (loading) { |
|
|
|
|
this.element.addClass("loading"); |
|
|
|
|
} else { |
|
|
|
|
this.element.removeClass("loading"); |
|
|
|
|
} |
|
|
|
|
beforeClick: function () { |
|
|
|
|
return this.isLoading(); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
isLoading() { |
|
|
|
|
return this._loading === undefined ? this.options.loading : this._loading; |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
loading: function (loading) { |
|
|
|
|
this._loading = true; |
|
|
|
|
this.element.addClass("loading"); |
|
|
|
|
// loadingCls 可以覆盖 iconCls 所以不需要移除 iconCls
|
|
|
|
|
this.icon.element.addClass(loadingCls); |
|
|
|
|
this.icon.setVisible(true); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
loaded() { |
|
|
|
|
this._loading = false; |
|
|
|
|
this.element.removeClass("loading"); |
|
|
|
|
this.icon.element.removeClass(loadingCls); |
|
|
|
|
this.icon.setVisible(!!this.options.iconCls); |
|
|
|
|
}, |
|
|
|
|
|
|
|
|
|
setText: function (text) { |
|
|
|
|