diff --git a/bi/case.js b/bi/case.js
new file mode 100644
index 000000000..12bf21a21
--- /dev/null
+++ b/bi/case.js
@@ -0,0 +1,13987 @@
+/**
+ * 可以改变图标的button
+ *
+ * Created by GUY on 2016/2/2.
+ *
+ * @class BI.IconChangeButton
+ * @extends BI.Single
+ */
+BI.IconChangeButton = BI.inherit(BI.Single, {
+ _defaultConfig: function () {
+ var conf = BI.IconChangeButton.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: "bi-icon-change-button",
+ iconClass: "",
+ iconWidth: null,
+ iconHeight: null,
+
+ stopEvent: false,
+ stopPropagation: false,
+ selected: false,
+ once: false, //点击一次选中有效,再点无效
+ forceSelected: false, //点击即选中, 选中了就不会被取消
+ forceNotSelected: false, //无论怎么点击都不会被选中
+ disableSelected: false, //使能选中
+
+ shadow: false,
+ isShadowShowingOnSelected: false, //选中状态下是否显示阴影
+ trigger: null,
+ handler: BI.emptyFn
+ })
+ },
+
+ _init: function () {
+ BI.IconChangeButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.button = BI.createWidget({
+ type: "bi.icon_button",
+ element: this,
+ cls: o.iconClass,
+ height: o.height,
+ iconWidth: o.iconWidth,
+ iconHeight: o.iconHeight,
+
+ stopEvent: o.stopEvent,
+ stopPropagation: o.stopPropagation,
+ selected: o.selected,
+ once: o.once,
+ forceSelected: o.forceSelected,
+ forceNotSelected: o.forceNotSelected,
+ disableSelected: o.disableSelected,
+
+ shadow: o.shadow,
+ isShadowShowingOnSelected: o.isShadowShowingOnSelected,
+ trigger: o.trigger,
+ handler: o.handler
+ });
+
+ this.button.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.button.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.fireEvent(BI.IconChangeButton.EVENT_CHANGE, arguments);
+ });
+ },
+
+ isSelected: function () {
+ return this.button.isSelected();
+ },
+
+ setSelected: function (b) {
+ this.button.setSelected(b);
+ },
+
+ setIcon: function (cls) {
+ var o = this.options;
+ if (o.iconClass !== cls) {
+ this.element.removeClass(o.iconClass).addClass(cls);
+ o.iconClass = cls;
+ }
+ }
+});
+BI.IconChangeButton.EVENT_CHANGE = "IconChangeButton.EVENT_CHANGE";
+BI.shortcut("bi.icon_change_button", BI.IconChangeButton);/**
+ * guy
+ * @extends BI.Single
+ * @type {*|void|Object}
+ */
+BI.HalfIconButton = BI.inherit(BI.IconButton, {
+ _defaultConfig: function() {
+ var conf = BI.HalfIconButton.superclass._defaultConfig.apply(this,arguments);
+ return BI.extend(conf, {
+ extraCls: "bi-half-icon-button check-half-select-icon",
+ height: 16,
+ width: 16,
+ iconWidth: 16,
+ iconHeight: 16,
+ selected: false
+ })
+ },
+
+ _init : function() {
+ BI.HalfIconButton.superclass._init.apply(this, arguments);
+ },
+
+ doClick: function(){
+ BI.HalfIconButton.superclass.doClick.apply(this, arguments);
+ if(this.isValid()){
+ this.fireEvent(BI.HalfIconButton.EVENT_CHANGE);
+ }
+ }
+});
+BI.HalfIconButton.EVENT_CHANGE = "HalfIconButton.EVENT_CHANGE";
+
+BI.shortcut("bi.half_icon_button", BI.HalfIconButton);/**
+ * 统一的trigger图标按钮
+ *
+ * Created by GUY on 2015/9/16.
+ * @class BI.TriggerIconButton
+ * @extends BI.IconButton
+ */
+BI.TriggerIconButton = BI.inherit(BI.IconButton, {
+
+ _defaultConfig: function () {
+ var conf = BI.TriggerIconButton.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-trigger-icon-button",
+ extraCls: "pull-down-font"
+ });
+ },
+
+ _init: function () {
+ BI.TriggerIconButton.superclass._init.apply(this, arguments);
+ },
+
+ doClick: function () {
+ BI.TriggerIconButton.superclass.doClick.apply(this, arguments);
+ if (this.isValid()) {
+ this.fireEvent(BI.TriggerIconButton.EVENT_CHANGE, this);
+ }
+ }
+});
+BI.TriggerIconButton.EVENT_CHANGE = "TriggerIconButton.EVENT_CHANGE";
+BI.shortcut("bi.trigger_icon_button", BI.TriggerIconButton);/**
+ * guy
+ * 复选框item
+ * @type {*|void|Object}
+ */
+BI.MultiSelectItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.MultiSelectItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-multi-select-item",
+ height: 25,
+ logic: {
+ dynamic: false
+ }
+ })
+ },
+ _init: function () {
+ BI.MultiSelectItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.checkbox"
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ cls: "list-item-text",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ rgap: o.rgap,
+ text: o.text,
+ keyword: o.keyword,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self.setSelected(self.isSelected());
+ }
+ });
+
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic("horizontal", BI.extend(o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection("left", {
+ type: "bi.center_adapt",
+ items: [this.checkbox],
+ width: 36
+ }, this.text)
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.MultiSelectItem.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ if (this.isValid()) {
+ this.fireEvent(BI.MultiSelectItem.EVENT_CHANGE, this.getValue(), this);
+ }
+ },
+
+ setSelected: function (v) {
+ BI.MultiSelectItem.superclass.setSelected.apply(this, arguments);
+ this.checkbox.setSelected(v);
+ }
+});
+BI.MultiSelectItem.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.multi_select_item", BI.MultiSelectItem);/**
+ * Created by GUY on 2016/2/2.
+ *
+ * @class BI.SingleSelectIconTextItem
+ * @extends BI.BasicButton
+ */
+BI.SingleSelectIconTextItem = BI.inherit(BI.Single, {
+ _defaultConfig: function () {
+ return BI.extend(BI.SingleSelectIconTextItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-single-select-icon-text-item bi-list-item-active",
+ iconClass: "",
+ hgap: 10,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.SingleSelectIconTextItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.text = BI.createWidget({
+ type: "bi.icon_text_item",
+ element: this,
+ cls: o.iconClass,
+ once: o.once,
+ selected: o.selected,
+ height: o.height,
+ iconHeight: o.iconHeight,
+ iconWidth: o.iconWidth,
+ text: o.text,
+ keyword: o.keyword,
+ value: o.value,
+ py: o.py
+ });
+ this.text.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ },
+
+ isSelected: function () {
+ return this.text.isSelected();
+ },
+
+ setSelected: function (b) {
+ this.text.setSelected(b);
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.SingleSelectIconTextItem.superclass.doClick.apply(this, arguments);
+ }
+});
+
+BI.shortcut("bi.single_select_icon_text_item", BI.SingleSelectIconTextItem);/**
+ * guy
+ * 复选框item
+ * @type {*|void|Object}
+ */
+BI.SingleSelectItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.SingleSelectItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-single-select-item bi-list-item-active",
+ hgap: 10,
+ height: 25,
+ textAlign: "left"
+ })
+ },
+ _init: function () {
+ BI.SingleSelectItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.text = BI.createWidget({
+ type: "bi.label",
+ element: this,
+ textAlign: o.textAlign,
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ keyword: o.keyword,
+ value: o.value,
+ py: o.py
+ });
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.SingleSelectItem.superclass.doClick.apply(this, arguments);
+ },
+
+ setSelected: function (v) {
+ BI.SingleSelectItem.superclass.setSelected.apply(this, arguments);
+ }
+});
+
+BI.shortcut("bi.single_select_item", BI.SingleSelectItem);/**
+ * guy
+ * 单选框item
+ * @type {*|void|Object}
+ */
+BI.SingleSelectRadioItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.SingleSelectRadioItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-single-select-radio-item bi-list-item-active",
+ logic: {
+ dynamic: false
+ },
+ hgap: 10,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.SingleSelectRadioItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.radio = BI.createWidget({
+ type: "bi.radio"
+ });
+ this.radio.on(BI.Controller.EVENT_CHANGE, function (type) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ cls: "list-item-text",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ keyword: o.keyword,
+ value: o.value,
+ py: o.py
+ });
+
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic("horizontal", BI.extend(o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection("left", {
+ type: "bi.center_adapt",
+ items: [this.radio],
+ width: 36
+ }, this.text)
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.SingleSelectRadioItem.superclass.doClick.apply(this, arguments);
+ this.radio.setSelected(this.isSelected());
+ },
+
+ setSelected: function (v) {
+ BI.SingleSelectRadioItem.superclass.setSelected.apply(this, arguments);
+ this.radio.setSelected(v);
+
+ }
+});
+
+BI.shortcut("bi.single_select_radio_item", BI.SingleSelectRadioItem);/**
+ * Created by roy on 15/10/16.
+ */
+BI.ArrowNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.ArrowNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-arrow-group-node bi-list-item",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ open: false,
+ height: 25
+ });
+ },
+ _init: function () {
+ var self = this, o = this.options;
+ BI.ArrowNode.superclass._init.apply(this, arguments);
+ this.checkbox = BI.createWidget({
+ type: "bi.arrow_tree_group_node_checkbox",
+ iconWidth: 13,
+ iconHeight: 13
+ });
+
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self.setSelected(self.isSelected());
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 25,
+ el: this.checkbox
+ }, this.text);
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.ArrowNode.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isOpened());
+ },
+ setValue: function (v) {
+ this.text.setValue(v);
+ },
+
+ setOpened: function (v) {
+ BI.ArrowNode.superclass.setOpened.apply(this, arguments);
+ this.checkbox.setSelected(v);
+ }
+});
+
+BI.shortcut("bi.arrow_group_node", BI.ArrowNode);/**
+ * 加号表示的组节点
+ * Created by GUY on 2015/9/6.
+ * @class BI.FirstPlusGroupNode
+ * @extends BI.NodeButton
+ */
+BI.FirstPlusGroupNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.FirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-first-plus-group-node bi-list-item",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ open: false,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.FirstPlusGroupNode.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.first_tree_node_checkbox",
+ stopPropagation: true
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ if (this.isSelected()) {
+ self.triggerExpand();
+ } else {
+ self.triggerCollapse();
+ }
+ }
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 25,
+ el: this.checkbox
+ }, this.text);
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.FirstPlusGroupNode.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ },
+
+ setOpened: function (v) {
+ BI.FirstPlusGroupNode.superclass.setOpened.apply(this, arguments);
+ if (BI.isNotNull(this.checkbox)) {
+ this.checkbox.setSelected(v);
+ }
+ }
+});
+
+BI.shortcut("bi.first_plus_group_node", BI.FirstPlusGroupNode);/**
+ * Created by User on 2016/3/31.
+ */
+/**
+ * > + icon + 文本
+ * @class BI.IconArrowNode
+ * @extends BI.NodeButton
+ */
+BI.IconArrowNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.IconArrowNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-icon-arrow-node bi-list-item",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ open: false,
+ height: 25,
+ iconHeight: 13,
+ iconWidth: 13,
+ iconCls: ""
+ })
+ },
+ _init: function () {
+ BI.IconArrowNode.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.tree_group_node_checkbox",
+ width: 23,
+ stopPropagation: true
+ });
+
+ var icon = BI.createWidget({
+ type: "bi.center_adapt",
+ cls: o.iconCls,
+ width: 23,
+ items: [{
+ type: "bi.icon",
+ height: o.iconHeight,
+ width: o.iconWidth
+ }]
+ });
+
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ if (this.isSelected()) {
+ self.triggerExpand();
+ } else {
+ self.triggerCollapse();
+ }
+ }
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 25,
+ el: this.checkbox
+ }, {
+ width: 23,
+ el: icon
+ }, this.text);
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.IconArrowNode.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ },
+
+ setOpened: function (v) {
+ BI.IconArrowNode.superclass.setOpened.apply(this, arguments);
+ if (BI.isNotNull(this.checkbox)) {
+ this.checkbox.setSelected(v);
+ }
+ }
+});
+
+BI.shortcut("bi.icon_arrow_node", BI.IconArrowNode);/**
+ * 加号表示的组节点
+ * Created by GUY on 2015/9/6.
+ * @class BI.LastPlusGroupNode
+ * @extends BI.NodeButton
+ */
+BI.LastPlusGroupNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.LastPlusGroupNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-last-plus-group-node bi-list-item",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ open: false,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.LastPlusGroupNode.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.last_tree_node_checkbox",
+ stopPropagation: true
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if(type === BI.Events.CLICK) {
+ if (this.isSelected()) {
+ self.triggerExpand();
+ } else {
+ self.triggerCollapse();
+ }
+ }
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 25,
+ el: this.checkbox
+ }, this.text);
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.LastPlusGroupNode.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ },
+
+ setOpened: function (v) {
+ BI.LastPlusGroupNode.superclass.setOpened.apply(this, arguments);
+ if (BI.isNotNull(this.checkbox)) {
+ this.checkbox.setSelected(v);
+ }
+ }
+});
+
+BI.shortcut("bi.last_plus_group_node", BI.LastPlusGroupNode);/**
+ * 加号表示的组节点
+ * Created by GUY on 2015/9/6.
+ * @class BI.MidPlusGroupNode
+ * @extends BI.NodeButton
+ */
+BI.MidPlusGroupNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.MidPlusGroupNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-mid-plus-group-node bi-list-item",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ open: false,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.MidPlusGroupNode.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.mid_tree_node_checkbox",
+ stopPropagation: true
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ if (this.isSelected()) {
+ self.triggerExpand();
+ } else {
+ self.triggerCollapse();
+ }
+ }
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 25,
+ el: this.checkbox
+ }, this.text);
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.MidPlusGroupNode.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ },
+
+ setOpened: function (v) {
+ BI.MidPlusGroupNode.superclass.setOpened.apply(this, arguments);
+ if (BI.isNotNull(this.checkbox)) {
+ this.checkbox.setSelected(v);
+ }
+ }
+});
+
+BI.shortcut("bi.mid_plus_group_node", BI.MidPlusGroupNode);BI.MultiLayerIconArrowNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.MultiLayerIconArrowNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ extraCls: "bi-multilayer-icon-arrow-node bi-list-item",
+ layer: 0,//第几层级
+ id: "",
+ pId: "",
+ open: false,
+ height: 25,
+ iconHeight: 13,
+ iconWidth: 13,
+ iconCls: ""
+ })
+ },
+ _init: function () {
+ BI.MultiLayerIconArrowNode.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.node = BI.createWidget({
+ type: "bi.icon_arrow_node",
+ iconCls: o.iconCls,
+ //logic: {
+ // dynamic: true
+ //},
+ id: o.id,
+ pId: o.pId,
+ open: o.open,
+ height: o.height,
+ iconHeight: o.iconHeight,
+ iconWidth: o.iconWidth,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.node.on(BI.Controller.EVENT_CHANGE, function (type) {
+ self.setSelected(self.isSelected());
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+
+ var items = [];
+ BI.count(0, o.layer, function () {
+ items.push({
+ type: "bi.layout",
+ width: 13,
+ height: o.height
+ })
+ });
+ items.push(this.node);
+ BI.createWidget({
+ type: "bi.td",
+ element: this,
+ columnSize: BI.makeArray(o.layer, 13),
+ items: [items]
+ })
+ },
+
+ isOnce: function () {
+ return true;
+ },
+
+ doRedMark: function () {
+ this.node.doRedMark.apply(this.node, arguments);
+ },
+
+ unRedMark: function () {
+ this.node.unRedMark.apply(this.node, arguments);
+ },
+
+ isSelected: function () {
+ return this.node.isSelected();
+ },
+
+ setSelected: function (b) {
+ BI.MultiLayerIconArrowNode.superclass.setSelected.apply(this, arguments);
+ this.node.setSelected(b);
+ },
+
+ doClick: function () {
+ BI.NodeButton.superclass.doClick.apply(this, arguments);
+ this.node.setSelected(this.isSelected());
+ },
+
+ setOpened: function (v) {
+ BI.MultiLayerIconArrowNode.superclass.setOpened.apply(this, arguments);
+ this.node.setOpened(v);
+ }
+});
+
+BI.shortcut("bi.multilayer_icon_arrow_node", BI.MultiLayerIconArrowNode);/**
+ * 加号表示的组节点
+ * Created by GUY on 2015/9/6.
+ * @class BI.PlusGroupNode
+ * @extends BI.NodeButton
+ */
+BI.PlusGroupNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.PlusGroupNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-plus-group-node bi-list-item",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ open: false,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.PlusGroupNode.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.tree_node_checkbox"
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self.setSelected(self.isSelected());
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 25,
+ el: this.checkbox
+ }, this.text);
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.PlusGroupNode.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ },
+
+ setOpened: function (v) {
+ BI.PlusGroupNode.superclass.setOpened.apply(this, arguments);
+ if (this.checkbox) {
+ this.checkbox.setSelected(v);
+ }
+ }
+});
+
+BI.shortcut("bi.plus_group_node", BI.PlusGroupNode);/**
+ * 三角号表示的组节点
+ * Created by GUY on 2015/9/6.
+ * @class BI.TriangleGroupNode
+ * @extends BI.NodeButton
+ */
+BI.TriangleGroupNode = BI.inherit(BI.NodeButton, {
+ _defaultConfig: function () {
+ var conf = BI.TriangleGroupNode.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-triangle-group-node bi-list-item",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ open: false,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.TriangleGroupNode.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ iconWidth: 13,
+ iconHeight: 13,
+ type: "bi.tree_group_node_checkbox"
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py,
+ keyword: o.keyword
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self.setSelected(self.isSelected());
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 25,
+ el: this.checkbox
+ }, this.text);
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doClick: function () {
+ BI.TriangleGroupNode.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isOpened());
+ },
+
+ setOpened: function (v) {
+ BI.TriangleGroupNode.superclass.setOpened.apply(this, arguments);
+ this.checkbox.setSelected(v);
+ },
+
+ setText: function(text){
+ BI.TriangleGroupNode.superclass.setText.apply(this, arguments);
+ this.text.setText(text);
+ }
+});
+
+BI.shortcut("bi.triangle_group_node", BI.TriangleGroupNode);/**
+ * guy
+ * 复选框item
+ * @type {*|void|Object}
+ */
+BI.FirstTreeLeafItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.FirstTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-first-tree-leaf-item bi-list-item-active",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ layer: 0,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.FirstTreeLeafItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.checkbox"
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self.setSelected(self.isSelected());
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, ((o.layer === 0) ? "" : {
+ width: 13,
+ el: {
+ type: "bi.layout",
+ cls: "base-line-conn-background",
+ width: 13,
+ height: o.height
+ }
+ }), {
+ width: 25,
+ el: {
+ type: "bi.layout",
+ cls: "mid-line-conn-background",
+ width: 25,
+ height: o.height
+ }
+ }, {
+ el: this.text
+ });
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ getId: function () {
+ return this.options.id;
+ },
+
+ getPId: function () {
+ return this.options.pId;
+ },
+
+ doClick: function () {
+ BI.FirstTreeLeafItem.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ },
+
+ setSelected: function (v) {
+ BI.FirstTreeLeafItem.superclass.setSelected.apply(this, arguments);
+ this.checkbox.setSelected(v);
+ }
+});
+
+BI.shortcut("bi.first_tree_leaf_item", BI.FirstTreeLeafItem);BI.IconTreeLeafItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.IconTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-icon-tree-leaf-item bi-list-item-active",
+ logic: {
+ dynamic: false
+ },
+ height: 25,
+ iconWidth: 16,
+ iconHeight: 16,
+ iconCls: ""
+ })
+ },
+
+ _init: function () {
+ BI.IconTreeLeafItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+
+ var icon = BI.createWidget({
+ type: "bi.center_adapt",
+ width: 23,
+ cls: o.iconCls,
+ items: [{
+ type: "bi.icon",
+ width: o.iconWidth,
+ height: o.iconHeight
+ }]
+ });
+
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {
+ width: 23,
+ el: icon
+ }, {
+ el: this.text
+ });
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ getId: function () {
+ return this.options.id;
+ },
+
+ getPId: function () {
+ return this.options.pId;
+ },
+
+ doClick: function () {
+ BI.IconTreeLeafItem.superclass.doClick.apply(this, arguments);
+ },
+
+ setSelected: function (v) {
+ BI.IconTreeLeafItem.superclass.setSelected.apply(this, arguments);
+ }
+});
+
+BI.shortcut("bi.icon_tree_leaf_item", BI.IconTreeLeafItem);/**
+ * guy
+ * 复选框item
+ * @type {*|void|Object}
+ */
+BI.LastTreeLeafItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.LastTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-last-tree-leaf-item bi-list-item-active",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ layer: 0,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.LastTreeLeafItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.checkbox"
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self.setSelected(self.isSelected());
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, ((o.layer === 0) ? "" : {
+ width: 13,
+ el: {
+ type: "bi.layout",
+ cls: "base-line-conn-background",
+ width: 13,
+ height: o.height
+ }
+ }), {
+ width: 25,
+ el: {
+ type: "bi.layout",
+ cls: "mid-line-conn-background",
+ width: 25,
+ height: o.height
+ }
+ }, {
+ el: this.text
+ });
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ getId: function () {
+ return this.options.id;
+ },
+
+ getPId: function () {
+ return this.options.pId;
+ },
+
+ doClick: function () {
+ BI.LastTreeLeafItem.superclass.doClick.apply(this, arguments);
+ // this.checkbox.setSelected(this.isSelected());
+ },
+
+ setSelected: function (v) {
+ BI.LastTreeLeafItem.superclass.setSelected.apply(this, arguments);
+ // this.checkbox.setSelected(v);
+ }
+});
+
+BI.shortcut("bi.last_tree_leaf_item", BI.LastTreeLeafItem);/**
+ * guy
+ * 复选框item
+ * @type {*|void|Object}
+ */
+BI.MidTreeLeafItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.MidTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-mid-tree-leaf-item bi-list-item-active",
+ logic: {
+ dynamic: false
+ },
+ id: "",
+ pId: "",
+ layer: 0,
+ height: 25
+ })
+ },
+ _init: function () {
+ BI.MidTreeLeafItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.checkbox"
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self.setSelected(self.isSelected());
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);
+ var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, ((o.layer === 0) ? "" : {
+ width: 13,
+ el: {
+ type: "bi.layout",
+ cls: "base-line-conn-background",
+ width: 13,
+ height: o.height
+ }
+ }), {
+ width: 25,
+ el: {
+ type: "bi.layout",
+ cls: "mid-line-conn-background",
+ width: 25,
+ height: o.height
+ }
+ }, {
+ el: this.text
+ });
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {
+ items: items
+ }))));
+ },
+
+ doRedMark: function () {
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ getId: function () {
+ return this.options.id;
+ },
+
+ getPId: function () {
+ return this.options.pId;
+ },
+
+ doClick: function () {
+ BI.MidTreeLeafItem.superclass.doClick.apply(this, arguments);
+ this.checkbox.setSelected(this.isSelected());
+ },
+
+ setSelected: function (v) {
+ BI.MidTreeLeafItem.superclass.setSelected.apply(this, arguments);
+ this.checkbox.setSelected(v);
+ }
+});
+
+BI.shortcut("bi.mid_tree_leaf_item", BI.MidTreeLeafItem);/**
+ * @class BI.MultiLayerIconTreeLeafItem
+ * @extends BI.BasicButton
+ */
+BI.MultiLayerIconTreeLeafItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.MultiLayerIconTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-multilayer-icon-tree-leaf-item bi-list-item-active",
+ layer: 0,
+ height: 25,
+ iconCls: "",
+ iconHeight: 14,
+ iconWidth: 12
+ })
+ },
+ _init: function () {
+ BI.MultiLayerIconTreeLeafItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.item = BI.createWidget({
+ type: "bi.icon_tree_leaf_item",
+ cls: "bi-list-item-none",
+ iconCls: o.iconCls,
+ id: o.id,
+ pId: o.pId,
+ isFront: true,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py,
+ iconWidth: o.iconWidth,
+ iconHeight: o.iconHeight
+ });
+ this.item.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {//本身实现click功能
+ return;
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+
+ var items = [];
+ BI.count(0, o.layer, function () {
+ items.push({
+ type: "bi.layout",
+ width: 13,
+ height: o.height
+ })
+ });
+ items.push(this.item);
+ BI.createWidget({
+ type: "bi.td",
+ element: this,
+ columnSize: BI.makeArray(o.layer, 13),
+ items: [items]
+ });
+ },
+
+ doRedMark: function () {
+ this.item.doRedMark.apply(this.item, arguments);
+ },
+
+ unRedMark: function () {
+ this.item.unRedMark.apply(this.item, arguments);
+ },
+
+ doHighLight: function () {
+ this.item.doHighLight.apply(this.item, arguments);
+ },
+
+ unHighLight: function () {
+ this.item.unHighLight.apply(this.item, arguments);
+ },
+
+ getId: function () {
+ return this.options.id;
+ },
+
+ getPId: function () {
+ return this.options.pId;
+ },
+
+ doClick: function () {
+ BI.MultiLayerIconTreeLeafItem.superclass.doClick.apply(this, arguments);
+ this.item.setSelected(this.isSelected());
+ },
+
+ setSelected: function (v) {
+ BI.MultiLayerIconTreeLeafItem.superclass.setSelected.apply(this, arguments);
+ this.item.setSelected(v);
+ },
+
+ getValue: function(){
+ return this.options.value;
+ }
+});
+
+BI.shortcut("bi.multilayer_icon_tree_leaf_item", BI.MultiLayerIconTreeLeafItem);/**
+ * 树叶子节点
+ * Created by GUY on 2015/9/6.
+ * @class BI.TreeTextLeafItem
+ * @extends BI.BasicButton
+ */
+BI.TreeTextLeafItem = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function() {
+ return BI.extend(BI.TreeTextLeafItem.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-tree-text-leaf-item bi-list-item-active",
+ id: "",
+ pId: "",
+ height: 25,
+ hgap: 0,
+ lgap: 0,
+ rgap: 0
+ })
+ },
+ _init : function() {
+ BI.TreeTextLeafItem.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ lgap: o.lgap,
+ rgap: o.hgap,
+ text: o.text,
+ value: o.value,
+ py: o.py
+ });
+ BI.createWidget({
+ type: "bi.htape",
+ element: this,
+ items: [{
+ el: this.text
+ }]
+ })
+ },
+
+ doRedMark: function(){
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function(){
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function(){
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function(){
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ getId: function(){
+ return this.options.id;
+ },
+
+ getPId: function(){
+ return this.options.pId;
+ }
+});
+
+BI.shortcut("bi.tree_text_leaf_item", BI.TreeTextLeafItem);/**
+ * Created by GUY on 2015/8/28.
+ * @class BI.Calendar
+ * @extends BI.Widget
+ */
+BI.Calendar = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.Calendar.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: "bi-calendar",
+ logic: {
+ dynamic: false
+ },
+ min: '1900-01-01', //最小日期
+ max: '2099-12-31', //最大日期
+ year: 2015,
+ month: 7, //7表示八月
+ day: 25
+ })
+ },
+
+ _dateCreator: function (Y, M, D) {
+ var self = this, o = this.options, log = {}, De = Date.getDate();
+ var mins = o.min.match(/\d+/g);
+ var maxs = o.max.match(/\d+/g);
+ Y < (mins[0] | 0) && (Y = (mins[0] | 0));
+ Y > (maxs[0] | 0) && (Y = (maxs[0] | 0));
+
+ De.setFullYear(Y, M, D);
+ log.ymd = [De.getFullYear(), De.getMonth(), De.getDate()];
+
+ var MD = Date._MD.slice(0);
+ MD[1] = Date.isLeap(log.ymd[0]) ? 29 : 28;
+
+ De.setFullYear(log.ymd[0], log.ymd[1], 1);
+ log.FDay = De.getDay();
+
+ log.PDay = MD[M === 0 ? 11 : M - 1] - log.FDay + 1;
+ log.NDay = 1;
+
+ var items = [];
+ BI.each(BI.range(42), function (i) {
+ var td = {}, YY = log.ymd[0], MM = log.ymd[1] + 1, DD;
+ if (i < log.FDay) {
+ td.lastMonth = true;
+ DD = i + log.PDay;
+ MM === 1 && (YY -= 1);
+ MM = MM === 1 ? 12 : MM - 1;
+ } else if (i >= log.FDay && i < log.FDay + MD[log.ymd[1]]) {
+ DD = i - log.FDay + 1;
+ if (i - log.FDay + 1 === log.ymd[2]) {
+ td.currentDay = true;
+ }
+ } else {
+ td.nextMonth = true;
+ DD = log.NDay++;
+ MM === 12 && (YY += 1);
+ MM = MM === 12 ? 1 : MM + 1;
+ }
+ if (Date.checkVoid(YY, MM, DD, mins, maxs)[0]) {
+ td.disabled = true;
+ }
+ td.text = DD;
+ items.push(td);
+ })
+ return items;
+ },
+
+ _init: function () {
+ BI.Calendar.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ var items = BI.map(Date._SDN.slice(0, 7), function (i, value) {
+ return {
+ type: "bi.label",
+ height: 25,
+ text: value
+ }
+ })
+ var title = BI.createWidget({
+ type: "bi.button_group",
+ height: 25,
+ items: items
+ })
+ var days = this._dateCreator(o.year, o.month, o.day);
+ items = [];
+ items.push(days.slice(0, 7));
+ items.push(days.slice(7, 14));
+ items.push(days.slice(14, 21));
+ items.push(days.slice(21, 28));
+ items.push(days.slice(28, 35));
+ items.push(days.slice(35, 42));
+
+ items = BI.map(items, function (i, item) {
+ return BI.map(item, function (j, td) {
+ return BI.extend(td, {
+ type: "bi.text_item",
+ cls: "bi-list-item-active",
+ textAlign: "center",
+ whiteSpace: "normal",
+ once: false,
+ forceSelected: true,
+ height: 25,
+ value: o.year + "-" + o.month + "-" + td.text,
+ disabled: td.lastMonth || td.nextMonth || td.disabled
+ //selected: td.currentDay
+ });
+ });
+ });
+
+ this.days = BI.createWidget({
+ type: "bi.button_group",
+ items: BI.createItems(items, {}),
+ layouts: [BI.LogicFactory.createLogic("table", BI.extend({}, o.logic, {
+ columns: 7,
+ rows: 6,
+ columnSize: [1 / 7, 1 / 7, 1 / 7, 1 / 7, 1 / 7, 1 / 7, 1 / 7],
+ rowSize: 25
+ }))]
+ });
+ this.days.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ })
+ BI.createWidget(BI.extend({
+ element: this
+
+ }, BI.LogicFactory.createLogic("vertical", BI.extend({}, o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection("top", title, this.days)
+ }))));
+ },
+
+ isFrontDate: function () {
+ var o = this.options, c = this._const;
+ var Y = o.year, M = o.month, De = Date.getDate(), day = De.getDay();
+ Y = Y | 0;
+ De.setFullYear(Y, M, 1);
+ var newDate = De.getOffsetDate(-1 * (day + 1));
+ return !!Date.checkVoid(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), o.min, o.max)[0];
+ },
+
+ isFinalDate: function () {
+ var o = this.options, c = this._const;
+ var Y = o.year, M = o.month, De = Date.getDate(), day = De.getDay();
+ Y = Y | 0;
+ De.setFullYear(Y, M, 1);
+ var newDate = De.getOffsetDate(42 - day);
+ return !!Date.checkVoid(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), o.min, o.max)[0];
+ },
+
+ setValue: function (ob) {
+ this.days.setValue([ob.year + "-" + ob.month + "-" + ob.day]);
+ },
+
+ getValue: function () {
+ var date = this.days.getValue()[0].match(/\d+/g);
+ return {
+ year: date[0] | 0,
+ month: date[1] | 0,
+ day: date[2] | 0
+ }
+ }
+});
+
+BI.extend(BI.Calendar, {
+ getPageByDateJSON: function (json) {
+ var year = Date.getDate().getFullYear();
+ var month = Date.getDate().getMonth();
+ var page = (json.year - year) * 12;
+ page += json.month - month;
+ return page;
+ },
+ getDateJSONByPage: function(v){
+ var months = Date.getDate().getMonth();
+ var page = v;
+
+ //对当前page做偏移,使到当前年初
+ page = page + months;
+
+ var year = BI.parseInt(page / 12);
+ if(page < 0 && page % 12 !== 0){
+ year--;
+ }
+ var month = page >= 0 ? (page % 12) : ((12 + page % 12) % 12);
+ return {
+ year: Date.getDate().getFullYear() + year,
+ month: month
+ }
+ }
+});
+
+BI.shortcut("bi.calendar", BI.Calendar);/**
+ * Created by GUY on 2015/8/28.
+ * @class BI.YearCalendar
+ * @extends BI.Widget
+ */
+BI.YearCalendar = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ var conf = BI.YearCalendar.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: "bi-year-calendar",
+ behaviors: {},
+ logic: {
+ dynamic: false
+ },
+ min: '1900-01-01', //最小日期
+ max: '2099-12-31', //最大日期
+ year: null
+ })
+ },
+
+ _yearCreator: function (Y) {
+ var o = this.options;
+ Y = Y | 0;
+ var start = BI.YearCalendar.getStartYear(Y);
+ var items = [];
+ BI.each(BI.range(BI.YearCalendar.INTERVAL), function (i) {
+ var td = {};
+ if (Date.checkVoid(start + i, 1, 1, o.min, o.max)[0]) {
+ td.disabled = true;
+ }
+ td.text = start + i;
+ items.push(td);
+ });
+ return items;
+ },
+
+ _init: function () {
+ BI.YearCalendar.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.currentYear = Date.getDate().getFullYear();
+ var years = this._yearCreator(o.year || this.currentYear);
+
+ //纵向排列年
+ var len = years.length, tyears = BI.makeArray(len, "");
+ var map = [0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11];
+ BI.each(years, function (i, y) {
+ tyears[i] = years[map[i]];
+ });
+ var items = [];
+ items.push(tyears.slice(0, 2));
+ items.push(tyears.slice(2, 4));
+ items.push(tyears.slice(4, 6));
+ items.push(tyears.slice(6, 8));
+ items.push(tyears.slice(8, 10));
+ items.push(tyears.slice(10, 12));
+
+ items = BI.map(items, function (i, item) {
+ return BI.map(item, function (j, td) {
+ return BI.extend(td, {
+ type: "bi.text_item",
+ cls: "bi-list-item-active",
+ textAlign: "center",
+ whiteSpace: "normal",
+ once: false,
+ forceSelected: true,
+ height: 23,
+ width: 38,
+ value: td.text,
+ disabled: td.disabled
+ });
+ });
+ });
+
+ this.years = BI.createWidget({
+ type: "bi.button_group",
+ behaviors: o.behaviors,
+ items: BI.createItems(items, {}),
+ layouts: [BI.LogicFactory.createLogic("table", BI.extend({}, o.logic, {
+ columns: 2,
+ rows: 6,
+ columnSize: [1 / 2, 1 / 2],
+ rowSize: 25
+ })), {
+ type: "bi.center_adapt",
+ vgap: 1
+ }]
+ });
+ this.years.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ BI.createWidget(BI.extend({
+ element: this
+
+ }, BI.LogicFactory.createLogic("vertical", BI.extend({}, o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection("top", this.years)
+ }))));
+ },
+
+ isFrontYear: function () {
+ var o = this.options;
+ var Y = o.year;
+ Y = Y | 0;
+ return !!Date.checkVoid(BI.YearCalendar.getStartYear(Y) - 1, 1, 1, o.min, o.max)[0];
+ },
+
+ isFinalYear: function () {
+ var o = this.options, c = this._const;
+ var Y = o.year;
+ Y = Y | 0;
+ return !!Date.checkVoid(BI.YearCalendar.getEndYear(Y) + 1, 1, 1, o.min, o.max)[0];
+ },
+
+ setValue: function (val) {
+ this.years.setValue([val]);
+ },
+
+ getValue: function () {
+ return this.years.getValue()[0];
+ }
+});
+//类方法
+BI.extend(BI.YearCalendar, {
+ INTERVAL: 12,
+
+ //获取显示的第一年
+ getStartYear: function (year) {
+ var cur = Date.getDate().getFullYear();
+ return year - ((year - cur + 3) % BI.YearCalendar.INTERVAL + 12) % BI.YearCalendar.INTERVAL;
+ },
+
+ getEndYear: function (year) {
+ return BI.YearCalendar.getStartYear(year) + BI.YearCalendar.INTERVAL;
+ },
+
+ getPageByYear: function (year) {
+ var cur = Date.getDate().getFullYear();
+ year = BI.YearCalendar.getStartYear(year);
+ return (year - cur + 3) / BI.YearCalendar.INTERVAL;
+ }
+});
+
+BI.shortcut("bi.year_calendar", BI.YearCalendar);/**
+ * 绘制一些较复杂的canvas
+ *
+ * Created by GUY on 2015/11/24.
+ * @class BI.ComplexCanvas
+ * @extends BI.Widget
+ */
+BI.ComplexCanvas = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.ComplexCanvas.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-complex-canvas"
+ })
+ },
+
+
+ _init: function () {
+ BI.ComplexCanvas.superclass._init.apply(this, arguments);
+ var o = this.options;
+ this.canvas = BI.createWidget({
+ type: "bi.canvas",
+ element: this,
+ width: o.width,
+ height: o.height
+ });
+ },
+
+ //绘制树枝节点
+ branch: function (x0, y0, x1, y1, x2, y2) {
+ var self = this, args = [].slice.call(arguments);
+ if (args.length <= 5) {
+ return this.canvas.line.apply(this.canvas, arguments);
+ }
+ var options;
+ if (BI.isOdd(args.length)) {
+ options = BI.last(args);
+ args = BI.initial(args);
+ }
+ args = [].slice.call(args, 2);
+ var odd = BI.filter(args, function (i) {
+ return i % 2 === 0;
+ });
+ var even = BI.filter(args, function (i) {
+ return i % 2 !== 0;
+ });
+ options || (options = {});
+ var offset = options.offset || 20;
+ if ((y0 > y1 && y0 > y2) || (y0 < y1 && y0 < y2)) {
+ if (y0 > y1 && y0 > y2) {
+ var y = Math.max.apply(this, even) + offset;
+ } else {
+ var y = Math.min.apply(this, even) - offset;
+ }
+ var minx = Math.min.apply(this, odd);
+ var minix = BI.indexOf(odd, minx);
+ var maxx = Math.max.apply(this, odd);
+ var maxix = BI.indexOf(odd, maxx);
+ this.canvas.line(minx, even[minix], minx, y, maxx, y, maxx, even[maxix], options);
+ BI.each(odd, function (i, dot) {
+ if (i !== maxix && i !== minix) {
+ self.canvas.line(dot, even[i], dot, y, options);
+ }
+ });
+ this.canvas.line(x0, y, x0, y0, options);
+ return;
+ }
+ if ((x0 > x1 && x0 > x2) || (x0 < x1 && x0 < x2)) {
+ if (x0 > x1 && x0 > x2) {
+ var x = Math.max.apply(this, odd) + offset;
+ } else {
+ var x = Math.min.apply(this, odd) - offset;
+ }
+ var miny = Math.min.apply(this, even);
+ var miniy = BI.indexOf(even, miny);
+ var maxy = Math.max.apply(this, even);
+ var maxiy = BI.indexOf(even, maxy);
+ this.canvas.line(odd[miniy], miny, x, miny, x, maxy, odd[maxiy], maxy, options);
+ BI.each(even, function (i, dot) {
+ if (i !== miniy && i !== maxiy) {
+ self.canvas.line(odd[i], dot, x, dot, options);
+ }
+ });
+ this.canvas.line(x, y0, x0, y0, options);
+ return;
+ }
+ },
+
+ stroke: function (callback) {
+ this.canvas.stroke(callback);
+ }
+});
+
+BI.shortcut("bi.complex_canvas", BI.ComplexCanvas);/**
+ * Created by roy on 15/10/16.
+ * 上箭头与下箭头切换的树节点
+ */
+BI.ArrowTreeGroupNodeCheckbox=BI.inherit(BI.IconButton,{
+ _defaultConfig:function(){
+ return BI.extend(BI.ArrowTreeGroupNodeCheckbox.superclass._defaultConfig.apply(this,arguments),{
+ extraCls:"bi-arrow-tree-group-node",
+ iconWidth: 13,
+ iconHeight: 13
+ });
+ },
+ _init:function(){
+ BI.ArrowTreeGroupNodeCheckbox.superclass._init.apply(this,arguments);
+ },
+ setSelected: function(v){
+ BI.ArrowTreeGroupNodeCheckbox.superclass.setSelected.apply(this, arguments);
+ if(v) {
+ this.element.removeClass("pull-down-font").addClass("pull-right-font");
+ } else {
+ this.element.removeClass("pull-right-font").addClass("pull-down-font");
+ }
+ }
+});
+BI.shortcut("bi.arrow_tree_group_node_checkbox",BI.ArrowTreeGroupNodeCheckbox);/**
+ * 十字型的树节点
+ * @class BI.CheckingMarkNode
+ * @extends BI.IconButton
+ */
+BI.CheckingMarkNode = BI.inherit(BI.IconButton, {
+ _defaultConfig: function() {
+ return BI.extend( BI.CheckingMarkNode.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "check-mark-font",
+ iconWidth: 13,
+ iconHeight: 13
+ });
+ },
+ _init:function() {
+ BI.CheckingMarkNode.superclass._init.apply(this, arguments);
+ this.setSelected(this.options.selected);
+
+ },
+ setSelected: function(v){
+ BI.CheckingMarkNode.superclass.setSelected.apply(this, arguments);
+ if(v===true) {
+ this.element.addClass("check-mark-font");
+ } else {
+ this.element.removeClass("check-mark-font");
+ }
+ }
+});
+BI.shortcut("bi.checking_mark_node", BI.CheckingMarkNode);/**
+ * 十字型的树节点
+ * @class BI.FirstTreeNodeCheckbox
+ * @extends BI.IconButton
+ */
+BI.FirstTreeNodeCheckbox = BI.inherit(BI.IconButton, {
+ _defaultConfig: function() {
+ return BI.extend( BI.FirstTreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "tree-collapse-icon-type2",
+ iconWidth: 25,
+ iconHeight: 25
+ });
+ },
+ _init:function() {
+ BI.FirstTreeNodeCheckbox.superclass._init.apply(this, arguments);
+
+ },
+ setSelected: function(v){
+ BI.FirstTreeNodeCheckbox.superclass.setSelected.apply(this, arguments);
+ if(v===true) {
+ this.element.addClass("tree-expand-icon-type2");
+ } else {
+ this.element.removeClass("tree-expand-icon-type2");
+ }
+ }
+});
+BI.shortcut("bi.first_tree_node_checkbox", BI.FirstTreeNodeCheckbox);/**
+ * 十字型的树节点
+ * @class BI.LastTreeNodeCheckbox
+ * @extends BI.IconButton
+ */
+BI.LastTreeNodeCheckbox = BI.inherit(BI.IconButton, {
+ _defaultConfig: function() {
+ return BI.extend( BI.LastTreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "tree-collapse-icon-type4",
+ iconWidth: 25,
+ iconHeight: 25
+ });
+ },
+ _init:function() {
+ BI.LastTreeNodeCheckbox.superclass._init.apply(this, arguments);
+
+ },
+ setSelected: function(v){
+ BI.LastTreeNodeCheckbox.superclass.setSelected.apply(this, arguments);
+ if(v===true) {
+ this.element.addClass("tree-expand-icon-type3");
+ } else {
+ this.element.removeClass("tree-expand-icon-type3");
+ }
+ }
+});
+BI.shortcut("bi.last_tree_node_checkbox", BI.LastTreeNodeCheckbox);/**
+ * 十字型的树节点
+ * @class BI.MidTreeNodeCheckbox
+ * @extends BI.IconButton
+ */
+BI.MidTreeNodeCheckbox = BI.inherit(BI.IconButton, {
+ _defaultConfig: function() {
+ return BI.extend( BI.MidTreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "tree-collapse-icon-type3",
+ iconWidth: 25,
+ iconHeight: 25
+ });
+ },
+ _init:function() {
+ BI.MidTreeNodeCheckbox.superclass._init.apply(this, arguments);
+
+ },
+ setSelected: function(v){
+ BI.MidTreeNodeCheckbox.superclass.setSelected.apply(this, arguments);
+ if(v===true) {
+ this.element.addClass("tree-expand-icon-type3");
+ } else {
+ this.element.removeClass("tree-expand-icon-type3");
+ }
+ }
+});
+BI.shortcut("bi.mid_tree_node_checkbox", BI.MidTreeNodeCheckbox);/**
+ * 三角形的树节点
+ * Created by GUY on 2015/9/6.
+ * @class BI.TreeGroupNodeCheckbox
+ * @extends BI.IconButton
+ */
+BI.TreeGroupNodeCheckbox = BI.inherit(BI.IconButton, {
+ _defaultConfig: function() {
+ return BI.extend( BI.TreeGroupNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "tree-node-triangle-collapse-font",
+ iconWidth: 13,
+ iconHeight: 13
+ });
+ },
+ _init:function() {
+ BI.TreeGroupNodeCheckbox.superclass._init.apply(this, arguments);
+
+ },
+ setSelected: function(v){
+ BI.TreeGroupNodeCheckbox.superclass.setSelected.apply(this, arguments);
+ if(v) {
+ this.element.removeClass("tree-node-triangle-collapse-font").addClass("tree-node-triangle-expand-font");
+ } else {
+ this.element.removeClass("tree-node-triangle-expand-font").addClass("tree-node-triangle-collapse-font");
+ }
+ }
+});
+BI.shortcut("bi.tree_group_node_checkbox", BI.TreeGroupNodeCheckbox);/**
+ * 十字型的树节点
+ * @class BI.TreeNodeCheckbox
+ * @extends BI.IconButton
+ */
+BI.TreeNodeCheckbox = BI.inherit(BI.IconButton, {
+ _defaultConfig: function() {
+ return BI.extend( BI.TreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "tree-collapse-icon-type1",
+ iconWidth: 25,
+ iconHeight: 25
+ });
+ },
+ _init:function() {
+ BI.TreeNodeCheckbox.superclass._init.apply(this, arguments);
+
+ },
+ setSelected: function(v){
+ BI.TreeNodeCheckbox.superclass.setSelected.apply(this, arguments);
+ if(v) {
+ this.element.addClass("tree-expand-icon-type1");
+ } else {
+ this.element.removeClass("tree-expand-icon-type1");
+ }
+ }
+});
+BI.shortcut("bi.tree_node_checkbox", BI.TreeNodeCheckbox);/*!
+ * clipboard.js v1.6.1
+ * https://zenorocha.github.io/clipboard.js
+ *
+ * Licensed MIT © Zeno Rocha
+ */
+try {//IE8下会抛错
+ (function (f) {
+ if (typeof exports === "object" && typeof module !== "undefined") {
+ module.exports = f()
+ } else if (typeof define === "function" && define.amd) {
+ define([], f)
+ } else {
+ var g;
+ if (typeof window !== "undefined") {
+ g = window
+ } else if (typeof global !== "undefined") {
+ g = global
+ } else if (typeof self !== "undefined") {
+ g = self
+ } else {
+ g = this
+ }
+ g.Clipboard = f()
+ }
+ })(function () {
+ var define, module, exports;
+ return (function e(t, n, r) {
+ function s(o, u) {
+ if (!n[o]) {
+ if (!t[o]) {
+ var a = typeof require == "function" && require;
+ if (!u && a)return a(o, !0);
+ if (i)return i(o, !0);
+ var f = new Error("Cannot find module '" + o + "'");
+ throw f.code = "MODULE_NOT_FOUND", f
+ }
+ var l = n[o] = {exports: {}};
+ t[o][0].call(l.exports, function (e) {
+ var n = t[o][1][e];
+ return s(n ? n : e)
+ }, l, l.exports, e, t, n, r)
+ }
+ return n[o].exports
+ }
+
+ var i = typeof require == "function" && require;
+ for (var o = 0; o < r.length; o++)s(r[o]);
+ return s
+ })({
+ 1: [function (require, module, exports) {
+ var DOCUMENT_NODE_TYPE = 9;
+
+ /**
+ * A polyfill for Element.matches()
+ */
+ if (typeof Element !== 'undefined' && !Element.prototype.matches) {
+ var proto = Element.prototype;
+
+ proto.matches = proto.matchesSelector ||
+ proto.mozMatchesSelector ||
+ proto.msMatchesSelector ||
+ proto.oMatchesSelector ||
+ proto.webkitMatchesSelector;
+ }
+
+ /**
+ * Finds the closest parent that matches a selector.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @return {Function}
+ */
+ function closest(element, selector) {
+ while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {
+ if (element.matches(selector)) return element;
+ element = element.parentNode;
+ }
+ }
+
+ module.exports = closest;
+
+ }, {}], 2: [function (require, module, exports) {
+ var closest = require('./closest');
+
+ /**
+ * Delegates event to a selector.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @param {Boolean} useCapture
+ * @return {Object}
+ */
+ function delegate(element, selector, type, callback, useCapture) {
+ var listenerFn = listener.apply(this, arguments);
+
+ element.addEventListener(type, listenerFn, useCapture);
+
+ return {
+ destroy: function () {
+ element.removeEventListener(type, listenerFn, useCapture);
+ }
+ }
+ }
+
+ /**
+ * Finds closest match and invokes callback.
+ *
+ * @param {Element} element
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Function}
+ */
+ function listener(element, selector, type, callback) {
+ return function (e) {
+ e.delegateTarget = closest(e.target, selector);
+
+ if (e.delegateTarget) {
+ callback.call(element, e);
+ }
+ }
+ }
+
+ module.exports = delegate;
+
+ }, {"./closest": 1}], 3: [function (require, module, exports) {
+ /**
+ * Check if argument is a HTML element.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+ exports.node = function (value) {
+ return value !== undefined
+ && value instanceof HTMLElement
+ && value.nodeType === 1;
+ };
+
+ /**
+ * Check if argument is a list of HTML elements.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+ exports.nodeList = function (value) {
+ var type = Object.prototype.toString.call(value);
+
+ return value !== undefined
+ && (type === '[object NodeList]' || type === '[object HTMLCollection]')
+ && ('length' in value)
+ && (value.length === 0 || exports.node(value[0]));
+ };
+
+ /**
+ * Check if argument is a string.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+ exports.string = function (value) {
+ return typeof value === 'string'
+ || value instanceof String;
+ };
+
+ /**
+ * Check if argument is a function.
+ *
+ * @param {Object} value
+ * @return {Boolean}
+ */
+ exports.fn = function (value) {
+ var type = Object.prototype.toString.call(value);
+
+ return type === '[object Function]';
+ };
+
+ }, {}], 4: [function (require, module, exports) {
+ var is = require('./is');
+ var delegate = require('delegate');
+
+ /**
+ * Validates all params and calls the right
+ * listener function based on its target type.
+ *
+ * @param {String|HTMLElement|HTMLCollection|NodeList} target
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+ function listen(target, type, callback) {
+ if (!target && !type && !callback) {
+ throw new Error('Missing required arguments');
+ }
+
+ if (!is.string(type)) {
+ throw new TypeError('Second argument must be a String');
+ }
+
+ if (!is.fn(callback)) {
+ throw new TypeError('Third argument must be a Function');
+ }
+
+ if (is.node(target)) {
+ return listenNode(target, type, callback);
+ }
+ else if (is.nodeList(target)) {
+ return listenNodeList(target, type, callback);
+ }
+ else if (is.string(target)) {
+ return listenSelector(target, type, callback);
+ }
+ else {
+ throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');
+ }
+ }
+
+ /**
+ * Adds an event listener to a HTML element
+ * and returns a remove listener function.
+ *
+ * @param {HTMLElement} node
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+ function listenNode(node, type, callback) {
+ node.addEventListener(type, callback);
+
+ return {
+ destroy: function () {
+ node.removeEventListener(type, callback);
+ }
+ }
+ }
+
+ /**
+ * Add an event listener to a list of HTML elements
+ * and returns a remove listener function.
+ *
+ * @param {NodeList|HTMLCollection} nodeList
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+ function listenNodeList(nodeList, type, callback) {
+ Array.prototype.forEach.call(nodeList, function (node) {
+ node.addEventListener(type, callback);
+ });
+
+ return {
+ destroy: function () {
+ Array.prototype.forEach.call(nodeList, function (node) {
+ node.removeEventListener(type, callback);
+ });
+ }
+ }
+ }
+
+ /**
+ * Add an event listener to a selector
+ * and returns a remove listener function.
+ *
+ * @param {String} selector
+ * @param {String} type
+ * @param {Function} callback
+ * @return {Object}
+ */
+ function listenSelector(selector, type, callback) {
+ return delegate(document.body, selector, type, callback);
+ }
+
+ module.exports = listen;
+
+ }, {"./is": 3, "delegate": 2}], 5: [function (require, module, exports) {
+ function select(element) {
+ var selectedText;
+
+ if (element.nodeName === 'SELECT') {
+ element.focus();
+
+ selectedText = element.value;
+ }
+ else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {
+ var isReadOnly = element.hasAttribute('readonly');
+
+ if (!isReadOnly) {
+ element.setAttribute('readonly', '');
+ }
+
+ element.select();
+ element.setSelectionRange(0, element.value.length);
+
+ if (!isReadOnly) {
+ element.removeAttribute('readonly');
+ }
+
+ selectedText = element.value;
+ }
+ else {
+ if (element.hasAttribute('contenteditable')) {
+ element.focus();
+ }
+
+ var selection = window.getSelection();
+ var range = document.createRange();
+
+ range.selectNodeContents(element);
+ selection.removeAllRanges();
+ selection.addRange(range);
+
+ selectedText = selection.toString();
+ }
+
+ return selectedText;
+ }
+
+ module.exports = select;
+
+ }, {}], 6: [function (require, module, exports) {
+ function E() {
+ // Keep this empty so it's easier to inherit from
+ // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)
+ }
+
+ E.prototype = {
+ on: function (name, callback, ctx) {
+ var e = this.e || (this.e = {});
+
+ (e[name] || (e[name] = [])).push({
+ fn: callback,
+ ctx: ctx
+ });
+
+ return this;
+ },
+
+ once: function (name, callback, ctx) {
+ var self = this;
+
+ function listener() {
+ self.off(name, listener);
+ callback.apply(ctx, arguments);
+ };
+
+ listener._ = callback
+ return this.on(name, listener, ctx);
+ },
+
+ emit: function (name) {
+ var data = [].slice.call(arguments, 1);
+ var evtArr = ((this.e || (this.e = {}))[name] || []).slice();
+ var i = 0;
+ var len = evtArr.length;
+
+ for (i; i < len; i++) {
+ evtArr[i].fn.apply(evtArr[i].ctx, data);
+ }
+
+ return this;
+ },
+
+ off: function (name, callback) {
+ var e = this.e || (this.e = {});
+ var evts = e[name];
+ var liveEvents = [];
+
+ if (evts && callback) {
+ for (var i = 0, len = evts.length; i < len; i++) {
+ if (evts[i].fn !== callback && evts[i].fn._ !== callback)
+ liveEvents.push(evts[i]);
+ }
+ }
+
+ // Remove event from queue to prevent memory leak
+ // Suggested by https://github.com/lazd
+ // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910
+
+ (liveEvents.length)
+ ? e[name] = liveEvents
+ : delete e[name];
+
+ return this;
+ }
+ };
+
+ module.exports = E;
+
+ }, {}], 7: [function (require, module, exports) {
+ (function (global, factory) {
+ if (typeof define === "function" && define.amd) {
+ define(['module', 'select'], factory);
+ } else if (typeof exports !== "undefined") {
+ factory(module, require('select'));
+ } else {
+ var mod = {
+ exports: {}
+ };
+ factory(mod, global.select);
+ global.clipboardAction = mod.exports;
+ }
+ })(this, function (module, _select) {
+ 'use strict';
+
+ var _select2 = _interopRequireDefault(_select);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+ }
+
+ var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
+ return typeof obj;
+ } : function (obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+
+ function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+
+ var _createClass = function () {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+
+ return function (Constructor, protoProps, staticProps) {
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+ }();
+
+ var ClipboardAction = function () {
+ /**
+ * @param {Object} options
+ */
+ function ClipboardAction(options) {
+ _classCallCheck(this, ClipboardAction);
+
+ this.resolveOptions(options);
+ this.initSelection();
+ }
+
+ /**
+ * Defines base properties passed from constructor.
+ * @param {Object} options
+ */
+
+
+ _createClass(ClipboardAction, [{
+ key: 'resolveOptions',
+ value: function resolveOptions() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.action = options.action;
+ this.emitter = options.emitter;
+ this.target = options.target;
+ this.text = options.text;
+ this.trigger = options.trigger;
+
+ this.selectedText = '';
+ }
+ }, {
+ key: 'initSelection',
+ value: function initSelection() {
+ if (this.text) {
+ this.selectFake();
+ } else if (this.target) {
+ this.selectTarget();
+ }
+ }
+ }, {
+ key: 'selectFake',
+ value: function selectFake() {
+ var _this = this;
+
+ var isRTL = document.documentElement.getAttribute('dir') == 'rtl';
+
+ this.removeFake();
+
+ this.fakeHandlerCallback = function () {
+ return _this.removeFake();
+ };
+ this.fakeHandler = document.body.addEventListener('click', this.fakeHandlerCallback) || true;
+
+ this.fakeElem = document.createElement('textarea');
+ // Prevent zooming on iOS
+ this.fakeElem.style.fontSize = '12pt';
+ // Reset box model
+ this.fakeElem.style.border = '0';
+ this.fakeElem.style.padding = '0';
+ this.fakeElem.style.margin = '0';
+ // Move element out of screen horizontally
+ this.fakeElem.style.position = 'absolute';
+ this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';
+ // Move element to the same position vertically
+ var yPosition = window.pageYOffset || document.documentElement.scrollTop;
+ this.fakeElem.style.top = yPosition + 'px';
+
+ this.fakeElem.setAttribute('readonly', '');
+ this.fakeElem.value = this.text;
+
+ document.body.appendChild(this.fakeElem);
+
+ this.selectedText = (0, _select2["default"])(this.fakeElem);
+ this.copyText();
+ }
+ }, {
+ key: 'removeFake',
+ value: function removeFake() {
+ if (this.fakeHandler) {
+ document.body.removeEventListener('click', this.fakeHandlerCallback);
+ this.fakeHandler = null;
+ this.fakeHandlerCallback = null;
+ }
+
+ if (this.fakeElem) {
+ document.body.removeChild(this.fakeElem);
+ this.fakeElem = null;
+ }
+ }
+ }, {
+ key: 'selectTarget',
+ value: function selectTarget() {
+ this.selectedText = (0, _select2["default"])(this.target);
+ this.copyText();
+ }
+ }, {
+ key: 'copyText',
+ value: function copyText() {
+ var succeeded = void 0;
+
+ try {
+ succeeded = document.execCommand(this.action);
+ } catch (err) {
+ succeeded = false;
+ }
+
+ this.handleResult(succeeded);
+ }
+ }, {
+ key: 'handleResult',
+ value: function handleResult(succeeded) {
+ this.emitter.emit(succeeded ? 'success' : 'error', {
+ action: this.action,
+ text: this.selectedText,
+ trigger: this.trigger,
+ clearSelection: this.clearSelection.bind(this)
+ });
+ }
+ }, {
+ key: 'clearSelection',
+ value: function clearSelection() {
+ if (this.target) {
+ this.target.blur();
+ }
+
+ window.getSelection().removeAllRanges();
+ }
+ }, {
+ key: 'destroy',
+ value: function destroy() {
+ this.removeFake();
+ }
+ }, {
+ key: 'action',
+ set: function set() {
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';
+
+ this._action = action;
+
+ if (this._action !== 'copy' && this._action !== 'cut') {
+ throw new Error('Invalid "action" value, use either "copy" or "cut"');
+ }
+ },
+ get: function get() {
+ return this._action;
+ }
+ }, {
+ key: 'target',
+ set: function set(target) {
+ if (target !== undefined) {
+ if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {
+ if (this.action === 'copy' && target.hasAttribute('disabled')) {
+ throw new Error('Invalid "target" attribute. Please use "readonly" instead of "disabled" attribute');
+ }
+
+ if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {
+ throw new Error('Invalid "target" attribute. You can\'t cut text from elements with "readonly" or "disabled" attributes');
+ }
+
+ this._target = target;
+ } else {
+ throw new Error('Invalid "target" value, use a valid Element');
+ }
+ }
+ },
+ get: function get() {
+ return this._target;
+ }
+ }]);
+
+ return ClipboardAction;
+ }();
+
+ module.exports = ClipboardAction;
+ });
+
+ }, {"select": 5}], 8: [function (require, module, exports) {
+ (function (global, factory) {
+ if (typeof define === "function" && define.amd) {
+ define(['module', './clipboard-action', 'tiny-emitter', 'good-listener'], factory);
+ } else if (typeof exports !== "undefined") {
+ factory(module, require('./clipboard-action'), require('tiny-emitter'), require('good-listener'));
+ } else {
+ var mod = {
+ exports: {}
+ };
+ factory(mod, global.clipboardAction, global.tinyEmitter, global.goodListener);
+ global.clipboard = mod.exports;
+ }
+ })(this, function (module, _clipboardAction, _tinyEmitter, _goodListener) {
+ 'use strict';
+
+ var _clipboardAction2 = _interopRequireDefault(_clipboardAction);
+
+ var _tinyEmitter2 = _interopRequireDefault(_tinyEmitter);
+
+ var _goodListener2 = _interopRequireDefault(_goodListener);
+
+ function _interopRequireDefault(obj) {
+ return obj && obj.__esModule ? obj : {
+ "default": obj
+ };
+ }
+
+ function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+
+ var _createClass = function () {
+ function defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+
+ return function (Constructor, protoProps, staticProps) {
+ if (protoProps) defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) defineProperties(Constructor, staticProps);
+ return Constructor;
+ };
+ }();
+
+ function _possibleConstructorReturn(self, call) {
+ if (!self) {
+ throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
+ }
+
+ return call && (typeof call === "object" || typeof call === "function") ? call : self;
+ }
+
+ function _inherits(subClass, superClass) {
+ if (typeof superClass !== "function" && superClass !== null) {
+ throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
+ }
+
+ subClass.prototype = Object.create(superClass && superClass.prototype, {
+ constructor: {
+ value: subClass,
+ enumerable: false,
+ writable: true,
+ configurable: true
+ }
+ });
+ if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
+ }
+
+ var Clipboard = function (_Emitter) {
+ _inherits(Clipboard, _Emitter);
+
+ /**
+ * @param {String|HTMLElement|HTMLCollection|NodeList} trigger
+ * @param {Object} options
+ */
+ function Clipboard(trigger, options) {
+ _classCallCheck(this, Clipboard);
+
+ var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));
+
+ _this.resolveOptions(options);
+ _this.listenClick(trigger);
+ return _this;
+ }
+
+ /**
+ * Defines if attributes would be resolved using internal setter functions
+ * or custom functions that were passed in the constructor.
+ * @param {Object} options
+ */
+
+
+ _createClass(Clipboard, [{
+ key: 'resolveOptions',
+ value: function resolveOptions() {
+ var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ this.action = typeof options.action === 'function' ? options.action : this.defaultAction;
+ this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;
+ this.text = typeof options.text === 'function' ? options.text : this.defaultText;
+ }
+ }, {
+ key: 'listenClick',
+ value: function listenClick(trigger) {
+ var _this2 = this;
+
+ this.listener = (0, _goodListener2["default"])(trigger, 'click', function (e) {
+ return _this2.onClick(e);
+ });
+ }
+ }, {
+ key: 'onClick',
+ value: function onClick(e) {
+ var trigger = e.delegateTarget || e.currentTarget;
+
+ if (this.clipboardAction) {
+ this.clipboardAction = null;
+ }
+
+ this.clipboardAction = new _clipboardAction2["default"]({
+ action: this.action(trigger),
+ target: this.target(trigger),
+ text: this.text(trigger),
+ trigger: trigger,
+ emitter: this
+ });
+ }
+ }, {
+ key: 'defaultAction',
+ value: function defaultAction(trigger) {
+ return getAttributeValue('action', trigger);
+ }
+ }, {
+ key: 'defaultTarget',
+ value: function defaultTarget(trigger) {
+ var selector = getAttributeValue('target', trigger);
+
+ if (selector) {
+ return document.querySelector(selector);
+ }
+ }
+ }, {
+ key: 'defaultText',
+ value: function defaultText(trigger) {
+ return getAttributeValue('text', trigger);
+ }
+ }, {
+ key: 'destroy',
+ value: function destroy() {
+ this.listener.destroy();
+
+ if (this.clipboardAction) {
+ this.clipboardAction.destroy();
+ this.clipboardAction = null;
+ }
+ }
+ }], [{
+ key: 'isSupported',
+ value: function isSupported() {
+ var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];
+
+ var actions = typeof action === 'string' ? [action] : action;
+ var support = !!document.queryCommandSupported;
+
+ actions.forEach(function (action) {
+ support = support && !!document.queryCommandSupported(action);
+ });
+
+ return support;
+ }
+ }]);
+
+ return Clipboard;
+ }(_tinyEmitter2["default"]);
+
+ /**
+ * Helper function to retrieve attribute value.
+ * @param {String} suffix
+ * @param {Element} element
+ */
+ function getAttributeValue(suffix, element) {
+ var attribute = 'data-clipboard-' + suffix;
+
+ if (!element.hasAttribute(attribute)) {
+ return;
+ }
+
+ return element.getAttribute(attribute);
+ }
+
+ module.exports = Clipboard;
+ });
+
+ }, {"./clipboard-action": 7, "good-listener": 4, "tiny-emitter": 6}]
+ }, {}, [8])(8)
+ });
+} catch (e) {
+ /*
+ * zClip :: jQuery ZeroClipboard v1.1.1
+ * http://steamdev.com/zclip
+ *
+ * Copyright 2011, SteamDev
+ * Released under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * Date: Wed Jun 01, 2011
+ */
+
+
+ (function ($) {
+
+ $.fn.zclip = function (params) {
+
+ if (typeof params == "object" && !params.length) {
+
+ var settings = $.extend({
+
+ path: 'ZeroClipboard.swf',
+ copy: null,
+ beforeCopy: null,
+ afterCopy: null,
+ clickAfter: true,
+ setHandCursor: true,
+ setCSSEffects: true
+
+ }, params);
+
+
+ return this.each(function () {
+
+ var o = $(this);
+
+ if (o.is(':visible') && (typeof settings.copy == 'string' || $.isFunction(settings.copy))) {
+
+ ZeroClipboard.setMoviePath(settings.path);
+ var clip = new ZeroClipboard.Client();
+
+ if ($.isFunction(settings.copy)) {
+ o.bind('zClip_copy', settings.copy);
+ }
+ if ($.isFunction(settings.beforeCopy)) {
+ o.bind('zClip_beforeCopy', settings.beforeCopy);
+ }
+ if ($.isFunction(settings.afterCopy)) {
+ o.bind('zClip_afterCopy', settings.afterCopy);
+ }
+
+ clip.setHandCursor(settings.setHandCursor);
+ clip.setCSSEffects(settings.setCSSEffects);
+ clip.addEventListener('mouseOver', function (client) {
+ o.trigger('mouseenter');
+ });
+ clip.addEventListener('mouseOut', function (client) {
+ o.trigger('mouseleave');
+ });
+ clip.addEventListener('mouseDown', function (client) {
+
+ o.trigger('mousedown');
+
+ if (!$.isFunction(settings.copy)) {
+ clip.setText(settings.copy);
+ } else {
+ clip.setText(o.triggerHandler('zClip_copy'));
+ }
+
+ if ($.isFunction(settings.beforeCopy)) {
+ o.trigger('zClip_beforeCopy');
+ }
+
+ });
+
+ clip.addEventListener('complete', function (client, text) {
+
+ if ($.isFunction(settings.afterCopy)) {
+
+ o.trigger('zClip_afterCopy');
+
+ } else {
+ if (text.length > 500) {
+ text = text.substr(0, 500) + "...\n\n(" + (text.length - 500) + " characters not shown)";
+ }
+
+ o.removeClass('hover');
+ alert("Copied text to clipboard:\n\n " + text);
+ }
+
+ if (settings.clickAfter) {
+ o.trigger('click');
+ }
+
+ });
+
+
+ clip.glue(o[0], o.parent()[0]);
+
+ $(window).bind('load resize', function () {
+ clip.reposition();
+ });
+
+
+ }
+
+ });
+
+ } else if (typeof params == "string") {
+
+ return this.each(function () {
+
+ var o = $(this);
+
+ params = params.toLowerCase();
+ var zclipId = o.data('zclipId');
+ var clipElm = $('#' + zclipId + '.zclip');
+
+ if (params == "remove") {
+
+ clipElm.remove();
+ o.removeClass('active hover');
+
+ } else if (params == "hide") {
+
+ clipElm.hide();
+ o.removeClass('active hover');
+
+ } else if (params == "show") {
+
+ clipElm.show();
+
+ }
+
+ });
+
+ }
+
+ }
+
+
+ })(jQuery);
+
+
+// ZeroClipboard
+// Simple Set Clipboard System
+// Author: Joseph Huckaby
+ var ZeroClipboard = {
+
+ version: "1.0.7",
+ clients: {},
+ // registered upload clients on page, indexed by id
+ moviePath: 'ZeroClipboard.swf',
+ // URL to movie
+ nextId: 1,
+ // ID of next movie
+ $: function (thingy) {
+ // simple DOM lookup utility function
+ if (typeof(thingy) == 'string') thingy = document.getElementById(thingy);
+ if (!thingy.addClass) {
+ // extend element with a few useful methods
+ thingy.hide = function () {
+ this.style.display = 'none';
+ };
+ thingy.show = function () {
+ this.style.display = '';
+ };
+ thingy.addClass = function (name) {
+ this.removeClass(name);
+ this.className += ' ' + name;
+ };
+ thingy.removeClass = function (name) {
+ var classes = this.className.split(/\s+/);
+ var idx = -1;
+ for (var k = 0; k < classes.length; k++) {
+ if (classes[k] == name) {
+ idx = k;
+ k = classes.length;
+ }
+ }
+ if (idx > -1) {
+ classes.splice(idx, 1);
+ this.className = classes.join(' ');
+ }
+ return this;
+ };
+ thingy.hasClass = function (name) {
+ return !!this.className.match(new RegExp("\\s*" + name + "\\s*"));
+ };
+ }
+ return thingy;
+ },
+
+ setMoviePath: function (path) {
+ // set path to ZeroClipboard.swf
+ this.moviePath = path;
+ },
+
+ dispatch: function (id, eventName, args) {
+ // receive event from flash movie, send to client
+ var client = this.clients[id];
+ if (client) {
+ client.receiveEvent(eventName, args);
+ }
+ },
+
+ register: function (id, client) {
+ // register new client to receive events
+ this.clients[id] = client;
+ },
+
+ getDOMObjectPosition: function (obj, stopObj) {
+ // get absolute coordinates for dom element
+ var info = {
+ left: 0,
+ top: 0,
+ width: obj.width ? obj.width : obj.offsetWidth,
+ height: obj.height ? obj.height : obj.offsetHeight
+ };
+
+ if (obj && (obj != stopObj)) {
+ info.left += obj.offsetLeft;
+ info.top += obj.offsetTop;
+ }
+
+ return info;
+ },
+
+ Client: function (elem) {
+ // constructor for new simple upload client
+ this.handlers = {};
+
+ // unique ID
+ this.id = ZeroClipboard.nextId++;
+ this.movieId = 'ZeroClipboardMovie_' + this.id;
+
+ // register client with singleton to receive flash events
+ ZeroClipboard.register(this.id, this);
+
+ // create movie
+ if (elem) this.glue(elem);
+ }
+ };
+
+ ZeroClipboard.Client.prototype = {
+
+ id: 0,
+ // unique ID for us
+ ready: false,
+ // whether movie is ready to receive events or not
+ movie: null,
+ // reference to movie object
+ clipText: '',
+ // text to copy to clipboard
+ handCursorEnabled: true,
+ // whether to show hand cursor, or default pointer cursor
+ cssEffects: true,
+ // enable CSS mouse effects on dom container
+ handlers: null,
+ // user event handlers
+ glue: function (elem, appendElem, stylesToAdd) {
+ // glue to DOM element
+ // elem can be ID or actual DOM element object
+ this.domElement = ZeroClipboard.$(elem);
+
+ // float just above object, or zIndex 99 if dom element isn't set
+ var zIndex = 99;
+ if (this.domElement.style.zIndex) {
+ zIndex = parseInt(this.domElement.style.zIndex, 10) + 1;
+ }
+
+ if (typeof(appendElem) == 'string') {
+ appendElem = ZeroClipboard.$(appendElem);
+ } else if (typeof(appendElem) == 'undefined') {
+ appendElem = document.getElementsByTagName('body')[0];
+ }
+
+ // find X/Y position of domElement
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem);
+
+ // create floating DIV above element
+ this.div = document.createElement('div');
+ this.div.className = "zclip";
+ this.div.id = "zclip-" + this.movieId;
+ $(this.domElement).data('zclipId', 'zclip-' + this.movieId);
+ var style = this.div.style;
+ style.position = 'absolute';
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ style.width = '' + box.width + 'px';
+ style.height = '' + box.height + 'px';
+ style.zIndex = zIndex;
+
+ if (typeof(stylesToAdd) == 'object') {
+ for (addedStyle in stylesToAdd) {
+ style[addedStyle] = stylesToAdd[addedStyle];
+ }
+ }
+
+ // style.backgroundColor = '#f00'; // debug
+ appendElem.appendChild(this.div);
+
+ this.div.innerHTML = this.getHTML(box.width, box.height);
+ },
+
+ getHTML: function (width, height) {
+ // return HTML for movie
+ var html = '';
+ var flashvars = 'id=' + this.id + '&width=' + width + '&height=' + height;
+
+ if (navigator.userAgent.match(/MSIE/)) {
+ // IE gets an OBJECT tag
+ var protocol = location.href.match(/^https/i) ? 'https://' : 'http://';
+ html += '';
+ } else {
+ // all other browsers get an EMBED tag
+ html += '';
+ }
+ return html;
+ },
+
+ hide: function () {
+ // temporarily hide floater offscreen
+ if (this.div) {
+ this.div.style.left = '-2000px';
+ }
+ },
+
+ show: function () {
+ // show ourselves after a call to hide()
+ this.reposition();
+ },
+
+ destroy: function () {
+ // destroy control and floater
+ if (this.domElement && this.div) {
+ this.hide();
+ this.div.innerHTML = '';
+
+ var body = document.getElementsByTagName('body')[0];
+ try {
+ body.removeChild(this.div);
+ } catch (e) {
+ ;
+ }
+
+ this.domElement = null;
+ this.div = null;
+ }
+ },
+
+ reposition: function (elem) {
+ // reposition our floating div, optionally to new container
+ // warning: container CANNOT change size, only position
+ if (elem) {
+ this.domElement = ZeroClipboard.$(elem);
+ if (!this.domElement) this.hide();
+ }
+
+ if (this.domElement && this.div) {
+ var box = ZeroClipboard.getDOMObjectPosition(this.domElement);
+ var style = this.div.style;
+ style.left = '' + box.left + 'px';
+ style.top = '' + box.top + 'px';
+ }
+ },
+
+ setText: function (newText) {
+ // set text to be copied to clipboard
+ this.clipText = newText;
+ if (this.ready) {
+ this.movie.setText(newText);
+ }
+ },
+
+ addEventListener: function (eventName, func) {
+ // add user event listener for event
+ // event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+ if (!this.handlers[eventName]) {
+ this.handlers[eventName] = [];
+ }
+ this.handlers[eventName].push(func);
+ },
+
+ setHandCursor: function (enabled) {
+ // enable hand cursor (true), or default arrow cursor (false)
+ this.handCursorEnabled = enabled;
+ if (this.ready) {
+ this.movie.setHandCursor(enabled);
+ }
+ },
+
+ setCSSEffects: function (enabled) {
+ // enable or disable CSS effects on DOM container
+ this.cssEffects = !!enabled;
+ },
+
+ receiveEvent: function (eventName, args) {
+ // receive event from flash
+ eventName = eventName.toString().toLowerCase().replace(/^on/, '');
+
+ // special behavior for certain events
+ switch (eventName) {
+ case 'load':
+ // movie claims it is ready, but in IE this isn't always the case...
+ // bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
+ this.movie = document.getElementById(this.movieId);
+ if (!this.movie) {
+ var self = this;
+ setTimeout(function () {
+ self.receiveEvent('load', null);
+ }, 1);
+ return;
+ }
+
+ // firefox on pc needs a "kick" in order to set these in certain cases
+ if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) {
+ var self = this;
+ setTimeout(function () {
+ self.receiveEvent('load', null);
+ }, 100);
+ this.ready = true;
+ return;
+ }
+
+ this.ready = true;
+ try {
+ this.movie.setText(this.clipText);
+ } catch (e) {
+ }
+ try {
+ this.movie.setHandCursor(this.handCursorEnabled);
+ } catch (e) {
+ }
+ break;
+
+ case 'mouseover':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('hover');
+ if (this.recoverActive) {
+ this.domElement.addClass('active');
+ }
+
+
+ }
+
+
+ break;
+
+ case 'mouseout':
+ if (this.domElement && this.cssEffects) {
+ this.recoverActive = false;
+ if (this.domElement.hasClass('active')) {
+ this.domElement.removeClass('active');
+ this.recoverActive = true;
+ }
+ this.domElement.removeClass('hover');
+
+ }
+ break;
+
+ case 'mousedown':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.addClass('active');
+ }
+ break;
+
+ case 'mouseup':
+ if (this.domElement && this.cssEffects) {
+ this.domElement.removeClass('active');
+ this.recoverActive = false;
+ }
+ break;
+ } // switch eventName
+ if (this.handlers[eventName]) {
+ for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) {
+ var func = this.handlers[eventName][idx];
+
+ if (typeof(func) == 'function') {
+ // actual function reference
+ func(this, args);
+ } else if ((typeof(func) == 'object') && (func.length == 2)) {
+ // PHP style object + method, i.e. [myObject, 'myMethod']
+ func[0][func[1]](this, args);
+ } else if (typeof(func) == 'string') {
+ // name of function
+ window[func](this, args);
+ }
+ } // foreach event handler defined
+ } // user defined handler for event
+ }
+
+ };
+}/**
+ * 复制
+ * Created by GUY on 2016/2/16.
+ * @class BI.ClipBoard
+ * @extends BI.BasicButton
+ */
+BI.ClipBoard = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.ClipBoard.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-clipboard",
+ copy: BI.emptyFn,
+ afterCopy: BI.emptyFn
+ })
+ },
+
+ _init: function () {
+ BI.ClipBoard.superclass._init.apply(this, arguments);
+ },
+
+ mounted: function () {
+ var self = this, o = this.options;
+ if (window.Clipboard) {
+ this.clipboard = new Clipboard(this.element[0], {
+ text: function () {
+ return BI.isFunction(o.copy) ? o.copy() : o.copy;
+ }
+ });
+ this.clipboard.on("success", o.afterCopy)
+ } else {
+ this.element.zclip({
+ path: BI.resourceURL + "/ZeroClipboard.swf",
+ copy: o.copy,
+ beforeCopy: o.beforeCopy,
+ afterCopy: o.afterCopy
+ });
+ }
+ },
+
+ destroyed: function () {
+ this.clipboard && this.clipboard.destroy();
+ }
+});
+
+BI.shortcut("bi.clipboard", BI.ClipBoard);/**
+ * 自定义选色
+ *
+ * Created by GUY on 2015/11/17.
+ * @class BI.CustomColorChooser
+ * @extends BI.Widget
+ */
+BI.CustomColorChooser = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.CustomColorChooser.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-custom-color-chooser",
+ width: 227,
+ height: 245
+ })
+ },
+
+ _init: function () {
+ BI.CustomColorChooser.superclass._init.apply(this, arguments);
+ var self = this;
+ this.editor = BI.createWidget({
+ type: "bi.color_picker_editor"
+ });
+ this.editor.on(BI.ColorPickerEditor.EVENT_CHANGE, function () {
+ self.setValue(this.getValue());
+ });
+ this.farbtastic = BI.createWidget({
+ type: "bi.farbtastic"
+ });
+ this.farbtastic.on(BI.Farbtastic.EVENT_CHANGE, function () {
+ self.setValue(this.getValue());
+ });
+
+ BI.createWidget({
+ type: "bi.vtape",
+ element: this,
+ items: [{
+ type: "bi.absolute",
+ items: [{
+ el: this.editor,
+ left: 10,
+ top: 10,
+ right: 10
+ }],
+ height: 30
+ }, {
+ type: "bi.absolute",
+ items: [{
+ el: this.farbtastic,
+ left: 15,
+ right: 15,
+ top: 10
+ }],
+ height: 215
+ }]
+ })
+ },
+
+ setValue: function (color) {
+ this.editor.setValue(color);
+ this.farbtastic.setValue(color);
+ },
+
+ getValue: function () {
+ return this.editor.getValue();
+ }
+});
+BI.CustomColorChooser.EVENT_CHANGE = "CustomColorChooser.EVENT_CHANGE";
+BI.shortcut("bi.custom_color_chooser", BI.CustomColorChooser);/**
+ * 选色控件
+ *
+ * Created by GUY on 2015/11/17.
+ * @class BI.ColorChooser
+ * @extends BI.Widget
+ */
+BI.ColorChooser = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.ColorChooser.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-color-chooser",
+ el: {}
+ })
+ },
+
+ _init: function () {
+ BI.ColorChooser.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget(BI.extend({
+ type: "bi.color_chooser_trigger",
+ width: o.width,
+ height: o.height
+ }, o.el));
+ this.colorPicker = BI.createWidget({
+ type: "bi.color_chooser_popup"
+ });
+
+ this.combo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 1,
+ el: this.trigger,
+ popup: {
+ el: this.colorPicker,
+ stopPropagation: false,
+ minWidth: 202
+ }
+ });
+
+ var fn = function () {
+ var color = self.colorPicker.getValue();
+ self.trigger.setValue(color);
+ var colors = BI.string2Array(BI.Cache.getItem("colors") || "");
+ var que = new BI.Queue(8);
+ que.fromArray(colors);
+ que.remove(color);
+ que.unshift(color);
+ BI.Cache.setItem("colors", BI.array2String(que.toArray()));
+ };
+
+ this.colorPicker.on(BI.ColorChooserPopup.EVENT_VALUE_CHANGE, function () {
+ fn();
+ });
+
+ this.colorPicker.on(BI.ColorChooserPopup.EVENT_CHANGE, function () {
+ fn();
+ self.combo.hideView();
+ });
+ this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {
+ self.colorPicker.setStoreColors(BI.string2Array(BI.Cache.getItem("colors") || ""));
+ });
+
+ this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {
+ self.fireEvent(BI.ColorChooser.EVENT_CHANGE, arguments);
+ })
+ },
+
+ isViewVisible: function () {
+ return this.combo.isViewVisible();
+ },
+
+ hideView: function () {
+ this.combo.hideView();
+ },
+
+ showView: function () {
+ this.combo.showView();
+ },
+
+ setValue: function (color) {
+ this.combo.setValue(color);
+ },
+
+ getValue: function () {
+ return this.colorPicker.getValue();
+ }
+});
+BI.ColorChooser.EVENT_CHANGE = "ColorChooser.EVENT_CHANGE";
+BI.shortcut("bi.color_chooser", BI.ColorChooser);/**
+ * 选色控件
+ *
+ * Created by GUY on 2015/11/17.
+ * @class BI.ColorChooserPopup
+ * @extends BI.Widget
+ */
+BI.ColorChooserPopup = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.ColorChooserPopup.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-color-chooser-popup",
+ width: 200,
+ height: 145
+ })
+ },
+
+ _init: function () {
+ BI.ColorChooserPopup.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.colorEditor = BI.createWidget({
+ type: "bi.color_picker_editor"
+ });
+
+ this.colorEditor.on(BI.ColorPickerEditor.EVENT_CHANGE, function () {
+ self.setValue(this.getValue());
+ self.fireEvent(BI.ColorChooserPopup.EVENT_VALUE_CHANGE, arguments);
+ });
+
+ this.storeColors = BI.createWidget({
+ type: "bi.color_picker",
+ items: [[{
+ value: "",
+ disabled: true
+ }, {
+ value: "",
+ disabled: true
+ }, {
+ value: "",
+ disabled: true
+ }, {
+ value: "",
+ disabled: true
+ }, {
+ value: "",
+ disabled: true
+ }, {
+ value: "",
+ disabled: true
+ }, {
+ value: "",
+ disabled: true
+ }, {
+ value: "",
+ disabled: true
+ }]],
+ width: 190,
+ height: 25
+ });
+ this.storeColors.on(BI.ColorPicker.EVENT_CHANGE, function () {
+ self.setValue(this.getValue()[0]);
+ self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE, arguments);
+ });
+
+ this.colorPicker = BI.createWidget({
+ type: "bi.color_picker",
+ width: 190,
+ height: 50
+ });
+
+ this.colorPicker.on(BI.ColorPicker.EVENT_CHANGE, function () {
+ self.setValue(this.getValue()[0]);
+ self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE, arguments);
+ });
+
+ this.customColorChooser = BI.createWidget({
+ type: "bi.custom_color_chooser"
+ });
+
+ var panel = BI.createWidget({
+ type: "bi.popup_panel",
+ buttons: [BI.i18nText("BI-Basic_Cancel"), BI.i18nText("BI-Basic_Save")],
+ title: BI.i18nText("BI-Custom_Color"),
+ el: this.customColorChooser,
+ stopPropagation: false,
+ bgap: -1,
+ rgap: 1,
+ lgap: 1,
+ minWidth: 227
+ });
+
+ this.more = BI.createWidget({
+ type: "bi.combo",
+ direction: "right,top",
+ isNeedAdjustHeight: false,
+ el: {
+ type: "bi.text_item",
+ cls: "color-chooser-popup-more bi-list-item",
+ textAlign: "center",
+ height: 20,
+ text: BI.i18nText("BI-Basic_More") + "..."
+ },
+ popup: panel
+ });
+
+ this.more.on(BI.Combo.EVENT_AFTER_POPUPVIEW, function () {
+ self.customColorChooser.setValue(self.getValue());
+ });
+ panel.on(BI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON, function (index) {
+ switch (index) {
+ case 0:
+ self.more.hideView();
+ break;
+ case 1:
+ self.setValue(self.customColorChooser.getValue());
+ self.more.hideView();
+ self.fireEvent(BI.ColorChooserPopup.EVENT_CHANGE, arguments);
+ break;
+ }
+ });
+
+ BI.createWidget({
+ type: "bi.vtape",
+ element: this,
+ items: [{
+ el: {
+ type: "bi.absolute",
+ cls: "bi-background bi-border-bottom",
+ items: [{
+ el: this.colorEditor,
+ left: 0,
+ right: 0,
+ top: 5
+ }]
+ },
+ height: 30
+ }, {
+ el: {
+ type: "bi.absolute",
+ items: [{
+ el: this.storeColors,
+ left: 5,
+ right: 5,
+ top: 5
+ }]
+ },
+ height: 30
+ }, {
+ el: {
+ type: "bi.absolute",
+ items: [{
+ el: this.colorPicker,
+ left: 5,
+ right: 5,
+ top: 5
+ }]
+ },
+ height: 65
+ }, {
+ el: this.more,
+ height: 20
+ }]
+ })
+ },
+
+ setStoreColors: function (colors) {
+ if (BI.isArray(colors)) {
+ var items = BI.map(colors, function (i, color) {
+ return {
+ value: color
+ }
+ });
+ BI.count(colors.length, 8, function (i) {
+ items.push({
+ value: "",
+ disabled: true
+ })
+ });
+ this.storeColors.populate([items]);
+ }
+ },
+
+ setValue: function (color) {
+ this.colorEditor.setValue(color);
+ this.colorPicker.setValue(color);
+ this.storeColors.setValue(color);
+ },
+
+ getValue: function () {
+ return this.colorEditor.getValue();
+ }
+});
+BI.ColorChooserPopup.EVENT_VALUE_CHANGE = "ColorChooserPopup.EVENT_VALUE_CHANGE";
+BI.ColorChooserPopup.EVENT_CHANGE = "ColorChooserPopup.EVENT_CHANGE";
+BI.shortcut("bi.color_chooser_popup", BI.ColorChooserPopup);/**
+ * 选色控件
+ *
+ * Created by GUY on 2015/11/17.
+ * @class BI.ColorChooserTrigger
+ * @extends BI.Trigger
+ */
+BI.ColorChooserTrigger = BI.inherit(BI.Trigger, {
+
+ _defaultConfig: function () {
+ var conf = BI.ColorChooserTrigger.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-color-chooser-trigger",
+ height: 30
+ })
+ },
+
+ _init: function () {
+ BI.ColorChooserTrigger.superclass._init.apply(this, arguments);
+ this.colorContainer = BI.createWidget({
+ type: "bi.layout",
+ cls: "bi-card color-chooser-trigger-content"
+ });
+
+ var down = BI.createWidget({
+ type: "bi.icon_button",
+ disableSelected: true,
+ cls: "icon-combo-down-icon trigger-triangle-font",
+ width: 12,
+ height: 8
+ });
+
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.colorContainer,
+ left: 3,
+ right: 3,
+ top: 3,
+ bottom: 3
+ }, {
+ el: down,
+ right: 3,
+ bottom: 3
+ }]
+ });
+ if (this.options.value) {
+ this.setValue(this.options.value);
+ }
+ },
+
+ setValue: function (color) {
+ BI.ColorChooserTrigger.superclass.setValue.apply(this, arguments);
+ if (color === "") {
+ this.colorContainer.element.css("background-color", "").removeClass("trans-color-background").addClass("auto-color-background");
+ } else if (color === "transparent") {
+ this.colorContainer.element.css("background-color", "").removeClass("auto-color-background").addClass("trans-color-background")
+ } else {
+ this.colorContainer.element.css({"background-color": color}).removeClass("auto-color-background").removeClass("trans-color-background");
+ }
+ }
+});
+BI.ColorChooserTrigger.EVENT_CHANGE = "ColorChooserTrigger.EVENT_CHANGE";
+BI.shortcut("bi.color_chooser_trigger", BI.ColorChooserTrigger);/**
+ * 简单选色控件按钮
+ *
+ * Created by GUY on 2015/11/16.
+ * @class BI.ColorPickerButton
+ * @extends BI.BasicButton
+ */
+BI.ColorPickerButton = BI.inherit(BI.BasicButton, {
+
+ _defaultConfig: function () {
+ var conf = BI.ColorPickerButton.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-color-picker-button bi-background bi-border-top bi-border-left"
+ })
+ },
+
+ _init: function () {
+ BI.ColorPickerButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ if (o.value) {
+ this.element.css("background-color", o.value);
+ var name = this.getName();
+ this.element.hover(function () {
+ self._createMask();
+ if (self.isEnabled()) {
+ BI.Maskers.show(name);
+ }
+ }, function () {
+ if (!self.isSelected()) {
+ BI.Maskers.hide(name);
+ }
+ });
+ }
+ },
+
+ _createMask: function () {
+ var o = this.options, name = this.getName();
+ if (this.isEnabled() && !BI.Maskers.has(name)) {
+ var w = BI.Maskers.make(name, this, {
+ offset: {
+ left: -1,
+ top: -1,
+ right: -1,
+ bottom: -1
+ }
+ });
+ w.element.addClass("color-picker-button-mask").css("background-color", o.value);
+ }
+ },
+
+ setSelected: function (b) {
+ BI.ColorPickerButton.superclass.setSelected.apply(this, arguments);
+ if (!!b) {
+ this._createMask();
+ }
+ BI.Maskers[!!b ? "show" : "hide"](this.getName());
+ }
+});
+BI.ColorPickerButton.EVENT_CHANGE = "ColorPickerButton.EVENT_CHANGE";
+BI.shortcut("bi.color_picker_button", BI.ColorPickerButton);/**
+ * 简单选色控件
+ *
+ * Created by GUY on 2015/11/16.
+ * @class BI.ColorPicker
+ * @extends BI.Widget
+ */
+BI.ColorPicker = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.ColorPicker.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-color-picker",
+ items: null
+ })
+ },
+
+ _items: [
+ [{
+ value: "#ffffff"
+ }, {
+ value: "#f2f2f2"
+ }, {
+ value: "#e5e5e5"
+ }, {
+ value: "#d9d9d9"
+ }, {
+ value: "#cccccc"
+ }, {
+ value: "#bfbfbf"
+ }, {
+ value: "#b2b2b2"
+ }, {
+ value: "#a6a6a6"
+ }, {
+ value: "#999999"
+ }, {
+ value: "#8c8c8c"
+ }, {
+ value: "#808080"
+ }, {
+ value: "#737373"
+ }, {
+ value: "#666666"
+ }, {
+ value: "#4d4d4d"
+ }, {
+ value: "#333333"
+ }, {
+ value: "#000000"
+ }],
+ [{
+ value: "#d8b5a6"
+ }, {
+ value: "#ff9e9a"
+ }, {
+ value: "#ffc17d"
+ }, {
+ value: "#f5e56b"
+ }, {
+ value: "#d8e698"
+ }, {
+ value: "#e0ebaf"
+ }, {
+ value: "#c3d825"
+ }, {
+ value: "#bce2e8"
+ }, {
+ value: "#85d3cd"
+ }, {
+ value: "#bce2e8"
+ }, {
+ value: "#a0d8ef"
+ }, {
+ value: "#89c3eb"
+ }, {
+ value: "#bbc8e6"
+ }, {
+ value: "#bbbcde"
+ }, {
+ value: "#d6b4cc"
+ }, {
+ value: "#fbc0d3"
+ }],
+ [{
+ value: "#bb9581"
+ }, {
+ value: "#f37d79"
+ }, {
+ value: "#fba74f"
+ }, {
+ value: "#ffdb4f"
+ }, {
+ value: "#c7dc68"
+ }, {
+ value: "#b0ca71"
+ }, {
+ value: "#99ab4e"
+ }, {
+ value: "#84b9cb"
+ }, {
+ value: "#00a3af"
+ }, {
+ value: "#2ca9e1"
+ }, {
+ value: "#0095d9"
+ }, {
+ value: "#4c6cb3"
+ }, {
+ value: "#8491c3"
+ }, {
+ value: "#a59aca"
+ }, {
+ value: "#cc7eb1"
+ }, {
+ value: "#e89bb4"
+ }],
+ [{
+ value: "#9d775f"
+ }, {
+ value: "#dd4b4b"
+ }, {
+ value: "#ef8b07"
+ }, {
+ value: "#fcc800"
+ }, {
+ value: "#aacf53"
+ }, {
+ value: "#82ae46"
+ }, {
+ value: "#69821b"
+ }, {
+ value: "#59b9c6"
+ }, {
+ value: "#2a83a2"
+ }, {
+ value: "#007bbb"
+ }, {
+ value: "#19448e"
+ }, {
+ value: "#274a78"
+ }, {
+ value: "#4a488e"
+ }, {
+ value: "#7058a3"
+ }, {
+ value: "#884898"
+ }, {
+ value: "#d47596"
+ }]
+ ],
+
+ _init: function () {
+ BI.ColorPicker.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.colors = BI.createWidget({
+ type: "bi.button_group",
+ element: this,
+ items: BI.createItems(o.items || this._items, {
+ type: "bi.color_picker_button",
+ once: false
+ }),
+ layouts: [{
+ type: "bi.grid"
+ }]
+ });
+ this.colors.on(BI.ButtonGroup.EVENT_CHANGE, function () {
+ self.fireEvent(BI.ColorPicker.EVENT_CHANGE, arguments);
+ })
+ },
+
+ populate: function(items){
+ var args =[].slice.call(arguments);
+ args[0] = BI.createItems(items, {
+ type: "bi.color_picker_button",
+ once: false
+ });
+ this.colors.populate.apply(this.colors, args);
+ },
+
+ setValue: function (color) {
+ this.colors.setValue(color);
+ },
+
+ getValue: function () {
+ return this.colors.getValue();
+ }
+});
+BI.ColorPicker.EVENT_CHANGE = "ColorPicker.EVENT_CHANGE";
+BI.shortcut("bi.color_picker", BI.ColorPicker);/**
+ * 简单选色控件
+ *
+ * Created by GUY on 2015/11/16.
+ * @class BI.ColorPickerEditor
+ * @extends BI.Widget
+ */
+BI.ColorPickerEditor = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.ColorPickerEditor.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-color-picker-editor",
+ // width: 200,
+ height: 20
+ })
+ },
+
+ _init: function () {
+ BI.ColorPickerEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.colorShow = BI.createWidget({
+ type: "bi.layout",
+ cls: "color-picker-editor-display bi-card",
+ height: 20
+ });
+ var RGB = BI.createWidgets(BI.createItems([{text: "R"}, {text: "G"}, {text: "B"}], {
+ type: "bi.label",
+ cls: "color-picker-editor-label",
+ width: 10,
+ height: 20
+ }));
+
+ var checker = function (v) {
+ return BI.isNumeric(v) && (v | 0) >= 0 && (v | 0) <= 255;
+ };
+ var Ws = BI.createWidgets([{}, {}, {}], {
+ type: "bi.small_text_editor",
+ cls: "color-picker-editor-input",
+ validationChecker: checker,
+ errorText: BI.i18nText("BI-Color_Picker_Error_Text"),
+ allowBlank: true,
+ value: 255,
+ width: 32,
+ height: 20
+ });
+ BI.each(Ws, function (i, w) {
+ w.on(BI.TextEditor.EVENT_CHANGE, function () {
+ if (self.R.isValid() && self.G.isValid() && self.B.isValid()) {
+ self.colorShow.element.css("background-color", self.getValue());
+ self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE);
+ }
+ });
+ });
+ this.R = Ws[0];
+ this.G = Ws[1];
+ this.B = Ws[2];
+
+ this.none = BI.createWidget({
+ type: "bi.checkbox",
+ title: BI.i18nText("BI-Basic_Auto")
+ });
+ this.none.on(BI.Checkbox.EVENT_CHANGE, function () {
+ if (this.isSelected()) {
+ self.lastColor = self.getValue();
+ self.setValue("");
+ } else {
+ self.setValue(self.lastColor || "#000000");
+ }
+ if (self.R.isValid() && self.G.isValid() && self.B.isValid()) {
+ self.colorShow.element.css("background-color", self.getValue());
+ self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE);
+ }
+ });
+
+ this.transparent = BI.createWidget({
+ type: "bi.checkbox",
+ title: BI.i18nText("BI-Transparent_Color")
+ });
+ this.transparent.on(BI.Checkbox.EVENT_CHANGE, function () {
+ if (this.isSelected()) {
+ self.lastColor = self.getValue();
+ self.setValue("transparent");
+ } else {
+ self.setValue(self.lastColor || "#000000");
+ }
+ if (self.R.isValid() && self.G.isValid() && self.B.isValid()) {
+ self.colorShow.element.css("background-color", self.getValue());
+ self.fireEvent(BI.ColorPickerEditor.EVENT_CHANGE);
+ }
+ });
+
+ BI.createWidget({
+ type: "bi.htape",
+ element: this,
+ items: [{
+ el: this.colorShow,
+ width: 'fill'
+ }, {
+ el: RGB[0],
+ lgap: 10,
+ width: 16
+ }, {
+ el: this.R,
+ width: 32
+ }, {
+ el: RGB[1],
+ lgap: 10,
+ width: 16
+ }, {
+ el: this.G,
+ width: 32
+ }, {
+ el: RGB[2],
+ lgap: 10,
+ width: 16
+ }, {
+ el: this.B,
+ width: 32
+ }, {
+ el: {
+ type: "bi.center_adapt",
+ items: [this.none]
+ },
+ width: 18
+ }, {
+ el: {
+ type: "bi.center_adapt",
+ items: [this.transparent]
+ },
+ width: 18
+ }]
+ })
+ },
+
+ setValue: function (color) {
+ if (color === "transparent") {
+ this.transparent.setSelected(true);
+ this.none.setSelected(false);
+ this.R.setValue("");
+ this.G.setValue("");
+ this.B.setValue("");
+ return;
+ }
+ if (!color) {
+ color = "";
+ this.none.setSelected(true);
+ } else {
+ this.none.setSelected(false);
+ }
+ this.transparent.setSelected(false);
+ this.colorShow.element.css("background-color", color);
+ var json = BI.DOM.rgb2json(BI.DOM.hex2rgb(color));
+ this.R.setValue(BI.isNull(json.r) ? "" : json.r);
+ this.G.setValue(BI.isNull(json.g) ? "" : json.g);
+ this.B.setValue(BI.isNull(json.b) ? "" : json.b);
+ },
+
+ getValue: function () {
+ if (this.transparent.isSelected()) {
+ return "transparent";
+ }
+ return BI.DOM.rgb2hex(BI.DOM.json2rgb({
+ r: this.R.getValue(),
+ g: this.G.getValue(),
+ b: this.B.getValue()
+ }))
+ }
+});
+BI.ColorPickerEditor.EVENT_CHANGE = "ColorPickerEditor.EVENT_CHANGE";
+BI.shortcut("bi.color_picker_editor", BI.ColorPickerEditor);/**
+ * 选色控件
+ *
+ * Created by GUY on 2015/11/16.
+ * @class BI.Farbtastic
+ * @extends BI.Widget
+ */
+BI.Farbtastic = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.Farbtastic.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-farbtastic",
+ width: 195,
+ height: 195
+ })
+ },
+
+ _init: function () {
+ BI.Farbtastic.superclass._init.apply(this, arguments);
+ },
+
+ mounted: function () {
+ var self = this;
+ this.farbtastic = $.farbtastic(this.element, function (v) {
+ self.fireEvent(BI.Farbtastic.EVENT_CHANGE, self.getValue(), self);
+ });
+ },
+
+ setValue: function (color) {
+ this.farbtastic.setColor(color);
+ },
+
+ getValue: function () {
+ return this.farbtastic.color;
+ }
+});
+BI.Farbtastic.EVENT_CHANGE = "Farbtastic.EVENT_CHANGE";
+BI.shortcut("bi.farbtastic", BI.Farbtastic);/**
+ * Farbtastic Color Picker 1.2
+ * © 2008 Steven Wittens
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+jQuery.fn.farbtastic = function (callback) {
+ $.farbtastic(this, callback);
+ return this;
+};
+
+jQuery.farbtastic = function (container, callback) {
+ var container = $(container).get(0);
+ return container.farbtastic || (container.farbtastic = new jQuery._farbtastic(container, callback));
+}
+
+jQuery._farbtastic = function (container, callback) {
+ // Store farbtastic object
+ var fb = this;
+
+ // Insert markup
+ $(container).html('
');
+ var e = $('.farbtastic', container);
+ fb.wheel = $('.wheel', container).get(0);
+ // Dimensions
+ fb.radius = 84;
+ fb.square = 100;
+ fb.width = 194;
+
+ // Fix background PNGs in IE6
+ if (navigator.appVersion.match(/MSIE [0-6]\./)) {
+ $('*', e).each(function () {
+ if (this.currentStyle.backgroundImage != 'none') {
+ var image = this.currentStyle.backgroundImage;
+ image = this.currentStyle.backgroundImage.substring(5, image.length - 2);
+ $(this).css({
+ 'backgroundImage': 'none',
+ 'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=crop, src='" + image + "')"
+ });
+ }
+ });
+ }
+
+ /**
+ * Link to the given element(s) or callback.
+ */
+ fb.linkTo = function (callback) {
+ // Unbind previous nodes
+ if (typeof fb.callback == 'object') {
+ $(fb.callback).unbind('keyup', fb.updateValue);
+ }
+
+ // Reset color
+ fb.color = null;
+
+ // Bind callback or elements
+ if (typeof callback == 'function') {
+ fb.callback = callback;
+ }
+ else if (typeof callback == 'object' || typeof callback == 'string') {
+ fb.callback = $(callback);
+ fb.callback.bind('keyup', fb.updateValue);
+ if (fb.callback.get(0).value) {
+ fb.setColor(fb.callback.get(0).value);
+ }
+ }
+ return this;
+ }
+ fb.updateValue = function (event) {
+ if (this.value && this.value != fb.color) {
+ fb.setColor(this.value);
+ }
+ }
+
+ /**
+ * Change color with HTML syntax #123456
+ */
+ fb.setColor = function (color) {
+ var unpack = fb.unpack(color);
+ if (fb.color != color && unpack) {
+ fb.color = color;
+ fb.rgb = unpack;
+ fb.hsl = fb.RGBToHSL(fb.rgb);
+ fb.updateDisplay();
+ }
+ return this;
+ }
+
+ /**
+ * Change color with HSL triplet [0..1, 0..1, 0..1]
+ */
+ fb.setHSL = function (hsl) {
+ fb.hsl = hsl;
+ fb.rgb = fb.HSLToRGB(hsl);
+ fb.color = fb.pack(fb.rgb);
+ fb.updateDisplay();
+ return this;
+ }
+
+ /////////////////////////////////////////////////////
+
+ /**
+ * Retrieve the coordinates of the given event relative to the center
+ * of the widget.
+ */
+ fb.widgetCoords = function (event) {
+ var x, y;
+ var el = event.target || event.srcElement;
+ var reference = fb.wheel;
+
+ if (typeof event.offsetX != 'undefined') {
+ // Use offset coordinates and find common offsetParent
+ var pos = { x: event.offsetX, y: event.offsetY };
+
+ // Send the coordinates upwards through the offsetParent chain.
+ var e = el;
+ while (e) {
+ e.mouseX = pos.x;
+ e.mouseY = pos.y;
+ pos.x += e.offsetLeft;
+ pos.y += e.offsetTop;
+ e = e.offsetParent;
+ }
+
+ // Look for the coordinates starting from the wheel widget.
+ var e = reference;
+ var offset = { x: 0, y: 0 }
+ while (e) {
+ if (typeof e.mouseX != 'undefined') {
+ x = e.mouseX - offset.x;
+ y = e.mouseY - offset.y;
+ break;
+ }
+ offset.x += e.offsetLeft;
+ offset.y += e.offsetTop;
+ e = e.offsetParent;
+ }
+
+ // Reset stored coordinates
+ e = el;
+ while (e) {
+ e.mouseX = undefined;
+ e.mouseY = undefined;
+ e = e.offsetParent;
+ }
+ }
+ else {
+ // Use absolute coordinates
+ var pos = fb.absolutePosition(reference);
+ x = (event.pageX || 0*(event.clientX + $('html').get(0).scrollLeft)) - pos.x;
+ y = (event.pageY || 0*(event.clientY + $('html').get(0).scrollTop)) - pos.y;
+ }
+ // Subtract distance to middle
+ return { x: x - fb.width / 2, y: y - fb.width / 2 };
+ }
+
+ /**
+ * Mousedown handler
+ */
+ fb.click = function (event) {
+ // Capture mouse
+ // if (!document.dragging) {
+ // $(document).bind('mousemove', fb.mousemove).bind('mouseup', fb.mouseup);
+ // document.dragging = true;
+ // }
+
+ // Check which area is being dragged
+ var pos = fb.widgetCoords(event);
+ fb.circleDrag = Math.max(Math.abs(pos.x), Math.abs(pos.y)) * 2 > fb.square;
+
+ // Process
+ fb.mousemove(event);
+ return false;
+ }
+
+ /**
+ * Mousemove handler
+ */
+ fb.mousemove = function (event) {
+ // Get coordinates relative to color picker center
+ var pos = fb.widgetCoords(event);
+
+ // Set new HSL parameters
+ if (fb.circleDrag) {
+ var hue = Math.atan2(pos.x, -pos.y) / 6.28;
+ if (hue < 0) hue += 1;
+ fb.setHSL([hue, fb.hsl[1], fb.hsl[2]]);
+ }
+ else {
+ var sat = Math.max(0, Math.min(1, -(pos.x / fb.square) + .5));
+ var lum = Math.max(0, Math.min(1, -(pos.y / fb.square) + .5));
+ fb.setHSL([fb.hsl[0], sat, lum]);
+ }
+ return false;
+ }
+
+ /**
+ * Mouseup handler
+ */
+ // fb.mouseup = function () {
+ // // Uncapture mouse
+ // $(document).unbind('mousemove', fb.mousemove);
+ // $(document).unbind('mouseup', fb.mouseup);
+ // document.dragging = false;
+ // }
+
+ /**
+ * Update the markers and styles
+ */
+ fb.updateDisplay = function () {
+ // Markers
+ var angle = fb.hsl[0] * 6.28;
+ $('.h-marker', e).css({
+ left: Math.round(Math.sin(angle) * fb.radius + fb.width / 2) + 'px',
+ top: Math.round(-Math.cos(angle) * fb.radius + fb.width / 2) + 'px'
+ });
+
+ $('.sl-marker', e).css({
+ left: Math.round(fb.square * (.5 - fb.hsl[1]) + fb.width / 2) + 'px',
+ top: Math.round(fb.square * (.5 - fb.hsl[2]) + fb.width / 2) + 'px'
+ });
+
+ // Saturation/Luminance gradient
+ $('.color', e).css('backgroundColor', fb.pack(fb.HSLToRGB([fb.hsl[0], 1, 0.5])));
+
+ // Linked elements or callback
+ if (typeof fb.callback == 'object') {
+ // Set background/foreground color
+ $(fb.callback).css({
+ backgroundColor: fb.color,
+ color: fb.hsl[2] > 0.5 ? '#000' : '#fff'
+ });
+
+ // Change linked value
+ $(fb.callback).each(function() {
+ if (this.value && this.value != fb.color) {
+ this.value = fb.color;
+ }
+ });
+ }
+ else if (typeof fb.callback == 'function') {
+ fb.callback.call(fb, fb.color);
+ }
+ }
+
+ /**
+ * Get absolute position of element
+ */
+ fb.absolutePosition = function (el) {
+ var r = { x: el.offsetLeft, y: el.offsetTop };
+ // Resolve relative to offsetParent
+ if (el.offsetParent) {
+ var tmp = fb.absolutePosition(el.offsetParent);
+ r.x += tmp.x;
+ r.y += tmp.y;
+ }
+ return r;
+ };
+
+ /* Various color utility functions */
+ fb.pack = function (rgb) {
+ var r = Math.round(rgb[0] * 255);
+ var g = Math.round(rgb[1] * 255);
+ var b = Math.round(rgb[2] * 255);
+ return '#' + (r < 16 ? '0' : '') + r.toString(16) +
+ (g < 16 ? '0' : '') + g.toString(16) +
+ (b < 16 ? '0' : '') + b.toString(16);
+ }
+
+ fb.unpack = function (color) {
+ if (color.length == 7) {
+ return [parseInt('0x' + color.substring(1, 3)) / 255,
+ parseInt('0x' + color.substring(3, 5)) / 255,
+ parseInt('0x' + color.substring(5, 7)) / 255];
+ }
+ else if (color.length == 4) {
+ return [parseInt('0x' + color.substring(1, 2)) / 15,
+ parseInt('0x' + color.substring(2, 3)) / 15,
+ parseInt('0x' + color.substring(3, 4)) / 15];
+ }
+ }
+
+ fb.HSLToRGB = function (hsl) {
+ var m1, m2, r, g, b;
+ var h = hsl[0], s = hsl[1], l = hsl[2];
+ m2 = (l <= 0.5) ? l * (s + 1) : l + s - l*s;
+ m1 = l * 2 - m2;
+ return [this.hueToRGB(m1, m2, h+0.33333),
+ this.hueToRGB(m1, m2, h),
+ this.hueToRGB(m1, m2, h-0.33333)];
+ }
+
+ fb.hueToRGB = function (m1, m2, h) {
+ h = (h < 0) ? h + 1 : ((h > 1) ? h - 1 : h);
+ if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;
+ if (h * 2 < 1) return m2;
+ if (h * 3 < 2) return m1 + (m2 - m1) * (0.66666 - h) * 6;
+ return m1;
+ }
+
+ fb.RGBToHSL = function (rgb) {
+ var min, max, delta, h, s, l;
+ var r = rgb[0], g = rgb[1], b = rgb[2];
+ min = Math.min(r, Math.min(g, b));
+ max = Math.max(r, Math.max(g, b));
+ delta = max - min;
+ l = (min + max) / 2;
+ s = 0;
+ if (l > 0 && l < 1) {
+ s = delta / (l < 0.5 ? (2 * l) : (2 - 2 * l));
+ }
+ h = 0;
+ if (delta > 0) {
+ if (max == r && max != g) h += (g - b) / delta;
+ if (max == g && max != b) h += (2 + (b - r) / delta);
+ if (max == b && max != r) h += (4 + (r - g) / delta);
+ h /= 6;
+ }
+ return [h, s, l];
+ }
+
+ // Install mousedown handler (the others are set on the document on-demand)
+ $('*', e).click(fb.click);
+
+ // Init color
+ fb.setColor('#000000');
+
+ // Set linked elements/callback
+ if (callback) {
+ fb.linkTo(callback);
+ }
+}/**
+ * Created by GUY on 2017/2/8.
+ *
+ * @class BI.BubbleCombo
+ * @extends BI.Widget
+ */
+BI.BubbleCombo = BI.inherit(BI.Widget, {
+ _const: {
+ TRIANGLE_LENGTH: 6
+ },
+ _defaultConfig: function () {
+ return BI.extend(BI.BubbleCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-bubble-combo",
+ trigger: "click",
+ toggle: true,
+ direction: "bottom", //top||bottom||left||right||top,left||top,right||bottom,left||bottom,right
+ isDefaultInit: false,
+ destroyWhenHide: false,
+ isNeedAdjustHeight: true,//是否需要高度调整
+ isNeedAdjustWidth: true,
+ stopPropagation: false,
+ adjustLength: 0,//调整的距离
+ // adjustXOffset: 0,
+ // adjustYOffset: 10,
+ hideChecker: BI.emptyFn,
+ offsetStyle: "left", //left,right,center
+ el: {},
+ popup: {}
+ })
+ },
+ _init: function () {
+ BI.BubbleCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.combo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ trigger: o.trigger,
+ toggle: o.toggle,
+ direction: o.direction,
+ isDefaultInit: o.isDefaultInit,
+ destroyWhenHide: o.destroyWhenHide,
+ isNeedAdjustHeight: o.isNeedAdjustHeight,
+ isNeedAdjustWidth: o.isNeedAdjustWidth,
+ adjustLength: this._getAdjustLength(),
+ stopPropagation: o.stopPropagation,
+ adjustXOffset: 0,
+ adjustYOffset: 0,
+ hideChecker: o.hideChecker,
+ offsetStyle: o.offsetStyle,
+ el: o.el,
+ popup: BI.extend({
+ type: "bi.bubble_popup_view"
+ }, o.popup)
+ });
+ this.combo.on(BI.Combo.EVENT_TRIGGER_CHANGE, function () {
+ self.fireEvent(BI.BubbleCombo.EVENT_TRIGGER_CHANGE, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_CHANGE, function () {
+ self.fireEvent(BI.BubbleCombo.EVENT_CHANGE, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_EXPAND, function () {
+ self.fireEvent(BI.BubbleCombo.EVENT_EXPAND, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_COLLAPSE, function () {
+ self.fireEvent(BI.BubbleCombo.EVENT_COLLAPSE, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_AFTER_INIT, function () {
+ self.fireEvent(BI.BubbleCombo.EVENT_AFTER_INIT, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {
+ self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_AFTER_POPUPVIEW, function () {
+ self._showTriangle();
+ self.fireEvent(BI.BubbleCombo.EVENT_AFTER_POPUPVIEW, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () {
+ self._hideTriangle();
+ self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_HIDEVIEW, arguments);
+ });
+ this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {
+ self.fireEvent(BI.BubbleCombo.EVENT_AFTER_HIDEVIEW, arguments);
+ });
+ },
+
+ _getAdjustLength: function () {
+ return this._const.TRIANGLE_LENGTH + this.options.adjustLength;
+ },
+
+ _createTriangle: function (direction) {
+ var pos = {}, op = {};
+ var adjustLength = this.options.adjustLength;
+ var offset = this.element.offset();
+ var left = offset.left, right = offset.left + this.element.outerWidth();
+ var top = offset.top, bottom = offset.top + this.element.outerHeight();
+ switch (direction) {
+ case "left":
+ pos = {
+ top: top,
+ height: this.element.outerHeight(),
+ left: left - adjustLength - this._const.TRIANGLE_LENGTH
+ };
+ op = {width: this._const.TRIANGLE_LENGTH};
+ break;
+ case "right":
+ pos = {
+ top: top,
+ height: this.element.outerHeight(),
+ left: right + adjustLength
+ };
+ op = {width: this._const.TRIANGLE_LENGTH};
+ break;
+ case "top":
+ pos = {
+ left: left,
+ width: this.element.outerWidth(),
+ top: top - adjustLength - this._const.TRIANGLE_LENGTH
+ };
+ op = {height: this._const.TRIANGLE_LENGTH};
+ break;
+ case "bottom":
+ pos = {
+ left: left,
+ width: this.element.outerWidth(),
+ top: bottom + adjustLength
+ };
+ op = {height: this._const.TRIANGLE_LENGTH};
+ break;
+ default:
+ break;
+ }
+ this.triangle && this.triangle.destroy();
+ this.triangle = BI.createWidget(op, {
+ type: "bi.center_adapt",
+ cls: "button-combo-triangle-wrapper",
+ items: [{
+ type: "bi.layout",
+ cls: "bubble-combo-triangle-" + direction + " bi-high-light-border"
+ }]
+ });
+ pos.el = this.triangle;
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [pos]
+ })
+ },
+
+ _createLeftTriangle: function () {
+ this._createTriangle("left");
+ },
+
+ _createRightTriangle: function () {
+ this._createTriangle("right");
+ },
+
+ _createTopTriangle: function () {
+ this._createTriangle("top");
+ },
+
+ _createBottomTriangle: function () {
+ this._createTriangle("bottom");
+ },
+
+ _showTriangle: function () {
+ var pos = this.combo.getPopupPosition();
+ switch (pos.dir) {
+ case "left,top":
+ case "left,bottom":
+ this._createLeftTriangle();
+ this.combo.getView().showLine("right");
+ break;
+ case "right,top":
+ case "right,bottom":
+ this._createRightTriangle();
+ this.combo.getView().showLine("left");
+ break;
+ case "top,left":
+ case "top,right":
+ this._createTopTriangle();
+ this.combo.getView().showLine("bottom");
+ break;
+ case "bottom,left":
+ case "bottom,right":
+ this._createBottomTriangle();
+ this.combo.getView().showLine("top");
+ break;
+ }
+ },
+
+ _hideTriangle: function () {
+ this.triangle && this.triangle.destroy();
+ this.triangle = null;
+ this.combo.getView() && this.combo.getView().hideLine();
+ },
+
+ hideView: function () {
+ this._hideTriangle();
+ this.combo && this.combo.hideView();
+ },
+
+ showView: function () {
+ this.combo && this.combo.showView();
+ },
+
+ isViewVisible: function () {
+ return this.combo.isViewVisible();
+ }
+});
+
+BI.BubbleCombo.EVENT_TRIGGER_CHANGE = "EVENT_TRIGGER_CHANGE";
+BI.BubbleCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.BubbleCombo.EVENT_EXPAND = "EVENT_EXPAND";
+BI.BubbleCombo.EVENT_COLLAPSE = "EVENT_COLLAPSE";
+BI.BubbleCombo.EVENT_AFTER_INIT = "EVENT_AFTER_INIT";
+
+
+BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW";
+BI.BubbleCombo.EVENT_AFTER_POPUPVIEW = "EVENT_AFTER_POPUPVIEW";
+BI.BubbleCombo.EVENT_BEFORE_HIDEVIEW = "EVENT_BEFORE_HIDEVIEW";
+BI.BubbleCombo.EVENT_AFTER_HIDEVIEW = "EVENT_AFTER_HIDEVIEW";
+BI.shortcut("bi.bubble_combo", BI.BubbleCombo);/**
+ * Created by GUY on 2017/2/8.
+ *
+ * @class BI.BubblePopupView
+ * @extends BI.PopupView
+ */
+BI.BubblePopupView = BI.inherit(BI.PopupView, {
+ _defaultConfig: function () {
+ var config = BI.BubblePopupView.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(config, {
+ baseCls: config.baseCls + " bi-bubble-popup-view"
+ })
+ },
+ _init: function () {
+ BI.BubblePopupView.superclass._init.apply(this, arguments);
+ },
+
+ showLine: function (direction) {
+ var pos = {}, op = {};
+ switch (direction) {
+ case "left":
+ pos = {
+ top: 0,
+ bottom: 0,
+ left: -1
+ };
+ op = {width: 3};
+ break;
+ case "right":
+ pos = {
+ top: 0,
+ bottom: 0,
+ right: -1
+ };
+ op = {width: 3};
+ break;
+ case "top":
+ pos = {
+ left: 0,
+ right: 0,
+ top: -1
+ };
+ op = {height: 3};
+ break;
+ case "bottom":
+ pos = {
+ left: 0,
+ right: 0,
+ bottom: -1
+ };
+ op = {height: 3};
+ break;
+ default:
+ break;
+ }
+ this.line = BI.createWidget(op, {
+ type: "bi.layout",
+ cls: "bubble-popup-line bi-high-light-background"
+ });
+ pos.el = this.line;
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [pos]
+ })
+ },
+
+ hideLine: function () {
+ this.line && this.line.destroy();
+ }
+});
+
+BI.shortcut("bi.bubble_popup_view", BI.BubblePopupView);
+
+/**
+ * Created by GUY on 2017/2/8.
+ *
+ * @class BI.BubblePopupBarView
+ * @extends BI.BubblePopupView
+ */
+BI.BubblePopupBarView = BI.inherit(BI.BubblePopupView, {
+ _defaultConfig: function () {
+ return BI.extend(BI.BubblePopupBarView.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-bubble-bar-popup-view",
+ buttons: [{value: BI.i18nText(BI.i18nText("BI-Basic_Sure"))}, {value: BI.i18nText("BI-Basic_Cancel"), level: "ignore"}]
+ })
+ },
+ _init: function () {
+ BI.BubblePopupBarView.superclass._init.apply(this, arguments);
+ },
+ _createToolBar: function () {
+ var o = this.options, self = this;
+
+ var items = [];
+ BI.each(o.buttons.reverse(), function (i, buttonOpt) {
+ if(BI.isWidget(buttonOpt)){
+ items.push(buttonOpt);
+ }else{
+ items.push(BI.extend({
+ type: 'bi.button',
+ height: 30,
+ handler: function (v) {
+ self.fireEvent(BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON, v);
+ }
+ }, buttonOpt))
+ }
+ });
+ return BI.createWidget({
+ type: 'bi.right_vertical_adapt',
+ height: 40,
+ hgap: 10,
+ bgap: 10,
+ items: items
+ });
+ }
+});
+BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON = "EVENT_CLICK_TOOLBAR_BUTTON";
+BI.shortcut("bi.bubble_bar_popup_view", BI.BubblePopupBarView);/**
+ * Created by Young's on 2016/4/28.
+ */
+BI.EditorIconCheckCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.EditorIconCheckCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseClass: "bi-check-editor-combo",
+ width: 100,
+ height: 24,
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn,
+ allowBlank: true,
+ watermark: "",
+ errorText: ""
+ })
+ },
+
+ _init: function () {
+ BI.EditorIconCheckCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.editor_trigger",
+ items: o.items,
+ height: o.height,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker,
+ allowBlank: o.allowBlank,
+ watermark: o.watermark,
+ errorText: o.errorText
+ });
+ this.trigger.on(BI.EditorTrigger.EVENT_CHANGE, function () {
+ self.popup.setValue(this.getValue());
+ self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE);
+ });
+ this.popup = BI.createWidget({
+ type: "bi.text_value_check_combo_popup",
+ chooseType: o.chooseType,
+ items: o.items
+ });
+ this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.editorIconCheckCombo.hideView();
+ self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE);
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.editorIconCheckCombo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 2,
+ el: this.trigger,
+ popup: {
+ el: this.popup,
+ maxHeight: 300
+ }
+ });
+ },
+
+ setValue: function (v) {
+ this.editorIconCheckCombo.setValue(v);
+ },
+
+ getValue: function () {
+ return this.trigger.getValue();
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ this.editorIconCheckCombo.populate(items);
+ }
+});
+BI.EditorIconCheckCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.editor_icon_check_combo", BI.EditorIconCheckCombo);/**
+ * Created by GUY on 2016/2/2.
+ *
+ * @class BI.IconCombo
+ * @extend BI.Widget
+ */
+BI.IconCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.IconCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-icon-combo",
+ width: 24,
+ height: 24,
+ iconClass: "",
+ el: {},
+ popup: {},
+ minWidth: 100,
+ maxWidth: 'auto',
+ maxHeight: 300,
+ direction: "bottom",
+ adjustLength: 3,//调整的距离
+ adjustXOffset: 0,
+ adjustYOffset: 0,
+ offsetStyle: "left",
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE
+ })
+ },
+
+ _init: function () {
+ BI.IconCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget(o.el, {
+ type: "bi.icon_combo_trigger",
+ iconClass: o.iconClass,
+ title: o.title,
+ items: o.items,
+ width: o.width,
+ height: o.height,
+ iconWidth: o.iconWidth,
+ iconHeight: o.iconHeight
+ });
+ this.popup = BI.createWidget(o.popup, {
+ type: "bi.icon_combo_popup",
+ chooseType: o.chooseType,
+ items: o.items
+ });
+ this.popup.on(BI.IconComboPopup.EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.iconCombo.hideView();
+ self.fireEvent(BI.IconCombo.EVENT_CHANGE);
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.iconCombo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ direction: o.direction,
+ trigger: o.trigger,
+ container: o.container,
+ adjustLength: o.adjustLength,
+ adjustXOffset: o.adjustXOffset,
+ adjustYOffset: o.adjustYOffset,
+ offsetStyle: o.offsetStyle,
+ el: this.trigger,
+ popup: {
+ el: this.popup,
+ maxWidth: o.maxWidth,
+ maxHeight: o.maxHeight,
+ minWidth: o.minWidth
+ }
+ });
+ },
+
+ showView: function () {
+ this.iconCombo.showView();
+ },
+
+ hideView: function () {
+ this.iconCombo.hideView();
+ },
+
+ setValue: function (v) {
+ this.iconCombo.setValue(v);
+ },
+
+ getValue: function () {
+ return this.iconCombo.getValue();
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ this.iconCombo.populate(items);
+ }
+});
+BI.IconCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.icon_combo", BI.IconCombo);/**
+ * Created by GUY on 2016/2/2.
+ *
+ * @class BI.IconComboPopup
+ * @extend BI.Pane
+ */
+BI.IconComboPopup = BI.inherit(BI.Pane, {
+ _defaultConfig: function () {
+ return BI.extend(BI.IconComboPopup.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi.icon-combo-popup",
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE
+ });
+ },
+
+ _init: function () {
+ BI.IconComboPopup.superclass._init.apply(this, arguments);
+ var o = this.options, self = this;
+ this.popup = BI.createWidget({
+ type: "bi.button_group",
+ items: BI.createItems(o.items, {
+ type: "bi.single_select_icon_text_item",
+ height: 30
+ }),
+ chooseType: o.chooseType,
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ });
+
+ this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.IconComboPopup.EVENT_CHANGE, val, obj);
+ }
+ });
+
+ BI.createWidget({
+ type: "bi.vertical",
+ element: this,
+ items: [this.popup]
+ });
+ },
+
+ populate: function (items) {
+ BI.IconComboPopup.superclass.populate.apply(this, arguments);
+ items = BI.createItems(items, {
+ type: "bi.single_select_icon_text_item",
+ height: 30
+ });
+ this.popup.populate(items);
+ },
+
+ getValue: function () {
+ return this.popup.getValue();
+ },
+
+ setValue: function (v) {
+ this.popup.setValue(v);
+ }
+
+});
+BI.IconComboPopup.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.icon_combo_popup", BI.IconComboPopup);/**
+ * Created by GUY on 2016/2/2.
+ *
+ * @class BI.IconComboTrigger
+ * @extend BI.Widget
+ */
+BI.IconComboTrigger = BI.inherit(BI.Trigger, {
+ _defaultConfig: function () {
+ return BI.extend(BI.IconComboTrigger.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-icon-combo-trigger",
+ el: {},
+ items: [],
+ iconClass: "",
+ width: 25,
+ height: 25,
+ isShowDown: true
+ });
+ },
+
+ _init: function () {
+ BI.IconComboTrigger.superclass._init.apply(this, arguments);
+ var o = this.options, self = this;
+ this.button = BI.createWidget(o.el, {
+ type: "bi.icon_change_button",
+ cls: "icon-combo-trigger-icon " + o.iconClass,
+ disableSelected: true,
+ width: o.width,
+ height: o.height,
+ iconWidth: o.iconWidth,
+ iconHeight: o.iconHeight
+ });
+ this.down = BI.createWidget({
+ type: "bi.icon_button",
+ disableSelected: true,
+ cls: "icon-combo-down-icon trigger-triangle-font",
+ width: 12,
+ height: 8
+ });
+ this.down.setVisible(o.isShowDown);
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.button,
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }, {
+ el: this.down,
+ right: 0,
+ bottom: 0
+ }]
+ });
+ if (BI.isKey(o.value)) {
+ this.setValue(o.value);
+ }
+ },
+
+ populate: function (items) {
+ var o = this.options;
+ this.options.items = items || [];
+ this.button.setIcon(o.iconClass);
+ this.button.setSelected(false);
+ this.down.setSelected(false);
+ },
+
+ setValue: function (v) {
+ BI.IconComboTrigger.superclass.setValue.apply(this, arguments);
+ var o = this.options;
+ var iconClass = "";
+ v = BI.isArray(v) ? v[0] : v;
+ if (BI.any(this.options.items, function (i, item) {
+ if (v === item.value) {
+ iconClass = item.iconClass;
+ return true;
+ }
+ })) {
+ this.button.setIcon(iconClass);
+ this.button.setSelected(true);
+ this.down.setSelected(true);
+ } else {
+ this.button.setIcon(o.iconClass);
+ this.button.setSelected(false);
+ this.down.setSelected(false);
+ }
+ }
+});
+BI.IconComboTrigger.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.icon_combo_trigger", BI.IconComboTrigger);/**
+ * Created by Windy on 2017/12/12.
+ * combo : icon + text + icon, popup : icon + text
+ */
+BI.IconTextValueCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.IconTextValueCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseClass: "bi-icon-text-value-combo",
+ height: 30,
+ value: "",
+ el: {}
+ });
+ },
+
+ _init: function () {
+ BI.IconTextValueCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget(o.el, {
+ type: "bi.select_icon_text_trigger",
+ items: o.items,
+ height: o.height
+ });
+ this.popup = BI.createWidget({
+ type: "bi.icon_text_value_combo_popup",
+ items: o.items
+ });
+ this.popup.on(BI.IconTextValueComboPopup.EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.textIconCombo.hideView();
+ self.fireEvent(BI.IconTextValueCombo.EVENT_CHANGE, arguments);
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.textIconCombo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 2,
+ el: this.trigger,
+ popup: {
+ el: this.popup,
+ maxHeight: 300
+ }
+ });
+ if (BI.isKey(o.value)) {
+ this.setValue(o.value);
+ }
+ },
+
+ setValue: function (v) {
+ this.textIconCombo.setValue(v);
+ },
+
+ getValue: function () {
+ return this.textIconCombo.getValue();
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ this.textIconCombo.populate(items);
+ }
+});
+BI.IconTextValueCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.icon_text_value_combo", BI.IconTextValueCombo);/**
+ * Created by Windy on 2017/12/12.
+ */
+BI.IconTextValueComboPopup = BI.inherit(BI.Pane, {
+ _defaultConfig: function () {
+ return BI.extend(BI.IconTextValueComboPopup.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-icon-text-icon-popup"
+ });
+ },
+
+ _init: function () {
+ BI.IconTextValueComboPopup.superclass._init.apply(this, arguments);
+ var o = this.options, self = this;
+ this.popup = BI.createWidget({
+ type: "bi.button_group",
+ items: BI.createItems(o.items, {
+ type: "bi.single_select_icon_text_item",
+ height: 30
+ }),
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ });
+
+ this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.IconTextValueComboPopup.EVENT_CHANGE, val, obj);
+ }
+ });
+
+ BI.createWidget({
+ type: "bi.vertical",
+ element: this,
+ items: [this.popup]
+ });
+ },
+
+ populate: function (items) {
+ BI.IconTextValueComboPopup.superclass.populate.apply(this, arguments);
+ items = BI.createItems(items, {
+ type: "bi.single_select_icon_text_item",
+ height: 30
+ });
+ this.popup.populate(items);
+ },
+
+ getValue: function () {
+ return this.popup.getValue();
+ },
+
+ setValue: function (v) {
+ this.popup.setValue(v);
+ }
+
+});
+BI.IconTextValueComboPopup.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.icon_text_value_combo_popup", BI.IconTextValueComboPopup);/**
+ * 单选combo
+ *
+ * @class BI.StaticCombo
+ * @extend BI.Widget
+ */
+BI.StaticCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.StaticCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-static-combo",
+ height: 24,
+ text: "",
+ el: {},
+ items: [],
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE
+ })
+ },
+
+ _init: function () {
+ BI.StaticCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget(o.el, {
+ type: "bi.text_icon_item",
+ cls: "bi-select-text-trigger bi-border pull-down-font",
+ text: o.text,
+ readonly: true,
+ textLgap: 5,
+ height: o.height - 2
+ });
+ this.popup = BI.createWidget({
+ type: "bi.text_value_combo_popup",
+ textAlign: o.textAlign,
+ chooseType: o.chooseType,
+ items: o.items
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () {
+ self.combo.hideView();
+ self.fireEvent(BI.StaticCombo.EVENT_CHANGE, arguments);
+ });
+ this.combo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 2,
+ el: this.trigger,
+ popup: {
+ el: this.popup
+ }
+ });
+ },
+
+ populate: function (items) {
+ this.combo.populate(items);
+ },
+
+ setValue: function (v) {
+ this.combo.setValue(v);
+ },
+
+ getValue: function () {
+ return this.combo.getValue();
+ }
+});
+BI.StaticCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.static_combo", BI.StaticCombo);/**
+ * @class BI.TextValueCheckCombo
+ * @extend BI.Widget
+ * combo : text + icon, popup : check + text
+ */
+BI.TextValueCheckCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.TextValueCheckCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseClass: "bi-text-value-check-combo",
+ width: 100,
+ height: 24,
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ value: ""
+ });
+ },
+
+ _init: function () {
+ BI.TextValueCheckCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.select_text_trigger",
+ items: o.items,
+ height: o.height
+ });
+ this.popup = BI.createWidget({
+ type: "bi.text_value_check_combo_popup",
+ chooseType: o.chooseType,
+ items: o.items
+ });
+ this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.textIconCheckCombo.hideView();
+ self.fireEvent(BI.TextValueCheckCombo.EVENT_CHANGE);
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.textIconCheckCombo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 2,
+ el: this.trigger,
+ popup: {
+ el: this.popup,
+ maxHeight: 300
+ }
+ });
+
+ if (BI.isKey(o.value)) {
+ this.setValue(o.value);
+ }
+ },
+
+ setTitle: function (title) {
+ this.trigger.setTitle(title);
+ },
+
+ setValue: function (v) {
+ this.textIconCheckCombo.setValue(v);
+ },
+
+ setWarningTitle: function (title) {
+ this.trigger.setWarningTitle(title);
+ },
+
+ getValue: function () {
+ return this.textIconCheckCombo.getValue();
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ this.textIconCheckCombo.populate(items);
+ }
+});
+BI.TextValueCheckCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.text_value_check_combo", BI.TextValueCheckCombo);/**
+ * @class BI.SmallTextValueCheckCombo
+ * @extend BI.Widget
+ * combo : text + icon, popup : check + text
+ */
+BI.SmallTextValueCheckCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.SmallTextValueCheckCombo.superclass._defaultConfig.apply(this, arguments), {
+ width: 100,
+ height: 24,
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ text: ""
+ })
+ },
+
+ _init: function () {
+ BI.SmallTextValueCheckCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.small_select_text_trigger",
+ items: o.items,
+ height: o.height,
+ text: o.text
+ });
+ this.popup = BI.createWidget({
+ type: "bi.text_value_check_combo_popup",
+ chooseType: o.chooseType,
+ items: o.items
+ });
+ this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.SmallTextIconCheckCombo.hideView();
+ self.fireEvent(BI.SmallTextValueCheckCombo.EVENT_CHANGE);
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.SmallTextIconCheckCombo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 2,
+ el: this.trigger,
+ popup: {
+ el: this.popup,
+ maxHeight: 300
+ }
+ });
+ },
+
+ setValue: function (v) {
+ this.SmallTextIconCheckCombo.setValue(v);
+ },
+
+ getValue: function () {
+ return this.SmallTextIconCheckCombo.getValue();
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ this.SmallTextIconCheckCombo.populate(items);
+ }
+});
+BI.SmallTextValueCheckCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.small_text_value_check_combo", BI.SmallTextValueCheckCombo);BI.TextValueCheckComboPopup = BI.inherit(BI.Pane, {
+ _defaultConfig: function () {
+ return BI.extend(BI.TextValueCheckComboPopup.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-text-icon-popup",
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE
+ });
+ },
+
+ _init: function () {
+ BI.TextValueCheckComboPopup.superclass._init.apply(this, arguments);
+ var o = this.options, self = this;
+ this.popup = BI.createWidget({
+ type: "bi.button_group",
+ items: this._formatItems(o.items),
+ chooseType: o.chooseType,
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ });
+
+ this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.TextValueCheckComboPopup.EVENT_CHANGE, val, obj);
+ }
+ });
+
+ BI.createWidget({
+ type: "bi.vertical",
+ element: this,
+ items: [this.popup]
+ });
+ },
+
+ _formatItems: function (items) {
+ return BI.map(items, function (i, item) {
+ return BI.extend({
+ type: "bi.icon_text_item",
+ cls: "item-check-font bi-list-item",
+ height: 30
+ }, item);
+ });
+ },
+
+ populate: function (items) {
+ BI.TextValueCheckComboPopup.superclass.populate.apply(this, arguments);
+ this.popup.populate(this._formatItems(items));
+ },
+
+ getValue: function () {
+ return this.popup.getValue();
+ },
+
+ setValue: function (v) {
+ this.popup.setValue(v);
+ }
+
+});
+BI.TextValueCheckComboPopup.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.text_value_check_combo_popup", BI.TextValueCheckComboPopup);/**
+ * @class BI.TextValueCombo
+ * @extend BI.Widget
+ * combo : text + icon, popup : text
+ * 参见场景dashboard布局方式选择
+ */
+BI.TextValueCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.TextValueCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseClass: "bi-text-value-combo",
+ height: 30,
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ value: "",
+ el: {}
+ });
+ },
+
+ _init: function () {
+ BI.TextValueCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget(o.el, {
+ type: "bi.select_text_trigger",
+ items: o.items,
+ height: o.height
+ });
+ this.popup = BI.createWidget({
+ type: "bi.text_value_combo_popup",
+ chooseType: o.chooseType,
+ items: o.items
+ });
+ this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.textIconCombo.hideView();
+ self.fireEvent(BI.TextValueCombo.EVENT_CHANGE, arguments);
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.textIconCombo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 2,
+ el: this.trigger,
+ popup: {
+ el: this.popup,
+ maxHeight: 300
+ }
+ });
+ if (BI.isKey(o.value)) {
+ this.setValue(o.value);
+ }
+ },
+
+ setValue: function (v) {
+ this.textIconCombo.setValue(v);
+ },
+
+ getValue: function () {
+ return this.textIconCombo.getValue();
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ this.textIconCombo.populate(items);
+ }
+});
+BI.TextValueCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.text_value_combo", BI.TextValueCombo);/**
+ * @class BI.SmallTextValueCombo
+ * @extend BI.Widget
+ * combo : text + icon, popup : text
+ * 参见场景dashboard布局方式选择
+ */
+BI.SmallTextValueCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.SmallTextValueCombo.superclass._defaultConfig.apply(this, arguments), {
+ width: 100,
+ height: 24,
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ el: {},
+ text: ""
+ })
+ },
+
+ _init: function () {
+ BI.SmallTextValueCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget(o.el, {
+ type: "bi.small_select_text_trigger",
+ items: o.items,
+ height: o.height,
+ text: o.text
+ });
+ this.popup = BI.createWidget({
+ type: "bi.text_value_combo_popup",
+ chooseType: o.chooseType,
+ items: o.items
+ });
+ this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () {
+ self.setValue(self.popup.getValue());
+ self.SmallTextValueCombo.hideView();
+ self.fireEvent(BI.SmallTextValueCombo.EVENT_CHANGE);
+ });
+ this.popup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.SmallTextValueCombo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ adjustLength: 2,
+ el: this.trigger,
+ popup: {
+ el: this.popup,
+ maxHeight: 300
+ }
+ });
+ },
+
+ setValue: function (v) {
+ this.SmallTextValueCombo.setValue(v);
+ },
+
+ getValue: function () {
+ return this.SmallTextValueCombo.getValue();
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ this.SmallTextValueCombo.populate(items);
+ }
+});
+BI.SmallTextValueCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.small_text_value_combo", BI.SmallTextValueCombo);BI.TextValueComboPopup = BI.inherit(BI.Pane, {
+ _defaultConfig: function () {
+ return BI.extend(BI.TextValueComboPopup.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-text-icon-popup",
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE
+ });
+ },
+
+ _init: function () {
+ BI.TextValueComboPopup.superclass._init.apply(this, arguments);
+ var o = this.options, self = this;
+ this.popup = BI.createWidget({
+ type: "bi.button_group",
+ items: BI.createItems(o.items, {
+ type: "bi.single_select_item",
+ textAlign: o.textAlign,
+ height: 30
+ }),
+ chooseType: o.chooseType,
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ });
+
+ this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.TextValueComboPopup.EVENT_CHANGE, val, obj);
+ }
+ });
+
+ BI.createWidget({
+ type: "bi.vertical",
+ element: this,
+ items: [this.popup]
+ });
+ },
+
+ populate: function (items) {
+ BI.TextValueComboPopup.superclass.populate.apply(this, arguments);
+ items = BI.createItems(items, {
+ type: "bi.single_select_item",
+ height: 30
+ });
+ this.popup.populate(items);
+ },
+
+ getValue: function () {
+ return this.popup.getValue();
+ },
+
+ setValue: function (v) {
+ this.popup.setValue(v);
+ }
+
+});
+BI.TextValueComboPopup.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.text_value_combo_popup", BI.TextValueComboPopup);/**
+ * @class BI.TextValueDownListCombo
+ * @extend BI.Widget
+ */
+BI.TextValueDownListCombo = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.TextValueDownListCombo.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-text-value-down-list-combo",
+ height: 30
+ })
+ },
+
+ _init: function () {
+ BI.TextValueDownListCombo.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+
+ this._createValueMap();
+
+ this.trigger = BI.createWidget({
+ type: "bi.down_list_select_text_trigger",
+ height: o.height,
+ items: o.items
+ });
+
+ this.combo = BI.createWidget({
+ type: "bi.down_list_combo",
+ element: this,
+ chooseType: BI.Selection.Single,
+ adjustLength: 2,
+ height: o.height,
+ el: this.trigger,
+ items: BI.deepClone(o.items)
+ });
+
+ this.combo.on(BI.DownListCombo.EVENT_CHANGE, function () {
+ self.setValue(self.combo.getValue()[0].value);
+ self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE);
+ });
+
+ this.combo.on(BI.DownListCombo.EVENT_SON_VALUE_CHANGE, function () {
+ self.setValue(self.combo.getValue()[0].childValue);
+ self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE);
+ });
+ },
+
+ _createValueMap: function () {
+ var self = this;
+ this.valueMap = {};
+ BI.each(BI.flatten(this.options.items), function (idx, item) {
+ if (BI.has(item, "el")) {
+ BI.each(item.children, function (id, it) {
+ self.valueMap[it.value] = {value: item.el.value, childValue: it.value}
+ });
+ } else {
+ self.valueMap[item.value] = {value: item.value};
+ }
+ });
+ },
+
+ setValue: function (v) {
+ v = this.valueMap[v];
+ this.combo.setValue([v]);
+ this.trigger.setValue(v.childValue || v.value);
+ },
+
+ getValue: function () {
+ var v = this.combo.getValue()[0];
+ return [v.childValue || v.value];
+ },
+
+ populate: function (items) {
+ this.options.items = BI.flatten(items);
+ this.combo.populate(items);
+ this._createValueMap();
+ }
+});
+BI.TextValueDownListCombo.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.text_value_down_list_combo", BI.TextValueDownListCombo);/**
+ * 选择字段trigger, downlist专用
+ * 显示形式为 父亲值(儿子值)
+ *
+ * @class BI.DownListSelectTextTrigger
+ * @extends BI.Trigger
+ */
+BI.DownListSelectTextTrigger = BI.inherit(BI.Trigger, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.DownListSelectTextTrigger.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-down-list-select-text-trigger",
+ height: 24,
+ text: ""
+ });
+ },
+
+ _init: function () {
+ BI.DownListSelectTextTrigger.superclass._init.apply(this, arguments);
+ var o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.select_text_trigger",
+ element: this,
+ height: o.height,
+ items: this._formatItemArray(o.items),
+ text: o.text
+ });
+ },
+
+ _formatItemArray: function(){
+ var sourceArray = BI.flatten(BI.deepClone(this.options.items));
+ var targetArray = [];
+ BI.each(sourceArray, function(idx, item){
+ if(BI.has(item, "el")){
+ BI.each(item.children, function(id, it){
+ it.text = item.el.text + "(" + it.text + ")";
+ });
+ targetArray = BI.concat(targetArray, item.children);
+ }else{
+ targetArray.push(item);
+ }
+ });
+ return targetArray;
+ },
+
+ setValue: function (vals) {
+ this.trigger.setValue(vals);
+ },
+
+ populate: function (items) {
+ this.trigger.populate(this._formatItemArray(items));
+ }
+});
+BI.shortcut("bi.down_list_select_text_trigger", BI.DownListSelectTextTrigger);/**
+ * 有清楚按钮的文本框
+ * Created by GUY on 2015/9/29.
+ * @class BI.SmallTextEditor
+ * @extends BI.SearchEditor
+ */
+BI.ClearEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.ClearEditor.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: "bi-clear-editor",
+ height: 24,
+ errorText: "",
+ watermark: "",
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn
+ });
+ },
+ _init: function () {
+ BI.ClearEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.editor",
+ height: o.height,
+ watermark: o.watermark,
+ allowBlank: true,
+ errorText: o.errorText,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker
+ });
+ this.clear = BI.createWidget({
+ type: "bi.icon_button",
+ stopEvent: true,
+ cls: "search-close-h-font"
+ });
+ this.clear.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.setValue("");
+ self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.STOPEDIT);
+ self.fireEvent(BI.ClearEditor.EVENT_CLEAR);
+ });
+ BI.createWidget({
+ element: this,
+ type: "bi.htape",
+ items: [
+ {
+ el: this.editor
+ },
+ {
+ el: this.clear,
+ width: 25
+ }]
+ });
+ this.editor.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+
+ this.editor.on(BI.Editor.EVENT_FOCUS, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_FOCUS);
+ });
+ this.editor.on(BI.Editor.EVENT_BLUR, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_BLUR);
+ });
+ this.editor.on(BI.Editor.EVENT_CLICK, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_CLICK);
+ });
+ this.editor.on(BI.Editor.EVENT_CHANGE, function () {
+ self._checkClear();
+ self.fireEvent(BI.ClearEditor.EVENT_CHANGE);
+ });
+ this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {
+ self.fireEvent(BI.ClearEditor.EVENT_KEY_DOWN, v);
+ });
+ this.editor.on(BI.Editor.EVENT_SPACE, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_SPACE)
+ });
+ this.editor.on(BI.Editor.EVENT_BACKSPACE, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_BACKSPACE)
+ });
+
+
+ this.editor.on(BI.Editor.EVENT_VALID, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_VALID)
+ });
+ this.editor.on(BI.Editor.EVENT_ERROR, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_ERROR)
+ });
+ this.editor.on(BI.Editor.EVENT_ENTER, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_ENTER);
+ });
+ this.editor.on(BI.Editor.EVENT_RESTRICT, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_RESTRICT)
+ });
+ this.editor.on(BI.Editor.EVENT_EMPTY, function () {
+ self._checkClear();
+ self.fireEvent(BI.ClearEditor.EVENT_EMPTY)
+ });
+ this.editor.on(BI.Editor.EVENT_REMOVE, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_REMOVE)
+ });
+ this.editor.on(BI.Editor.EVENT_CONFIRM, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_CONFIRM)
+ });
+ this.editor.on(BI.Editor.EVENT_START, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_START);
+ });
+ this.editor.on(BI.Editor.EVENT_PAUSE, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_PAUSE);
+ });
+ this.editor.on(BI.Editor.EVENT_STOP, function () {
+ self.fireEvent(BI.ClearEditor.EVENT_STOP);
+ });
+
+ this.clear.invisible();
+ },
+
+ _checkClear: function () {
+ if (!this.getValue()) {
+ this.clear.invisible();
+ } else {
+ this.clear.visible();
+ }
+ },
+
+ focus: function () {
+ this.editor.focus();
+ },
+
+ blur: function () {
+ this.editor.blur();
+ },
+
+ getValue: function () {
+ if (this.isValid()) {
+ var res = this.editor.getValue().match(/[\S]+/g);
+ return BI.isNull(res) ? "" : res[res.length - 1];
+ }
+ },
+
+ setValue: function (v) {
+ this.editor.setValue(v);
+ if (BI.isKey(v)) {
+ this.clear.visible();
+ }
+ },
+
+ isValid: function () {
+ return this.editor.isValid();
+ }
+});
+BI.ClearEditor.EVENT_CHANGE = "EVENT_CHANGE";
+BI.ClearEditor.EVENT_FOCUS = "EVENT_FOCUS";
+BI.ClearEditor.EVENT_BLUR = "EVENT_BLUR";
+BI.ClearEditor.EVENT_CLICK = "EVENT_CLICK";
+BI.ClearEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
+BI.ClearEditor.EVENT_SPACE = "EVENT_SPACE";
+BI.ClearEditor.EVENT_BACKSPACE = "EVENT_BACKSPACE";
+BI.ClearEditor.EVENT_CLEAR = "EVENT_CLEAR";
+
+BI.ClearEditor.EVENT_START = "EVENT_START";
+BI.ClearEditor.EVENT_PAUSE = "EVENT_PAUSE";
+BI.ClearEditor.EVENT_STOP = "EVENT_STOP";
+BI.ClearEditor.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.ClearEditor.EVENT_VALID = "EVENT_VALID";
+BI.ClearEditor.EVENT_ERROR = "EVENT_ERROR";
+BI.ClearEditor.EVENT_ENTER = "EVENT_ENTER";
+BI.ClearEditor.EVENT_RESTRICT = "EVENT_RESTRICT";
+BI.ClearEditor.EVENT_REMOVE = "EVENT_REMOVE";
+BI.ClearEditor.EVENT_EMPTY = "EVENT_EMPTY";
+BI.shortcut("bi.clear_editor", BI.ClearEditor);/**
+ * 带标记的文本框
+ * Created by GUY on 2016/1/25.
+ * @class BI.ShelterEditor
+ * @extends BI.Widget
+ */
+BI.ShelterEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.ShelterEditor.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-shelter-editor",
+ hgap: 4,
+ vgap: 2,
+ lgap: 0,
+ rgap: 0,
+ tgap: 0,
+ bgap: 0,
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn,
+ allowBlank: true,
+ watermark: "",
+ errorText: "",
+ height: 24,
+ textAlign: "left"
+ })
+ },
+
+ _init: function () {
+ BI.ShelterEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.editor",
+ height: o.height,
+ hgap: o.hgap,
+ vgap: o.vgap,
+ lgap: o.lgap,
+ rgap: o.rgap,
+ tgap: o.tgap,
+ bgap: o.bgap,
+ value: o.value,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker,
+ allowBlank: o.allowBlank,
+ watermark: o.watermark,
+ errorText: o.errorText
+ });
+ this.text = BI.createWidget({
+ type: "bi.text_button",
+ cls: "shelter-editor-text",
+ title: o.title,
+ warningTitle: o.warningTitle,
+ tipType: o.tipType,
+ textAlign: o.textAlign,
+ height: o.height,
+ hgap: 4
+ });
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.text,
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }]
+ });
+ this.text.on(BI.Controller.EVENT_CHANGE, function () {
+ arguments[2] = self;
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.text.on(BI.TextButton.EVENT_CHANGE, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_CLICK_LABEL);
+ });
+ this.editor.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_FOCUS, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_FOCUS, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_BLUR, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_BLUR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CLICK, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_CLICK, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CHANGE, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {
+ self.fireEvent(BI.ShelterEditor.EVENT_KEY_DOWN, arguments);
+ });
+
+ this.editor.on(BI.Editor.EVENT_VALID, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_VALID, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CONFIRM, function () {
+ self._showHint();
+ self._checkText();
+ self.fireEvent(BI.ShelterEditor.EVENT_CONFIRM, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_START, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_START, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_PAUSE, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_PAUSE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_STOP, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_STOP, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_SPACE, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_SPACE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ERROR, function () {
+ self._checkText();
+ self.fireEvent(BI.ShelterEditor.EVENT_ERROR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ENTER, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_ENTER, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_RESTRICT, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_RESTRICT, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_EMPTY, function () {
+ self.fireEvent(BI.ShelterEditor.EVENT_EMPTY, arguments);
+ });
+ BI.createWidget({
+ type: "bi.vertical",
+ scrolly: false,
+ element: this,
+ items: [this.editor]
+ });
+ this._showHint();
+ self._checkText();
+ },
+
+ _checkText: function () {
+ var o = this.options;
+ if (this.editor.getValue() === "") {
+ this.text.setValue(o.watermark || "");
+ this.text.element.addClass("bi-water-mark");
+ } else {
+ this.text.setValue(this.editor.getValue());
+ this.text.element.removeClass("bi-water-mark");
+ }
+ },
+
+ _showInput: function () {
+ this.editor.visible();
+ this.text.invisible();
+ },
+
+ _showHint: function () {
+ this.editor.invisible();
+ this.text.visible();
+ },
+
+ setTitle: function (title) {
+ this.text.setTitle(title);
+ },
+
+ setWarningTitle: function (title) {
+ this.text.setWarningTitle(title);
+ },
+
+ focus: function () {
+ this._showInput();
+ this.editor.focus();
+ },
+
+ blur: function () {
+ this.editor.blur();
+ this._showHint();
+ this._checkText();
+ },
+
+ doRedMark: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ isValid: function () {
+ return this.editor.isValid();
+ },
+
+ setErrorText: function (text) {
+ this.editor.setErrorText(text);
+ },
+
+ getErrorText: function () {
+ return this.editor.getErrorText();
+ },
+
+ isEditing: function () {
+ return this.editor.isEditing();
+ },
+
+ getLastValidValue: function () {
+ return this.editor.getLastValidValue();
+ },
+
+ setTextStyle: function (style) {
+ this.text.setStyle(style);
+ },
+
+ setValue: function (k) {
+ this.editor.setValue(k);
+ this._checkText();
+ },
+
+ getValue: function () {
+ return this.editor.getValue();
+ },
+
+ getState: function () {
+ return this.text.getValue();
+ },
+
+ setState: function (v) {
+ this._showHint();
+ this.text.setValue(v);
+ }
+});
+BI.ShelterEditor.EVENT_CHANGE = "EVENT_CHANGE";
+BI.ShelterEditor.EVENT_FOCUS = "EVENT_FOCUS";
+BI.ShelterEditor.EVENT_BLUR = "EVENT_BLUR";
+BI.ShelterEditor.EVENT_CLICK = "EVENT_CLICK";
+BI.ShelterEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
+BI.ShelterEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL";
+
+BI.ShelterEditor.EVENT_START = "EVENT_START";
+BI.ShelterEditor.EVENT_PAUSE = "EVENT_PAUSE";
+BI.ShelterEditor.EVENT_STOP = "EVENT_STOP";
+BI.ShelterEditor.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.ShelterEditor.EVENT_VALID = "EVENT_VALID";
+BI.ShelterEditor.EVENT_ERROR = "EVENT_ERROR";
+BI.ShelterEditor.EVENT_ENTER = "EVENT_ENTER";
+BI.ShelterEditor.EVENT_RESTRICT = "EVENT_RESTRICT";
+BI.ShelterEditor.EVENT_SPACE = "EVENT_SPACE";
+BI.ShelterEditor.EVENT_EMPTY = "EVENT_EMPTY";
+
+BI.shortcut("bi.shelter_editor", BI.ShelterEditor);/**
+ * Created by User on 2017/7/28.
+ */
+BI.SignInitialEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.SignInitialEditor.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-sign-initial-editor",
+ hgap: 4,
+ vgap: 2,
+ lgap: 0,
+ rgap: 0,
+ tgap: 0,
+ bgap: 0,
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn,
+ allowBlank: true,
+ watermark: "",
+ errorText: "",
+ value: "",
+ text: "",
+ height: 24
+ })
+ },
+
+ _init: function () {
+ BI.SignInitialEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.editor",
+ height: o.height,
+ hgap: o.hgap,
+ vgap: o.vgap,
+ lgap: o.lgap,
+ rgap: o.rgap,
+ tgap: o.tgap,
+ bgap: o.bgap,
+ value: o.value,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker,
+ allowBlank: o.allowBlank,
+ watermark: o.watermark,
+ errorText: o.errorText
+ });
+ this.text = BI.createWidget({
+ type: "bi.text_button",
+ cls: "sign-editor-text",
+ title: o.title,
+ warningTitle: o.warningTitle,
+ tipType: o.tipType,
+ textAlign: "left",
+ height: o.height,
+ hgap: 4,
+ handler: function () {
+ self._showInput();
+ self.editor.focus();
+ self.editor.selectAll();
+ }
+ });
+ this.text.on(BI.TextButton.EVENT_CHANGE, function () {
+ BI.nextTick(function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_CLICK_LABEL)
+ });
+ });
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.text,
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }]
+ });
+ this.editor.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_FOCUS, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_FOCUS, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_BLUR, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_BLUR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CLICK, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_CLICK, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CHANGE, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {
+ self.fireEvent(BI.SignInitialEditor.EVENT_KEY_DOWN, arguments);
+ });
+
+ this.editor.on(BI.Editor.EVENT_VALID, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_VALID, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CONFIRM, function () {
+ self._showHint();
+ self._checkText();
+ self.fireEvent(BI.SignInitialEditor.EVENT_CONFIRM, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_START, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_START, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_PAUSE, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_PAUSE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_STOP, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_STOP, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_SPACE, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_SPACE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ERROR, function () {
+ self._checkText();
+ self.fireEvent(BI.SignInitialEditor.EVENT_ERROR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ENTER, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_ENTER, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_RESTRICT, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_RESTRICT, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_EMPTY, function () {
+ self.fireEvent(BI.SignInitialEditor.EVENT_EMPTY, arguments);
+ });
+ BI.createWidget({
+ type: "bi.vertical",
+ scrolly: false,
+ element: this,
+ items: [this.editor]
+ });
+ this._showHint();
+ self._checkText();
+ },
+
+ _checkText: function () {
+ var o = this.options;
+ BI.nextTick(BI.bind(function () {
+ if (this.editor.getValue() === "") {
+ this.text.setValue(o.watermark || "");
+ this.text.element.addClass("bi-water-mark");
+ } else {
+ var v = this.editor.getValue();
+ v = (BI.isEmpty(v) || v == o.text) ? o.text : v + "(" + o.text + ")";
+ this.text.setValue(v);
+ this.text.element.removeClass("bi-water-mark");
+ }
+ }, this));
+ },
+
+ _showInput: function () {
+ this.editor.visible();
+ this.text.invisible();
+ },
+
+ _showHint: function () {
+ this.editor.invisible();
+ this.text.visible();
+ },
+
+ setTitle: function (title) {
+ this.text.setTitle(title);
+ },
+
+ setWarningTitle: function (title) {
+ this.text.setWarningTitle(title);
+ },
+
+ focus: function () {
+ this._showInput();
+ this.editor.focus();
+ },
+
+ blur: function () {
+ this.editor.blur();
+ this._showHint();
+ this._checkText();
+ },
+
+ doRedMark: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ isValid: function () {
+ return this.editor.isValid();
+ },
+
+ setErrorText: function (text) {
+ this.editor.setErrorText(text);
+ },
+
+ getErrorText: function () {
+ return this.editor.getErrorText();
+ },
+
+ isEditing: function () {
+ return this.editor.isEditing();
+ },
+
+ getLastValidValue: function () {
+ return this.editor.getLastValidValue();
+ },
+
+ setValue: function (v) {
+ var o = this.options;
+ this.editor.setValue(v.value);
+ o.text = v.text || o.text;
+ this._checkText();
+ },
+
+ getValue: function () {
+ return {
+ value: this.editor.getValue(),
+ text: this.options.text
+ }
+ },
+
+ getState: function () {
+ return this.text.getValue();
+ },
+
+ setState: function (v) {
+ var o = this.options;
+ this._showHint();
+ v = (BI.isEmpty(v) || v == o.text) ? o.text : v + "(" + o.text + ")";
+ this.text.setValue(v);
+ }
+});
+BI.SignInitialEditor.EVENT_CHANGE = "EVENT_CHANGE";
+BI.SignInitialEditor.EVENT_FOCUS = "EVENT_FOCUS";
+BI.SignInitialEditor.EVENT_BLUR = "EVENT_BLUR";
+BI.SignInitialEditor.EVENT_CLICK = "EVENT_CLICK";
+BI.SignInitialEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
+BI.SignInitialEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL";
+
+BI.SignInitialEditor.EVENT_START = "EVENT_START";
+BI.SignInitialEditor.EVENT_PAUSE = "EVENT_PAUSE";
+BI.SignInitialEditor.EVENT_STOP = "EVENT_STOP";
+BI.SignInitialEditor.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.SignInitialEditor.EVENT_VALID = "EVENT_VALID";
+BI.SignInitialEditor.EVENT_ERROR = "EVENT_ERROR";
+BI.SignInitialEditor.EVENT_ENTER = "EVENT_ENTER";
+BI.SignInitialEditor.EVENT_RESTRICT = "EVENT_RESTRICT";
+BI.SignInitialEditor.EVENT_SPACE = "EVENT_SPACE";
+BI.SignInitialEditor.EVENT_EMPTY = "EVENT_EMPTY";
+
+BI.shortcut("bi.sign_initial_editor", BI.SignInitialEditor);/**
+ * 带标记的文本框
+ * Created by GUY on 2015/8/28.
+ * @class BI.SignEditor
+ * @extends BI.Widget
+ */
+BI.SignEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.SignEditor.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-sign-editor",
+ hgap: 4,
+ vgap: 2,
+ lgap: 0,
+ rgap: 0,
+ tgap: 0,
+ bgap: 0,
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn,
+ allowBlank: true,
+ watermark: "",
+ errorText: "",
+ height: 24
+ })
+ },
+
+ _init: function () {
+ BI.SignEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.editor",
+ height: o.height,
+ hgap: o.hgap,
+ vgap: o.vgap,
+ lgap: o.lgap,
+ rgap: o.rgap,
+ tgap: o.tgap,
+ bgap: o.bgap,
+ value: o.value,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker,
+ allowBlank: o.allowBlank,
+ watermark: o.watermark,
+ errorText: o.errorText
+ });
+ this.text = BI.createWidget({
+ type: "bi.text_button",
+ cls: "sign-editor-text",
+ title: o.title,
+ warningTitle: o.warningTitle,
+ tipType: o.tipType,
+ textAlign: "left",
+ height: o.height,
+ hgap: 4,
+ handler: function () {
+ self._showInput();
+ self.editor.focus();
+ self.editor.selectAll();
+ }
+ });
+ this.text.on(BI.TextButton.EVENT_CHANGE, function () {
+ BI.nextTick(function () {
+ self.fireEvent(BI.SignEditor.EVENT_CLICK_LABEL)
+ });
+ });
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.text,
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }]
+ });
+ this.editor.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_FOCUS, function () {
+ self.fireEvent(BI.SignEditor.EVENT_FOCUS, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_BLUR, function () {
+ self.fireEvent(BI.SignEditor.EVENT_BLUR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CLICK, function () {
+ self.fireEvent(BI.SignEditor.EVENT_CLICK, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CHANGE, function () {
+ self.fireEvent(BI.SignEditor.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {
+ self.fireEvent(BI.SignEditor.EVENT_KEY_DOWN, arguments);
+ });
+
+ this.editor.on(BI.Editor.EVENT_VALID, function () {
+ self.fireEvent(BI.SignEditor.EVENT_VALID, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CONFIRM, function () {
+ self._showHint();
+ self._checkText();
+ self.fireEvent(BI.SignEditor.EVENT_CONFIRM, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_START, function () {
+ self.fireEvent(BI.SignEditor.EVENT_START, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_PAUSE, function () {
+ self.fireEvent(BI.SignEditor.EVENT_PAUSE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_STOP, function () {
+ self.fireEvent(BI.SignEditor.EVENT_STOP, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_SPACE, function () {
+ self.fireEvent(BI.SignEditor.EVENT_SPACE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ERROR, function () {
+ self._checkText();
+ self.fireEvent(BI.SignEditor.EVENT_ERROR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ENTER, function () {
+ self.fireEvent(BI.SignEditor.EVENT_ENTER, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_RESTRICT, function () {
+ self.fireEvent(BI.SignEditor.EVENT_RESTRICT, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_EMPTY, function () {
+ self.fireEvent(BI.SignEditor.EVENT_EMPTY, arguments);
+ });
+ BI.createWidget({
+ type: "bi.vertical",
+ scrolly: false,
+ element: this,
+ items: [this.editor]
+ });
+ this._showHint();
+ self._checkText();
+ },
+
+ _checkText: function () {
+ var o = this.options;
+ BI.nextTick(BI.bind(function () {
+ if (this.editor.getValue() === "") {
+ this.text.setValue(o.watermark || "");
+ this.text.element.addClass("bi-water-mark");
+ } else {
+ this.text.setValue(this.editor.getValue());
+ this.text.element.removeClass("bi-water-mark");
+ }
+ }, this));
+ },
+
+ _showInput: function () {
+ this.editor.visible();
+ this.text.invisible();
+ },
+
+ _showHint: function () {
+ this.editor.invisible();
+ this.text.visible();
+ },
+
+ setTitle: function (title) {
+ this.text.setTitle(title);
+ },
+
+ setWarningTitle: function (title) {
+ this.text.setWarningTitle(title);
+ },
+
+ focus: function () {
+ this._showInput();
+ this.editor.focus();
+ },
+
+ blur: function () {
+ this.editor.blur();
+ this._showHint();
+ this._checkText();
+ },
+
+ doRedMark: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ isValid: function () {
+ return this.editor.isValid();
+ },
+
+ setErrorText: function (text) {
+ this.editor.setErrorText(text);
+ },
+
+ getErrorText: function () {
+ return this.editor.getErrorText();
+ },
+
+ isEditing: function () {
+ return this.editor.isEditing();
+ },
+
+ getLastValidValue: function () {
+ return this.editor.getLastValidValue();
+ },
+
+ setValue: function (k) {
+ this.editor.setValue(k);
+ this._checkText();
+ },
+
+ getValue: function () {
+ return this.editor.getValue();
+ },
+
+ getState: function () {
+ return this.text.getValue();
+ },
+
+ setState: function (v) {
+ this._showHint();
+ this.text.setValue(v);
+ }
+});
+BI.SignEditor.EVENT_CHANGE = "EVENT_CHANGE";
+BI.SignEditor.EVENT_FOCUS = "EVENT_FOCUS";
+BI.SignEditor.EVENT_BLUR = "EVENT_BLUR";
+BI.SignEditor.EVENT_CLICK = "EVENT_CLICK";
+BI.SignEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
+BI.SignEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL";
+
+BI.SignEditor.EVENT_START = "EVENT_START";
+BI.SignEditor.EVENT_PAUSE = "EVENT_PAUSE";
+BI.SignEditor.EVENT_STOP = "EVENT_STOP";
+BI.SignEditor.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.SignEditor.EVENT_VALID = "EVENT_VALID";
+BI.SignEditor.EVENT_ERROR = "EVENT_ERROR";
+BI.SignEditor.EVENT_ENTER = "EVENT_ENTER";
+BI.SignEditor.EVENT_RESTRICT = "EVENT_RESTRICT";
+BI.SignEditor.EVENT_SPACE = "EVENT_SPACE";
+BI.SignEditor.EVENT_EMPTY = "EVENT_EMPTY";
+
+BI.shortcut("bi.sign_editor", BI.SignEditor);/**
+ * guy
+ * 记录状态的输入框
+ * @class BI.StateEditor
+ * @extends BI.Single
+ */
+BI.StateEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.StateEditor.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-state-editor",
+ hgap: 4,
+ vgap: 2,
+ lgap: 0,
+ rgap: 0,
+ tgap: 0,
+ bgap: 0,
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn,
+ allowBlank: true,
+ watermark: "",
+ errorText: "",
+ height: 24
+ })
+ },
+
+ _init: function () {
+ BI.StateEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.editor",
+ height: o.height,
+ hgap: o.hgap,
+ vgap: o.vgap,
+ lgap: o.lgap,
+ rgap: o.rgap,
+ tgap: o.tgap,
+ bgap: o.bgap,
+ value: o.value,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker,
+ allowBlank: o.allowBlank,
+ watermark: o.watermark,
+ errorText: o.errorText
+ });
+ this.text = BI.createWidget({
+ type: "bi.text_button",
+ cls: "state-editor-infinite-text bi-disabled",
+ textAlign: "left",
+ height: o.height,
+ text: BI.i18nText("BI-Basic_Unrestricted"),
+ hgap: 4,
+ handler: function () {
+ self._showInput();
+ self.editor.focus();
+ self.editor.setValue("");
+ }
+ });
+ this.text.on(BI.TextButton.EVENT_CHANGE, function () {
+ BI.nextTick(function () {
+ self.fireEvent(BI.StateEditor.EVENT_CLICK_LABEL);
+ });
+ });
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.text,
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }]
+ });
+ this.editor.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_FOCUS, function () {
+ self.fireEvent(BI.StateEditor.EVENT_FOCUS, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_BLUR, function () {
+ self.fireEvent(BI.StateEditor.EVENT_BLUR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CLICK, function () {
+ self.fireEvent(BI.StateEditor.EVENT_CLICK, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CHANGE, function () {
+ self.fireEvent(BI.StateEditor.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {
+ self.fireEvent(BI.StateEditor.EVENT_KEY_DOWN, arguments);
+ });
+
+ this.editor.on(BI.Editor.EVENT_VALID, function () {
+ self.fireEvent(BI.StateEditor.EVENT_VALID, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CONFIRM, function () {
+ self._showHint();
+ self.fireEvent(BI.StateEditor.EVENT_CONFIRM, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_START, function () {
+ self.fireEvent(BI.StateEditor.EVENT_START, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_PAUSE, function () {
+ self.fireEvent(BI.StateEditor.EVENT_PAUSE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_STOP, function () {
+ self.fireEvent(BI.StateEditor.EVENT_STOP, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_SPACE, function () {
+ self.fireEvent(BI.StateEditor.EVENT_SPACE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ERROR, function () {
+ self.fireEvent(BI.StateEditor.EVENT_ERROR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ENTER, function () {
+ self.fireEvent(BI.StateEditor.EVENT_ENTER, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_RESTRICT, function () {
+ self.fireEvent(BI.StateEditor.EVENT_RESTRICT, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_EMPTY, function () {
+ self.fireEvent(BI.StateEditor.EVENT_EMPTY, arguments);
+ });
+ BI.createWidget({
+ type: "bi.vertical",
+ scrolly: false,
+ element: this,
+ items: [this.editor]
+ });
+ this._showHint();
+ },
+
+ doRedMark: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ focus: function () {
+ if (this.options.disabled === false) {
+ this._showInput();
+ this.editor.focus();
+ }
+ },
+
+ blur: function () {
+ this.editor.blur();
+ this._showHint();
+ },
+
+ _showInput: function () {
+ this.editor.visible();
+ this.text.invisible();
+ },
+
+ _showHint: function () {
+ this.editor.invisible();
+ this.text.visible();
+ },
+
+ isValid: function () {
+ return this.editor.isValid();
+ },
+
+ setErrorText: function (text) {
+ this.editor.setErrorText(text);
+ },
+
+ getErrorText: function () {
+ return this.editor.getErrorText();
+ },
+
+ isEditing: function () {
+ return this.editor.isEditing();
+ },
+
+ getLastValidValue: function () {
+ return this.editor.getLastValidValue();
+ },
+
+ setValue: function (k) {
+ this.editor.setValue(k);
+ },
+
+ getValue: function () {
+ return this.editor.getValue();
+ },
+
+ getState: function () {
+ return this.editor.getValue().match(/[^\s]+/g);
+ },
+
+ setState: function (v) {
+ BI.StateEditor.superclass.setValue.apply(this, arguments);
+ if (BI.isNumber(v)) {
+ if (v === BI.Selection.All) {
+ this.text.setText(BI.i18nText("BI-Select_All"));
+ this.text.setTitle("");
+ this.text.element.removeClass("state-editor-infinite-text");
+ } else if (v === BI.Selection.Multi) {
+ this.text.setText(BI.i18nText("BI-Select_Part"));
+ this.text.setTitle("");
+ this.text.element.removeClass("state-editor-infinite-text");
+ } else {
+ this.text.setText(BI.i18nText("BI-Basic_Unrestricted"));
+ this.text.setTitle("");
+ this.text.element.addClass("state-editor-infinite-text");
+ }
+ return;
+ }
+ if (BI.isString(v)) {
+ // if (BI.isEmpty(v)) {
+ // this.text.setText(BI.i18nText("BI-Basic_Unrestricted"));
+ // this.text.setTitle("");
+ // this.text.element.addClass("state-editor-infinite-text");
+ // } else {
+ this.text.setText(v);
+ this.text.setTitle(v);
+ this.text.element.removeClass("state-editor-infinite-text");
+ // }
+ return;
+ }
+ if (BI.isArray(v)) {
+ if (BI.isEmpty(v)) {
+ this.text.setText(BI.i18nText("BI-Basic_Unrestricted"));
+ this.text.element.addClass("state-editor-infinite-text");
+ } else if (v.length === 1) {
+ this.text.setText(v[0]);
+ this.text.setTitle(v[0]);
+ this.text.element.removeClass("state-editor-infinite-text");
+ } else {
+ this.text.setText(BI.i18nText("BI-Select_Part"));
+ this.text.setTitle("");
+ this.text.element.removeClass("state-editor-infinite-text");
+ }
+ }
+ }
+});
+BI.StateEditor.EVENT_CHANGE = "EVENT_CHANGE";
+BI.StateEditor.EVENT_FOCUS = "EVENT_FOCUS";
+BI.StateEditor.EVENT_BLUR = "EVENT_BLUR";
+BI.StateEditor.EVENT_CLICK = "EVENT_CLICK";
+BI.StateEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
+BI.StateEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL";
+
+BI.StateEditor.EVENT_START = "EVENT_START";
+BI.StateEditor.EVENT_PAUSE = "EVENT_PAUSE";
+BI.StateEditor.EVENT_STOP = "EVENT_STOP";
+BI.StateEditor.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.StateEditor.EVENT_VALID = "EVENT_VALID";
+BI.StateEditor.EVENT_ERROR = "EVENT_ERROR";
+BI.StateEditor.EVENT_ENTER = "EVENT_ENTER";
+BI.StateEditor.EVENT_RESTRICT = "EVENT_RESTRICT";
+BI.StateEditor.EVENT_SPACE = "EVENT_SPACE";
+BI.StateEditor.EVENT_EMPTY = "EVENT_EMPTY";
+
+BI.shortcut("bi.state_editor", BI.StateEditor);/**
+ * 无限制-已选择状态输入框
+ * Created by GUY on 2016/5/18.
+ * @class BI.SimpleStateEditor
+ * @extends BI.Single
+ */
+BI.SimpleStateEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.SimpleStateEditor.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-simple-state-editor",
+ hgap: 4,
+ vgap: 2,
+ lgap: 0,
+ rgap: 0,
+ tgap: 0,
+ bgap: 0,
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn,
+ mouseOut: false,
+ allowBlank: true,
+ watermark: "",
+ errorText: "",
+ height: 24
+ })
+ },
+
+ _init: function () {
+ BI.SimpleStateEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.editor",
+ height: o.height,
+ hgap: o.hgap,
+ vgap: o.vgap,
+ lgap: o.lgap,
+ rgap: o.rgap,
+ tgap: o.tgap,
+ bgap: o.bgap,
+ value: o.value,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker,
+ allowBlank: o.allowBlank,
+ watermark: o.watermark,
+ errorText: o.errorText
+ });
+ this.text = BI.createWidget({
+ type: "bi.text_button",
+ cls: "state-editor-infinite-text bi-disabled",
+ textAlign: "left",
+ height: o.height,
+ text: BI.i18nText("BI-Basic_Unrestricted"),
+ hgap: 4,
+ handler: function () {
+ self._showInput();
+ self.editor.focus();
+ self.editor.setValue("");
+ }
+ });
+ this.text.on(BI.TextButton.EVENT_CHANGE, function () {
+ BI.nextTick(function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK_LABEL);
+ });
+ });
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.text,
+ left: 0,
+ right: 0,
+ top: 0,
+ bottom: 0
+ }]
+ });
+ this.editor.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_FOCUS, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_FOCUS, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_BLUR, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_BLUR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CLICK, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CHANGE, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_KEY_DOWN, arguments);
+ });
+
+ this.editor.on(BI.Editor.EVENT_VALID, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_VALID, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_CONFIRM, function () {
+ self._showHint();
+ self.fireEvent(BI.SimpleStateEditor.EVENT_CONFIRM, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_START, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_START, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_PAUSE, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_PAUSE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_STOP, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_STOP, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_SPACE, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_SPACE, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ERROR, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_ERROR, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_ENTER, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_ENTER, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_RESTRICT, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_RESTRICT, arguments);
+ });
+ this.editor.on(BI.Editor.EVENT_EMPTY, function () {
+ self.fireEvent(BI.SimpleStateEditor.EVENT_EMPTY, arguments);
+ });
+ BI.createWidget({
+ type: "bi.vertical",
+ scrolly: false,
+ element: this,
+ items: [this.editor]
+ });
+ this._showHint();
+ },
+
+ doRedMark: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doRedMark.apply(this.text, arguments);
+ },
+
+ unRedMark: function () {
+ this.text.unRedMark.apply(this.text, arguments);
+ },
+
+ doHighLight: function () {
+ if (this.editor.getValue() === "" && BI.isKey(this.options.watermark)) {
+ return;
+ }
+ this.text.doHighLight.apply(this.text, arguments);
+ },
+
+ unHighLight: function () {
+ this.text.unHighLight.apply(this.text, arguments);
+ },
+
+ focus: function () {
+ this._showInput();
+ this.editor.focus();
+ },
+
+ blur: function () {
+ this.editor.blur();
+ this._showHint();
+ },
+
+ _showInput: function () {
+ this.editor.visible();
+ this.text.invisible();
+ },
+
+ _showHint: function () {
+ this.editor.invisible();
+ this.text.visible();
+ },
+
+ isValid: function () {
+ return this.editor.isValid();
+ },
+
+ setErrorText: function (text) {
+ this.editor.setErrorText(text);
+ },
+
+ getErrorText: function () {
+ return this.editor.getErrorText();
+ },
+
+ isEditing: function () {
+ return this.editor.isEditing();
+ },
+
+ getLastValidValue: function () {
+ return this.editor.getLastValidValue();
+ },
+
+ setValue: function (k) {
+ this.editor.setValue(k);
+ },
+
+ getValue: function () {
+ return this.editor.getValue();
+ },
+
+ getState: function () {
+ return this.editor.getValue().match(/[^\s]+/g);
+ },
+
+ setState: function (v) {
+ BI.SimpleStateEditor.superclass.setValue.apply(this, arguments);
+ if (BI.isNumber(v)) {
+ if (v === BI.Selection.All) {
+ this.text.setText(BI.i18nText("BI-Already_Selected"));
+ this.text.element.removeClass("state-editor-infinite-text");
+ } else if (v === BI.Selection.Multi) {
+ this.text.setText(BI.i18nText("BI-Already_Selected"));
+ this.text.element.removeClass("state-editor-infinite-text");
+ } else {
+ this.text.setText(BI.i18nText("BI-Basic_Unrestricted"));
+ this.text.element.addClass("state-editor-infinite-text");
+ }
+ return;
+ }
+ if (!BI.isArray(v) || v.length === 1) {
+ this.text.setText(v);
+ this.text.setTitle(v);
+ this.text.element.removeClass("state-editor-infinite-text");
+ } else if (BI.isEmpty(v)) {
+ this.text.setText(BI.i18nText("BI-Basic_Unrestricted"));
+ this.text.element.addClass("state-editor-infinite-text");
+ } else {
+ this.text.setText(BI.i18nText("BI-Already_Selected"));
+ this.text.element.removeClass("state-editor-infinite-text");
+ }
+ }
+});
+BI.SimpleStateEditor.EVENT_CHANGE = "EVENT_CHANGE";
+BI.SimpleStateEditor.EVENT_FOCUS = "EVENT_FOCUS";
+BI.SimpleStateEditor.EVENT_BLUR = "EVENT_BLUR";
+BI.SimpleStateEditor.EVENT_CLICK = "EVENT_CLICK";
+BI.SimpleStateEditor.EVENT_KEY_DOWN = "EVENT_KEY_DOWN";
+BI.SimpleStateEditor.EVENT_CLICK_LABEL = "EVENT_CLICK_LABEL";
+
+BI.SimpleStateEditor.EVENT_START = "EVENT_START";
+BI.SimpleStateEditor.EVENT_PAUSE = "EVENT_PAUSE";
+BI.SimpleStateEditor.EVENT_STOP = "EVENT_STOP";
+BI.SimpleStateEditor.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.SimpleStateEditor.EVENT_VALID = "EVENT_VALID";
+BI.SimpleStateEditor.EVENT_ERROR = "EVENT_ERROR";
+BI.SimpleStateEditor.EVENT_ENTER = "EVENT_ENTER";
+BI.SimpleStateEditor.EVENT_RESTRICT = "EVENT_RESTRICT";
+BI.SimpleStateEditor.EVENT_SPACE = "EVENT_SPACE";
+BI.SimpleStateEditor.EVENT_EMPTY = "EVENT_EMPTY";
+
+BI.shortcut("bi.simple_state_editor", BI.SimpleStateEditor);/**
+ * 有确定取消按钮的弹出层
+ * @class BI.BarPopoverSection
+ * @extends BI.PopoverSection
+ * @abstract
+ */
+BI.BarPopoverSection = BI.inherit(BI.PopoverSection, {
+ _defaultConfig: function () {
+ return BI.extend(BI.BarPopoverSection.superclass._defaultConfig.apply(this, arguments), {
+ btns: [BI.i18nText(BI.i18nText("BI-Basic_Sure")), BI.i18nText(BI.i18nText("BI-Basic_Cancel"))]
+ })
+ },
+
+ _init: function () {
+ BI.BarPopoverSection.superclass._init.apply(this, arguments);
+ },
+
+ rebuildSouth: function (south) {
+ var self = this, o = this.options;
+ this.sure = BI.createWidget({
+ type: 'bi.button',
+ text: this.options.btns[0],
+ warningTitle: o.warningTitle,
+ height: 30,
+ value: 0,
+ handler: function (v) {
+ self.end();
+ self.close(v);
+ }
+ });
+ this.cancel = BI.createWidget({
+ type: 'bi.button',
+ text: this.options.btns[1],
+ height: 30,
+ value: 1,
+ level: 'ignore',
+ handler: function (v) {
+ self.close(v);
+ }
+ });
+ BI.createWidget({
+ type: 'bi.right_vertical_adapt',
+ element: south,
+ lgap: 10,
+ items: [this.cancel, this.sure]
+ });
+ },
+
+ setConfirmButtonEnable: function(v){
+ this.sure.setEnable(!!v);
+ }
+});/**
+ * 下拉框弹出层的多选版本,toolbar带有若干按钮, zIndex在1000w
+ * @class BI.MultiPopupView
+ * @extends BI.Widget
+ */
+
+BI.MultiPopupView = BI.inherit(BI.PopupView, {
+
+ _defaultConfig: function () {
+ var conf = BI.MultiPopupView.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-multi-list-view",
+ buttons: [BI.i18nText("BI-Basic_Sure")]
+ })
+ },
+
+ _init: function () {
+ BI.MultiPopupView.superclass._init.apply(this, arguments);
+ },
+
+ _createToolBar: function () {
+ var o = this.options, self = this;
+ if (o.buttons.length === 0) {
+ return;
+ }
+
+ var text = []; //构造[{text:content},……]
+ BI.each(o.buttons, function (idx, item) {
+ text.push({
+ text: item,
+ value: idx
+ })
+ });
+
+ this.buttongroup = BI.createWidget({
+ type: "bi.button_group",
+ cls: "list-view-toolbar bi-high-light bi-border-top",
+ height: 30,
+ items: BI.createItems(text, {
+ type: "bi.text_button",
+ once: false,
+ shadow: true,
+ isShadowShowingOnSelected: true
+ }),
+ layouts: [{
+ type: "bi.center",
+ hgap: 0,
+ vgap: 0
+ }]
+ });
+
+ this.buttongroup.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) {
+ self.fireEvent(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, value, obj);
+ });
+
+ return this.buttongroup;
+ }
+
+});
+
+BI.MultiPopupView.EVENT_CHANGE = "EVENT_CHANGE";
+BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON = "EVENT_CLICK_TOOLBAR_BUTTON";
+
+BI.shortcut("bi.multi_popup_view", BI.MultiPopupView);/**
+ * 可以理解为MultiPopupView和Panel两个面板的结合体
+ * @class BI.PopupPanel
+ * @extends BI.MultiPopupView
+ */
+
+BI.PopupPanel = BI.inherit(BI.MultiPopupView, {
+
+ _defaultConfig: function () {
+ var conf = BI.PopupPanel.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-popup-panel",
+ title: ""
+ })
+ },
+
+ _init: function () {
+ BI.PopupPanel.superclass._init.apply(this, arguments);
+ },
+
+ _createTool: function () {
+ var self = this, o = this.options;
+ var close = BI.createWidget({
+ type: "bi.icon_button",
+ cls: "close-h-font",
+ width: 25,
+ height: 25
+ });
+ close.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.setVisible(false);
+ self.fireEvent(BI.PopupPanel.EVENT_CLOSE);
+ });
+ return BI.createWidget({
+ type: "bi.htape",
+ cls: "popup-panel-title bi-background bi-border",
+ height: 25,
+ items: [{
+ el: {
+ type: "bi.label",
+ textAlign: "left",
+ text: o.title,
+ height: 25,
+ lgap: 10
+ }
+ }, {
+ el: close,
+ width: 25
+ }]
+ });
+ }
+});
+
+BI.PopupPanel.EVENT_CHANGE = "EVENT_CHANGE";
+BI.PopupPanel.EVENT_CLOSE = "EVENT_CLOSE";
+BI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON = "EVENT_CLICK_TOOLBAR_BUTTON";
+
+BI.shortcut("bi.popup_panel", BI.PopupPanel);/**
+ * list面板
+ *
+ * Created by GUY on 2015/10/30.
+ * @class BI.ListPane
+ * @extends BI.Pane
+ */
+BI.ListPane = BI.inherit(BI.Pane, {
+
+ _defaultConfig: function () {
+ var conf = BI.ListPane.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-list-pane",
+ logic: {
+ dynamic: true
+ },
+ lgap: 0,
+ rgap: 0,
+ tgap: 0,
+ bgap: 0,
+ vgap: 0,
+ hgap: 0,
+ items: [],
+ itemsCreator: BI.emptyFn,
+ hasNext: BI.emptyFn,
+ onLoaded: BI.emptyFn,
+ el: {
+ type: "bi.button_group"
+ }
+ })
+ },
+ _init: function () {
+ BI.ListPane.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+
+ this.button_group = BI.createWidget(o.el, {
+ type: "bi.button_group",
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,
+ behaviors: {},
+ items: o.items,
+ itemsCreator: function (op, calback) {
+ if (op.times === 1) {
+ self.empty();
+ BI.nextTick(function () {
+ self.loading()
+ });
+ }
+ o.itemsCreator(op, function () {
+ calback.apply(self, arguments);
+ op.times === 1 && BI.nextTick(function () {
+ self.loaded();
+ });
+ });
+ },
+ hasNext: o.hasNext,
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ });
+
+ this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.ListPane.EVENT_CHANGE, value, obj);
+ }
+ });
+ this.check();
+
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Top), BI.extend({
+ scrolly: true,
+ lgap: o.lgap,
+ rgap: o.rgap,
+ tgap: o.tgap,
+ bgap: o.bgap,
+ vgap: o.vgap,
+ hgap: o.hgap
+ }, o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Top, this.button_group)
+ }))));
+ },
+
+ hasPrev: function () {
+ return this.button_group.hasPrev && this.button_group.hasPrev();
+ },
+
+ hasNext: function () {
+ return this.button_group.hasNext && this.button_group.hasNext();
+ },
+
+ prependItems: function (items) {
+ this.options.items = items.concat(this.options.items);
+ this.button_group.prependItems.apply(this.button_group, arguments);
+ this.check();
+ },
+
+ addItems: function (items) {
+ this.options.items = this.options.items.concat(items);
+ this.button_group.addItems.apply(this.button_group, arguments);
+ this.check();
+ },
+
+ removeItemAt: function (indexes) {
+ indexes = indexes || [];
+ BI.removeAt(this.options.items, indexes);
+ this.button_group.removeItemAt.apply(this.button_group, arguments);
+ this.check();
+ },
+
+ populate: function (items) {
+ var self = this, o = this.options;
+ if (arguments.length === 0 && (BI.isFunction(this.button_group.attr("itemsCreator")))) {//接管loader的populate方法
+ this.button_group.attr("itemsCreator").apply(this, [{times: 1}, function () {
+ if (arguments.length === 0) {
+ throw new Error("参数不能为空");
+ }
+ self.populate.apply(self, arguments);
+ }]);
+ return;
+ }
+ BI.ListPane.superclass.populate.apply(this, arguments);
+ this.button_group.populate.apply(this.button_group, arguments);
+ },
+
+ empty: function () {
+ this.button_group.empty();
+ },
+
+ setNotSelectedValue: function () {
+ this.button_group.setNotSelectedValue.apply(this.button_group, arguments);
+ },
+
+ getNotSelectedValue: function () {
+ return this.button_group.getNotSelectedValue();
+ },
+
+ setValue: function () {
+ this.button_group.setValue.apply(this.button_group, arguments);
+ },
+
+ getValue: function () {
+ return this.button_group.getValue.apply(this.button_group, arguments);
+ },
+
+ getAllButtons: function () {
+ return this.button_group.getAllButtons();
+ },
+
+ getAllLeaves: function () {
+ return this.button_group.getAllLeaves();
+ },
+
+ getSelectedButtons: function () {
+ return this.button_group.getSelectedButtons();
+ },
+
+ getNotSelectedButtons: function () {
+ return this.button_group.getNotSelectedButtons();
+ },
+
+ getIndexByValue: function (value) {
+ return this.button_group.getIndexByValue(value);
+ },
+
+ getNodeById: function (id) {
+ return this.button_group.getNodeById(id);
+ },
+
+ getNodeByValue: function (value) {
+ return this.button_group.getNodeByValue(value);
+ }
+});
+BI.ListPane.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.list_pane", BI.ListPane);/**
+ * 带有标题栏的pane
+ * @class BI.Panel
+ * @extends BI.Widget
+ */
+BI.Panel = BI.inherit(BI.Widget,{
+ _defaultConfig : function(){
+ return BI.extend(BI.Panel.superclass._defaultConfig.apply(this,arguments),{
+ baseCls: "bi-panel bi-border",
+ title:"",
+ titleButtons:[],
+ el:{},
+ logic:{
+ dynamic: false
+ }
+ });
+ },
+
+ _init:function(){
+ BI.Panel.superclass._init.apply(this,arguments);
+ var o = this.options;
+
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic("vertical", BI.extend(o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection("top", this._createTitle()
+ ,this.options.el)
+ }))));
+ },
+
+ _createTitle:function(){
+ var self = this, o = this.options;
+ this.text = BI.createWidget({
+ type: "bi.label",
+ cls: "panel-title-text",
+ text: o.title,
+ height: 30
+ });
+
+ this.button_group = BI.createWidget({
+ type:"bi.button_group",
+ items: o.titleButtons,
+ layouts: [{
+ type: "bi.center_adapt",
+ lgap:10
+ }]
+ });
+
+ this.button_group.on(BI.Controller.EVENT_CHANGE, function(){
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+
+ this.button_group.on(BI.ButtonGroup.EVENT_CHANGE, function(value, obj){
+ self.fireEvent(BI.Panel.EVENT_CHANGE, value, obj);
+ });
+
+ return {
+ el: {
+ type: "bi.left_right_vertical_adapt",
+ cls: "panel-title bi-tips bi-border-bottom bi-background",
+ height: 30,
+ items: {
+ left: [this.text],
+ right: [this.button_group]
+ },
+ lhgap: 10,
+ rhgap: 10
+ },
+ height: 30
+ };
+ },
+
+ setTitle: function(title){
+ this.text.setValue(title);
+ }
+});
+BI.Panel.EVENT_CHANGE = "Panel.EVENT_CHANGE";
+
+BI.shortcut("bi.panel",BI.Panel);/**
+ * 选择列表
+ *
+ * Created by GUY on 2015/11/1.
+ * @class BI.SelectList
+ * @extends BI.Widget
+ */
+BI.SelectList = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.SelectList.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-select-list",
+ direction: BI.Direction.Top,//toolbar的位置
+ logic: {
+ dynamic: true
+ },
+ items: [],
+ itemsCreator: BI.emptyFn,
+ hasNext: BI.emptyFn,
+ onLoaded: BI.emptyFn,
+ toolbar: {
+ type: "bi.multi_select_bar"
+ },
+ el: {
+ type: "bi.list_pane"
+ }
+ })
+ },
+ _init: function () {
+ BI.SelectList.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+
+ //全选
+ this.toolbar = BI.createWidget(o.toolbar);
+ this.allSelected = false;
+ this.toolbar.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {
+ self.allSelected = this.isSelected();
+ if (type === BI.Events.CLICK) {
+ self.setAllSelected(self.allSelected);
+ self.fireEvent(BI.SelectList.EVENT_CHANGE, value, obj);
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+
+ this.list = BI.createWidget(o.el, {
+ type: "bi.list_pane",
+ items: o.items,
+ itemsCreator: function (op, callback) {
+ op.times === 1 && self.toolbar.setVisible(false);
+ o.itemsCreator(op, function (items) {
+ callback.apply(self, arguments);
+ if (op.times === 1) {
+ self.toolbar.setVisible(items && items.length > 0);
+ self.toolbar.setEnable(items && items.length > 0);
+ }
+ self._checkAllSelected();
+ });
+ },
+ onLoaded: o.onLoaded,
+ hasNext: o.hasNext
+ });
+
+ this.list.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {
+ if (type === BI.Events.CLICK) {
+ self._checkAllSelected();
+ self.fireEvent(BI.SelectList.EVENT_CHANGE, value, obj);
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({
+ scrolly: true
+ }, o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.toolbar, this.list)
+ }))));
+
+ if (o.items.length <= 0) {
+ this.toolbar.setVisible(false);
+ this.toolbar.setEnable(false);
+ }
+ },
+
+ _checkAllSelected: function () {
+ var selectLength = this.list.getValue().length;
+ var notSelectLength = this.getAllLeaves().length - selectLength;
+ var hasNext = this.list.hasNext();
+ var isAlreadyAllSelected = this.toolbar.isSelected();
+ var isHalf = selectLength > 0 && (notSelectLength > 0 || (!isAlreadyAllSelected && hasNext));
+ isHalf = isHalf || (notSelectLength > 0 && hasNext && isAlreadyAllSelected);
+ this.toolbar.setHalfSelected(isHalf);
+ !isHalf && this.toolbar.setSelected(selectLength > 0 && notSelectLength <= 0 && (!hasNext || isAlreadyAllSelected));
+ },
+
+ setAllSelected: function (v) {
+ BI.each(this.getAllButtons(), function (i, btn) {
+ (btn.setSelected || btn.setAllSelected).apply(btn, [v]);
+ });
+ this.allSelected = !!v;
+ this.toolbar.setSelected(v);
+ this.toolbar.setHalfSelected(false);
+ },
+
+ setToolBarVisible: function (b) {
+ this.toolbar.setVisible(b);
+ },
+
+ isAllSelected: function () {
+ return this.allSelected;
+ // return this.toolbar.isSelected();
+ },
+
+ hasPrev: function () {
+ return this.list.hasPrev();
+ },
+
+ hasNext: function () {
+ return this.list.hasNext();
+ },
+
+ prependItems: function (items) {
+ this.list.prependItems.apply(this.list, arguments);
+ },
+
+ addItems: function (items) {
+ this.list.addItems.apply(this.list, arguments);
+ },
+
+ setValue: function (data) {
+ var selectAll = data.type === BI.ButtonGroup.CHOOSE_TYPE_ALL;
+ this.setAllSelected(selectAll);
+ this.list[selectAll ? "setNotSelectedValue" : "setValue"](data.value);
+ this._checkAllSelected();
+ },
+
+ getValue: function () {
+ if (this.isAllSelected() === false) {
+ return {
+ type: BI.ButtonGroup.CHOOSE_TYPE_MULTI,
+ value: this.list.getValue(),
+ assist: this.list.getNotSelectedValue()
+ };
+ } else {
+ return {
+ type: BI.ButtonGroup.CHOOSE_TYPE_ALL,
+ value: this.list.getNotSelectedValue(),
+ assist: this.list.getValue()
+ };
+ }
+ },
+
+ empty: function () {
+ this.list.empty();
+ },
+
+ populate: function (items) {
+ this.toolbar.setVisible(!BI.isEmptyArray(items));
+ this.toolbar.setEnable(!BI.isEmptyArray(items));
+ this.list.populate.apply(this.list, arguments);
+ this._checkAllSelected();
+ },
+
+ _setEnable: function (enable) {
+ BI.SelectList.superclass._setEnable.apply(this, arguments);
+ this.toolbar.setEnable(enable);
+ },
+
+ resetHeight: function (h) {
+ var toolHeight = ( this.toolbar.element.outerHeight() || 25) * ( this.toolbar.isVisible() ? 1 : 0);
+ this.list.resetHeight ? this.list.resetHeight(h - toolHeight) :
+ this.list.element.css({"max-height": h - toolHeight + "px"})
+ },
+
+ setNotSelectedValue: function () {
+ this.list.setNotSelectedValue.apply(this.list, arguments);
+ this._checkAllSelected();
+ },
+
+ getNotSelectedValue: function () {
+ return this.list.getNotSelectedValue();
+ },
+
+ getAllButtons: function () {
+ return this.list.getAllButtons();
+ },
+
+ getAllLeaves: function () {
+ return this.list.getAllLeaves();
+ },
+
+ getSelectedButtons: function () {
+ return this.list.getSelectedButtons();
+ },
+
+ getNotSelectedButtons: function () {
+ return this.list.getNotSelectedButtons();
+ },
+
+ getIndexByValue: function (value) {
+ return this.list.getIndexByValue(value);
+ },
+
+ getNodeById: function (id) {
+ return this.list.getNodeById(id);
+ },
+
+ getNodeByValue: function (value) {
+ return this.list.getNodeByValue(value);
+ }
+});
+BI.SelectList.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.select_list", BI.SelectList);/**
+ * Created by roy on 15/11/6.
+ */
+BI.LazyLoader = BI.inherit(BI.Widget, {
+ _const: {
+ PAGE: 100
+ },
+ _defaultConfig: function () {
+ return BI.extend(BI.LazyLoader.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-lazy-loader",
+ el: {}
+ })
+ },
+
+ _init: function () {
+ var self = this, o = this.options;
+ BI.LazyLoader.superclass._init.apply(this, arguments);
+ var all = o.items.length;
+ this.loader = BI.createWidget({
+ type: "bi.loader",
+ element: this,
+ //下面是button_group的属性
+ el: o.el,
+
+ itemsCreator: function (options, populate) {
+ populate(self._getNextItems(options));
+ },
+ hasNext: function (option) {
+ return option.count < all;
+ }
+ });
+
+ this.loader.on(BI.Loader.EVENT_CHANGE, function (obj) {
+ self.fireEvent(BI.LazyLoader.EVENT_CHANGE, obj)
+ })
+ },
+ _getNextItems: function (options) {
+ var self = this, o = this.options;
+ var lastNum = o.items.length - this._const.PAGE * (options.times - 1);
+ var lastItems = BI.last(o.items, lastNum);
+ var nextItems = BI.first(lastItems, this._const.PAGE);
+ return nextItems;
+ },
+
+ populate: function (items) {
+ this.loader.populate(items);
+ },
+
+ addItems: function (items) {
+ this.loader.addItems(items);
+ },
+
+ empty: function () {
+ this.loader.empty();
+ },
+
+ setNotSelectedValue: function () {
+ this.loader.setNotSelectedValue.apply(this.loader, arguments);
+ },
+
+ getNotSelectedValue: function () {
+ return this.loader.getNotSelectedValue();
+ },
+
+ setValue: function () {
+ this.loader.setValue.apply(this.loader, arguments);
+ },
+
+ getValue: function () {
+ return this.loader.getValue.apply(this.loader, arguments);
+ },
+
+ getAllButtons: function () {
+ return this.loader.getAllButtons();
+ },
+
+ getAllLeaves: function () {
+ return this.loader.getAllLeaves();
+ },
+
+ getSelectedButtons: function () {
+ return this.loader.getSelectedButtons();
+ },
+
+ getNotSelectedButtons: function () {
+ return this.loader.getNotSelectedButtons();
+ },
+
+ getIndexByValue: function (value) {
+ return this.loader.getIndexByValue(value);
+ },
+
+ getNodeById: function (id) {
+ return this.loader.getNodeById(id);
+ },
+
+ getNodeByValue: function (value) {
+ return this.loader.getNodeByValue(value);
+ }
+});
+BI.LazyLoader.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.lazy_loader", BI.LazyLoader);/**
+ * 恶心的加载控件, 为解决排序问题引入的控件
+ *
+ * Created by GUY on 2015/11/12.
+ * @class BI.ListLoader
+ * @extends BI.Widget
+ */
+BI.ListLoader = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.ListLoader.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-list-loader",
+
+ isDefaultInit: true,//是否默认初始化数据
+
+ //下面是button_group的属性
+ el: {
+ type: "bi.button_group"
+ },
+
+ items: [],
+ itemsCreator: BI.emptyFn,
+ onLoaded: BI.emptyFn,
+
+ //下面是分页信息
+ count: false,
+ next: {},
+ hasNext: BI.emptyFn
+ })
+ },
+
+ _nextLoad: function () {
+ var self = this, o = this.options;
+ this.next.setLoading();
+ o.itemsCreator.apply(this, [{times: ++this.times}, function () {
+ self.next.setLoaded();
+ self.addItems.apply(self, arguments);
+ }]);
+ },
+
+ _init: function () {
+ BI.ListLoader.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ if (o.itemsCreator === false) {
+ o.next = false;
+ }
+
+ this.button_group = BI.createWidget(o.el, {
+ type: "bi.button_group",
+ element: this,
+ chooseType: 0,
+ items: o.items,
+ behaviors: {},
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ });
+ this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.ListLoader.EVENT_CHANGE, obj);
+ }
+ });
+
+ if (o.next !== false) {
+ this.next = BI.createWidget(BI.extend({
+ type: "bi.loading_bar"
+ }, o.next));
+ this.next.on(BI.Controller.EVENT_CHANGE, function (type) {
+ if (type === BI.Events.CLICK) {
+ self._nextLoad();
+ }
+ })
+ }
+
+ BI.createWidget({
+ type: "bi.vertical",
+ element: this,
+ items: [this.next]
+ });
+
+ o.isDefaultInit && BI.isEmpty(o.items) && BI.nextTick(BI.bind(function () {
+ this.populate();
+ }, this));
+ if (BI.isNotEmptyArray(o.items)) {
+ this.populate(o.items);
+ }
+ },
+
+ hasNext: function () {
+ var o = this.options;
+ if (BI.isNumber(o.count)) {
+ return this.count < o.count;
+ }
+ return !!o.hasNext.apply(this, [{
+ times: this.times,
+ count: this.count
+ }])
+ },
+
+ addItems: function (items) {
+ this.count += items.length;
+ if (BI.isObject(this.next)) {
+ if (this.hasNext()) {
+ this.options.items = this.options.items.concat(items);
+ this.next.setLoaded();
+ } else {
+ this.next.setEnd();
+ }
+ }
+ this.button_group.addItems.apply(this.button_group, arguments);
+ this.next.element.appendTo(this.element);
+ },
+
+ populate: function (items) {
+ var self = this, o = this.options;
+ if (arguments.length === 0 && (BI.isFunction(o.itemsCreator))) {
+ o.itemsCreator.apply(this, [{times: 1}, function () {
+ if (arguments.length === 0) {
+ throw new Error("参数不能为空");
+ }
+ self.populate.apply(self, arguments);
+ o.onLoaded();
+ }]);
+ return;
+ }
+ this.options.items = items;
+ this.times = 1;
+ this.count = 0;
+ this.count += items.length;
+ if (BI.isObject(this.next)) {
+ if (this.hasNext()) {
+ this.next.setLoaded();
+ } else {
+ this.next.invisible();
+ }
+ }
+ BI.DOM.hang([this.next]);
+ this.button_group.populate.apply(this.button_group, arguments);
+ this.next.element.appendTo(this.element);
+ },
+
+ empty: function () {
+ BI.DOM.hang([this.next]);
+ this.button_group.empty();
+ this.next.element.appendTo(this.element);
+ BI.each([this.next], function (i, ob) {
+ ob && ob.setVisible(false);
+ });
+ },
+
+ setNotSelectedValue: function () {
+ this.button_group.setNotSelectedValue.apply(this.button_group, arguments);
+ },
+
+ getNotSelectedValue: function () {
+ return this.button_group.getNotSelectedValue();
+ },
+
+ setValue: function () {
+ this.button_group.setValue.apply(this.button_group, arguments);
+ },
+
+ getValue: function () {
+ return this.button_group.getValue.apply(this.button_group, arguments);
+ },
+
+ getAllButtons: function () {
+ return this.button_group.getAllButtons();
+ },
+
+ getAllLeaves: function () {
+ return this.button_group.getAllLeaves();
+ },
+
+ getSelectedButtons: function () {
+ return this.button_group.getSelectedButtons();
+ },
+
+ getNotSelectedButtons: function () {
+ return this.button_group.getNotSelectedButtons();
+ },
+
+ getIndexByValue: function (value) {
+ return this.button_group.getIndexByValue(value);
+ },
+
+ getNodeById: function (id) {
+ return this.button_group.getNodeById(id);
+ },
+
+ getNodeByValue: function (value) {
+ return this.button_group.getNodeByValue(value);
+ }
+});
+BI.ListLoader.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.list_loader", BI.ListLoader);/**
+ * Created by GUY on 2016/4/29.
+ *
+ * @class BI.SortList
+ * @extends BI.Widget
+ */
+BI.SortList = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.SortList.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-sort-list",
+
+ isDefaultInit: true,//是否默认初始化数据
+
+ //下面是button_group的属性
+ el: {
+ type: "bi.button_group"
+ },
+
+ items: [],
+ itemsCreator: BI.emptyFn,
+ onLoaded: BI.emptyFn,
+
+ //下面是分页信息
+ count: false,
+ next: {},
+ hasNext: BI.emptyFn
+
+ //containment: this.element,
+ //connectWith: ".bi-sort-list",
+ })
+ },
+
+ _init: function () {
+ BI.SortList.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.loader = BI.createWidget({
+ type: "bi.list_loader",
+ element: this,
+ isDefaultInit: o.isDefaultInit,
+ el: o.el,
+ items: this._formatItems(o.items),
+ itemsCreator: function (op, callback) {
+ o.itemsCreator(op, function (items) {
+ callback(self._formatItems(items));
+ });
+ },
+ onLoaded: o.onLoaded,
+ count: o.count,
+ next: o.next,
+ hasNext: o.hasNext
+ });
+ this.loader.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.SortList.EVENT_CHANGE, value, obj);
+ }
+ });
+
+ this.loader.element.sortable({
+ containment: o.containment || this.element,
+ connectWith: o.connectWith || ".bi-sort-list",
+ items: ".sort-item",
+ cursor: o.cursor || "drag",
+ tolerance: o.tolerance || "intersect",
+ placeholder: {
+ element: function ($currentItem) {
+ var holder = BI.createWidget({
+ type: "bi.layout",
+ cls: "bi-sortable-holder",
+ height: $currentItem.outerHeight()
+ });
+ holder.element.css({
+ "margin-left": $currentItem.css("margin-left"),
+ "margin-right": $currentItem.css("margin-right"),
+ "margin-top": $currentItem.css("margin-top"),
+ "margin-bottom": $currentItem.css("margin-bottom"),
+ "margin": $currentItem.css("margin")
+ });
+ return holder.element;
+ },
+ update: function () {
+
+ }
+ },
+ start: function (event, ui) {
+
+ },
+ stop: function (event, ui) {
+ self.fireEvent(BI.SortList.EVENT_CHANGE);
+ },
+ over: function (event, ui) {
+
+ }
+ });
+ },
+
+ _formatItems: function (items) {
+ BI.each(items, function (i, item) {
+ item = BI.stripEL(item);
+ item.cls = item.cls ? item.cls + " sort-item" : "sort-item";
+ item.attributes = {
+ sorted: item.value
+ };
+ });
+ return items;
+ },
+
+ hasNext: function () {
+ return this.loader.hasNext();
+ },
+
+ addItems: function (items) {
+ this.loader.addItems(items);
+ },
+
+ populate: function (items) {
+ if (items) {
+ arguments[0] = this._formatItems(items);
+ }
+ this.loader.populate.apply(this.loader, arguments);
+ },
+
+ empty: function () {
+ this.loader.empty();
+ },
+
+ setNotSelectedValue: function () {
+ this.loader.setNotSelectedValue.apply(this.loader, arguments);
+ },
+
+ getNotSelectedValue: function () {
+ return this.loader.getNotSelectedValue();
+ },
+
+ setValue: function () {
+ this.loader.setValue.apply(this.loader, arguments);
+ },
+
+ getValue: function () {
+ return this.loader.getValue();
+ },
+
+ getAllButtons: function () {
+ return this.loader.getAllButtons();
+ },
+
+ getAllLeaves: function () {
+ return this.loader.getAllLeaves();
+ },
+
+ getSelectedButtons: function () {
+ return this.loader.getSelectedButtons();
+ },
+
+ getNotSelectedButtons: function () {
+ return this.loader.getNotSelectedButtons();
+ },
+
+ getIndexByValue: function (value) {
+ return this.loader.getIndexByValue(value);
+ },
+
+ getNodeById: function (id) {
+ return this.loader.getNodeById(id);
+ },
+
+ getNodeByValue: function (value) {
+ return this.loader.getNodeByValue(value);
+ },
+
+ getSortedValues: function () {
+ return this.loader.element.sortable("toArray", {attribute: "sorted"});
+ }
+});
+BI.SortList.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.sort_list", BI.SortList);/**
+ * 有总页数和总行数的分页控件
+ * Created by Young's on 2016/10/13.
+ */
+BI.AllCountPager = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.AllCountPager.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-all-count-pager",
+ height: 30,
+ pages: 1, //必选项
+ curr: 1, //初始化当前页, pages为数字时可用,
+ count: 1 //总行数
+ })
+ },
+ _init: function () {
+ BI.AllCountPager.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.small_text_editor",
+ cls: "pager-editor",
+ validationChecker: function (v) {
+ return (self.rowCount.getValue() === 0 && v === "0") || BI.isPositiveInteger(v);
+ },
+ hgap: 4,
+ vgap: 0,
+ value: o.curr,
+ errorText: BI.i18nText("BI-Please_Input_Positive_Integer"),
+ width: 35,
+ height: 20
+ });
+
+ this.pager = BI.createWidget({
+ type: "bi.pager",
+ width: 36,
+ layouts: [{
+ type: "bi.horizontal",
+ hgap: 1,
+ vgap: 1
+ }],
+
+ dynamicShow: false,
+ pages: o.pages,
+ curr: o.curr,
+ groups: 0,
+
+ first: false,
+ last: false,
+ prev: {
+ type: "bi.icon_button",
+ value: "prev",
+ title: BI.i18nText("BI-Previous_Page"),
+ warningTitle: BI.i18nText("BI-Current_Is_First_Page"),
+ height: 20,
+ cls: "all-pager-prev column-pre-page-h-font"
+ },
+ next: {
+ type: "bi.icon_button",
+ value: "next",
+ title: BI.i18nText("BI-Next_Page"),
+ warningTitle: BI.i18nText("BI-Current_Is_Last_Page"),
+ height: 20,
+ cls: "all-pager-next column-next-page-h-font"
+ },
+
+ hasPrev: o.hasPrev,
+ hasNext: o.hasNext,
+ firstPage: o.firstPage,
+ lastPage: o.lastPage
+ });
+
+ this.editor.on(BI.TextEditor.EVENT_CONFIRM, function () {
+ self.pager.setValue(BI.parseInt(self.editor.getValue()));
+ self.fireEvent(BI.AllCountPager.EVENT_CHANGE);
+ });
+ this.pager.on(BI.Pager.EVENT_CHANGE, function () {
+ self.fireEvent(BI.AllCountPager.EVENT_CHANGE);
+ });
+ this.pager.on(BI.Pager.EVENT_AFTER_POPULATE, function () {
+ self.editor.setValue(self.pager.getCurrentPage());
+ });
+
+ this.allPages = BI.createWidget({
+ type: "bi.label",
+ width: 30,
+ title: o.pages,
+ text: "/" + o.pages
+ });
+
+ this.rowCount = BI.createWidget({
+ type: "bi.label",
+ height: o.height,
+ hgap: 5,
+ text: o.count,
+ title: o.count
+ });
+
+ var count = BI.createWidget({
+ type: "bi.left",
+ height: o.height,
+ scrollable: false,
+ items: [{
+ type: "bi.label",
+ height: o.height,
+ text: BI.i18nText("BI-Basic_Total"),
+ width: 15
+ }, this.rowCount, {
+ type: "bi.label",
+ height: o.height,
+ text: BI.i18nText("BI-Tiao_Data"),
+ width: 50,
+ textAlign: "left"
+ }]
+ });
+ BI.createWidget({
+ type: "bi.center_adapt",
+ element: this,
+ columnSize: ["", 35, 40, 36],
+ items: [count, this.editor, this.allPages, this.pager]
+ })
+ },
+
+ alwaysShowPager: true,
+
+ setAllPages: function (v) {
+ this.allPages.setText("/" + v);
+ this.allPages.setTitle(v);
+ this.pager.setAllPages(v);
+ this.editor.setEnable(v >= 1);
+ },
+
+ setValue: function (v) {
+ this.pager.setValue(v);
+ },
+
+ setVPage: function (v) {
+ this.pager.setValue(v);
+ },
+
+ setCount: function (count) {
+ this.rowCount.setText(count);
+ this.rowCount.setTitle(count);
+ },
+
+ getCurrentPage: function () {
+ return this.pager.getCurrentPage();
+ },
+
+ hasPrev: function () {
+ return this.pager.hasPrev();
+ },
+
+ hasNext: function () {
+ return this.pager.hasNext();
+ },
+
+ setPagerVisible: function (b) {
+ this.editor.setVisible(b);
+ this.allPages.setVisible(b);
+ this.pager.setVisible(b);
+ },
+
+ populate: function () {
+ this.pager.populate();
+ }
+});
+BI.AllCountPager.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.all_count_pager", BI.AllCountPager);/**
+ * 显示页码的分页控件
+ *
+ * Created by GUY on 2016/6/30.
+ * @class BI.DirectionPager
+ * @extends BI.Widget
+ */
+BI.DirectionPager = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.DirectionPager.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-direction-pager",
+ height: 30,
+ horizontal: {
+ pages: false, //总页数
+ curr: 1, //初始化当前页, pages为数字时可用
+
+ hasPrev: BI.emptyFn,
+ hasNext: BI.emptyFn,
+ firstPage: 1,
+ lastPage: BI.emptyFn
+ },
+ vertical: {
+ pages: false, //总页数
+ curr: 1, //初始化当前页, pages为数字时可用
+
+ hasPrev: BI.emptyFn,
+ hasNext: BI.emptyFn,
+ firstPage: 1,
+ lastPage: BI.emptyFn
+ }
+ })
+ },
+ _init: function () {
+ BI.DirectionPager.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ var v = o.vertical, h = o.horizontal;
+ this._createVPager();
+ this._createHPager();
+ this.layout = BI.createWidget({
+ type: "bi.absolute",
+ scrollable: false,
+ element: this,
+ items: [{
+ el: this.vpager,
+ top: 5,
+ right: 74
+ }, {
+ el: this.vlabel,
+ top: 5,
+ right: 111
+ }, {
+ el: this.hpager,
+ top: 5,
+ right: -9
+ }, {
+ el: this.hlabel,
+ top: 5,
+ right: 28
+ }]
+ });
+ },
+
+ _createVPager: function () {
+ var self = this, o = this.options;
+ var v = o.vertical;
+ this.vlabel = BI.createWidget({
+ type: "bi.label",
+ width: 24,
+ height: 20,
+ value: v.curr,
+ title: v.curr,
+ invisible: true
+ });
+ this.vpager = BI.createWidget({
+ type: "bi.pager",
+ width: 76,
+ layouts: [{
+ type: "bi.horizontal",
+ scrollx: false,
+ rgap: 24,
+ vgap: 1
+ }],
+ invisible: true,
+
+ dynamicShow: false,
+ pages: v.pages,
+ curr: v.curr,
+ groups: 0,
+
+ first: false,
+ last: false,
+ prev: {
+ type: "bi.icon_button",
+ value: "prev",
+ title: BI.i18nText("BI-Up_Page"),
+ warningTitle: BI.i18nText("BI-Current_Is_First_Page"),
+ height: 20,
+ iconWidth: 16,
+ iconHeight: 16,
+ cls: "direction-pager-prev column-pre-page-h-font"
+ },
+ next: {
+ type: "bi.icon_button",
+ value: "next",
+ title: BI.i18nText("BI-Down_Page"),
+ warningTitle: BI.i18nText("BI-Current_Is_Last_Page"),
+ height: 20,
+ iconWidth: 16,
+ iconHeight: 16,
+ cls: "direction-pager-next column-next-page-h-font"
+ },
+
+ hasPrev: v.hasPrev,
+ hasNext: v.hasNext,
+ firstPage: v.firstPage,
+ lastPage: v.lastPage
+ });
+
+ this.vpager.on(BI.Pager.EVENT_CHANGE, function () {
+ self.fireEvent(BI.DirectionPager.EVENT_CHANGE);
+ });
+ this.vpager.on(BI.Pager.EVENT_AFTER_POPULATE, function () {
+ self.vlabel.setValue(this.getCurrentPage());
+ self.vlabel.setTitle(this.getCurrentPage());
+ });
+ },
+
+ _createHPager: function () {
+ var self = this, o = this.options;
+ var h = o.horizontal;
+ this.hlabel = BI.createWidget({
+ type: "bi.label",
+ width: 24,
+ height: 20,
+ value: h.curr,
+ title: h.curr,
+ invisible: true
+ });
+ this.hpager = BI.createWidget({
+ type: "bi.pager",
+ width: 76,
+ layouts: [{
+ type: "bi.horizontal",
+ scrollx: false,
+ rgap: 24,
+ vgap: 1
+ }],
+ invisible: true,
+
+ dynamicShow: false,
+ pages: h.pages,
+ curr: h.curr,
+ groups: 0,
+
+ first: false,
+ last: false,
+ prev: {
+ type: "bi.icon_button",
+ value: "prev",
+ title: BI.i18nText("BI-Left_Page"),
+ warningTitle: BI.i18nText("BI-Current_Is_First_Page"),
+ height: 20,
+ iconWidth: 16,
+ iconHeight: 16,
+ cls: "direction-pager-prev row-pre-page-h-font"
+ },
+ next: {
+ type: "bi.icon_button",
+ value: "next",
+ title: BI.i18nText("BI-Right_Page"),
+ warningTitle: BI.i18nText("BI-Current_Is_Last_Page"),
+ height: 20,
+ iconWidth: 16,
+ iconHeight: 16,
+ cls: "direction-pager-next row-next-page-h-font"
+ },
+
+ hasPrev: h.hasPrev,
+ hasNext: h.hasNext,
+ firstPage: h.firstPage,
+ lastPage: h.lastPage
+ });
+
+ this.hpager.on(BI.Pager.EVENT_CHANGE, function () {
+ self.fireEvent(BI.DirectionPager.EVENT_CHANGE);
+ });
+ this.hpager.on(BI.Pager.EVENT_AFTER_POPULATE, function () {
+ self.hlabel.setValue(this.getCurrentPage());
+ self.hlabel.setTitle(this.getCurrentPage());
+ });
+ },
+
+ getVPage: function () {
+ return this.vpager.getCurrentPage();
+ },
+
+ getHPage: function () {
+ return this.hpager.getCurrentPage();
+ },
+
+ setVPage: function (v) {
+ this.vpager.setValue(v);
+ this.vlabel.setValue(v);
+ this.vlabel.setTitle(v);
+ },
+
+ setHPage: function (v) {
+ this.hpager.setValue(v);
+ this.hlabel.setValue(v);
+ this.hlabel.setTitle(v);
+ },
+
+ hasVNext: function () {
+ return this.vpager.hasNext();
+ },
+
+ hasHNext: function () {
+ return this.hpager.hasNext();
+ },
+
+ hasVPrev: function () {
+ return this.vpager.hasPrev();
+ },
+
+ hasHPrev: function () {
+ return this.hpager.hasPrev();
+ },
+
+ setHPagerVisible: function (b) {
+ this.hpager.setVisible(b);
+ this.hlabel.setVisible(b);
+ },
+
+ setVPagerVisible: function (b) {
+ this.vpager.setVisible(b);
+ this.vlabel.setVisible(b);
+ },
+
+ populate: function () {
+ this.vpager.populate();
+ this.hpager.populate();
+ var vShow = false, hShow = false;
+ if (!this.hasHNext() && !this.hasHPrev()) {
+ this.setHPagerVisible(false);
+ } else {
+ this.setHPagerVisible(true);
+ hShow = true;
+ }
+ if (!this.hasVNext() && !this.hasVPrev()) {
+ this.setVPagerVisible(false);
+ } else {
+ this.setVPagerVisible(true);
+ vShow = true;
+ }
+ this.setVisible(hShow || vShow);
+ var num = [74, 111, -9, 28];
+ var items = this.layout.attr("items");
+
+ if (vShow === true && hShow === true) {
+ items[0].right = num[0];
+ items[1].right = num[1];
+ items[2].right = num[2];
+ items[3].right = num[3];
+ } else if (vShow === true) {
+ items[0].right = num[2];
+ items[1].right = num[3];
+ } else if (hShow === true) {
+ items[2].right = num[2];
+ items[3].right = num[3];
+ }
+ this.layout.attr("items", items);
+ this.layout.resize();
+ },
+
+ clear: function () {
+ this.vpager.attr("curr", 1);
+ this.hpager.attr("curr", 1);
+ }
+});
+BI.DirectionPager.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.direction_pager", BI.DirectionPager);/**
+ * 分页控件
+ *
+ * Created by GUY on 2015/8/31.
+ * @class BI.DetailPager
+ * @extends BI.Widget
+ */
+BI.DetailPager = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.DetailPager.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-detail-pager",
+ behaviors: {},
+ layouts: [{
+ type: "bi.horizontal",
+ hgap: 10,
+ vgap: 0
+ }],
+
+ dynamicShow: true, //是否动态显示上一页、下一页、首页、尾页, 若为false,则指对其设置使能状态
+ //dynamicShow为false时以下两个有用
+ dynamicShowFirstLast: false,//是否动态显示首页、尾页
+ dynamicShowPrevNext: false,//是否动态显示上一页、下一页
+ pages: false, //总页数
+ curr: function () {
+ return 1;
+ }, //初始化当前页
+ groups: 0, //连续显示分页数
+ jump: BI.emptyFn, //分页的回调函数
+
+ first: false, //是否显示首页
+ last: false, //是否显示尾页
+ prev: "上一页",
+ next: "下一页",
+
+ firstPage: 1,
+ lastPage: function () { //在万不得已时才会调用这个函数获取最后一页的页码, 主要作用于setValue方法
+ return 1;
+ },
+ hasPrev: BI.emptyFn, //pages不可用时有效
+ hasNext: BI.emptyFn //pages不可用时有效
+ })
+ },
+ _init: function () {
+ BI.DetailPager.superclass._init.apply(this, arguments);
+ var self = this;
+ this.currPage = BI.result(this.options, "curr");
+ //翻页太灵敏
+ this._lock = false;
+ this._debouce = BI.debounce(function () {
+ self._lock = false;
+ }, 300);
+ this._populate();
+ },
+
+ _populate: function () {
+ var self = this, o = this.options, view = [], dict = {};
+ this.empty();
+ var pages = BI.result(o, "pages");
+ var curr = BI.result(this, "currPage");
+ var groups = BI.result(o, "groups");
+ var first = BI.result(o, "first");
+ var last = BI.result(o, "last");
+ var prev = BI.result(o, "prev");
+ var next = BI.result(o, "next");
+
+ if (pages === false) {
+ groups = 0;
+ first = false;
+ last = false;
+ } else {
+ groups > pages && (groups = pages);
+ }
+
+ //计算当前组
+ dict.index = Math.ceil((curr + ((groups > 1 && groups !== pages) ? 1 : 0)) / (groups === 0 ? 1 : groups));
+
+ //当前页非首页,则输出上一页
+ if (((!o.dynamicShow && !o.dynamicShowPrevNext) || curr > 1) && prev !== false) {
+ if (BI.isKey(prev)) {
+ view.push({
+ text: prev,
+ value: "prev",
+ disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false)
+ })
+ } else {
+ view.push(BI.extend({
+ disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false)
+ }, prev));
+ }
+ }
+
+ //当前组非首组,则输出首页
+ if (((!o.dynamicShow && !o.dynamicShowFirstLast) || (dict.index > 1 && groups !== 0)) && first) {
+ view.push({
+ text: first,
+ value: "first",
+ disabled: !(dict.index > 1 && groups !== 0)
+ });
+ if (dict.index > 1 && groups !== 0) {
+ view.push({
+ type: "bi.label",
+ cls: "page-ellipsis",
+ text: "\u2026"
+ });
+ }
+ }
+
+ //输出当前页组
+ dict.poor = Math.floor((groups - 1) / 2);
+ dict.start = dict.index > 1 ? curr - dict.poor : 1;
+ dict.end = dict.index > 1 ? (function () {
+ var max = curr + (groups - dict.poor - 1);
+ return max > pages ? pages : max;
+ }()) : groups;
+ if (dict.end - dict.start < groups - 1) { //最后一组状态
+ dict.start = dict.end - groups + 1;
+ }
+ var s = dict.start, e = dict.end;
+ if (first && last && (dict.index > 1 && groups !== 0) && (pages > groups && dict.end < pages && groups !== 0)) {
+ s++;
+ e--;
+ }
+ for (; s <= e; s++) {
+ if (s === curr) {
+ view.push({
+ text: s,
+ value: s,
+ selected: true
+ })
+ } else {
+ view.push({
+ text: s,
+ value: s
+ })
+ }
+ }
+
+ //总页数大于连续分页数,且当前组最大页小于总页,输出尾页
+ if (((!o.dynamicShow && !o.dynamicShowFirstLast) || (pages > groups && dict.end < pages && groups !== 0)) && last) {
+ if (pages > groups && dict.end < pages && groups !== 0) {
+ view.push({
+ type: "bi.label",
+ cls: "page-ellipsis",
+ text: "\u2026"
+ });
+ }
+ view.push({
+ text: last,
+ value: "last",
+ disabled: !(pages > groups && dict.end < pages && groups !== 0)
+ })
+ }
+
+ //当前页不为尾页时,输出下一页
+ dict.flow = !prev && groups === 0;
+ if (((!o.dynamicShow && !o.dynamicShowPrevNext) && next) || (curr !== pages && next || dict.flow)) {
+ view.push((function () {
+ if (BI.isKey(next)) {
+ if (pages === false) {
+ return {text: next, value: "next", disabled: o.hasNext(curr) === false}
+ }
+ return (dict.flow && curr === pages)
+ ?
+ {text: next, value: "next", disabled: true}
+ :
+ {text: next, value: "next", disabled: !(curr !== pages && next || dict.flow)};
+ } else {
+ return BI.extend({
+ disabled: pages === false ? o.hasNext(curr) === false : !(curr !== pages && next || dict.flow)
+ }, next);
+ }
+ }()));
+ }
+
+ this.button_group = BI.createWidget({
+ type: "bi.button_group",
+ element: this,
+ items: BI.createItems(view, {
+ cls: "page-item bi-border bi-list-item-active",
+ height: 23,
+ hgap: 10
+ }),
+ behaviors: o.behaviors,
+ layouts: o.layouts
+ });
+ this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {
+ if (self._lock === true) {
+ return;
+ }
+ self._lock = true;
+ self._debouce();
+ if (type === BI.Events.CLICK) {
+ var v = self.button_group.getValue()[0];
+ switch (v) {
+ case "first":
+ self.currPage = 1;
+ break;
+ case "last":
+ self.currPage = pages;
+ break;
+ case "prev":
+ self.currPage--;
+ break;
+ case "next":
+ self.currPage++;
+ break;
+ default:
+ self.currPage = v;
+ break;
+ }
+ o.jump.apply(self, [{
+ pages: pages,
+ curr: self.currPage
+ }]);
+ self._populate();
+ self.fireEvent(BI.DetailPager.EVENT_CHANGE, obj);
+ }
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.fireEvent(BI.DetailPager.EVENT_AFTER_POPULATE);
+ },
+
+ getCurrentPage: function () {
+ return this.currPage;
+ },
+
+ setAllPages: function (pages) {
+ this.options.pages = pages;
+ },
+
+ hasPrev: function (v) {
+ v || (v = 1);
+ var o = this.options;
+ var pages = this.options.pages;
+ return pages === false ? o.hasPrev(v) : v > 1;
+ },
+
+ hasNext: function (v) {
+ v || (v = 1);
+ var o = this.options;
+ var pages = this.options.pages;
+ return pages === false ? o.hasNext(v) : v < pages;
+ },
+
+ setValue: function (v) {
+ var o = this.options;
+ v = v | 0;
+ v = v < 1 ? 1 : v;
+ if (o.pages === false) {
+ var lastPage = BI.result(o, "lastPage"), firstPage = 1;
+ this.currPage = v > lastPage ? lastPage : ((firstPage = BI.result(o, "firstPage")), (v < firstPage ? firstPage : v));
+ } else {
+ v = v > o.pages ? o.pages : v;
+ this.currPage = v;
+ }
+ this._populate();
+ },
+
+ getValue: function () {
+ var val = this.button_group.getValue()[0];
+ switch (val) {
+ case "prev":
+ return -1;
+ case "next":
+ return 1;
+ case "first":
+ return BI.MIN;
+ case "last":
+ return BI.MAX;
+ default :
+ return val;
+ }
+ },
+
+ attr: function (key, value) {
+ BI.DetailPager.superclass.attr.apply(this, arguments);
+ if (key === "curr") {
+ this.currPage = BI.result(this.options, "curr");
+ }
+ },
+
+ populate: function () {
+ this._populate();
+ }
+});
+BI.DetailPager.EVENT_CHANGE = "EVENT_CHANGE";
+BI.DetailPager.EVENT_AFTER_POPULATE = "EVENT_AFTER_POPULATE";
+BI.shortcut("bi.detail_pager", BI.DetailPager);/**
+ *
+ * Created by GUY on 2017/09/18.
+ * @class BI.TextToolbar
+ * @extends BI.Widget
+ */
+BI.RichEditorAction = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorAction.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: ""
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorAction.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ o.editor.on(BI.NicEditor.EVENT_SELECTED, function (e) {
+ self.setEnable(true);
+ self.checkNodes(e.target);
+ self.key(e);
+ });
+ o.editor.on(BI.NicEditor.EVENT_BLUR, function () {
+ self.setEnable(false);
+ });
+ o.editor.on(BI.NicEditor.EVENT_KEYDOWN, BI.bind(this.keydown, this));
+ },
+
+ checkNodes: function (e) {
+ if (!e) {
+ return false;
+ }
+ var elm = e;
+ do {
+ if (this.options.tags && this.options.tags.contains(elm.nodeName)) {
+ this.activate();
+ return true;
+ }
+ } while (elm = elm.parentNode && elm.className && elm.className.indexOf("bi-nic-editor") >= -1);
+ elm = e;
+ while (elm.nodeType == 3) {
+ elm = elm.parentNode;
+ }
+ if (this.options.css) {
+ for (var itm in this.options.css) {
+ if ($(elm).css(itm) == this.options.css[itm]) {
+ this.activate();
+ return true;
+ }
+ }
+ }
+ this.deactivate();
+ return false;
+ },
+
+ start: function () {
+
+ },
+
+ key: function () {
+
+ },
+
+ keydown: function () {
+ },
+
+ hideIf: function (e) {
+
+ },
+
+ activate: function () {
+ },
+
+ deactivate: function () {
+ },
+
+ doCommand: function (args) {
+ if (this.options.command) {
+ this.options.editor.nicCommand(this.options.command, args);
+ }
+ }
+});/**
+ *
+ * Created by GUY on 2017/09/18.
+ * @class BI.RichEditorParamAction
+ * @extends BI.Widget
+ */
+BI.RichEditorParamAction = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorParamAction.superclass._defaultConfig.apply(this, arguments), {});
+ },
+
+ _init: function () {
+ BI.RichEditorParamAction.superclass._init.apply(this, arguments);
+ },
+
+ _isParam: function (sel) {
+ return sel.attr("data-type") === "param";
+ },
+
+ _createBlankNode: function () {
+ return $("").html(" ");
+ },
+
+ _addBlank: function ($param) {
+ var o = this.options;
+ var instance = o.editor.selectedInstance;
+ var next = $param.next();
+ if (next.length === 0 || this._isParam(next)) {
+ var preNode = this._createBlankNode();
+ var nextNode = this._createBlankNode();
+ $param.before(preNode);
+ $param.after(nextNode);
+ instance.setFocus(nextNode[0]);
+ } else {
+ instance.setFocus(next[0]);
+ }
+ },
+
+ _get$Sel: function () {
+ var o = this.options;
+ var instance = o.editor.selectedInstance;
+ var sel = $(instance.selElm());
+ if (sel[0].nodeType === 3 && this._isParam(sel.parent())) {
+ sel = sel.parent();
+ }
+ return sel;
+ },
+
+ addParam: function (param) {
+ var o = this.options;
+ var sel = this._get$Sel();
+ var $param = $("").attr({
+ "data-type": "param",
+ "data-value": param
+ }).css({
+ color: "white",
+ backgroundColor: "#009de3",
+ padding: "0 5px"
+ }).text(param).keydown(function (e) {
+ if (e.keyCode === BI.KeyCode.BACKSPACE || e.keyCode === BI.KeyCode.DELETE) {
+ $param.destroy();
+ }
+ e.stopEvent();
+ return false;
+ });
+ var wrapper = o.editor.instance.getElm().element;
+ if (wrapper.find(sel).length <= 0) {
+ wrapper.append($param);
+ } else {
+ sel.after($param);
+ }
+ this._addBlank($param);
+ },
+
+ keydown: function (e) {
+ var o = this.options;
+ var sel = this._get$Sel();
+ if (e.keyCode === 229) {//中文输入法
+ if (this._isParam(sel)) {
+ this._addBlank(sel);
+ e.stopEvent();
+ return false;
+ }
+ }
+ if (BI.Key[e.keyCode] || e.keyCode === BI.KeyCode.TAB || e.keyCode === BI.KeyCode.ENTER || e.keyCode === BI.KeyCode.SPACE) {
+ if (this._isParam(sel)) {
+ e.stopEvent();
+ return false;
+ }
+ }
+ if (e.keyCode === BI.KeyCode.BACKSPACE || e.keyCode === BI.KeyCode.DELETE) {
+ if (this._isParam(sel)) {
+ sel.destroy();
+ e.preventDefault();
+ return false;
+ }
+ }
+ },
+
+ key: function (e) {
+ }
+});/**
+ * 颜色选择
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorTextToolbar
+ * @extends BI.Widget
+ */
+BI.RichEditorTextToolbar = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorTextToolbar.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-rich-editor-text-toolbar bi-background",
+ buttons: [
+ {type: "bi.rich_editor_size_chooser"},
+ {type: "bi.rich_editor_bold_button"},
+ {type: "bi.rich_editor_italic_button"},
+ {type: "bi.rich_editor_underline_button"},
+ {type: "bi.rich_editor_color_chooser"},
+ {type: "bi.rich_editor_background_color_chooser"},
+ {type: "bi.rich_editor_align_left_button"},
+ {type: "bi.rich_editor_align_center_button"},
+ {type: "bi.rich_editor_align_right_button"},
+ {type: "bi.rich_editor_param_button"}
+ ],
+ height: 28
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorTextToolbar.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ var buttons = BI.createWidgets(BI.map(o.buttons, function (i, btn) {
+ return BI.extend(btn, {
+ editor: o.editor
+ });
+ }));
+ this.element.mousedown(function (e) {
+ BI.each(buttons, function (i, btn) {
+ btn.hideIf(e);
+ });
+ });
+ BI.createWidget({
+ type: "bi.left",
+ element: this,
+ items: buttons,
+ hgap: 3,
+ vgap: 3
+ });
+ },
+
+ mounted: function () {
+ var self = this;
+ if (BI.isIE9Below()) {// IE8下必须要设置unselectable才能不blur输入框
+ this.element.mousedown(function () {
+ self._noSelect(self.element[0]);
+ });
+ this._noSelect(this.element[0]);
+ }
+ },
+
+ _noSelect: function (element) {
+ if (element.setAttribute && element.nodeName.toLowerCase() != "input" && element.nodeName.toLowerCase() != "textarea") {
+ element.setAttribute("unselectable", "on");
+ }
+ for (var i = 0; i < element.childNodes.length; i++) {
+ this._noSelect(element.childNodes[i]);
+ }
+ }
+});
+BI.shortcut("bi.rich_editor_text_toolbar", BI.RichEditorTextToolbar);/**
+ * 富文本编辑器
+ *
+ * Created by GUY on 2017/9/15.
+ * @class BI.NicEditor
+ * @extends BI.Widget
+ */
+!(function () {
+ BI.NicEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.NicEditor.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-nic-editor"
+ });
+ },
+ _init: function () {
+ BI.NicEditor.superclass._init.apply(this, arguments);
+ var o = this.options;
+ $(document).bind("mousedown." + this.getName(), BI.bind(this.selectCheck, this));
+ BI.createWidget({
+ type: "bi.vertical",
+ element: this,
+ items: [{
+ type: "bi.layout",
+ height: 1
+ }, this.instance = this.addInstance()]
+ })
+ },
+
+ addInstance: function () {
+ var o = this.options;
+ var conf = {
+ ne: this,
+ height: o.height - 1,
+ maxHeight: o.maxHeight ? o.maxHeight : null
+ };
+ if (this.element[0].contentEditable || !!window.opera) {
+ var newInstance = new nicEditorInstance(conf);
+ } else {
+ console.error("不支持此浏览器");
+ }
+ return newInstance;
+ },
+
+ nicCommand: function (cmd, args) {
+ if (this.selectedInstance) {
+ this.selectedInstance.nicCommand(cmd, args);
+ }
+ },
+
+ selectCheck: function (e) {
+ var t = e.target;
+ var found = false;
+ do {
+ if (t.nodeName !== "svg" && t.className && t.className.indexOf(prefix) != -1) {
+ return;
+ // return false;
+ }
+ } while (t = t.parentNode);
+ this.fireEvent('blur', t);
+ this.lastSelectedInstance = this.selectedInstance;
+ this.selectedInstance = null;
+ // return false;
+ },
+
+ setValue: function (v) {
+ this.instance.setContent(v);
+ },
+
+ getValue: function () {
+ return this.instance.getContent();
+ },
+
+ destroyed: function () {
+ $(document).unbind("mousedown." + this.getName());
+ }
+ });
+ BI.NicEditor.EVENT_SELECTED = "selected";
+ BI.NicEditor.EVENT_BLUR = "blur";
+ BI.NicEditor.EVENT_KEYDOWN = "keydown";
+ BI.shortcut('bi.nic_editor', BI.NicEditor);
+
+ var prefix = "niceditor-";
+
+ var nicEditorInstance = BI.inherit(BI.Layout, {
+ isSelected: false,
+ _init: function () {
+ nicEditorInstance.superclass._init.apply(this, arguments);
+ var o = this.options;
+ this.ne = this.options.ne;
+ this.elm = BI.createWidget({
+ type: "bi.layout",
+ width: o.width - 8,
+ scrollable: false
+ });
+ this.elm.element.css({
+ margin: "4px",
+ minHeight: (o.height - 8) + "px",
+ outline: "none"
+ }).html(o.value);
+
+ this.element.css("maxHeight", (o.maxHeight) ? o.maxHeight + 'px' : null);
+
+ this.e = BI.createWidget({
+ type: "bi.layout",
+ invisible: true,
+ tagName: "textarea"
+ });
+ BI.createWidget({
+ type: "bi.default",
+ element: this,
+ scrolly: true,
+ items: [this.elm, this.e]
+ });
+
+ this.ne.on("blur", BI.bind(this.blur, this));
+
+ this.start();
+ this.blur();
+ },
+
+ start: function () {
+ this.elm.element.attr("contentEditable", true);
+ if (this.getContent() == "") {
+ // this.setContent("
");
+ }
+ this.instanceDoc = document.defaultView;
+ this.elm.element.on('mousedown', BI.bind(this.selected, this));
+ this.elm.element.on('keydown', BI.bind(this.keyDown, this));
+ this.elm.element.on('focus', BI.bind(this.selected, this));
+ this.elm.element.on('blur', BI.bind(this.blur, this));
+ this.elm.element.on('keyup', BI.bind(this.selected, this));
+ this.ne.fireEvent('add');
+ },
+
+ disable: function () {
+ this.elm.element.attr("contentEditable", false);
+ },
+
+ getSel: function () {
+ return (window.getSelection) ? window.getSelection() : document.selection;
+ },
+
+ getRng: function () {
+ var s = this.getSel();
+ if (!s || s.rangeCount === 0) {
+ return;
+ }
+ return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
+ },
+
+ selRng: function (rng, s) {
+ if (window.getSelection) {
+ s.removeAllRanges();
+ s.addRange(rng);
+ } else {
+ rng.select();
+ }
+ },
+
+ selElm: function () {
+ var r = this.getRng();
+ if (!r) {
+ return;
+ }
+ if (r.startContainer) {
+ var contain = r.startContainer;
+ if (r.cloneContents().childNodes.length == 1) {
+ for (var i = 0; i < contain.childNodes.length; i++) {
+ var rng = contain.childNodes[i].ownerDocument.createRange();
+ rng.selectNode(contain.childNodes[i]);
+ if (r.compareBoundaryPoints(Range.START_TO_START, rng) != 1 &&
+ r.compareBoundaryPoints(Range.END_TO_END, rng) != -1) {
+ return contain.childNodes[i];
+ }
+ }
+ }
+ return contain;
+ } else {
+ return (this.getSel().type == "Control") ? r.item(0) : r.parentElement();
+ }
+ },
+
+ saveRng: function () {
+ this.savedRange = this.getRng();
+ this.savedSel = this.getSel();
+ },
+
+ setFocus: function (el) {
+ try {
+ el.focus();
+ } catch (e) {
+
+ }
+ if (!window.getSelection) {
+ var rng;
+ try {
+ el.focus();
+ } catch (e) {
+
+ }
+ rng = document.selection.createRange();
+ rng.moveStart('character', -el.innerText.length);
+ var text = rng.text;
+ for (var i = 0; i < el.innerText.length; i++) {
+ if (el.innerText.substring(0, i + 1) == text.substring(text.length - i - 1, text.length)) {
+ result = i + 1;
+ }
+ }
+ } else {
+ var range = document.createRange();
+ range.selectNodeContents(el);
+ range.collapse(false);
+ var sel = window.getSelection();
+ sel.removeAllRanges();
+ sel.addRange(range);
+ }
+ },
+
+ restoreRng: function () {
+ if (this.savedRange) {
+ this.selRng(this.savedRange, this.savedSel);
+ }
+ },
+
+ keyDown: function (e, t) {
+ this.ne.fireEvent('keydown', e);
+ },
+
+ selected: function (e) {
+ var t = e.target;
+ if (!t && !(t = this.selElm())) {
+ t = this.selElm();
+ }
+ if (!e.ctrlKey) {
+ var selInstance = this.ne.selectedInstance;
+ if (selInstance != this) {
+ if (selInstance) {
+ this.ne.fireEvent('blur', e);
+ }
+ this.ne.selectedInstance = this;
+ this.ne.fireEvent('focus', e);
+ }
+ this.ne.fireEvent('selected', e);
+ this.isFocused = true;
+ this.elm.element.addClass(prefix + 'selected');
+ }
+ // return false;
+ },
+
+ blur: function () {
+ this.isFocused = false;
+ this.elm.element.removeClass(prefix + 'selected');
+ },
+
+ saveContent: function () {
+ this.ne.fireEvent('save');
+ this.e.element.value(this.getContent());
+ },
+
+ getElm: function () {
+ return this.elm;
+ },
+
+ getContent: function () {
+ this.content = this.getElm().element.html();
+ this.ne.fireEvent('get');
+ return this.content;
+ },
+
+ setContent: function (e) {
+ this.content = e;
+ this.ne.fireEvent('set');
+ this.elm.element.html(this.content);
+ },
+
+ nicCommand: function (cmd, args) {
+ document.execCommand(cmd, false, args);
+ }
+ });
+}());
+/**
+ * 颜色选择trigger
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorBackgroundChooserTrigger
+ * @extends BI.Widget
+ */
+BI.RichEditorBackgroundChooserTrigger = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.RichEditorBackgroundChooserTrigger.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ width: 20,
+ height: 20
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorBackgroundChooserTrigger.superclass._init.apply(this, arguments);
+ this.font = BI.createWidget({
+ type: "bi.icon_button",
+ cls: "text-background-font"
+ });
+
+ this.underline = BI.createWidget({
+ type: "bi.icon_button",
+ cls: "text-color-underline-font"
+ });
+
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.font,
+ top: 2,
+ left: 2
+ }, {
+ el: this.underline,
+ top: 7,
+ left: 2
+ }]
+ })
+ },
+
+ setValue: function (color) {
+ this.underline.element.css("color", color);
+ },
+
+ getValue: function () {
+ return this.font.element.css("color");
+ }
+});
+BI.shortcut('bi.rich_editor_background_color_chooser_trigger', BI.RichEditorBackgroundChooserTrigger);/**
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorAlignCenterButton
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorAlignCenterButton = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorAlignCenterButton.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: "justifycenter"
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorAlignCenterButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.align = BI.createWidget({
+ type: "bi.icon_button",
+ element: this,
+ forceNotSelected: true,
+ title: BI.i18nText("BI-Word_Align_Center"),
+ height: 20,
+ width: 20,
+ cls: "text-toolbar-button bi-list-item-active text-align-center-font"
+ });
+ this.align.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.doCommand();
+ });
+ },
+ activate: function () {
+ },
+
+ deactivate: function () {
+ }
+});
+BI.shortcut("bi.rich_editor_align_center_button", BI.RichEditorAlignCenterButton)/**
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorAlignLeftButton
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorAlignLeftButton = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorAlignLeftButton.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: "justifyleft"
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorAlignLeftButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.align = BI.createWidget({
+ type: "bi.icon_button",
+ element: this,
+ forceNotSelected: true,
+ title: BI.i18nText("BI-Word_Align_Left"),
+ height: 20,
+ width: 20,
+ cls: "text-toolbar-button bi-list-item-active text-align-left-font"
+ });
+ this.align.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.doCommand();
+ });
+ },
+ activate: function () {
+ },
+
+ deactivate: function () {
+ }
+});
+BI.shortcut("bi.rich_editor_align_left_button", BI.RichEditorAlignLeftButton)/**
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorAlignRightButton
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorAlignRightButton = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorAlignRightButton.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: "justifyright"
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorAlignRightButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.align = BI.createWidget({
+ type: "bi.icon_button",
+ element: this,
+ forceNotSelected: true,
+ title: BI.i18nText("BI-Word_Align_Right"),
+ height: 20,
+ width: 20,
+ cls: "text-toolbar-button bi-list-item-active text-align-right-font"
+ });
+ this.align.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.doCommand();
+ });
+ },
+ activate: function () {
+ },
+
+ deactivate: function () {
+ }
+});
+BI.shortcut("bi.rich_editor_align_right_button", BI.RichEditorAlignRightButton)/**
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorBoldButton
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorBoldButton = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorBoldButton.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: "Bold",
+ tags: ["B", "STRONG"],
+ css: {fontWeight: "bold"}
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorBoldButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.bold = BI.createWidget({
+ type: "bi.icon_button",
+ element: this,
+ title: BI.i18nText("BI-Basic_Bold"),
+ height: 20,
+ width: 20,
+ cls: "text-toolbar-button bi-list-item-active text-bold-font"
+ });
+ this.bold.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.doCommand();
+ });
+ },
+ activate: function () {
+ this.bold.setSelected(true);
+ },
+
+ deactivate: function () {
+ this.bold.setSelected(false);
+ }
+});
+BI.shortcut("bi.rich_editor_bold_button", BI.RichEditorBoldButton)/**
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorItalicButton
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorItalicButton = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorItalicButton.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: "Italic",
+ tags: ["EM", "I"],
+ css: {fontStyle: "italic"}
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorItalicButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.italic = BI.createWidget({
+ type: "bi.icon_button",
+ element: this,
+ title: BI.i18nText("BI-Basic_Italic"),
+ height: 20,
+ width: 20,
+ cls: "text-toolbar-button bi-list-item-active text-italic-font"
+ });
+ this.italic.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.doCommand();
+ });
+ },
+ activate: function () {
+ this.italic.setSelected(true);
+ },
+
+ deactivate: function () {
+ this.italic.setSelected(false);
+ }
+});
+BI.shortcut("bi.rich_editor_italic_button", BI.RichEditorItalicButton)/**
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorParamButton
+ * @extends BI.RichEditorParamAction
+ */
+BI.RichEditorParamButton = BI.inherit(BI.RichEditorParamAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorParamButton.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorParamButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.param = BI.createWidget({
+ type: "bi.button",
+ element: this,
+ level: "ignore",
+ minWidth: 0,
+ text: BI.i18nText("BI-Formula_Insert"),
+ height: 20,
+ width: 30
+ });
+ this.param.on(BI.Button.EVENT_CHANGE, function () {
+ self.addParam("参数")
+ });
+ },
+ activate: function () {
+ },
+
+ deactivate: function () {
+ }
+});
+BI.shortcut("bi.rich_editor_param_button", BI.RichEditorParamButton)/**
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorItalicButton
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorUnderlineButton = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorUnderlineButton.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: "Underline",
+ tags: ["U"],
+ css: {textDecoration: "underline"}
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorUnderlineButton.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.underline = BI.createWidget({
+ type: "bi.icon_button",
+ element: this,
+ title: BI.i18nText("BI-Basic_Underline"),
+ height: 20,
+ width: 20,
+ cls: "text-toolbar-button bi-list-item-active text-underline-font"
+ });
+ this.underline.on(BI.IconButton.EVENT_CHANGE, function () {
+ self.doCommand();
+ });
+ },
+ activate: function () {
+ this.underline.setSelected(true);
+ },
+
+ deactivate: function () {
+ this.underline.setSelected(false);
+ }
+});
+BI.shortcut("bi.rich_editor_underline_button", BI.RichEditorUnderlineButton)/**
+ * 颜色选择trigger
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorColorChooserTrigger
+ * @extends BI.Widget
+ */
+BI.RichEditorColorChooserTrigger = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ var conf = BI.RichEditorColorChooserTrigger.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ width: 20,
+ height: 20
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorColorChooserTrigger.superclass._init.apply(this, arguments);
+ this.font = BI.createWidget({
+ type: "bi.icon_button",
+ cls: "text-color-font"
+ });
+
+ this.underline = BI.createWidget({
+ type: "bi.icon_button",
+ cls: "text-color-underline-font"
+ });
+
+ BI.createWidget({
+ type: "bi.absolute",
+ element: this,
+ items: [{
+ el: this.font,
+ top: 2,
+ left: 2
+ }, {
+ el: this.underline,
+ top: 7,
+ left: 2
+ }]
+ })
+ },
+
+ setValue: function (color) {
+ this.underline.element.css("color", color);
+ },
+
+ getValue: function () {
+ return this.font.element.css("color");
+ }
+});
+BI.shortcut('bi.rich_editor_color_chooser_trigger', BI.RichEditorColorChooserTrigger);/**
+ * 颜色选择
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorBackgroundColorChooser
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorBackgroundColorChooser = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorBackgroundColorChooser.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorBackgroundColorChooser.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.colorchooser = BI.createWidget({
+ type: "bi.color_chooser",
+ element: this,
+ width: o.width,
+ height: o.height,
+ el: {
+ type: "bi.rich_editor_background_color_chooser_trigger",
+ title: BI.i18nText("BI-Widget_Background_Colour"),
+ cls: "text-toolbar-button"
+ }
+ });
+ this.colorchooser.on(BI.ColorChooser.EVENT_CHANGE, function () {
+ var backgroundColor = this.getValue();
+ o.editor.element.css({
+ backgroundColor: backgroundColor,
+ color: BI.DOM.getContrastColor(backgroundColor)
+ });
+ this.setValue("");
+ });
+ },
+
+ hideIf: function (e) {
+ if(!this.colorchooser.element.find(e.target).length > 0) {
+ this.colorchooser.hideView();
+ }
+ },
+
+ deactivate: function () {
+ }
+});
+BI.shortcut("bi.rich_editor_background_color_chooser", BI.RichEditorBackgroundColorChooser);/**
+ * 颜色选择
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorColorChooser
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorColorChooser = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorColorChooser.superclass._defaultConfig.apply(this, arguments), {
+ width: 20,
+ height: 20,
+ command: "foreColor"
+ });
+ },
+
+ _init: function () {
+ BI.RichEditorColorChooser.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.colorchooser = BI.createWidget({
+ type: "bi.color_chooser",
+ element: this,
+ width: o.width,
+ height: o.height,
+ el: {
+ type: "bi.rich_editor_color_chooser_trigger",
+ title: BI.i18nText("BI-Font_Colour"),
+ cls: "text-toolbar-button"
+ }
+ });
+ this.colorchooser.on(BI.ColorChooser.EVENT_CHANGE, function () {
+ self.doCommand(this.getValue());
+ });
+
+ },
+
+ hideIf: function (e) {
+ if(!this.colorchooser.element.find(e.target).length > 0) {
+ this.colorchooser.hideView();
+ }
+ },
+
+ deactivate: function () {
+ this.colorchooser.setValue("");
+ }
+});
+BI.shortcut('bi.rich_editor_color_chooser', BI.RichEditorColorChooser);/**
+ * 字体大小选择
+ *
+ * Created by GUY on 2015/11/26.
+ * @class BI.RichEditorSizeChooser
+ * @extends BI.RichEditorAction
+ */
+BI.RichEditorSizeChooser = BI.inherit(BI.RichEditorAction, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditorSizeChooser.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-rich-editor-size-chooser bi-border bi-card",
+ command: "FontSize",
+ width: 50,
+ height: 20
+ });
+ },
+
+ _items: [{
+ value: 1,
+ text: "1(8pt)"
+ }, {
+ value: 2,
+ text: "2(10pt)"
+ }, {
+ value: 3,
+ text: "3(12pt)"
+ }, {
+ value: 4,
+ text: "4(14pt)"
+ }, {
+ value: 5,
+ text: "5(18pt)"
+ }, {
+ value: 6,
+ text: "6(24pt)"
+ }],
+
+ _init: function () {
+ BI.RichEditorSizeChooser.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.text_trigger",
+ readonly: true,
+ height: o.height,
+ triggerWidth: 16,
+ text: BI.i18nText("BI-Font_Size")
+ });
+
+ this.combo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ el: this.trigger,
+ adjustLength: 1,
+ popup: {
+ maxWidth: 70,
+ minWidth: 70,
+ el: {
+ type: "bi.button_group",
+ items: BI.createItems(this._items, {
+ type: "bi.single_select_item"
+ }),
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ }
+ }
+ });
+ this.combo.on(BI.Combo.EVENT_CHANGE, function () {
+ var val = this.getValue()[0];
+ self.doCommand(val);
+ this.hideView();
+ this.setValue([]);
+ });
+ },
+
+ hideIf: function (e) {
+ if(!this.combo.element.find(e.target).length > 0) {
+ this.combo.hideView();
+ }
+ }
+});
+BI.shortcut("bi.rich_editor_size_chooser", BI.RichEditorSizeChooser);/**
+ * 富文本编辑器
+ *
+ * Created by GUY on 2017/9/15.
+ * @class BI.RichEditor
+ * @extends BI.Widget
+ */
+BI.RichEditor = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.RichEditor.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-rich-editor bi-card",
+ toolbar: {}
+ });
+ },
+ _init: function () {
+ BI.RichEditor.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.editor = BI.createWidget({
+ type: "bi.nic_editor",
+ width: o.width,
+ height: o.height
+ });
+
+ this.editor.on(BI.NicEditor.EVENT_BLUR, function () {
+ self.fireEvent(BI.RichEditor.EVENT_CONFIRM);
+ });
+
+ this.combo = BI.createWidget({
+ type: "bi.combo",
+ element: this,
+ toggle: false,
+ direction: "top,left",
+ isNeedAdjustWidth: false,
+ isNeedAdjustHeight: false,
+ adjustLength: 1,
+ el: this.editor,
+ popup: {
+ el: BI.extend({
+ type: "bi.rich_editor_text_toolbar",
+ editor: this.editor
+ }, o.toolbar),
+ height: 30,
+ stopPropagation: true,
+ stopEvent: true
+ }
+ });
+
+ this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {
+ });
+ },
+
+ setValue: function (v) {
+ this.editor.setValue(v);
+ },
+
+ getValue: function () {
+ return this.editor.getValue();
+ }
+});
+BI.RichEditor.EVENT_CONFIRM = "EVENT_CONFIRM";
+BI.shortcut('bi.rich_editor', BI.RichEditor);/**
+ * 分段控件使用的button
+ *
+ * Created by GUY on 2015/9/7.
+ * @class BI.SegmentButton
+ * @extends BI.BasicButton
+ */
+BI.SegmentButton = BI.inherit(BI.BasicButton, {
+
+ _defaultConfig: function () {
+ var conf = BI.SegmentButton.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + ' bi-segment-button bi-list-item-active',
+ shadow: true,
+ readonly: true,
+ hgap: 5
+ })
+ },
+
+ _init: function () {
+ BI.SegmentButton.superclass._init.apply(this, arguments);
+ var opts = this.options, self = this;
+ //if (BI.isNumber(opts.height) && BI.isNull(opts.lineHeight)) {
+ // this.element.css({lineHeight : (opts.height - 2) + 'px'});
+ //}
+ this.text = BI.createWidget({
+ type: "bi.label",
+ element: this,
+ height: opts.height - 2,
+ whiteSpace: opts.whiteSpace,
+ text: opts.text,
+ value: opts.value,
+ hgap: opts.hgap
+ })
+ },
+
+ setSelected: function () {
+ BI.SegmentButton.superclass.setSelected.apply(this, arguments);
+ },
+
+ setText: function (text) {
+ BI.SegmentButton.superclass.setText.apply(this, arguments);
+ this.text.setText(text);
+ },
+
+ destroy: function () {
+ BI.SegmentButton.superclass.destroy.apply(this, arguments);
+ }
+});
+BI.shortcut('bi.segment_button', BI.SegmentButton);/**
+ * 单选按钮组
+ *
+ * Created by GUY on 2015/9/7.
+ * @class BI.Segment
+ * @extends BI.Widget
+ */
+BI.Segment = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.Segment.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-segment",
+ items: [],
+ height: 24
+ });
+ },
+ _init: function () {
+ BI.Segment.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.buttonGroup = BI.createWidget({
+ element: this,
+ type: "bi.button_group",
+ items: BI.createItems(o.items, {
+ type: "bi.segment_button",
+ height: o.height - 2,
+ whiteSpace: o.whiteSpace
+ }),
+ layout: [
+ {
+ type: "bi.center"
+ }
+ ]
+ })
+ this.buttonGroup.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments)
+ });
+ this.buttonGroup.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) {
+ self.fireEvent(BI.Segment.EVENT_CHANGE, value, obj)
+ })
+ },
+
+ setValue: function (v) {
+ this.buttonGroup.setValue(v);
+ },
+
+ setEnabledValue: function (v) {
+ this.buttonGroup.setEnabledValue(v);
+ },
+
+ getValue: function () {
+ return this.buttonGroup.getValue();
+ }
+});
+BI.Segment.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut('bi.segment', BI.Segment);/**
+ * 自适应宽度的表格
+ *
+ * Created by GUY on 2016/2/3.
+ * @class BI.AdaptiveTable
+ * @extends BI.Widget
+ */
+BI.AdaptiveTable = BI.inherit(BI.Widget, {
+
+ _const: {
+ perColumnSize: 100
+ },
+
+ _defaultConfig: function () {
+ return BI.extend(BI.AdaptiveTable.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-adaptive-table",
+ el: {
+ type: "bi.resizable_table"
+ },
+ isNeedResize: true,
+ isNeedFreeze: false,//是否需要冻结单元格
+ freezeCols: [], //冻结的列号,从0开始,isNeedFreeze为true时生效
+
+ isNeedMerge: false,//是否需要合并单元格
+ mergeCols: [], //合并的单元格列号
+ mergeRule: BI.emptyFn,
+
+ columnSize: [],
+ minColumnSize: [],
+ maxColumnSize: [],
+
+ headerRowSize: 25,
+ rowSize: 25,
+
+ regionColumnSize: [],
+
+ header: [],
+ items: [], //二维数组
+
+ //交叉表头
+ crossHeader: [],
+ crossItems: []
+ });
+ },
+
+ _init: function () {
+ BI.AdaptiveTable.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+
+ var data = this._digest();
+ this.table = BI.createWidget(o.el, {
+ type: "bi.resizable_table",
+ element: this,
+ width: o.width,
+ height: o.height,
+ isNeedResize: o.isNeedResize,
+ isResizeAdapt: false,
+
+ isNeedFreeze: o.isNeedFreeze,
+ freezeCols: data.freezeCols,
+
+ isNeedMerge: o.isNeedMerge,
+ mergeCols: o.mergeCols,
+ mergeRule: o.mergeRule,
+
+ columnSize: data.columnSize,
+
+ headerRowSize: o.headerRowSize,
+ rowSize: o.rowSize,
+
+ regionColumnSize: data.regionColumnSize,
+
+ header: o.header,
+ items: o.items,
+ //交叉表头
+ crossHeader: o.crossHeader,
+ crossItems: o.crossItems
+ });
+ this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () {
+ self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () {
+ o.regionColumnSize = this.getRegionColumnSize();
+ self._populate();
+ self.table.populate();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments);
+ });
+
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () {
+ o.columnSize = this.getColumnSize();
+ self._populate();
+ self.table.populate();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments);
+ });
+ },
+
+ _getFreezeColLength: function () {
+ var o = this.options;
+ return o.isNeedFreeze === true ? BI.clamp(o.freezeCols.length, 0, o.columnSize.length) : 0;
+ },
+
+ _digest: function () {
+ var o = this.options;
+ var columnSize = o.columnSize.slice();
+ var regionColumnSize = o.regionColumnSize.slice();
+ var freezeCols = o.freezeCols.slice();
+ var regionSize = o.regionColumnSize[0];
+ var freezeColLength = this._getFreezeColLength();
+ if (!regionSize || regionSize > o.width - 10 || regionSize < 10) {
+ regionSize = (freezeColLength > o.columnSize.length / 2 ? 2 / 3 : 1 / 3) * o.width;
+ }
+ if (freezeColLength === 0) {
+ regionSize = 0;
+ }
+ if (freezeCols.length >= columnSize.length) {
+ freezeCols = [];
+ }
+ if (!BI.isNumber(columnSize[0])) {
+ columnSize = o.minColumnSize.slice();
+ }
+ var summaryFreezeColumnSize = 0, summaryColumnSize = 0;
+ BI.each(columnSize, function (i, size) {
+ if (i < freezeColLength) {
+ summaryFreezeColumnSize += size;
+ }
+ summaryColumnSize += size;
+ });
+ if (freezeColLength > 0) {
+ columnSize[freezeColLength - 1] = BI.clamp(regionSize - (summaryFreezeColumnSize - columnSize[freezeColLength - 1]),
+ o.minColumnSize[freezeColLength - 1] || 10, o.maxColumnSize[freezeColLength - 1] || Number.MAX_VALUE);
+ }
+ if (columnSize.length > 0) {
+ columnSize[columnSize.length - 1] = BI.clamp(o.width - BI.GridTableScrollbar.SIZE - regionSize - (summaryColumnSize - summaryFreezeColumnSize - columnSize[columnSize.length - 1]),
+ o.minColumnSize[columnSize.length - 1] || 10, o.maxColumnSize[columnSize.length - 1] || Number.MAX_VALUE);
+ }
+ regionColumnSize[0] = regionSize;
+
+ return {
+ freezeCols: freezeCols,
+ columnSize: columnSize,
+ regionColumnSize: regionColumnSize
+ }
+ },
+
+ _populate: function () {
+ var o = this.options;
+ var data = this._digest();
+ o.regionColumnSize = data.regionColumnSize;
+ o.columnSize = data.columnSize;
+ this.table.setColumnSize(data.columnSize);
+ this.table.setRegionColumnSize(data.regionColumnSize);
+ this.table.attr("freezeCols", data.freezeCols);
+ },
+
+ setWidth: function (width) {
+ BI.AdaptiveTable.superclass.setWidth.apply(this, arguments);
+ this.table.setWidth(width);
+ },
+
+ setHeight: function (height) {
+ BI.AdaptiveTable.superclass.setHeight.apply(this, arguments);
+ this.table.setHeight(height);
+ },
+
+ setColumnSize: function (columnSize) {
+ this.options.columnSize = columnSize;
+ },
+
+ getColumnSize: function () {
+ return this.table.getColumnSize();
+ },
+
+ setRegionColumnSize: function (regionColumnSize) {
+ this.options.regionColumnSize = regionColumnSize;
+ },
+
+ getRegionColumnSize: function () {
+ return this.table.getRegionColumnSize();
+ },
+
+ setVerticalScroll: function (scrollTop) {
+ this.table.setVerticalScroll(scrollTop);
+ },
+
+ setLeftHorizontalScroll: function (scrollLeft) {
+ this.table.setLeftHorizontalScroll(scrollLeft);
+ },
+
+ setRightHorizontalScroll: function (scrollLeft) {
+ this.table.setRightHorizontalScroll(scrollLeft);
+ },
+
+ getVerticalScroll: function () {
+ return this.table.getVerticalScroll();
+ },
+
+ getLeftHorizontalScroll: function () {
+ return this.table.getLeftHorizontalScroll();
+ },
+
+ getRightHorizontalScroll: function () {
+ return this.table.getRightHorizontalScroll();
+ },
+
+ attr: function (key, value) {
+ var v = BI.AdaptiveTable.superclass.attr.apply(this, arguments);
+ if (key === "freezeCols") {
+ return v;
+ }
+ return this.table.attr.apply(this.table, arguments);
+ },
+
+ restore: function () {
+ this.table.restore();
+ },
+
+ populate: function (items) {
+ var self = this, o = this.options;
+ this._populate();
+ this.table.populate.apply(this.table, arguments);
+ },
+
+ destroy: function () {
+ this.table.destroy();
+ BI.AdaptiveTable.superclass.destroy.apply(this, arguments);
+ }
+});
+BI.shortcut('bi.adaptive_table', BI.AdaptiveTable);/**
+ *
+ * 层级树状结构的表格
+ *
+ * Created by GUY on 2016/8/12.
+ * @class BI.DynamicSummaryLayerTreeTable
+ * @extends BI.Widget
+ */
+BI.DynamicSummaryLayerTreeTable = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.DynamicSummaryLayerTreeTable.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-dynamic-summary-layer-tree-table",
+
+ el: {
+ type: "bi.resizable_table"
+ },
+ isNeedResize: true,//是否需要调整列宽
+ isResizeAdapt: true,//是否需要在调整列宽或区域宽度的时候它们自适应变化
+
+ isNeedFreeze: false,//是否需要冻结单元格
+ freezeCols: [], //冻结的列号,从0开始,isNeedFreeze为tree时生效
+
+ isNeedMerge: true,//是否需要合并单元格
+ mergeCols: [],
+ mergeRule: BI.emptyFn,
+
+ columnSize: [],
+ minColumnSize: [],
+ maxColumnSize: [],
+ headerRowSize: 25,
+ footerRowSize: 25,
+ rowSize: 25,
+
+ regionColumnSize: [],
+
+ //行表头
+ rowHeaderCreator: null,
+
+ headerCellStyleGetter: BI.emptyFn,
+ summaryCellStyleGetter: BI.emptyFn,
+ sequenceCellStyleGetter: BI.emptyFn,
+
+ header: [],
+ footer: false,
+ items: [],
+
+ //交叉表头
+ crossHeader: [],
+ crossItems: []
+ })
+ },
+
+ _getVDeep: function () {
+ return this.options.crossHeader.length;//纵向深度
+ },
+
+ _getHDeep: function () {
+ var o = this.options;
+ return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1);
+ },
+
+ _createHeader: function (vDeep) {
+ var self = this, o = this.options;
+ var header = o.header || [], crossHeader = o.crossHeader || [];
+ var items = BI.TableTree.formatCrossItems(o.crossItems, vDeep, o.headerCellStyleGetter);
+ var result = [];
+ BI.each(items, function (row, node) {
+ var c = [crossHeader[row]];
+ result.push(c.concat(node || []));
+ });
+ if (header && header.length > 0) {
+ var newHeader = this._formatColumns(header);
+ var deep = this._getHDeep();
+ if (deep <= 0) {
+ newHeader.unshift(o.rowHeaderCreator || {
+ type: "bi.table_style_cell",
+ text: BI.i18nText("BI-Row_Header"),
+ styleGetter: o.headerCellStyleGetter
+ });
+ } else {
+ newHeader[0] = o.rowHeaderCreator || {
+ type: "bi.table_style_cell",
+ text: BI.i18nText("BI-Row_Header"),
+ styleGetter: o.headerCellStyleGetter
+ };
+ }
+ result.push(newHeader);
+ }
+ return result;
+ },
+
+ _formatItems: function (nodes, header, deep) {
+ var self = this, o = this.options;
+ var result = [];
+
+ function track(node, layer) {
+ node.type || (node.type = "bi.layer_tree_table_cell");
+ node.layer = layer;
+ var next = [node];
+ next = next.concat(node.values || []);
+ if (next.length > 0) {
+ result.push(next);
+ }
+ if (BI.isNotEmptyArray(node.children)) {
+ BI.each(node.children, function (index, child) {
+ track(child, layer + 1);
+ });
+ }
+ }
+
+ BI.each(nodes, function (i, node) {
+ BI.each(node.children, function (j, c) {
+ track(c, 0);
+ });
+ if (BI.isArray(node.values)) {
+ var next = [{
+ type: "bi.table_style_cell",
+ text: BI.i18nText("BI-Summary_Values"),
+ styleGetter: function () {
+ return o.summaryCellStyleGetter(true);
+ }
+ }].concat(node.values);
+ result.push(next)
+ }
+ });
+ return BI.DynamicSummaryTreeTable.formatSummaryItems(result, header, o.crossItems, 1);
+ },
+
+ _formatColumns: function (columns, deep) {
+ if (BI.isNotEmptyArray(columns)) {
+ deep = deep || this._getHDeep();
+ return columns.slice(Math.max(0, deep - 1));
+ }
+ return columns;
+ },
+
+ _formatFreezeCols: function () {
+ if (this.options.freezeCols.length > 0) {
+ return [0];
+ }
+ return [];
+ },
+
+ _formatColumnSize: function (columnSize, deep) {
+ if (columnSize.length <= 0) {
+ return [];
+ }
+ var result = [0];
+ deep = deep || this._getHDeep();
+ BI.each(columnSize, function (i, size) {
+ if (i < deep) {
+ result[0] += size;
+ return;
+ }
+ result.push(size);
+ });
+ return result;
+ },
+
+ _recomputeColumnSize: function () {
+ var o = this.options;
+ o.regionColumnSize = this.table.getRegionColumnSize();
+ var columnSize = this.table.getColumnSize().slice();
+ if (o.freezeCols.length > 1) {
+ for (var i = 0; i < o.freezeCols.length - 1; i++) {
+ columnSize.splice(1, 0, 0);
+ }
+ }
+ o.columnSize = columnSize;
+ },
+
+ _digest: function () {
+ var o = this.options;
+ var deep = this._getHDeep();
+ var vDeep = this._getVDeep();
+ var header = this._createHeader(vDeep);
+ var data = this._formatItems(o.items, header, deep);
+ var columnSize = o.columnSize.slice();
+ var minColumnSize = o.minColumnSize.slice();
+ var maxColumnSize = o.maxColumnSize.slice();
+ BI.removeAt(columnSize, data.deletedCols);
+ BI.removeAt(minColumnSize, data.deletedCols);
+ BI.removeAt(maxColumnSize, data.deletedCols);
+ return {
+ header: data.header,
+ items: data.items,
+ columnSize: this._formatColumnSize(columnSize, deep),
+ minColumnSize: this._formatColumns(minColumnSize, deep),
+ maxColumnSize: this._formatColumns(maxColumnSize, deep),
+ freezeCols: this._formatFreezeCols()
+ }
+ },
+
+ _init: function () {
+ BI.DynamicSummaryLayerTreeTable.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ var data = this._digest();
+ this.table = BI.createWidget(o.el, {
+ type: "bi.resizable_table",
+ element: this,
+ width: o.width,
+ height: o.height,
+ isNeedResize: o.isNeedResize,
+ isResizeAdapt: o.isResizeAdapt,
+ isNeedFreeze: o.isNeedFreeze,
+ freezeCols: data.freezeCols,
+ isNeedMerge: o.isNeedMerge,
+ mergeCols: [],
+ mergeRule: o.mergeRule,
+ columnSize: data.columnSize,
+ minColumnSize: data.minColumnSize,
+ maxColumnSize: data.maxColumnSize,
+ headerRowSize: o.headerRowSize,
+ rowSize: o.rowSize,
+ regionColumnSize: o.regionColumnSize,
+ header: data.header,
+ items: data.items
+ });
+ this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () {
+ self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () {
+ self._recomputeColumnSize();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () {
+ self._recomputeColumnSize();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments);
+ });
+ },
+
+ setWidth: function (width) {
+ BI.DynamicSummaryLayerTreeTable.superclass.setWidth.apply(this, arguments);
+ this.table.setWidth(width);
+ },
+
+ setHeight: function (height) {
+ BI.DynamicSummaryLayerTreeTable.superclass.setHeight.apply(this, arguments);
+ this.table.setHeight(height);
+ },
+
+ setColumnSize: function (columnSize) {
+ this.options.columnSize = columnSize;
+ },
+
+ getColumnSize: function () {
+ return this.options.columnSize;
+ },
+
+ setRegionColumnSize: function (columnSize) {
+ this.options.regionColumnSize = columnSize;
+ this.table.setRegionColumnSize(columnSize);
+ },
+
+ getRegionColumnSize: function () {
+ return this.table.getRegionColumnSize();
+ },
+
+ setVerticalScroll: function (scrollTop) {
+ this.table.setVerticalScroll(scrollTop);
+ },
+
+ setLeftHorizontalScroll: function (scrollLeft) {
+ this.table.setLeftHorizontalScroll(scrollLeft);
+ },
+
+ setRightHorizontalScroll: function (scrollLeft) {
+ this.table.setRightHorizontalScroll(scrollLeft);
+ },
+
+ getVerticalScroll: function () {
+ return this.table.getVerticalScroll();
+ },
+
+ getLeftHorizontalScroll: function () {
+ return this.table.getLeftHorizontalScroll();
+ },
+
+ getRightHorizontalScroll: function () {
+ return this.table.getRightHorizontalScroll();
+ },
+
+ attr: function (key, value) {
+ var self = this;
+ if (BI.isObject(key)) {
+ BI.each(key, function (k, v) {
+ self.attr(k, v);
+ });
+ return;
+ }
+ BI.DynamicSummaryLayerTreeTable.superclass.attr.apply(this, arguments);
+ switch (key) {
+ case "columnSize":
+ case "minColumnSize":
+ case "maxColumnSize":
+ case "freezeCols":
+ case "mergeCols":
+ return;
+ }
+ this.table.attr.apply(this.table, [key, value]);
+ },
+
+ restore: function () {
+ this.table.restore();
+ },
+
+ populate: function (items, header, crossItems, crossHeader) {
+ var o = this.options;
+ if (items) {
+ o.items = items;
+ }
+ if (header) {
+ o.header = header;
+ }
+ if (crossItems) {
+ o.crossItems = crossItems;
+ }
+ if (crossHeader) {
+ o.crossHeader = crossHeader;
+ }
+ var data = this._digest();
+ this.table.setColumnSize(data.columnSize);
+ this.table.attr("minColumnSize", data.minColumnSize);
+ this.table.attr("maxColumnSize", data.maxColumnSize);
+ this.table.attr("freezeCols", data.freezeCols);
+ this.table.populate(data.items, data.header);
+ },
+
+ destroy: function () {
+ this.table.destroy();
+ BI.DynamicSummaryLayerTreeTable.superclass.destroy.apply(this, arguments);
+ }
+});
+
+BI.shortcut("bi.dynamic_summary_layer_tree_table", BI.DynamicSummaryLayerTreeTable);/**
+ *
+ * 树状结构的表格
+ *
+ * Created by GUY on 2015/8/12.
+ * @class BI.DynamicSummaryTreeTable
+ * @extends BI.Widget
+ */
+BI.DynamicSummaryTreeTable = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.DynamicSummaryTreeTable.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-dynamic-summary-tree-table",
+ el: {
+ type: "bi.resizable_table"
+ },
+
+ isNeedResize: true,//是否需要调整列宽
+ isResizeAdapt: true,//是否需要在调整列宽或区域宽度的时候它们自适应变化
+
+ isNeedFreeze: false,//是否需要冻结单元格
+ freezeCols: [], //冻结的列号,从0开始,isNeedFreeze为tree时生效
+
+ isNeedMerge: true,//是否需要合并单元格
+ mergeCols: [],
+ mergeRule: BI.emptyFn,
+
+ columnSize: [],
+ minColumnSize: [],
+ maxColumnSize: [],
+ headerRowSize: 25,
+ footerRowSize: 25,
+ rowSize: 25,
+
+ regionColumnSize: [],
+
+ headerCellStyleGetter: BI.emptyFn,
+ summaryCellStyleGetter: BI.emptyFn,
+ sequenceCellStyleGetter: BI.emptyFn,
+
+ header: [],
+ footer: false,
+ items: [],
+
+ //交叉表头
+ crossHeader: [],
+ crossItems: []
+ })
+ },
+
+ _getVDeep: function () {
+ return this.options.crossHeader.length;//纵向深度
+ },
+
+ _getHDeep: function () {
+ var o = this.options;
+ return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1);
+ },
+
+ _init: function () {
+ BI.DynamicSummaryTreeTable.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ var data = this._digest();
+ this.table = BI.createWidget(o.el, {
+ type: "bi.resizable_table",
+ element: this,
+ width: o.width,
+ height: o.height,
+
+ isNeedResize: o.isNeedResize,
+ isResizeAdapt: o.isResizeAdapt,
+
+ isNeedFreeze: o.isNeedFreeze,
+ freezeCols: o.freezeCols,
+ isNeedMerge: o.isNeedMerge,
+ mergeCols: o.mergeCols,
+ mergeRule: o.mergeRule,
+
+ columnSize: o.columnSize,
+ minColumnSize: o.minColumnSize,
+ maxColumnSize: o.maxColumnSize,
+ headerRowSize: o.headerRowSize,
+ rowSize: o.rowSize,
+
+ regionColumnSize: o.regionColumnSize,
+
+ header: data.header,
+ items: data.items
+ });
+ this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () {
+ self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () {
+ o.regionColumnSize = this.getRegionColumnSize();
+ var columnSize = this.getColumnSize();
+ var length = o.columnSize.length - columnSize.length;
+ o.columnSize = columnSize.slice();
+ o.columnSize = o.columnSize.concat(BI.makeArray(length, 0));
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () {
+ o.regionColumnSize = this.getRegionColumnSize();
+ var columnSize = this.getColumnSize();
+ var length = o.columnSize.length - columnSize.length;
+ o.columnSize = columnSize.slice();
+ o.columnSize = o.columnSize.concat(BI.makeArray(length, 0));
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments);
+ });
+ },
+
+ _digest: function () {
+ var o = this.options;
+ var deep = this._getHDeep();
+ var vDeep = this._getVDeep();
+ var header = BI.TableTree.formatHeader(o.header, o.crossHeader, o.crossItems, deep, vDeep, o.headerCellStyleGetter);
+ var items = BI.DynamicSummaryTreeTable.formatHorizontalItems(o.items, deep, false, o.summaryCellStyleGetter);
+ var data = BI.DynamicSummaryTreeTable.formatSummaryItems(items, header, o.crossItems, deep);
+ var columnSize = o.columnSize.slice();
+ var minColumnSize = o.minColumnSize.slice();
+ var maxColumnSize = o.maxColumnSize.slice();
+ BI.removeAt(columnSize, data.deletedCols);
+ BI.removeAt(minColumnSize, data.deletedCols);
+ BI.removeAt(maxColumnSize, data.deletedCols);
+ return {
+ header: data.header,
+ items: data.items,
+ columnSize: columnSize,
+ minColumnSize: minColumnSize,
+ maxColumnSize: maxColumnSize
+ };
+ },
+
+ setWidth: function (width) {
+ BI.DynamicSummaryTreeTable.superclass.setWidth.apply(this, arguments);
+ this.table.setWidth(width);
+ },
+
+ setHeight: function (height) {
+ BI.DynamicSummaryTreeTable.superclass.setHeight.apply(this, arguments);
+ this.table.setHeight(height);
+ },
+
+ setColumnSize: function (columnSize) {
+ this.options.columnSize = columnSize;
+ },
+
+ getColumnSize: function () {
+ return this.options.columnSize;
+ },
+
+ setRegionColumnSize: function (columnSize) {
+ this.options.regionColumnSize = columnSize;
+ this.table.setRegionColumnSize(columnSize);
+ },
+
+ getRegionColumnSize: function () {
+ return this.table.getRegionColumnSize();
+ },
+
+ setVerticalScroll: function (scrollTop) {
+ this.table.setVerticalScroll(scrollTop);
+ },
+
+ setLeftHorizontalScroll: function (scrollLeft) {
+ this.table.setLeftHorizontalScroll(scrollLeft);
+ },
+
+ setRightHorizontalScroll: function (scrollLeft) {
+ this.table.setRightHorizontalScroll(scrollLeft);
+ },
+
+ getVerticalScroll: function () {
+ return this.table.getVerticalScroll();
+ },
+
+ getLeftHorizontalScroll: function () {
+ return this.table.getLeftHorizontalScroll();
+ },
+
+ getRightHorizontalScroll: function () {
+ return this.table.getRightHorizontalScroll();
+ },
+
+ attr: function (key) {
+ BI.DynamicSummaryTreeTable.superclass.attr.apply(this, arguments);
+ switch (key) {
+ case "minColumnSize":
+ case "maxColumnSize":
+ return;
+ }
+ this.table.attr.apply(this.table, arguments);
+ },
+
+ restore: function () {
+ this.table.restore();
+ },
+
+ populate: function (items, header, crossItems, crossHeader) {
+ var o = this.options;
+ if (items) {
+ o.items = items;
+ }
+ if (header) {
+ o.header = header;
+ }
+ if (crossItems) {
+ o.crossItems = crossItems;
+ }
+ if (crossHeader) {
+ o.crossHeader = crossHeader;
+ }
+ var data = this._digest();
+ this.table.setColumnSize(data.columnSize);
+ this.table.attr("minColumnSize", data.minColumnSize);
+ this.table.attr("maxColumnSize", data.maxColumnSize);
+ this.table.populate(data.items, data.header);
+ },
+
+ destroy: function () {
+ this.table.destroy();
+ BI.DynamicSummaryTreeTable.superclass.destroy.apply(this, arguments);
+ }
+});
+
+BI.extend(BI.DynamicSummaryTreeTable, {
+
+ formatHorizontalItems: function (nodes, deep, isCross, styleGetter) {
+ var result = [];
+
+ function track(store, node) {
+ var next;
+ if (BI.isArray(node.children)) {
+ BI.each(node.children, function (index, child) {
+ var next;
+ if (store != -1) {
+ next = store.slice();
+ next.push(node);
+ } else {
+ next = [];
+ }
+ track(next, child);
+ });
+ if (store != -1) {
+ next = store.slice();
+ next.push(node);
+ } else {
+ next = [];
+ }
+ if ((store == -1 || node.children.length > 1) && BI.isNotEmptyArray(node.values)) {
+ var summary = {
+ text: BI.i18nText("BI-Summary_Values"),
+ type: "bi.table_style_cell",
+ styleGetter: function () {
+ return styleGetter(store === -1)
+ }
+ };
+ for (var i = next.length; i < deep; i++) {
+ next.push(summary);
+ }
+ if (!isCross) {
+ next = next.concat(node.values);
+ }
+ if (next.length > 0) {
+ if (!isCross) {
+ result.push(next);
+ } else {
+ for (var k = 0, l = node.values.length; k < l; k++) {
+ result.push(next);
+ }
+ }
+ }
+ }
+ return;
+ }
+ if (store != -1) {
+ next = store.slice();
+ for (var i = next.length; i < deep; i++) {
+ next.push(node);
+ }
+ } else {
+ next = [];
+ }
+ if (!isCross && BI.isArray(node.values)) {
+ next = next.concat(node.values);
+ }
+ if (isCross && BI.isArray(node.values)) {
+ for (var i = 0, len = node.values.length; i < len - 1; i++) {
+ if (next.length > 0) {
+ result.push(next);
+ }
+ }
+ }
+ if (next.length > 0) {
+ result.push(next);
+ }
+ }
+
+ BI.each(nodes, function (i, node) {
+ track(-1, node);
+ });
+ //填充空位
+ BI.each(result, function (i, line) {
+ var last = BI.last(line);
+ for (var j = line.length; j < deep; j++) {
+ line.push(last);
+ }
+ });
+ return result;
+ },
+
+ formatSummaryItems: function (items, header, crossItems, deep) {
+ //求纵向需要去除的列
+ var cols = [];
+ var leaf = 0;
+
+ function track(node) {
+ if (BI.isArray(node.children)) {
+ BI.each(node.children, function (index, child) {
+ track(child);
+ });
+ if (BI.isNotEmptyArray(node.values)) {
+ if (node.children.length === 1) {
+ for (var i = 0; i < node.values.length; i++) {
+ cols.push(leaf + i + deep);
+ }
+ }
+ leaf += node.values.length;
+ }
+ return;
+ }
+ if (node.values && node.values.length > 1) {
+ leaf += node.values.length;
+ } else {
+ leaf++;
+ }
+ }
+
+ BI.each(crossItems, function (i, node) {
+ track(node);
+ });
+
+ if (cols.length > 0) {
+ var nHeader = [], nItems = [];
+ BI.each(header, function (i, node) {
+ var nNode = node.slice();
+ BI.removeAt(nNode, cols);
+ nHeader.push(nNode);
+ });
+ BI.each(items, function (i, node) {
+ var nNode = node.slice();
+ BI.removeAt(nNode, cols);
+ nItems.push(nNode);;
+ });
+ header = nHeader;
+ items = nItems;
+ }
+ return {items: items, header: header, deletedCols: cols};
+ }
+});
+
+BI.shortcut("bi.dynamic_summary_tree_table", BI.DynamicSummaryTreeTable);/**
+ * Created by GUY on 2016/5/7.
+ * @class BI.LayerTreeTableCell
+ * @extends BI.Single
+ */
+BI.LayerTreeTableCell = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.LayerTreeTableCell.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-layer-tree-table-cell",
+ layer: 0,
+ text: ""
+ })
+ },
+
+ _init: function () {
+ BI.LayerTreeTableCell.superclass._init.apply(this, arguments);
+ var o = this.options;
+ BI.createWidget({
+ type: "bi.label",
+ element: this.element,
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ height: o.height,
+ text: o.text,
+ value: o.value,
+ lgap: 5 + 30 * o.layer,
+ rgap: 5
+ })
+ }
+});
+
+BI.shortcut("bi.layer_tree_table_cell", BI.LayerTreeTableCell);/**
+ *
+ * 层级树状结构的表格
+ *
+ * Created by GUY on 2016/5/7.
+ * @class BI.LayerTreeTable
+ * @extends BI.Widget
+ */
+BI.LayerTreeTable = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.LayerTreeTable.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-layer-tree-table",
+ el: {
+ type: "bi.resizable_table"
+ },
+
+ isNeedResize: false,//是否需要调整列宽
+ isResizeAdapt: true,//是否需要在调整列宽或区域宽度的时候它们自适应变化
+
+ isNeedFreeze: false,//是否需要冻结单元格
+ freezeCols: [], //冻结的列号,从0开始,isNeedFreeze为tree时生效
+
+ isNeedMerge: true,//是否需要合并单元格
+ mergeCols: [],
+ mergeRule: BI.emptyFn,
+
+ columnSize: [],
+ minColumnSize: [],
+ maxColumnSize: [],
+
+ headerRowSize: 25,
+ rowSize: 25,
+
+ regionColumnSize: [],
+
+ rowHeaderCreator: null,
+
+ headerCellStyleGetter: BI.emptyFn,
+ summaryCellStyleGetter: BI.emptyFn,
+ sequenceCellStyleGetter: BI.emptyFn,
+
+ header: [],
+ items: [],
+
+ //交叉表头
+ crossHeader: [],
+ crossItems: []
+ })
+ },
+
+ _getVDeep: function () {
+ return this.options.crossHeader.length;//纵向深度
+ },
+
+ _getHDeep: function () {
+ var o = this.options;
+ return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1);
+ },
+
+ _createHeader: function (vDeep) {
+ var self = this, o = this.options;
+ var header = o.header || [], crossHeader = o.crossHeader || [];
+ var items = BI.TableTree.formatCrossItems(o.crossItems, vDeep, o.headerCellStyleGetter);
+ var result = [];
+ BI.each(items, function (row, node) {
+ var c = [crossHeader[row]];
+ result.push(c.concat(node || []));
+ });
+ if (header && header.length > 0) {
+ var newHeader = this._formatColumns(header);
+ var deep = this._getHDeep();
+ if (deep <= 0) {
+ newHeader.unshift(o.rowHeaderCreator || {
+ type: "bi.table_style_cell",
+ text: BI.i18nText("BI-Row_Header"),
+ styleGetter: o.headerCellStyleGetter
+ });
+ } else {
+ newHeader[0] = o.rowHeaderCreator || {
+ type: "bi.table_style_cell",
+ text: BI.i18nText("BI-Row_Header"),
+ styleGetter: o.headerCellStyleGetter
+ };
+ }
+ result.push(newHeader);
+ }
+ return result;
+ },
+
+ _formatItems: function (nodes) {
+ var self = this, o = this.options;
+ var result = [];
+
+ function track(node, layer) {
+ node.type || (node.type = "bi.layer_tree_table_cell");
+ node.layer = layer;
+ var next = [node];
+ next = next.concat(node.values || []);
+ if (next.length > 0) {
+ result.push(next);
+ }
+ if (BI.isNotEmptyArray(node.children)) {
+ BI.each(node.children, function (index, child) {
+ track(child, layer + 1);
+ });
+ }
+ }
+
+ BI.each(nodes, function (i, node) {
+ BI.each(node.children, function (j, c) {
+ track(c, 0);
+ });
+ if (BI.isArray(node.values)) {
+ var next = [{
+ type: "bi.table_style_cell", text: BI.i18nText("BI-Summary_Values"), styleGetter: function () {
+ return o.summaryCellStyleGetter(true);
+ }
+ }].concat(node.values);
+ result.push(next)
+ }
+ });
+ return result;
+ },
+
+ _formatColumns: function (columns, deep) {
+ if (BI.isNotEmptyArray(columns)) {
+ deep = deep || this._getHDeep();
+ return columns.slice(Math.max(0, deep - 1));
+ }
+ return columns;
+ },
+
+ _formatFreezeCols: function () {
+ if (this.options.freezeCols.length > 0) {
+ return [0];
+ }
+ return [];
+ },
+
+ _formatColumnSize: function (columnSize, deep) {
+ if (columnSize.length <= 0) {
+ return [];
+ }
+ var result = [0];
+ deep = deep || this._getHDeep();
+ BI.each(columnSize, function (i, size) {
+ if (i < deep) {
+ result[0] += size;
+ return;
+ }
+ result.push(size);
+ });
+ return result;
+ },
+
+ _digest: function () {
+ var o = this.options;
+ var deep = this._getHDeep();
+ var vDeep = this._getVDeep();
+ return {
+ header: this._createHeader(vDeep),
+ items: this._formatItems(o.items),
+ columnSize: this._formatColumnSize(o.columnSize, deep),
+ minColumnSize: this._formatColumns(o.minColumnSize, deep),
+ maxColumnSize: this._formatColumns(o.maxColumnSize, deep),
+ freezeCols: this._formatFreezeCols()
+ }
+ },
+
+ _init: function () {
+ BI.LayerTreeTable.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+
+ var data = this._digest();
+ this.table = BI.createWidget(o.el, {
+ type: "bi.resizable_table",
+ element: this,
+ width: o.width,
+ height: o.height,
+ isNeedResize: o.isNeedResize,
+ isResizeAdapt: o.isResizeAdapt,
+ isNeedFreeze: o.isNeedFreeze,
+ freezeCols: data.freezeCols,
+ isNeedMerge: o.isNeedMerge,
+ mergeCols: [],
+ mergeRule: o.mergeRule,
+ columnSize: data.columnSize,
+ minColumnSize: data.minColumnSize,
+ maxColumnSize: data.maxColumnSize,
+ headerRowSize: o.headerRowSize,
+ rowSize: o.rowSize,
+ regionColumnSize: o.regionColumnSize,
+ header: data.header,
+ items: data.items
+ });
+ this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () {
+ self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () {
+ o.regionColumnSize = this.getRegionColumnSize();
+ o.columnSize = this.getColumnSize();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () {
+ o.regionColumnSize = this.getRegionColumnSize();
+ o.columnSize = this.getColumnSize();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments);
+ });
+ },
+
+ setWidth: function (width) {
+ BI.LayerTreeTable.superclass.setWidth.apply(this, arguments);
+ this.table.setWidth(width);
+ },
+
+ setHeight: function (height) {
+ BI.LayerTreeTable.superclass.setHeight.apply(this, arguments);
+ this.table.setHeight(height);
+ },
+
+ setColumnSize: function (columnSize) {
+ this.options.columnSize = columnSize;
+ },
+
+ getColumnSize: function () {
+ var columnSize = this.table.getColumnSize();
+ var deep = this._getHDeep();
+ var pre = [];
+ if (deep > 0) {
+ pre = BI.makeArray(deep, columnSize[0] / deep);
+ }
+ return pre.concat(columnSize.slice(1));
+ },
+
+ setRegionColumnSize: function (columnSize) {
+ this.options.regionColumnSize = columnSize;
+ this.table.setRegionColumnSize(columnSize);
+ },
+
+ getRegionColumnSize: function () {
+ return this.table.getRegionColumnSize();
+ },
+
+ setVerticalScroll: function (scrollTop) {
+ this.table.setVerticalScroll(scrollTop);
+ },
+
+ setLeftHorizontalScroll: function (scrollLeft) {
+ this.table.setLeftHorizontalScroll(scrollLeft);
+ },
+
+ setRightHorizontalScroll: function (scrollLeft) {
+ this.table.setRightHorizontalScroll(scrollLeft);
+ },
+
+ getVerticalScroll: function () {
+ return this.table.getVerticalScroll();
+ },
+
+ getLeftHorizontalScroll: function () {
+ return this.table.getLeftHorizontalScroll();
+ },
+
+ getRightHorizontalScroll: function () {
+ return this.table.getRightHorizontalScroll();
+ },
+
+ attr: function (key, value) {
+ var self = this;
+ if (BI.isObject(key)) {
+ BI.each(key, function (k, v) {
+ self.attr(k, v);
+ });
+ return;
+ }
+ BI.LayerTreeTable.superclass.attr.apply(this, arguments);
+ switch (key) {
+ case "columnSize":
+ case "minColumnSize":
+ case "maxColumnSize":
+ case "freezeCols":
+ case "mergeCols":
+ return;
+ }
+ this.table.attr.apply(this.table, [key, value]);
+ },
+
+ restore: function () {
+ this.table.restore();
+ },
+
+ populate: function (items, header, crossItems, crossHeader) {
+ var o = this.options;
+ o.items = items || [];
+ if (header) {
+ o.header = header;
+ }
+ if (crossItems) {
+ o.crossItems = crossItems;
+ }
+ if (crossHeader) {
+ o.crossHeader = crossHeader;
+ }
+ var data = this._digest();
+ this.table.setColumnSize(data.columnSize);
+ this.table.attr("freezeCols", data.freezeCols);
+ this.table.attr("minColumnSize", data.minColumnSize);
+ this.table.attr("maxColumnSize", data.maxColumnSize);
+ this.table.populate(data.items, data.header);
+ },
+
+ destroy: function () {
+ this.table.destroy();
+ BI.LayerTreeTable.superclass.destroy.apply(this, arguments);
+ }
+});
+
+BI.shortcut("bi.layer_tree_table", BI.LayerTreeTable);/**
+ *
+ * Created by GUY on 2016/5/26.
+ * @class BI.TableStyleCell
+ * @extends BI.Single
+ */
+BI.TableStyleCell = BI.inherit(BI.Single, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.TableStyleCell.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-table-style-cell",
+ styleGetter: BI.emptyFn
+ });
+ },
+
+ _init: function () {
+ BI.TableStyleCell.superclass._init.apply(this, arguments);
+ var o = this.options;
+ this.text = BI.createWidget({
+ type: "bi.label",
+ element: this,
+ textAlign: "left",
+ forceCenter: true,
+ hgap: 5,
+ text: o.text
+ });
+ this._digestStyle();
+ },
+
+ _digestStyle: function () {
+ var o = this.options;
+ var style = o.styleGetter();
+ if (style) {
+ this.text.element.css(style);
+ }
+ },
+
+ setText: function (text) {
+ this.text.setText(text);
+ },
+
+ populate: function () {
+ this._digestStyle();
+ }
+});
+BI.shortcut('bi.table_style_cell', BI.TableStyleCell);/**
+ *
+ * 树状结构的表格
+ *
+ * Created by GUY on 2015/9/22.
+ * @class BI.TableTree
+ * @extends BI.Widget
+ */
+BI.TableTree = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.TableTree.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-table-tree",
+ el: {
+ type: "bi.resizable_table"
+ },
+ isNeedResize: true,//是否需要调整列宽
+ isResizeAdapt: true,//是否需要在调整列宽或区域宽度的时候它们自适应变化
+
+ freezeCols: [], //冻结的列号,从0开始,isNeedFreeze为tree时生效
+
+ isNeedMerge: true,//是否需要合并单元格
+ mergeCols: [],
+ mergeRule: BI.emptyFn,
+
+ columnSize: [],
+ minColumnSize: [],
+ maxColumnSize: [],
+ headerRowSize: 25,
+ rowSize: 25,
+
+ regionColumnSize: [],
+
+ headerCellStyleGetter: BI.emptyFn,
+ summaryCellStyleGetter: BI.emptyFn,
+ sequenceCellStyleGetter: BI.emptyFn,
+
+ header: [],
+ items: [],
+
+ //交叉表头
+ crossHeader: [],
+ crossItems: []
+ })
+ },
+
+ _getVDeep: function () {
+ return this.options.crossHeader.length;//纵向深度
+ },
+
+ _getHDeep: function () {
+ var o = this.options;
+ return Math.max(o.mergeCols.length, o.freezeCols.length, BI.TableTree.maxDeep(o.items) - 1);
+ },
+
+ _init: function () {
+ BI.TableTree.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ var data = this._digest();
+ this.table = BI.createWidget(o.el, {
+ type: "bi.resizable_table",
+ element: this,
+ width: o.width,
+ height: o.height,
+ isNeedResize: o.isNeedResize,
+ isResizeAdapt: o.isResizeAdapt,
+
+ isNeedFreeze: o.isNeedFreeze,
+ freezeCols: o.freezeCols,
+ isNeedMerge: o.isNeedMerge,
+ mergeCols: o.mergeCols,
+ mergeRule: o.mergeRule,
+
+ columnSize: o.columnSize,
+ minColumnSize: o.minColumnSize,
+ maxColumnSize: o.maxColumnSize,
+
+ headerRowSize: o.headerRowSize,
+ rowSize: o.rowSize,
+
+ regionColumnSize: o.regionColumnSize,
+
+ header: data.header,
+ items: data.items
+ });
+ this.table.on(BI.Table.EVENT_TABLE_SCROLL, function () {
+ self.fireEvent(BI.Table.EVENT_TABLE_SCROLL, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, function () {
+ o.regionColumnSize = this.getRegionColumnSize();
+ o.columnSize = this.getColumnSize();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_REGION_RESIZE, arguments);
+ });
+ this.table.on(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, function () {
+ o.regionColumnSize = this.getRegionColumnSize();
+ o.columnSize = this.getColumnSize();
+ self.fireEvent(BI.Table.EVENT_TABLE_AFTER_COLUMN_RESIZE, arguments);
+ });
+ },
+
+ _digest: function () {
+ var self = this, o = this.options;
+ var deep = this._getHDeep();
+ var vDeep = this._getVDeep();
+ var header = BI.TableTree.formatHeader(o.header, o.crossHeader, o.crossItems, deep, vDeep, o.headerCellStyleGetter);
+ var items = BI.TableTree.formatItems(o.items, deep, false, o.summaryCellStyleGetter);
+ return {
+ header: header,
+ items: items
+ }
+ },
+
+ setWidth: function (width) {
+ BI.TableTree.superclass.setWidth.apply(this, arguments);
+ this.table.setWidth(width);
+ },
+
+ setHeight: function (height) {
+ BI.TableTree.superclass.setHeight.apply(this, arguments);
+ this.table.setHeight(height);
+ },
+
+ setColumnSize: function (columnSize) {
+ this.options.columnSize = columnSize;
+ this.table.setColumnSize(columnSize);
+ },
+
+ getColumnSize: function () {
+ return this.table.getColumnSize();
+ },
+
+ setRegionColumnSize: function (columnSize) {
+ this.options.regionColumnSize = columnSize;
+ this.table.setRegionColumnSize(columnSize);
+ },
+
+ getRegionColumnSize: function () {
+ return this.table.getRegionColumnSize();
+ },
+
+ setVerticalScroll: function (scrollTop) {
+ this.table.setVerticalScroll(scrollTop);
+ },
+
+ setLeftHorizontalScroll: function (scrollLeft) {
+ this.table.setLeftHorizontalScroll(scrollLeft);
+ },
+
+ setRightHorizontalScroll: function (scrollLeft) {
+ this.table.setRightHorizontalScroll(scrollLeft);
+ },
+
+ getVerticalScroll: function () {
+ return this.table.getVerticalScroll();
+ },
+
+ getLeftHorizontalScroll: function () {
+ return this.table.getLeftHorizontalScroll();
+ },
+
+ getRightHorizontalScroll: function () {
+ return this.table.getRightHorizontalScroll();
+ },
+
+ attr: function () {
+ BI.TableTree.superclass.attr.apply(this, arguments);
+ this.table.attr.apply(this.table, arguments);
+ },
+
+ restore: function () {
+ this.table.restore();
+ },
+
+ populate: function (items, header, crossItems, crossHeader) {
+ var o = this.options;
+ if (items) {
+ o.items = items || [];
+ }
+ if (header) {
+ o.header = header;
+ }
+ if (crossItems) {
+ o.crossItems = crossItems;
+ }
+ if (crossHeader) {
+ o.crossHeader = crossHeader;
+ }
+ var data = this._digest();
+ this.table.populate(data.items, data.header);
+ },
+
+ destroy: function () {
+ this.table.destroy();
+ BI.TableTree.superclass.destroy.apply(this, arguments);
+ }
+});
+
+BI.extend(BI.TableTree, {
+ formatHeader: function (header, crossHeader, crossItems, hDeep, vDeep, styleGetter) {
+ var items = BI.TableTree.formatCrossItems(crossItems, vDeep, styleGetter);
+ var result = [];
+ for (var i = 0; i < vDeep; i++) {
+ var c = [];
+ for (var j = 0; j < hDeep; j++) {
+ c.push(crossHeader[i]);
+ }
+ result.push(c.concat(items[i] || []));
+ }
+ if (header && header.length > 0) {
+ result.push(header);
+ }
+ return result;
+ },
+
+ formatItems: function (nodes, deep, isCross, styleGetter) {
+ var self = this;
+ var result = [];
+
+ function track(store, node) {
+ var next;
+ if (BI.isArray(node.children)) {
+ BI.each(node.children, function (index, child) {
+ var next;
+ if (store != -1) {
+ next = store.slice();
+ next.push(node);
+ } else {
+ next = [];
+ }
+ track(next, child);
+ });
+ if (store != -1) {
+ next = store.slice();
+ next.push(node);
+ } else {
+ next = [];
+ }
+ if (/**(store == -1 || node.children.length > 1) &&**/ BI.isNotEmptyArray(node.values)) {
+ var summary = {
+ text: BI.i18nText("BI-Summary_Values"),
+ type: "bi.table_style_cell",
+ styleGetter: function () {
+ return styleGetter(store === -1)
+ }
+ };
+ for (var i = next.length; i < deep; i++) {
+ next.push(summary);
+ }
+ if (!isCross) {
+ next = next.concat(node.values);
+ }
+ if (next.length > 0) {
+ if (!isCross) {
+ result.push(next);
+ } else {
+ for (var k = 0, l = node.values.length; k < l; k++) {
+ result.push(next);
+ }
+ }
+ }
+ }
+
+ return;
+ }
+ if (store != -1) {
+ next = store.slice();
+ for (var i = next.length; i < deep; i++) {
+ next.push(node);
+ }
+ } else {
+ next = [];
+ }
+ if (!isCross && BI.isArray(node.values)) {
+ next = next.concat(node.values);
+ }
+ if (isCross && BI.isArray(node.values)) {
+ for (var i = 0, len = node.values.length; i < len - 1; i++) {
+ if (next.length > 0) {
+ result.push(next);
+ }
+ }
+ }
+ if (next.length > 0) {
+ result.push(next);
+ }
+ }
+
+ BI.each(nodes, function (i, node) {
+ track(-1, node);
+ });
+ //填充空位
+ BI.each(result, function (i, line) {
+ var last = BI.last(line);
+ for (var j = line.length; j < deep; j++) {
+ line.push(last);
+ }
+ });
+ return result;
+ },
+
+ formatCrossItems: function (nodes, deep, styleGetter) {
+ var items = BI.TableTree.formatItems(nodes, deep, true, styleGetter);
+ return BI.unzip(items);
+ },
+
+ maxDeep: function (nodes) {
+ function track(deep, node) {
+ var d = deep;
+ if (BI.isNotEmptyArray(node.children)) {
+ BI.each(node.children, function (index, child) {
+ d = Math.max(d, track(deep + 1, child));
+ });
+ }
+ return d;
+ }
+
+ var deep = 1;
+ if (BI.isObject(nodes)) {
+ BI.each(nodes, function (i, node) {
+ deep = Math.max(deep, track(1, node));
+ });
+ }
+ return deep;
+ }
+});
+
+BI.shortcut("bi.tree_table", BI.TableTree);/**
+ * guy
+ * 复选导航条
+ * Created by GUY on 2015/8/25.
+ * @class BI.MultiSelectBar
+ * @extends BI.BasicButton
+ */
+BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
+ _defaultConfig: function () {
+ return BI.extend(BI.MultiSelectBar.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-multi-select-bar",
+ height: 25,
+ text: BI.i18nText('BI-Select_All'),
+ isAllCheckedBySelectedValue: BI.emptyFn,
+ //手动控制选中
+ disableSelected: true,
+ isHalfCheckedBySelectedValue: function (selectedValues) {
+ return selectedValues.length > 0;
+ }
+ })
+ },
+ _init: function () {
+ BI.MultiSelectBar.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.checkbox = BI.createWidget({
+ type: "bi.checkbox",
+ stopPropagation: true,
+ handler: function () {
+ self.setSelected(self.isSelected());
+ }
+ });
+ this.half = BI.createWidget({
+ type: "bi.half_icon_button",
+ stopPropagation: true,
+ handler: function () {
+ self.setSelected(true);
+ }
+ });
+ this.checkbox.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, self.isSelected(), self);
+ });
+ this.half.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, self.isSelected(), self);
+ });
+ this.half.on(BI.HalfIconButton.EVENT_CHANGE, function () {
+ self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE, self.isSelected(), self);
+ });
+ this.checkbox.on(BI.Checkbox.EVENT_CHANGE, function () {
+ self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE, self.isSelected(), self);
+ });
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ whiteSpace: "nowrap",
+ textHeight: o.height,
+ height: o.height,
+ hgap: o.hgap,
+ text: o.text,
+ keyword: o.keyword,
+ value: o.value,
+ py: o.py
+ });
+ BI.createWidget({
+ type: "bi.htape",
+ element: this,
+ items: [{
+ width: 36,
+ el: {
+ type: "bi.center_adapt",
+ items: [this.checkbox, this.half]
+ }
+ }, {
+ el: this.text
+ }]
+ });
+ this.half.invisible();
+ },
+
+ //自己手动控制选中
+ beforeClick: function () {
+ var isHalf = this.isHalfSelected(), isSelected = this.isSelected();
+ if (isHalf === true) {
+ this.setSelected(true);
+ } else {
+ this.setSelected(!isSelected);
+ }
+ },
+
+ setSelected: function (v) {
+ this.checkbox.setSelected(v);
+ this.setHalfSelected(false);
+ },
+
+ setHalfSelected: function (b) {
+ this._half = !!b;
+ if (b === true) {
+ this.half.visible();
+ this.checkbox.invisible();
+ } else {
+ this.half.invisible();
+ this.checkbox.visible();
+ }
+ },
+
+ isHalfSelected: function () {
+ return !!this._half;
+ },
+
+ isSelected: function () {
+ return this.checkbox.isSelected();
+ },
+
+ setValue: function (selectedValues) {
+ BI.MultiSelectBar.superclass.setValue.apply(this, arguments);
+ var isAllChecked = this.options.isAllCheckedBySelectedValue.apply(this, arguments);
+ this.setSelected(isAllChecked);
+ !isAllChecked && this.setHalfSelected(this.options.isHalfCheckedBySelectedValue.apply(this, arguments));
+ }
+});
+BI.MultiSelectBar.EVENT_CHANGE = "MultiSelectBar.EVENT_CHANGE";
+BI.shortcut("bi.multi_select_bar", BI.MultiSelectBar);/**
+ * 表关联树
+ *
+ * Created by GUY on 2015/12/15.
+ * @class BI.BranchRelation
+ * @extends BI.Widget
+ */
+BI.BranchRelation = BI.inherit(BI.Widget, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.BranchRelation.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-branch-relation-tree",
+ items: [],
+
+ centerOffset: 0,//重心偏移量
+ direction: BI.Direction.Bottom,
+ align: BI.VerticalAlign.Top
+ })
+ },
+
+ _init: function () {
+ BI.BranchRelation.superclass._init.apply(this, arguments);
+ this.populate(this.options.items);
+ },
+
+ //树分层
+ _stratification: function () {
+ var levels = [];
+ this.tree.recursion(function (node, route) {
+ //node.isRoot = route.length <= 1;
+ node.leaf = node.isLeaf();
+ if (!levels[route.length - 1]) {
+ levels[route.length - 1] = [];
+ }
+ levels[route.length - 1].push(node);
+ });
+ return levels;
+ },
+
+ //计算所有节点的叶子结点个数
+ _calculateLeaves: function () {
+ var count = 0;
+
+ function track(node) {
+ var c = 0;
+ if (node.isLeaf()) {
+ return 1;
+ }
+ BI.each(node.getChildren(), function (i, child) {
+ c += track(child);
+ });
+ node.set("leaves", c);
+ return c;
+ }
+
+ count = track(this.tree.getRoot());
+ return count;
+ },
+
+ //树平移
+ _translate: function (levels) {
+ var adjust = [];
+ var maxLevel = levels.length;
+ BI.each(levels, function (i, nodes) {
+ if (!adjust[i]) {
+ adjust[i] = [];
+ }
+ BI.each(nodes, function (j, node) {
+ if (node.isLeaf() && i < maxLevel - 1) {
+ var newNode = new BI.Node(BI.UUID());
+ //newNode.isEmptyRoot = node.isRoot || node.isEmptyRoot;
+ newNode.isNew = true;
+ //把node向下一层移
+ var tar = 0;
+ if (j > 0) {
+ var c = nodes[j - 1].getLastChild();
+ tar = levels[i + 1].indexOf(c) + 1;
+ }
+ levels[i + 1].splice(tar, 0, node);
+ //新增一个临时树节点
+ var index = node.parent.getChildIndex(node.id);
+ node.parent.removeChildByIndex(index);
+ node.parent.addChild(newNode, index);
+ newNode.addChild(node);
+ adjust[i].push(newNode);
+ nodes[j] = newNode;
+ } else {
+ adjust[i].push(node);
+ }
+ })
+ });
+ return adjust;
+ },
+
+ //树补白
+ _fill: function (levels) {
+ var adjust = [];
+ var maxLevel = levels.length;
+ BI.each(levels, function (i, nodes) {
+ if (!adjust[i]) {
+ adjust[i] = [];
+ }
+ BI.each(nodes, function (j, node) {
+ if (node.isLeaf() && i < maxLevel - 1) {
+ var newNode = new BI.Node(BI.UUID());
+ newNode.leaf = true;
+ newNode.width = node.width;
+ newNode.height = node.height;
+ newNode.isNew = true;
+ //把node向下一层移
+ var tar = 0;
+ if (j > 0) {
+ var c = nodes[j - 1].getLastChild();
+ tar = levels[i + 1].indexOf(c) + 1;
+ }
+ levels[i + 1].splice(tar, 0, newNode);
+ //新增一个临时树节点
+ node.addChild(newNode);
+ }
+ adjust[i].push(node);
+ })
+ });
+ return adjust;
+ },
+
+ //树调整
+ _adjust: function (adjust) {
+ while (true) {
+ var isAllNeedAjust = false;
+ BI.backEach(adjust, function (i, nodes) {
+ BI.each(nodes, function (j, node) {
+ if (!node.isNew) {
+ var needAdjust = true;
+ BI.any(node.getChildren(), function (k, n) {
+ if (!n.isNew) {
+ needAdjust = false;
+ return true;
+ }
+ });
+ if (!node.isLeaf() && needAdjust === true) {
+ var allChilds = [];
+ BI.each(node.getChildren(), function (k, n) {
+ allChilds = allChilds.concat(n.getChildren());
+ });
+ node.removeAllChilds();
+ BI.each(allChilds, function (k, c) {
+ node.addChild(c);
+ });
+ var newNode = new BI.Node(BI.UUID());
+ //newNode.isEmptyRoot = node.isRoot || node.isEmptyRoot;
+ newNode.isNew = true;
+ var index = node.parent.getChildIndex(node.id);
+ node.parent.removeChildByIndex(index);
+ node.parent.addChild(newNode, index);
+ newNode.addChild(node);
+ isAllNeedAjust = true;
+ }
+ }
+ })
+ });
+ if (isAllNeedAjust === false) {
+ break;
+ } else {//树重构
+ adjust = this._stratification();
+ }
+ }
+ return adjust;
+ },
+
+ _calculateWidth: function () {
+ var o = this.options;
+ var width = 0;
+
+ function track1(node) {
+ var w = 0;
+ if (node.isLeaf()) {
+ return node.width;
+ }
+ BI.each(node.getChildren(), function (i, child) {
+ w += track1(child);
+ });
+ return w;
+ }
+
+ function track2(node) {
+ var w = 0;
+ if (node.isLeaf()) {
+ return node.height;
+ }
+ BI.each(node.getChildren(), function (i, child) {
+ w += track2(child);
+ });
+ return w;
+ }
+
+ if (this._isVertical()) {
+ width = track1(this.tree.getRoot());
+ } else {
+ width = track2(this.tree.getRoot());
+ }
+
+ return width;
+ },
+
+ _isVertical: function () {
+ var o = this.options;
+ return o.direction === BI.Direction.Top || o.direction === BI.Direction.Bottom;
+ },
+
+ _calculateHeight: function () {
+ var o = this.options;
+ var height = 0;
+
+ function track1(node) {
+ var h = 0;
+ BI.each(node.getChildren(), function (i, child) {
+ h = Math.max(h, track1(child));
+ });
+ return h + (node.height || 0);
+ }
+
+ function track2(node) {
+ var h = 0;
+ BI.each(node.getChildren(), function (i, child) {
+ h = Math.max(h, track2(child));
+ });
+ return h + (node.width || 0);
+ }
+
+ if (this._isVertical()) {
+ height = track1(this.tree.getRoot());
+ } else {
+ height = track2(this.tree.getRoot());
+ }
+ return height;
+ },
+
+ _calculateXY: function (levels) {
+ var o = this.options;
+ var width = this._calculateWidth();
+ var height = this._calculateHeight();
+ var levelCount = levels.length;
+ var allLeavesCount = this._calculateLeaves();
+ //计算坐标
+ var xy = {};
+ var levelHeight = height / levelCount;
+ BI.each(levels, function (i, nodes) {
+ //计算权重
+ var weights = [];
+ BI.each(nodes, function (j, node) {
+ weights[j] = (node.get("leaves") || 1) / allLeavesCount;
+ });
+ BI.each(nodes, function (j, node) {
+ //求前j个元素的权重
+ var weight = BI.sum(weights.slice(0, j));
+ //求坐标
+ var x = weight * width + weights[j] * width / 2;
+ var y = i * levelHeight + levelHeight / 2;
+ xy[node.id] = {x: x, y: y};
+ })
+ });
+ return xy;
+ },
+
+ _stroke: function (levels, xy) {
+ var height = this._calculateHeight();
+ var levelCount = levels.length;
+ var levelHeight = height / levelCount;
+ var self = this, o = this.options;
+ switch (o.direction) {
+ case BI.Direction.Top:
+ BI.each(levels, function (i, nodes) {
+ BI.each(nodes, function (j, node) {
+ if (node.getChildrenLength() > 0 && !node.leaf) {
+ var path = "";
+ var start = xy[node.id];
+ var split = start.y + levelHeight / 2;
+ path += "M" + start.x + "," + (start.y + o.centerOffset) + "L" + start.x + "," + split;
+ var end = [];
+ BI.each(node.getChildren(), function (t, c) {
+ var e = end[t] = xy[c.id];
+ path += "M" + e.x + "," + (e.y + o.centerOffset) + "L" + e.x + "," + split;
+ });
+ if (end.length > 0) {
+ path += "M" + BI.first(end).x + "," + split + "L" + BI.last(end).x + "," + split;
+ }
+ self.svg.path(path).attr("stroke", "#d4dadd");
+ }
+ })
+ });
+ break;
+ case BI.Direction.Bottom:
+ BI.each(levels, function (i, nodes) {
+ BI.each(nodes, function (j, node) {
+ if (node.getChildrenLength() > 0 && !node.leaf) {
+ var path = "";
+ var start = xy[node.id];
+ var split = start.y - levelHeight / 2;
+ path += "M" + start.x + "," + (start.y - o.centerOffset) + "L" + start.x + "," + split;
+ var end = [];
+ BI.each(node.getChildren(), function (t, c) {
+ var e = end[t] = xy[c.id];
+ path += "M" + e.x + "," + (e.y - o.centerOffset) + "L" + e.x + "," + split;
+ });
+ if (end.length > 0) {
+ path += "M" + BI.first(end).x + "," + split + "L" + BI.last(end).x + "," + split;
+ }
+ self.svg.path(path).attr("stroke", "#d4dadd");
+ }
+ })
+ });
+ break;
+ case BI.Direction.Left:
+ BI.each(levels, function (i, nodes) {
+ BI.each(nodes, function (j, node) {
+ if (node.getChildrenLength() > 0 && !node.leaf) {
+ var path = "";
+ var start = xy[node.id];
+ var split = start.y + levelHeight / 2;
+ path += "M" + (start.y + o.centerOffset) + "," + start.x + "L" + split + "," + start.x;
+ var end = [];
+ BI.each(node.getChildren(), function (t, c) {
+ var e = end[t] = xy[c.id];
+ path += "M" + (e.y + o.centerOffset) + "," + e.x + "L" + split + "," + e.x;
+ });
+ if (end.length > 0) {
+ path += "M" + split + "," + BI.first(end).x + "L" + split + "," + BI.last(end).x;
+ }
+ self.svg.path(path).attr("stroke", "#d4dadd");
+ }
+ })
+ });
+ break;
+ case BI.Direction.Right:
+ BI.each(levels, function (i, nodes) {
+ BI.each(nodes, function (j, node) {
+ if (node.getChildrenLength() > 0 && !node.leaf) {
+ var path = "";
+ var start = xy[node.id];
+ var split = start.y - levelHeight / 2;
+ path += "M" + (start.y - o.centerOffset) + "," + start.x + "L" + split + "," + start.x;
+ var end = [];
+ BI.each(node.getChildren(), function (t, c) {
+ var e = end[t] = xy[c.id];
+ path += "M" + (e.y - o.centerOffset) + "," + e.x + "L" + split + "," + e.x;
+ });
+ if (end.length > 0) {
+ path += "M" + split + "," + BI.first(end).x + "L" + split + "," + BI.last(end).x;
+ }
+ self.svg.path(path).attr("stroke", "#d4dadd");
+ }
+ })
+ });
+ break;
+ }
+ },
+
+ _createBranches: function (levels) {
+ var self = this, o = this.options;
+ if (o.direction === BI.Direction.Bottom || o.direction === BI.Direction.Right) {
+ levels = levels.reverse();
+ }
+ var xy = this._calculateXY(levels);
+ //画图
+ this._stroke(levels, xy);
+ },
+
+ _isNeedAdjust: function () {
+ var o = this.options;
+ return o.direction === BI.Direction.Top && o.align === BI.VerticalAlign.Bottom || o.direction === BI.Direction.Bottom && o.align === BI.VerticalAlign.Top
+ || o.direction === BI.Direction.Left && o.align === BI.HorizontalAlign.Right || o.direction === BI.Direction.Right && o.align === BI.HorizontalAlign.Left
+ },
+
+ setValue: function (value) {
+
+ },
+
+ getValue: function () {
+
+ },
+
+ _transformToTreeFormat: function (sNodes) {
+ var i, l;
+ if (!sNodes) {
+ return [];
+ }
+
+ if (BI.isArray(sNodes)) {
+ var r = [];
+ var tmpMap = [];
+ for (i = 0, l = sNodes.length; i < l; i++) {
+ tmpMap[sNodes[i].id] = sNodes[i];
+ }
+ for (i = 0, l = sNodes.length; i < l; i++) {
+ if (tmpMap[sNodes[i].pId] && sNodes[i].id != sNodes[i].pId) {
+ if (!tmpMap[sNodes[i].pId].children) {
+ tmpMap[sNodes[i].pId].children = [];
+ }
+ tmpMap[sNodes[i].pId].children.push(sNodes[i]);
+ } else {
+ r.push(sNodes[i]);
+ }
+ }
+ return r;
+ } else {
+ return [sNodes];
+ }
+ },
+
+ populate: function (items) {
+ var self = this, o = this.options;
+ o.items = items || [];
+ this.empty();
+ items = this._transformToTreeFormat(o.items);
+ this.tree = new BI.Tree();
+ this.tree.initTree(items);
+
+ this.svg = BI.createWidget({
+ type: "bi.svg"
+ });
+
+ //树分层
+ var levels = this._stratification();
+
+ if (this._isNeedAdjust()) {
+ //树平移
+ var adjust = this._translate(levels);
+ //树调整
+ adjust = this._adjust(adjust);
+
+ this._createBranches(adjust);
+ } else {
+ var adjust = this._fill(levels);
+
+ this._createBranches(adjust);
+ }
+
+ var container = BI.createWidget({
+ type: "bi.layout",
+ width: this._isVertical() ? this._calculateWidth() : this._calculateHeight(),
+ height: this._isVertical() ? this._calculateHeight() : this._calculateWidth()
+ });
+ BI.createWidget({
+ type: "bi.absolute",
+ element: container,
+ items: [{
+ el: this.svg,
+ top: 0,
+ left: 0,
+ right: 0,
+ bottom: 0
+ }]
+ });
+ if (this._isVertical()) {
+ items = [{
+ type: "bi.handstand_branch_tree",
+ expander: {
+ direction: o.direction
+ },
+ el: {
+ layouts: [{
+ type: "bi.horizontal_adapt",
+ verticalAlign: o.align
+ }]
+ },
+ items: items
+ }]
+ } else {
+ items = [{
+ type: "bi.branch_tree",
+ expander: {
+ direction: o.direction
+ },
+ el: {
+ layouts: [{
+ type: "bi.vertical"
+ }, {
+ type: o.align === BI.HorizontalAlign.Left ? "bi.left" : "bi.right"
+ }]
+ },
+ items: items
+ }]
+ }
+ BI.createWidget({
+ type: "bi.adaptive",
+ element: container,
+ items: items
+ });
+ BI.createWidget({
+ type: "bi.center_adapt",
+ scrollable: true,
+ element: this,
+ items: [container]
+ });
+ }
+});
+BI.BranchRelation.EVENT_CHANGE = "BranchRelation.EVENT_CHANGE";
+BI.shortcut("bi.branch_relation", BI.BranchRelation);/**
+ * 倒立的Branch
+ * @class BI.HandStandBranchExpander
+ * @extend BI.Widget
+ * create by young
+ */
+BI.HandStandBranchExpander = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.HandStandBranchExpander.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-handstand-branch-expander",
+ direction: BI.Direction.Top,
+ logic: {
+ dynamic: true
+ },
+ el: {type: "bi.label"},
+ popup: {}
+ })
+ },
+
+ _init: function () {
+ BI.HandStandBranchExpander.superclass._init.apply(this, arguments);
+ var o = this.options;
+ this._initExpander();
+ this._initBranchView();
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection(o.direction, {
+ type: "bi.center_adapt",
+ items: [this.expander]
+ }, this.branchView)
+ }))));
+ },
+
+ _initExpander: function () {
+ var self = this, o = this.options;
+ this.expander = BI.createWidget(o.el);
+ this.expander.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ },
+
+ _initBranchView: function () {
+ var self = this, o = this.options;
+ this.branchView = BI.createWidget(o.popup, {});
+ this.branchView.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ },
+
+ populate: function (items) {
+ this.branchView.populate.apply(this.branchView, arguments);
+ },
+
+ getValue: function () {
+ return this.branchView.getValue();
+ }
+});
+BI.HandStandBranchExpander.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.handstand_branch_expander", BI.HandStandBranchExpander);/**
+ * @class BI.BranchExpander
+ * @extend BI.Widget
+ * create by young
+ */
+BI.BranchExpander = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.BranchExpander.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-branch-expander",
+ direction: BI.Direction.Left,
+ logic: {
+ dynamic: true
+ },
+ el: {},
+ popup: {}
+ })
+ },
+
+ _init: function () {
+ BI.BranchExpander.superclass._init.apply(this, arguments);
+ var o = this.options;
+ this._initExpander();
+ this._initBranchView();
+ BI.createWidget(BI.extend({
+ element: this
+ }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, {
+ items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.expander, this.branchView)
+ }))));
+ },
+
+ _initExpander: function () {
+ var self = this, o = this.options;
+ this.expander = BI.createWidget(o.el, {
+ type: "bi.label",
+ width: 30,
+ height: "100%"
+ });
+ this.expander.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ },
+
+ _initBranchView: function () {
+ var self = this, o = this.options;
+ this.branchView = BI.createWidget(o.popup, {});
+ this.branchView.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ },
+
+ populate: function (items) {
+ this.branchView.populate.apply(this.branchView, arguments);
+ },
+
+ getValue: function () {
+ return this.branchView.getValue();
+ }
+});
+BI.BranchExpander.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.branch_expander", BI.BranchExpander);/**
+ * @class BI.HandStandBranchTree
+ * @extends BI.Widget
+ * create by young
+ * 横向分支的树
+ */
+BI.HandStandBranchTree = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.HandStandBranchTree.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-handstand-branch-tree",
+ expander: {},
+ el: {},
+ items: []
+ })
+ },
+ _init: function () {
+ BI.HandStandBranchTree.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.branchTree = BI.createWidget({
+ type: "bi.custom_tree",
+ element: this,
+ expander: BI.extend({
+ type: "bi.handstand_branch_expander",
+ el: {},
+ popup: {
+ type: "bi.custom_tree"
+ }
+ }, o.expander),
+ el: BI.extend({
+ type: "bi.button_tree",
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,
+ layouts: [{
+ type: "bi.horizontal_adapt"
+ }]
+ }, o.el),
+ items: this.options.items
+ });
+ this.branchTree.on(BI.CustomTree.EVENT_CHANGE, function(){
+ self.fireEvent(BI.HandStandBranchTree.EVENT_CHANGE, arguments);
+ });
+ this.branchTree.on(BI.Controller.EVENT_CHANGE, function(){
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ },
+
+ populate: function () {
+ this.branchTree.populate.apply(this.branchTree, arguments);
+ },
+
+ getValue: function () {
+ return this.branchTree.getValue();
+ }
+});
+BI.HandStandBranchTree.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.handstand_branch_tree", BI.HandStandBranchTree);/**
+ * @class BI.BranchTree
+ * @extends BI.Widget
+ * create by young
+ * 横向分支的树
+ */
+BI.BranchTree = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.BranchTree.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-branch-tree",
+ expander: {},
+ el: {},
+ items: []
+ })
+ },
+ _init: function () {
+ BI.BranchTree.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.branchTree = BI.createWidget({
+ type: "bi.custom_tree",
+ element: this,
+ expander: BI.extend({
+ type: "bi.branch_expander",
+ el: {},
+ popup: {
+ type: "bi.custom_tree"
+ }
+ }, o.expander),
+ el: BI.extend({
+ type: "bi.button_tree",
+ chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ }, o.el),
+ items: this.options.items
+ });
+ this.branchTree.on(BI.CustomTree.EVENT_CHANGE, function(){
+ self.fireEvent(BI.BranchTree.EVENT_CHANGE, arguments);
+ });
+ this.branchTree.on(BI.Controller.EVENT_CHANGE, function(){
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ },
+
+ populate: function () {
+ this.branchTree.populate.apply(this.branchTree, arguments);
+ },
+
+ getValue: function () {
+ return this.branchTree.getValue();
+ }
+});
+BI.BranchTree.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.branch_tree", BI.BranchTree);/**
+ * guy
+ * 异步树
+ * @class BI.DisplayTree
+ * @extends BI.TreeView
+ */
+BI.DisplayTree = BI.inherit(BI.TreeView, {
+ _defaultConfig: function () {
+ return BI.extend(BI.DisplayTree.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-display-tree"
+ })
+ },
+ _init: function () {
+ BI.DisplayTree.superclass._init.apply(this, arguments);
+ },
+
+ //配置属性
+ _configSetting: function () {
+ var setting = {
+ view: {
+ selectedMulti: false,
+ dblClickExpand: false,
+ showIcon: false,
+ showTitle: false
+ },
+ data: {
+ key: {
+ title: "title",
+ name: "text"
+ },
+ simpleData: {
+ enable: true
+ }
+ },
+ callback: {
+ beforeCollapse: beforeCollapse
+ }
+ };
+
+ function beforeCollapse(treeId, treeNode) {
+ return false;
+ }
+
+ return setting;
+ },
+
+ _dealWidthNodes: function (nodes) {
+ nodes = BI.DisplayTree.superclass._dealWidthNodes.apply(this, arguments);
+ var self = this, o = this.options;
+ BI.each(nodes, function (i, node) {
+ if (node.text == null) {
+ if (node.count > 0) {
+ node.text = node.value + "(" + BI.i18nText("BI-Basic_Altogether") + node.count + BI.i18nText("BI-Basic_Count") + ")";
+ }
+ }
+ });
+ return nodes;
+ },
+
+ initTree: function (nodes, setting) {
+ var setting = setting || this._configSetting();
+ this.nodes = $.fn.zTree.init(this.tree.element, setting, nodes);
+ },
+
+ destroy: function () {
+ BI.DisplayTree.superclass.destroy.apply(this, arguments);
+ }
+});
+BI.DisplayTree.EVENT_CHANGE = "EVENT_CHANGE";
+
+BI.shortcut("bi.display_tree", BI.DisplayTree);/**
+ * guy
+ * 二级树
+ * @class BI.LevelTree
+ * @extends BI.Single
+ */
+BI.LevelTree = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.LevelTree.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-level-tree",
+ el: {
+ chooseType: 0
+ },
+ expander: {},
+ items: []
+ })
+ },
+
+ _init: function () {
+ BI.LevelTree.superclass._init.apply(this, arguments);
+
+ this.initTree(this.options.items);
+ },
+
+ _formatItems: function (nodes, layer) {
+ var self = this;
+ BI.each(nodes, function (i, node) {
+ var extend = {layer: layer};
+ if (!BI.isKey(node.id)) {
+ node.id = BI.UUID();
+ }
+ if (node.isParent === true || BI.isNotEmptyArray(node.children)) {
+ switch (i) {
+ case 0 :
+ extend.type = "bi.first_plus_group_node";
+ break;
+ case nodes.length - 1 :
+ extend.type = "bi.last_plus_group_node";
+ break;
+ default :
+ extend.type = "bi.mid_plus_group_node";
+ break;
+ }
+ BI.defaults(node, extend);
+ self._formatItems(node.children, layer + 1);
+ } else {
+ switch (i) {
+ case nodes.length - 1:
+ extend.type = "bi.last_tree_leaf_item";
+ break;
+ default :
+ extend.type = "bi.mid_tree_leaf_item";
+ }
+ BI.defaults(node, extend);
+ }
+ });
+ return nodes;
+ },
+
+ _assertId: function (sNodes) {
+ BI.each(sNodes, function (i, node) {
+ if (!BI.isKey(node.id)) {
+ node.id = BI.UUID();
+ }
+ });
+ },
+
+ //构造树结构,
+ initTree: function (nodes) {
+ var self = this, o = this.options;
+ this.empty();
+ this._assertId(nodes);
+ this.tree = BI.createWidget({
+ type: "bi.custom_tree",
+ element: this,
+ expander: BI.extend({
+ el: {},
+ popup: {
+ type: "bi.custom_tree"
+ }
+ }, o.expander),
+
+ items: this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0),
+
+ el: BI.extend({
+ type: "bi.button_tree",
+ chooseType: 0,
+ layouts: [{
+ type: "bi.vertical"
+ }]
+ }, o.el)
+ });
+ this.tree.on(BI.Controller.EVENT_CHANGE, function (type) {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ if (type === BI.Events.CLICK) {
+ self.fireEvent(BI.LevelTree.EVENT_CHANGE, arguments);
+ }
+ })
+ },
+
+ //生成树方法
+ stroke: function (nodes) {
+ this.tree.stroke.apply(this.tree, arguments);
+ },
+
+ populate: function (items) {
+ items = this._formatItems(BI.Tree.transformToTreeFormat(items), 0);
+ this.tree.populate(items);
+ },
+
+ setValue: function (v) {
+ this.tree.setValue(v);
+ },
+
+ getValue: function () {
+ return this.tree.getValue();
+ },
+
+ getAllLeaves: function () {
+ return this.tree.getAllLeaves();
+ },
+
+ getNodeById: function (id) {
+ return this.tree.getNodeById(id);
+ },
+
+ getNodeByValue: function (id) {
+ return this.tree.getNodeByValue(id);
+ }
+});
+BI.LevelTree.EVENT_CHANGE = "EVENT_CHANGE";
+
+BI.shortcut("bi.level_tree", BI.LevelTree);/**
+ * 简单的多选树
+ *
+ * Created by GUY on 2016/2/16.
+ * @class BI.SimpleTreeView
+ * @extends BI.Widget
+ */
+BI.SimpleTreeView = BI.inherit(BI.Widget, {
+ _defaultConfig: function () {
+ return BI.extend(BI.SimpleTreeView.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-simple-tree",
+ itemsCreator: BI.emptyFn,
+ items: null
+ })
+ },
+ _init: function () {
+ BI.SimpleTreeView.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.structure = new BI.Tree();
+ this.tree = BI.createWidget({
+ type: "bi.tree_view",
+ element: this,
+ itemsCreator: function (op, callback) {
+ var fn = function (items) {
+ callback({
+ items: items
+ });
+ self.structure.initTree(BI.Tree.transformToTreeFormat(items));
+ };
+ if (BI.isNotNull(o.items)) {
+ fn(o.items);
+ } else {
+ o.itemsCreator(op, fn);
+ }
+ }
+ });
+ this.tree.on(BI.TreeView.EVENT_CHANGE, function () {
+ self.fireEvent(BI.SimpleTreeView.EVENT_CHANGE, arguments);
+ });
+ if (BI.isNotEmptyArray(o.items)) {
+ this.populate();
+ }
+ },
+
+ populate: function (items, keyword) {
+ if (items) {
+ this.options.items = items;
+ }
+ this.tree.stroke({
+ keyword: keyword
+ });
+ },
+
+ setValue: function (v) {
+ v || (v = []);
+ var self = this, map = {};
+ var selected = [];
+ BI.each(v, function (i, val) {
+ var node = self.structure.search(val, "value");
+ if (node) {
+ var p = node;
+ p = p.getParent();
+ if (p) {
+ if (!map[p.value]) {
+ map[p.value] = 0;
+ }
+ map[p.value]++;
+ }
+
+ while (p && p.getChildrenLength() <= map[p.value]) {
+ selected.push(p.value);
+ p = p.getParent();
+ if (p) {
+ if (!map[p.value]) {
+ map[p.value] = 0;
+ }
+ map[p.value]++;
+ }
+ }
+ }
+ });
+
+ this.tree.setValue(BI.makeObject(v.concat(selected)));
+ },
+
+ _getValue: function () {
+ var self = this, result = [], val = this.tree.getValue();
+ var track = function (nodes) {
+ BI.each(nodes, function (key, node) {
+ if (BI.isEmpty(node)) {
+ result.push(key);
+ } else {
+ track(node);
+ }
+ })
+ };
+ track(val);
+ return result;
+ },
+
+ empty: function () {
+ this.tree.empty();
+ },
+
+ getValue: function () {
+ var self = this, result = [], val = this._getValue();
+ BI.each(val, function (i, key) {
+ var target = self.structure.search(key, "value");
+ if (target) {
+ self.structure._traverse(target, function (node) {
+ if (node.isLeaf()) {
+ result.push(node.value);
+ }
+ })
+ }
+ });
+ return result;
+ }
+});
+BI.SimpleTreeView.EVENT_CHANGE = "EVENT_CHANGE";
+BI.shortcut("bi.simple_tree", BI.SimpleTreeView);
+/**
+ * 文本输入框trigger
+ *
+ * Created by GUY on 2015/9/15.
+ * @class BI.EditorTrigger
+ * @extends BI.Trigger
+ */
+BI.EditorTrigger = BI.inherit(BI.Trigger, {
+ _const: {
+ hgap: 4
+ },
+
+ _defaultConfig: function () {
+ var conf = BI.EditorTrigger.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-editor-trigger bi-border",
+ height: 24,
+ validationChecker: BI.emptyFn,
+ quitChecker: BI.emptyFn,
+ allowBlank: false,
+ watermark: "",
+ errorText: ""
+ });
+ },
+
+ _init: function () {
+ this.options.height -= 2;
+ BI.EditorTrigger.superclass._init.apply(this, arguments);
+ var self = this, o = this.options, c = this._const;
+ this.editor = BI.createWidget({
+ type: "bi.sign_editor",
+ height: o.height,
+ value: o.value,
+ validationChecker: o.validationChecker,
+ quitChecker: o.quitChecker,
+ allowBlank: o.allowBlank,
+ watermark: o.watermark,
+ errorText: o.errorText
+ });
+ this.editor.on(BI.Controller.EVENT_CHANGE, function () {
+ self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);
+ });
+ this.editor.on(BI.SignEditor.EVENT_CHANGE, function () {
+ self.fireEvent(BI.EditorTrigger.EVENT_CHANGE, arguments);
+ });
+
+ BI.createWidget({
+ element: this,
+ type: 'bi.htape',
+ items: [
+ {
+ el: this.editor
+ }, {
+ el: {
+ type: "bi.trigger_icon_button",
+ cls: "bi-border-left",
+ width: o.triggerWidth || o.height
+ },
+ width: o.triggerWidth || o.height
+ }
+ ]
+ });
+ },
+
+ getValue: function () {
+ return this.editor.getValue();
+ },
+
+ setValue: function (value) {
+ this.editor.setValue(value);
+ },
+
+ setText: function (text) {
+ this.editor.setState(text);
+ }
+});
+BI.EditorTrigger.EVENT_CHANGE = "BI.EditorTrigger.EVENT_CHANGE";
+BI.shortcut("bi.editor_trigger", BI.EditorTrigger);/**
+ * 图标按钮trigger
+ *
+ * Created by GUY on 2015/10/8.
+ * @class BI.IconTrigger
+ * @extends BI.Trigger
+ */
+BI.IconTrigger = BI.inherit(BI.Trigger, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.IconTrigger.superclass._defaultConfig.apply(this, arguments), {
+ extraCls: "bi-icon-trigger",
+ el: {},
+ height: 24
+ });
+ },
+ _init: function () {
+ var o = this.options;
+ BI.IconTrigger.superclass._init.apply(this, arguments);
+ this.iconButton = BI.createWidget(o.el, {
+ type: "bi.trigger_icon_button",
+ element: this,
+ width: o.width,
+ height: o.height
+ });
+ }
+});
+BI.shortcut('bi.icon_trigger', BI.IconTrigger);/**
+ * 文字trigger
+ *
+ * Created by GUY on 2015/9/15.
+ * @class BI.IconTextTrigger
+ * @extends BI.Trigger
+ */
+BI.IconTextTrigger = BI.inherit(BI.Trigger, {
+ _const: {
+ hgap: 4
+ },
+
+ _defaultConfig: function () {
+ var conf = BI.IconTextTrigger.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-text-trigger",
+ height: 24
+ });
+ },
+
+ _init: function () {
+ BI.IconTextTrigger.superclass._init.apply(this, arguments);
+ var self = this, o = this.options, c = this._const;
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ height: o.height,
+ text: o.text,
+ hgap: c.hgap
+ });
+ this.trigerButton = BI.createWidget({
+ type: "bi.trigger_icon_button",
+ cls: "bi-border-left",
+ width: o.triggerWidth || o.height
+ });
+
+ BI.createWidget({
+ element: this,
+ type: 'bi.htape',
+ ref: function (_ref) {
+ self.wrapper = _ref;
+ },
+ items: [{
+ el: {
+ type: "bi.icon_change_button",
+ cls: "icon-combo-trigger-icon " + o.iconClass,
+ ref: function (_ref) {
+ self.icon = _ref;
+ },
+ disableSelected: true
+ },
+ width: o.triggerWidth || o.height
+ },
+ {
+ el: this.text
+ }, {
+ el: this.trigerButton,
+ width: o.triggerWidth || o.height
+ }
+ ]
+ });
+ },
+
+ setValue: function (value) {
+ this.text.setValue(value);
+ this.text.setTitle(value);
+ },
+
+ setIcon: function (iconCls) {
+ var o = this.options;
+ this.icon.setIcon(iconCls);
+ var iconItem = this.wrapper.attr("items")[0];
+ if(BI.isNull(iconCls) || BI.isEmptyString(iconCls)){
+ if(iconItem.width !== 0){
+ iconItem.width = 0;
+ this.wrapper.resize();
+ }
+ }else{
+ if(iconItem.width !== (o.triggerWidth || o.height)){
+ iconItem.width = (o.triggerWidth || o.height);
+ this.wrapper.resize();
+ }
+ }
+ },
+
+ setText: function (text) {
+ this.text.setText(text);
+ this.text.setTitle(text);
+ }
+});
+BI.shortcut("bi.icon_text_trigger", BI.IconTextTrigger);/**
+ * Created by Windy on 2017/12/12.
+ */
+BI.SelectIconTextTrigger = BI.inherit(BI.Trigger, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.SelectIconTextTrigger.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-select-text-trigger bi-border",
+ height: 24
+ });
+ },
+
+ _init: function () {
+ this.options.height -= 2;
+ BI.SelectIconTextTrigger.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.icon_text_trigger",
+ element: this,
+ height: o.height
+ });
+ if (BI.isKey(o.text)) {
+ this.setValue(o.text);
+ }
+ },
+
+ setValue: function (vals) {
+ var o = this.options;
+ vals = BI.isArray(vals) ? vals : [vals];
+ var result;
+ var items = BI.Tree.transformToArrayFormat(this.options.items);
+ BI.any(items, function (i, item) {
+ if (BI.deepContains(vals, item.value)) {
+ result = {
+ text: item.text || item.value,
+ iconClass: item.iconClass
+ };
+ return true;
+ }
+ });
+
+ if (BI.isNotNull(result)) {
+ this.trigger.setText(result.text);
+ this.trigger.setIcon(result.iconClass);
+ } else {
+ this.trigger.setText(o.text);
+ this.trigger.setIcon("");
+ }
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ }
+});
+BI.shortcut("bi.select_icon_text_trigger", BI.SelectIconTextTrigger);/**
+ * 文字trigger
+ *
+ * Created by GUY on 2015/9/15.
+ * @class BI.TextTrigger
+ * @extends BI.Trigger
+ */
+BI.TextTrigger = BI.inherit(BI.Trigger, {
+ _const: {
+ hgap: 4
+ },
+
+ _defaultConfig: function () {
+ var conf = BI.TextTrigger.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-text-trigger",
+ height: 24
+ });
+ },
+
+ _init: function () {
+ BI.TextTrigger.superclass._init.apply(this, arguments);
+ var self = this, o = this.options, c = this._const;
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ height: o.height,
+ text: o.text,
+ hgap: c.hgap,
+ readonly: o.readonly
+ });
+ this.trigerButton = BI.createWidget({
+ type: "bi.trigger_icon_button",
+ cls: "bi-border-left",
+ width: o.triggerWidth || o.height
+ });
+
+ BI.createWidget({
+ element: this,
+ type: 'bi.htape',
+ items: [
+ {
+ el: this.text
+ }, {
+ el: this.trigerButton,
+ width: o.triggerWidth || o.height
+ }
+ ]
+ });
+ },
+
+ setValue: function (value) {
+ this.text.setValue(value);
+ this.text.setTitle(value);
+ },
+
+ setText: function (text) {
+ this.text.setText(text);
+ this.text.setTitle(text);
+ }
+});
+BI.shortcut("bi.text_trigger", BI.TextTrigger);/**
+ * 选择字段trigger
+ *
+ * Created by GUY on 2015/9/15.
+ * @class BI.SelectTextTrigger
+ * @extends BI.Trigger
+ */
+BI.SelectTextTrigger = BI.inherit(BI.Trigger, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.SelectTextTrigger.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-select-text-trigger bi-border",
+ height: 24
+ });
+ },
+
+ _init: function () {
+ this.options.height -= 2;
+ BI.SelectTextTrigger.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.text_trigger",
+ element: this,
+ height: o.height
+ });
+ if (BI.isKey(o.text)) {
+ this.setValue(o.text);
+ }
+ },
+
+ setValue: function (vals) {
+ var o = this.options;
+ vals = BI.isArray(vals) ? vals : [vals];
+ var result = [];
+ var items = BI.Tree.transformToArrayFormat(this.options.items);
+ BI.each(items, function (i, item) {
+ if (BI.deepContains(vals, item.value) && !result.contains(item.text || item.value)) {
+ result.push(item.text || item.value);
+ }
+ });
+
+ if (result.length > 0) {
+ this.trigger.setText(result.join(","));
+ } else {
+ this.trigger.setText(o.text);
+ }
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ }
+});
+BI.shortcut("bi.select_text_trigger", BI.SelectTextTrigger);/**
+ * 选择字段trigger小一号的
+ *
+ * @class BI.SmallSelectTextTrigger
+ * @extends BI.Trigger
+ */
+BI.SmallSelectTextTrigger = BI.inherit(BI.Trigger, {
+
+ _defaultConfig: function () {
+ return BI.extend(BI.SmallSelectTextTrigger.superclass._defaultConfig.apply(this, arguments), {
+ baseCls: "bi-small-select-text-trigger bi-border",
+ height: 20
+ });
+ },
+
+ _init: function () {
+ this.options.height -= 2;
+ BI.SmallSelectTextTrigger.superclass._init.apply(this, arguments);
+ var self = this, o = this.options;
+ this.trigger = BI.createWidget({
+ type: "bi.small_text_trigger",
+ element: this,
+ height: o.height - 2
+ });
+ if (BI.isKey(o.text)) {
+ this.setValue(o.text);
+ }
+ },
+
+ setValue: function (vals) {
+ var o = this.options;
+ vals = BI.isArray(vals) ? vals : [vals];
+ var result = [];
+ var items = BI.Tree.transformToArrayFormat(this.options.items);
+ BI.each(items, function (i, item) {
+ if (BI.deepContains(vals, item.value) && !result.contains(item.text || item.value)) {
+ result.push(item.text || item.value);
+ }
+ });
+
+ if (result.length > 0) {
+ this.trigger.element.removeClass("bi-water-mark");
+ this.trigger.setText(result.join(","));
+ } else {
+ this.trigger.element.addClass("bi-water-mark");
+ this.trigger.setText(o.text);
+ }
+ },
+
+ populate: function (items) {
+ this.options.items = items;
+ }
+});
+BI.shortcut("bi.small_select_text_trigger", BI.SmallSelectTextTrigger);/**
+ * 文字trigger(右边小三角小一号的) ==
+ *
+ * @class BI.SmallTextTrigger
+ * @extends BI.Trigger
+ */
+BI.SmallTextTrigger = BI.inherit(BI.Trigger, {
+ _const: {
+ hgap: 4
+ },
+
+ _defaultConfig: function () {
+ var conf = BI.SmallTextTrigger.superclass._defaultConfig.apply(this, arguments);
+ return BI.extend(conf, {
+ baseCls: (conf.baseCls || "") + " bi-text-trigger",
+ height: 20
+ });
+ },
+
+ _init: function () {
+ BI.SmallTextTrigger.superclass._init.apply(this, arguments);
+ var self = this, o = this.options, c = this._const;
+ this.text = BI.createWidget({
+ type: "bi.label",
+ textAlign: "left",
+ height: o.height,
+ text: o.text,
+ hgap: c.hgap
+ });
+ this.trigerButton = BI.createWidget({
+ type: "bi.trigger_icon_button",
+ width: o.triggerWidth || o.height
+ });
+
+ BI.createWidget({
+ element: this,
+ type: 'bi.htape',
+ items: [
+ {
+ el: this.text
+ }, {
+ el: this.trigerButton,
+ width: o.triggerWidth || o.height
+ }
+ ]
+ });
+ },
+
+ setValue: function (value) {
+ this.text.setValue(value);
+ },
+
+ setText: function (text) {
+ this.text.setText(text);
+ }
+});
+BI.shortcut("bi.small_text_trigger", BI.SmallTextTrigger);
\ No newline at end of file
diff --git a/bi/core.css b/bi/core.css
index a71aa9d25..74c501225 100644
--- a/bi/core.css
+++ b/bi/core.css
@@ -322,7 +322,7 @@ i {
clear: both;
}
.bi-background {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #3d4d66;
}
.bi-background .bi-input {
diff --git a/bi/widget.css b/bi/widget.css
index f8bd06dc9..9327bdb4b 100644
--- a/bi/widget.css
+++ b/bi/widget.css
@@ -61,7 +61,7 @@
max-width: 200px;
}
.bi-file-manager-nav-button .file-manager-nav-button-text.active {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #999999;
}
.bi-file-manager-nav-button .file-manager-nav-button-triangle {
@@ -221,7 +221,7 @@
}
.bi-preview-table > div > table > thead > tr.odd,
.bi-preview-table > div > div > div > table > thead > tr.odd {
- background-color: #eff1f4;
+ background-color: #fafbfc;
}
.bi-theme-dark .bi-preview-table > div > table > thead > tr.odd,
.bi-theme-dark .bi-preview-table > div > div > div > table > thead > tr.odd {
diff --git a/demo/css/main.css b/demo/css/main.css
index c1f015137..09095033e 100644
--- a/demo/css/main.css
+++ b/demo/css/main.css
@@ -40,7 +40,7 @@
background-color: #178cdf;
}
body {
- background-color: #eff1f4;
+ background-color: #fafbfc;
}
.bi-theme-dark body {
background-color: #191B2B;
diff --git a/dist/bundle.css b/dist/bundle.css
index 8f1ec7c21..54cf71a6c 100644
--- a/dist/bundle.css
+++ b/dist/bundle.css
@@ -322,7 +322,7 @@ i {
clear: both;
}
.bi-background {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #3d4d66;
}
.bi-background .bi-input {
@@ -3267,7 +3267,7 @@ ul.ztree.zTreeDragUL {
max-width: 200px;
}
.bi-file-manager-nav-button .file-manager-nav-button-text.active {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #999999;
}
.bi-file-manager-nav-button .file-manager-nav-button-triangle {
@@ -3427,7 +3427,7 @@ ul.ztree.zTreeDragUL {
}
.bi-preview-table > div > table > thead > tr.odd,
.bi-preview-table > div > div > div > table > thead > tr.odd {
- background-color: #eff1f4;
+ background-color: #fafbfc;
}
.bi-theme-dark .bi-preview-table > div > table > thead > tr.odd,
.bi-theme-dark .bi-preview-table > div > div > div > table > thead > tr.odd {
diff --git a/dist/bundle.js b/dist/bundle.js
index 73732e14b..0aee53576 100644
--- a/dist/bundle.js
+++ b/dist/bundle.js
@@ -64135,9 +64135,9 @@ BI.ArrowTreeGroupNodeCheckbox = BI.inherit(BI.IconButton, {
setSelected: function (v) {
BI.ArrowTreeGroupNodeCheckbox.superclass.setSelected.apply(this, arguments);
if(v) {
- this.element.removeClass("column-next-page-h-font").addClass("column-pre-page-h-font");
+ this.element.removeClass("pull-down-font").addClass("pull-right-font");
} else {
- this.element.removeClass("column-pre-page-h-font").addClass("column-next-page-h-font");
+ this.element.removeClass("pull-right-font").addClass("pull-down-font");
}
}
});
diff --git a/dist/case.js b/dist/case.js
index 92f73d3b0..d859eeb37 100644
--- a/dist/case.js
+++ b/dist/case.js
@@ -2058,9 +2058,9 @@ BI.ArrowTreeGroupNodeCheckbox = BI.inherit(BI.IconButton, {
setSelected: function (v) {
BI.ArrowTreeGroupNodeCheckbox.superclass.setSelected.apply(this, arguments);
if(v) {
- this.element.removeClass("column-next-page-h-font").addClass("column-pre-page-h-font");
+ this.element.removeClass("pull-down-font").addClass("pull-right-font");
} else {
- this.element.removeClass("column-pre-page-h-font").addClass("column-next-page-h-font");
+ this.element.removeClass("pull-right-font").addClass("pull-down-font");
}
}
});
diff --git a/dist/core.css b/dist/core.css
index 60f98c14c..be7b2155b 100644
--- a/dist/core.css
+++ b/dist/core.css
@@ -322,7 +322,7 @@ i {
clear: both;
}
.bi-background {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #3d4d66;
}
.bi-background .bi-input {
diff --git a/dist/core_without_normalize.css b/dist/core_without_normalize.css
index ef58d840a..f3cbb564a 100644
--- a/dist/core_without_normalize.css
+++ b/dist/core_without_normalize.css
@@ -39,7 +39,7 @@
clear: both;
}
.bi-background {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #3d4d66;
}
.bi-background .bi-input {
diff --git a/dist/demo.css b/dist/demo.css
index 9c9a8ff7a..42d2ecbb6 100644
--- a/dist/demo.css
+++ b/dist/demo.css
@@ -43,7 +43,7 @@
background-color: #178cdf;
}
body {
- background-color: #eff1f4;
+ background-color: #fafbfc;
}
.bi-theme-dark body {
background-color: #191B2B;
diff --git a/dist/resource.css b/dist/resource.css
index 0c3640288..f440319e8 100644
--- a/dist/resource.css
+++ b/dist/resource.css
@@ -951,19 +951,19 @@ textarea::-webkit-scrollbar-thumb:hover {
color: #ffffff;
}
.primary-key-font .b-font {
- *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ';');
+ *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
}
.primary-key-font .b-font:before {
- content: "\e67d;";
+ content: "\e67d";
color: inherit;
}
.primary-key-font:hover .b-font:before,
.primary-key-font.hover .b-font:before {
- content: "\e67d;";
+ content: "\e67d";
color: inherit;
}
.primary-key-font.disabled .b-font:before {
- content: "\e67d;";
+ content: "\e67d";
color: inherit;
}
.drag-tag-font .b-font {
diff --git a/dist/widget.css b/dist/widget.css
index f8bd06dc9..9327bdb4b 100644
--- a/dist/widget.css
+++ b/dist/widget.css
@@ -61,7 +61,7 @@
max-width: 200px;
}
.bi-file-manager-nav-button .file-manager-nav-button-text.active {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #999999;
}
.bi-file-manager-nav-button .file-manager-nav-button-triangle {
@@ -221,7 +221,7 @@
}
.bi-preview-table > div > table > thead > tr.odd,
.bi-preview-table > div > div > div > table > thead > tr.odd {
- background-color: #eff1f4;
+ background-color: #fafbfc;
}
.bi-theme-dark .bi-preview-table > div > table > thead > tr.odd,
.bi-theme-dark .bi-preview-table > div > div > div > table > thead > tr.odd {
diff --git a/src/case/checkbox/check.arrowtreegroupnode.js b/src/case/checkbox/check.arrowtreegroupnode.js
index 2c884f84e..d269a450d 100644
--- a/src/case/checkbox/check.arrowtreegroupnode.js
+++ b/src/case/checkbox/check.arrowtreegroupnode.js
@@ -16,9 +16,9 @@ BI.ArrowTreeGroupNodeCheckbox = BI.inherit(BI.IconButton, {
setSelected: function (v) {
BI.ArrowTreeGroupNodeCheckbox.superclass.setSelected.apply(this, arguments);
if(v) {
- this.element.removeClass("column-next-page-h-font").addClass("column-pre-page-h-font");
+ this.element.removeClass("pull-down-font").addClass("pull-right-font");
} else {
- this.element.removeClass("column-pre-page-h-font").addClass("column-next-page-h-font");
+ this.element.removeClass("pull-right-font").addClass("pull-down-font");
}
}
});
diff --git a/src/css/core/utils/common.css b/src/css/core/utils/common.css
index 6296df9a3..0f743d708 100644
--- a/src/css/core/utils/common.css
+++ b/src/css/core/utils/common.css
@@ -39,7 +39,7 @@
clear: both;
}
.bi-background {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #3d4d66;
}
.bi-background .bi-input {
diff --git a/src/css/resource/font.css b/src/css/resource/font.css
index 984c8eace..055c94025 100644
--- a/src/css/resource/font.css
+++ b/src/css/resource/font.css
@@ -622,19 +622,19 @@
color: #ffffff;
}
.primary-key-font .b-font {
- *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = ';');
+ *zoom: expression( this.runtimeStyle['zoom'] = '1',this.innerHTML = '');
}
.primary-key-font .b-font:before {
- content: "\e67d;";
+ content: "\e67d";
color: inherit;
}
.primary-key-font:hover .b-font:before,
.primary-key-font.hover .b-font:before {
- content: "\e67d;";
+ content: "\e67d";
color: inherit;
}
.primary-key-font.disabled .b-font:before {
- content: "\e67d;";
+ content: "\e67d";
color: inherit;
}
.drag-tag-font .b-font {
diff --git a/src/css/widget/filemanager/nav/button/button.nav.filemanager.css b/src/css/widget/filemanager/nav/button/button.nav.filemanager.css
index 973b3c1c1..95eb8e2df 100644
--- a/src/css/widget/filemanager/nav/button/button.nav.filemanager.css
+++ b/src/css/widget/filemanager/nav/button/button.nav.filemanager.css
@@ -2,7 +2,7 @@
max-width: 200px;
}
.bi-file-manager-nav-button .file-manager-nav-button-text.active {
- background-color: #eff1f4;
+ background-color: #fafbfc;
color: #999999;
}
.bi-file-manager-nav-button .file-manager-nav-button-triangle {
diff --git a/src/css/widget/previewtable/previewtable.css b/src/css/widget/previewtable/previewtable.css
index 2fc0f57be..679dff637 100644
--- a/src/css/widget/previewtable/previewtable.css
+++ b/src/css/widget/previewtable/previewtable.css
@@ -8,7 +8,7 @@
}
.bi-preview-table > div > table > thead > tr.odd,
.bi-preview-table > div > div > div > table > thead > tr.odd {
- background-color: #eff1f4;
+ background-color: #fafbfc;
}
.bi-theme-dark .bi-preview-table > div > table > thead > tr.odd,
.bi-theme-dark .bi-preview-table > div > div > div > table > thead > tr.odd {
diff --git a/src/less/lib/constant.less b/src/less/lib/constant.less
index 7e1db7bfe..58584bfd5 100644
--- a/src/less/lib/constant.less
+++ b/src/less/lib/constant.less
@@ -33,7 +33,7 @@
@background-color-black: #1a1a1a;//
@background-color-default: #ffffff;//
@background-color-default-theme-dark: #242640;//
-@background-color-normal: #eff1f4;//
+@background-color-normal: #fafbfc;//
@background-color-normal-theme-dark: #191B2B;//
@background-color-highlight: #3f8ce8;
@background-color-dark: #d4dadd;
diff --git a/src/less/lib/font.less b/src/less/lib/font.less
index 0aaf28f15..1765e535b 100644
--- a/src/less/lib/font.less
+++ b/src/less/lib/font.less
@@ -116,7 +116,7 @@
@font-excel-table: "e682";
@font-etl-table: "e680";
@font-sql-table: "e681";
-@font-key: "e67d;";
+@font-key: "e67d";
@font-refresh: "e683";
@font-tile-view: "e685";