Browse Source

Merge pull request #50 in FUI/fineui from ~GUY/fineui:master to master

* commit '007613a6430f1059d46b5d1fa01dc0d95a920985': (27 commits)
  复制到粘贴板IE8兼容
  add
  复制到粘贴板改用clipboard
  add
  add
  add
  class写错了
  listview
  add
  floatOpened
  virtuallist
  add
  精度
  update
  _setValid
  add
  add
  add
  add
  update
  ...
es6
guy 8 years ago
parent
commit
b0bc0f3efc
  1. 14
      bi/base.css
  2. 360
      bi/base.js
  3. 14831
      bi/case.js
  4. 84
      bi/core.js
  5. 472
      bi/widget.js
  6. 5
      demo/config.js
  7. 8
      demo/js/case/demo.clipboard.js
  8. 40
      demo/js/component/demo.treevaluechooser.js
  9. 23
      demo/js/component/demo.treevaluechoosercombo.js
  10. 16
      demo/js/component/demo.treevaluechooserpane.js
  11. 0
      demo/js/component/demo.valuechoosercombo.js
  12. 15
      demo/js/component/demo.valuechooserpane.js
  13. 4
      demo/js/config/case.js
  14. 10
      demo/js/config/component.js
  15. 8
      demo/js/config/core.js
  16. 2
      demo/js/core/abstract/demo.collection_view.js
  17. 4
      demo/js/core/abstract/demo.grid_view.js
  18. 22
      demo/js/core/abstract/demo.list_view.js
  19. 18
      demo/js/core/abstract/demo.virtual_list.js
  20. 4
      demo/version.js
  21. 14
      docs/base.css
  22. 360
      docs/base.js
  23. 14831
      docs/case.js
  24. 84
      docs/core.js
  25. 214
      docs/demo.js
  26. 472
      docs/widget.js
  27. 4
      src/base/collection/collection.js
  28. 0
      src/base/foundation/message.js
  29. 12
      src/base/grid/grid.js
  30. 2
      src/base/layer/layer.popup.js
  31. 110
      src/base/list/listview.js
  32. 179
      src/base/list/virtuallist.js
  33. 13
      src/base/single/button/button.basic.js
  34. 5
      src/base/single/editor/editor.js
  35. 8
      src/base/single/editor/editor.textarea.js
  36. 4
      src/base/single/input/input.js
  37. 2
      src/base/tree/asynctree.js
  38. 2
      src/base/tree/parttree.js
  39. 19
      src/base/tree/treeview.js
  40. 1319
      src/case/clipboard/clipboard.js
  41. 46
      src/case/clipboard/index.js
  42. 4
      src/case/editor/editor.search.js
  43. 5
      src/case/editor/editor.sign.js
  44. 14
      src/case/toolbar/toolbar.multiselect.js
  45. 495
      src/case/zclip/jquery.zclip.js
  46. 31
      src/case/zclip/zclip.js
  47. 79
      src/component/allvaluechooser/abstract.allvaluechooser.js
  48. 62
      src/component/allvaluechooser/combo.allvaluechooser.js
  49. 62
      src/component/allvaluechooser/pane.allvaluechooser.js
  50. 548
      src/component/treevaluechooser/abstract.treevaluechooser.js
  51. 550
      src/component/treevaluechooser/combo.treevaluechooser.js
  52. 49
      src/component/treevaluechooser/pane.treevaluechooser.js
  53. 89
      src/component/valuechooser/abstract.valuechooser.js
  54. 72
      src/component/valuechooser/combo.valuechooser.js
  55. 56
      src/component/valuechooser/pane.valuechooser.js
  56. 8
      src/core/base.js
  57. 3
      src/core/controller/controller.floatbox.js
  58. 2
      src/core/controller/controller.layer.js
  59. 7
      src/core/proto/jquery.js
  60. 2
      src/core/proto/number.js
  61. 2
      src/core/utils/prefixIntervalTree.js
  62. 49
      src/core/utils/tree.js
  63. 11
      src/core/widget.js
  64. 14
      src/css/base/view/popupview.css
  65. 4
      src/less/base/view/popupview.less
  66. 13
      src/widget/multiselectlist/multiselectlist.js
  67. 16
      src/widget/multiselecttree/multiselecttree.js
  68. 6
      src/widget/multiselecttree/multiselecttree.popup.js
  69. 4
      src/widget/sequencetable/treenumber.sequencetable.js

14
bi/base.css

@ -1342,30 +1342,30 @@ li.CodeMirror-hint-active {
/****** common color(常用颜色,可用于普遍场景) *****/ /****** common color(常用颜色,可用于普遍场景) *****/
/**** custom color(自定义颜色,用于特定场景) ****/ /**** custom color(自定义颜色,用于特定场景) ****/
/**********BI.BIListView*************/ /**********BI.BIListView*************/
.bi-list-view { .bi-popup-view {
position: fixed !important; position: fixed !important;
overflow-y: visible !important; overflow-y: visible !important;
overflow-x: visible !important; overflow-x: visible !important;
overflow: visible !important; overflow: visible !important;
cursor: default; cursor: default;
} }
.bi-list-view .list-view-outer { .bi-popup-view .list-view-outer {
-webkit-border-radius: 2px; -webkit-border-radius: 2px;
-moz-border-radius: 2px; -moz-border-radius: 2px;
border-radius: 2px; border-radius: 2px;
} }
.bi-list-view .list-view-toolbar { .bi-popup-view .list-view-toolbar {
line-height: 30px; line-height: 30px;
} }
.bi-list-view .list-view-toolbar > .center-element { .bi-popup-view .list-view-toolbar > .center-element {
border-left: 1px solid #d4dadd; border-left: 1px solid #d4dadd;
} }
.bi-list-view .list-view-toolbar > .first-element { .bi-popup-view .list-view-toolbar > .first-element {
border-left: none; border-left: none;
} }
.bi-theme-dark .bi-list-view .list-view-toolbar > .center-element { .bi-theme-dark .bi-popup-view .list-view-toolbar > .center-element {
border-left: 1px solid #525466; border-left: 1px solid #525466;
} }
.bi-theme-dark .bi-list-view .list-view-toolbar > .first-element { .bi-theme-dark .bi-popup-view .list-view-toolbar > .first-element {
border-left: none; border-left: none;
} }

360
bi/base.js

@ -797,7 +797,7 @@ BI.BasicButton = BI.inherit(BI.Single, {
if (!self.isEnabled() || (self.isOnce() && self.isSelected())) { if (!self.isEnabled() || (self.isOnce() && self.isSelected())) {
return; return;
} }
onClick.apply(self); onClick.apply(self, arguments);
} }
}, },
@ -816,13 +816,20 @@ BI.BasicButton = BI.inherit(BI.Single, {
} }
}, },
_doClick: function () { _doClick: function (e) {
if (this.isValid()) {
this.beforeClick(e);
}
this._trigger(); this._trigger();
if (this.isValid()) { if (this.isValid()) {
this.doClick(); this.doClick(e);
} }
}, },
beforeClick: function () {
},
doClick: function () { doClick: function () {
}, },
@ -1710,7 +1717,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
_getNodeValue: function (node) { _getNodeValue: function (node) {
//去除标红 //去除标红
return node.value || node.text.replace(/<[^>]+>/g, ""); return node.value == null ? node.text.replace(/<[^>]+>/g, "") : node.value;
}, },
//获取半选框值 //获取半选框值
@ -1802,6 +1809,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
var self = this, o = this.options; var self = this, o = this.options;
var ns = BI.Tree.arrayFormat(nodes); var ns = BI.Tree.arrayFormat(nodes);
BI.each(ns, function (i, n) { BI.each(ns, function (i, n) {
n.title = n.title || n.text || n.value;
//处理标红 //处理标红
if (BI.isKey(o.paras.keyword)) { if (BI.isKey(o.paras.keyword)) {
n.text = $("<div>").__textKeywordMarked__(n.text, o.paras.keyword, n.py).html(); n.text = $("<div>").__textKeywordMarked__(n.text, o.paras.keyword, n.py).html();
@ -1936,6 +1944,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
this.nodes && this.nodes.expandAll(flag); this.nodes && this.nodes.expandAll(flag);
}, },
//设置树节点的状态
setValue: function (value, param) { setValue: function (value, param) {
this.setSelectedValue(value); this.setSelectedValue(value);
this.checkAll(false); this.checkAll(false);
@ -1944,7 +1953,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
}, },
setSelectedValue: function (value) { setSelectedValue: function (value) {
this.options.paras.selectedValues = value || {}; this.options.paras.selectedValues = BI.deepClone(value) || {};
this.selectedValues = BI.deepClone(value) || {}; this.selectedValues = BI.deepClone(value) || {};
}, },
@ -1963,12 +1972,6 @@ BI.TreeView = BI.inherit(BI.Pane, {
}); });
}, },
getExpandedValue: function(){
if (!this.nodes) {
return null;
}
},
refresh: function () { refresh: function () {
this.nodes && this.nodes.refresh(); this.nodes && this.nodes.refresh();
}, },
@ -1980,14 +1983,9 @@ BI.TreeView = BI.inherit(BI.Pane, {
return this._getSelectedValues(); return this._getSelectedValues();
}, },
empty: function () { destroyed: function () {
BI.isNotNull(this.nodes) && this.nodes.destroy();
},
destroy: function () {
this.stop(); this.stop();
this.nodes && this.nodes.destroy(); this.nodes && this.nodes.destroy();
BI.TreeView.superclass.destroy.apply(this, arguments);
} }
}); });
BI.extend(BI.TreeView, { BI.extend(BI.TreeView, {
@ -2190,7 +2188,7 @@ BI.AsyncTree = BI.inherit(BI.TreeView, {
} }
var checkedValues = this._getSelectedValues(); var checkedValues = this._getSelectedValues();
if (BI.isEmpty(checkedValues)) { if (BI.isEmpty(checkedValues)) {
return this.selectedValues; return BI.deepClone(this.selectedValues);
} }
if (BI.isEmpty(this.selectedValues)) { if (BI.isEmpty(this.selectedValues)) {
return checkedValues; return checkedValues;
@ -2257,7 +2255,7 @@ BI.PartTree = BI.inherit(BI.AsyncTree, {
BI.AsyncTree.superclass._selectTreeNode.apply(self, arguments); BI.AsyncTree.superclass._selectTreeNode.apply(self, arguments);
} else { } else {
o.itemsCreator(BI.extend({}, o.paras, { o.itemsCreator(BI.extend({}, o.paras, {
type: BI.TreeView.REQ_TYPE_CALCULATE_SELECT_DATA, type: BI.TreeView.REQ_TYPE_SELECT_DATA,
selectedValues: this.selectedValues, selectedValues: this.selectedValues,
notSelectedValue: name, notSelectedValue: name,
parentValues: parentValues parentValues: parentValues
@ -2532,8 +2530,8 @@ BI.CollectionView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-collection", baseCls: "bi-collection",
width: 400, // width: 400, //必设
height: 300, // height: 300, //必设
overflowX: true, overflowX: true,
overflowY: true, overflowY: true,
cellSizeAndPositionGetter: BI.emptyFn, cellSizeAndPositionGetter: BI.emptyFn,
@ -14673,16 +14671,16 @@ BI.GridView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.GridView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.GridView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-grid-view", baseCls: "bi-grid-view",
width: 400, // width: 400, //必设
height: 300, // height: 300, //必设
overflowX: true, overflowX: true,
overflowY: true, overflowY: true,
overscanColumnCount: 0, overscanColumnCount: 0,
overscanRowCount: 0, overscanRowCount: 0,
rowHeightGetter: BI.emptyFn, rowHeightGetter: BI.emptyFn, //number类型或function类型
columnWidthGetter: BI.emptyFn, columnWidthGetter: BI.emptyFn, //number类型或function类型
estimatedColumnSize: 100, // estimatedColumnSize: 100, //columnWidthGetter为function时必设
estimatedRowSize: 30, // estimatedRowSize: 30, //rowHeightGetter为function时必设
scrollLeft: 0, scrollLeft: 0,
scrollTop: 0, scrollTop: 0,
items: [] items: []
@ -15157,7 +15155,7 @@ BI.FloatBox.EVENT_FLOAT_BOX_OPEN = "EVENT_FLOAT_BOX_CLOSED";
BI.PopupView = BI.inherit(BI.Widget, { BI.PopupView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-list-view", baseCls: "bi-popup-view",
maxWidth: 'auto', maxWidth: 'auto',
minWidth: 100, minWidth: 100,
//maxHeight: 200, //maxHeight: 200,
@ -15458,6 +15456,295 @@ BI.SearcherView = BI.inherit(BI.Pane, {
BI.SearcherView.EVENT_CHANGE = "EVENT_CHANGE"; BI.SearcherView.EVENT_CHANGE = "EVENT_CHANGE";
BI.shortcut("bi.searcher_view", BI.SearcherView);/** BI.shortcut("bi.searcher_view", BI.SearcherView);/**
* 表示当前对象
*
* Created by GUY on 2017/5/23.
* @class BI.ListView
* @extends BI.Widget
*/
BI.ListView = BI.inherit(BI.Widget, {
props: function () {
return {
baseCls: "bi-list-view",
overscanHeight: 100,
blockSize: 10,
scrollTop: 0,
el: {},
items: []
};
},
init: function () {
var self = this;
this.renderedIndex = -1;
this.cache = {};
},
render: function () {
var self = this, o = this.options;
return {
type: "bi.vertical",
items: [BI.extend({
type: "bi.vertical",
scrolly: false,
ref: function () {
self.container = this;
}
}, o.el)],
element: this
}
},
mounted: function () {
var self = this, o = this.options;
this._populate();
this.element.scroll(function (e) {
o.scrollTop = self.element.scrollTop();
self._calculateBlocksToRender();
});
BI.ResizeDetector.addResizeListener(this, function () {
self._calculateBlocksToRender();
});
},
_renderMoreIf: function () {
var self = this, o = this.options;
var height = this.element.height();
var minContentHeight = o.scrollTop + height + o.overscanHeight;
var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,
cnt = this.renderedIndex + 1;
var lastHeight;
var getElementHeight = function () {
return self.container.element.height();
};
while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {
var items = o.items.slice(index, index + o.blockSize);
this.container.addItems(items);
var addedHeight = getElementHeight() - lastHeight;
this.cache[cnt] = {
index: index,
scrollTop: lastHeight,
height: addedHeight
};
this.renderedIndex = cnt;
cnt++;
index += o.blockSize;
}
},
_calculateBlocksToRender: function () {
var o = this.options;
this._renderMoreIf();
},
_populate: function (items) {
var o = this.options;
if (items && this.options.items !== items) {
this.options.items = items;
}
this._calculateBlocksToRender();
this.element.scrollTop(o.scrollTop);
},
restore: function () {
this.renderedIndex = -1;
this.container.empty();
this.cache = {};
},
populate: function (items) {
if (items && this.options.items !== items) {
this.restore();
}
this._populate();
},
destroyed: function () {
this.restore();
}
});
BI.shortcut('bi.list_view', BI.ListView);
/**
* 表示当前对象
*
* Created by GUY on 2017/5/22.
* @class BI.VirtualList
* @extends BI.Widget
*/
BI.VirtualList = BI.inherit(BI.Widget, {
props: function () {
return {
baseCls: "bi-virtual-list",
overscanHeight: 100,
blockSize: 10,
scrollTop: 0,
items: []
};
},
init: function () {
var self = this;
this.renderedIndex = -1;
this.cache = {};
},
render: function () {
var self = this, o = this.options;
return {
type: "bi.vertical",
items: [{
type: "bi.layout",
ref: function () {
self.topBlank = this;
}
}, {
type: "bi.vertical",
scrolly: false,
ref: function () {
self.container = this;
}
}, {
type: "bi.layout",
ref: function () {
self.bottomBlank = this;
}
}],
element: this
}
},
mounted: function () {
var self = this, o = this.options;
this._populate();
this.element.scroll(function (e) {
o.scrollTop = self.element.scrollTop();
self._calculateBlocksToRender();
});
BI.ResizeDetector.addResizeListener(this, function () {
self._calculateBlocksToRender();
});
},
_renderMoreIf: function () {
var self = this, o = this.options;
var height = this.element.height();
var minContentHeight = o.scrollTop + height + o.overscanHeight;
var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,
cnt = this.renderedIndex + 1;
var lastHeight;
var getElementHeight = function () {
return self.container.element.height() + self.topBlank.element.height() + self.bottomBlank.element.height();
};
while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {
var items = o.items.slice(index, index + o.blockSize);
this.container.addItems(items);
var addedHeight = getElementHeight() - lastHeight;
this.cache[cnt] = {
index: index,
scrollTop: lastHeight,
height: addedHeight
};
this.tree.set(cnt, addedHeight);
this.renderedIndex = cnt;
cnt++;
index += o.blockSize;
}
},
_calculateBlocksToRender: function () {
var o = this.options;
this._renderMoreIf();
var height = this.element.height();
var minContentHeightFrom = o.scrollTop - o.overscanHeight;
var minContentHeightTo = o.scrollTop + height + o.overscanHeight;
var start = this.tree.greatestLowerBound(minContentHeightFrom);
var end = this.tree.leastUpperBound(minContentHeightTo);
var needDestroyed = [];
for (var i = 0; i < start; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
needDestroyed.push(this.container._children[j]);
this.container._children[j] = null;
}
this.cache[i].destroyed = true;
}
}
for (var i = end + 1; i <= this.renderedIndex; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
needDestroyed.push(this.container._children[j]);
this.container._children[j] = null;
}
this.cache[i].destroyed = true;
}
}
var firstFragment = document.createDocumentFragment(), lastFragment = document.createDocumentFragment();
var currentFragment = firstFragment;
for (var i = (start < 0 ? 0 : start); i <= end && i <= this.renderedIndex; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
currentFragment = lastFragment;
}
if (this.cache[i].destroyed === true) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
var w = this.container._addElement(j, BI.extend({root: true}, BI.stripEL(o.items[j])));
currentFragment.appendChild(w.element[0]);
}
this.cache[i].destroyed = false;
}
}
this.container.element.prepend(firstFragment);
this.container.element.append(lastFragment);
this.topBlank.setHeight(this.cache[start < 0 ? 0 : start].scrollTop);
var lastCache = this.cache[Math.min(end, this.renderedIndex)];
this.bottomBlank.setHeight(this.tree.sumTo(this.renderedIndex) - lastCache.scrollTop - lastCache.height);
BI.each(needDestroyed, function (i, child) {
child && child._destroy();
});
},
_populate: function (items) {
var o = this.options;
if (items && this.options.items !== items) {
this.options.items = items;
}
this.tree = BI.PrefixIntervalTree.empty(Math.ceil(o.items.length / o.blockSize));
this._calculateBlocksToRender();
this.element.scrollTop(o.scrollTop);
},
_clearChildren: function () {
BI.each(this.container._children, function (i, cell) {
cell && cell.el._destroy();
});
this.container._children = {};
this.container.attr("items", []);
},
restore: function () {
this.renderedIndex = -1;
this._clearChildren();
this.cache = {};
this.options.scrollTop = 0;
},
populate: function (items) {
if (items && this.options.items !== items) {
this.restore();
}
this._populate();
},
destroyed: function () {
this.restore();
}
});
BI.shortcut('bi.virtual_list', BI.VirtualList);
/**
* 分页控件 * 分页控件
* *
* Created by GUY on 2015/8/31. * Created by GUY on 2015/8/31.
@ -17848,11 +18135,6 @@ BI.Editor = BI.inherit(BI.Single, {
return BI.trim(this.editor.getValue()); return BI.trim(this.editor.getValue());
}, },
setValid: function (b) {
BI.Editor.superclass.setValid.apply(this, arguments);
this.editor.setValid(b);
},
isEditing: function () { isEditing: function () {
return this.editor.isEditing(); return this.editor.isEditing();
}, },
@ -18119,10 +18401,10 @@ BI.TextAreaEditor = BI.inherit(BI.Single, {
return this.style; return this.style;
}, },
setValid: function (b) { _setValid: function (b) {
BI.TextAreaEditor.superclass.setValid.apply(this, arguments); BI.TextAreaEditor.superclass._setValid.apply(this, arguments);
this.content.setValid(b); // this.content.setValid(b);
this.watermark && this.watermark.setValid(b); // this.watermark && this.watermark.setValid(b);
} }
}); });
BI.TextAreaEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.TextAreaEditor.EVENT_CHANGE = "EVENT_CHANGE";
@ -19115,8 +19397,8 @@ BI.Input = BI.inherit(BI.Single, {
return this._lastValidValue; return this._lastValidValue;
}, },
setValid: function () { _setValid: function () {
BI.Input.superclass.setValid.apply(this, arguments); BI.Input.superclass._setValid.apply(this, arguments);
if (this.isValid()) { if (this.isValid()) {
this._lastValidValue = this.getValue(); this._lastValidValue = this.getValue();
this.element.removeClass("bi-input-error"); this.element.removeClass("bi-input-error");

14831
bi/case.js

File diff suppressed because it is too large Load Diff

84
bi/core.js

@ -2352,15 +2352,15 @@ if (!window.BI) {
}, },
has: function (obj, keys) { has: function (obj, keys) {
if (BI.isKey(keys)) { if (BI.isArray(keys)) {
return _.has.apply(_, arguments); if (keys.length === 0) {
}
if (!keys || BI.isEmpty(keys)) {
return false; return false;
} }
return BI.every(keys, function (i, key) { return BI.every(keys, function (i, key) {
return _.has(obj, key); return _.has(obj, key);
}); });
}
return _.has.apply(_, arguments);
}, },
//数字和字符串可以作为key //数字和字符串可以作为key
@ -4365,9 +4365,10 @@ BI.Widget = BI.inherit(BI.OB, {
this._initRoot(); this._initRoot();
this._initElementWidth(); this._initElementWidth();
this._initElementHeight(); this._initElementHeight();
this._initVisualEffects(); this._initVisual();
this._initState(); this._initState();
this._initElement(); this._initElement();
this._initEffects();
this.created && this.created(); this.created && this.created();
}, },
@ -4422,21 +4423,23 @@ BI.Widget = BI.inherit(BI.OB, {
} }
}, },
_initVisualEffects: function () { _initVisual: function () {
var o = this.options; var o = this.options;
if (o.invisible) { if (o.invisible) {
//用display属性做显示和隐藏,否则jquery会在显示时将display设为block会覆盖掉display:flex属性 //用display属性做显示和隐藏,否则jquery会在显示时将display设为block会覆盖掉display:flex属性
this.element.css("display", "none"); this.element.css("display", "none");
} }
},
_initEffects: function () {
var o = this.options;
if (o.disabled || o.invalid) { if (o.disabled || o.invalid) {
// BI.nextTick(BI.bind(function () {
if (this.options.disabled) { if (this.options.disabled) {
this.setEnable(false); this.setEnable(false);
} }
if (this.options.invalid) { if (this.options.invalid) {
this.setValid(false); this.setValid(false);
} }
// }, this));
} }
}, },
@ -6546,6 +6549,7 @@ Function.prototype.after = function (func) {
if (jQuery) { if (jQuery) {
(function ($) { (function ($) {
// richer:容器在其各个边缘留出的空间 // richer:容器在其各个边缘留出的空间
if (!$.fn.insets) {
$.fn.insets = function () { $.fn.insets = function () {
var p = this.padding(), var p = this.padding(),
b = this.border(); b = this.border();
@ -6556,8 +6560,10 @@ if (jQuery) {
'right': p.right + b.right + b.left 'right': p.right + b.right + b.left
}; };
}; };
}
// richer:获取 && 设置jQuery元素的边界 // richer:获取 && 设置jQuery元素的边界
if (!$.fn.bounds) {
$.fn.bounds = function (value) { $.fn.bounds = function (value) {
var tmp = {hasIgnoredBounds: true}; var tmp = {hasIgnoredBounds: true};
@ -6595,8 +6601,10 @@ if (jQuery) {
}; };
} }
}; };
}
})(jQuery); })(jQuery);
};if (!Number.prototype.toFixed || (0.00008).toFixed(3) !== '0.000' || }
;if (!Number.prototype.toFixed || (0.00008).toFixed(3) !== '0.000' ||
(0.9).toFixed(0) === '0' || (1.255).toFixed(2) !== '1.25' || (0.9).toFixed(0) === '0' || (1.255).toFixed(2) !== '1.25' ||
(1000000000000000128).toFixed(0) !== "1000000000000000128") { (1000000000000000128).toFixed(0) !== "1000000000000000128") {
(function () { (function () {
@ -6857,7 +6865,7 @@ function accDiv(arg1, arg2) {
with (Math) { with (Math) {
r1 = Number(arg1.toString().replace(".", "")); r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", "")); r2 = Number(arg2.toString().replace(".", ""));
return (r1 / r2) * pow(10, t2 - t1); return (t2 > t1) ? (r1 / r2) * pow(10, t2 - t1) : (r1 / r2) / pow(10, t1 - t2);
} }
} }
@ -9657,7 +9665,7 @@ $.extend(BI, {
return new BI.PrefixIntervalTree(xs); return new BI.PrefixIntervalTree(xs);
}; };
BI.PrefixIntervalTree.empty = function () { BI.PrefixIntervalTree.empty = function (size) {
return BI.PrefixIntervalTree.uniform(size, 0); return BI.PrefixIntervalTree.uniform(size, 0);
}; };
@ -9990,7 +9998,7 @@ $.extend(BI, {
}, },
isRoot: function (node) { isRoot: function (node) {
return node === this.root || node.id === this.root.id; return node === this.root;
}, },
getRoot: function () { getRoot: function () {
@ -10367,7 +10375,7 @@ $.extend(BI, {
if (BI.isArray(nodes)) { if (BI.isArray(nodes)) {
for (var i = 0, l = nodes.length; i < l; i++) { for (var i = 0, l = nodes.length; i < l; i++) {
var node = BI.clone(nodes[i]); var node = BI.clone(nodes[i]);
node.pId = pId; node.pId = node.pId == null ? pId : node.pId;
delete node.children; delete node.children;
r.push(node); r.push(node);
if (nodes[i]["children"]) { if (nodes[i]["children"]) {
@ -10376,7 +10384,7 @@ $.extend(BI, {
} }
} else { } else {
var newNodes = BI.clone(nodes); var newNodes = BI.clone(nodes);
newNodes.pId = pId; newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;
delete newNodes.children; delete newNodes.children;
r.push(newNodes); r.push(newNodes);
if (nodes["children"]) { if (nodes["children"]) {
@ -10387,21 +10395,25 @@ $.extend(BI, {
}, },
arrayFormat: function (nodes, pId) { arrayFormat: function (nodes, pId) {
if (!nodes) return []; if (!nodes) {
return [];
}
var r = []; var r = [];
if (BI.isArray(nodes)) { if (BI.isArray(nodes)) {
for (var i = 0, l = nodes.length; i < l; i++) { for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i]; var node = nodes[i];
node.pId = node.pId == null ? pId : node.pId;
r.push(node); r.push(node);
if (nodes[i]["children"]) { if (nodes[i]["children"]) {
r = r.concat(BI.Tree.transformToArrayFormat(nodes[i]["children"], node.id)); r = r.concat(BI.Tree.arrayFormat(nodes[i]["children"], node.id));
} }
} }
} else { } else {
var newNodes = nodes; var newNodes = nodes;
newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;
r.push(newNodes); r.push(newNodes);
if (nodes["children"]) { if (nodes["children"]) {
r = r.concat(BI.Tree.transformToArrayFormat(nodes["children"], newNodes.id)); r = r.concat(BI.Tree.arrayFormat(nodes["children"], newNodes.id));
} }
} }
return r; return r;
@ -10423,7 +10435,7 @@ $.extend(BI, {
tmpMap[sNodes[i].id] = BI.clone(sNodes[i]); tmpMap[sNodes[i].id] = BI.clone(sNodes[i]);
} }
for (i = 0, l = sNodes.length; i < l; 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] && sNodes[i].id !== sNodes[i].pId) {
if (!tmpMap[sNodes[i].pId].children) { if (!tmpMap[sNodes[i].pId].children) {
tmpMap[sNodes[i].pId].children = []; tmpMap[sNodes[i].pId].children = [];
} }
@ -10439,6 +10451,37 @@ $.extend(BI, {
} }
}, },
treeFormat: 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++) {
if (BI.isNull(sNodes[i].id)) {
return sNodes;
}
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(tmpMap[sNodes[i].id]);
} else {
r.push(tmpMap[sNodes[i].id]);
}
}
return r;
} else {
return [sNodes];
}
},
traversal: function (array, callback) { traversal: function (array, callback) {
if (BI.isNull(array)) { if (BI.isNull(array)) {
return; return;
@ -15351,7 +15394,7 @@ BI.FloatBoxController = BI.inherit(BI.Controller, {
} }
this.floatContainer[name] = BI.createWidget({ this.floatContainer[name] = BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
cls: "bi-list-view", cls: "bi-popup-view",
items: [{ items: [{
el: (this.floatLayer[name] = BI.createWidget({ el: (this.floatLayer[name] = BI.createWidget({
type: 'bi.absolute', type: 'bi.absolute',
@ -15441,6 +15484,7 @@ BI.FloatBoxController = BI.inherit(BI.Controller, {
delete this.floatLayer[name]; delete this.floatLayer[name];
delete this.zindexMap[name]; delete this.zindexMap[name];
delete this.floatContainer[name]; delete this.floatContainer[name];
delete this.floatOpened[name];
return this; return this;
} }
});/** });/**
@ -15538,7 +15582,7 @@ BI.LayerController = BI.inherit(BI.Controller, {
}] }]
}); });
if (w) { if (w) {
layout.element.addClass("bi-list-view"); layout.element.addClass("bi-popup-view");
layout.element.css({ layout.element.css({
left: w.offset().left + (offset.left || 0), left: w.offset().left + (offset.left || 0),
top: w.offset().top + (offset.top || 0), top: w.offset().top + (offset.top || 0),

472
bi/widget.js

@ -79,7 +79,9 @@ BI.SequenceTableTreeNumber = BI.inherit(BI.Widget, {
var cnt = this.start; var cnt = this.start;
function track(node) { function track(node) {
self.cache[node.text || node.value] = cnt++; //如果已经有缓存了就不改计数了,复杂表会出现这种情况
self.cache[node.text || node.value] || (self.cache[node.text || node.value] = cnt);
cnt++;
} }
BI.each(nodes, function (i, node) { BI.each(nodes, function (i, node) {
@ -10962,8 +10964,7 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this, arguments), {
baseCls: 'bi-multi-select-list', baseCls: 'bi-multi-select-list',
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn,
valueFormatter: BI.emptyFn, valueFormatter: BI.emptyFn
el: {}
}) })
}, },
_init: function () { _init: function () {
@ -10974,6 +10975,7 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
var assertShowValue = function () { var assertShowValue = function () {
BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue); BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue);
self.trigger.setValue(self.storeValue);
}; };
this.adapter = BI.createWidget({ this.adapter = BI.createWidget({
@ -11033,6 +11035,8 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
self._showAdapter(); self._showAdapter();
self._setStartValue(""); self._setStartValue("");
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
//需要刷新回到初始界面,否则搜索的结果不能放在最前面
self.adapter.populate();
} }
}, { }, {
eventName: BI.Searcher.EVENT_PAUSE, eventName: BI.Searcher.EVENT_PAUSE,
@ -11044,7 +11048,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
value: [keyword] value: [keyword]
}, function () { }, function () {
self._showAdapter(); self._showAdapter();
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
self._setStartValue(keyword); self._setStartValue(keyword);
assertShowValue(); assertShowValue();
@ -11064,13 +11067,11 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
if (keywords.length > 0) { if (keywords.length > 0) {
self._joinKeywords(keywords, function () { self._joinKeywords(keywords, function () {
if (BI.isEndWithBlank(last)) { if (BI.isEndWithBlank(last)) {
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
assertShowValue(); assertShowValue();
self.adapter.populate(); self.adapter.populate();
self._setStartValue(""); self._setStartValue("");
} else { } else {
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
assertShowValue(); assertShowValue();
} }
@ -11096,8 +11097,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.trigger, el: this.trigger,
height: 30 height: 30
@ -11109,8 +11108,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.searcherPane, el: this.searcherPane,
top: 30, top: 30,
@ -11307,8 +11304,7 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this, arguments), {
baseCls: 'bi-multi-select-tree', baseCls: 'bi-multi-select-tree',
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn
height: 25
}) })
}, },
@ -11354,7 +11350,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
}, },
adapter: this.adapter, adapter: this.adapter,
popup: this.searcherPane, popup: this.searcherPane,
height: 200,
masker: false, masker: false,
listeners: [{ listeners: [{
eventName: BI.Searcher.EVENT_START, eventName: BI.Searcher.EVENT_START,
@ -11394,8 +11389,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.trigger, el: this.trigger,
height: 30 height: 30
@ -11407,8 +11400,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.searcherPane, el: this.searcherPane,
top: 30, top: 30,
@ -11444,6 +11435,14 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
}); });
}, },
stopSearch: function () {
this.trigger.stopSearch();
},
updateValue: function (v) {
this.adapter.updateValue(v);
},
getValue: function () { getValue: function () {
return this.storeValue.value; return this.storeValue.value;
}, },
@ -11469,7 +11468,6 @@ BI.MultiSelectTreePopup = BI.inherit(BI.Widget, {
var self = this, o = this.options; var self = this, o = this.options;
this.popup = BI.createWidget({ this.popup = BI.createWidget({
type: "bi.async_tree", type: "bi.async_tree",
height: 400,
element: this, element: this,
itemsCreator: o.itemsCreator itemsCreator: o.itemsCreator
}); });
@ -11494,6 +11492,11 @@ BI.MultiSelectTreePopup = BI.inherit(BI.Widget, {
this.popup.setValue(v.value); this.popup.setValue(v.value);
}, },
updateValue: function (v) {
this.popup.updateValue(v);
this.popup.refresh();
},
populate: function (config) { populate: function (config) {
this.popup.stroke(config); this.popup.stroke(config);
} }
@ -16975,17 +16978,17 @@ BI.shortcut('bi.year_quarter_combo', BI.YearQuarterCombo);/**
* 封装了字段处理逻辑 * 封装了字段处理逻辑
* *
* Created by GUY on 2015/10/29. * Created by GUY on 2015/10/29.
* @class BI.AllValueChooserCombo * @class BI.AbstractAllValueChooser
* @extends BI.Widget * @extends BI.Widget
*/ */
BI.AllValueChooserCombo = BI.inherit(BI.Widget, { BI.AbstractAllValueChooser = BI.inherit(BI.Widget, {
_const: { _const: {
perPage: 10 perPage: 100
}, },
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.AbstractAllValueChooser.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-all-value-chooser-combo",
width: 200, width: 200,
height: 30, height: 30,
items: null, items: null,
@ -16994,20 +16997,10 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
}); });
}, },
_init: function () { _valueFormatter: function (v) {
BI.AllValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: function (v) {
var text = v; var text = v;
if (BI.isNotNull(self.items)) { if (BI.isNotNull(this.items)) {
BI.some(self.items, function (i, item) { BI.some(this.items, function (i, item) {
if (item.value === v) { if (item.value === v) {
text = item.text; text = item.text;
return true; return true;
@ -17016,14 +17009,6 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
} }
return text; return text;
}, },
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.AllValueChooserCombo.EVENT_CONFIRM);
});
},
_itemsCreator: function (options, callback) { _itemsCreator: function (options, callback) {
var self = this, o = this.options; var self = this, o = this.options;
@ -17065,6 +17050,46 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
hasNext: false hasNext: false
}); });
} }
}
});/**
* 简单的复选下拉框控件, 适用于数据量少的情况 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.AllValueChooserCombo
* @extends BI.AbstractAllValueChooser
*/
BI.AllValueChooserCombo = BI.inherit(BI.AbstractAllValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-all-value-chooser-combo",
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.AllValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this),
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.AllValueChooserCombo.EVENT_CONFIRM);
});
}, },
setValue: function (v) { setValue: function (v) {
@ -17088,70 +17113,84 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
}); });
BI.AllValueChooserCombo.EVENT_CONFIRM = "AllValueChooserCombo.EVENT_CONFIRM"; BI.AllValueChooserCombo.EVENT_CONFIRM = "AllValueChooserCombo.EVENT_CONFIRM";
BI.shortcut('bi.all_value_chooser_combo', BI.AllValueChooserCombo);/** BI.shortcut('bi.all_value_chooser_combo', BI.AllValueChooserCombo);/**
* 简单的复选下拉树控件, 适用于数据量少的情况 * 简单的复选下拉框控件, 适用于数据量少的情况 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值
* 封装了字段处理逻辑
* *
* Created by GUY on 2015/10/29. * Created by GUY on 2015/10/29.
* @class BI.TreeValueChooserCombo * @class BI.AllValueChooserPane
* @extends BI.Widget * @extends BI.AbstractAllValueChooser
*/ */
BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { BI.AllValueChooserPane = BI.inherit(BI.AbstractAllValueChooser, {
_const: {
perPage: 10
},
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.AllValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-tree-value-chooser-combo", baseCls: "bi-all-value-chooser-pane",
width: 200, width: 200,
height: 30, height: 30,
items: null, items: null,
itemsCreator: BI.emptyFn itemsCreator: BI.emptyFn,
cache: true
}); });
}, },
_init: function () { _init: function () {
BI.TreeValueChooserCombo.superclass._init.apply(this, arguments); BI.AllValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options; var self = this, o = this.options;
if (BI.isNotNull(o.items)) { if (BI.isNotNull(o.items)) {
this._initData(o.items); this.items = o.items;
} }
this.combo = BI.createWidget({ this.list = BI.createWidget({
type: 'bi.multi_tree_combo', type: 'bi.multi_select_list',
element: this, element: this,
itemsCreator: BI.bind(this._itemsCreator, this), itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this),
width: o.width, width: o.width,
height: o.height height: o.height
}); });
this.combo.on(BI.MultiTreeCombo.EVENT_CONFIRM, function () { this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {
self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM); self.fireEvent(BI.AllValueChooserPane.EVENT_CHANGE);
}); });
}, },
_initData: function (items) { setValue: function (v) {
this.items = items; this.list.setValue({
var nodes = BI.Tree.transformToTreeFormat(items); type: BI.Selection.Multi,
this.tree = new BI.Tree(); value: v || []
this.tree.initTree(nodes); });
this._initMap();
this._initFloors();
}, },
_initMap: function () { getValue: function () {
var map = this.map = {}; var val = this.list.getValue() || {};
BI.each(this.items, function (i, item) { if (val.type === BI.Selection.All) {
map[item.value] = item; return val.assist;
}); }
return val.value || [];
}, },
_initFloors: function () { populate: function () {
this.floors = -1; this.list.populate.apply(this.list, arguments);
var root = this.tree.getRoot();
while (root) {
this.floors++;
root = root.getChildren()[0];
} }
});
BI.AllValueChooserPane.EVENT_CHANGE = "AllValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.all_value_chooser_pane', BI.AllValueChooserPane);BI.AbstractTreeValueChooser = BI.inherit(BI.Widget, {
_const: {
perPage: 100
},
_defaultConfig: function () {
return BI.extend(BI.AbstractTreeValueChooser.superclass._defaultConfig.apply(this, arguments), {
items: null,
itemsCreator: BI.emptyFn
});
},
_initData: function (items) {
this.items = items;
var nodes = BI.Tree.treeFormat(items);
this.tree = new BI.Tree();
this.tree.initTree(nodes);
}, },
_itemsCreator: function (options, callback) { _itemsCreator: function (options, callback) {
@ -17195,32 +17234,29 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
return; return;
} }
doCheck(0, [], this.tree.getRoot(), selectedValues); doCheck([], this.tree.getRoot(), selectedValues);
callback({ callback({
items: result items: result
}); });
function doCheck(floor, parentValues, node, selected) { function doCheck(parentValues, node, selected) {
if (floor >= self.floors) {
return;
}
if (selected == null || BI.isEmpty(selected)) { if (selected == null || BI.isEmpty(selected)) {
BI.each(node.getChildren(), function (i, child) { BI.each(node.getChildren(), function (i, child) {
var newParents = BI.clone(parentValues); var newParents = BI.clone(parentValues);
newParents.push(child.value); newParents.push(child.value);
var llen = self._getChildCount(newParents); var llen = self._getChildCount(newParents);
createOneJson(child, node.id, llen); createOneJson(child, node.id, llen);
doCheck(floor + 1, newParents, child, {}); doCheck(newParents, child, {});
}); });
return; return;
} }
BI.each(selected, function (k) { BI.each(selected, function (k) {
var node = self._getNode(k); var node = self._getNode(parentValues, k);
var newParents = BI.clone(parentValues); var newParents = BI.clone(parentValues);
newParents.push(node.value); newParents.push(node.value);
createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents)); createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents));
doCheck(floor + 1, newParents, node, selected[k]); doCheck(newParents, node, selected[k]);
}) })
} }
@ -17310,9 +17346,6 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
if (self._isMatch(current, keyword)) { if (self._isMatch(current, keyword)) {
return true; return true;
} }
if (deep >= self.floors) {
return false;
}
var children = self._getChildren(newParents); var children = self._getChildren(newParents);
@ -17448,9 +17481,6 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
createOneJson(parentValues, current, false, checked, !isAllSelect && isHalf(parentValues, current), true, result); createOneJson(parentValues, current, false, checked, !isAllSelect && isHalf(parentValues, current), true, result);
return [true, checked]; return [true, checked];
} }
if (deep >= self.floors) {
return [false, false];
}
var newParents = BI.clone(parentValues); var newParents = BI.clone(parentValues);
newParents.push(current); newParents.push(current);
var children = self._getChildren(newParents); var children = self._getChildren(newParents);
@ -17475,14 +17505,14 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
} }
function createOneJson(parentValues, value, isOpen, checked, half, flag, result) { function createOneJson(parentValues, value, isOpen, checked, half, flag, result) {
var node = self.map[value]; var node = self._getNode(parentValues, value)
result.push({ result.push({
id: node.id, id: node.id,
pId: node.pId, pId: node.pId,
text: node.text, text: node.text,
value: node.value, value: node.value,
title: node.title, title: node.title,
isParent: parentValues.length + 1 < self.floors, isParent: node.getChildrenLength() > 0,
open: isOpen, open: isOpen,
checked: checked, checked: checked,
halfCheck: half, halfCheck: half,
@ -17566,7 +17596,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
value: nodes[i].value, value: nodes[i].value,
text: nodes[i].text, text: nodes[i].text,
times: 1, times: 1,
isParent: parentValues.length + 1 < this.floors, isParent: nodes[i].getChildrenLength() > 0,
checked: state[0], checked: state[0],
halfCheck: state[1] halfCheck: state[1]
}) })
@ -17613,14 +17643,14 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
function getCheckState(current, parentValues, valueMap, checkState) { function getCheckState(current, parentValues, valueMap, checkState) {
var checked = checkState.checked, half = checkState.half; var checked = checkState.checked, half = checkState.half;
var hasChild = parentValues.length + 1 < self.floors;
var tempCheck = false, halfCheck = false; var tempCheck = false, halfCheck = false;
if (BI.has(valueMap, current)) { if (BI.has(valueMap, current)) {
//可能是半选 //可能是半选
if (valueMap[current][0] === 1) { if (valueMap[current][0] === 1) {
var values = BI.clone(parentValues); var values = BI.clone(parentValues);
values.push(current); values.push(current);
if (hasChild && self._getChildCount(values) !== valueMap[current][1]) { var childCount = self._getChildCount(values);
if (childCount > 0 && childCount !== valueMap[current][1]) {
halfCheck = true; halfCheck = true;
} }
} else if (valueMap[current][0] === 2) { } else if (valueMap[current][0] === 2) {
@ -17653,14 +17683,34 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
return finded.finded.length > 0 || finded.matched.length > 0; return finded.finded.length > 0 || finded.matched.length > 0;
}, },
_getNode: function (v) { _getNode: function (parentValues, v) {
return this.tree.search(v, "value"); var self = this;
var findedParentNode;
var index = 0;
this.tree.traverse(function (node) {
if (self.tree.isRoot(node)) {
return;
}
if (index > parentValues.length) {
return false;
}
if (index === parentValues.length && node.value === v) {
findedParentNode = node;
return false;
}
if (node.value === parentValues[index]) {
index++;
return;
}
return true;
});
return findedParentNode;
}, },
_getChildren: function (parentValues) { _getChildren: function (parentValues) {
if (parentValues.length > 0) { if (parentValues.length > 0) {
var value = BI.last(parentValues); var value = BI.last(parentValues);
var parent = this.tree.search(value, "value"); var parent = this._getNode(parentValues.slice(0, parentValues.length - 1), value);
} else { } else {
var parent = this.tree.getRoot(); var parent = this.tree.getRoot();
} }
@ -17669,6 +17719,43 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
_getChildCount: function (parentValues) { _getChildCount: function (parentValues) {
return this._getChildren(parentValues).length; return this._getChildren(parentValues).length;
}
});/**
* 简单的复选下拉树控件, 适用于数据量少的情况
*
* Created by GUY on 2015/10/29.
* @class BI.TreeValueChooserCombo
* @extends BI.Widget
*/
BI.TreeValueChooserCombo = BI.inherit(BI.AbstractTreeValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-tree-value-chooser-combo",
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn
});
},
_init: function () {
BI.TreeValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this._initData(o.items);
}
this.combo = BI.createWidget({
type: 'bi.multi_tree_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
width: o.width,
height: o.height
});
this.combo.on(BI.MultiTreeCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM);
});
}, },
setValue: function (v) { setValue: function (v) {
@ -17680,48 +17767,84 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
}, },
populate: function () { populate: function () {
this.combo.populate.apply(this, arguments); this.combo.populate.apply(this.combo, arguments);
} }
}); });
BI.TreeValueChooserCombo.EVENT_CONFIRM = "TreeValueChooserCombo.EVENT_CONFIRM"; BI.TreeValueChooserCombo.EVENT_CONFIRM = "TreeValueChooserCombo.EVENT_CONFIRM";
BI.shortcut('bi.tree_value_chooser_combo', BI.TreeValueChooserCombo);/** BI.shortcut('bi.tree_value_chooser_combo', BI.TreeValueChooserCombo);/**
* 简单的复选下拉树控件, 适用于数据量少的情况
*
* Created by GUY on 2015/10/29.
* @class BI.TreeValueChooserPane
* @extends BI.AbstractTreeValueChooser
*/
BI.TreeValueChooserPane = BI.inherit(BI.AbstractTreeValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.TreeValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-tree-value-chooser-pane",
items: null,
itemsCreator: BI.emptyFn
});
},
_init: function () {
BI.TreeValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.pane = BI.createWidget({
type: 'bi.multi_select_tree',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this)
});
this.pane.on(BI.MultiSelectTree.EVENT_CHANGE, function () {
self.fireEvent(BI.TreeValueChooserPane.EVENT_CHANGE);
});
if (BI.isNotNull(o.items)) {
this._initData(o.items);
this.populate();
}
},
setValue: function (v) {
this.pane.setValue(v);
},
getValue: function () {
return this.pane.getValue();
},
populate: function () {
this.pane.populate.apply(this.pane, arguments);
}
});
BI.TreeValueChooserPane.EVENT_CHANGE = "TreeValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.tree_value_chooser_pane', BI.TreeValueChooserPane);/**
* 简单的复选下拉框控件, 适用于数据量少的情况 * 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑 * 封装了字段处理逻辑
* *
* Created by GUY on 2015/10/29. * Created by GUY on 2015/10/29.
* @class BI.ValueChooserCombo * @class BI.AbstractValueChooser
* @extends BI.Widget * @extends BI.Widget
*/ */
BI.ValueChooserCombo = BI.inherit(BI.Widget, { BI.AbstractValueChooser = BI.inherit(BI.Widget, {
_const: { _const: {
perPage: 10 perPage: 100
}, },
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.AbstractValueChooser.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-combo",
width: 200,
height: 30,
items: null, items: null,
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn,
cache: true cache: true
}); });
}, },
_init: function () { _valueFormatter: function (v) {
BI.ValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: function (v) {
var text = v; var text = v;
if (BI.isNotNull(self.items)) { if (BI.isNotNull(this.items)) {
BI.some(self.items, function (i, item) { BI.some(this.items, function (i, item) {
if (item.value === v) { if (item.value === v) {
text = item.text; text = item.text;
return true; return true;
@ -17730,14 +17853,6 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
} }
return text; return text;
}, },
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.ValueChooserCombo.EVENT_CONFIRM);
});
},
_getItemsByTimes: function (items, times) { _getItemsByTimes: function (items, times) {
var res = []; var res = [];
@ -17791,6 +17906,46 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
hasNext: self._hasNextByTimes(items, options.times) hasNext: self._hasNextByTimes(items, options.times)
}); });
} }
}
});/**
* 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.ValueChooserCombo
* @extends BI.Widget
*/
BI.ValueChooserCombo = BI.inherit(BI.AbstractValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-combo",
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.ValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this),
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.ValueChooserCombo.EVENT_CONFIRM);
});
}, },
setValue: function (v) { setValue: function (v) {
@ -17810,4 +17965,59 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
} }
}); });
BI.ValueChooserCombo.EVENT_CONFIRM = "ValueChooserCombo.EVENT_CONFIRM"; BI.ValueChooserCombo.EVENT_CONFIRM = "ValueChooserCombo.EVENT_CONFIRM";
BI.shortcut('bi.value_chooser_combo', BI.ValueChooserCombo); BI.shortcut('bi.value_chooser_combo', BI.ValueChooserCombo);/**
* 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.ValueChooserPane
* @extends BI.Widget
*/
BI.ValueChooserPane = BI.inherit(BI.AbstractValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.ValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-pane",
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.ValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.list = BI.createWidget({
type: 'bi.multi_select_list',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this)
});
this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {
self.fireEvent(BI.ValueChooserPane.EVENT_CHANGE);
});
if (BI.isNotNull(o.items)) {
this.items = o.items;
this.populate();
}
},
setValue: function (v) {
this.list.setValue(v);
},
getValue: function () {
var val = this.list.getValue() || {};
return {
type: val.type,
value: val.value
}
},
populate: function () {
this.list.populate.apply(this.list, arguments);
}
});
BI.ValueChooserPane.EVENT_CHANGE = "ValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.value_chooser_pane', BI.ValueChooserPane);

5
demo/config.js

File diff suppressed because one or more lines are too long

8
demo/js/case/demo.zclip.js → demo/js/case/demo.clipboard.js

@ -10,8 +10,8 @@ Demo.Func = BI.inherit(BI.Widget, {
height: 30, height: 30,
value: "这是复制的内容" value: "这是复制的内容"
}); });
var zclip = BI.createWidget({ var clipboard = BI.createWidget({
type: 'bi.zero_clip', type: 'bi.clipboard',
width: 100, width: 100,
height: 100, height: 100,
cls: 'layout-bg1', cls: 'layout-bg1',
@ -32,11 +32,11 @@ Demo.Func = BI.inherit(BI.Widget, {
left: 100, left: 100,
top: 50, top: 50,
}, { }, {
el: zclip, el: clipboard,
left: 100, left: 100,
top: 100 top: 100
}] }]
}) })
} }
}); });
BI.shortcut("demo.zclip", Demo.Func); BI.shortcut("demo.clipboard", Demo.Func);

40
demo/js/component/demo.treevaluechooser.js

@ -1,40 +0,0 @@
Demo.TreeValueChooser = BI.inherit(BI.Widget, {
props: {
baseCls: "demo-tree-value-chooser"
},
render: function () {
var tree = [];
for (var i = 0; i < 21; i++) {
tree.push({
value: "" + i + "",
text: "" + i + "",
id: i + "",
pId: null
});
for (var j = 0; j < 9; j++) {
tree.push({
value: i + "-" + j,
text: j + "",
id: i + "-" + j,
pId: i + ""
})
}
}
var widget = BI.createWidget({
type: "bi.tree_value_chooser_combo",
width: 300,
items: tree,
itemsCreator: function (op, callback) {
callback(tree);
}
});
return {
type: "bi.vertical",
hgap: 200,
vgap: 10,
items: [widget]
};
}
});
BI.shortcut("demo.tree_value_chooser", Demo.TreeValueChooser);

23
demo/js/component/demo.treevaluechoosercombo.js

@ -0,0 +1,23 @@
Demo.TreeValueChooser = BI.inherit(BI.Widget, {
props: {
baseCls: "demo-tree-value-chooser-combo"
},
render: function () {
var widget = BI.createWidget({
type: "bi.tree_value_chooser_combo",
width: 300,
// items: BI.deepClone(Demo.CONSTANTS.TREEITEMS),
itemsCreator: function (op, callback) {
callback(BI.deepClone(Demo.CONSTANTS.TREEITEMS));
}
});
return {
type: "bi.vertical",
hgap: 200,
vgap: 10,
items: [widget]
};
}
});
BI.shortcut("demo.tree_value_chooser_combo", Demo.TreeValueChooser);

16
demo/js/component/demo.treevaluechooserpane.js

@ -0,0 +1,16 @@
Demo.TreeValueChooser = BI.inherit(BI.Widget, {
props: {
baseCls: "demo-tree-value-chooser"
},
render: function () {
return {
type: "bi.tree_value_chooser_pane",
items: BI.deepClone(Demo.CONSTANTS.TREEITEMS),
// itemsCreator: function (op, callback) {
// callback(tree);
// }
};
}
});
BI.shortcut("demo.tree_value_chooser_pane", Demo.TreeValueChooser);

0
demo/js/component/demo.valuechooser.js → demo/js/component/demo.valuechoosercombo.js

15
demo/js/component/demo.valuechooserpane.js

@ -0,0 +1,15 @@
Demo.ValueChooserPane = BI.inherit(BI.Widget, {
props: {
baseCls: "demo-value-chooser-pane"
},
render: function () {
return {
type: "bi.value_chooser_pane",
items: BI.deepClone(Demo.CONSTANTS.ITEMS),
// itemsCreator: function (op, callback) {
// callback(BI.deepClone(Demo.CONSTANTS.ITEMS));
// }
};
}
});
BI.shortcut("demo.value_chooser_pane", Demo.ValueChooserPane);

4
demo/js/config/case.js

@ -80,8 +80,8 @@ Demo.CASE_CONFIG = [{
value: "demo.calendar" value: "demo.calendar"
}, { }, {
pId: 3, pId: 3,
text: "bi.zclip", text: "bi.clipboard",
value: "demo.zclip" value: "demo.clipboard"
}, { }, {
pId: 3, pId: 3,
text: "bi.complex_canvas", text: "bi.complex_canvas",

10
demo/js/config/component.js

@ -8,8 +8,16 @@ Demo.COMPONENT_CONFIG = [{
pId: 5, pId: 5,
text: "bi.value_chooser_combo", text: "bi.value_chooser_combo",
value: "demo.value_chooser_combo" value: "demo.value_chooser_combo"
}, {
pId: 5,
text: "bi.value_chooser_pane",
value: "demo.value_chooser_pane"
}, { }, {
pId: 5, pId: 5,
text: "bi.tree_value_chooser_combo", text: "bi.tree_value_chooser_combo",
value: "demo.tree_value_chooser" value: "demo.tree_value_chooser_combo"
}, {
pId: 5,
text: "bi.tree_value_chooser_pane",
value: "demo.tree_value_chooser_pane"
}]; }];

8
demo/js/config/core.js

@ -105,6 +105,14 @@ Demo.CORE_CONFIG = [{
pId: 102, pId: 102,
text: "bi.collection_view", text: "bi.collection_view",
value: "demo.collection_view" value: "demo.collection_view"
}, {
pId: 102,
text: "bi.list_view",
value: "demo.list_view"
}, {
pId: 102,
text: "bi.virtual_list",
value: "demo.virtual_list"
}, { }, {
pId: 102, pId: 102,
id: 10201, id: 10201,

2
demo/js/core/abstract/demo.collection_view.js

@ -13,6 +13,8 @@ Demo.Func = BI.inherit(BI.Widget, {
} }
var grid = BI.createWidget({ var grid = BI.createWidget({
type: "bi.collection_view", type: "bi.collection_view",
width: 400,
height: 300,
items: items, items: items,
cellSizeAndPositionGetter: function (index) { cellSizeAndPositionGetter: function (index) {
return { return {

4
demo/js/core/abstract/demo.grid_view.js

@ -16,6 +16,10 @@ Demo.Func = BI.inherit(BI.Widget, {
} }
var grid = BI.createWidget({ var grid = BI.createWidget({
type: "bi.grid_view", type: "bi.grid_view",
width: 400,
height: 300,
estimatedRowSize: 30,
estimatedColumnSize: 100,
items: items, items: items,
scrollTop: 100, scrollTop: 100,
rowHeightGetter: function () { rowHeightGetter: function () {

22
demo/js/core/abstract/demo.list_view.js

@ -0,0 +1,22 @@
Demo.Func = BI.inherit(BI.Widget, {
props: {
baseCls: "demo-func"
},
render: function () {
return {
type: "bi.list_view",
el: {
type: "bi.left"
},
items: BI.map(Demo.CONSTANTS.ITEMS, function (i, item) {
return BI.extend({}, item, {
type: "bi.label",
width: 200,
height: 200,
text: (i + 1) + "." + item.text,
});
})
}
}
});
BI.shortcut("demo.list_view", Demo.Func);

18
demo/js/core/abstract/demo.virtual_list.js

@ -0,0 +1,18 @@
Demo.Func = BI.inherit(BI.Widget, {
props: {
baseCls: "demo-func"
},
render: function () {
return {
type: "bi.virtual_list",
items: BI.map(Demo.CONSTANTS.ITEMS, function (i, item) {
return BI.extend({}, item, {
type: "bi.label",
height: 30,
text: (i + 1) + "." + item.text,
});
})
}
}
});
BI.shortcut("demo.virtual_list", Demo.Func);

4
demo/version.js

@ -6,6 +6,6 @@ BI.i18n = {
"BI-Basic_OK": "确定" "BI-Basic_OK": "确定"
}; };
BI.servletURL = "dist/"; BI.servletURL = "";
BI.resourceURL = "dist/resource/"; BI.resourceURL = "resource/";
BI.i18n = {}; BI.i18n = {};

14
docs/base.css

@ -1342,30 +1342,30 @@ li.CodeMirror-hint-active {
/****** common color(常用颜色,可用于普遍场景) *****/ /****** common color(常用颜色,可用于普遍场景) *****/
/**** custom color(自定义颜色,用于特定场景) ****/ /**** custom color(自定义颜色,用于特定场景) ****/
/**********BI.BIListView*************/ /**********BI.BIListView*************/
.bi-list-view { .bi-popup-view {
position: fixed !important; position: fixed !important;
overflow-y: visible !important; overflow-y: visible !important;
overflow-x: visible !important; overflow-x: visible !important;
overflow: visible !important; overflow: visible !important;
cursor: default; cursor: default;
} }
.bi-list-view .list-view-outer { .bi-popup-view .list-view-outer {
-webkit-border-radius: 2px; -webkit-border-radius: 2px;
-moz-border-radius: 2px; -moz-border-radius: 2px;
border-radius: 2px; border-radius: 2px;
} }
.bi-list-view .list-view-toolbar { .bi-popup-view .list-view-toolbar {
line-height: 30px; line-height: 30px;
} }
.bi-list-view .list-view-toolbar > .center-element { .bi-popup-view .list-view-toolbar > .center-element {
border-left: 1px solid #d4dadd; border-left: 1px solid #d4dadd;
} }
.bi-list-view .list-view-toolbar > .first-element { .bi-popup-view .list-view-toolbar > .first-element {
border-left: none; border-left: none;
} }
.bi-theme-dark .bi-list-view .list-view-toolbar > .center-element { .bi-theme-dark .bi-popup-view .list-view-toolbar > .center-element {
border-left: 1px solid #525466; border-left: 1px solid #525466;
} }
.bi-theme-dark .bi-list-view .list-view-toolbar > .first-element { .bi-theme-dark .bi-popup-view .list-view-toolbar > .first-element {
border-left: none; border-left: none;
} }

360
docs/base.js

@ -797,7 +797,7 @@ BI.BasicButton = BI.inherit(BI.Single, {
if (!self.isEnabled() || (self.isOnce() && self.isSelected())) { if (!self.isEnabled() || (self.isOnce() && self.isSelected())) {
return; return;
} }
onClick.apply(self); onClick.apply(self, arguments);
} }
}, },
@ -816,13 +816,20 @@ BI.BasicButton = BI.inherit(BI.Single, {
} }
}, },
_doClick: function () { _doClick: function (e) {
if (this.isValid()) {
this.beforeClick(e);
}
this._trigger(); this._trigger();
if (this.isValid()) { if (this.isValid()) {
this.doClick(); this.doClick(e);
} }
}, },
beforeClick: function () {
},
doClick: function () { doClick: function () {
}, },
@ -1710,7 +1717,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
_getNodeValue: function (node) { _getNodeValue: function (node) {
//去除标红 //去除标红
return node.value || node.text.replace(/<[^>]+>/g, ""); return node.value == null ? node.text.replace(/<[^>]+>/g, "") : node.value;
}, },
//获取半选框值 //获取半选框值
@ -1802,6 +1809,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
var self = this, o = this.options; var self = this, o = this.options;
var ns = BI.Tree.arrayFormat(nodes); var ns = BI.Tree.arrayFormat(nodes);
BI.each(ns, function (i, n) { BI.each(ns, function (i, n) {
n.title = n.title || n.text || n.value;
//处理标红 //处理标红
if (BI.isKey(o.paras.keyword)) { if (BI.isKey(o.paras.keyword)) {
n.text = $("<div>").__textKeywordMarked__(n.text, o.paras.keyword, n.py).html(); n.text = $("<div>").__textKeywordMarked__(n.text, o.paras.keyword, n.py).html();
@ -1936,6 +1944,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
this.nodes && this.nodes.expandAll(flag); this.nodes && this.nodes.expandAll(flag);
}, },
//设置树节点的状态
setValue: function (value, param) { setValue: function (value, param) {
this.setSelectedValue(value); this.setSelectedValue(value);
this.checkAll(false); this.checkAll(false);
@ -1944,7 +1953,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
}, },
setSelectedValue: function (value) { setSelectedValue: function (value) {
this.options.paras.selectedValues = value || {}; this.options.paras.selectedValues = BI.deepClone(value) || {};
this.selectedValues = BI.deepClone(value) || {}; this.selectedValues = BI.deepClone(value) || {};
}, },
@ -1963,12 +1972,6 @@ BI.TreeView = BI.inherit(BI.Pane, {
}); });
}, },
getExpandedValue: function(){
if (!this.nodes) {
return null;
}
},
refresh: function () { refresh: function () {
this.nodes && this.nodes.refresh(); this.nodes && this.nodes.refresh();
}, },
@ -1980,14 +1983,9 @@ BI.TreeView = BI.inherit(BI.Pane, {
return this._getSelectedValues(); return this._getSelectedValues();
}, },
empty: function () { destroyed: function () {
BI.isNotNull(this.nodes) && this.nodes.destroy();
},
destroy: function () {
this.stop(); this.stop();
this.nodes && this.nodes.destroy(); this.nodes && this.nodes.destroy();
BI.TreeView.superclass.destroy.apply(this, arguments);
} }
}); });
BI.extend(BI.TreeView, { BI.extend(BI.TreeView, {
@ -2190,7 +2188,7 @@ BI.AsyncTree = BI.inherit(BI.TreeView, {
} }
var checkedValues = this._getSelectedValues(); var checkedValues = this._getSelectedValues();
if (BI.isEmpty(checkedValues)) { if (BI.isEmpty(checkedValues)) {
return this.selectedValues; return BI.deepClone(this.selectedValues);
} }
if (BI.isEmpty(this.selectedValues)) { if (BI.isEmpty(this.selectedValues)) {
return checkedValues; return checkedValues;
@ -2257,7 +2255,7 @@ BI.PartTree = BI.inherit(BI.AsyncTree, {
BI.AsyncTree.superclass._selectTreeNode.apply(self, arguments); BI.AsyncTree.superclass._selectTreeNode.apply(self, arguments);
} else { } else {
o.itemsCreator(BI.extend({}, o.paras, { o.itemsCreator(BI.extend({}, o.paras, {
type: BI.TreeView.REQ_TYPE_CALCULATE_SELECT_DATA, type: BI.TreeView.REQ_TYPE_SELECT_DATA,
selectedValues: this.selectedValues, selectedValues: this.selectedValues,
notSelectedValue: name, notSelectedValue: name,
parentValues: parentValues parentValues: parentValues
@ -2532,8 +2530,8 @@ BI.CollectionView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-collection", baseCls: "bi-collection",
width: 400, // width: 400, //必设
height: 300, // height: 300, //必设
overflowX: true, overflowX: true,
overflowY: true, overflowY: true,
cellSizeAndPositionGetter: BI.emptyFn, cellSizeAndPositionGetter: BI.emptyFn,
@ -14673,16 +14671,16 @@ BI.GridView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.GridView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.GridView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-grid-view", baseCls: "bi-grid-view",
width: 400, // width: 400, //必设
height: 300, // height: 300, //必设
overflowX: true, overflowX: true,
overflowY: true, overflowY: true,
overscanColumnCount: 0, overscanColumnCount: 0,
overscanRowCount: 0, overscanRowCount: 0,
rowHeightGetter: BI.emptyFn, rowHeightGetter: BI.emptyFn, //number类型或function类型
columnWidthGetter: BI.emptyFn, columnWidthGetter: BI.emptyFn, //number类型或function类型
estimatedColumnSize: 100, // estimatedColumnSize: 100, //columnWidthGetter为function时必设
estimatedRowSize: 30, // estimatedRowSize: 30, //rowHeightGetter为function时必设
scrollLeft: 0, scrollLeft: 0,
scrollTop: 0, scrollTop: 0,
items: [] items: []
@ -15157,7 +15155,7 @@ BI.FloatBox.EVENT_FLOAT_BOX_OPEN = "EVENT_FLOAT_BOX_CLOSED";
BI.PopupView = BI.inherit(BI.Widget, { BI.PopupView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-list-view", baseCls: "bi-popup-view",
maxWidth: 'auto', maxWidth: 'auto',
minWidth: 100, minWidth: 100,
//maxHeight: 200, //maxHeight: 200,
@ -15458,6 +15456,295 @@ BI.SearcherView = BI.inherit(BI.Pane, {
BI.SearcherView.EVENT_CHANGE = "EVENT_CHANGE"; BI.SearcherView.EVENT_CHANGE = "EVENT_CHANGE";
BI.shortcut("bi.searcher_view", BI.SearcherView);/** BI.shortcut("bi.searcher_view", BI.SearcherView);/**
* 表示当前对象
*
* Created by GUY on 2017/5/23.
* @class BI.ListView
* @extends BI.Widget
*/
BI.ListView = BI.inherit(BI.Widget, {
props: function () {
return {
baseCls: "bi-list-view",
overscanHeight: 100,
blockSize: 10,
scrollTop: 0,
el: {},
items: []
};
},
init: function () {
var self = this;
this.renderedIndex = -1;
this.cache = {};
},
render: function () {
var self = this, o = this.options;
return {
type: "bi.vertical",
items: [BI.extend({
type: "bi.vertical",
scrolly: false,
ref: function () {
self.container = this;
}
}, o.el)],
element: this
}
},
mounted: function () {
var self = this, o = this.options;
this._populate();
this.element.scroll(function (e) {
o.scrollTop = self.element.scrollTop();
self._calculateBlocksToRender();
});
BI.ResizeDetector.addResizeListener(this, function () {
self._calculateBlocksToRender();
});
},
_renderMoreIf: function () {
var self = this, o = this.options;
var height = this.element.height();
var minContentHeight = o.scrollTop + height + o.overscanHeight;
var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,
cnt = this.renderedIndex + 1;
var lastHeight;
var getElementHeight = function () {
return self.container.element.height();
};
while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {
var items = o.items.slice(index, index + o.blockSize);
this.container.addItems(items);
var addedHeight = getElementHeight() - lastHeight;
this.cache[cnt] = {
index: index,
scrollTop: lastHeight,
height: addedHeight
};
this.renderedIndex = cnt;
cnt++;
index += o.blockSize;
}
},
_calculateBlocksToRender: function () {
var o = this.options;
this._renderMoreIf();
},
_populate: function (items) {
var o = this.options;
if (items && this.options.items !== items) {
this.options.items = items;
}
this._calculateBlocksToRender();
this.element.scrollTop(o.scrollTop);
},
restore: function () {
this.renderedIndex = -1;
this.container.empty();
this.cache = {};
},
populate: function (items) {
if (items && this.options.items !== items) {
this.restore();
}
this._populate();
},
destroyed: function () {
this.restore();
}
});
BI.shortcut('bi.list_view', BI.ListView);
/**
* 表示当前对象
*
* Created by GUY on 2017/5/22.
* @class BI.VirtualList
* @extends BI.Widget
*/
BI.VirtualList = BI.inherit(BI.Widget, {
props: function () {
return {
baseCls: "bi-virtual-list",
overscanHeight: 100,
blockSize: 10,
scrollTop: 0,
items: []
};
},
init: function () {
var self = this;
this.renderedIndex = -1;
this.cache = {};
},
render: function () {
var self = this, o = this.options;
return {
type: "bi.vertical",
items: [{
type: "bi.layout",
ref: function () {
self.topBlank = this;
}
}, {
type: "bi.vertical",
scrolly: false,
ref: function () {
self.container = this;
}
}, {
type: "bi.layout",
ref: function () {
self.bottomBlank = this;
}
}],
element: this
}
},
mounted: function () {
var self = this, o = this.options;
this._populate();
this.element.scroll(function (e) {
o.scrollTop = self.element.scrollTop();
self._calculateBlocksToRender();
});
BI.ResizeDetector.addResizeListener(this, function () {
self._calculateBlocksToRender();
});
},
_renderMoreIf: function () {
var self = this, o = this.options;
var height = this.element.height();
var minContentHeight = o.scrollTop + height + o.overscanHeight;
var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,
cnt = this.renderedIndex + 1;
var lastHeight;
var getElementHeight = function () {
return self.container.element.height() + self.topBlank.element.height() + self.bottomBlank.element.height();
};
while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {
var items = o.items.slice(index, index + o.blockSize);
this.container.addItems(items);
var addedHeight = getElementHeight() - lastHeight;
this.cache[cnt] = {
index: index,
scrollTop: lastHeight,
height: addedHeight
};
this.tree.set(cnt, addedHeight);
this.renderedIndex = cnt;
cnt++;
index += o.blockSize;
}
},
_calculateBlocksToRender: function () {
var o = this.options;
this._renderMoreIf();
var height = this.element.height();
var minContentHeightFrom = o.scrollTop - o.overscanHeight;
var minContentHeightTo = o.scrollTop + height + o.overscanHeight;
var start = this.tree.greatestLowerBound(minContentHeightFrom);
var end = this.tree.leastUpperBound(minContentHeightTo);
var needDestroyed = [];
for (var i = 0; i < start; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
needDestroyed.push(this.container._children[j]);
this.container._children[j] = null;
}
this.cache[i].destroyed = true;
}
}
for (var i = end + 1; i <= this.renderedIndex; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
needDestroyed.push(this.container._children[j]);
this.container._children[j] = null;
}
this.cache[i].destroyed = true;
}
}
var firstFragment = document.createDocumentFragment(), lastFragment = document.createDocumentFragment();
var currentFragment = firstFragment;
for (var i = (start < 0 ? 0 : start); i <= end && i <= this.renderedIndex; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
currentFragment = lastFragment;
}
if (this.cache[i].destroyed === true) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
var w = this.container._addElement(j, BI.extend({root: true}, BI.stripEL(o.items[j])));
currentFragment.appendChild(w.element[0]);
}
this.cache[i].destroyed = false;
}
}
this.container.element.prepend(firstFragment);
this.container.element.append(lastFragment);
this.topBlank.setHeight(this.cache[start < 0 ? 0 : start].scrollTop);
var lastCache = this.cache[Math.min(end, this.renderedIndex)];
this.bottomBlank.setHeight(this.tree.sumTo(this.renderedIndex) - lastCache.scrollTop - lastCache.height);
BI.each(needDestroyed, function (i, child) {
child && child._destroy();
});
},
_populate: function (items) {
var o = this.options;
if (items && this.options.items !== items) {
this.options.items = items;
}
this.tree = BI.PrefixIntervalTree.empty(Math.ceil(o.items.length / o.blockSize));
this._calculateBlocksToRender();
this.element.scrollTop(o.scrollTop);
},
_clearChildren: function () {
BI.each(this.container._children, function (i, cell) {
cell && cell.el._destroy();
});
this.container._children = {};
this.container.attr("items", []);
},
restore: function () {
this.renderedIndex = -1;
this._clearChildren();
this.cache = {};
this.options.scrollTop = 0;
},
populate: function (items) {
if (items && this.options.items !== items) {
this.restore();
}
this._populate();
},
destroyed: function () {
this.restore();
}
});
BI.shortcut('bi.virtual_list', BI.VirtualList);
/**
* 分页控件 * 分页控件
* *
* Created by GUY on 2015/8/31. * Created by GUY on 2015/8/31.
@ -17848,11 +18135,6 @@ BI.Editor = BI.inherit(BI.Single, {
return BI.trim(this.editor.getValue()); return BI.trim(this.editor.getValue());
}, },
setValid: function (b) {
BI.Editor.superclass.setValid.apply(this, arguments);
this.editor.setValid(b);
},
isEditing: function () { isEditing: function () {
return this.editor.isEditing(); return this.editor.isEditing();
}, },
@ -18119,10 +18401,10 @@ BI.TextAreaEditor = BI.inherit(BI.Single, {
return this.style; return this.style;
}, },
setValid: function (b) { _setValid: function (b) {
BI.TextAreaEditor.superclass.setValid.apply(this, arguments); BI.TextAreaEditor.superclass._setValid.apply(this, arguments);
this.content.setValid(b); // this.content.setValid(b);
this.watermark && this.watermark.setValid(b); // this.watermark && this.watermark.setValid(b);
} }
}); });
BI.TextAreaEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.TextAreaEditor.EVENT_CHANGE = "EVENT_CHANGE";
@ -19115,8 +19397,8 @@ BI.Input = BI.inherit(BI.Single, {
return this._lastValidValue; return this._lastValidValue;
}, },
setValid: function () { _setValid: function () {
BI.Input.superclass.setValid.apply(this, arguments); BI.Input.superclass._setValid.apply(this, arguments);
if (this.isValid()) { if (this.isValid()) {
this._lastValidValue = this.getValue(); this._lastValidValue = this.getValue();
this.element.removeClass("bi-input-error"); this.element.removeClass("bi-input-error");

14831
docs/case.js

File diff suppressed because it is too large Load Diff

84
docs/core.js

@ -13494,15 +13494,15 @@ if (!window.BI) {
}, },
has: function (obj, keys) { has: function (obj, keys) {
if (BI.isKey(keys)) { if (BI.isArray(keys)) {
return _.has.apply(_, arguments); if (keys.length === 0) {
}
if (!keys || BI.isEmpty(keys)) {
return false; return false;
} }
return BI.every(keys, function (i, key) { return BI.every(keys, function (i, key) {
return _.has(obj, key); return _.has(obj, key);
}); });
}
return _.has.apply(_, arguments);
}, },
//数字和字符串可以作为key //数字和字符串可以作为key
@ -14367,9 +14367,10 @@ BI.Widget = BI.inherit(BI.OB, {
this._initRoot(); this._initRoot();
this._initElementWidth(); this._initElementWidth();
this._initElementHeight(); this._initElementHeight();
this._initVisualEffects(); this._initVisual();
this._initState(); this._initState();
this._initElement(); this._initElement();
this._initEffects();
this.created && this.created(); this.created && this.created();
}, },
@ -14424,21 +14425,23 @@ BI.Widget = BI.inherit(BI.OB, {
} }
}, },
_initVisualEffects: function () { _initVisual: function () {
var o = this.options; var o = this.options;
if (o.invisible) { if (o.invisible) {
//用display属性做显示和隐藏,否则jquery会在显示时将display设为block会覆盖掉display:flex属性 //用display属性做显示和隐藏,否则jquery会在显示时将display设为block会覆盖掉display:flex属性
this.element.css("display", "none"); this.element.css("display", "none");
} }
},
_initEffects: function () {
var o = this.options;
if (o.disabled || o.invalid) { if (o.disabled || o.invalid) {
// BI.nextTick(BI.bind(function () {
if (this.options.disabled) { if (this.options.disabled) {
this.setEnable(false); this.setEnable(false);
} }
if (this.options.invalid) { if (this.options.invalid) {
this.setValid(false); this.setValid(false);
} }
// }, this));
} }
}, },
@ -18115,7 +18118,7 @@ $.extend(BI, {
return new BI.PrefixIntervalTree(xs); return new BI.PrefixIntervalTree(xs);
}; };
BI.PrefixIntervalTree.empty = function () { BI.PrefixIntervalTree.empty = function (size) {
return BI.PrefixIntervalTree.uniform(size, 0); return BI.PrefixIntervalTree.uniform(size, 0);
}; };
@ -18448,7 +18451,7 @@ $.extend(BI, {
}, },
isRoot: function (node) { isRoot: function (node) {
return node === this.root || node.id === this.root.id; return node === this.root;
}, },
getRoot: function () { getRoot: function () {
@ -18825,7 +18828,7 @@ $.extend(BI, {
if (BI.isArray(nodes)) { if (BI.isArray(nodes)) {
for (var i = 0, l = nodes.length; i < l; i++) { for (var i = 0, l = nodes.length; i < l; i++) {
var node = BI.clone(nodes[i]); var node = BI.clone(nodes[i]);
node.pId = pId; node.pId = node.pId == null ? pId : node.pId;
delete node.children; delete node.children;
r.push(node); r.push(node);
if (nodes[i]["children"]) { if (nodes[i]["children"]) {
@ -18834,7 +18837,7 @@ $.extend(BI, {
} }
} else { } else {
var newNodes = BI.clone(nodes); var newNodes = BI.clone(nodes);
newNodes.pId = pId; newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;
delete newNodes.children; delete newNodes.children;
r.push(newNodes); r.push(newNodes);
if (nodes["children"]) { if (nodes["children"]) {
@ -18845,21 +18848,25 @@ $.extend(BI, {
}, },
arrayFormat: function (nodes, pId) { arrayFormat: function (nodes, pId) {
if (!nodes) return []; if (!nodes) {
return [];
}
var r = []; var r = [];
if (BI.isArray(nodes)) { if (BI.isArray(nodes)) {
for (var i = 0, l = nodes.length; i < l; i++) { for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i]; var node = nodes[i];
node.pId = node.pId == null ? pId : node.pId;
r.push(node); r.push(node);
if (nodes[i]["children"]) { if (nodes[i]["children"]) {
r = r.concat(BI.Tree.transformToArrayFormat(nodes[i]["children"], node.id)); r = r.concat(BI.Tree.arrayFormat(nodes[i]["children"], node.id));
} }
} }
} else { } else {
var newNodes = nodes; var newNodes = nodes;
newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;
r.push(newNodes); r.push(newNodes);
if (nodes["children"]) { if (nodes["children"]) {
r = r.concat(BI.Tree.transformToArrayFormat(nodes["children"], newNodes.id)); r = r.concat(BI.Tree.arrayFormat(nodes["children"], newNodes.id));
} }
} }
return r; return r;
@ -18881,7 +18888,7 @@ $.extend(BI, {
tmpMap[sNodes[i].id] = BI.clone(sNodes[i]); tmpMap[sNodes[i].id] = BI.clone(sNodes[i]);
} }
for (i = 0, l = sNodes.length; i < l; 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] && sNodes[i].id !== sNodes[i].pId) {
if (!tmpMap[sNodes[i].pId].children) { if (!tmpMap[sNodes[i].pId].children) {
tmpMap[sNodes[i].pId].children = []; tmpMap[sNodes[i].pId].children = [];
} }
@ -18897,6 +18904,37 @@ $.extend(BI, {
} }
}, },
treeFormat: 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++) {
if (BI.isNull(sNodes[i].id)) {
return sNodes;
}
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(tmpMap[sNodes[i].id]);
} else {
r.push(tmpMap[sNodes[i].id]);
}
}
return r;
} else {
return [sNodes];
}
},
traversal: function (array, callback) { traversal: function (array, callback) {
if (BI.isNull(array)) { if (BI.isNull(array)) {
return; return;
@ -20949,7 +20987,7 @@ BI.FloatBoxController = BI.inherit(BI.Controller, {
} }
this.floatContainer[name] = BI.createWidget({ this.floatContainer[name] = BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
cls: "bi-list-view", cls: "bi-popup-view",
items: [{ items: [{
el: (this.floatLayer[name] = BI.createWidget({ el: (this.floatLayer[name] = BI.createWidget({
type: 'bi.absolute', type: 'bi.absolute',
@ -21039,6 +21077,7 @@ BI.FloatBoxController = BI.inherit(BI.Controller, {
delete this.floatLayer[name]; delete this.floatLayer[name];
delete this.zindexMap[name]; delete this.zindexMap[name];
delete this.floatContainer[name]; delete this.floatContainer[name];
delete this.floatOpened[name];
return this; return this;
} }
});/** });/**
@ -21136,7 +21175,7 @@ BI.LayerController = BI.inherit(BI.Controller, {
}] }]
}); });
if (w) { if (w) {
layout.element.addClass("bi-list-view"); layout.element.addClass("bi-popup-view");
layout.element.css({ layout.element.css({
left: w.offset().left + (offset.left || 0), left: w.offset().left + (offset.left || 0),
top: w.offset().top + (offset.top || 0), top: w.offset().top + (offset.top || 0),
@ -24044,6 +24083,7 @@ Function.prototype.after = function (func) {
if (jQuery) { if (jQuery) {
(function ($) { (function ($) {
// richer:容器在其各个边缘留出的空间 // richer:容器在其各个边缘留出的空间
if (!$.fn.insets) {
$.fn.insets = function () { $.fn.insets = function () {
var p = this.padding(), var p = this.padding(),
b = this.border(); b = this.border();
@ -24054,8 +24094,10 @@ if (jQuery) {
'right': p.right + b.right + b.left 'right': p.right + b.right + b.left
}; };
}; };
}
// richer:获取 && 设置jQuery元素的边界 // richer:获取 && 设置jQuery元素的边界
if (!$.fn.bounds) {
$.fn.bounds = function (value) { $.fn.bounds = function (value) {
var tmp = {hasIgnoredBounds: true}; var tmp = {hasIgnoredBounds: true};
@ -24093,8 +24135,10 @@ if (jQuery) {
}; };
} }
}; };
}
})(jQuery); })(jQuery);
};if (!Number.prototype.toFixed || (0.00008).toFixed(3) !== '0.000' || }
;if (!Number.prototype.toFixed || (0.00008).toFixed(3) !== '0.000' ||
(0.9).toFixed(0) === '0' || (1.255).toFixed(2) !== '1.25' || (0.9).toFixed(0) === '0' || (1.255).toFixed(2) !== '1.25' ||
(1000000000000000128).toFixed(0) !== "1000000000000000128") { (1000000000000000128).toFixed(0) !== "1000000000000000128") {
(function () { (function () {
@ -24355,7 +24399,7 @@ function accDiv(arg1, arg2) {
with (Math) { with (Math) {
r1 = Number(arg1.toString().replace(".", "")); r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", "")); r2 = Number(arg2.toString().replace(".", ""));
return (r1 / r2) * pow(10, t2 - t1); return (t2 > t1) ? (r1 / r2) * pow(10, t2 - t1) : (r1 / r2) / pow(10, t1 - t2);
} }
} }

214
docs/demo.js

File diff suppressed because one or more lines are too long

472
docs/widget.js

@ -79,7 +79,9 @@ BI.SequenceTableTreeNumber = BI.inherit(BI.Widget, {
var cnt = this.start; var cnt = this.start;
function track(node) { function track(node) {
self.cache[node.text || node.value] = cnt++; //如果已经有缓存了就不改计数了,复杂表会出现这种情况
self.cache[node.text || node.value] || (self.cache[node.text || node.value] = cnt);
cnt++;
} }
BI.each(nodes, function (i, node) { BI.each(nodes, function (i, node) {
@ -10962,8 +10964,7 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this, arguments), {
baseCls: 'bi-multi-select-list', baseCls: 'bi-multi-select-list',
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn,
valueFormatter: BI.emptyFn, valueFormatter: BI.emptyFn
el: {}
}) })
}, },
_init: function () { _init: function () {
@ -10974,6 +10975,7 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
var assertShowValue = function () { var assertShowValue = function () {
BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue); BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue);
self.trigger.setValue(self.storeValue);
}; };
this.adapter = BI.createWidget({ this.adapter = BI.createWidget({
@ -11033,6 +11035,8 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
self._showAdapter(); self._showAdapter();
self._setStartValue(""); self._setStartValue("");
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
//需要刷新回到初始界面,否则搜索的结果不能放在最前面
self.adapter.populate();
} }
}, { }, {
eventName: BI.Searcher.EVENT_PAUSE, eventName: BI.Searcher.EVENT_PAUSE,
@ -11044,7 +11048,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
value: [keyword] value: [keyword]
}, function () { }, function () {
self._showAdapter(); self._showAdapter();
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
self._setStartValue(keyword); self._setStartValue(keyword);
assertShowValue(); assertShowValue();
@ -11064,13 +11067,11 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
if (keywords.length > 0) { if (keywords.length > 0) {
self._joinKeywords(keywords, function () { self._joinKeywords(keywords, function () {
if (BI.isEndWithBlank(last)) { if (BI.isEndWithBlank(last)) {
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
assertShowValue(); assertShowValue();
self.adapter.populate(); self.adapter.populate();
self._setStartValue(""); self._setStartValue("");
} else { } else {
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
assertShowValue(); assertShowValue();
} }
@ -11096,8 +11097,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.trigger, el: this.trigger,
height: 30 height: 30
@ -11109,8 +11108,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.searcherPane, el: this.searcherPane,
top: 30, top: 30,
@ -11307,8 +11304,7 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this, arguments), {
baseCls: 'bi-multi-select-tree', baseCls: 'bi-multi-select-tree',
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn
height: 25
}) })
}, },
@ -11354,7 +11350,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
}, },
adapter: this.adapter, adapter: this.adapter,
popup: this.searcherPane, popup: this.searcherPane,
height: 200,
masker: false, masker: false,
listeners: [{ listeners: [{
eventName: BI.Searcher.EVENT_START, eventName: BI.Searcher.EVENT_START,
@ -11394,8 +11389,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.trigger, el: this.trigger,
height: 30 height: 30
@ -11407,8 +11400,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.searcherPane, el: this.searcherPane,
top: 30, top: 30,
@ -11444,6 +11435,14 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
}); });
}, },
stopSearch: function () {
this.trigger.stopSearch();
},
updateValue: function (v) {
this.adapter.updateValue(v);
},
getValue: function () { getValue: function () {
return this.storeValue.value; return this.storeValue.value;
}, },
@ -11469,7 +11468,6 @@ BI.MultiSelectTreePopup = BI.inherit(BI.Widget, {
var self = this, o = this.options; var self = this, o = this.options;
this.popup = BI.createWidget({ this.popup = BI.createWidget({
type: "bi.async_tree", type: "bi.async_tree",
height: 400,
element: this, element: this,
itemsCreator: o.itemsCreator itemsCreator: o.itemsCreator
}); });
@ -11494,6 +11492,11 @@ BI.MultiSelectTreePopup = BI.inherit(BI.Widget, {
this.popup.setValue(v.value); this.popup.setValue(v.value);
}, },
updateValue: function (v) {
this.popup.updateValue(v);
this.popup.refresh();
},
populate: function (config) { populate: function (config) {
this.popup.stroke(config); this.popup.stroke(config);
} }
@ -16975,17 +16978,17 @@ BI.shortcut('bi.year_quarter_combo', BI.YearQuarterCombo);/**
* 封装了字段处理逻辑 * 封装了字段处理逻辑
* *
* Created by GUY on 2015/10/29. * Created by GUY on 2015/10/29.
* @class BI.AllValueChooserCombo * @class BI.AbstractAllValueChooser
* @extends BI.Widget * @extends BI.Widget
*/ */
BI.AllValueChooserCombo = BI.inherit(BI.Widget, { BI.AbstractAllValueChooser = BI.inherit(BI.Widget, {
_const: { _const: {
perPage: 10 perPage: 100
}, },
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.AbstractAllValueChooser.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-all-value-chooser-combo",
width: 200, width: 200,
height: 30, height: 30,
items: null, items: null,
@ -16994,20 +16997,10 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
}); });
}, },
_init: function () { _valueFormatter: function (v) {
BI.AllValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: function (v) {
var text = v; var text = v;
if (BI.isNotNull(self.items)) { if (BI.isNotNull(this.items)) {
BI.some(self.items, function (i, item) { BI.some(this.items, function (i, item) {
if (item.value === v) { if (item.value === v) {
text = item.text; text = item.text;
return true; return true;
@ -17016,14 +17009,6 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
} }
return text; return text;
}, },
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.AllValueChooserCombo.EVENT_CONFIRM);
});
},
_itemsCreator: function (options, callback) { _itemsCreator: function (options, callback) {
var self = this, o = this.options; var self = this, o = this.options;
@ -17065,6 +17050,46 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
hasNext: false hasNext: false
}); });
} }
}
});/**
* 简单的复选下拉框控件, 适用于数据量少的情况 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.AllValueChooserCombo
* @extends BI.AbstractAllValueChooser
*/
BI.AllValueChooserCombo = BI.inherit(BI.AbstractAllValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-all-value-chooser-combo",
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.AllValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this),
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.AllValueChooserCombo.EVENT_CONFIRM);
});
}, },
setValue: function (v) { setValue: function (v) {
@ -17088,70 +17113,84 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
}); });
BI.AllValueChooserCombo.EVENT_CONFIRM = "AllValueChooserCombo.EVENT_CONFIRM"; BI.AllValueChooserCombo.EVENT_CONFIRM = "AllValueChooserCombo.EVENT_CONFIRM";
BI.shortcut('bi.all_value_chooser_combo', BI.AllValueChooserCombo);/** BI.shortcut('bi.all_value_chooser_combo', BI.AllValueChooserCombo);/**
* 简单的复选下拉树控件, 适用于数据量少的情况 * 简单的复选下拉框控件, 适用于数据量少的情况 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值
* 封装了字段处理逻辑
* *
* Created by GUY on 2015/10/29. * Created by GUY on 2015/10/29.
* @class BI.TreeValueChooserCombo * @class BI.AllValueChooserPane
* @extends BI.Widget * @extends BI.AbstractAllValueChooser
*/ */
BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { BI.AllValueChooserPane = BI.inherit(BI.AbstractAllValueChooser, {
_const: {
perPage: 10
},
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.AllValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-tree-value-chooser-combo", baseCls: "bi-all-value-chooser-pane",
width: 200, width: 200,
height: 30, height: 30,
items: null, items: null,
itemsCreator: BI.emptyFn itemsCreator: BI.emptyFn,
cache: true
}); });
}, },
_init: function () { _init: function () {
BI.TreeValueChooserCombo.superclass._init.apply(this, arguments); BI.AllValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options; var self = this, o = this.options;
if (BI.isNotNull(o.items)) { if (BI.isNotNull(o.items)) {
this._initData(o.items); this.items = o.items;
} }
this.combo = BI.createWidget({ this.list = BI.createWidget({
type: 'bi.multi_tree_combo', type: 'bi.multi_select_list',
element: this, element: this,
itemsCreator: BI.bind(this._itemsCreator, this), itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this),
width: o.width, width: o.width,
height: o.height height: o.height
}); });
this.combo.on(BI.MultiTreeCombo.EVENT_CONFIRM, function () { this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {
self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM); self.fireEvent(BI.AllValueChooserPane.EVENT_CHANGE);
}); });
}, },
_initData: function (items) { setValue: function (v) {
this.items = items; this.list.setValue({
var nodes = BI.Tree.transformToTreeFormat(items); type: BI.Selection.Multi,
this.tree = new BI.Tree(); value: v || []
this.tree.initTree(nodes); });
this._initMap();
this._initFloors();
}, },
_initMap: function () { getValue: function () {
var map = this.map = {}; var val = this.list.getValue() || {};
BI.each(this.items, function (i, item) { if (val.type === BI.Selection.All) {
map[item.value] = item; return val.assist;
}); }
return val.value || [];
}, },
_initFloors: function () { populate: function () {
this.floors = -1; this.list.populate.apply(this.list, arguments);
var root = this.tree.getRoot();
while (root) {
this.floors++;
root = root.getChildren()[0];
} }
});
BI.AllValueChooserPane.EVENT_CHANGE = "AllValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.all_value_chooser_pane', BI.AllValueChooserPane);BI.AbstractTreeValueChooser = BI.inherit(BI.Widget, {
_const: {
perPage: 100
},
_defaultConfig: function () {
return BI.extend(BI.AbstractTreeValueChooser.superclass._defaultConfig.apply(this, arguments), {
items: null,
itemsCreator: BI.emptyFn
});
},
_initData: function (items) {
this.items = items;
var nodes = BI.Tree.treeFormat(items);
this.tree = new BI.Tree();
this.tree.initTree(nodes);
}, },
_itemsCreator: function (options, callback) { _itemsCreator: function (options, callback) {
@ -17195,32 +17234,29 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
return; return;
} }
doCheck(0, [], this.tree.getRoot(), selectedValues); doCheck([], this.tree.getRoot(), selectedValues);
callback({ callback({
items: result items: result
}); });
function doCheck(floor, parentValues, node, selected) { function doCheck(parentValues, node, selected) {
if (floor >= self.floors) {
return;
}
if (selected == null || BI.isEmpty(selected)) { if (selected == null || BI.isEmpty(selected)) {
BI.each(node.getChildren(), function (i, child) { BI.each(node.getChildren(), function (i, child) {
var newParents = BI.clone(parentValues); var newParents = BI.clone(parentValues);
newParents.push(child.value); newParents.push(child.value);
var llen = self._getChildCount(newParents); var llen = self._getChildCount(newParents);
createOneJson(child, node.id, llen); createOneJson(child, node.id, llen);
doCheck(floor + 1, newParents, child, {}); doCheck(newParents, child, {});
}); });
return; return;
} }
BI.each(selected, function (k) { BI.each(selected, function (k) {
var node = self._getNode(k); var node = self._getNode(parentValues, k);
var newParents = BI.clone(parentValues); var newParents = BI.clone(parentValues);
newParents.push(node.value); newParents.push(node.value);
createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents)); createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents));
doCheck(floor + 1, newParents, node, selected[k]); doCheck(newParents, node, selected[k]);
}) })
} }
@ -17310,9 +17346,6 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
if (self._isMatch(current, keyword)) { if (self._isMatch(current, keyword)) {
return true; return true;
} }
if (deep >= self.floors) {
return false;
}
var children = self._getChildren(newParents); var children = self._getChildren(newParents);
@ -17448,9 +17481,6 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
createOneJson(parentValues, current, false, checked, !isAllSelect && isHalf(parentValues, current), true, result); createOneJson(parentValues, current, false, checked, !isAllSelect && isHalf(parentValues, current), true, result);
return [true, checked]; return [true, checked];
} }
if (deep >= self.floors) {
return [false, false];
}
var newParents = BI.clone(parentValues); var newParents = BI.clone(parentValues);
newParents.push(current); newParents.push(current);
var children = self._getChildren(newParents); var children = self._getChildren(newParents);
@ -17475,14 +17505,14 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
} }
function createOneJson(parentValues, value, isOpen, checked, half, flag, result) { function createOneJson(parentValues, value, isOpen, checked, half, flag, result) {
var node = self.map[value]; var node = self._getNode(parentValues, value)
result.push({ result.push({
id: node.id, id: node.id,
pId: node.pId, pId: node.pId,
text: node.text, text: node.text,
value: node.value, value: node.value,
title: node.title, title: node.title,
isParent: parentValues.length + 1 < self.floors, isParent: node.getChildrenLength() > 0,
open: isOpen, open: isOpen,
checked: checked, checked: checked,
halfCheck: half, halfCheck: half,
@ -17566,7 +17596,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
value: nodes[i].value, value: nodes[i].value,
text: nodes[i].text, text: nodes[i].text,
times: 1, times: 1,
isParent: parentValues.length + 1 < this.floors, isParent: nodes[i].getChildrenLength() > 0,
checked: state[0], checked: state[0],
halfCheck: state[1] halfCheck: state[1]
}) })
@ -17613,14 +17643,14 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
function getCheckState(current, parentValues, valueMap, checkState) { function getCheckState(current, parentValues, valueMap, checkState) {
var checked = checkState.checked, half = checkState.half; var checked = checkState.checked, half = checkState.half;
var hasChild = parentValues.length + 1 < self.floors;
var tempCheck = false, halfCheck = false; var tempCheck = false, halfCheck = false;
if (BI.has(valueMap, current)) { if (BI.has(valueMap, current)) {
//可能是半选 //可能是半选
if (valueMap[current][0] === 1) { if (valueMap[current][0] === 1) {
var values = BI.clone(parentValues); var values = BI.clone(parentValues);
values.push(current); values.push(current);
if (hasChild && self._getChildCount(values) !== valueMap[current][1]) { var childCount = self._getChildCount(values);
if (childCount > 0 && childCount !== valueMap[current][1]) {
halfCheck = true; halfCheck = true;
} }
} else if (valueMap[current][0] === 2) { } else if (valueMap[current][0] === 2) {
@ -17653,14 +17683,34 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
return finded.finded.length > 0 || finded.matched.length > 0; return finded.finded.length > 0 || finded.matched.length > 0;
}, },
_getNode: function (v) { _getNode: function (parentValues, v) {
return this.tree.search(v, "value"); var self = this;
var findedParentNode;
var index = 0;
this.tree.traverse(function (node) {
if (self.tree.isRoot(node)) {
return;
}
if (index > parentValues.length) {
return false;
}
if (index === parentValues.length && node.value === v) {
findedParentNode = node;
return false;
}
if (node.value === parentValues[index]) {
index++;
return;
}
return true;
});
return findedParentNode;
}, },
_getChildren: function (parentValues) { _getChildren: function (parentValues) {
if (parentValues.length > 0) { if (parentValues.length > 0) {
var value = BI.last(parentValues); var value = BI.last(parentValues);
var parent = this.tree.search(value, "value"); var parent = this._getNode(parentValues.slice(0, parentValues.length - 1), value);
} else { } else {
var parent = this.tree.getRoot(); var parent = this.tree.getRoot();
} }
@ -17669,6 +17719,43 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
_getChildCount: function (parentValues) { _getChildCount: function (parentValues) {
return this._getChildren(parentValues).length; return this._getChildren(parentValues).length;
}
});/**
* 简单的复选下拉树控件, 适用于数据量少的情况
*
* Created by GUY on 2015/10/29.
* @class BI.TreeValueChooserCombo
* @extends BI.Widget
*/
BI.TreeValueChooserCombo = BI.inherit(BI.AbstractTreeValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-tree-value-chooser-combo",
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn
});
},
_init: function () {
BI.TreeValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this._initData(o.items);
}
this.combo = BI.createWidget({
type: 'bi.multi_tree_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
width: o.width,
height: o.height
});
this.combo.on(BI.MultiTreeCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM);
});
}, },
setValue: function (v) { setValue: function (v) {
@ -17680,48 +17767,84 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
}, },
populate: function () { populate: function () {
this.combo.populate.apply(this, arguments); this.combo.populate.apply(this.combo, arguments);
} }
}); });
BI.TreeValueChooserCombo.EVENT_CONFIRM = "TreeValueChooserCombo.EVENT_CONFIRM"; BI.TreeValueChooserCombo.EVENT_CONFIRM = "TreeValueChooserCombo.EVENT_CONFIRM";
BI.shortcut('bi.tree_value_chooser_combo', BI.TreeValueChooserCombo);/** BI.shortcut('bi.tree_value_chooser_combo', BI.TreeValueChooserCombo);/**
* 简单的复选下拉树控件, 适用于数据量少的情况
*
* Created by GUY on 2015/10/29.
* @class BI.TreeValueChooserPane
* @extends BI.AbstractTreeValueChooser
*/
BI.TreeValueChooserPane = BI.inherit(BI.AbstractTreeValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.TreeValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-tree-value-chooser-pane",
items: null,
itemsCreator: BI.emptyFn
});
},
_init: function () {
BI.TreeValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.pane = BI.createWidget({
type: 'bi.multi_select_tree',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this)
});
this.pane.on(BI.MultiSelectTree.EVENT_CHANGE, function () {
self.fireEvent(BI.TreeValueChooserPane.EVENT_CHANGE);
});
if (BI.isNotNull(o.items)) {
this._initData(o.items);
this.populate();
}
},
setValue: function (v) {
this.pane.setValue(v);
},
getValue: function () {
return this.pane.getValue();
},
populate: function () {
this.pane.populate.apply(this.pane, arguments);
}
});
BI.TreeValueChooserPane.EVENT_CHANGE = "TreeValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.tree_value_chooser_pane', BI.TreeValueChooserPane);/**
* 简单的复选下拉框控件, 适用于数据量少的情况 * 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑 * 封装了字段处理逻辑
* *
* Created by GUY on 2015/10/29. * Created by GUY on 2015/10/29.
* @class BI.ValueChooserCombo * @class BI.AbstractValueChooser
* @extends BI.Widget * @extends BI.Widget
*/ */
BI.ValueChooserCombo = BI.inherit(BI.Widget, { BI.AbstractValueChooser = BI.inherit(BI.Widget, {
_const: { _const: {
perPage: 10 perPage: 100
}, },
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.AbstractValueChooser.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-combo",
width: 200,
height: 30,
items: null, items: null,
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn,
cache: true cache: true
}); });
}, },
_init: function () { _valueFormatter: function (v) {
BI.ValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: function (v) {
var text = v; var text = v;
if (BI.isNotNull(self.items)) { if (BI.isNotNull(this.items)) {
BI.some(self.items, function (i, item) { BI.some(this.items, function (i, item) {
if (item.value === v) { if (item.value === v) {
text = item.text; text = item.text;
return true; return true;
@ -17730,14 +17853,6 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
} }
return text; return text;
}, },
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.ValueChooserCombo.EVENT_CONFIRM);
});
},
_getItemsByTimes: function (items, times) { _getItemsByTimes: function (items, times) {
var res = []; var res = [];
@ -17791,6 +17906,46 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
hasNext: self._hasNextByTimes(items, options.times) hasNext: self._hasNextByTimes(items, options.times)
}); });
} }
}
});/**
* 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.ValueChooserCombo
* @extends BI.Widget
*/
BI.ValueChooserCombo = BI.inherit(BI.AbstractValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-combo",
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.ValueChooserCombo.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.combo = BI.createWidget({
type: 'bi.multi_select_combo',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this),
width: o.width,
height: o.height
});
this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {
self.fireEvent(BI.ValueChooserCombo.EVENT_CONFIRM);
});
}, },
setValue: function (v) { setValue: function (v) {
@ -17810,4 +17965,59 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
} }
}); });
BI.ValueChooserCombo.EVENT_CONFIRM = "ValueChooserCombo.EVENT_CONFIRM"; BI.ValueChooserCombo.EVENT_CONFIRM = "ValueChooserCombo.EVENT_CONFIRM";
BI.shortcut('bi.value_chooser_combo', BI.ValueChooserCombo); BI.shortcut('bi.value_chooser_combo', BI.ValueChooserCombo);/**
* 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.ValueChooserPane
* @extends BI.Widget
*/
BI.ValueChooserPane = BI.inherit(BI.AbstractValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.ValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-pane",
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.ValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.list = BI.createWidget({
type: 'bi.multi_select_list',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this)
});
this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {
self.fireEvent(BI.ValueChooserPane.EVENT_CHANGE);
});
if (BI.isNotNull(o.items)) {
this.items = o.items;
this.populate();
}
},
setValue: function (v) {
this.list.setValue(v);
},
getValue: function () {
var val = this.list.getValue() || {};
return {
type: val.type,
value: val.value
}
},
populate: function () {
this.list.populate.apply(this.list, arguments);
}
});
BI.ValueChooserPane.EVENT_CHANGE = "ValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.value_chooser_pane', BI.ValueChooserPane);

4
src/base/collection/collection.js

@ -9,8 +9,8 @@ BI.CollectionView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-collection", baseCls: "bi-collection",
width: 400, // width: 400, //必设
height: 300, // height: 300, //必设
overflowX: true, overflowX: true,
overflowY: true, overflowY: true,
cellSizeAndPositionGetter: BI.emptyFn, cellSizeAndPositionGetter: BI.emptyFn,

0
src/base/foundation/bi.message.js → src/base/foundation/message.js

12
src/base/grid/grid.js

@ -9,16 +9,16 @@ BI.GridView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.GridView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.GridView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-grid-view", baseCls: "bi-grid-view",
width: 400, // width: 400, //必设
height: 300, // height: 300, //必设
overflowX: true, overflowX: true,
overflowY: true, overflowY: true,
overscanColumnCount: 0, overscanColumnCount: 0,
overscanRowCount: 0, overscanRowCount: 0,
rowHeightGetter: BI.emptyFn, rowHeightGetter: BI.emptyFn, //number类型或function类型
columnWidthGetter: BI.emptyFn, columnWidthGetter: BI.emptyFn, //number类型或function类型
estimatedColumnSize: 100, // estimatedColumnSize: 100, //columnWidthGetter为function时必设
estimatedRowSize: 30, // estimatedRowSize: 30, //rowHeightGetter为function时必设
scrollLeft: 0, scrollLeft: 0,
scrollTop: 0, scrollTop: 0,
items: [] items: []

2
src/base/layer/layer.popup.js

@ -6,7 +6,7 @@
BI.PopupView = BI.inherit(BI.Widget, { BI.PopupView = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-list-view", baseCls: "bi-popup-view",
maxWidth: 'auto', maxWidth: 'auto',
minWidth: 100, minWidth: 100,
//maxHeight: 200, //maxHeight: 200,

110
src/base/list/listview.js

@ -0,0 +1,110 @@
/**
* 表示当前对象
*
* Created by GUY on 2017/5/23.
* @class BI.ListView
* @extends BI.Widget
*/
BI.ListView = BI.inherit(BI.Widget, {
props: function () {
return {
baseCls: "bi-list-view",
overscanHeight: 100,
blockSize: 10,
scrollTop: 0,
el: {},
items: []
};
},
init: function () {
var self = this;
this.renderedIndex = -1;
this.cache = {};
},
render: function () {
var self = this, o = this.options;
return {
type: "bi.vertical",
items: [BI.extend({
type: "bi.vertical",
scrolly: false,
ref: function () {
self.container = this;
}
}, o.el)],
element: this
}
},
mounted: function () {
var self = this, o = this.options;
this._populate();
this.element.scroll(function (e) {
o.scrollTop = self.element.scrollTop();
self._calculateBlocksToRender();
});
BI.ResizeDetector.addResizeListener(this, function () {
self._calculateBlocksToRender();
});
},
_renderMoreIf: function () {
var self = this, o = this.options;
var height = this.element.height();
var minContentHeight = o.scrollTop + height + o.overscanHeight;
var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,
cnt = this.renderedIndex + 1;
var lastHeight;
var getElementHeight = function () {
return self.container.element.height();
};
while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {
var items = o.items.slice(index, index + o.blockSize);
this.container.addItems(items);
var addedHeight = getElementHeight() - lastHeight;
this.cache[cnt] = {
index: index,
scrollTop: lastHeight,
height: addedHeight
};
this.renderedIndex = cnt;
cnt++;
index += o.blockSize;
}
},
_calculateBlocksToRender: function () {
var o = this.options;
this._renderMoreIf();
},
_populate: function (items) {
var o = this.options;
if (items && this.options.items !== items) {
this.options.items = items;
}
this._calculateBlocksToRender();
this.element.scrollTop(o.scrollTop);
},
restore: function () {
this.renderedIndex = -1;
this.container.empty();
this.cache = {};
},
populate: function (items) {
if (items && this.options.items !== items) {
this.restore();
}
this._populate();
},
destroyed: function () {
this.restore();
}
});
BI.shortcut('bi.list_view', BI.ListView);

179
src/base/list/virtuallist.js

@ -0,0 +1,179 @@
/**
* 表示当前对象
*
* Created by GUY on 2017/5/22.
* @class BI.VirtualList
* @extends BI.Widget
*/
BI.VirtualList = BI.inherit(BI.Widget, {
props: function () {
return {
baseCls: "bi-virtual-list",
overscanHeight: 100,
blockSize: 10,
scrollTop: 0,
items: []
};
},
init: function () {
var self = this;
this.renderedIndex = -1;
this.cache = {};
},
render: function () {
var self = this, o = this.options;
return {
type: "bi.vertical",
items: [{
type: "bi.layout",
ref: function () {
self.topBlank = this;
}
}, {
type: "bi.vertical",
scrolly: false,
ref: function () {
self.container = this;
}
}, {
type: "bi.layout",
ref: function () {
self.bottomBlank = this;
}
}],
element: this
}
},
mounted: function () {
var self = this, o = this.options;
this._populate();
this.element.scroll(function (e) {
o.scrollTop = self.element.scrollTop();
self._calculateBlocksToRender();
});
BI.ResizeDetector.addResizeListener(this, function () {
self._calculateBlocksToRender();
});
},
_renderMoreIf: function () {
var self = this, o = this.options;
var height = this.element.height();
var minContentHeight = o.scrollTop + height + o.overscanHeight;
var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,
cnt = this.renderedIndex + 1;
var lastHeight;
var getElementHeight = function () {
return self.container.element.height() + self.topBlank.element.height() + self.bottomBlank.element.height();
};
while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {
var items = o.items.slice(index, index + o.blockSize);
this.container.addItems(items);
var addedHeight = getElementHeight() - lastHeight;
this.cache[cnt] = {
index: index,
scrollTop: lastHeight,
height: addedHeight
};
this.tree.set(cnt, addedHeight);
this.renderedIndex = cnt;
cnt++;
index += o.blockSize;
}
},
_calculateBlocksToRender: function () {
var o = this.options;
this._renderMoreIf();
var height = this.element.height();
var minContentHeightFrom = o.scrollTop - o.overscanHeight;
var minContentHeightTo = o.scrollTop + height + o.overscanHeight;
var start = this.tree.greatestLowerBound(minContentHeightFrom);
var end = this.tree.leastUpperBound(minContentHeightTo);
var needDestroyed = [];
for (var i = 0; i < start; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
needDestroyed.push(this.container._children[j]);
this.container._children[j] = null;
}
this.cache[i].destroyed = true;
}
}
for (var i = end + 1; i <= this.renderedIndex; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
needDestroyed.push(this.container._children[j]);
this.container._children[j] = null;
}
this.cache[i].destroyed = true;
}
}
var firstFragment = document.createDocumentFragment(), lastFragment = document.createDocumentFragment();
var currentFragment = firstFragment;
for (var i = (start < 0 ? 0 : start); i <= end && i <= this.renderedIndex; i++) {
var index = this.cache[i].index;
if (!this.cache[i].destroyed) {
currentFragment = lastFragment;
}
if (this.cache[i].destroyed === true) {
for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {
var w = this.container._addElement(j, BI.extend({root: true}, BI.stripEL(o.items[j])));
currentFragment.appendChild(w.element[0]);
}
this.cache[i].destroyed = false;
}
}
this.container.element.prepend(firstFragment);
this.container.element.append(lastFragment);
this.topBlank.setHeight(this.cache[start < 0 ? 0 : start].scrollTop);
var lastCache = this.cache[Math.min(end, this.renderedIndex)];
this.bottomBlank.setHeight(this.tree.sumTo(this.renderedIndex) - lastCache.scrollTop - lastCache.height);
BI.each(needDestroyed, function (i, child) {
child && child._destroy();
});
},
_populate: function (items) {
var o = this.options;
if (items && this.options.items !== items) {
this.options.items = items;
}
this.tree = BI.PrefixIntervalTree.empty(Math.ceil(o.items.length / o.blockSize));
this._calculateBlocksToRender();
this.element.scrollTop(o.scrollTop);
},
_clearChildren: function () {
BI.each(this.container._children, function (i, cell) {
cell && cell.el._destroy();
});
this.container._children = {};
this.container.attr("items", []);
},
restore: function () {
this.renderedIndex = -1;
this._clearChildren();
this.cache = {};
this.options.scrollTop = 0;
},
populate: function (items) {
if (items && this.options.items !== items) {
this.restore();
}
this._populate();
},
destroyed: function () {
this.restore();
}
});
BI.shortcut('bi.virtual_list', BI.VirtualList);

13
src/base/single/button/button.basic.js

@ -214,7 +214,7 @@ BI.BasicButton = BI.inherit(BI.Single, {
if (!self.isEnabled() || (self.isOnce() && self.isSelected())) { if (!self.isEnabled() || (self.isOnce() && self.isSelected())) {
return; return;
} }
onClick.apply(self); onClick.apply(self, arguments);
} }
}, },
@ -233,13 +233,20 @@ BI.BasicButton = BI.inherit(BI.Single, {
} }
}, },
_doClick: function () { _doClick: function (e) {
if (this.isValid()) {
this.beforeClick(e);
}
this._trigger(); this._trigger();
if (this.isValid()) { if (this.isValid()) {
this.doClick(); this.doClick(e);
} }
}, },
beforeClick: function () {
},
doClick: function () { doClick: function () {
}, },

5
src/base/single/editor/editor.js

@ -292,11 +292,6 @@ BI.Editor = BI.inherit(BI.Single, {
return BI.trim(this.editor.getValue()); return BI.trim(this.editor.getValue());
}, },
setValid: function (b) {
BI.Editor.superclass.setValid.apply(this, arguments);
this.editor.setValid(b);
},
isEditing: function () { isEditing: function () {
return this.editor.isEditing(); return this.editor.isEditing();
}, },

8
src/base/single/editor/editor.textarea.js

@ -149,10 +149,10 @@ BI.TextAreaEditor = BI.inherit(BI.Single, {
return this.style; return this.style;
}, },
setValid: function (b) { _setValid: function (b) {
BI.TextAreaEditor.superclass.setValid.apply(this, arguments); BI.TextAreaEditor.superclass._setValid.apply(this, arguments);
this.content.setValid(b); // this.content.setValid(b);
this.watermark && this.watermark.setValid(b); // this.watermark && this.watermark.setValid(b);
} }
}); });
BI.TextAreaEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.TextAreaEditor.EVENT_CHANGE = "EVENT_CHANGE";

4
src/base/single/input/input.js

@ -241,8 +241,8 @@ BI.Input = BI.inherit(BI.Single, {
return this._lastValidValue; return this._lastValidValue;
}, },
setValid: function () { _setValid: function () {
BI.Input.superclass.setValid.apply(this, arguments); BI.Input.superclass._setValid.apply(this, arguments);
if (this.isValid()) { if (this.isValid()) {
this._lastValidValue = this.getValue(); this._lastValidValue = this.getValue();
this.element.removeClass("bi-input-error"); this.element.removeClass("bi-input-error");

2
src/base/tree/asynctree.js

@ -187,7 +187,7 @@ BI.AsyncTree = BI.inherit(BI.TreeView, {
} }
var checkedValues = this._getSelectedValues(); var checkedValues = this._getSelectedValues();
if (BI.isEmpty(checkedValues)) { if (BI.isEmpty(checkedValues)) {
return this.selectedValues; return BI.deepClone(this.selectedValues);
} }
if (BI.isEmpty(this.selectedValues)) { if (BI.isEmpty(this.selectedValues)) {
return checkedValues; return checkedValues;

2
src/base/tree/parttree.js

@ -46,7 +46,7 @@ BI.PartTree = BI.inherit(BI.AsyncTree, {
BI.AsyncTree.superclass._selectTreeNode.apply(self, arguments); BI.AsyncTree.superclass._selectTreeNode.apply(self, arguments);
} else { } else {
o.itemsCreator(BI.extend({}, o.paras, { o.itemsCreator(BI.extend({}, o.paras, {
type: BI.TreeView.REQ_TYPE_CALCULATE_SELECT_DATA, type: BI.TreeView.REQ_TYPE_SELECT_DATA,
selectedValues: this.selectedValues, selectedValues: this.selectedValues,
notSelectedValue: name, notSelectedValue: name,
parentValues: parentValues parentValues: parentValues

19
src/base/tree/treeview.js

@ -216,7 +216,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
_getNodeValue: function (node) { _getNodeValue: function (node) {
//去除标红 //去除标红
return node.value || node.text.replace(/<[^>]+>/g, ""); return node.value == null ? node.text.replace(/<[^>]+>/g, "") : node.value;
}, },
//获取半选框值 //获取半选框值
@ -308,6 +308,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
var self = this, o = this.options; var self = this, o = this.options;
var ns = BI.Tree.arrayFormat(nodes); var ns = BI.Tree.arrayFormat(nodes);
BI.each(ns, function (i, n) { BI.each(ns, function (i, n) {
n.title = n.title || n.text || n.value;
//处理标红 //处理标红
if (BI.isKey(o.paras.keyword)) { if (BI.isKey(o.paras.keyword)) {
n.text = $("<div>").__textKeywordMarked__(n.text, o.paras.keyword, n.py).html(); n.text = $("<div>").__textKeywordMarked__(n.text, o.paras.keyword, n.py).html();
@ -442,6 +443,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
this.nodes && this.nodes.expandAll(flag); this.nodes && this.nodes.expandAll(flag);
}, },
//设置树节点的状态
setValue: function (value, param) { setValue: function (value, param) {
this.setSelectedValue(value); this.setSelectedValue(value);
this.checkAll(false); this.checkAll(false);
@ -450,7 +452,7 @@ BI.TreeView = BI.inherit(BI.Pane, {
}, },
setSelectedValue: function (value) { setSelectedValue: function (value) {
this.options.paras.selectedValues = value || {}; this.options.paras.selectedValues = BI.deepClone(value) || {};
this.selectedValues = BI.deepClone(value) || {}; this.selectedValues = BI.deepClone(value) || {};
}, },
@ -469,12 +471,6 @@ BI.TreeView = BI.inherit(BI.Pane, {
}); });
}, },
getExpandedValue: function(){
if (!this.nodes) {
return null;
}
},
refresh: function () { refresh: function () {
this.nodes && this.nodes.refresh(); this.nodes && this.nodes.refresh();
}, },
@ -486,14 +482,9 @@ BI.TreeView = BI.inherit(BI.Pane, {
return this._getSelectedValues(); return this._getSelectedValues();
}, },
empty: function () { destroyed: function () {
BI.isNotNull(this.nodes) && this.nodes.destroy();
},
destroy: function () {
this.stop(); this.stop();
this.nodes && this.nodes.destroy(); this.nodes && this.nodes.destroy();
BI.TreeView.superclass.destroy.apply(this, arguments);
} }
}); });
BI.extend(BI.TreeView, { BI.extend(BI.TreeView, {

1319
src/case/clipboard/clipboard.js

File diff suppressed because it is too large Load Diff

46
src/case/clipboard/index.js

@ -0,0 +1,46 @@
/**
* 复制
* 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", function (e) {
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);

4
src/case/editor/editor.search.js

@ -158,10 +158,6 @@ BI.SearchEditor = BI.inherit(BI.Widget, {
} }
}, },
setValid: function (b) {
this.editor.setValid(b);
},
isEditing: function () { isEditing: function () {
return this.editor.isEditing(); return this.editor.isEditing();
}, },

5
src/case/editor/editor.sign.js

@ -206,11 +206,6 @@ BI.SignEditor = BI.inherit(BI.Widget, {
return this.editor.isValid(); return this.editor.isValid();
}, },
setValid: function (v) {
BI.SignEditor.superclass.setValid.apply(this, arguments);
this.editor.setValid(v);
},
setErrorText: function (text) { setErrorText: function (text) {
this.editor.setErrorText(text); this.editor.setErrorText(text);
}, },

14
src/case/toolbar/toolbar.multiselect.js

@ -12,7 +12,8 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
height: 25, height: 25,
text: BI.i18nText('BI-Select_All'), text: BI.i18nText('BI-Select_All'),
isAllCheckedBySelectedValue: BI.emptyFn, isAllCheckedBySelectedValue: BI.emptyFn,
onCheck: BI.emptyFn, //手动控制选中
disableSelected: true,
isHalfCheckedBySelectedValue: function (selectedValues) { isHalfCheckedBySelectedValue: function (selectedValues) {
return selectedValues.length > 0; return selectedValues.length > 0;
} }
@ -26,7 +27,6 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
stopPropagation: true, stopPropagation: true,
handler: function () { handler: function () {
self.setSelected(self.isSelected()); self.setSelected(self.isSelected());
o.onCheck.call(self, self.isSelected());
} }
}); });
this.half = BI.createWidget({ this.half = BI.createWidget({
@ -34,7 +34,6 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
stopPropagation: true, stopPropagation: true,
handler: function () { handler: function () {
self.setSelected(true); self.setSelected(true);
o.onCheck.call(self, self.isSelected());
} }
}); });
this.checkbox.on(BI.Controller.EVENT_CHANGE, function () { this.checkbox.on(BI.Controller.EVENT_CHANGE, function () {
@ -77,19 +76,14 @@ BI.MultiSelectBar = BI.inherit(BI.BasicButton, {
this.half.invisible(); this.half.invisible();
}, },
doClick: function () { //自己手动控制选中
beforeClick: function () {
var isHalf = this.isHalfSelected(), isSelected = this.isSelected(); var isHalf = this.isHalfSelected(), isSelected = this.isSelected();
if (isHalf === true) { if (isHalf === true) {
this.setSelected(true); this.setSelected(true);
} else { } else {
this.setSelected(!isSelected); this.setSelected(!isSelected);
} }
if (this.isValid()) {
this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, this.getValue(), this);
this.options.onCheck.call(this, this.isSelected());
this.fireEvent(BI.MultiSelectBar.EVENT_CHANGE, this.isSelected(), this);
}
}, },
setSelected: function (v) { setSelected: function (v) {

495
src/case/zclip/jquery.zclip.js

@ -1,495 +0,0 @@
/*
* 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 += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="' + protocol + 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="' + width + '" height="' + height + '" id="' + this.movieId + '" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="' + ZeroClipboard.moviePath + '" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="' + flashvars + '"/><param name="wmode" value="transparent"/></object>';
} else {
// all other browsers get an EMBED tag
html += '<embed id="' + this.movieId + '" src="' + ZeroClipboard.moviePath + '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="' + width + '" height="' + height + '" name="' + this.movieId + '" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + flashvars + '" wmode="transparent" />';
}
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
}
};

31
src/case/zclip/zclip.js

@ -1,31 +0,0 @@
/**
* 复制
* Created by GUY on 2016/2/16.
* @class BI.ZeroClip
* @extends BI.BasicButton
*/
BI.ZeroClip = BI.inherit(BI.BasicButton, {
_defaultConfig: function () {
return BI.extend(BI.ZeroClip.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-zero-clip",
copy: BI.emptyFn,
beforeCopy: BI.emptyFn,
afterCopy: BI.emptyFn
})
},
_init: function () {
BI.ZeroClip.superclass._init.apply(this, arguments);
var self = this, o = this.options;
BI.nextTick(function () {
self.element.zclip({
path: BI.resourceURL + "/ZeroClipboard.swf",
copy: o.copy,
beforeCopy: o.beforeCopy,
afterCopy: o.afterCopy
});
});
}
});
BI.shortcut("bi.zero_clip", BI.ZeroClip);

79
src/component/allvaluechooser/abstract.allvaluechooser.js

@ -0,0 +1,79 @@
/**
* 简单的复选下拉框控件, 适用于数据量少的情况 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.AbstractAllValueChooser
* @extends BI.Widget
*/
BI.AbstractAllValueChooser = BI.inherit(BI.Widget, {
_const: {
perPage: 100
},
_defaultConfig: function () {
return BI.extend(BI.AbstractAllValueChooser.superclass._defaultConfig.apply(this, arguments), {
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_valueFormatter: function (v) {
var text = v;
if (BI.isNotNull(this.items)) {
BI.some(this.items, function (i, item) {
if (item.value === v) {
text = item.text;
return true;
}
});
}
return text;
},
_itemsCreator: function (options, callback) {
var self = this, o = this.options;
if (!o.cache || !this.items) {
o.itemsCreator({}, function (items) {
self.items = items;
call(items);
});
} else {
call(this.items);
}
function call(items) {
var keywords = (options.keywords || []).slice();
if (options.keyword) {
keywords.push(options.keyword);
}
BI.each(keywords, function (i, kw) {
var search = BI.Func.getSearchResult(items, kw);
items = search.matched.concat(search.finded);
});
if (options.selectedValues) {//过滤
var filter = BI.makeObject(options.selectedValues, true);
items = BI.filter(items, function (i, ob) {
return !filter[ob.value];
});
}
if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) {
callback({
items: items
});
return;
}
if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {
callback({count: items.length});
return;
}
callback({
items: items,
hasNext: false
});
}
}
});

62
src/component/allvaluechooser/combo.allvaluechooser.js

@ -4,13 +4,10 @@
* *
* Created by GUY on 2015/10/29. * Created by GUY on 2015/10/29.
* @class BI.AllValueChooserCombo * @class BI.AllValueChooserCombo
* @extends BI.Widget * @extends BI.AbstractAllValueChooser
*/ */
BI.AllValueChooserCombo = BI.inherit(BI.Widget, { BI.AllValueChooserCombo = BI.inherit(BI.AbstractAllValueChooser, {
_const: {
perPage: 10
},
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-all-value-chooser-combo", baseCls: "bi-all-value-chooser-combo",
@ -32,18 +29,7 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
type: 'bi.multi_select_combo', type: 'bi.multi_select_combo',
element: this, element: this,
itemsCreator: BI.bind(this._itemsCreator, this), itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: function (v) { valueFormatter: BI.bind(this._valueFormatter, this),
var text = v;
if (BI.isNotNull(self.items)) {
BI.some(self.items, function (i, item) {
if (item.value === v) {
text = item.text;
return true;
}
});
}
return text;
},
width: o.width, width: o.width,
height: o.height height: o.height
}); });
@ -53,48 +39,6 @@ BI.AllValueChooserCombo = BI.inherit(BI.Widget, {
}); });
}, },
_itemsCreator: function (options, callback) {
var self = this, o = this.options;
if (!o.cache || !this.items) {
o.itemsCreator({}, function (items) {
self.items = items;
call(items);
});
} else {
call(this.items);
}
function call(items) {
var keywords = (options.keywords || []).slice();
if (options.keyword) {
keywords.push(options.keyword);
}
BI.each(keywords, function (i, kw) {
var search = BI.Func.getSearchResult(items, kw);
items = search.matched.concat(search.finded);
});
if (options.selectedValues) {//过滤
var filter = BI.makeObject(options.selectedValues, true);
items = BI.filter(items, function (i, ob) {
return !filter[ob.value];
});
}
if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) {
callback({
items: items
});
return;
}
if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {
callback({count: items.length});
return;
}
callback({
items: items,
hasNext: false
});
}
},
setValue: function (v) { setValue: function (v) {
this.combo.setValue({ this.combo.setValue({
type: BI.Selection.Multi, type: BI.Selection.Multi,

62
src/component/allvaluechooser/pane.allvaluechooser.js

@ -0,0 +1,62 @@
/**
* 简单的复选下拉框控件, 适用于数据量少的情况 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.AllValueChooserPane
* @extends BI.AbstractAllValueChooser
*/
BI.AllValueChooserPane = BI.inherit(BI.AbstractAllValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.AllValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-all-value-chooser-pane",
width: 200,
height: 30,
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.AllValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options;
if (BI.isNotNull(o.items)) {
this.items = o.items;
}
this.list = BI.createWidget({
type: 'bi.multi_select_list',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this),
width: o.width,
height: o.height
});
this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {
self.fireEvent(BI.AllValueChooserPane.EVENT_CHANGE);
});
},
setValue: function (v) {
this.list.setValue({
type: BI.Selection.Multi,
value: v || []
});
},
getValue: function () {
var val = this.list.getValue() || {};
if (val.type === BI.Selection.All) {
return val.assist;
}
return val.value || [];
},
populate: function () {
this.list.populate.apply(this.list, arguments);
}
});
BI.AllValueChooserPane.EVENT_CHANGE = "AllValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.all_value_chooser_pane', BI.AllValueChooserPane);

548
src/component/treevaluechooser/abstract.treevaluechooser.js

@ -0,0 +1,548 @@
BI.AbstractTreeValueChooser = BI.inherit(BI.Widget, {
_const: {
perPage: 100
},
_defaultConfig: function () {
return BI.extend(BI.AbstractTreeValueChooser.superclass._defaultConfig.apply(this, arguments), {
items: null,
itemsCreator: BI.emptyFn
});
},
_initData: function (items) {
this.items = items;
var nodes = BI.Tree.treeFormat(items);
this.tree = new BI.Tree();
this.tree.initTree(nodes);
},
_itemsCreator: function (options, callback) {
var self = this, o = this.options;
if (!this.items) {
o.itemsCreator({}, function (items) {
self._initData(items);
call();
});
} else {
call();
}
function call() {
switch (options.type) {
case BI.TreeView.REQ_TYPE_INIT_DATA:
self._reqInitTreeNode(options, callback);
break;
case BI.TreeView.REQ_TYPE_ADJUST_DATA:
self._reqAdjustTreeNode(options, callback);
break;
case BI.TreeView.REQ_TYPE_SELECT_DATA:
self._reqSelectedTreeNode(options, callback);
break;
case BI.TreeView.REQ_TYPE_GET_SELECTED_DATA:
self._reqDisplayTreeNode(options, callback);
break;
default :
self._reqTreeNode(options, callback);
break;
}
}
},
_reqDisplayTreeNode: function (op, callback) {
var self = this;
var result = [];
var selectedValues = op.selectedValues;
if (selectedValues == null || BI.isEmpty(selectedValues)) {
callback({});
return;
}
doCheck([], this.tree.getRoot(), selectedValues);
callback({
items: result
});
function doCheck(parentValues, node, selected) {
if (selected == null || BI.isEmpty(selected)) {
BI.each(node.getChildren(), function (i, child) {
var newParents = BI.clone(parentValues);
newParents.push(child.value);
var llen = self._getChildCount(newParents);
createOneJson(child, node.id, llen);
doCheck(newParents, child, {});
});
return;
}
BI.each(selected, function (k) {
var node = self._getNode(parentValues, k);
var newParents = BI.clone(parentValues);
newParents.push(node.value);
createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents));
doCheck(newParents, node, selected[k]);
})
}
function getCount(jo, parentValues) {
if (jo == null) {
return 0;
}
if (BI.isEmpty(jo)) {
return self._getChildCount(parentValues);
}
return BI.size(jo);
}
function createOneJson(node, pId, llen) {
result.push({
id: node.id,
pId: pId,
text: node.text + (llen > 0 ? ("(" + BI.i18nText("BI-Basic_Altogether") + llen + BI.i18nText("BI-Basic_Count") + ")") : ""),
value: node.value,
open: true
});
}
},
_reqSelectedTreeNode: function (op, callback) {
var self = this;
var selectedValues = op.selectedValues;
var notSelectedValue = op.notSelectedValue || {};
var keyword = op.keyword || "";
var parentValues = op.parentValues || [];
if (selectedValues == null || BI.isEmpty(selectedValues)) {
callback({});
return;
}
dealWithSelectedValues(selectedValues);
callback(selectedValues);
function dealWithSelectedValues(selectedValues) {
var p = BI.clone(parentValues);
p.push(notSelectedValue);
if (isChild(selectedValues, p)) {
var result = [];
var finded = search(parentValues.length + 1, parentValues, notSelectedValue, result);
if (finded === true) {
var next = selectedValues;
BI.each(p, function (i, v) {
var t = next[v];
if (t == null) {
if (BI.isEmpty(next)) {
var split = p.slice(0, i);
var expanded = self._getChildren(split);
BI.each(expanded, function (m, child) {
if (i === p.length - 1 && child.value === notSelectedValue) {
return true;
}
next[child.value] = {};
});
next = next[v];
} else {
next = {};
next[v] = {};
}
} else {
next = t;
}
});
if (result.length > 0) {
BI.each(result, function (i, strs) {
self._buildTree(selectedValues, strs);
})
}
}
}
}
function search(deep, parents, current, result) {
var newParents = BI.clone(parents);
newParents.push(current);
if (self._isMatch(current, keyword)) {
return true;
}
var children = self._getChildren(newParents);
var notSearch = [];
var can = false;
BI.each(children, function (i, child) {
if (search(deep + 1, newParents, child.value, result)) {
can = true;
} else {
notSearch.push(child.value);
}
});
if (can === true) {
BI.each(notSearch, function (i, v) {
var next = BI.clone(newParents);
next.push(v);
result.push(next);
});
}
return can;
}
function isChild(selectedValues, parents) {
var t = selectedValues;
for (var i = 0; i < parents.length; i++) {
var v = parents[i];
if (!BI.has(t, v)) {
return false;
}
t = t[v];
if (t == null || BI.isEmpty(t)) {
return true;
}
}
return true;
}
},
_reqAdjustTreeNode: function (op, callback) {
var self = this;
var result = [];
var selectedValues = op.selectedValues;
if (selectedValues == null || BI.isEmpty(selectedValues)) {
callback({});
return;
}
BI.each(selectedValues, function (k, v) {
result.push([k]);
});
dealWithSelectedValues(selectedValues, []);
var jo = {};
BI.each(result, function (i, strs) {
self._buildTree(jo, strs);
});
callback(jo);
function dealWithSelectedValues(selected, parents) {
if (selected == null || BI.isEmpty(selected)) {
return true;
}
var can = true;
BI.each(selected, function (k, v) {
var p = BI.clone(parents);
p.push(k);
if (!dealWithSelectedValues(selected[k], p)) {
BI.each(selected[k], function (nk, nv) {
var t = BI.clone(p);
t.push(nk);
result.push(t);
});
can = false;
}
});
return can && isAllSelected(selected, parents);
}
function isAllSelected(selected, parents) {
return BI.isEmpty(selected) || self._getChildCount(parents) === BI.size(selected);
}
},
_reqInitTreeNode: function (op, callback) {
var self = this;
var result = [];
var keyword = op.keyword || "";
var selectedValues = op.selectedValues;
var lastSearchValue = op.lastSearchValue || "";
var output = search();
BI.nextTick(function () {
callback({
hasNext: output.length > self._const.perPage,
items: result,
lastSearchValue: BI.last(output)
})
});
function search() {
var children = self._getChildren([]);
var start = children.length;
if (lastSearchValue !== "") {
for (var j = 0, len = start; j < len; j++) {
if (children[j].value === lastSearchValue) {
start = j + 1;
break;
}
}
} else {
start = 0;
}
var output = [];
for (var i = start, len = children.length; i < len; i++) {
if (output.length < self._const.perPage) {
var find = nodeSearch(1, [], children[i].value, false, result);
} else if (output.length === self._const.perPage) {
var find = nodeSearch(1, [], children[i].value, false, []);
}
if (find[0] === true) {
output.push(children[i].value);
}
if (output.length > self._const.perPage) {
break;
}
}
return output;
}
function nodeSearch(deep, parentValues, current, isAllSelect, result) {
if (self._isMatch(current, keyword)) {
var checked = isAllSelect || isSelected(parentValues, current);
createOneJson(parentValues, current, false, checked, !isAllSelect && isHalf(parentValues, current), true, result);
return [true, checked];
}
var newParents = BI.clone(parentValues);
newParents.push(current);
var children = self._getChildren(newParents);
var can = false, checked = false;
var isCurAllSelected = isAllSelect || isAllSelected(parentValues, current);
BI.each(children, function (i, child) {
var state = nodeSearch(deep + 1, newParents, child.value, isCurAllSelected, result);
if (state[1] === true) {
checked = true;
}
if (state[0] === true) {
can = true;
}
});
if (can === true) {
checked = isCurAllSelected || (isSelected(parentValues, current) && checked);
createOneJson(parentValues, current, true, checked, false, false, result);
}
return [can, checked];
}
function createOneJson(parentValues, value, isOpen, checked, half, flag, result) {
var node = self._getNode(parentValues, value)
result.push({
id: node.id,
pId: node.pId,
text: node.text,
value: node.value,
title: node.title,
isParent: node.getChildrenLength() > 0,
open: isOpen,
checked: checked,
halfCheck: half,
flag: flag
});
}
function isHalf(parentValues, value) {
var find = findSelectedObj(parentValues);
if (find == null) {
return null;
}
return BI.any(find, function (v, ob) {
if (v === value) {
if (ob != null && !BI.isEmpty(ob)) {
return true;
}
}
});
}
function isAllSelected(parentValues, value) {
var find = findSelectedObj(parentValues);
if (find == null) {
return null;
}
return BI.any(find, function (v, ob) {
if (v === value) {
if (ob != null && BI.isEmpty(ob)) {
return true;
}
}
});
}
function isSelected(parentValues, value) {
var find = findSelectedObj(parentValues);
if (find == null) {
return false;
}
return BI.any(find, function (v) {
if (v === value) {
return true;
}
});
}
function findSelectedObj(parentValues) {
var find = selectedValues;
if (find == null) {
return null;
}
BI.every(parentValues, function (i, v) {
find = find[v];
if (find == null) {
return false;
}
return true;
});
return find;
}
},
_reqTreeNode: function (op, callback) {
var self = this;
var result = [];
var times = op.times;
var checkState = op.checkState || {};
var parentValues = op.parentValues || [];
var selectedValues = op.selectedValues;
var valueMap = {};
if (judgeState(parentValues, selectedValues, checkState)) {
valueMap = dealWidthSelectedValue(parentValues, selectedValues);
}
var nodes = this._getChildren(parentValues);
for (var i = (times - 1) * this._const.perPage; nodes[i] && i < times * this._const.perPage; i++) {
var state = getCheckState(nodes[i].value, parentValues, valueMap, checkState);
result.push({
id: nodes[i].id,
pId: nodes[i].pId,
value: nodes[i].value,
text: nodes[i].text,
times: 1,
isParent: nodes[i].getChildrenLength() > 0,
checked: state[0],
halfCheck: state[1]
})
}
BI.nextTick(function () {
callback({
items: result,
hasNext: nodes.length > times * self._const.perPage
});
});
function judgeState(parentValues, selected_value, checkState) {
var checked = checkState.checked, half = checkState.half;
if (parentValues.length > 0 && !checked) {
return false;
}
return (parentValues.length === 0 || (checked && half) && !BI.isEmpty(selected_value));
}
function dealWidthSelectedValue(parentValues, selectedValues) {
var valueMap = {};
BI.each(parentValues, function (i, v) {
selectedValues = selectedValues[v];
});
BI.each(selectedValues, function (value, obj) {
if (BI.isNull(obj)) {
valueMap[value] = [0, 0];
return;
}
if (BI.isEmpty(obj)) {
valueMap[value] = [2, 0];
return;
}
var nextNames = {};
BI.each(obj, function (t, o) {
if (BI.isNull(o) || BI.isEmpty(o)) {
nextNames[t] = true;
}
});
valueMap[value] = [1, BI.size(nextNames)];
});
return valueMap;
}
function getCheckState(current, parentValues, valueMap, checkState) {
var checked = checkState.checked, half = checkState.half;
var tempCheck = false, halfCheck = false;
if (BI.has(valueMap, current)) {
//可能是半选
if (valueMap[current][0] === 1) {
var values = BI.clone(parentValues);
values.push(current);
var childCount = self._getChildCount(values);
if (childCount > 0 && childCount !== valueMap[current][1]) {
halfCheck = true;
}
} else if (valueMap[current][0] === 2) {
tempCheck = true;
}
}
var check;
if (!checked && !halfCheck && !tempCheck) {
check = BI.has(valueMap, current);
} else {
check = ((tempCheck || checked) && !half) || BI.has(valueMap, current);
}
return [check, halfCheck];
}
},
_buildTree: function (jo, values) {
var t = jo;
BI.each(values, function (i, v) {
if (!BI.has(t, v)) {
t[v] = {};
}
t = t[v];
});
},
_isMatch: function (value, keyword) {
var finded = BI.Func.getSearchResult([value], keyword);
return finded.finded.length > 0 || finded.matched.length > 0;
},
_getNode: function (parentValues, v) {
var self = this;
var findedParentNode;
var index = 0;
this.tree.traverse(function (node) {
if (self.tree.isRoot(node)) {
return;
}
if (index > parentValues.length) {
return false;
}
if (index === parentValues.length && node.value === v) {
findedParentNode = node;
return false;
}
if (node.value === parentValues[index]) {
index++;
return;
}
return true;
});
return findedParentNode;
},
_getChildren: function (parentValues) {
if (parentValues.length > 0) {
var value = BI.last(parentValues);
var parent = this._getNode(parentValues.slice(0, parentValues.length - 1), value);
} else {
var parent = this.tree.getRoot();
}
return parent.getChildren();
},
_getChildCount: function (parentValues) {
return this._getChildren(parentValues).length;
}
});

550
src/component/treevaluechooser/combo.treevaluechooser.js

@ -5,11 +5,7 @@
* @class BI.TreeValueChooserCombo * @class BI.TreeValueChooserCombo
* @extends BI.Widget * @extends BI.Widget
*/ */
BI.TreeValueChooserCombo = BI.inherit(BI.Widget, { BI.TreeValueChooserCombo = BI.inherit(BI.AbstractTreeValueChooser, {
_const: {
perPage: 10
},
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
@ -40,548 +36,6 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
}); });
}, },
_initData: function (items) {
this.items = items;
var nodes = BI.Tree.transformToTreeFormat(items);
this.tree = new BI.Tree();
this.tree.initTree(nodes);
this._initMap();
this._initFloors();
},
_initMap: function () {
var map = this.map = {};
BI.each(this.items, function (i, item) {
map[item.value] = item;
});
},
_initFloors: function () {
this.floors = -1;
var root = this.tree.getRoot();
while (root) {
this.floors++;
root = root.getChildren()[0];
}
},
_itemsCreator: function (options, callback) {
var self = this, o = this.options;
if (!this.items) {
o.itemsCreator({}, function (items) {
self._initData(items);
call();
});
} else {
call();
}
function call() {
switch (options.type) {
case BI.TreeView.REQ_TYPE_INIT_DATA:
self._reqInitTreeNode(options, callback);
break;
case BI.TreeView.REQ_TYPE_ADJUST_DATA:
self._reqAdjustTreeNode(options, callback);
break;
case BI.TreeView.REQ_TYPE_SELECT_DATA:
self._reqSelectedTreeNode(options, callback);
break;
case BI.TreeView.REQ_TYPE_GET_SELECTED_DATA:
self._reqDisplayTreeNode(options, callback);
break;
default :
self._reqTreeNode(options, callback);
break;
}
}
},
_reqDisplayTreeNode: function (op, callback) {
var self = this;
var result = [];
var selectedValues = op.selectedValues;
if (selectedValues == null || BI.isEmpty(selectedValues)) {
callback({});
return;
}
doCheck(0, [], this.tree.getRoot(), selectedValues);
callback({
items: result
});
function doCheck(floor, parentValues, node, selected) {
if (floor >= self.floors) {
return;
}
if (selected == null || BI.isEmpty(selected)) {
BI.each(node.getChildren(), function (i, child) {
var newParents = BI.clone(parentValues);
newParents.push(child.value);
var llen = self._getChildCount(newParents);
createOneJson(child, node.id, llen);
doCheck(floor + 1, newParents, child, {});
});
return;
}
BI.each(selected, function (k) {
var node = self._getNode(k);
var newParents = BI.clone(parentValues);
newParents.push(node.value);
createOneJson(node, BI.last(parentValues), getCount(selected[k], newParents));
doCheck(floor + 1, newParents, node, selected[k]);
})
}
function getCount(jo, parentValues) {
if (jo == null) {
return 0;
}
if (BI.isEmpty(jo)) {
return self._getChildCount(parentValues);
}
return BI.size(jo);
}
function createOneJson(node, pId, llen) {
result.push({
id: node.id,
pId: pId,
text: node.text + (llen > 0 ? ("(" + BI.i18nText("BI-Basic_Altogether") + llen + BI.i18nText("BI-Basic_Count") + ")") : ""),
value: node.value,
open: true
});
}
},
_reqSelectedTreeNode: function (op, callback) {
var self = this;
var selectedValues = op.selectedValues;
var notSelectedValue = op.notSelectedValue || {};
var keyword = op.keyword || "";
var parentValues = op.parentValues || [];
if (selectedValues == null || BI.isEmpty(selectedValues)) {
callback({});
return;
}
dealWithSelectedValues(selectedValues);
callback(selectedValues);
function dealWithSelectedValues(selectedValues) {
var p = BI.clone(parentValues);
p.push(notSelectedValue);
if (isChild(selectedValues, p)) {
var result = [];
var finded = search(parentValues.length + 1, parentValues, notSelectedValue, result);
if (finded === true) {
var next = selectedValues;
BI.each(p, function (i, v) {
var t = next[v];
if (t == null) {
if (BI.isEmpty(next)) {
var split = p.slice(0, i);
var expanded = self._getChildren(split);
BI.each(expanded, function (m, child) {
if (i === p.length - 1 && child.value === notSelectedValue) {
return true;
}
next[child.value] = {};
});
next = next[v];
} else {
next = {};
next[v] = {};
}
} else {
next = t;
}
});
if (result.length > 0) {
BI.each(result, function (i, strs) {
self._buildTree(selectedValues, strs);
})
}
}
}
}
function search(deep, parents, current, result) {
var newParents = BI.clone(parents);
newParents.push(current);
if (self._isMatch(current, keyword)) {
return true;
}
if (deep >= self.floors) {
return false;
}
var children = self._getChildren(newParents);
var notSearch = [];
var can = false;
BI.each(children, function (i, child) {
if (search(deep + 1, newParents, child.value, result)) {
can = true;
} else {
notSearch.push(child.value);
}
});
if (can === true) {
BI.each(notSearch, function (i, v) {
var next = BI.clone(newParents);
next.push(v);
result.push(next);
});
}
return can;
}
function isChild(selectedValues, parents) {
var t = selectedValues;
for (var i = 0; i < parents.length; i++) {
var v = parents[i];
if (!BI.has(t, v)) {
return false;
}
t = t[v];
if (t == null || BI.isEmpty(t)) {
return true;
}
}
return true;
}
},
_reqAdjustTreeNode: function (op, callback) {
var self = this;
var result = [];
var selectedValues = op.selectedValues;
if (selectedValues == null || BI.isEmpty(selectedValues)) {
callback({});
return;
}
BI.each(selectedValues, function (k, v) {
result.push([k]);
});
dealWithSelectedValues(selectedValues, []);
var jo = {};
BI.each(result, function (i, strs) {
self._buildTree(jo, strs);
});
callback(jo);
function dealWithSelectedValues(selected, parents) {
if (selected == null || BI.isEmpty(selected)) {
return true;
}
var can = true;
BI.each(selected, function (k, v) {
var p = BI.clone(parents);
p.push(k);
if (!dealWithSelectedValues(selected[k], p)) {
BI.each(selected[k], function (nk, nv) {
var t = BI.clone(p);
t.push(nk);
result.push(t);
});
can = false;
}
});
return can && isAllSelected(selected, parents);
}
function isAllSelected(selected, parents) {
return BI.isEmpty(selected) || self._getChildCount(parents) === BI.size(selected);
}
},
_reqInitTreeNode: function (op, callback) {
var self = this;
var result = [];
var keyword = op.keyword || "";
var selectedValues = op.selectedValues;
var lastSearchValue = op.lastSearchValue || "";
var output = search();
BI.nextTick(function () {
callback({
hasNext: output.length > self._const.perPage,
items: result,
lastSearchValue: BI.last(output)
})
});
function search() {
var children = self._getChildren([]);
var start = children.length;
if (lastSearchValue !== "") {
for (var j = 0, len = start; j < len; j++) {
if (children[j].value === lastSearchValue) {
start = j + 1;
break;
}
}
} else {
start = 0;
}
var output = [];
for (var i = start, len = children.length; i < len; i++) {
if (output.length < self._const.perPage) {
var find = nodeSearch(1, [], children[i].value, false, result);
} else if (output.length === self._const.perPage) {
var find = nodeSearch(1, [], children[i].value, false, []);
}
if (find[0] === true) {
output.push(children[i].value);
}
if (output.length > self._const.perPage) {
break;
}
}
return output;
}
function nodeSearch(deep, parentValues, current, isAllSelect, result) {
if (self._isMatch(current, keyword)) {
var checked = isAllSelect || isSelected(parentValues, current);
createOneJson(parentValues, current, false, checked, !isAllSelect && isHalf(parentValues, current), true, result);
return [true, checked];
}
if (deep >= self.floors) {
return [false, false];
}
var newParents = BI.clone(parentValues);
newParents.push(current);
var children = self._getChildren(newParents);
var can = false, checked = false;
var isCurAllSelected = isAllSelect || isAllSelected(parentValues, current);
BI.each(children, function (i, child) {
var state = nodeSearch(deep + 1, newParents, child.value, isCurAllSelected, result);
if (state[1] === true) {
checked = true;
}
if (state[0] === true) {
can = true;
}
});
if (can === true) {
checked = isCurAllSelected || (isSelected(parentValues, current) && checked);
createOneJson(parentValues, current, true, checked, false, false, result);
}
return [can, checked];
}
function createOneJson(parentValues, value, isOpen, checked, half, flag, result) {
var node = self.map[value];
result.push({
id: node.id,
pId: node.pId,
text: node.text,
value: node.value,
title: node.title,
isParent: parentValues.length + 1 < self.floors,
open: isOpen,
checked: checked,
halfCheck: half,
flag: flag
});
}
function isHalf(parentValues, value) {
var find = findSelectedObj(parentValues);
if (find == null) {
return null;
}
return BI.any(find, function (v, ob) {
if (v === value) {
if (ob != null && !BI.isEmpty(ob)) {
return true;
}
}
});
}
function isAllSelected(parentValues, value) {
var find = findSelectedObj(parentValues);
if (find == null) {
return null;
}
return BI.any(find, function (v, ob) {
if (v === value) {
if (ob != null && BI.isEmpty(ob)) {
return true;
}
}
});
}
function isSelected(parentValues, value) {
var find = findSelectedObj(parentValues);
if (find == null) {
return false;
}
return BI.any(find, function (v) {
if (v === value) {
return true;
}
});
}
function findSelectedObj(parentValues) {
var find = selectedValues;
if (find == null) {
return null;
}
BI.every(parentValues, function (i, v) {
find = find[v];
if (find == null) {
return false;
}
return true;
});
return find;
}
},
_reqTreeNode: function (op, callback) {
var self = this;
var result = [];
var times = op.times;
var checkState = op.checkState || {};
var parentValues = op.parentValues || [];
var selectedValues = op.selectedValues;
var valueMap = {};
if (judgeState(parentValues, selectedValues, checkState)) {
valueMap = dealWidthSelectedValue(parentValues, selectedValues);
}
var nodes = this._getChildren(parentValues);
for (var i = (times - 1) * this._const.perPage; nodes[i] && i < times * this._const.perPage; i++) {
var state = getCheckState(nodes[i].value, parentValues, valueMap, checkState);
result.push({
id: nodes[i].id,
pId: nodes[i].pId,
value: nodes[i].value,
text: nodes[i].text,
times: 1,
isParent: parentValues.length + 1 < this.floors,
checked: state[0],
halfCheck: state[1]
})
}
BI.nextTick(function () {
callback({
items: result,
hasNext: nodes.length > times * self._const.perPage
});
});
function judgeState(parentValues, selected_value, checkState) {
var checked = checkState.checked, half = checkState.half;
if (parentValues.length > 0 && !checked) {
return false;
}
return (parentValues.length === 0 || (checked && half) && !BI.isEmpty(selected_value));
}
function dealWidthSelectedValue(parentValues, selectedValues) {
var valueMap = {};
BI.each(parentValues, function (i, v) {
selectedValues = selectedValues[v];
});
BI.each(selectedValues, function (value, obj) {
if (BI.isNull(obj)) {
valueMap[value] = [0, 0];
return;
}
if (BI.isEmpty(obj)) {
valueMap[value] = [2, 0];
return;
}
var nextNames = {};
BI.each(obj, function (t, o) {
if (BI.isNull(o) || BI.isEmpty(o)) {
nextNames[t] = true;
}
});
valueMap[value] = [1, BI.size(nextNames)];
});
return valueMap;
}
function getCheckState(current, parentValues, valueMap, checkState) {
var checked = checkState.checked, half = checkState.half;
var hasChild = parentValues.length + 1 < self.floors;
var tempCheck = false, halfCheck = false;
if (BI.has(valueMap, current)) {
//可能是半选
if (valueMap[current][0] === 1) {
var values = BI.clone(parentValues);
values.push(current);
if (hasChild && self._getChildCount(values) !== valueMap[current][1]) {
halfCheck = true;
}
} else if (valueMap[current][0] === 2) {
tempCheck = true;
}
}
var check;
if (!checked && !halfCheck && !tempCheck) {
check = BI.has(valueMap, current);
} else {
check = ((tempCheck || checked) && !half) || BI.has(valueMap, current);
}
return [check, halfCheck];
}
},
_buildTree: function (jo, values) {
var t = jo;
BI.each(values, function (i, v) {
if (!BI.has(t, v)) {
t[v] = {};
}
t = t[v];
});
},
_isMatch: function (value, keyword) {
var finded = BI.Func.getSearchResult([value], keyword);
return finded.finded.length > 0 || finded.matched.length > 0;
},
_getNode: function (v) {
return this.tree.search(v, "value");
},
_getChildren: function (parentValues) {
if (parentValues.length > 0) {
var value = BI.last(parentValues);
var parent = this.tree.search(value, "value");
} else {
var parent = this.tree.getRoot();
}
return parent.getChildren();
},
_getChildCount: function (parentValues) {
return this._getChildren(parentValues).length;
},
setValue: function (v) { setValue: function (v) {
this.combo.setValue(v); this.combo.setValue(v);
}, },
@ -591,7 +45,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.Widget, {
}, },
populate: function () { populate: function () {
this.combo.populate.apply(this, arguments); this.combo.populate.apply(this.combo, arguments);
} }
}); });
BI.TreeValueChooserCombo.EVENT_CONFIRM = "TreeValueChooserCombo.EVENT_CONFIRM"; BI.TreeValueChooserCombo.EVENT_CONFIRM = "TreeValueChooserCombo.EVENT_CONFIRM";

49
src/component/treevaluechooser/pane.treevaluechooser.js

@ -0,0 +1,49 @@
/**
* 简单的复选下拉树控件, 适用于数据量少的情况
*
* Created by GUY on 2015/10/29.
* @class BI.TreeValueChooserPane
* @extends BI.AbstractTreeValueChooser
*/
BI.TreeValueChooserPane = BI.inherit(BI.AbstractTreeValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.TreeValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-tree-value-chooser-pane",
items: null,
itemsCreator: BI.emptyFn
});
},
_init: function () {
BI.TreeValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.pane = BI.createWidget({
type: 'bi.multi_select_tree',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this)
});
this.pane.on(BI.MultiSelectTree.EVENT_CHANGE, function () {
self.fireEvent(BI.TreeValueChooserPane.EVENT_CHANGE);
});
if (BI.isNotNull(o.items)) {
this._initData(o.items);
this.populate();
}
},
setValue: function (v) {
this.pane.setValue(v);
},
getValue: function () {
return this.pane.getValue();
},
populate: function () {
this.pane.populate.apply(this.pane, arguments);
}
});
BI.TreeValueChooserPane.EVENT_CHANGE = "TreeValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.tree_value_chooser_pane', BI.TreeValueChooserPane);

89
src/component/valuechooser/abstract.valuechooser.js

@ -0,0 +1,89 @@
/**
* 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.AbstractValueChooser
* @extends BI.Widget
*/
BI.AbstractValueChooser = BI.inherit(BI.Widget, {
_const: {
perPage: 100
},
_defaultConfig: function () {
return BI.extend(BI.AbstractValueChooser.superclass._defaultConfig.apply(this, arguments), {
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_valueFormatter: function (v) {
var text = v;
if (BI.isNotNull(this.items)) {
BI.some(this.items, function (i, item) {
if (item.value === v) {
text = item.text;
return true;
}
});
}
return text;
},
_getItemsByTimes: function (items, times) {
var res = [];
for (var i = (times - 1) * this._const.perPage; items[i] && i < times * this._const.perPage; i++) {
res.push(items[i]);
}
return res;
},
_hasNextByTimes: function (items, times) {
return times * this._const.perPage < items.length;
},
_itemsCreator: function (options, callback) {
var self = this, o = this.options;
if (!o.cache || !this.items) {
o.itemsCreator({}, function (items) {
self.items = items;
call(items);
});
} else {
call(this.items);
}
function call(items) {
var keywords = (options.keywords || []).slice();
if (options.keyword) {
keywords.push(options.keyword);
}
BI.each(keywords, function (i, kw) {
var search = BI.Func.getSearchResult(items, kw);
items = search.matched.concat(search.finded);
});
if (options.selectedValues) {//过滤
var filter = BI.makeObject(options.selectedValues, true);
items = BI.filter(items, function (i, ob) {
return !filter[ob.value];
});
}
if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) {
callback({
items: items
});
return;
}
if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {
callback({count: items.length});
return;
}
callback({
items: self._getItemsByTimes(items, options.times),
hasNext: self._hasNextByTimes(items, options.times)
});
}
}
});

72
src/component/valuechooser/combo.valuechooser.js

@ -6,11 +6,8 @@
* @class BI.ValueChooserCombo * @class BI.ValueChooserCombo
* @extends BI.Widget * @extends BI.Widget
*/ */
BI.ValueChooserCombo = BI.inherit(BI.Widget, { BI.ValueChooserCombo = BI.inherit(BI.AbstractValueChooser, {
_const: {
perPage: 10
},
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-combo", baseCls: "bi-value-chooser-combo",
@ -32,18 +29,7 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
type: 'bi.multi_select_combo', type: 'bi.multi_select_combo',
element: this, element: this,
itemsCreator: BI.bind(this._itemsCreator, this), itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: function (v) { valueFormatter: BI.bind(this._valueFormatter, this),
var text = v;
if (BI.isNotNull(self.items)) {
BI.some(self.items, function (i, item) {
if (item.value === v) {
text = item.text;
return true;
}
});
}
return text;
},
width: o.width, width: o.width,
height: o.height height: o.height
}); });
@ -53,60 +39,6 @@ BI.ValueChooserCombo = BI.inherit(BI.Widget, {
}); });
}, },
_getItemsByTimes: function (items, times) {
var res = [];
for (var i = (times - 1) * this._const.perPage; items[i] && i < times * this._const.perPage; i++) {
res.push(items[i]);
}
return res;
},
_hasNextByTimes: function (items, times) {
return times * this._const.perPage < items.length;
},
_itemsCreator: function (options, callback) {
var self = this, o = this.options;
if (!o.cache || !this.items) {
o.itemsCreator({}, function (items) {
self.items = items;
call(items);
});
} else {
call(this.items);
}
function call(items) {
var keywords = (options.keywords || []).slice();
if (options.keyword) {
keywords.push(options.keyword);
}
BI.each(keywords, function (i, kw) {
var search = BI.Func.getSearchResult(items, kw);
items = search.matched.concat(search.finded);
});
if (options.selectedValues) {//过滤
var filter = BI.makeObject(options.selectedValues, true);
items = BI.filter(items, function (i, ob) {
return !filter[ob.value];
});
}
if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) {
callback({
items: items
});
return;
}
if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {
callback({count: items.length});
return;
}
callback({
items: self._getItemsByTimes(items, options.times),
hasNext: self._hasNextByTimes(items, options.times)
});
}
},
setValue: function (v) { setValue: function (v) {
this.combo.setValue(v); this.combo.setValue(v);
}, },

56
src/component/valuechooser/pane.valuechooser.js

@ -0,0 +1,56 @@
/**
* 简单的复选下拉框控件, 适用于数据量少的情况
* 封装了字段处理逻辑
*
* Created by GUY on 2015/10/29.
* @class BI.ValueChooserPane
* @extends BI.Widget
*/
BI.ValueChooserPane = BI.inherit(BI.AbstractValueChooser, {
_defaultConfig: function () {
return BI.extend(BI.ValueChooserPane.superclass._defaultConfig.apply(this, arguments), {
baseCls: "bi-value-chooser-pane",
items: null,
itemsCreator: BI.emptyFn,
cache: true
});
},
_init: function () {
BI.ValueChooserPane.superclass._init.apply(this, arguments);
var self = this, o = this.options;
this.list = BI.createWidget({
type: 'bi.multi_select_list',
element: this,
itemsCreator: BI.bind(this._itemsCreator, this),
valueFormatter: BI.bind(this._valueFormatter, this)
});
this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {
self.fireEvent(BI.ValueChooserPane.EVENT_CHANGE);
});
if (BI.isNotNull(o.items)) {
this.items = o.items;
this.populate();
}
},
setValue: function (v) {
this.list.setValue(v);
},
getValue: function () {
var val = this.list.getValue() || {};
return {
type: val.type,
value: val.value
}
},
populate: function () {
this.list.populate.apply(this.list, arguments);
}
});
BI.ValueChooserPane.EVENT_CHANGE = "ValueChooserPane.EVENT_CHANGE";
BI.shortcut('bi.value_chooser_pane', BI.ValueChooserPane);

8
src/core/base.js

@ -457,15 +457,15 @@ if (!window.BI) {
}, },
has: function (obj, keys) { has: function (obj, keys) {
if (BI.isKey(keys)) { if (BI.isArray(keys)) {
return _.has.apply(_, arguments); if (keys.length === 0) {
}
if (!keys || BI.isEmpty(keys)) {
return false; return false;
} }
return BI.every(keys, function (i, key) { return BI.every(keys, function (i, key) {
return _.has(obj, key); return _.has(obj, key);
}); });
}
return _.has.apply(_, arguments);
}, },
//数字和字符串可以作为key //数字和字符串可以作为key

3
src/core/controller/controller.floatbox.js

@ -47,7 +47,7 @@ BI.FloatBoxController = BI.inherit(BI.Controller, {
} }
this.floatContainer[name] = BI.createWidget({ this.floatContainer[name] = BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
cls: "bi-list-view", cls: "bi-popup-view",
items: [{ items: [{
el: (this.floatLayer[name] = BI.createWidget({ el: (this.floatLayer[name] = BI.createWidget({
type: 'bi.absolute', type: 'bi.absolute',
@ -137,6 +137,7 @@ BI.FloatBoxController = BI.inherit(BI.Controller, {
delete this.floatLayer[name]; delete this.floatLayer[name];
delete this.zindexMap[name]; delete this.zindexMap[name];
delete this.floatContainer[name]; delete this.floatContainer[name];
delete this.floatOpened[name];
return this; return this;
} }
}); });

2
src/core/controller/controller.layer.js

@ -93,7 +93,7 @@ BI.LayerController = BI.inherit(BI.Controller, {
}] }]
}); });
if (w) { if (w) {
layout.element.addClass("bi-list-view"); layout.element.addClass("bi-popup-view");
layout.element.css({ layout.element.css({
left: w.offset().left + (offset.left || 0), left: w.offset().left + (offset.left || 0),
top: w.offset().top + (offset.top || 0), top: w.offset().top + (offset.top || 0),

7
src/core/proto/jquery.js vendored

@ -8,6 +8,7 @@
if (jQuery) { if (jQuery) {
(function ($) { (function ($) {
// richer:容器在其各个边缘留出的空间 // richer:容器在其各个边缘留出的空间
if (!$.fn.insets) {
$.fn.insets = function () { $.fn.insets = function () {
var p = this.padding(), var p = this.padding(),
b = this.border(); b = this.border();
@ -18,8 +19,10 @@ if (jQuery) {
'right': p.right + b.right + b.left 'right': p.right + b.right + b.left
}; };
}; };
}
// richer:获取 && 设置jQuery元素的边界 // richer:获取 && 设置jQuery元素的边界
if (!$.fn.bounds) {
$.fn.bounds = function (value) { $.fn.bounds = function (value) {
var tmp = {hasIgnoredBounds: true}; var tmp = {hasIgnoredBounds: true};
@ -57,5 +60,7 @@ if (jQuery) {
}; };
} }
}; };
}
})(jQuery); })(jQuery);
}; }
;

2
src/core/proto/number.js

@ -259,7 +259,7 @@ function accDiv(arg1, arg2) {
with (Math) { with (Math) {
r1 = Number(arg1.toString().replace(".", "")); r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", "")); r2 = Number(arg2.toString().replace(".", ""));
return (r1 / r2) * pow(10, t2 - t1); return (t2 > t1) ? (r1 / r2) * pow(10, t2 - t1) : (r1 / r2) / pow(10, t1 - t2);
} }
} }

2
src/core/utils/prefixIntervalTree.js

@ -170,7 +170,7 @@
return new BI.PrefixIntervalTree(xs); return new BI.PrefixIntervalTree(xs);
}; };
BI.PrefixIntervalTree.empty = function () { BI.PrefixIntervalTree.empty = function (size) {
return BI.PrefixIntervalTree.uniform(size, 0); return BI.PrefixIntervalTree.uniform(size, 0);
}; };

49
src/core/utils/tree.js

@ -17,7 +17,7 @@
}, },
isRoot: function (node) { isRoot: function (node) {
return node === this.root || node.id === this.root.id; return node === this.root;
}, },
getRoot: function () { getRoot: function () {
@ -394,7 +394,7 @@
if (BI.isArray(nodes)) { if (BI.isArray(nodes)) {
for (var i = 0, l = nodes.length; i < l; i++) { for (var i = 0, l = nodes.length; i < l; i++) {
var node = BI.clone(nodes[i]); var node = BI.clone(nodes[i]);
node.pId = pId; node.pId = node.pId == null ? pId : node.pId;
delete node.children; delete node.children;
r.push(node); r.push(node);
if (nodes[i]["children"]) { if (nodes[i]["children"]) {
@ -403,7 +403,7 @@
} }
} else { } else {
var newNodes = BI.clone(nodes); var newNodes = BI.clone(nodes);
newNodes.pId = pId; newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;
delete newNodes.children; delete newNodes.children;
r.push(newNodes); r.push(newNodes);
if (nodes["children"]) { if (nodes["children"]) {
@ -414,21 +414,25 @@
}, },
arrayFormat: function (nodes, pId) { arrayFormat: function (nodes, pId) {
if (!nodes) return []; if (!nodes) {
return [];
}
var r = []; var r = [];
if (BI.isArray(nodes)) { if (BI.isArray(nodes)) {
for (var i = 0, l = nodes.length; i < l; i++) { for (var i = 0, l = nodes.length; i < l; i++) {
var node = nodes[i]; var node = nodes[i];
node.pId = node.pId == null ? pId : node.pId;
r.push(node); r.push(node);
if (nodes[i]["children"]) { if (nodes[i]["children"]) {
r = r.concat(BI.Tree.transformToArrayFormat(nodes[i]["children"], node.id)); r = r.concat(BI.Tree.arrayFormat(nodes[i]["children"], node.id));
} }
} }
} else { } else {
var newNodes = nodes; var newNodes = nodes;
newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;
r.push(newNodes); r.push(newNodes);
if (nodes["children"]) { if (nodes["children"]) {
r = r.concat(BI.Tree.transformToArrayFormat(nodes["children"], newNodes.id)); r = r.concat(BI.Tree.arrayFormat(nodes["children"], newNodes.id));
} }
} }
return r; return r;
@ -450,7 +454,7 @@
tmpMap[sNodes[i].id] = BI.clone(sNodes[i]); tmpMap[sNodes[i].id] = BI.clone(sNodes[i]);
} }
for (i = 0, l = sNodes.length; i < l; 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] && sNodes[i].id !== sNodes[i].pId) {
if (!tmpMap[sNodes[i].pId].children) { if (!tmpMap[sNodes[i].pId].children) {
tmpMap[sNodes[i].pId].children = []; tmpMap[sNodes[i].pId].children = [];
} }
@ -466,6 +470,37 @@
} }
}, },
treeFormat: 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++) {
if (BI.isNull(sNodes[i].id)) {
return sNodes;
}
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(tmpMap[sNodes[i].id]);
} else {
r.push(tmpMap[sNodes[i].id]);
}
}
return r;
} else {
return [sNodes];
}
},
traversal: function (array, callback) { traversal: function (array, callback) {
if (BI.isNull(array)) { if (BI.isNull(array)) {
return; return;

11
src/core/widget.js

@ -45,9 +45,10 @@ BI.Widget = BI.inherit(BI.OB, {
this._initRoot(); this._initRoot();
this._initElementWidth(); this._initElementWidth();
this._initElementHeight(); this._initElementHeight();
this._initVisualEffects(); this._initVisual();
this._initState(); this._initState();
this._initElement(); this._initElement();
this._initEffects();
this.created && this.created(); this.created && this.created();
}, },
@ -102,21 +103,23 @@ BI.Widget = BI.inherit(BI.OB, {
} }
}, },
_initVisualEffects: function () { _initVisual: function () {
var o = this.options; var o = this.options;
if (o.invisible) { if (o.invisible) {
//用display属性做显示和隐藏,否则jquery会在显示时将display设为block会覆盖掉display:flex属性 //用display属性做显示和隐藏,否则jquery会在显示时将display设为block会覆盖掉display:flex属性
this.element.css("display", "none"); this.element.css("display", "none");
} }
},
_initEffects: function () {
var o = this.options;
if (o.disabled || o.invalid) { if (o.disabled || o.invalid) {
// BI.nextTick(BI.bind(function () {
if (this.options.disabled) { if (this.options.disabled) {
this.setEnable(false); this.setEnable(false);
} }
if (this.options.invalid) { if (this.options.invalid) {
this.setValid(false); this.setValid(false);
} }
// }, this));
} }
}, },

14
src/css/base/view/popupview.css

@ -2,30 +2,30 @@
/****** common color(常用颜色,可用于普遍场景) *****/ /****** common color(常用颜色,可用于普遍场景) *****/
/**** custom color(自定义颜色,用于特定场景) ****/ /**** custom color(自定义颜色,用于特定场景) ****/
/**********BI.BIListView*************/ /**********BI.BIListView*************/
.bi-list-view { .bi-popup-view {
position: fixed !important; position: fixed !important;
overflow-y: visible !important; overflow-y: visible !important;
overflow-x: visible !important; overflow-x: visible !important;
overflow: visible !important; overflow: visible !important;
cursor: default; cursor: default;
} }
.bi-list-view .list-view-outer { .bi-popup-view .list-view-outer {
-webkit-border-radius: 2px; -webkit-border-radius: 2px;
-moz-border-radius: 2px; -moz-border-radius: 2px;
border-radius: 2px; border-radius: 2px;
} }
.bi-list-view .list-view-toolbar { .bi-popup-view .list-view-toolbar {
line-height: 30px; line-height: 30px;
} }
.bi-list-view .list-view-toolbar > .center-element { .bi-popup-view .list-view-toolbar > .center-element {
border-left: 1px solid #d4dadd; border-left: 1px solid #d4dadd;
} }
.bi-list-view .list-view-toolbar > .first-element { .bi-popup-view .list-view-toolbar > .first-element {
border-left: none; border-left: none;
} }
.bi-theme-dark .bi-list-view .list-view-toolbar > .center-element { .bi-theme-dark .bi-popup-view .list-view-toolbar > .center-element {
border-left: 1px solid #525466; border-left: 1px solid #525466;
} }
.bi-theme-dark .bi-list-view .list-view-toolbar > .first-element { .bi-theme-dark .bi-popup-view .list-view-toolbar > .first-element {
border-left: none; border-left: none;
} }

4
src/less/base/view/popupview.less

@ -1,7 +1,7 @@
@import "../../bibase"; @import "../../bibase";
/**********BI.BIListView*************/ /**********BI.BIListView*************/
.bi-list-view { .bi-popup-view {
position: fixed !important; position: fixed !important;
overflow-y: visible !important; overflow-y: visible !important;
overflow-x: visible !important; overflow-x: visible !important;
@ -22,7 +22,7 @@
} }
.bi-theme-dark { .bi-theme-dark {
.bi-list-view { .bi-popup-view {
& .list-view-toolbar { & .list-view-toolbar {
& > .center-element { & > .center-element {
border-left: 1px solid @color-bi-border-line-theme-dark; border-left: 1px solid @color-bi-border-line-theme-dark;

13
src/widget/multiselectlist/multiselectlist.js

@ -6,8 +6,7 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this, arguments), {
baseCls: 'bi-multi-select-list', baseCls: 'bi-multi-select-list',
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn,
valueFormatter: BI.emptyFn, valueFormatter: BI.emptyFn
el: {}
}) })
}, },
_init: function () { _init: function () {
@ -18,6 +17,7 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
var assertShowValue = function () { var assertShowValue = function () {
BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue); BI.isKey(self._startValue) && self.storeValue.value[self.storeValue.type === BI.Selection.All ? "remove" : "pushDistinct"](self._startValue);
self.trigger.setValue(self.storeValue);
}; };
this.adapter = BI.createWidget({ this.adapter = BI.createWidget({
@ -77,6 +77,8 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
self._showAdapter(); self._showAdapter();
self._setStartValue(""); self._setStartValue("");
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
//需要刷新回到初始界面,否则搜索的结果不能放在最前面
self.adapter.populate();
} }
}, { }, {
eventName: BI.Searcher.EVENT_PAUSE, eventName: BI.Searcher.EVENT_PAUSE,
@ -88,7 +90,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
value: [keyword] value: [keyword]
}, function () { }, function () {
self._showAdapter(); self._showAdapter();
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
self._setStartValue(keyword); self._setStartValue(keyword);
assertShowValue(); assertShowValue();
@ -108,13 +109,11 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
if (keywords.length > 0) { if (keywords.length > 0) {
self._joinKeywords(keywords, function () { self._joinKeywords(keywords, function () {
if (BI.isEndWithBlank(last)) { if (BI.isEndWithBlank(last)) {
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
assertShowValue(); assertShowValue();
self.adapter.populate(); self.adapter.populate();
self._setStartValue(""); self._setStartValue("");
} else { } else {
self.trigger.setValue(self.storeValue);
self.adapter.setValue(self.storeValue); self.adapter.setValue(self.storeValue);
assertShowValue(); assertShowValue();
} }
@ -140,8 +139,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.trigger, el: this.trigger,
height: 30 height: 30
@ -153,8 +150,6 @@ BI.MultiSelectList = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.searcherPane, el: this.searcherPane,
top: 30, top: 30,

16
src/widget/multiselecttree/multiselecttree.js

@ -5,8 +5,7 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
_defaultConfig: function () { _defaultConfig: function () {
return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this, arguments), { return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this, arguments), {
baseCls: 'bi-multi-select-tree', baseCls: 'bi-multi-select-tree',
itemsCreator: BI.emptyFn, itemsCreator: BI.emptyFn
height: 25
}) })
}, },
@ -52,7 +51,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
}, },
adapter: this.adapter, adapter: this.adapter,
popup: this.searcherPane, popup: this.searcherPane,
height: 200,
masker: false, masker: false,
listeners: [{ listeners: [{
eventName: BI.Searcher.EVENT_START, eventName: BI.Searcher.EVENT_START,
@ -92,8 +90,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.vtape", type: "bi.vtape",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.trigger, el: this.trigger,
height: 30 height: 30
@ -105,8 +101,6 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
BI.createWidget({ BI.createWidget({
type: "bi.absolute", type: "bi.absolute",
element: this, element: this,
height: "100%",
width: "100%",
items: [{ items: [{
el: this.searcherPane, el: this.searcherPane,
top: 30, top: 30,
@ -142,6 +136,14 @@ BI.MultiSelectTree = BI.inherit(BI.Widget, {
}); });
}, },
stopSearch: function () {
this.trigger.stopSearch();
},
updateValue: function (v) {
this.adapter.updateValue(v);
},
getValue: function () { getValue: function () {
return this.storeValue.value; return this.storeValue.value;
}, },

6
src/widget/multiselecttree/multiselecttree.popup.js

@ -13,7 +13,6 @@ BI.MultiSelectTreePopup = BI.inherit(BI.Widget, {
var self = this, o = this.options; var self = this, o = this.options;
this.popup = BI.createWidget({ this.popup = BI.createWidget({
type: "bi.async_tree", type: "bi.async_tree",
height: 400,
element: this, element: this,
itemsCreator: o.itemsCreator itemsCreator: o.itemsCreator
}); });
@ -38,6 +37,11 @@ BI.MultiSelectTreePopup = BI.inherit(BI.Widget, {
this.popup.setValue(v.value); this.popup.setValue(v.value);
}, },
updateValue: function (v) {
this.popup.updateValue(v);
this.popup.refresh();
},
populate: function (config) { populate: function (config) {
this.popup.stroke(config); this.popup.stroke(config);
} }

4
src/widget/sequencetable/treenumber.sequencetable.js

@ -79,7 +79,9 @@ BI.SequenceTableTreeNumber = BI.inherit(BI.Widget, {
var cnt = this.start; var cnt = this.start;
function track(node) { function track(node) {
self.cache[node.text || node.value] = cnt++; //如果已经有缓存了就不改计数了,复杂表会出现这种情况
self.cache[node.text || node.value] || (self.cache[node.text || node.value] = cnt);
cnt++;
} }
BI.each(nodes, function (i, node) { BI.each(nodes, function (i, node) {

Loading…
Cancel
Save