forked from fanruan/fineui
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.7 KiB
154 lines
4.7 KiB
/** |
|
* 当没有元素时有提示信息的view |
|
* |
|
* Created by GUY on 2015/9/8. |
|
* @class BI.Pane |
|
* @extends BI.Widget |
|
* @abstract |
|
*/ |
|
BI.Pane = BI.inherit(BI.Widget, { |
|
|
|
_defaultConfig: function () { |
|
return BI.extend(BI.Pane.superclass._defaultConfig.apply(this, arguments), { |
|
_baseCls: "bi-pane", |
|
tipText: BI.i18nText("BI-No_Selected_Item"), |
|
loadingText: "", |
|
loadingSize: "small", |
|
overlap: true, |
|
onLoaded: BI.emptyFn |
|
}); |
|
}, |
|
|
|
_assertTip: function () { |
|
var self = this, o = this.options; |
|
if (!this._tipText) { |
|
BI.createWidget({ |
|
type: "bi.absolute_center_adapt", |
|
element: this, |
|
items: [{ |
|
type: "bi.label", |
|
ref: function (_ref) { |
|
self._tipText = _ref; |
|
}, |
|
cls: "bi-tips", |
|
text: o.tipText, |
|
height: 25 |
|
}] |
|
}); |
|
} |
|
}, |
|
|
|
loading: function () { |
|
var self = this, o = this.options; |
|
var isIE = BI.isIE(); |
|
var loadingAnimation = BI.createWidget({ |
|
type: "bi.horizontal", |
|
cls: "bi-loading-widget" + (isIE ? " wave-loading hack" : ""), |
|
height: this._getSize(60), |
|
width: this._getSize(60), |
|
hgap: this._getSize(10), |
|
vgap: 2.5, |
|
items: isIE ? [] : [{ |
|
type: "bi.layout", |
|
cls: "animate-rect rect1", |
|
height: this._getSize(50), |
|
width: this._getSize(5) |
|
}, { |
|
type: "bi.layout", |
|
cls: "animate-rect rect2", |
|
height: this._getSize(50), |
|
width: this._getSize(5) |
|
}, { |
|
type: "bi.layout", |
|
cls: "animate-rect rect3", |
|
height: this._getSize(50), |
|
width: this._getSize(5) |
|
}] |
|
}); |
|
// pane在同步方式下由items决定tipText的显示与否 |
|
// loading的异步情况下由loaded后对面板的populate的时机决定 |
|
this.setTipVisible(false); |
|
if (o.overlap === true) { |
|
if (!BI.Layers.has(this.getName() + "-loading")) { |
|
BI.createWidget({ |
|
type: "bi.center_adapt", |
|
cls: "loading-container", |
|
items: this._getLoadingTipItems(loadingAnimation), |
|
element: BI.Layers.make(this.getName() + "-loading", this) |
|
}); |
|
} |
|
BI.Layers.show(self.getName() + "-loading"); |
|
} else if (BI.isNull(this._loading)) { |
|
loadingAnimation.element.css("zIndex", 1); |
|
BI.createWidget({ |
|
type: "bi.center_adapt", |
|
element: this, |
|
cls: "loading-container", |
|
items: this._getLoadingTipItems(loadingAnimation) |
|
}); |
|
} |
|
self.fireEvent(BI.Pane.EVENT_LOADING); |
|
this.element.addClass("loading-status"); |
|
}, |
|
|
|
_getSize: function (v) { |
|
return Math.ceil(v / (this.options.loadingSize === "small" ? 2 : 1)); |
|
}, |
|
|
|
_getLoadingTipItems: function (loadingTip) { |
|
var self = this, o = this.options; |
|
var loadingTipItems = [{ |
|
type: "bi.horizontal_adapt", |
|
items: [loadingTip] |
|
}]; |
|
BI.isNotEmptyString(o.loadingText) && loadingTipItems.push({ |
|
type: "bi.text", |
|
text: o.loadingText, |
|
tgap: this._getSize(10) |
|
}); |
|
|
|
return [{ |
|
type: "bi.vertical", |
|
ref: function (_ref) { |
|
self._loading = _ref; |
|
}, |
|
items: loadingTipItems |
|
}]; |
|
}, |
|
|
|
loaded: function () { |
|
var self = this, o = this.options; |
|
BI.Layers.remove(self.getName() + "-loading"); |
|
this._loading && this._loading.destroy(); |
|
o.onLoaded(); |
|
self.fireEvent(BI.Pane.EVENT_LOADED); |
|
this.element.removeClass("loading-status"); |
|
}, |
|
|
|
check: function () { |
|
this.setTipVisible(BI.isEmpty(this.options.items)); |
|
}, |
|
|
|
setTipVisible: function (b) { |
|
if (b === true) { |
|
this._assertTip(); |
|
this._tipText && this._tipText.setVisible(true); |
|
} else { |
|
this._tipText && this._tipText.setVisible(false); |
|
} |
|
}, |
|
|
|
setTipText: function (text) { |
|
this._assertTip(); |
|
this._tipText.setText(text); |
|
}, |
|
|
|
populate: function (items) { |
|
this.options.items = items || []; |
|
this.check(); |
|
} |
|
}); |
|
BI.Pane.EVENT_LOADED = "EVENT_LOADED"; |
|
BI.Pane.EVENT_LOADING = "EVENT_LOADING"; |
|
|
|
BI.shortcut("bi.pane", BI.Pane);
|
|
|