fineui是帆软报表和BI产品线所使用的前端框架。
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

1 lines
3.7 MiB

{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/process/browser.js","webpack:///./src/core/foundation.js","webpack:///./src/core/lodash.js","webpack:///./src/core/base.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./src/core/ob.js","webpack:///./src/core/utils/aes.js","webpack:///./src/core/utils/aspect.js","webpack:///./src/core/utils/base64.js","webpack:///./src/core/utils/cache.js","webpack:///./src/core/utils/cellSizeAndPositionManager.js","webpack:///./src/core/utils/chinesePY.js","webpack:///./src/core/utils/heap.js","webpack:///./src/core/utils/linkedHashMap.js","webpack:///./src/core/utils/lru.js","webpack:///./src/core/utils/prefixIntervalTree.js","webpack:///./src/core/utils/queue.js","webpack:///./src/core/utils/sectionManager.js","webpack:///./src/core/utils/tree.js","webpack:///./src/core/utils/vector.js","webpack:///./src/core/alias.js","webpack:///./src/core/func/array.js","webpack:///./src/core/func/date.js","webpack:///./src/core/func/function.js","webpack:///./src/core/func/number.js","webpack:///./src/core/func/string.js","webpack:///./src/core/i18n.js","webpack:///./src/core/inject.js","webpack:///./src/core/var.js","webpack:///./src/data/pool/pool.buffer.js","webpack:///./src/data/pool/pool.sharing.js","webpack:///./src/data/req/req.js","webpack:///./src/core/widget.js","webpack:///./src/core/shortcut.js","webpack:///./src/core/utils/events/mousemovetracker.js","webpack:///./src/core/utils/events/wheelhandler.js","webpack:///./src/core/behavior/behavior.js","webpack:///./src/core/wrapper/layout.js","webpack:///./src/core/plugin.js","webpack:///./src/core/action/action.js","webpack:///./src/core/action/action.show.js","webpack:///./src/core/behavior/behavior.highlight.js","webpack:///./src/core/behavior/behavior.redmark.js","webpack:///./src/core/controller.js","webpack:///./src/core/controller/controller.broadcast.js","webpack:///./src/core/controller/controller.bubbles.js","webpack:///./src/core/controller/controller.layer.js","webpack:///./src/core/controller/controller.masker.js","webpack:///./src/core/controller/controller.popover.js","webpack:///./src/core/controller/controller.resizer.js","webpack:///./src/core/controller/controller.tooltips.js","webpack:///./src/core/events.js","webpack:///./src/core/func/date.i18n.js","webpack:///./src/core/listener/listener.show.js","webpack:///./src/core/loader/loader.style.js","webpack:///./src/core/logic/logic.js","webpack:///./src/core/logic/logic.layout.js","webpack:///./src/core/proto/number.js","webpack:///./src/core/version.js","webpack:///./src/core/wrapper/layout/adapt/absolute.center.js","webpack:///./src/core/wrapper/layout/adapt/absolute.horizontal.js","webpack:///./src/core/wrapper/layout/adapt/absolute.vertical.js","webpack:///./src/core/wrapper/layout/adapt/adapt.center.js","webpack:///./src/core/wrapper/layout/adapt/adapt.horizontal.js","webpack:///./src/core/wrapper/layout/adapt/adapt.leftrightvertical.js","webpack:///./src/core/wrapper/layout/adapt/adapt.table.js","webpack:///./src/core/wrapper/layout/adapt/adapt.vertical.js","webpack:///./src/core/wrapper/layout/adapt/auto.horizontal.js","webpack:///./src/core/wrapper/layout/adapt/float.horizontal.js","webpack:///./src/core/wrapper/layout/adapt/inline.center.js","webpack:///./src/core/wrapper/layout/adapt/inline.vertical.js","webpack:///./src/core/wrapper/layout/flex/flex.center.js","webpack:///./src/core/wrapper/layout/flex/flex.horizontal.center.js","webpack:///./src/core/wrapper/layout/flex/flex.horizontal.js","webpack:///./src/core/wrapper/layout/flex/flex.vertical.center.js","webpack:///./src/core/wrapper/layout/flex/flex.vertical.js","webpack:///./src/core/wrapper/layout/flex/wrapper/flex.wrapper.center.js","webpack:///./src/core/wrapper/layout/flex/wrapper/flex.wrapper.horizontal.center.js","webpack:///./src/core/wrapper/layout/flex/wrapper/flex.wrapper.horizontal.js","webpack:///./src/core/wrapper/layout/flex/wrapper/flex.wrapper.vertical.center.js","webpack:///./src/core/wrapper/layout/flex/wrapper/flex.wrapper.vertical.js","webpack:///./src/core/wrapper/layout/layout.absolute.js","webpack:///./src/core/wrapper/layout/layout.adaptive.js","webpack:///./src/core/wrapper/layout/layout.border.js","webpack:///./src/core/wrapper/layout/layout.card.js","webpack:///./src/core/wrapper/layout/layout.default.js","webpack:///./src/core/wrapper/layout/layout.division.js","webpack:///./src/core/wrapper/layout/layout.flow.js","webpack:///./src/core/wrapper/layout/layout.grid.js","webpack:///./src/core/wrapper/layout/layout.horizontal.js","webpack:///./src/core/wrapper/layout/layout.inline.js","webpack:///./src/core/wrapper/layout/layout.lattice.js","webpack:///./src/core/wrapper/layout/layout.table.js","webpack:///./src/core/wrapper/layout/layout.tape.js","webpack:///./src/core/wrapper/layout/layout.td.js","webpack:///./src/core/wrapper/layout/layout.vertical.js","webpack:///./src/core/wrapper/layout/layout.window.js","webpack:///./src/core/wrapper/layout/middle/middle.center.js","webpack:///./src/core/wrapper/layout/middle/middle.float.center.js","webpack:///./src/core/wrapper/layout/middle/middle.horizontal.js","webpack:///./src/core/wrapper/layout/middle/middle.vertical.js","webpack:///./src/base/pane.js","webpack:///./src/base/single/single.js","webpack:///./src/base/single/text.js","webpack:///./src/base/single/button/button.basic.js","webpack:///./src/base/single/button/button.node.js","webpack:///./src/base/single/tip/tip.js","webpack:///./src/base/combination/group.button.js","webpack:///./src/base/combination/tree.button.js","webpack:///./src/base/base.js","webpack:///./src/base/collection/collection.js","webpack:///./src/base/combination/combo.js","webpack:///./src/base/combination/expander.js","webpack:///./src/base/combination/group.combo.js","webpack:///./src/base/combination/group.virtual.js","webpack:///./src/base/combination/loader.js","webpack:///./src/base/combination/navigation.js","webpack:///./src/base/combination/searcher.js","webpack:///./src/base/combination/switcher.js","webpack:///./src/base/combination/tab.js","webpack:///./src/base/el.js","webpack:///./src/base/foundation/message.js","webpack:///./src/base/grid/grid.js","webpack:///./src/base/layer/layer.popover.js","webpack:///./src/base/layer/layer.popup.js","webpack:///./src/base/layer/layer.searcher.js","webpack:///./src/base/list/listview.js","webpack:///./src/base/list/virtuallist.js","webpack:///./src/base/pager/pager.js","webpack:///./src/base/single/a/a.js","webpack:///./src/base/single/bar/bar.loading.js","webpack:///./src/base/single/button/buttons/button.icon.js","webpack:///./src/base/single/button/buttons/button.image.js","webpack:///./src/base/single/button/buttons/button.js","webpack:///./src/base/single/button/buttons/button.text.js","webpack:///./src/base/single/button/listitem/blankiconicontextitem.js","webpack:///./src/base/single/button/listitem/blankicontexticonitem.js","webpack:///./src/base/single/button/listitem/blankicontextitem.js","webpack:///./src/base/single/button/listitem/icontexticonitem.js","webpack:///./src/base/single/button/listitem/icontextitem.js","webpack:///./src/base/single/button/listitem/texticonitem.js","webpack:///./src/base/single/button/listitem/textitem.js","webpack:///./src/base/single/button/node/icontexticonnode.js","webpack:///./src/base/single/button/node/icontextnode.js","webpack:///./src/base/single/button/node/texticonnode.js","webpack:///./src/base/single/button/node/textnode.js","webpack:///./src/base/single/editor/editor.js","webpack:///./src/base/single/editor/editor.multifile.js","webpack:///./src/base/single/editor/editor.textarea.js","webpack:///./src/base/single/html/html.js","webpack:///./src/base/single/icon/icon.js","webpack:///./src/base/single/iframe/iframe.js","webpack:///./src/base/single/img/img.js","webpack:///./src/base/single/input/checkbox/checkbox.image.js","webpack:///./src/base/single/input/checkbox/checkbox.js","webpack:///./src/base/single/input/input.js","webpack:///./src/base/single/input/radio/radio.image.js","webpack:///./src/base/single/input/radio/radio.js","webpack:///./src/base/single/label/abstract.label.js","webpack:///./src/base/single/label/html.label.js","webpack:///./src/base/single/label/icon.label.js","webpack:///./src/base/single/label/label.js","webpack:///./src/base/single/link/link.js","webpack:///./src/base/single/tip/tip.bubble.js","webpack:///./src/base/single/tip/tip.toast.js","webpack:///./src/base/single/tip/tip.tooltip.js","webpack:///./src/base/single/trigger/trigger.js","webpack:///./src/base/tree/customtree.js","webpack:///./src/case/button/icon/icon.change.js","webpack:///./src/case/button/icon/icon.trigger.js","webpack:///./src/case/button/icon/iconhalf/icon.half.image.js","webpack:///./src/case/button/icon/iconhalf/icon.half.js","webpack:///./src/case/button/item.multiselect.js","webpack:///./src/case/button/item.singleselect.icontext.js","webpack:///./src/case/button/item.singleselect.js","webpack:///./src/case/button/item.singleselect.radio.js","webpack:///./src/case/button/node/node.arrow.js","webpack:///./src/case/button/node/node.first.plus.js","webpack:///./src/case/button/node/node.icon.arrow.js","webpack:///./src/case/button/node/node.last.plus.js","webpack:///./src/case/button/node/node.mid.plus.js","webpack:///./src/case/button/node/node.multilayer.icon.arrow.js","webpack:///./src/case/button/node/node.plus.js","webpack:///./src/case/button/switch.js","webpack:///./src/case/button/treeitem/item.first.treeleaf.js","webpack:///./src/case/button/treeitem/item.icon.treeleaf.js","webpack:///./src/case/button/treeitem/item.last.treeleaf.js","webpack:///./src/case/button/treeitem/item.mid.treeleaf.js","webpack:///./src/case/button/treeitem/item.multilayer.icon.treeleaf.js","webpack:///./src/case/button/treeitem/item.treetextleaf.js","webpack:///./src/case/calendar/calendar.date.item.js","webpack:///./src/case/calendar/calendar.js","webpack:///./src/case/calendar/calendar.year.js","webpack:///./src/case/checkbox/check.arrownode.js","webpack:///./src/case/checkbox/check.checkingmarknode.js","webpack:///./src/case/checkbox/check.first.treenode.js","webpack:///./src/case/checkbox/check.last.treenode.js","webpack:///./src/case/checkbox/check.mid.treenode.js","webpack:///./src/case/checkbox/check.treenode.js","webpack:///./src/case/combo/bubblecombo/combo.bubble.js","webpack:///./src/case/combo/bubblecombo/popup.bubble.js","webpack:///./src/case/combo/editoriconcheckcombo/combo.editiconcheck.js","webpack:///./src/case/combo/iconcombo/combo.icon.js","webpack:///./src/case/combo/iconcombo/popup.iconcombo.js","webpack:///./src/case/combo/iconcombo/trigger.iconcombo.js","webpack:///./src/case/combo/icontextvaluecombo/combo.icontextvalue.js","webpack:///./src/case/combo/icontextvaluecombo/popup.icontextvalue.js","webpack:///./src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js","webpack:///./src/case/combo/searchtextvaluecombo/popup.searchtextvalue.js","webpack:///./src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js","webpack:///./src/case/combo/textvaluecheckcombo/combo.textvaluecheck.js","webpack:///./src/case/combo/textvaluecheckcombo/popup.textvaluecheck.js","webpack:///./src/case/combo/textvaluecombo/combo.textvalue.js","webpack:///./src/case/combo/textvaluecombo/combo.textvaluesmall.js","webpack:///./src/case/combo/textvaluecombo/popup.textvalue.js","webpack:///./src/case/editor/editor.clear.js","webpack:///./src/case/editor/editor.shelter.js","webpack:///./src/case/editor/editor.sign.js","webpack:///./src/case/editor/editor.state.js","webpack:///./src/case/editor/editor.state.simple.js","webpack:///./src/case/layer/layer.multipopup.js","webpack:///./src/case/layer/layer.panel.js","webpack:///./src/case/layer/pane.list.js","webpack:///./src/case/layer/panel.js","webpack:///./src/case/linersegment/button.linear.segment.js","webpack:///./src/case/linersegment/linear.segment.js","webpack:///./src/case/list/list.select.js","webpack:///./src/case/loader/loader.lazy.js","webpack:///./src/case/loader/loader.list.js","webpack:///./src/case/loader/sort.list.js","webpack:///./src/case/loading/loading_pane.js","webpack:///./src/case/pager/pager.all.count.js","webpack:///./src/case/pager/pager.direction.js","webpack:///./src/case/pager/pager.js","webpack:///./src/case/segment/button.segment.js","webpack:///./src/case/segment/segment.js","webpack:///./src/case/toolbar/toolbar.multiselect.js","webpack:///./src/case/tree/tree.level.js","webpack:///./src/case/trigger/trigger.editor.js","webpack:///./src/case/trigger/trigger.icon.js","webpack:///./src/case/trigger/trigger.icon.text.js","webpack:///./src/case/trigger/trigger.icon.text.select.js","webpack:///./src/case/trigger/trigger.text.js","webpack:///./src/case/trigger/trigger.text.select.js","webpack:///./src/case/trigger/trigger.text.select.small.js","webpack:///./src/case/trigger/trigger.text.small.js","webpack:///./src/widget/date/calendar/combo.month.date.js","webpack:///./src/widget/date/calendar/combo.year.date.js","webpack:///./src/widget/date/calendar/picker.date.js","webpack:///./src/widget/date/calendar/picker.year.js","webpack:///./src/widget/date/calendar/popup.calendar.date.js","webpack:///./src/widget/date/calendar/popup.month.js","webpack:///./src/widget/date/calendar/popup.year.js","webpack:///./src/widget/date/calendar/trigger.triangle.date.js","webpack:///./src/widget/datepane/card.static.datepane.js","webpack:///./src/widget/datepane/datepane.js","webpack:///./src/widget/datetime/datetime.combo.js","webpack:///./src/widget/datetime/datetime.popup.js","webpack:///./src/widget/datetime/datetime.trigger.js","webpack:///./src/widget/datetimepane/card.static.datetimepane.js","webpack:///./src/widget/datetimepane/datetimepane.js","webpack:///./src/widget/downlist/combo.downlist.js","webpack:///./src/widget/downlist/group.downlist.js","webpack:///./src/widget/downlist/item.downlist.js","webpack:///./src/widget/downlist/item.downlistgroup.js","webpack:///./src/widget/downlist/popup.downlist.js","webpack:///./src/widget/dynamicdate/dynamicdate.caculate.js","webpack:///./src/widget/dynamicdate/dynamicdate.card.js","webpack:///./src/widget/dynamicdate/dynamicdate.combo.js","webpack:///./src/widget/dynamicdate/dynamicdate.param.item.js","webpack:///./src/widget/dynamicdate/dynamicdate.popup.js","webpack:///./src/widget/dynamicdate/dynamicdate.trigger.js","webpack:///./src/widget/dynamicdatetime/dynamicdatetime.combo.js","webpack:///./src/widget/dynamicdatetime/dynamicdatetime.popup.js","webpack:///./src/widget/dynamicdatetime/dynamicdatetime.timeselect.js","webpack:///./src/widget/dynamicdatetime/dynamicdatetime.trigger.js","webpack:///./src/widget/editor/editor.search.js","webpack:///./src/widget/editor/editor.search.small.js","webpack:///./src/widget/editor/editor.text.js","webpack:///./src/widget/editor/editor.text.small.js","webpack:///./src/widget/intervalslider/intervalslider.js","webpack:///./src/widget/intervalslider/model.accuratecalculation.js","webpack:///./src/widget/multilayerdownlist/combo.downlist.js","webpack:///./src/widget/multilayerdownlist/popup.downlist.js","webpack:///./src/widget/multilayerselecttree/multilayerselecttree.combo.js","webpack:///./src/widget/multilayerselecttree/multilayerselecttree.insert.search.pane.js","webpack:///./src/widget/multilayerselecttree/multilayerselecttree.leveltree.js","webpack:///./src/widget/multilayerselecttree/multilayerselecttree.popup.js","webpack:///./src/widget/multilayerselecttree/multilayerselecttree.trigger.js","webpack:///./src/widget/multilayerselecttree/node/node.first.plus.js","webpack:///./src/widget/multilayerselecttree/node/node.last.plus.js","webpack:///./src/widget/multilayerselecttree/node/node.mid.plus.js","webpack:///./src/widget/multilayerselecttree/node/node.plus.js","webpack:///./src/widget/multilayersingletree/multilayersingletree.combo.js","webpack:///./src/widget/multilayersingletree/multilayersingletree.insert.search.pane.js","webpack:///./src/widget/multilayersingletree/multilayersingletree.leveltree.js","webpack:///./src/widget/multilayersingletree/multilayersingletree.popup.js","webpack:///./src/widget/multilayersingletree/multilayersingletree.trigger.js","webpack:///./src/widget/multilayersingletree/node/node.first.plus.js","webpack:///./src/widget/multilayersingletree/node/node.last.plus.js","webpack:///./src/widget/multilayersingletree/node/node.mid.plus.js","webpack:///./src/widget/multilayersingletree/node/node.plus.js","webpack:///./src/widget/multilayersingletree/treeitem/item.first.treeleaf.js","webpack:///./src/widget/multilayersingletree/treeitem/item.last.treeleaf.js","webpack:///./src/widget/multilayersingletree/treeitem/item.mid.treeleaf.js","webpack:///./src/widget/multiselect/check/multiselect.check.pane.js","webpack:///./src/widget/multiselect/check/multiselect.display.js","webpack:///./src/widget/multiselect/multiselect.combo.js","webpack:///./src/widget/multiselect/multiselect.combo.nobar.js","webpack:///./src/widget/multiselect/multiselect.insert.combo.js","webpack:///./src/widget/multiselect/multiselect.insert.combo.nobar.js","webpack:///./src/widget/multiselect/multiselect.insert.trigger.js","webpack:///./src/widget/multiselect/multiselect.loader.js","webpack:///./src/widget/multiselect/multiselect.loader.nobar.js","webpack:///./src/widget/multiselect/multiselect.popup.view.js","webpack:///./src/widget/multiselect/multiselect.popup.view.nobar.js","webpack:///./src/widget/multiselect/multiselect.trigger.js","webpack:///./src/widget/multiselect/search/multiselect.search.insert.pane.js","webpack:///./src/widget/multiselect/search/multiselect.search.loader.js","webpack:///./src/widget/multiselect/search/multiselect.search.pane.js","webpack:///./src/widget/multiselect/trigger/button.checkselected.js","webpack:///./src/widget/multiselect/trigger/editor.multiselect.js","webpack:///./src/widget/multiselect/trigger/searcher.multiselect.insert.js","webpack:///./src/widget/multiselect/trigger/searcher.multiselect.js","webpack:///./src/widget/multiselect/trigger/switcher.checkselected.js","webpack:///./src/widget/multiselectlist/multiselectlist.insert.js","webpack:///./src/widget/multiselectlist/multiselectlist.insert.nobar.js","webpack:///./src/widget/multiselectlist/multiselectlist.js","webpack:///./src/widget/multiselecttree/multiselecttree.js","webpack:///./src/widget/multiselecttree/multiselecttree.popup.js","webpack:///./src/widget/multitree/check/multi.tree.check.pane.js","webpack:///./src/widget/multitree/multi.tree.combo.js","webpack:///./src/widget/multitree/multi.tree.insert.combo.js","webpack:///./src/widget/multitree/multi.tree.list.combo.js","webpack:///./src/widget/multitree/multi.tree.popup.js","webpack:///./src/widget/multitree/trigger/multi.tree.button.checkselected.js","webpack:///./src/widget/multitree/trigger/multi.tree.search.insert.pane.js","webpack:///./src/widget/multitree/trigger/multi.tree.search.pane.js","webpack:///./src/widget/multitree/trigger/searcher.list.multi.tree.js","webpack:///./src/widget/multitree/trigger/searcher.multi.tree.js","webpack:///./src/widget/numbereditor/number.editor.js","webpack:///./src/widget/numberinterval/numberinterval.js","webpack:///./src/widget/numberinterval/singleeditor/single.editor.js","webpack:///./src/widget/searchmultitextvaluecombo/multitextvalue.combo.search.js","webpack:///./src/widget/searchmultitextvaluecombo/multitextvalue.combo.trigger.search.js","webpack:///./src/widget/searchmultitextvaluecombo/multitextvalue.loader.search.js","webpack:///./src/widget/searchmultitextvaluecombo/multitextvalue.popup.view.search.js","webpack:///./src/widget/searchmultitextvaluecombo/trigger/searcher.multitextvalue.js","webpack:///./src/widget/selecttree/nodes/node.first.plus.js","webpack:///./src/widget/selecttree/nodes/node.last.plus.js","webpack:///./src/widget/selecttree/nodes/node.mid.plus.js","webpack:///./src/widget/selecttree/nodes/node.plus.js","webpack:///./src/widget/selecttree/selecttree.combo.js","webpack:///./src/widget/selecttree/selecttree.expander.js","webpack:///./src/widget/selecttree/selecttree.popup.js","webpack:///./src/widget/singleselect/search/singleselect.search.loader.js","webpack:///./src/widget/singleselect/search/singleselect.search.pane.insert.js","webpack:///./src/widget/singleselect/search/singleselect.search.pane.js","webpack:///./src/widget/singleselect/singleselect.combo.js","webpack:///./src/widget/singleselect/singleselect.insert.combo.js","webpack:///./src/widget/singleselect/singleselect.item.js","webpack:///./src/widget/singleselect/singleselect.list.js","webpack:///./src/widget/singleselect/singleselect.loader.js","webpack:///./src/widget/singleselect/singleselect.popup.view.js","webpack:///./src/widget/singleselect/singleselect.trigger.js","webpack:///./src/widget/singleselect/singleselectlist.insert.js","webpack:///./src/widget/singleselect/trigger/editor.singleselect.js","webpack:///./src/widget/singleselect/trigger/searcher.singleselect.js","webpack:///./src/widget/singleslider/button/editor.sign.text.js","webpack:///./src/widget/singleslider/button/iconbutton.slider.js","webpack:///./src/widget/singleslider/singleslider.js","webpack:///./src/widget/singleslider/singleslider.label.js","webpack:///./src/widget/singleslider/singleslider.normal.js","webpack:///./src/widget/singletree/singletree.combo.js","webpack:///./src/widget/singletree/singletree.popup.js","webpack:///./src/widget/singletree/singletree.trigger.js","webpack:///./src/widget/textvaluedownlistcombo/combo.textvaluedownlist.js","webpack:///./src/widget/textvaluedownlistcombo/trigger.textvaluedownlist.js","webpack:///./src/widget/time/datetime.popup.js","webpack:///./src/widget/time/time.combo.js","webpack:///./src/widget/time/time.trigger.js","webpack:///./src/widget/timeinterval/dateinterval.js","webpack:///./src/widget/timeinterval/timeinterval.js","webpack:///./src/widget/timeinterval/timeperiods.js","webpack:///./src/widget/year/card.dynamic.year.js","webpack:///./src/widget/year/card.year.js","webpack:///./src/widget/year/combo.year.js","webpack:///./src/widget/year/popup.year.js","webpack:///./src/widget/year/trigger.year.js","webpack:///./src/widget/yearmonth/card.dynamic.yearmonth.js","webpack:///./src/widget/yearmonth/card.static.yearmonth.js","webpack:///./src/widget/yearmonth/combo.yearmonth.js","webpack:///./src/widget/yearmonth/popup.yearmonth.js","webpack:///./src/widget/yearmonth/trigger.yearmonth.js","webpack:///./src/widget/yearmonthinterval/yearmonthinterval.js","webpack:///./src/widget/yearquarter/card.dynamic.yearquarter.js","webpack:///./src/widget/yearquarter/card.static.yearquarter.js","webpack:///./src/widget/yearquarter/combo.yearquarter.js","webpack:///./src/widget/yearquarter/popup.yearquarter.js","webpack:///./src/widget/yearquarter/trigger.yearquarter.js","webpack:///./src/component/allvaluechooser/abstract.allvaluechooser.js","webpack:///./src/component/allvaluechooser/combo.allvaluechooser.js","webpack:///./src/component/allvaluechooser/pane.allvaluechooser.js","webpack:///./src/component/allvaluemultitextvaluecombo/allvalue.multitextvalue.combo.js","webpack:///./src/component/treevaluechooser/abstract.treevaluechooser.js","webpack:///./src/component/treevaluechooser/abstract.treevaluechooser.list.js","webpack:///./src/component/treevaluechooser/combo.listtreevaluechooser.js","webpack:///./src/component/treevaluechooser/combo.treevaluechooser.insert.js","webpack:///./src/component/treevaluechooser/combo.treevaluechooser.js","webpack:///./src/component/treevaluechooser/pane.treevaluechooser.js","webpack:///./src/component/valuechooser/abstract.valuechooser.js","webpack:///./src/component/valuechooser/combo.valuechooser.insert.js","webpack:///./src/component/valuechooser/combo.valuechooser.js","webpack:///./src/component/valuechooser/pane.valuechooser.js","webpack:///./typescript/bundle.ts","webpack:///./typescript/index.ts","webpack:///./typescript/core/decorator/decorator.ts","webpack:///./dist/fix/fix.js","webpack:///./dist/fix/fix.compact.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","g","this","Function","e","window","scope","global","self","apply","Timeout","id","clearFn","_id","_clearFn","setTimeout","arguments","clearTimeout","setInterval","clearInterval","timeout","close","unref","ref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","active","_onTimeout","require","setImmediate","clearImmediate","webpackPolyfill","deprecate","paths","children","cachedSetTimeout","cachedClearTimeout","process","defaultSetTimout","Error","defaultClearTimeout","runTimeout","fun","currentQueue","queue","draining","queueIndex","cleanUpNextTick","length","concat","drainQueue","len","run","marker","runClearTimeout","Item","array","noop","nextTick","args","Array","push","title","browser","env","argv","version","versions","on","addListener","once","off","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","listeners","binding","cwd","chdir","dir","umask","_global","undefined","BI","prepares","LARGE_ARRAY_SIZE","FUNC_ERROR_TEXT","HASH_UNDEFINED","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","promiseTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reUnescapedHtml","reHasUnescapedHtml","RegExp","source","reIsDeepProp","reIsPlainProp","rePropName","reTrim","reWrapComment","reWrapDetails","reSplitDetails","reEscapeChar","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","rsAstralRange","rsComboRange","rsComboMarksRange","rsVarRange","rsAstral","rsCombo","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsZWJ","reOptMod","rsOptVar","rsSeq","join","rsSymbol","reUnicode","reHasUnicode","typedArrayTags","cloneableTags","freeParseFloat","parseFloat","freeParseInt","parseInt","freeGlobal","freeSelf","root","freeExports","nodeType","freeModule","moduleExports","freeProcess","nodeUtil","nodeIsDate","isDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","func","thisArg","arrayAggregator","setter","iteratee","accumulator","index","arrayEach","arrayEvery","predicate","arrayFilter","resIndex","result","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","values","offset","arrayReduce","initAccum","arraySome","asciiSize","baseProperty","baseFindKey","collection","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseReduce","baseTimes","baseUnary","cacheHas","cache","has","escapeHtmlChar","hasUnicode","string","test","mapToArray","map","size","forEach","overArg","transform","arg","replaceHolders","placeholder","safeGet","setToArray","set","stringSize","lastIndex","stringToArray","match","split","uid","arrayProto","funcProto","objectProto","coreJsData","funcToString","toString","idCounter","maskSrcKey","exec","keys","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","_","reIsNative","replace","Buffer","Uint8Array","allocUnsafe","getPrototype","getPrototypeOf","objectCreate","propertyIsEnumerable","splice","spreadableSymbol","isConcatSpreadable","symIterator","iterator","symToStringTag","getNative","nativeCeil","Math","ceil","nativeFloor","floor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","isBuffer","nativeIsFinite","isFinite","nativeKeys","nativeMax","max","nativeMin","min","nativeNow","Date","now","nativeRandom","random","DataView","reverse","Map","Promise","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","valueOf","symbolToString","lodash","isObjectLike","isArray","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","proto","isObject","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","add","Stack","data","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","String","isIndex","assignMergeValue","eq","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseClone","bitmask","customizer","stack","isDeep","isFlat","isFull","constructor","input","initCloneArray","copyArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","keysIn","getSymbolsIn","getSymbols","Ctor","cloneArrayBuffer","dataView","buffer","byteOffset","byteLength","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","cloneSymbol","initCloneByTag","stacked","subValue","props","getAllKeysIn","getAllKeys","baseDelay","wait","TypeError","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","pop","getMapData","pairs","baseForOwn","isArrayLike","iterable","baseEvery","baseExtremum","current","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseForOwnRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","baseGt","other","baseHas","baseHasIn","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","message","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","othLength","skipCtor","compared","othValue","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsNative","baseIteratee","identity","srcValue","isKey","isStrictComparable","matchesStrictComparable","hasIn","baseMatchesProperty","baseMatches","basePropertyDeep","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","matchData","getMatchData","noCustomizer","baseIsMatch","baseMerge","srcIndex","newValue","mergeFunc","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseMergeDeep","baseOrderBy","iteratees","orders","comparer","sort","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","compareAscending","order","compareMultiple","basePickBy","baseSet","baseRest","start","setToString","overRest","nested","baseSetData","baseSetToString","constant","baseSlice","end","baseSome","baseToString","baseUniq","seen","createSet","seenIndex","baseWrapperValue","actions","action","castArrayLikeObject","stringToPath","slice","copy","arrayBuffer","typedArray","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","createCtor","thisBinding","createCurry","arity","wrapper","getHolder","createRecurry","createHybrid","partialsRight","holdersRight","argPos","ary","isAry","isBind","isBindKey","isFlip","holdersCount","countHolders","newHolders","fn","indexes","arrLength","oldArray","reorder","createInverter","toIteratee","createPartial","wrapFunc","isCurry","newData","funcName","otherFunc","getFuncName","getData","isLaziable","setData","setWrapToString","createWrap","toInteger","srcBitmask","newBitmask","isCombo","mergeData","customDefaultsMerge","customOmitClone","arrValue","othIndex","flatRest","flatten","type","stubArray","hasPath","hasFunc","isLength","otherArgs","parent","ArrayBuffer","resolve","ctorString","shortOut","reference","details","insertWrapDetails","pair","count","lastCalled","stamp","remaining","memoize","charCodeAt","number","quote","subString","clone","difference","findIndex","head","intersection","arrays","mapped","caches","maxLength","Infinity","baseIntersection","last","union","unzip","group","without","zip","chain","thru","interceptor","skip","baseAt","countBy","findIndexFunc","find","groupBy","sortBy","before","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","timeWaiting","trailingEdge","debounced","isInvoking","toNumber","cancel","flush","defer","delay","resolver","memoized","Cache","negate","isNumber","isString","toArray","next","done","iteratorToArray","toFinite","remainder","isBinary","assignIn","defaults","propsIndex","propsLength","defaultsDeep","mergeWith","defaultValue","invert","invertBy","merge","omit","pick","mixin","methodNames","methodName","range","step","baseRange","after","compact","properties","drop","filter","flattenDeep","initial","matches","omitBy","prop","pickBy","reject","rest","take","takeRight","tap","throttle","uniq","uniqBy","zipObject","assignFunc","valsLength","baseZipObject","extend","clamp","lower","upper","cloneDeep","escape","every","findKey","findLastIndex","findLastKey","indexOf","isBoolean","isEmpty","isEqual","isNaN","isNull","isUndefined","noConflict","floating","temp","rand","reduce","some","trim","chars","strSymbols","chrSymbols","charsStartIndex","charsEndIndex","uniqueId","prefix","each","first","VERSION","isFilter","getIteratee","takeName","dropName","findLast","invokeMap","dropRight","takeRightWhile","takeWhile","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","view","transforms","getView","iterLength","takeCount","iterIndex","nextTickHandler","pending","copies","callbacks","counter","observer","textNode","timerFunc","traverse","_apply","_applyFunc","context","obj","assert","v","is","deepContains","warn","console","UUID","f","str","isWidget","widget","Widget","View","createWidgets","items","createWidget","deepClone","createItems","innerAttr","outerAttr","makeArray","shift","el","packageItems","layouts","k","it","formatEL","stripEL","trans2Element","widgets","wi","element","from","to","inverse","firstKey","res","any","lastKey","firstObject","lastObject","obj1","obj2","idx","backEach","backAny","backEvery","backFindKey","backFind","remove","target","contains","removeAt","string2Array","array2String","abc2Int","toUpperCase","charAt","int2Abc","num","DIGITS","makeObject","makeArrayByArray","callee","isSorted","inherit","sb","sp","overrides","F","spp","superclass","init","initialized","freeze","isCapitalEqual","a","b","toLowerCase","isWidthOrHeight","w","isNotNull","isEmptyArray","arr","isNotEmptyArray","isEmptyObject","isNotEmptyObject","isEmptyString","isNotEmptyString","isWindow","deepExtend","isDeepMatch","attrs","deepIndexOf","deepRemove","deepWithout","deepUnique","deepDiff","used","then","MutationObserver","document","createTextNode","observe","characterData","cb","_resolve","error","getTime","performance","webkitNow","getDate","radix","parseSafeInt","isNaturalNumber","isPositiveInteger","isNegativeInteger","isInteger","isNumeric","isFloat","isOdd","isEven","sum","Number","average","toLocaleUpperCase","toLocaleLowerCase","isEndWithBlank","isLiteral","exp","stripQuotes","camelize","character","hyphenate","encrypt","text","CRYPT_TYPE","AES","aesEncrypt","decrypt","aesDecrypt","leftPad","val","ch","format","isLeapYear","year","checkDateVoid","YY","MM","DD","minDate","maxDate","back","checkDateLegal","ar","MD","_MD","parseDateTime","fmt","today","y","substring","yearlength","j","hr","sec","_MN","substr","getFullYear","getMonth","getHours","getMinutes","getSeconds","search","dt","timeZone","localTime","localOffset","getTimezoneOffset","handle","tasksByHandle","runIfPresent","currentlyRunningATask","task","callback","nextHandle","doc","registerImmediate","html","channel","messagePrefix","onGlobalMessage","attachTo","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","event","addEventListener","attachEvent","MessageChannel","port1","port2","createElement","documentElement","script","onreadystatechange","removeChild","appendChild","OB","config","_constructor","destroyed","_initProps","_init","_initRef","_defaultConfig","_initListeners","lis","eventName","_purgeRef","_getEvents","events","fns","proxy","un","newFns","ifn","purgeListeners","fireEvent","destroy","C","C_lib","Base","WordArray","C_enc","Hex","Latin1","Utf8","BufferedBlockAlgorithm","C_algo","MD5","EvpKDF","ECB","CryptoJS","lib","subtype","mixIn","$super","instance","propertyName","words","sigBytes","encoder","stringify","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","thatByte","nBytes","enc","hexChars","bite","parse","hexStr","hexStrLength","latin1Chars","fromCharCode","latin1Str","latin1StrLength","decodeURIComponent","utf8Str","unescape","encodeURIComponent","reset","_data","_nDataBytes","_append","_process","doFlush","dataWords","dataSigBytes","blockSize","nBlocksReady","nWordsReady","_minBufferSize","nBytesReady","_doProcessBlock","processedWords","Hasher","cfg","_doReset","update","messageUpdate","finalize","_doFinalize","_createHelper","hasher","_createHmacHelper","HMAC","algo","Base64","_map","base64Chars","triplet","paddingChar","base64Str","paddingIndex","base64StrLength","bits1","bits2","T","abs","sin","_hash","M","offset_i","M_offset_i","H","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","hash","H_i","x","HmacMD5","keySize","iterations","compute","password","salt","derivedKey","derivedKeyWords","block","Cipher","createEncryptor","_ENC_XFORM_MODE","createDecryptor","_DEC_XFORM_MODE","xformMode","_xformMode","_key","dataUpdate","ivSize","cipher","selectCipherStrategy","ciphertext","PasswordBasedCipher","SerializableCipher","StreamCipher","CBC","C_mode","BlockCipherMode","iv","Encryptor","Decryptor","_cipher","_iv","processBlock","xorBlock","encryptBlock","_prevBlock","thisBlock","decryptBlock","Pkcs7","pad","blockSizeBytes","nPaddingBytes","paddingWord","paddingWords","padding","unpad","CipherParams","BlockCipher","modeCreator","_mode","finalProcessedBlocks","cipherParams","formatter","OpenSSLFormatter","OpenSSL","openSSLStr","ciphertextWords","encryptor","cipherCfg","algorithm","_parse","OpenSSLKdf","kdf","execute","derivedParams","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","xi","sx","x2","x4","x8","RCON","keyWords","ksRows","_nRounds","keySchedule","_keySchedule","ksRow","invKeySchedule","_invKeySchedule","invKsRow","_doCryptBlock","nRounds","s0","s1","s2","s3","round","t0","t1","t2","t3","decipher","aspect","advice","dispatcher","exist","beforeArr","rs","method","afterArr","ii","aspectArr","_index","_keyStr","encode","chr1","chr2","chr3","enc1","enc2","enc3","enc4","output","utftext","_utf8_encode","decode","c3","c2","_utf8_decode","_prefix","setUsername","username","localStorage","setItem","getUsername","getItem","_getKeyPrefix","_generateKey","removeItem","addCookie","expiresHours","date","cookieString","setTime","toUTCString","cookie","getCookie","reg","deleteCookie","CellSizeAndPositionManager","cellCount","cellSizeGetter","estimatedCellSize","_cellSizeGetter","_cellCount","_estimatedCellSize","_cellSizeAndPositionData","_lastMeasuredIndex","configure","getCellCount","getEstimatedCellSize","getLastMeasuredIndex","getSizeAndPositionOfCell","lastMeasuredCellSizeAndPosition","getSizeAndPositionOfLastMeasuredCell","getTotalSize","getUpdatedOffsetForIndex","align","containerSize","currentOffset","targetIndex","idealOffset","datum","maxOffset","minOffset","totalSize","getVisibleCellRange","_findNearestCell","stop","resetCell","_binarySearch","high","low","middle","_exponentialSearch","interval","lastMeasuredIndex","ScalingCellSizeAndPositionManager","maxScrollSize","_cellSizeAndPositionManager","_maxScrollSize","getOffsetAdjustment","safeTotalSize","offsetPercentage","_getOffsetPercentage","_safeOffsetToOffset","_offsetToSafeOffset","oMultiDiff","19969","19975","19988","20048","20056","20060","20094","20127","20167","20193","20250","20256","20282","20285","20291","20314","20315","20340","20375","20389","20391","20415","20446","20447","20504","20608","20854","20857","20911","20985","21032","21048","21049","21089","21119","21242","21273","21305","21306","21330","21333","21345","21378","21397","21414","21442","21477","21480","21484","21494","21505","21512","21523","21537","21542","21549","21571","21574","21588","21589","21618","21621","21632","21654","21679","21683","21710","21719","21734","21769","21780","21804","21834","21899","21903","21908","21939","21956","21964","21970","22003","22031","22040","22060","22066","22079","22129","22179","22237","22244","22280","22300","22313","22331","22343","22351","22395","22412","22484","22500","22534","22549","22561","22612","22771","22831","22841","22855","22865","23013","23081","23487","23558","23561","23586","23614","23615","23631","23646","23663","23673","23762","23769","23780","23884","24055","24113","24162","24191","24273","24324","24377","24378","24439","24554","24683","24694","24733","24925","25094","25100","25103","25153","25170","25179","25203","25240","25282","25303","25324","25341","25373","25375","25384","25457","25528","25530","25552","25774","25874","26044","26080","26292","26333","26355","26366","26397","26399","26415","26451","26526","26552","26561","26588","26597","26629","26638","26646","26653","26657","26727","26894","26937","26946","26999","27099","27449","27481","27542","27663","27748","27784","27788","27795","27812","27850","27852","27895","27898","27973","27981","27986","27994","28044","28065","28177","28267","28291","28337","28463","28548","28601","28689","28805","28820","28846","28952","28975","29100","29325","29575","29602","30010","30044","30058","30091","30111","30229","30427","30465","30631","30655","30684","30707","30729","30796","30917","31074","31085","31109","31181","31192","31293","31400","31584","31896","31909","31995","32321","32327","32418","32420","32421","32438","32473","32488","32521","32527","32562","32564","32735","32793","33071","33098","33100","33152","33261","33324","33333","33406","33426","33432","33445","33486","33493","33507","33540","33544","33564","33617","33632","33636","33637","33694","33705","33728","33882","34067","34074","34121","34255","34259","34425","34430","34485","34503","34532","34552","34558","34593","34660","34892","34928","34999","35048","35059","35098","35203","35265","35299","35782","35828","35830","35843","35895","35977","36158","36228","36426","36466","36710","36711","36767","36866","36951","37034","37063","37218","37325","38063","38079","38085","38107","38116","38123","38224","38241","38271","38415","38426","38461","38463","38466","38477","38518","38551","38585","38704","38739","38761","38808","39048","39049","39052","39076","39271","39534","39552","39584","39647","39730","39748","40109","40479","40516","40536","40583","40765","40784","40840","40863","makeFirstPY","uni","arrResult","ignoreMulti","splitChar","arrRslt","multiLen","strlen","tmpStr","tmpArr","tmp","_mkPYRslt","defaultComparator","Heap","_items","_size","_comparator","_heapify","empty","elt","lastElt","_sinkDown","_bubbleUp","peek","parentIndex","parentElt","leftChild","rightChild","leftChildIndex","rightChildIndex","swapIndex","LinkHashMap","LRU","limit","tail","_keymap","put","removed","newer","older","returnEntry","Int32Array","node","xs","PrefixIntervalTree","_half","ceilLog2","_heap","getSize","sumUntil","sumTo","inclusiveEnd","begin","greatestLowerBound","leftSum","greatestStrictLowerBound","leastUpperBound","leastStrictUpperBound","uniform","initialValue","Queue","capacity","getElementByIndex","unshift","fromArray","Section","height","width","_indexMap","_indices","addCellIndex","getCellIndices","SectionManager","sectionSize","_sectionSize","_cellMetadata","_sections","indices","getSections","section","getCellMetadata","sectionXStart","sectionXStop","sectionYStart","sectionYStop","sections","sectionX","sectionY","getTotalSectionCount","registerCell","cellMetadatum","Tree","Node","addNode","newNode","addChild","isRoot","getRoot","initTree","nodes","child","_toJSON","getChildren","toJSON","_toJSONWithNode","toJSONWithNode","param","_traverse","_recursion","route","recursion","inOrderTraverse","_inOrderTraverse","getLeft","getRight","nrInOrderTraverse","preOrderTraverse","_preOrderTraverse","nrPreOrderTraverse","postOrderTraverse","_postOrderTraverse","nrPostOrderTraverse","preNode","isLeaf","getChildrenLength","getFirstChild","getLastChild","setLeft","left","setRight","right","setParent","getParent","getChild","getChildIndex","removeChildByIndex","behind","removeAllChilds","cur","equals","transformToArrayFormat","pId","newNodes","arrayFormat","transformToTreeFormat","sNodes","tmpMap","treeFormat","traversal","Vector","cross","sqrt","Region","h","isIntersects","isPointInside","vector1","vector2","vector3","getPosition","pos","isInvalidDate","_eFormat","neg","magnitudeNeg","magnitude","log","pow","integerLen","formatLeft","valueLeftLen","getInteger","precision","getPrecision","isValueCarry","roundNum","isValueCarried","toFixed","isAllZero","formatExponential","eFormat","_dealNumberPrecision","fright","_numberFormat","numMod","paddingZero","fp","fleft","tp","tleft","tright","_dealWithRight","leftPlus","_dealWithLeft","numReg","orilen","newnum","rll","tll","combo","com","newstr","lres","cjkEncode","newText","code","cjkDecode","rightIdx","subText","eval","SPECIAL_TAGS","\"","htmlEncode","replaceAll","htmlDecode","cjkEncodeDO","jsonEncode","useHasOwn","encodeArray","__time__","jsonDecode","jo","$","parseJSON","JSON","json","getEncodeURL","urlTemplate","ori","url","specialCharsMap","reserveSpecialCharsMap","initialChar","encodeChar","contentFormat","cv","needTrim","date2Str","parseFmt","str2Date","flagch","compileJFmt","char","jfmt","_DN","getDay","hour","getTimezone","object2Number","object2Date","object2Time","pushArray","sArray","pushDistinct","pushDistinctArray","SECOND","MINUTE","HOUR","DAY","WEEK","getMonthDays","month","getLastDateOfMonth","getDayOfYear","getWeekNumber","week","startOfWeek","StartOfWeek","middleDay","offsetWeekStartCount","offsetWeekMiddleCount","setDate","ms","setMonth","getQuarter","getOffsetDate","getOffsetQuarter","day","monthDay","getQuarterStartMonth","quarterStartMonth","nowMonth","getQuarterStartDate","getQuarterEndDate","quarterEndMonth","getOffsetMonth","getWeekStartDate","_OFFSET","getWeekEndDate","print","yWith4number","wn","qr","pm","ir","dy","_SDN","_SMN","re","isKhtml","navigator","userAgent","par","Func","createDistinctName","src","getGBWidth","getSearchResult","keyword","py","matched","beforeFunc","sFunc","__self","afterFunc","ret","arg1","arg2","r1","r2","cm","accAdd","sub","mul","accMul","div","accDivide","digitLength","eSplit","float2Fixed","dLen","times","num1","num2","others","_i","num1Changed","num2Changed","baseNum","startWith","startTag","endWith","endTag","getQuery","appendQuery","paras","perfectStart","allIndexOf","location","loc","i18nStore","addI18n","i18n","i18nText","localeText","moduleInjection","xtype","cls","constantInjection","modelInjection","model","storeInjection","store","serviceInjection","service","providerInjection","provider","configFunctions","configFn","providers","Plugin","configWidget","globalAction","actionFn","points","point","pointFn","Modules","getModule","getAllModules","Constants","getConstant","callPoint","inst","types","bfns","afns","Models","getModel","mixins","stores","Stores","getStore","services","Services","getService","providerInstance","Providers","getProvider","$get","Actions","runAction","act","runGlobalAction","getContext","MAX","MIN","EVENT_RESPONSE_TIME","zIndex_layer","zIndex_popover","zIndex_popup","zIndex_masker","zIndex_tip","emptyStr","emptyFn","Key","48","49","50","51","52","53","54","55","56","57","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","106","107","109","110","111","KeyCode","BACKSPACE","COMMA","DELETE","DOWN","END","ENTER","ESCAPE","HOME","LEFT","NUMPAD_ADD","NUMPAD_DECIMAL","NUMPAD_DIVIDE","NUMPAD_ENTER","NUMPAD_MULTIPLY","NUMPAD_SUBTRACT","PAGE_DOWN","PAGE_UP","PERIOD","RIGHT","SPACE","TAB","UP","Status","SUCCESS","WRONG","START","WAITING","READY","RUNNING","OUTOFBOUNDS","NULL","Direction","Top","Bottom","Left","Right","Custom","Axis","Vertical","Horizontal","Selection","Default","None","Single","Multi","All","HorizontalAlign","Center","Stretch","VerticalAlign","Middle","BufferPool","_Shared","SharingPool","shared","cat","Req","tagName","attributes","disabled","invisible","invalid","baseCls","extraCls","css","beforeInit","beforeCreate","created","render","beforeMount","mounted","shouldUpdate","beforeDestroy","_initRoot","_initElementWidth","_initElementHeight","_initVisual","_initState","_initRender","__asking","_render","__async","_initElement","_initEffects","widgetName","_isRoot","_parent","addWidget","_renderEngine","_isWidget","_baseCls","addClass","attr","_children","setEnable","setValid","_isMounted","els","_mount","_setParent","force","deep","lifeHook","isVisible","_mountChildren","isEnabled","_setEnable","isValid","_setValid","Events","MOUNT","isMounted","setWidth","setHeight","enable","_manualSetEnable","valid","_manualSetValid","_setVisible","visible","removeClass","setVisible","VIEW","doBehavior","getWidth","getHeight","getName","DESTROY","getWidgetByName","removeWidget","nameOrWidget","hasWidget","getText","setText","getValue","setValue","disable","__d","_unMount","UNMOUNT","isolate","DOM","hang","_destroy","registerRenderEngine","engine","createFragment","createDocumentFragment","mount","container","hydrate","append","ws","patchProps","triggerLifeHook","kv","shortcut","component","getWidget","getObject","cancelAnimationFrame","requestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","oCancelAnimationFrame","msCancelAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","oRequestAnimationFrame","msRequestAnimationFrame","MouseMoveTracker","onMove","onMoveEnd","domNode","_isDragging","_animationFrameID","_domNode","_onMove","_onMoveEnd","_onMouseMove","_onMouseUp","_didMouseMove","captureMouseMoves","_eventMoveToken","_eventUpToken","EventListener","listen","_deltaX","_deltaY","_x","clientX","_y","clientY","preventDefault","returnValue","releaseMouseMoves","isDragging","WheelHandler","onWheel","handleScrollX","handleScrollY","stopPropagation","_didWheel","_handleScrollX","_handleScrollY","_stopPropagation","_onWheelCallback","sX","sY","pX","pY","changed","normalizedEvent","detail","wheelDelta","wheelDeltaY","wheelDeltaX","axis","HORIZONTAL_AXIS","deltaY","deltaX","deltaMode","spinX","spinY","pixelX","pixelY","cancelBubble","BehaviorFactory","createBehavior","behavior","HighlightBehavior","RedMarkBehavior","Behavior","rule","Layout","scrollable","scrollx","scrolly","_init4Margin","_init4Scroll","top","bottom","appendFragment","frag","hasChild","_getChildName","_addElement","removeItemAt","_getOptions","_compare","item1","item2","aStack","bStack","className","areArrays","_getWrapper","_addItemAt","_removeItemAt","addItem","addItemAt","prependItem","prependTo","deleted","newItems","newChildren","shouldUpdateItem","updateItemAt","updated","del","addItems","fragment","added","prependItems","prepend","patchItem","oldVnode","vnode","updateChildren","oldCh","newCh","sameOldVnode","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","sameVnode","insertBefore","vnodes","vNode","beginIdx","endIdx","found","findOldVnode","vnode1","vnode2","oldIndex","newIndex","opt","insert","isNext","beforeKey","insertKey","startIdx","addVnodes","removeVnodes","stroke","removeIndex","populate","resize","_GlobalWidgetConfigFn","_GlobalObjectConfigFn","_WidgetsPlugin","_ObjectPlugin","_ConfigPlugin","widgetConfigFn","objectConfigFn","registerWidget","relieveWidget","registerObject","relieveObject","Action","tar","actionPerformed","actionBack","ActionFactory","createAction","ShowAction","doBe","doHighLight","unHighLight","doRedMark","unRedMark","Controller","EVENT_CHANGE","BroadcastController","_broadcasts","send","BubblesController","_const","bubbleHeight","bubblesManager","storeBubbles","Resizers","_createBubble","direct","level","direction","_getOffsetLeft","offsetStyle","bounds","_getOffsetTop","_getLeftPosition","position","getLeftPosition","_getBottomPosition","getBottomPosition","_getTopPosition","getTopPosition","_getRightPosition","getRightPosition","show","adjustYOffset","adjustXOffset","isTopSpaceEnough","isLeftSpaceEnough","isRightSpaceEnough","hide","bubble","LayerController","layerManager","zindex","_resize","layer","trigger","make","op","layout","outerWidth","outerHeight","_getLayout","removeAll","MaskersController","PopoverController","modal","floatManager","floatLayer","floatContainer","floatOpened","zindexMap","_check","popover","Popover","EVENT_CLOSE","open","__hasZIndexMask__","__releaseZIndexMask__","__buildZIndexMask__","setZindex","W","ResizeController","resizerManger","ev","resizer","TooltipsController","tooltipsManager","showingTips","_createTooltip","stopEvent","tooltip","tip","belowMouse","scrollHeight","pageX","pageY","bodyHeight","hover","KEYDOWN","CONFIRM","ERROR","PAUSE","CLEAR","ADD","EDITING","EMPTY","RESIZE","BEFOREEDIT","AFTEREDIT","STARTEDIT","STOPEDIT","CHANGE","EXPAND","COLLAPSE","CALLBACK","CLICK","STATECHANGE","BEFORESTATECHANGE","INIT","AFTERINIT","SCROLL","STARTLOAD","AFTERLOAD","BS","AS","SC","SF","SS","BVW","AVW","AV","BW","AW","WS","WF","BA","AA","BD","AD","UC","BTOPDF","ATOPDF","BTOEXCEL","ATOEXCEL","BTOWORD","ATOWORD","BTOIMAGE","ATOIMAGE","BTOHTML","ATOHTML","BIMEXCEL","AIMEXCEL","BPDFPRINT","APDFPRINT","BFLASHPRINT","AFLASHPRINT","BAPPLETPRINT","AAPPLETPRINT","BSEVERPRINT","ASERVERPRINT","BEMAIL","AEMAIL","_FD","_QN","ShowListener","eventObj","cardLayout","cardNameCreator","cardCreator","afterCardCreated","afterCardShow","ob","card","cardName","isCardExisted","addCardByName","showCardByName","StyleLoaderManager","stylesManager","loadStyle","styleString","styles","getElementsByTagName","setAttribute","styleSheet","cssText","removeStyle","parentNode","Logic","createLogic","LogicFactory","Type","Table","HorizontalFill","logic","VerticalLayoutLogic","HorizontalLayoutLogic","TableLayoutLogic","HorizontalFillLayoutLogic","createLogicTypeByDirection","createLogicItemsByDirection","dynamic","hgap","vgap","lgap","rgap","tgap","bgap","columns","rows","columnSize","rowSize","multiply","base","divide","acc","fractionDigits","z","RangeError","AbsoluteCenterLayout","margin","AbsoluteHorizontalLayout","AbsoluteVerticalLayout","CenterAdaptLayout","horizontalAlign","verticalAlign","_ref","HorizontalAdaptLayout","LeftRightVerticalAdaptLayout","llgap","lrgap","lhgap","rlgap","rrgap","rhgap","layoutArray","textAlign","LeftVerticalAdaptLayout","RightVerticalAdaptLayout","TableAdaptLayout","$table","display","td","VerticalAdaptLayout","HorizontalAutoLayout","FloatHorizontalLayout","InlineCenterAdaptLayout","InlineLayout","whiteSpace","InlineVerticalAdaptLayout","FlexCenterLayout","FlexHorizontalCenter","FlexHorizontalLayout","FlexVerticalCenter","FlexVerticalLayout","FlexWrapperCenterLayout","$wrapper","FlexWrapperHorizontalCenter","FlexWrapperHorizontalLayout","FlexWrapperVerticalCenter","FlexWrapperVerticalLayout","AbsoluteLayout","AdaptiveLayout","BorderLayout","regions","CardLayout","showIndex","tItem","defaultShowName","getCardByName","_deleteCardByName","deleteCardByName","cardItem","appendTo","lastShowIndex","flag","showLastCard","setDefaultShowName","getDefaultShowName","getAllCardNames","getShowingCard","deleteAllCard","hideAllCard","isAllCardHide","removeName","DefaultLayout","DivisionLayout","opitons","widths","heights","firstElement","row","col","column","totalW","totalH","FloatLeftLayout","float","FloatRightLayout","GridLayout","HorizontalLayout","cellspacing","cellpadding","border","$tr","HorizontalCellLayout","LatticeLayout","TableLayout","HTapeLayout","VTapeLayout","TdLayout","tr","VerticalLayout","WindowLayout","CenterLayout","list","FloatCenterLayout","HorizontalCenterLayout","VerticalCenterLayout","Pane","tipText","overlap","onLoaded","_assertTip","_tipText","loading","isIE","loadingAnimation","setTipVisible","Layers","_loading","loaded","EVENT_LOADED","check","conf","readonly","warningTitle","tipType","_showToolTip","getTipType","getWarningTitle","getTitle","Tooltips","_hideTooltip","fadeOut","enableHover","_clearTimeOut","showTimeout","hideTimeout","_hoverBinded","_e","__isMouseInBounds__","disabledHover","unbind","setTitle","setWarningTitle","isReadOnly","Text","lineHeight","handler","highLight","maxWidth","_getTextWrap","textOverflow","overflow","click","_getShowText","__textKeywordMarked__","setStyle","isIE9Below","textContent","BasicButton","getIEVersion","selected","forceSelected","forceNotSelected","disableSelected","shadow","isShadowShowingOnSelected","opts","setSelected","bindEvent","_createShadow","assertMask","$mask","mouseup","_hover","isSelected","triggerArr","onClick","hand","clk","isOnce","popup","destroyWhenHide","getBubble","BubblePopupBarView","EVENT_CLICK_TOOLBAR_BUTTON","hideView","BubbleCombo","EVENT_BEFORE_POPUPVIEW","isViewVisible","showView","mouseDown","mousedown","isExist","_trigger","dblclick","doClick","_doClick","isDisableSelected","isForceSelected","isForceNotSelected","beforeClick","dishover","NodeButton","setOpened","isOpened","triggerCollapse","triggerExpand","Tip","zIndex","ButtonGroup","behaviors","chooseType","_createBtns","_btnsCreator","buttons","btn","CHOOSE_TYPE_SINGLE","CHOOSE_TYPE_NONE","_packageBtns","btns","_packageSimpleItems","_packageItems","packBtns","_packageLayout","lay","_isSimpleLayout","removeItems","button","setNotSelectedValue","setEnabledValue","getNotSelectedValue","getAllButtons","getAllLeaves","getSelectedButtons","getNotSelectedButtons","getIndexByValue","getNodeById","getNodeByValue","CHOOSE_TYPE_MULTI","CHOOSE_TYPE_ALL","CHOOSE_TYPE_DEFAULT","ButtonTree","leaves","vs","Maskers","Bubbles","Popovers","Broadcasts","StyleLoaders","CollectionView","overflowX","overflowY","cellSizeAndPositionGetter","horizontalOverscanSize","verticalOverscanSize","scrollLeft","scrollTop","renderedCells","renderedKeys","renderRange","_scrollLock","_debounceRelease","scroll","_calculateChildrenToRender","EVENT_SCROLL","_calculateSizeAndPositionData","_populate","cellMetadata","sectionManager","_sectionManager","_height","_width","_cellRenderers","_lastRenderedCellIndices","_cellGroupRenderer","rendered","_getMaxScrollLeft","_getMaxScrollTop","minY","maxY","minX","maxX","childrenToDisplay","renderedWidgets","lefts","tops","leftMap","topMap","leftBorder","rightBorder","topBorder","bottomBorder","assertMinBorder","MAX_VALUE","assertMaxBorder","_left","_top","startTopIndex","endTopIndex","startLeftIndex","endLeftIndex","existSet","addSet","deleteArray","addedItems","getScrollWidth","_reRange","setScrollLeft","setScrollTop","setOverflowX","setOverflowY","getScrollLeft","getScrollTop","getMaxScrollLeft","getMaxScrollTop","_clearChildren","restore","cell","Combo","toggle","isDefaultInit","isNeedAdjustHeight","isNeedAdjustWidth","adjustLength","hideChecker","comboClass","hoverClass","_initCombo","_initPullDownAction","_popupView","_hideView","EVENT_EXPAND","EVENT_COLLAPSE","EVENT_TRIGGER_CHANGE","_assertPopupView","_toggle","_assertPopupViewRender","popupView","evs","st","enterPopup","EVENT_AFTER_INIT","_rendered","_hideIf","directions","closest","adjustWidth","adjustHeight","EVENT_BEFORE_HIDEVIEW","EVENT_AFTER_HIDEVIEW","EVENT_AFTER_POPUPVIEW","maxW","resetListWidth","offsetX","offsetY","getComboPosition","getTopAdaptPosition","getBottomAdaptPosition","getLeftAdaptPosition","adaptHeight","getRightAdaptPosition","resetListHeight","resetHeight","resetWidth","getPopupPosition","Expander","expanderClass","_expanded","_initExpander","expander","isExpanded","ComboGroup","son","VirtualGroup","buttonMap","Loader","itemsCreator","prev","hasPrev","hasNext","_prevLoad","setLoading","setLoaded","_nextLoad","button_group","setEnd","Navigation","single","tab","cardMap","setSelect","_deleteOtherCards","currCardName","_assertCard","getSelect","getSelectedCard","Searcher","isAutoSearch","isAutoSync","allowSearchBlank","onSearch","adapter","masker","editor","_search","_startSearch","_stopSearch","_pauseSearch","_stop","_isSearching","EVENT_START","startSearch","pauseSearch","EVENT_PAUSE","stopSearch","EVENT_STOP","_getLastSearchKeyword","getItems","finding","EVENT_SEARCHING","selectedValues","searchResult","matchResult","setAdapter","doSearch","isSearching","blur","hasMatched","adjustView","getKeyword","getKeywords","Switcher","switcherClass","_initSwitcher","switcher","_created","Tab","curr","removeTab","cardname","getSelectedTab","getTab","EL","ele","$pop","messageShows","toastStack","Msg","alert","_show","confirm","prompt","min_width","toast","autoClose","Toast","EVENT_DESTORY","hasCancel","opacity","controlItems","north","center","east","south","GridView","overscanColumnCount","overscanRowCount","rowHeightGetter","columnWidthGetter","_getOverscanIndices","overscanCellsCount","startIndex","stopIndex","overscanStartIndex","overscanStopIndex","visibleColumnIndices","_columnSizeAndPositionManager","visibleRowIndices","_rowSizeAndPositionManager","horizontalOffsetAdjustment","verticalOffsetAdjustment","_renderedColumnStartIndex","_renderedColumnStopIndex","_renderedRowStartIndex","_renderedRowStopIndex","overscanColumnIndices","columnCount","overscanRowIndices","rowCount","columnStartIndex","columnStopIndex","rowStartIndex","rowStopIndex","minRowDatum","minColumnDatum","maxRowDatum","maxColumnDatum","rowIndex","rowDatum","columnIndex","columnDatum","_rowIndex","_columnIndex","_getRealMaxScrollLeft","totalWidth","estimatedColumnSize","estimatedRowSize","setColumnCount","setRowCount","setEstimatedColumnSize","setEstimatedRowSize","_constant","SIZE","SMALL","NORMAL","BIG","HEADER_HEIGHT","header","body","footer","closable","startX","startY","tracker","_calculateSize","dragger","compareHeight","EVENT_OPEN","BarPopover","EVENT_CANCEL","EVENT_CONFIRM","PopupView","minWidth","minHeight","innerVGap","tool","tabs","mouseover","_createTool","_createTab","_createView","toolbar","_createToolBar","SearcherView","matcher","redmark","searcher","spliter","ListView","overscanHeight","renderedIndex","_calculateBlocksToRender","lastWidth","lastHeight","ResizeDetector","addResizeListener","_renderMoreIf","minContentHeight","cnt","getElementHeight","addedHeight","VirtualList","topBlank","bottomBlank","tree","minContentHeightFrom","minContentHeightTo","needDestroyed","firstFragment","lastFragment","currentFragment","lastCache","Pager","dynamicShow","dynamicShowFirstLast","dynamicShowPrevNext","pages","groups","jump","firstPage","lastPage","currPage","dict","poor","flow","EVENT_AFTER_POPULATE","getCurrentPage","setAllPages","A","href","LoadingBar","_reset","IconButton","iconWidth","iconHeight","icon","ImageButton","image","setImageWidth","setImageHeight","getImageWidth","getImageHeight","setSrc","getSrc","Button","iconCls","ghost","textWidth","textHeight","TextButton","style","BlankIconIconTextItem","iconCls1","iconCls2","blankWidth","textHgap","textVgap","textLgap","textRgap","blank","icon1","icon2","BlankIconTextIconItem","BlankIconTextItem","IconTextIconItem","leftIconWrapperWidth","rightIconWrapperWidth","IconTextItem","iconWrapperWidth","TextIconItem","TextItem","IconTextIconNode","IconTextNode","TextIconNode","TextNode","Editor","inputType","validationChecker","quitChecker","allowBlank","watermark","errorText","outline","_assertWaterMark","contentWrapper","Input","EVENT_FOCUS","_checkError","EVENT_BLUR","_setErrorVisible","EVENT_CLICK","EVENT_KEY_DOWN","EVENT_QUICK_DOWN","keyCode","EVENT_VALID","_checkWaterMark","EVENT_ERROR","isEditing","EVENT_RESTRICT","fadeIn","EVENT_EMPTY","EVENT_ENTER","EVENT_SPACE","EVENT_BACKSPACE","EVENT_REMOVE","EVENT_CHANGE_CONFIRM","_checkToolTip","focus","disabledWaterMark","setErrorText","getErrorText","setWaterMark","disabledError","disableError","enableError","disableWaterMark","enableWaterMark","selectAll","onKeyDown","getLastValidValue","getLastChangedValue","MultifileEditor","multiple","maxSize","accept","file","File","EVENT_UPLOADSTART","EVENT_PROGRESS","EVENT_UPLOADED","select","upload","TextAreaEditor","content","_focus","_blur","color","getContrastColor","isRGBColor","backgroundColor","rgb2hex","getStyle","Html","Icon","Iframe","frameborder","setName","Img","ImageCheckbox","Checkbox","checkbox","ctrlKey","inputEventValid","_keydown","_keydown_","_clk","_click","_focusDebounce","_blurDebounce","keydown","metaKey","keyup","originalEvent","focusout","_checkValidationOnValueChange","_isEditing","lastValidValue","_lastValidValue","_defaultState","_start","_lastChangedValue","_lastValue","_pause","lastValue","_valueChange","_lastSubmitValue","textValue","ImageRadio","Radio","radio","AbstractLabel","_createJson","_createCenterEl","_createNotCenterEl","adaptLayout","HtmlLabel","IconLabel","Label","Link","Bubble","mouseenter","mouseleave","mousemove","_createBubbleText","_bottom","_right","Tooltip","texts","setLevel","Trigger","setKey","getKey","CustomTree","_formatItems","isParent","IconChangeButton","setIcon","TriggerIconButton","HalfIconButton","HalfButton","MultiSelectItem","SingleSelectIconTextItem","SingleSelectItem","SingleSelectRadioItem","ArrowNode","FirstPlusGroupNode","IconArrowNode","LastPlusGroupNode","MidPlusGroupNode","MultiLayerIconArrowNode","PlusGroupNode","Switch","FirstTreeLeafItem","pNode","isLastNode","getId","getPId","IconTreeLeafItem","LastTreeLeafItem","MidTreeLeafItem","MultiLayerIconTreeLeafItem","isFront","TreeTextLeafItem","CalendarDateItem","Calendar","_dateCreator","Y","D","De","mins","maxs","setFullYear","ymd","FDay","offSetFDay","PDay","NDay","lastMonth","currentDay","nextMonth","_getWeekLabel","days","_getItems","isFrontDate","newDate","isFinalDate","setMinDate","setMaxDate","getPageByDateJSON","page","getDateJSONByPage","YearCalendar","_yearCreator","getStartYear","startDate","endDate","INTERVAL","currentYear","years","isFrontYear","isFinalYear","getEndYear","tyears","getPageByYear","ArrowTreeGroupNodeCheckbox","CheckingMarkNode","FirstTreeNodeCheckbox","LastTreeNodeCheckbox","MidTreeNodeCheckbox","TreeNodeCheckbox","TRIANGLE_LENGTH","_getAdjustLength","_showTriangle","_hideTriangle","_createTriangle","triangle","_createLeftTriangle","_createRightTriangle","_createTopTriangle","_createBottomTriangle","BubblePopupView","buttonOpt","TextBubblePopupBarView","EditorIconCheckCombo","baseClass","EditorTrigger","TextValueCheckComboPopup","editorIconCheckCombo","maxHeight","IconCombo","IconComboPopup","iconCombo","IconComboTrigger","isShowDown","_digest","down","IconTextValueCombo","tabIndex","IconTextValueComboPopup","textIconCombo","SearchTextValueCombo","SearchTextValueTrigger","getSearcher","TextValueComboPopup","stopEditing","triggerBtn","SearchTextValueComboPopup","defaultText","_setState","setState","vals","formatItems","TextValueCheckCombo","textIconCheckCombo","TextValueCombo","setTipType","SmallTextValueCombo","ClearEditor","EVENT_CLEAR","_checkClear","ShelterEditor","EVENT_CLICK_LABEL","_showHint","_checkText","_showInput","setTextStyle","getState","SignEditor","StateEditor","stateValue","_setText","SimpleStateEditor","mouseOut","MultiPopupView","buttongroup","PopupPanel","ListPane","calback","Panel","titleButtons","_createTitle","LinearSegmentButton","line","LinearSegment","buttonGroup","SelectList","allSelected","setAllSelected","_checkAllSelected","selectLength","notSelectLength","isAlreadyAllSelected","isHalf","setHalfSelected","setToolBarVisible","isAllSelected","assist","toolHeight","LazyLoader","PAGE","all","loader","_getNextItems","option","lastNum","lastItems","ListLoader","SortList","sortable","containment","connectWith","cursor","tolerance","$currentItem","holder","ui","over","sorted","getSortedValues","attribute","LoadingPane","__loaded","AllCountPager","pagerDirection","pagerIconCls","_getPagerIconCls","pager","preCls","nextCls","TextEditor","allPages","alwaysShowPager","setPagerVisible","setVPage","setCount","DirectionPager","horizontal","vertical","_createVPager","_createHPager","vpager","vlabel","hpager","hlabel","getVPage","getHPage","setHPage","hasVNext","hasHNext","hasVPrev","hasHPrev","setHPagerVisible","setVPagerVisible","vShow","hShow","DetailPager","_lock","_debouce","SegmentButton","Segment","MultiSelectBar","isAllCheckedBySelectedValue","isHalfCheckedBySelectedValue","halfSelected","isSelect","isHalfSelect","half","_setSelected","isHalfSelected","isAllChecked","LevelTree","_assertId","triggerWidth","IconTrigger","iconButton","IconTextTrigger","textCls","trigerButton","iconItem","textItem","setTextCls","oldCls","SelectIconTextTrigger","_digist","TextTrigger","SelectTextTrigger","formatValue","SmallSelectTextTrigger","SmallTextTrigger","MonthDateCombo","YearPopup","YearDateCombo","DatePicker","_year","_month","_checkLeftValid","_checkRightValid","YearPicker","DateCalendarPopup","selectedTime","_createNav","_day","datePicker","calendar","_checkMin","_checkMax","timeOb","MonthPopup","_createYearCalendar","selectedYear","backBtn","preBtn","navigation","DateTriangleTrigger","StaticDatePaneCard","_getNewCurrentDate","_setCalenderValue","_setDatePicker","_setCalendar","DynamicDatePane","Static","Dynamic","dateTab","DynamicDateHelper","getCalculation","dynamicPane","_checkValue","_checkValueValid","DynamicDateCombo","DateTimeCombo","constants","popupHeight","popupWidth","comboAdjustHeight","storeValue","minute","second","DateTimePopup","BUTTON_CANCEL_EVENT_CHANGE","hidePopupView","BUTTON_OK_EVENT_CHANGE","cancelButton","okButton","dateCombo","CALENDAR_EVENT_CHANGE","dateButton","timeSelect","DateTimeTrigger","_printTime","dateStr","StaticDateTimePaneCard","DynamicDateTimeSelect","DynamicDateTimePane","DownListCombo","popupview","DownListPopup","downlistcombo","EVENT_SON_VALUE_CHANGE","fatherValue","DownListGroup","downlistgroup","DownListItem","DownListGroupItem","childValues","nextIcon","singleValues","childValueMap","fatherValueMap","_createChildren","changedValue","valueObject","spliter_container","item_done","childValue","father","_createChildValue","el_done","_isGroup","_needSpliter","itemLength","valueItem","valueArray","_checkValues","itemGroup","targets","popupItem","_getValue","fartherValue","getCalculationByDate","quarter","workDay","holidays","DynamicDateCard","OFFSET","CURRENT","getBeginDate","BEGIN","checkgroup","TYPE","YEAR","QUARTER","MONTH","workDayBox","plainValue","resultPane","dateType","_getParamJson","WORK_DAY","positionValue","comboItems","_getText","_createValue","valuesItems","valueMap","selectValues","allowEdit","storeTriggerValue","changeIcon","DynamicDateTrigger","dateStore","dateObj","_checkDynamicValue","DynamicDatePopup","BUTTON_CLEAR_EVENT_CHANGE","BUTTON_lABEL_EVENT_CHANGE","comboWrapper","DynamicDateParamItem","offsetCombo","tabHeight","buttonHeight","_getTabJson","textButton","_setInnerValue","yearLength","yearMonthLength","yearFullMonthLength","compareFormat","formatStr","_getStandardDateStr","_autoAppend","_dateCheck","_checkVoid","_getTitle","_getFormatString","formatArray","dateArray","newArray","_yearCheck","splitMonth","_monthCheck","endText","getPositionText","baseText","EVENT_TRIGGER_CLICK","DynamicDateTimeCombo","DynamicDateTimeTrigger","DynamicDateTimePopup","_checkHour","_formatValueToDoubleDigit","_autoSwitch","_checkMinute","_checkSecond","_checkBorder","setDownEnable","setUpEnable","_assertValue","hasSecond","suffixArray","suffixString","dateString","SearchEditor","keywords","SmallSearchEditor","SmallTextEditor","IntervalSlider","EDITOR_WIDTH","EDITOR_R_GAP","EDITOR_HEIGHT","SLIDER_WIDTH_HALF","SLIDER_WIDTH","SLIDER_HEIGHT","TRACK_HEIGHT","digit","unit","valueOne","valueTwo","calculation","AccurateCalculationModel","grayTrack","blueTrack","track","_createTrackWrapper","labelOne","_checkValidation","oldValueOne","percent","_getPercentByValue","significantPercent","_setSliderOnePosition","_setBlueTrack","_checkLabelPosition","labelTwo","oldValueTwo","_setSliderTwoPosition","sliderOne","sliderTwo","_draggable","_createLabelWrapper","_createSliderWrapper","_rePosBySizeAfterMove","isLeft","_getGrayTrackLength","_getValueByPercent","_rePosBySizeAfterStop","startDrag","defaultSize","mouseMoveTracker","optimizeSize","offsetLeft","dotText","_checkOverlap","labelOneLeft","labelTwoLeft","isSliderOneLeft","_resetLabelPosition","needReverse","_setBlueTrackLeft","_setBlueTrackWidth","percentOne","percentTwo","_setAllPosition","one","two","_setErrorText","scrollWidth","accurateSubtraction","accurateMultiplication","accurateDivisionTenExponent","accurateAddition","reduceValue","_setDraggableEnable","_getPrecision","pre","toPrecision","setMinAndMax","minNumber","maxNumber","NaN","_getMagnitude","_formatDecimal","stringNumber1","stringNumber2","numDecimalLength","needAddZero","magnitudeDiff","numDecimal","_stringNumberFactory","numStrArray","numInteger","_accurateSubtraction","integerResult","decimalResult","decimalMaxLength","getDecimalMaxLength","addZero","resultTemp","diff","_accurateAddition","_accurateMultiplication","dec1Int2","_accurateDivisionTenExponent","int1dec2","dec1dec2","partDecimalResult","stringNumber","MultiLayerDownListPopup","_createPopupItems","fatherArrayValue","fValue","getChildrenValue","MultiLayerSelectTreeCombo","allowSearchValue","allowInsertValue","_getSyncConfig","_getAsyncConfig","_getBaseConfig","MultiLayerSelectTreePopup","_getSearchConfig","valueFormatter","MultiLayerSelectTreeTrigger","EVENT_ADD_ITEM","baseConfig","MultiLayerSelectTreeInsertSearchPane","setKeyword","keywordGetter","MultiLayerSelectLevelTree","addNotMatchTip","showTip","_initData","_getSearchItems","_fillTreeStructure4Search","_getChildren","MultiLayerSelectTreeFirstPlusGroupNode","needBlankLayers","MultiLayerSelectTreeLastPlusGroupNode","MultiLayerSelectTreeMidPlusGroupNode","MultiLayerSelectTreePlusGroupNode","MultiLayerSingleTreeCombo","MultiLayerSingleTreePopup","MultiLayerSingleTreeTrigger","MultiLayerSingleTreeInsertSearchPane","MultiLayerSingleLevelTree","MultiLayerSingleTreeFirstPlusGroupNode","_createNode","MultiLayerSingleTreeLastPlusGroupNode","MultiLayerSingleTreeMidPlusGroupNode","MultiLayerSingleTreePlusGroupNode","MultiLayerSingleTreeFirstTreeLeafItem","MultiLayerSingleTreeLastTreeLeafItem","MultiLayerSingleTreeMidTreeLeafItem","MultiSelectCheckPane","onClickContinueSelect","txt","continueSelect","DisplaySelectedList","_createItems","MultiSelectCombo","assertShowValue","_startValue","numberCounter","setButtonChecked","requesting","_itemsCreator4Trigger","MultiSelectTrigger","_setStartValue","_join","_joinKeywords","_joinAll","EVENT_CLICK_ITEM","EVENT_BEFORE_COUNTER_POPUPVIEW","updateSelectedValue","EVENT_COUNTER_CLICK","MultiSelectPopupView","_adjust","EVENT_CLICK_CONFIRM","EVENT_CLICK_CLEAR","wants2Quit","_stopEditing","MultiSelectCheckSelectedSwitcher","refreshPlaceHolderWidth","_makeMap","REQ_GET_ALL_DATA","selectedMap","change","notSelectedMap","adjust","setStartValue","populateSwitcher","REQ_GET_DATA_LENGTH","MultiSelectNoBarCombo","MultiSelectInsertCombo","MultiSelectInsertTrigger","_addItem","addedValue","MultiSelectInsertNoBarCombo","MultiSelectInsertSearcher","wrapNumberCounter","MultiSelectLoader","startValue","firstItems","_scrollToTop","MultiSelectNoBarLoader","MultiSelectNoBarPopupView","MultiSelectSearcher","MultiSelectSearchInsertPane","tooltipClick","hasSameValue","isMatchTipVisible","MultiSelectSearchLoader","_filterValues","newValues","MultiSelectSearchPane","MultiSelectCheckSelectedButton","MultiSelectEditor","state","hasChecked","checkPane","me","MultiSelectInsertList","searcherPane","_showAdapter","_showSearcherPane","MultiSelectInsertNoBarList","MultiSelectList","_count","MultiSelectTree","MultiSelectTreePopup","setSelectedValue","updateValue","TreeView","EVENT_AFTERINIT","refresh","MultiTreeCheckPane","backToPopup","REQ_TYPE_GET_SELECTED_DATA","EVENT_INIT","configs","EVENT_CONTINUE_CLICK","MultiTreeCombo","isInit","want2showCounter","MultiTreePopup","showCounter","isPopupView","checked","1","MultiTreeInsertCombo","MultiTreeSearchInsertPane","_assertShowValue","MultiTreeListCombo","MultiTreeCheckSelectedButton","indicator","checkSelected","addTip","partTree","isAddTipVisible","MultiTreeSearchPane","MultiListTreeSearcher","MultiTreeSearcher","childNodes","getChildrenNode","NumberEditor","topBtn","_finetuning","bottomBtn","NumberInterval","typeError","numberError","signalError","editorWidth","numberErrorCls","less","less_equal","numTip","validation","closeMin","smallEditor","smallEditorBubbleType","smallTip","bigEditor","bigEditorBubbleType","bigTip","smallCombo","bigCombo","closeMax","label","_setValidEvent","_setErrorEvent","_setBlurEvent","_setFocusEvent","_setComboValueChangedEvent","_setEditorValueChangedEvent","_setTitle","smallValue","bigValue","bigComboValue","smallComboValue","NumberIntervalSingleEidtor","isStateValid","setMinEnable","setCloseMinEnable","setMaxEnable","setCloseMaxEnable","showNumTip","hideNumTip","setNumTip","getNumTip","combo_value","minComboValue","maxComboValue","SearchMultiTextValueCombo","_updateAllValue","getCounter","allValueGetter","allValue","_itemsCreator","_getItemsByTimes","_hasNextByTimes","kw","SearchMultiSelectTrigger","SearchMultiSelectLoader","SearchMultiSelectPopupView","SearchMultiSelectSearcher","SelectTreeFirstPlusGroupNode","SelectTreeLastPlusGroupNode","SelectTreeMidPlusGroupNode","SelectTreePlusGroupNode","SelectTreeCombo","SingleTreePopup","SelectTreeExpander","SelectTreePopup","SingleSelectSearchLoader","allowNoSelect","SingleSelectList","SingleSelectSearchInsertPane","SingleSelectSearchPane","SingleSelectCombo","SingleSelectTrigger","SingleSelectPopupView","SingleSelectInsertCombo","SingleSelectComboItem","SingleSelectLoader","SingleSelectSearcher","SingleSelectInsertList","digest","_allData","SingleSelectEditor","SignTextEditor","SliderIconButton","LARGE_SIZE","NORMAL_SIZE","LARGE_OFFSET","NORMAL_OFFSET","slider","SingleSlider","TRACK_GAP_HALF","TRACK_GAP","sliderVertical","trackLength","_setLabelPosition","_setSliderPosition","thousandth","SingleSliderLabel","HEIGHT","SingleSliderNormal","minMax","_createTrack","EVENT_DRAG","SingleTreeCombo","SingleTreeTrigger","_checkTitle","TextValueDownListCombo","_createValueMap","currentVal","DownListSelectTextTrigger","_formatItemArray","sourceArray","targetArray","TimePopup","BUTTON_NOW_EVENT_CHANGE","TimeCombo","_setNowTime","nowTome","TimeTrigger","COMPARE_FORMAT","COMPLETE_COMPARE_FORMAT","FORMAT_ARRAY","DEFAULT_DATE_STRING","DEFAULT_HOUR","_formatValue","_getCompleteHMS","DateInterval","timeErrorCls","_createCombo","_clearTitle","smallDate","bigDate","smallObj","bigObj","TimeInterval","TimePeriods","DynamicYearCard","StaticYearCard","DynamicYearCombo","DynamicYearTrigger","DynamicYearPopup","_titleCreator","DynamicYearMonthCard","StaticYearMonthCard","_createMonths","monthMap","yearPicker","_checkMonthStatus","selectedMonth","minYear","maxYear","minMonth","maxMonth","yearInvalid","monthInvalid","newObj","DynamicYearMonthCombo","DynamicYearMonthTrigger","DynamicYearMonthPopup","yearEditor","_createEditor","monthEditor","isYear","_doEditorConfirm","_getStaticTitle","monthValue","YearMonthInterval","_checkValid","smallDate4Check","bigDate4Check","DynamicYearQuarterCard","StaticYearQuarterCard","_createQuarter","selectedQuarter","DynamicYearQuarterCombo","DynamicYearQuarterTrigger","DynamicYearQuarterPopup","quarterEditor","quarterValue","AbstractAllValueChooser","perPage","_valueFormatter","resultItems","AllValueChooserCombo","AllValueChooserPane","AllValueMultiTextValueCombo","_digestValue","numOfPage","AbstractTreeValueChooser","REQ_TYPE_INIT_DATA","_reqInitTreeNode","REQ_TYPE_ADJUST_DATA","_reqAdjustTreeNode","REQ_TYPE_SELECT_DATA","_reqSelectedTreeNode","_reqDisplayTreeNode","_reqTreeNode","getCount","parentValues","_getChildCount","createOneJson","llen","doCheck","newParents","_getTreeNode","notSelectedValue","expandSelectedValue","parents","childrenCount","expanded","_deleteNode","searched","_isMatch","notSearch","can","isSearchValueInParent","canFindKey","_getNode","isChild","strs","_buildTree","dealWithSelectedValues","nk","nv","lastSearchValue","nodeSearch","_getAddedValueNode","isAllSelect","findSelectedObj","isCurAllSelected","isOpen","halfCheck","allNodes","checkState","dealWithSelectedValue","getCheckState","nextNames","childCount","tempCheck","_getAllChildren","parentCheckState","valueFind","findParentNode","pValues","AbstractListTreeValueChooser","nodeValue","ListTreeValueChooserInsertCombo","TreeValueChooserInsertCombo","TreeValueChooserCombo","TreeValueChooserPane","pane","AbstractValueChooser","ValueChooserInsertCombo","ValueChooserCombo","ValueChooserPane","fineui","Decorators","Target","Model","_store","Fix","Constructor","isNative","rhashcode","makeHashCode","hasProto","agent","v1","v2","_toString","isConfigurable","configurable","getOwnPropertyDescriptor","isExtensible","bailRE","parsePath","segments","port","queueNextTick","ctx","falsy","$$skipArray","__ob__","$accessors","$vbthis","$vbsetter","Dep","_classCallCheck","subs","addSub","removeSub","depend","addDep","notify","targetStack","pushTarget","_target","popTarget","arrayMethods","original","mutator","_len","inserted","observeArray","parentKey","dep","canHideProperty","createViewModel","defineProperties","timeBucket","desc","__defineGetter__","__defineSetter__","descs","VBClassPool","execScript","VBMediator","accessors","accessor","parseVB","createViewModel$1","arrayKeys","observerState","shouldConvert","def","writable","Observer","vmCount","augment","protoAugment","copyAugment","walk","defineReactive","__proto__","parentObserver","_deps","_scopeDeps","_key2","_globalDeps","shallow","childOb","reactiveGetter","dependArray","reactiveSetter","newVal","activatedChildren","waiting","flushing","resetSchedulerState","flushSchedulerQueue","watcher","queueWatcher","uid$1","Watcher","vm","expOrFn","user","lazy","sync","dirty","deps","newDeps","depIds","newDepIds","expression","cleanupDeps","oldValue","evaluate","teardown","_watchers","seenObjects","falsy$1","isA","depId","operators","runBinaryFunction","binarys","expr","routeToRegExp","watch","exps","immediate","unwatchFn","watchers","complete","running","isGlobal","currentModel","regStr","_dep","_w","mixinInjection","getMixins","computedWatcherOptions","initState","$$state","initComputed","_computedWatchers","defineComputed","userDef","$$model","$$computed","shouldCache","sharedPropertyDefinition","createComputedGetter","computedGetter","initWatch","watch$$1","createWatcher","keyOrFn","initMethods","methods","initMixins","mixinType","mixin$$1","defineProps","_loop","$$context","defineContext","_loop2","childContext","_key3","unwatches","unwatch","_key4","define","factory","contextStack","pushContext","_context","popContext","oldWatch","_create","createStore","needPop","__cacheStore","findStore","_widget","pushed","old","unMount","nKeys"],"mappings":"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MAAO,IACPC,MAAO,KACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,IACPC,MAAO,IACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,MACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,MACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,MACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,MACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MAAO,KACPC,MA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","file":"fineui_without_jquery_polyfill.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1240);\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","var scope = (typeof global !== \"undefined\" && global) ||\n (typeof self !== \"undefined\" && self) ||\n window;\nvar apply = Function.prototype.apply;\n\n// DOM APIs, for completeness\n\nexports.setTimeout = function() {\n return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\nexports.setInterval = function() {\n return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\nexports.clearTimeout =\nexports.clearInterval = function(timeout) {\n if (timeout) {\n timeout.close();\n }\n};\n\nfunction Timeout(id, clearFn) {\n this._id = id;\n this._clearFn = clearFn;\n}\nTimeout.prototype.unref = Timeout.prototype.ref = function() {};\nTimeout.prototype.close = function() {\n this._clearFn.call(scope, this._id);\n};\n\n// Does not start the time, just sets up the members needed.\nexports.enroll = function(item, msecs) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = msecs;\n};\n\nexports.unenroll = function(item) {\n clearTimeout(item._idleTimeoutId);\n item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function(item) {\n clearTimeout(item._idleTimeoutId);\n\n var msecs = item._idleTimeout;\n if (msecs >= 0) {\n item._idleTimeoutId = setTimeout(function onTimeout() {\n if (item._onTimeout)\n item._onTimeout();\n }, msecs);\n }\n};\n\n// setimmediate attaches itself to the global object\nrequire(\"setimmediate\");\n// On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto. Search each possibility in the same order as the\n// `setimmediate` library.\nexports.setImmediate = (typeof self !== \"undefined\" && self.setImmediate) ||\n (typeof global !== \"undefined\" && global.setImmediate) ||\n (this && this.setImmediate);\nexports.clearImmediate = (typeof self !== \"undefined\" && self.clearImmediate) ||\n (typeof global !== \"undefined\" && global.clearImmediate) ||\n (this && this.clearImmediate);\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","// shim for using process in browser\nvar process = module.exports = {};\n\n// cached from whatever global is present so that test runners that stub it\n// don't break things. But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals. It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n throw new Error('setTimeout has not been defined');\n}\nfunction defaultClearTimeout () {\n throw new Error('clearTimeout has not been defined');\n}\n(function () {\n try {\n if (typeof setTimeout === 'function') {\n cachedSetTimeout = setTimeout;\n } else {\n cachedSetTimeout = defaultSetTimout;\n }\n } catch (e) {\n cachedSetTimeout = defaultSetTimout;\n }\n try {\n if (typeof clearTimeout === 'function') {\n cachedClearTimeout = clearTimeout;\n } else {\n cachedClearTimeout = defaultClearTimeout;\n }\n } catch (e) {\n cachedClearTimeout = defaultClearTimeout;\n }\n} ())\nfunction runTimeout(fun) {\n if (cachedSetTimeout === setTimeout) {\n //normal enviroments in sane situations\n return setTimeout(fun, 0);\n }\n // if setTimeout wasn't available but was latter defined\n if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n cachedSetTimeout = setTimeout;\n return setTimeout(fun, 0);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedSetTimeout(fun, 0);\n } catch(e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedSetTimeout.call(null, fun, 0);\n } catch(e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n return cachedSetTimeout.call(this, fun, 0);\n }\n }\n\n\n}\nfunction runClearTimeout(marker) {\n if (cachedClearTimeout === clearTimeout) {\n //normal enviroments in sane situations\n return clearTimeout(marker);\n }\n // if clearTimeout wasn't available but was latter defined\n if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n cachedClearTimeout = clearTimeout;\n return clearTimeout(marker);\n }\n try {\n // when when somebody has screwed with setTimeout but no I.E. maddness\n return cachedClearTimeout(marker);\n } catch (e){\n try {\n // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n return cachedClearTimeout.call(null, marker);\n } catch (e){\n // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n return cachedClearTimeout.call(this, marker);\n }\n }\n\n\n\n}\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n if (!draining || !currentQueue) {\n return;\n }\n draining = false;\n if (currentQueue.length) {\n queue = currentQueue.concat(queue);\n } else {\n queueIndex = -1;\n }\n if (queue.length) {\n drainQueue();\n }\n}\n\nfunction drainQueue() {\n if (draining) {\n return;\n }\n var timeout = runTimeout(cleanUpNextTick);\n draining = true;\n\n var len = queue.length;\n while(len) {\n currentQueue = queue;\n queue = [];\n while (++queueIndex < len) {\n if (currentQueue) {\n currentQueue[queueIndex].run();\n }\n }\n queueIndex = -1;\n len = queue.length;\n }\n currentQueue = null;\n draining = false;\n runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n var args = new Array(arguments.length - 1);\n if (arguments.length > 1) {\n for (var i = 1; i < arguments.length; i++) {\n args[i - 1] = arguments[i];\n }\n }\n queue.push(new Item(fun, args));\n if (queue.length === 1 && !draining) {\n runTimeout(drainQueue);\n }\n};\n\n// v8 likes predictible objects\nfunction Item(fun, array) {\n this.fun = fun;\n this.array = array;\n}\nItem.prototype.run = function () {\n this.fun.apply(null, this.array);\n};\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) { return [] }\n\nprocess.binding = function (name) {\n throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () { return '/' };\nprocess.chdir = function (dir) {\n throw new Error('process.chdir is not supported');\n};\nprocess.umask = function() { return 0; };\n","/**\n * Created by richie on 15/7/8.\n */\n/**\n * 初始化BI对象\n */\n_global = undefined;\nif (typeof window !== \"undefined\") {\n _global = window;\n} else if (typeof global !== \"undefined\") {\n _global = global;\n} else if (typeof self !== \"undefined\") {\n _global = self;\n} else {\n _global = this;\n}\nif (_global.BI == null) {\n _global.BI = {prepares: []};\n}\nif(_global.BI.prepares == null) {\n _global.BI.prepares = [];\n}","/**\n * @license\n * Lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash core plus=\"debounce,throttle,get,set,findIndex,findLastIndex,findKey,findLastKey,isArrayLike,invert,invertBy,uniq,uniqBy,omit,omitBy,zip,unzip,rest,range,random,reject,intersection,drop,countBy,union,zipObject,initial,cloneDeep,clamp,isPlainObject,take,takeRight,without,difference,defaultsDeep,trim,merge,groupBy,uniqBy,before,after\"`\n * Copyright JS Foundation and other contributors <https://js.foundation/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;(function() {\n\n /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n var undefined;\n\n /** Used as the semantic version number. */\n var VERSION = '4.17.5';\n\n /** Used as the size to enable large array optimizations. */\n var LARGE_ARRAY_SIZE = 200;\n\n /** Error message constants. */\n var FUNC_ERROR_TEXT = 'Expected a function';\n\n /** Used to stand-in for `undefined` hash values. */\n var HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n /** Used as the maximum memoize cache size. */\n var MAX_MEMOIZE_SIZE = 500;\n\n /** Used as the internal argument placeholder. */\n var PLACEHOLDER = '__lodash_placeholder__';\n\n /** Used to compose bitmasks for cloning. */\n var CLONE_DEEP_FLAG = 1,\n CLONE_FLAT_FLAG = 2,\n CLONE_SYMBOLS_FLAG = 4;\n\n /** Used to compose bitmasks for value comparisons. */\n var COMPARE_PARTIAL_FLAG = 1,\n COMPARE_UNORDERED_FLAG = 2;\n\n /** Used to compose bitmasks for function metadata. */\n var WRAP_BIND_FLAG = 1,\n WRAP_BIND_KEY_FLAG = 2,\n WRAP_CURRY_BOUND_FLAG = 4,\n WRAP_CURRY_FLAG = 8,\n WRAP_CURRY_RIGHT_FLAG = 16,\n WRAP_PARTIAL_FLAG = 32,\n WRAP_PARTIAL_RIGHT_FLAG = 64,\n WRAP_ARY_FLAG = 128,\n WRAP_REARG_FLAG = 256,\n WRAP_FLIP_FLAG = 512;\n\n /** Used to detect hot functions by number of calls within a span of milliseconds. */\n var HOT_COUNT = 800,\n HOT_SPAN = 16;\n\n /** Used to indicate the type of lazy iteratees. */\n var LAZY_FILTER_FLAG = 1,\n LAZY_MAP_FLAG = 2,\n LAZY_WHILE_FLAG = 3;\n\n /** Used as references for various `Number` constants. */\n var INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991,\n MAX_INTEGER = 1.7976931348623157e+308,\n NAN = 0 / 0;\n\n /** Used as references for the maximum length and index of an array. */\n var MAX_ARRAY_LENGTH = 4294967295;\n\n /** Used to associate wrap methods with their bit flags. */\n var wrapFlags = [\n ['ary', WRAP_ARY_FLAG],\n ['bind', WRAP_BIND_FLAG],\n ['bindKey', WRAP_BIND_KEY_FLAG],\n ['curry', WRAP_CURRY_FLAG],\n ['curryRight', WRAP_CURRY_RIGHT_FLAG],\n ['flip', WRAP_FLIP_FLAG],\n ['partial', WRAP_PARTIAL_FLAG],\n ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],\n ['rearg', WRAP_REARG_FLAG]\n ];\n\n /** `Object#toString` result references. */\n var argsTag = '[object Arguments]',\n arrayTag = '[object Array]',\n asyncTag = '[object AsyncFunction]',\n boolTag = '[object Boolean]',\n dateTag = '[object Date]',\n errorTag = '[object Error]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n mapTag = '[object Map]',\n numberTag = '[object Number]',\n nullTag = '[object Null]',\n objectTag = '[object Object]',\n promiseTag = '[object Promise]',\n proxyTag = '[object Proxy]',\n regexpTag = '[object RegExp]',\n setTag = '[object Set]',\n stringTag = '[object String]',\n symbolTag = '[object Symbol]',\n undefinedTag = '[object Undefined]',\n weakMapTag = '[object WeakMap]';\n\n var arrayBufferTag = '[object ArrayBuffer]',\n dataViewTag = '[object DataView]',\n float32Tag = '[object Float32Array]',\n float64Tag = '[object Float64Array]',\n int8Tag = '[object Int8Array]',\n int16Tag = '[object Int16Array]',\n int32Tag = '[object Int32Array]',\n uint8Tag = '[object Uint8Array]',\n uint8ClampedTag = '[object Uint8ClampedArray]',\n uint16Tag = '[object Uint16Array]',\n uint32Tag = '[object Uint32Array]';\n\n /** Used to match HTML entities and HTML characters. */\n var reUnescapedHtml = /[&<>\"']/g,\n reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n\n /** Used to match property names within property paths. */\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n /**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n /** Used to match leading and trailing whitespace. */\n var reTrim = /^\\s+|\\s+$/g;\n\n /** Used to match wrap detail comments. */\n var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n reSplitDetails = /,? & /;\n\n /** Used to match backslashes in property paths. */\n var reEscapeChar = /\\\\(\\\\)?/g;\n\n /** Used to match `RegExp` flags from their coerced string values. */\n var reFlags = /\\w*$/;\n\n /** Used to detect bad signed hexadecimal string values. */\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n /** Used to detect binary string values. */\n var reIsBinary = /^0b[01]+$/i;\n\n /** Used to detect host constructors (Safari). */\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n /** Used to detect octal string values. */\n var reIsOctal = /^0o[0-7]+$/i;\n\n /** Used to detect unsigned integer values. */\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n /** Used to compose unicode character classes. */\n var rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n /** Used to compose unicode capture groups. */\n var rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n /** Used to compose unicode regexes. */\n var reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\n var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n /** Used to identify `toStringTag` values of typed arrays. */\n var typedArrayTags = {};\n typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =\n typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =\n typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =\n typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =\n typedArrayTags[uint32Tag] = true;\n typedArrayTags[argsTag] = typedArrayTags[arrayTag] =\n typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =\n typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =\n typedArrayTags[errorTag] = typedArrayTags[funcTag] =\n typedArrayTags[mapTag] = typedArrayTags[numberTag] =\n typedArrayTags[objectTag] = typedArrayTags[regexpTag] =\n typedArrayTags[setTag] = typedArrayTags[stringTag] =\n typedArrayTags[weakMapTag] = false;\n\n /** Used to identify `toStringTag` values supported by `_.clone`. */\n var cloneableTags = {};\n cloneableTags[argsTag] = cloneableTags[arrayTag] =\n cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =\n cloneableTags[boolTag] = cloneableTags[dateTag] =\n cloneableTags[float32Tag] = cloneableTags[float64Tag] =\n cloneableTags[int8Tag] = cloneableTags[int16Tag] =\n cloneableTags[int32Tag] = cloneableTags[mapTag] =\n cloneableTags[numberTag] = cloneableTags[objectTag] =\n cloneableTags[regexpTag] = cloneableTags[setTag] =\n cloneableTags[stringTag] = cloneableTags[symbolTag] =\n cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =\n cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag] = cloneableTags[funcTag] =\n cloneableTags[weakMapTag] = false;\n\n /** Used to map characters to HTML entities. */\n var htmlEscapes = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n /** Built-in method references without a dependency on `root`. */\n var freeParseFloat = parseFloat,\n freeParseInt = parseInt;\n\n /** Detect free variable `global` from Node.js. */\n var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\n /** Detect free variable `self`. */\n var freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n /** Used as a reference to the global object. */\n var root = freeGlobal || freeSelf || Function('return this')();\n\n /** Detect free variable `exports`. */\n var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;\n\n /** Detect free variable `module`. */\n var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;\n\n /** Detect the popular CommonJS extension `module.exports`. */\n var moduleExports = freeModule && freeModule.exports === freeExports;\n\n /** Detect free variable `process` from Node.js. */\n var freeProcess = moduleExports && freeGlobal.process;\n\n /** Used to access faster Node.js helpers. */\n var nodeUtil = (function() {\n try {\n return freeProcess && freeProcess.binding && freeProcess.binding('util');\n } catch (e) {}\n }());\n\n /* Node.js helper references. */\n var nodeIsDate = nodeUtil && nodeUtil.isDate,\n nodeIsMap = nodeUtil && nodeUtil.isMap,\n nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n nodeIsSet = nodeUtil && nodeUtil.isSet,\n nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * A faster alternative to `Function#apply`, this function invokes `func`\n * with the `this` binding of `thisArg` and the arguments of `args`.\n *\n * @private\n * @param {Function} func The function to invoke.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} args The arguments to invoke `func` with.\n * @returns {*} Returns the result of `func`.\n */\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0: return func.call(thisArg);\n case 1: return func.call(thisArg, args[0]);\n case 2: return func.call(thisArg, args[0], args[1]);\n case 3: return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n\n /**\n * A specialized version of `baseAggregator` for arrays.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.forEach` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns `array`.\n */\n function arrayEach(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n\n /**\n * A specialized version of `_.every` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n */\n function arrayEvery(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * A specialized version of `_.filter` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function arrayFilter(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `_.includes` for arrays without support for\n * specifying an index to search from.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n\n /**\n * This function is like `arrayIncludes` except that it accepts a comparator.\n *\n * @private\n * @param {Array} [array] The array to inspect.\n * @param {*} target The value to search for.\n * @param {Function} comparator The comparator invoked per element.\n * @returns {boolean} Returns `true` if `target` is found, else `false`.\n */\n function arrayIncludesWith(array, value, comparator) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n\n /**\n * Appends the elements of `values` to `array`.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {Array} values The values to append.\n * @returns {Array} Returns `array`.\n */\n function arrayPush(array, values) {\n var index = -1,\n length = values.length,\n offset = array.length;\n\n while (++index < length) {\n array[offset + index] = values[index];\n }\n return array;\n }\n\n /**\n * A specialized version of `_.reduce` for arrays without support for\n * iteratee shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @param {boolean} [initAccum] Specify using the first element of `array` as\n * the initial value.\n * @returns {*} Returns the accumulated value.\n */\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n\n /**\n * A specialized version of `_.some` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function arraySome(array, predicate) {\n var index = -1,\n length = array == null ? 0 : array.length;\n\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n\n /**\n * Gets the size of an ASCII `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n var asciiSize = baseProperty('length');\n\n /**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function asciiToArray(string) {\n return string.split('');\n }\n\n /**\n * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n * without support for iteratee shorthands, which iterates over `collection`\n * using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the found element or its key, else `undefined`.\n */\n function baseFindKey(collection, predicate, eachFunc) {\n var result;\n eachFunc(collection, function(value, key, collection) {\n if (predicate(value, key, collection)) {\n result = key;\n return false;\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n\n /**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\n function baseIsNaN(value) {\n return value !== value;\n }\n\n /**\n * The base implementation of `_.property` without support for deep paths.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function baseProperty(key) {\n return function(object) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.propertyOf` without support for deep paths.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyOf(object) {\n return function(key) {\n return object == null ? undefined : object[key];\n };\n }\n\n /**\n * The base implementation of `_.reduce` and `_.reduceRight`, without support\n * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {*} accumulator The initial value.\n * @param {boolean} initAccum Specify using the first or last element of\n * `collection` as the initial value.\n * @param {Function} eachFunc The function to iterate over `collection`.\n * @returns {*} Returns the accumulated value.\n */\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection) {\n accumulator = initAccum\n ? (initAccum = false, value)\n : iteratee(accumulator, value, index, collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.sortBy` which uses `comparer` to define the\n * sort order of `array` and replaces criteria objects with their corresponding\n * values.\n *\n * @private\n * @param {Array} array The array to sort.\n * @param {Function} comparer The function to define sort order.\n * @returns {Array} Returns `array`.\n */\n function baseSortBy(array, comparer) {\n var length = array.length;\n\n array.sort(comparer);\n while (length--) {\n array[length] = array[length].value;\n }\n return array;\n }\n\n /**\n * The base implementation of `_.times` without support for iteratee shorthands\n * or max array length checks.\n *\n * @private\n * @param {number} n The number of times to invoke `iteratee`.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the array of results.\n */\n function baseTimes(n, iteratee) {\n var index = -1,\n result = Array(n);\n\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unary` without support for storing metadata.\n *\n * @private\n * @param {Function} func The function to cap arguments for.\n * @returns {Function} Returns the new capped function.\n */\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n\n /**\n * The base implementation of `_.values` and `_.valuesIn` which creates an\n * array of `object` property values corresponding to the property names\n * of `props`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} props The property names to get values for.\n * @returns {Object} Returns the array of property values.\n */\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n\n /**\n * Checks if a `cache` value for `key` exists.\n *\n * @private\n * @param {Object} cache The cache to query.\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n\n /**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\n function charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\n function charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n }\n\n /**\n * Gets the number of `placeholder` occurrences in `array`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} placeholder The placeholder to search for.\n * @returns {number} Returns the placeholder count.\n */\n function countHolders(array, placeholder) {\n var length = array.length,\n result = 0;\n\n while (length--) {\n if (array[length] === placeholder) {\n ++result;\n }\n }\n return result;\n }\n\n /**\n * Used by `_.escape` to convert characters to HTML entities.\n *\n * @private\n * @param {string} chr The matched character to escape.\n * @returns {string} Returns the escaped character.\n */\n var escapeHtmlChar = basePropertyOf(htmlEscapes);\n\n /**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function getValue(object, key) {\n return object == null ? undefined : object[key];\n }\n\n /**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\n function hasUnicode(string) {\n return reHasUnicode.test(string);\n }\n\n /**\n * Converts `iterator` to an array.\n *\n * @private\n * @param {Object} iterator The iterator to convert.\n * @returns {Array} Returns the converted array.\n */\n function iteratorToArray(iterator) {\n var data,\n result = [];\n\n while (!(data = iterator.next()).done) {\n result.push(data.value);\n }\n return result;\n }\n\n /**\n * Converts `map` to its key-value pairs.\n *\n * @private\n * @param {Object} map The map to convert.\n * @returns {Array} Returns the key-value pairs.\n */\n function mapToArray(map) {\n var index = -1,\n result = Array(map.size);\n\n map.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n\n /**\n * Creates a unary function that invokes `func` with its argument transformed.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {Function} transform The argument transform.\n * @returns {Function} Returns the new function.\n */\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n\n /**\n * Replaces all `placeholder` elements in `array` with an internal placeholder\n * and returns an array of their indexes.\n *\n * @private\n * @param {Array} array The array to modify.\n * @param {*} placeholder The placeholder to replace.\n * @returns {Array} Returns the new array of placeholder indexes.\n */\n function replaceHolders(array, placeholder) {\n var index = -1,\n length = array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value === placeholder || value === PLACEHOLDER) {\n array[index] = PLACEHOLDER;\n result[resIndex++] = index;\n }\n }\n return result;\n }\n\n /**\n * Gets the value at `key`, unless `key` is \"__proto__\".\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\n function safeGet(object, key) {\n return key == '__proto__'\n ? undefined\n : object[key];\n }\n\n /**\n * Converts `set` to an array of its values.\n *\n * @private\n * @param {Object} set The set to convert.\n * @returns {Array} Returns the values.\n */\n function setToArray(set) {\n var index = -1,\n result = Array(set.size);\n\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n\n /**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n\n /**\n * Gets the number of symbols in `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the string size.\n */\n function stringSize(string) {\n return hasUnicode(string)\n ? unicodeSize(string)\n : asciiSize(string);\n }\n\n /**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n }\n\n /**\n * Gets the size of a Unicode `string`.\n *\n * @private\n * @param {string} string The string inspect.\n * @returns {number} Returns the string size.\n */\n function unicodeSize(string) {\n var result = reUnicode.lastIndex = 0;\n while (reUnicode.test(string)) {\n ++result;\n }\n return result;\n }\n\n /**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\n function unicodeToArray(string) {\n return string.match(reUnicode) || [];\n }\n\n /*--------------------------------------------------------------------------*/\n\n /** Used for built-in method references. */\n var arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n /** Used to detect overreaching core-js shims. */\n var coreJsData = root['__core-js_shared__'];\n\n /** Used to resolve the decompiled source of functions. */\n var funcToString = funcProto.toString;\n\n /** Used to check objects for own properties. */\n var hasOwnProperty = objectProto.hasOwnProperty;\n\n /** Used to generate unique IDs. */\n var idCounter = 0;\n\n /** Used to detect methods masquerading as native. */\n var maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n }());\n\n /**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\n var nativeObjectToString = objectProto.toString;\n\n /** Used to infer the `Object` constructor. */\n var objectCtorString = funcToString.call(Object);\n\n /** Used to restore the original `_` reference in `_.noConflict`. */\n var oldDash = root._;\n\n /** Used to detect if a method is native. */\n var reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n );\n\n /** Built-in value references. */\n var Buffer = moduleExports ? root.Buffer : undefined,\n Symbol = root.Symbol,\n Uint8Array = root.Uint8Array,\n allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n getPrototype = overArg(Object.getPrototypeOf, Object),\n objectCreate = Object.create,\n propertyIsEnumerable = objectProto.propertyIsEnumerable,\n splice = arrayProto.splice,\n spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,\n symIterator = Symbol ? Symbol.iterator : undefined,\n symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n var defineProperty = (function() {\n try {\n var func = getNative(Object, 'defineProperty');\n func({}, '', {});\n return func;\n } catch (e) {}\n }());\n\n /* Built-in method references for those with the same name as other `lodash` methods. */\n var nativeCeil = Math.ceil,\n nativeFloor = Math.floor,\n nativeGetSymbols = Object.getOwnPropertySymbols,\n nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n nativeIsFinite = root.isFinite,\n nativeKeys = overArg(Object.keys, Object),\n nativeMax = Math.max,\n nativeMin = Math.min,\n nativeNow = Date.now,\n nativeRandom = Math.random,\n nativeReverse = arrayProto.reverse;\n\n /* Built-in method references that are verified to be native. */\n var DataView = getNative(root, 'DataView'),\n Map = getNative(root, 'Map'),\n Promise = getNative(root, 'Promise'),\n Set = getNative(root, 'Set'),\n WeakMap = getNative(root, 'WeakMap'),\n nativeCreate = getNative(Object, 'create');\n\n /** Used to store function metadata. */\n var metaMap = WeakMap && new WeakMap;\n\n /** Used to lookup unminified function names. */\n var realNames = {};\n\n /** Used to detect maps, sets, and weakmaps. */\n var dataViewCtorString = toSource(DataView),\n mapCtorString = toSource(Map),\n promiseCtorString = toSource(Promise),\n setCtorString = toSource(Set),\n weakMapCtorString = toSource(WeakMap);\n\n /** Used to convert symbols to primitives and strings. */\n var symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` object which wraps `value` to enable implicit method\n * chain sequences. Methods that operate on and return arrays, collections,\n * and functions can be chained together. Methods that retrieve a single value\n * or may return a primitive value will automatically end the chain sequence\n * and return the unwrapped value. Otherwise, the value must be unwrapped\n * with `_#value`.\n *\n * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n * enabled using `_.chain`.\n *\n * The execution of chained methods is lazy, that is, it's deferred until\n * `_#value` is implicitly or explicitly called.\n *\n * Lazy evaluation allows several methods to support shortcut fusion.\n * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n * the creation of intermediate arrays and can greatly reduce the number of\n * iteratee executions. Sections of a chain sequence qualify for shortcut\n * fusion if the section is applied to an array and iteratees accept only\n * one argument. The heuristic for whether a section qualifies for shortcut\n * fusion is subject to change.\n *\n * Chaining is supported in custom builds as long as the `_#value` method is\n * directly or indirectly included in the build.\n *\n * In addition to lodash methods, wrappers have `Array` and `String` methods.\n *\n * The wrapper `Array` methods are:\n * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n *\n * The wrapper `String` methods are:\n * `replace` and `split`\n *\n * The wrapper methods that support shortcut fusion are:\n * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n *\n * The chainable wrapper methods are:\n * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n * `zipObject`, `zipObjectDeep`, and `zipWith`\n *\n * The wrapper methods that are **not** chainable by default are:\n * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n * `upperFirst`, `value`, and `words`\n *\n * @name _\n * @constructor\n * @category Seq\n * @param {*} value The value to wrap in a `lodash` instance.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2, 3]);\n *\n * // Returns an unwrapped value.\n * wrapped.reduce(_.add);\n * // => 6\n *\n * // Returns a wrapped value.\n * var squares = wrapped.map(square);\n *\n * _.isArray(squares);\n * // => false\n *\n * _.isArray(squares.value());\n * // => true\n */\n function lodash(value) {\n if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n if (value instanceof LodashWrapper) {\n return value;\n }\n if (hasOwnProperty.call(value, '__wrapped__')) {\n return wrapperClone(value);\n }\n }\n return new LodashWrapper(value);\n }\n\n /**\n * The base implementation of `_.create` without support for assigning\n * properties to the created object.\n *\n * @private\n * @param {Object} proto The object to inherit from.\n * @returns {Object} Returns the new object.\n */\n var baseCreate = (function() {\n function object() {}\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object;\n object.prototype = undefined;\n return result;\n };\n }());\n\n /**\n * The function whose prototype chain sequence wrappers inherit from.\n *\n * @private\n */\n function baseLodash() {\n // No operation performed.\n }\n\n /**\n * The base constructor for creating `lodash` wrapper objects.\n *\n * @private\n * @param {*} value The value to wrap.\n * @param {boolean} [chainAll] Enable explicit method chain sequences.\n */\n function LodashWrapper(value, chainAll) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__chain__ = !!chainAll;\n this.__index__ = 0;\n this.__values__ = undefined;\n }\n\n // Ensure wrappers are instances of `baseLodash`.\n lodash.prototype = baseLodash.prototype;\n lodash.prototype.constructor = lodash;\n\n LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n LodashWrapper.prototype.constructor = LodashWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n *\n * @private\n * @constructor\n * @param {*} value The value to wrap.\n */\n function LazyWrapper(value) {\n this.__wrapped__ = value;\n this.__actions__ = [];\n this.__dir__ = 1;\n this.__filtered__ = false;\n this.__iteratees__ = [];\n this.__takeCount__ = MAX_ARRAY_LENGTH;\n this.__views__ = [];\n }\n\n /**\n * Creates a clone of the lazy wrapper object.\n *\n * @private\n * @name clone\n * @memberOf LazyWrapper\n * @returns {Object} Returns the cloned `LazyWrapper` object.\n */\n function lazyClone() {\n var result = new LazyWrapper(this.__wrapped__);\n result.__actions__ = copyArray(this.__actions__);\n result.__dir__ = this.__dir__;\n result.__filtered__ = this.__filtered__;\n result.__iteratees__ = copyArray(this.__iteratees__);\n result.__takeCount__ = this.__takeCount__;\n result.__views__ = copyArray(this.__views__);\n return result;\n }\n\n /**\n * Reverses the direction of lazy iteration.\n *\n * @private\n * @name reverse\n * @memberOf LazyWrapper\n * @returns {Object} Returns the new reversed `LazyWrapper` object.\n */\n function lazyReverse() {\n if (this.__filtered__) {\n var result = new LazyWrapper(this);\n result.__dir__ = -1;\n result.__filtered__ = true;\n } else {\n result = this.clone();\n result.__dir__ *= -1;\n }\n return result;\n }\n\n /**\n * Extracts the unwrapped value from its lazy wrapper.\n *\n * @private\n * @name value\n * @memberOf LazyWrapper\n * @returns {*} Returns the unwrapped value.\n */\n function lazyValue() {\n var array = this.__wrapped__.value(),\n dir = this.__dir__,\n isArr = isArray(array),\n isRight = dir < 0,\n arrLength = isArr ? array.length : 0,\n view = getView(0, arrLength, this.__views__),\n start = view.start,\n end = view.end,\n length = end - start,\n index = isRight ? end : (start - 1),\n iteratees = this.__iteratees__,\n iterLength = iteratees.length,\n resIndex = 0,\n takeCount = nativeMin(length, this.__takeCount__);\n\n if (!isArr || (!isRight && arrLength == length && takeCount == length)) {\n return baseWrapperValue(array, this.__actions__);\n }\n var result = [];\n\n outer:\n while (length-- && resIndex < takeCount) {\n index += dir;\n\n var iterIndex = -1,\n value = array[index];\n\n while (++iterIndex < iterLength) {\n var data = iteratees[iterIndex],\n iteratee = data.iteratee,\n type = data.type,\n computed = iteratee(value);\n\n if (type == LAZY_MAP_FLAG) {\n value = computed;\n } else if (!computed) {\n if (type == LAZY_FILTER_FLAG) {\n continue outer;\n } else {\n break outer;\n }\n }\n }\n result[resIndex++] = value;\n }\n return result;\n }\n\n // Ensure `LazyWrapper` is an instance of `baseLodash`.\n LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n LazyWrapper.prototype.constructor = LazyWrapper;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\n function hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n }\n\n /**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n }\n\n /**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n }\n\n // Add methods to `Hash`.\n Hash.prototype.clear = hashClear;\n Hash.prototype['delete'] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n\n /**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n }\n\n /**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n\n /**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\n function listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n\n // Add methods to `ListCache`.\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype['delete'] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n\n /**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n }\n\n /**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n\n /**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n\n /**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n\n /**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\n function mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n\n // Add methods to `MapCache`.\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype['delete'] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n *\n * Creates an array cache object to store unique values.\n *\n * @private\n * @constructor\n * @param {Array} [values] The values to cache.\n */\n function SetCache(values) {\n var index = -1,\n length = values == null ? 0 : values.length;\n\n this.__data__ = new MapCache;\n while (++index < length) {\n this.add(values[index]);\n }\n }\n\n /**\n * Adds `value` to the array cache.\n *\n * @private\n * @name add\n * @memberOf SetCache\n * @alias push\n * @param {*} value The value to cache.\n * @returns {Object} Returns the cache instance.\n */\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n\n /**\n * Checks if `value` is in the array cache.\n *\n * @private\n * @name has\n * @memberOf SetCache\n * @param {*} value The value to search for.\n * @returns {number} Returns `true` if `value` is found, else `false`.\n */\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n\n // Add methods to `SetCache`.\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a stack cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n\n /**\n * Removes all key-value entries from the stack.\n *\n * @private\n * @name clear\n * @memberOf Stack\n */\n function stackClear() {\n this.__data__ = new ListCache;\n this.size = 0;\n }\n\n /**\n * Removes `key` and its value from the stack.\n *\n * @private\n * @name delete\n * @memberOf Stack\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\n function stackDelete(key) {\n var data = this.__data__,\n result = data['delete'](key);\n\n this.size = data.size;\n return result;\n }\n\n /**\n * Gets the stack value for `key`.\n *\n * @private\n * @name get\n * @memberOf Stack\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\n function stackGet(key) {\n return this.__data__.get(key);\n }\n\n /**\n * Checks if a stack value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Stack\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\n function stackHas(key) {\n return this.__data__.has(key);\n }\n\n /**\n * Sets the stack `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Stack\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the stack cache instance.\n */\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n\n // Add methods to `Stack`.\n Stack.prototype.clear = stackClear;\n Stack.prototype['delete'] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array of the enumerable property names of the array-like `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @param {boolean} inherited Specify returning inherited property names.\n * @returns {Array} Returns the array of property names.\n */\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray(value),\n isArg = !isArr && isArguments(value),\n isBuff = !isArr && !isArg && isBuffer(value),\n isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n skipIndexes = isArr || isArg || isBuff || isType,\n result = skipIndexes ? baseTimes(value.length, String) : [],\n length = result.length;\n\n for (var key in value) {\n if ((inherited || hasOwnProperty.call(value, key)) &&\n !(skipIndexes && (\n // Safari 9 has enumerable `arguments.length` in strict mode.\n key == 'length' ||\n // Node.js 0.10 has enumerable non-index properties on buffers.\n (isBuff && (key == 'offset' || key == 'parent')) ||\n // PhantomJS 2 has enumerable non-index properties on typed arrays.\n (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||\n // Skip index properties.\n isIndex(key, length)\n ))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * This function is like `assignValue` except that it doesn't assign\n * `undefined` values.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignMergeValue(object, key, value) {\n if ((value !== undefined && !eq(object[key], value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n baseAssignValue(object, key, value);\n }\n }\n\n /**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n\n /**\n * Aggregates elements of `collection` on `accumulator` with keys transformed\n * by `iteratee` and values set by `setter`.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform keys.\n * @param {Object} accumulator The initial aggregated object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach(collection, function(value, key, collection) {\n setter(accumulator, value, iteratee(value), collection);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.assign` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n\n /**\n * The base implementation of `_.assignIn` without support for multiple sources\n * or `customizer` functions.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @returns {Object} Returns `object`.\n */\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n\n /**\n * The base implementation of `assignValue` and `assignMergeValue` without\n * value checks.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\n function baseAssignValue(object, key, value) {\n if (key == '__proto__' && defineProperty) {\n defineProperty(object, key, {\n 'configurable': true,\n 'enumerable': true,\n 'value': value,\n 'writable': true\n });\n } else {\n object[key] = value;\n }\n }\n\n /**\n * The base implementation of `_.at` without support for individual paths.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {string[]} paths The property paths to pick.\n * @returns {Array} Returns the picked elements.\n */\n function baseAt(object, paths) {\n var index = -1,\n length = paths.length,\n result = Array(length),\n skip = object == null;\n\n while (++index < length) {\n result[index] = skip ? undefined : get(object, paths[index]);\n }\n return result;\n }\n\n /**\n * The base implementation of `_.clamp` which doesn't coerce arguments.\n *\n * @private\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n */\n function baseClamp(number, lower, upper) {\n if (number === number) {\n if (upper !== undefined) {\n number = number <= upper ? number : upper;\n }\n if (lower !== undefined) {\n number = number >= lower ? number : lower;\n }\n }\n return number;\n }\n\n /**\n * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n * traversed objects.\n *\n * @private\n * @param {*} value The value to clone.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Deep clone\n * 2 - Flatten inherited properties\n * 4 - Clone symbols\n * @param {Function} [customizer] The function to customize cloning.\n * @param {string} [key] The key of `value`.\n * @param {Object} [object] The parent object of `value`.\n * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n * @returns {*} Returns the cloned value.\n */\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result,\n isDeep = bitmask & CLONE_DEEP_FLAG,\n isFlat = bitmask & CLONE_FLAT_FLAG,\n isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== undefined) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag(value),\n isFunc = tag == funcTag || tag == genTag;\n\n if (isBuffer(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag || tag == argsTag || (isFunc && !object)) {\n result = (isFlat || isFunc) ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat\n ? copySymbolsIn(value, baseAssignIn(result, value))\n : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n // Check for circular references and return its corresponding clone.\n stack || (stack = new Stack);\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n\n if (isSet(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n\n return result;\n }\n\n if (isMap(value)) {\n value.forEach(function(subValue, key) {\n result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n\n return result;\n }\n\n var keysFunc = isFull\n ? (isFlat ? getAllKeysIn : getAllKeys)\n : (isFlat ? keysIn : keys);\n\n var props = isArr ? undefined : keysFunc(value);\n arrayEach(props || value, function(subValue, key) {\n if (props) {\n key = subValue;\n subValue = value[key];\n }\n // Recursively populate clone (susceptible to call stack limits).\n assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n });\n return result;\n }\n\n /**\n * The base implementation of `_.delay` and `_.defer` which accepts `args`\n * to provide to `func`.\n *\n * @private\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {Array} args The arguments to provide to `func`.\n * @returns {number|Object} Returns the timer id or timeout object.\n */\n function baseDelay(func, wait, args) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return setTimeout(function() { func.apply(undefined, args); }, wait);\n }\n\n /**\n * The base implementation of methods like `_.difference` without support\n * for excluding multiple arrays or iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Array} values The values to exclude.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of filtered values.\n */\n function baseDifference(array, values, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n isCommon = true,\n length = array.length,\n result = [],\n valuesLength = values.length;\n\n if (!length) {\n return result;\n }\n if (iteratee) {\n values = arrayMap(values, baseUnary(iteratee));\n }\n if (comparator) {\n includes = arrayIncludesWith;\n isCommon = false;\n }\n else if (values.length >= LARGE_ARRAY_SIZE) {\n includes = cacheHas;\n isCommon = false;\n values = new SetCache(values);\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee == null ? value : iteratee(value);\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n }\n else if (!includes(values, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.forEach` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n */\n var baseEach = createBaseEach(baseForOwn);\n\n /**\n * The base implementation of `_.every` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`\n */\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach(collection, function(value, index, collection) {\n result = !!predicate(value, index, collection);\n return result;\n });\n return result;\n }\n\n /**\n * The base implementation of methods like `_.max` and `_.min` which accepts a\n * `comparator` to determine the extremum value.\n *\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} iteratee The iteratee invoked per iteration.\n * @param {Function} comparator The comparator used to compare values.\n * @returns {*} Returns the extremum value.\n */\n function baseExtremum(array, iteratee, comparator) {\n var index = -1,\n length = array.length;\n\n while (++index < length) {\n var value = array[index],\n current = iteratee(value);\n\n if (current != null && (computed === undefined\n ? (current === current && !isSymbol(current))\n : comparator(current, computed)\n )) {\n var computed = current,\n result = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.filter` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n */\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach(collection, function(value, index, collection) {\n if (predicate(value, index, collection)) {\n result.push(value);\n }\n });\n return result;\n }\n\n /**\n * The base implementation of `_.flatten` with support for restricting flattening.\n *\n * @private\n * @param {Array} array The array to flatten.\n * @param {number} depth The maximum recursion depth.\n * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n * @param {Array} [result=[]] The initial result value.\n * @returns {Array} Returns the new flattened array.\n */\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1,\n length = array.length;\n\n predicate || (predicate = isFlattenable);\n result || (result = []);\n\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n // Recursively flatten arrays (susceptible to call stack limits).\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `baseForOwn` which iterates over `object`\n * properties returned by `keysFunc` and invokes `iteratee` for each property.\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseFor = createBaseFor();\n\n /**\n * This function is like `baseFor` except that it iterates over properties\n * in the opposite order.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @returns {Object} Returns `object`.\n */\n var baseForRight = createBaseFor(true);\n\n /**\n * The base implementation of `_.forOwn` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwn(object, iteratee) {\n return object && baseFor(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Object} Returns `object`.\n */\n function baseForOwnRight(object, iteratee) {\n return object && baseForRight(object, iteratee, keys);\n }\n\n /**\n * The base implementation of `_.functions` which creates an array of\n * `object` function property names filtered from `props`.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Array} props The property names to filter.\n * @returns {Array} Returns the function names.\n */\n function baseFunctions(object, props) {\n return arrayFilter(props, function(key) {\n return isFunction(object[key]);\n });\n }\n\n /**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\n function baseGet(object, path) {\n path = castPath(path, object);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\n }\n\n /**\n * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Function} keysFunc The function to get the keys of `object`.\n * @param {Function} symbolsFunc The function to get the symbols of `object`.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n\n /**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n function baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n }\n\n /**\n * The base implementation of `_.gt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is greater than `other`,\n * else `false`.\n */\n function baseGt(value, other) {\n return value > other;\n }\n\n /**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n }\n\n /**\n * The base implementation of `_.hasIn` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n\n /**\n * The base implementation of methods like `_.intersection`, without support\n * for iteratee shorthands, that accepts an array of arrays to inspect.\n *\n * @private\n * @param {Array} arrays The arrays to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new array of shared values.\n */\n function baseIntersection(arrays, iteratee, comparator) {\n var includes = comparator ? arrayIncludesWith : arrayIncludes,\n length = arrays[0].length,\n othLength = arrays.length,\n othIndex = othLength,\n caches = Array(othLength),\n maxLength = Infinity,\n result = [];\n\n while (othIndex--) {\n var array = arrays[othIndex];\n if (othIndex && iteratee) {\n array = arrayMap(array, baseUnary(iteratee));\n }\n maxLength = nativeMin(array.length, maxLength);\n caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))\n ? new SetCache(othIndex && array)\n : undefined;\n }\n array = arrays[0];\n\n var index = -1,\n seen = caches[0];\n\n outer:\n while (++index < length && result.length < maxLength) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (!(seen\n ? cacheHas(seen, computed)\n : includes(result, computed, comparator)\n )) {\n othIndex = othLength;\n while (--othIndex) {\n var cache = caches[othIndex];\n if (!(cache\n ? cacheHas(cache, computed)\n : includes(arrays[othIndex], computed, comparator))\n ) {\n continue outer;\n }\n }\n if (seen) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.invert` and `_.invertBy` which inverts\n * `object` with values transformed by `iteratee` and set by `setter`.\n *\n * @private\n * @param {Object} object The object to iterate over.\n * @param {Function} setter The function to set `accumulator` values.\n * @param {Function} iteratee The iteratee to transform values.\n * @param {Object} accumulator The initial inverted object.\n * @returns {Function} Returns `accumulator`.\n */\n function baseInverter(object, setter, iteratee, accumulator) {\n baseForOwn(object, function(value, key, object) {\n setter(accumulator, iteratee(value), key, object);\n });\n return accumulator;\n }\n\n /**\n * The base implementation of `_.invoke` without support for individual\n * method arguments.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the method to invoke.\n * @param {Array} args The arguments to invoke the method with.\n * @returns {*} Returns the result of the invoked method.\n */\n function baseInvoke(object, path, args) {\n path = castPath(path, object);\n object = parent(object, path);\n var func = object == null ? object : object[toKey(last(path))];\n return func == null ? undefined : apply(func, object, args);\n }\n\n /**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n }\n\n /**\n * The base implementation of `_.isDate` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n */\n function baseIsDate(value) {\n return isObjectLike(value) && baseGetTag(value) == dateTag;\n }\n\n /**\n * The base implementation of `_.isEqual` which supports partial comparisons\n * and tracks traversed objects.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @param {boolean} bitmask The bitmask flags.\n * 1 - Unordered comparison\n * 2 - Partial comparison\n * @param {Function} [customizer] The function to customize comparisons.\n * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n */\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n\n /**\n * A specialized version of `baseIsEqual` for arrays and objects which performs\n * deep comparisons and tracks traversed objects enabling objects with circular\n * references to be compared.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray(object),\n othIsArr = isArray(other),\n objTag = objIsArr ? arrayTag : getTag(object),\n othTag = othIsArr ? arrayTag : getTag(other);\n\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n\n var objIsObj = objTag == objectTag,\n othIsObj = othTag == objectTag,\n isSameTag = objTag == othTag;\n\n if (isSameTag && isBuffer(object)) {\n if (!isBuffer(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack);\n return (objIsArr || isTypedArray(object))\n ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)\n : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object,\n othUnwrapped = othIsWrapped ? other.value() : other;\n\n stack || (stack = new Stack);\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack);\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n\n /**\n * The base implementation of `_.isMap` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n */\n function baseIsMap(value) {\n return isObjectLike(value) && getTag(value) == mapTag;\n }\n\n /**\n * The base implementation of `_.isMatch` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The object to inspect.\n * @param {Object} source The object of property values to match.\n * @param {Array} matchData The property names, values, and compare flags to match.\n * @param {Function} [customizer] The function to customize comparisons.\n * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n */\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length,\n length = index,\n noCustomizer = !customizer;\n\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if ((noCustomizer && data[2])\n ? data[1] !== object[data[0]]\n : !(data[0] in object)\n ) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0],\n objValue = object[key],\n srcValue = data[1];\n\n if (noCustomizer && data[2]) {\n if (objValue === undefined && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack;\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === undefined\n ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)\n : result\n )) {\n return false;\n }\n }\n }\n return true;\n }\n\n /**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n\n /**\n * The base implementation of `_.isRegExp` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n */\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n\n /**\n * The base implementation of `_.isSet` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n */\n function baseIsSet(value) {\n return isObjectLike(value) && getTag(value) == setTag;\n }\n\n /**\n * The base implementation of `_.isTypedArray` without Node.js optimizations.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n */\n function baseIsTypedArray(value) {\n return isObjectLike(value) &&\n isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n\n /**\n * The base implementation of `_.iteratee`.\n *\n * @private\n * @param {*} [value=_.identity] The value to convert to an iteratee.\n * @returns {Function} Returns the iteratee.\n */\n function baseIteratee(value) {\n // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n if (typeof value == 'function') {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == 'object') {\n return isArray(value)\n ? baseMatchesProperty(value[0], value[1])\n : baseMatches(value);\n }\n return property(value);\n }\n\n /**\n * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty.call(object, key) && key != 'constructor') {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object),\n result = [];\n\n for (var key in object) {\n if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.lt` which doesn't coerce arguments.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if `value` is less than `other`,\n * else `false`.\n */\n function baseLt(value, other) {\n return value < other;\n }\n\n /**\n * The base implementation of `_.map` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\n function baseMap(collection, iteratee) {\n var index = -1,\n result = isArrayLike(collection) ? Array(collection.length) : [];\n\n baseEach(collection, function(value, key, collection) {\n result[++index] = iteratee(value, key, collection);\n });\n return result;\n }\n\n /**\n * The base implementation of `_.matches` which doesn't clone `source`.\n *\n * @private\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n\n /**\n * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n *\n * @private\n * @param {string} path The path of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return (objValue === undefined && objValue === srcValue)\n ? hasIn(object, path)\n : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n\n /**\n * The base implementation of `_.merge` without support for multiple sources.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} [customizer] The function to customize merged values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMerge(object, source, srcIndex, customizer, stack) {\n if (object === source) {\n return;\n }\n baseFor(source, function(srcValue, key) {\n if (isObject(srcValue)) {\n stack || (stack = new Stack);\n baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n }\n else {\n var newValue = customizer\n ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)\n : undefined;\n\n if (newValue === undefined) {\n newValue = srcValue;\n }\n assignMergeValue(object, key, newValue);\n }\n }, keysIn);\n }\n\n /**\n * A specialized version of `baseMerge` for arrays and objects which performs\n * deep merges and tracks traversed objects enabling objects with circular\n * references to be merged.\n *\n * @private\n * @param {Object} object The destination object.\n * @param {Object} source The source object.\n * @param {string} key The key of the value to merge.\n * @param {number} srcIndex The index of `source`.\n * @param {Function} mergeFunc The function to merge values.\n * @param {Function} [customizer] The function to customize assigned values.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n */\n function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n var objValue = safeGet(object, key),\n srcValue = safeGet(source, key),\n stacked = stack.get(srcValue);\n\n if (stacked) {\n assignMergeValue(object, key, stacked);\n return;\n }\n var newValue = customizer\n ? customizer(objValue, srcValue, (key + ''), object, source, stack)\n : undefined;\n\n var isCommon = newValue === undefined;\n\n if (isCommon) {\n var isArr = isArray(srcValue),\n isBuff = !isArr && isBuffer(srcValue),\n isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n\n newValue = srcValue;\n if (isArr || isBuff || isTyped) {\n if (isArray(objValue)) {\n newValue = objValue;\n }\n else if (isArrayLikeObject(objValue)) {\n newValue = copyArray(objValue);\n }\n else if (isBuff) {\n isCommon = false;\n newValue = cloneBuffer(srcValue, true);\n }\n else if (isTyped) {\n isCommon = false;\n newValue = cloneTypedArray(srcValue, true);\n }\n else {\n newValue = [];\n }\n }\n else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n newValue = objValue;\n if (isArguments(objValue)) {\n newValue = toPlainObject(objValue);\n }\n else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) {\n newValue = initCloneObject(srcValue);\n }\n }\n else {\n isCommon = false;\n }\n }\n if (isCommon) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, newValue);\n mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n stack['delete'](srcValue);\n }\n assignMergeValue(object, key, newValue);\n }\n\n /**\n * The base implementation of `_.orderBy` without param guards.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n * @param {string[]} orders The sort orders of `iteratees`.\n * @returns {Array} Returns the new sorted array.\n */\n function baseOrderBy(collection, iteratees, orders) {\n var index = -1;\n iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee));\n\n var result = baseMap(collection, function(value, key, collection) {\n var criteria = arrayMap(iteratees, function(iteratee) {\n return iteratee(value);\n });\n return { 'criteria': criteria, 'index': ++index, 'value': value };\n });\n\n return baseSortBy(result, function(object, other) {\n return compareMultiple(object, other, orders);\n });\n }\n\n /**\n * The base implementation of `_.pick` without support for individual\n * property identifiers.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @returns {Object} Returns the new object.\n */\n function basePick(object, paths) {\n return basePickBy(object, paths, function(value, path) {\n return hasIn(object, path);\n });\n }\n\n /**\n * The base implementation of `_.pickBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Object} object The source object.\n * @param {string[]} paths The property paths to pick.\n * @param {Function} predicate The function invoked per property.\n * @returns {Object} Returns the new object.\n */\n function basePickBy(object, paths, predicate) {\n var index = -1,\n length = paths.length,\n result = {};\n\n while (++index < length) {\n var path = paths[index],\n value = baseGet(object, path);\n\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n\n /**\n * A specialized version of `baseProperty` which supports deep paths.\n *\n * @private\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n */\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n\n /**\n * The base implementation of `_.random` without support for returning\n * floating-point numbers.\n *\n * @private\n * @param {number} lower The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the random number.\n */\n function baseRandom(lower, upper) {\n return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n }\n\n /**\n * The base implementation of `_.range` and `_.rangeRight` which doesn't\n * coerce arguments.\n *\n * @private\n * @param {number} start The start of the range.\n * @param {number} end The end of the range.\n * @param {number} step The value to increment or decrement by.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Array} Returns the range of numbers.\n */\n function baseRange(start, end, step, fromRight) {\n var index = -1,\n length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n result = Array(length);\n\n while (length--) {\n result[fromRight ? length : ++index] = start;\n start += step;\n }\n return result;\n }\n\n /**\n * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n */\n function baseRest(func, start) {\n return setToString(overRest(func, start, identity), func + '');\n }\n\n /**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n\n /**\n * The base implementation of `setData` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var baseSetData = !metaMap ? identity : function(func, data) {\n metaMap.set(func, data);\n return func;\n };\n\n /**\n * The base implementation of `setToString` without support for hot loop shorting.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var baseSetToString = !defineProperty ? identity : function(func, string) {\n return defineProperty(func, 'toString', {\n 'configurable': true,\n 'enumerable': false,\n 'value': constant(string),\n 'writable': true\n });\n };\n\n /**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n\n /**\n * The base implementation of `_.some` without support for iteratee shorthands.\n *\n * @private\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} predicate The function invoked per iteration.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n */\n function baseSome(collection, predicate) {\n var result;\n\n baseEach(collection, function(value, index, collection) {\n result = predicate(value, index, collection);\n return !result;\n });\n return !!result;\n }\n\n /**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\n function baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee] The iteratee invoked per element.\n * @param {Function} [comparator] The comparator invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n */\n function baseUniq(array, iteratee, comparator) {\n var index = -1,\n includes = arrayIncludes,\n length = array.length,\n isCommon = true,\n result = [],\n seen = result;\n\n if (comparator) {\n isCommon = false;\n includes = arrayIncludesWith;\n }\n else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes = cacheHas;\n seen = new SetCache;\n }\n else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index],\n computed = iteratee ? iteratee(value) : value;\n\n value = (comparator || value !== 0) ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n }\n else if (!includes(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n\n /**\n * The base implementation of `_.unset`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The property path to unset.\n * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n */\n function baseUnset(object, path) {\n path = castPath(path, object);\n object = parent(object, path);\n return object == null || delete object[toKey(last(path))];\n }\n\n /**\n * The base implementation of `wrapperValue` which returns the result of\n * performing a sequence of actions on the unwrapped `value`, where each\n * successive action is supplied the return value of the previous.\n *\n * @private\n * @param {*} value The unwrapped value.\n * @param {Array} actions Actions to perform to resolve the unwrapped value.\n * @returns {*} Returns the resolved value.\n */\n function baseWrapperValue(value, actions) {\n var result = value;\n if (result instanceof LazyWrapper) {\n result = result.value();\n }\n return arrayReduce(actions, function(result, action) {\n return action.func.apply(action.thisArg, arrayPush([result], action.args));\n }, result);\n }\n\n /**\n * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n *\n * @private\n * @param {Array} props The property identifiers.\n * @param {Array} values The property values.\n * @param {Function} assignFunc The function to assign values.\n * @returns {Object} Returns the new object.\n */\n function baseZipObject(props, values, assignFunc) {\n var index = -1,\n length = props.length,\n valsLength = values.length,\n result = {};\n\n while (++index < length) {\n var value = index < valsLength ? values[index] : undefined;\n assignFunc(result, props[index], value);\n }\n return result;\n }\n\n /**\n * Casts `value` to an empty array if it's not an array like object.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {Array|Object} Returns the cast array-like object.\n */\n function castArrayLikeObject(value) {\n return isArrayLikeObject(value) ? value : [];\n }\n\n /**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\n function castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n }\n\n /**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\n function castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n }\n\n /**\n * Creates a clone of `buffer`.\n *\n * @private\n * @param {Buffer} buffer The buffer to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Buffer} Returns the cloned buffer.\n */\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length,\n result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n\n buffer.copy(result);\n return result;\n }\n\n /**\n * Creates a clone of `arrayBuffer`.\n *\n * @private\n * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n * @returns {ArrayBuffer} Returns the cloned array buffer.\n */\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n return result;\n }\n\n /**\n * Creates a clone of `dataView`.\n *\n * @private\n * @param {Object} dataView The data view to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned data view.\n */\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n\n /**\n * Creates a clone of `regexp`.\n *\n * @private\n * @param {Object} regexp The regexp to clone.\n * @returns {Object} Returns the cloned regexp.\n */\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n\n /**\n * Creates a clone of the `symbol` object.\n *\n * @private\n * @param {Object} symbol The symbol object to clone.\n * @returns {Object} Returns the cloned symbol object.\n */\n function cloneSymbol(symbol) {\n return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n }\n\n /**\n * Creates a clone of `typedArray`.\n *\n * @private\n * @param {Object} typedArray The typed array to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the cloned typed array.\n */\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n\n /**\n * Compares values to sort them in ascending order.\n *\n * @private\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {number} Returns the sort order indicator for `value`.\n */\n function compareAscending(value, other) {\n if (value !== other) {\n var valIsDefined = value !== undefined,\n valIsNull = value === null,\n valIsReflexive = value === value,\n valIsSymbol = isSymbol(value);\n\n var othIsDefined = other !== undefined,\n othIsNull = other === null,\n othIsReflexive = other === other,\n othIsSymbol = isSymbol(other);\n\n if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||\n (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||\n (valIsNull && othIsDefined && othIsReflexive) ||\n (!valIsDefined && othIsReflexive) ||\n !valIsReflexive) {\n return 1;\n }\n if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||\n (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||\n (othIsNull && valIsDefined && valIsReflexive) ||\n (!othIsDefined && valIsReflexive) ||\n !othIsReflexive) {\n return -1;\n }\n }\n return 0;\n }\n\n /**\n * Used by `_.orderBy` to compare multiple properties of a value to another\n * and stable sort them.\n *\n * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n * of corresponding values.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {boolean[]|string[]} orders The order to sort by for each property.\n * @returns {number} Returns the sort order indicator for `object`.\n */\n function compareMultiple(object, other, orders) {\n var index = -1,\n objCriteria = object.criteria,\n othCriteria = other.criteria,\n length = objCriteria.length,\n ordersLength = orders.length;\n\n while (++index < length) {\n var result = compareAscending(objCriteria[index], othCriteria[index]);\n if (result) {\n if (index >= ordersLength) {\n return result;\n }\n var order = orders[index];\n return result * (order == 'desc' ? -1 : 1);\n }\n }\n // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n // that causes it, under certain circumstances, to provide the same value for\n // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n // for more details.\n //\n // This also ensures a stable sort in V8 and other engines.\n // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n return object.index - other.index;\n }\n\n /**\n * Creates an array that is the composition of partially applied arguments,\n * placeholders, and provided arguments into a single array of arguments.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to prepend to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgs(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersLength = holders.length,\n leftIndex = -1,\n leftLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(leftLength + rangeLength),\n isUncurried = !isCurried;\n\n while (++leftIndex < leftLength) {\n result[leftIndex] = partials[leftIndex];\n }\n while (++argsIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[holders[argsIndex]] = args[argsIndex];\n }\n }\n while (rangeLength--) {\n result[leftIndex++] = args[argsIndex++];\n }\n return result;\n }\n\n /**\n * This function is like `composeArgs` except that the arguments composition\n * is tailored for `_.partialRight`.\n *\n * @private\n * @param {Array} args The provided arguments.\n * @param {Array} partials The arguments to append to those provided.\n * @param {Array} holders The `partials` placeholder indexes.\n * @params {boolean} [isCurried] Specify composing for a curried function.\n * @returns {Array} Returns the new array of composed arguments.\n */\n function composeArgsRight(args, partials, holders, isCurried) {\n var argsIndex = -1,\n argsLength = args.length,\n holdersIndex = -1,\n holdersLength = holders.length,\n rightIndex = -1,\n rightLength = partials.length,\n rangeLength = nativeMax(argsLength - holdersLength, 0),\n result = Array(rangeLength + rightLength),\n isUncurried = !isCurried;\n\n while (++argsIndex < rangeLength) {\n result[argsIndex] = args[argsIndex];\n }\n var offset = argsIndex;\n while (++rightIndex < rightLength) {\n result[offset + rightIndex] = partials[rightIndex];\n }\n while (++holdersIndex < holdersLength) {\n if (isUncurried || argsIndex < argsLength) {\n result[offset + holders[holdersIndex]] = args[argsIndex++];\n }\n }\n return result;\n }\n\n /**\n * Copies the values of `source` to `array`.\n *\n * @private\n * @param {Array} source The array to copy values from.\n * @param {Array} [array=[]] The array to copy values to.\n * @returns {Array} Returns `array`.\n */\n function copyArray(source, array) {\n var index = -1,\n length = source.length;\n\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n\n /**\n * Copies properties of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy properties from.\n * @param {Array} props The property identifiers to copy.\n * @param {Object} [object={}] The object to copy properties to.\n * @param {Function} [customizer] The function to customize copied values.\n * @returns {Object} Returns `object`.\n */\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n\n var index = -1,\n length = props.length;\n\n while (++index < length) {\n var key = props[index];\n\n var newValue = customizer\n ? customizer(object[key], source[key], key, object, source)\n : undefined;\n\n if (newValue === undefined) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n\n /**\n * Copies own symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbols(source, object) {\n return copyObject(source, getSymbols(source), object);\n }\n\n /**\n * Copies own and inherited symbols of `source` to `object`.\n *\n * @private\n * @param {Object} source The object to copy symbols from.\n * @param {Object} [object={}] The object to copy symbols to.\n * @returns {Object} Returns `object`.\n */\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn(source), object);\n }\n\n /**\n * Creates a function like `_.groupBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} [initializer] The accumulator object initializer.\n * @returns {Function} Returns the new aggregator function.\n */\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray(collection) ? arrayAggregator : baseAggregator,\n accumulator = initializer ? initializer() : {};\n\n return func(collection, setter, baseIteratee(iteratee, 2), accumulator);\n };\n }\n\n /**\n * Creates a function like `_.assign`.\n *\n * @private\n * @param {Function} assigner The function to assign values.\n * @returns {Function} Returns the new assigner function.\n */\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1,\n length = sources.length,\n customizer = length > 1 ? sources[length - 1] : undefined,\n guard = length > 2 ? sources[2] : undefined;\n\n customizer = (assigner.length > 3 && typeof customizer == 'function')\n ? (length--, customizer)\n : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? undefined : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n\n /**\n * Creates a `baseEach` or `baseEachRight` function.\n *\n * @private\n * @param {Function} eachFunc The function to iterate over a collection.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length,\n index = fromRight ? length : -1,\n iterable = Object(collection);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n\n /**\n * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new base function.\n */\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1,\n iterable = Object(object),\n props = keysFunc(object),\n length = props.length;\n\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the optional `this`\n * binding of `thisArg`.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createBind(func, bitmask, thisArg) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return fn.apply(isBind ? thisArg : this, arguments);\n }\n return wrapper;\n }\n\n /**\n * Creates a function that produces an instance of `Ctor` regardless of\n * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n *\n * @private\n * @param {Function} Ctor The constructor to wrap.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCtor(Ctor) {\n return function() {\n // Use a `switch` statement to work with class constructors. See\n // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n // for more details.\n var args = arguments;\n switch (args.length) {\n case 0: return new Ctor;\n case 1: return new Ctor(args[0]);\n case 2: return new Ctor(args[0], args[1]);\n case 3: return new Ctor(args[0], args[1], args[2]);\n case 4: return new Ctor(args[0], args[1], args[2], args[3]);\n case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n }\n var thisBinding = baseCreate(Ctor.prototype),\n result = Ctor.apply(thisBinding, args);\n\n // Mimic the constructor's `return` behavior.\n // See https://es5.github.io/#x13.2.2 for more details.\n return isObject(result) ? result : thisBinding;\n };\n }\n\n /**\n * Creates a function that wraps `func` to enable currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {number} arity The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createCurry(func, bitmask, arity) {\n var Ctor = createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length,\n placeholder = getHolder(wrapper);\n\n while (index--) {\n args[index] = arguments[index];\n }\n var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)\n ? []\n : replaceHolders(args, placeholder);\n\n length -= holders.length;\n if (length < arity) {\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, undefined,\n args, holders, undefined, undefined, arity - length);\n }\n var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n return apply(fn, this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.find` or `_.findLast` function.\n *\n * @private\n * @param {Function} findIndexFunc The function to find the collection index.\n * @returns {Function} Returns the new find function.\n */\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate, 3);\n collection = keys(collection);\n predicate = function(key) { return iteratee(iterable[key], key, iterable); };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with optional `this`\n * binding of `thisArg`, partial application, and currying.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [partialsRight] The arguments to append to those provided\n * to the new function.\n * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n var isAry = bitmask & WRAP_ARY_FLAG,\n isBind = bitmask & WRAP_BIND_FLAG,\n isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n isFlip = bitmask & WRAP_FLIP_FLAG,\n Ctor = isBindKey ? undefined : createCtor(func);\n\n function wrapper() {\n var length = arguments.length,\n args = Array(length),\n index = length;\n\n while (index--) {\n args[index] = arguments[index];\n }\n if (isCurried) {\n var placeholder = getHolder(wrapper),\n holdersCount = countHolders(args, placeholder);\n }\n if (partials) {\n args = composeArgs(args, partials, holders, isCurried);\n }\n if (partialsRight) {\n args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n }\n length -= holdersCount;\n if (isCurried && length < arity) {\n var newHolders = replaceHolders(args, placeholder);\n return createRecurry(\n func, bitmask, createHybrid, wrapper.placeholder, thisArg,\n args, newHolders, argPos, ary, arity - length\n );\n }\n var thisBinding = isBind ? thisArg : this,\n fn = isBindKey ? thisBinding[func] : func;\n\n length = args.length;\n if (argPos) {\n args = reorder(args, argPos);\n } else if (isFlip && length > 1) {\n args.reverse();\n }\n if (isAry && ary < length) {\n args.length = ary;\n }\n if (this && this !== root && this instanceof wrapper) {\n fn = Ctor || createCtor(fn);\n }\n return fn.apply(thisBinding, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a function like `_.invertBy`.\n *\n * @private\n * @param {Function} setter The function to set accumulator values.\n * @param {Function} toIteratee The function to resolve iteratees.\n * @returns {Function} Returns the new inverter function.\n */\n function createInverter(setter, toIteratee) {\n return function(object, iteratee) {\n return baseInverter(object, setter, toIteratee(iteratee), {});\n };\n }\n\n /**\n * Creates a function that wraps `func` to invoke it with the `this` binding\n * of `thisArg` and `partials` prepended to the arguments it receives.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {Array} partials The arguments to prepend to those provided to\n * the new function.\n * @returns {Function} Returns the new wrapped function.\n */\n function createPartial(func, bitmask, thisArg, partials) {\n var isBind = bitmask & WRAP_BIND_FLAG,\n Ctor = createCtor(func);\n\n function wrapper() {\n var argsIndex = -1,\n argsLength = arguments.length,\n leftIndex = -1,\n leftLength = partials.length,\n args = Array(leftLength + argsLength),\n fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;\n\n while (++leftIndex < leftLength) {\n args[leftIndex] = partials[leftIndex];\n }\n while (argsLength--) {\n args[leftIndex++] = arguments[++argsIndex];\n }\n return apply(fn, isBind ? thisArg : this, args);\n }\n return wrapper;\n }\n\n /**\n * Creates a `_.range` or `_.rangeRight` function.\n *\n * @private\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {Function} Returns the new range function.\n */\n function createRange(fromRight) {\n return function(start, end, step) {\n if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n end = step = undefined;\n }\n // Ensure the sign of `-0` is preserved.\n start = toFinite(start);\n if (end === undefined) {\n end = start;\n start = 0;\n } else {\n end = toFinite(end);\n }\n step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);\n return baseRange(start, end, step, fromRight);\n };\n }\n\n /**\n * Creates a function that wraps `func` to continue currying.\n *\n * @private\n * @param {Function} func The function to wrap.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @param {Function} wrapFunc The function to create the `func` wrapper.\n * @param {*} placeholder The placeholder value.\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to prepend to those provided to\n * the new function.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n var isCurry = bitmask & WRAP_CURRY_FLAG,\n newHolders = isCurry ? holders : undefined,\n newHoldersRight = isCurry ? undefined : holders,\n newPartials = isCurry ? partials : undefined,\n newPartialsRight = isCurry ? undefined : partials;\n\n bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);\n bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n }\n var newData = [\n func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,\n newHoldersRight, argPos, ary, arity\n ];\n\n var result = wrapFunc.apply(undefined, newData);\n if (isLaziable(func)) {\n setData(result, newData);\n }\n result.placeholder = placeholder;\n return setWrapToString(result, func, bitmask);\n }\n\n /**\n * Creates a set object of `values`.\n *\n * @private\n * @param {Array} values The values to add to the set.\n * @returns {Object} Returns the new set.\n */\n var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {\n return new Set(values);\n };\n\n /**\n * Creates a function that either curries or invokes `func` with optional\n * `this` binding and partially applied arguments.\n *\n * @private\n * @param {Function|string} func The function or method name to wrap.\n * @param {number} bitmask The bitmask flags.\n * 1 - `_.bind`\n * 2 - `_.bindKey`\n * 4 - `_.curry` or `_.curryRight` of a bound function\n * 8 - `_.curry`\n * 16 - `_.curryRight`\n * 32 - `_.partial`\n * 64 - `_.partialRight`\n * 128 - `_.rearg`\n * 256 - `_.ary`\n * 512 - `_.flip`\n * @param {*} [thisArg] The `this` binding of `func`.\n * @param {Array} [partials] The arguments to be partially applied.\n * @param {Array} [holders] The `partials` placeholder indexes.\n * @param {Array} [argPos] The argument positions of the new function.\n * @param {number} [ary] The arity cap of `func`.\n * @param {number} [arity] The arity of `func`.\n * @returns {Function} Returns the new wrapped function.\n */\n function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n if (!isBindKey && typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var length = partials ? partials.length : 0;\n if (!length) {\n bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n partials = holders = undefined;\n }\n ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n arity = arity === undefined ? arity : toInteger(arity);\n length -= holders ? holders.length : 0;\n\n if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n var partialsRight = partials,\n holdersRight = holders;\n\n partials = holders = undefined;\n }\n var data = isBindKey ? undefined : getData(func);\n\n var newData = [\n func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,\n argPos, ary, arity\n ];\n\n if (data) {\n mergeData(newData, data);\n }\n func = newData[0];\n bitmask = newData[1];\n thisArg = newData[2];\n partials = newData[3];\n holders = newData[4];\n arity = newData[9] = newData[9] === undefined\n ? (isBindKey ? 0 : func.length)\n : nativeMax(newData[9] - length, 0);\n\n if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n }\n if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n var result = createBind(func, bitmask, thisArg);\n } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n result = createCurry(func, bitmask, arity);\n } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n result = createPartial(func, bitmask, thisArg, partials);\n } else {\n result = createHybrid.apply(undefined, newData);\n }\n var setter = data ? baseSetData : setData;\n return setWrapToString(setter(result, newData), func, bitmask);\n }\n\n /**\n * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n * objects into destination objects that are passed thru.\n *\n * @private\n * @param {*} objValue The destination value.\n * @param {*} srcValue The source value.\n * @param {string} key The key of the property to merge.\n * @param {Object} object The parent object of `objValue`.\n * @param {Object} source The parent object of `srcValue`.\n * @param {Object} [stack] Tracks traversed source values and their merged\n * counterparts.\n * @returns {*} Returns the value to assign.\n */\n function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n if (isObject(objValue) && isObject(srcValue)) {\n // Recursively merge objects and arrays (susceptible to call stack limits).\n stack.set(srcValue, objValue);\n baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n stack['delete'](srcValue);\n }\n return objValue;\n }\n\n /**\n * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n * objects.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {string} key The key of the property to inspect.\n * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n */\n function customOmitClone(value) {\n return isPlainObject(value) ? undefined : value;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for arrays with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Array} array The array to compare.\n * @param {Array} other The other array to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `array` and `other` objects.\n * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n */\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n arrLength = array.length,\n othLength = other.length;\n\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(array);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var index = -1,\n result = true,\n seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;\n\n stack.set(array, other);\n stack.set(other, array);\n\n // Ignore non-index properties.\n while (++index < arrLength) {\n var arrValue = array[index],\n othValue = other[index];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, arrValue, index, other, array, stack)\n : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== undefined) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n // Recursively compare arrays (susceptible to call stack limits).\n if (seen) {\n if (!arraySome(other, function(othValue, othIndex) {\n if (!cacheHas(seen, othIndex) &&\n (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(\n arrValue === othValue ||\n equalFunc(arrValue, othValue, bitmask, customizer, stack)\n )) {\n result = false;\n break;\n }\n }\n stack['delete'](array);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for comparing objects of\n * the same `toStringTag`.\n *\n * **Note:** This function only supports comparing values with tags of\n * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {string} tag The `toStringTag` of the objects to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if ((object.byteLength != other.byteLength) ||\n (object.byteOffset != other.byteOffset)) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n\n case arrayBufferTag:\n if ((object.byteLength != other.byteLength) ||\n !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n return false;\n }\n return true;\n\n case boolTag:\n case dateTag:\n case numberTag:\n // Coerce booleans to `1` or `0` and dates to milliseconds.\n // Invalid dates are coerced to `NaN`.\n return eq(+object, +other);\n\n case errorTag:\n return object.name == other.name && object.message == other.message;\n\n case regexpTag:\n case stringTag:\n // Coerce regexes to strings and treat strings, primitives and objects,\n // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n // for more details.\n return object == (other + '');\n\n case mapTag:\n var convert = mapToArray;\n\n case setTag:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n convert || (convert = setToArray);\n\n if (object.size != other.size && !isPartial) {\n return false;\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG;\n\n // Recursively compare objects (susceptible to call stack limits).\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack['delete'](object);\n return result;\n\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n\n /**\n * A specialized version of `baseIsEqualDeep` for objects with support for\n * partial deep comparisons.\n *\n * @private\n * @param {Object} object The object to compare.\n * @param {Object} other The other object to compare.\n * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n * @param {Function} customizer The function to customize comparisons.\n * @param {Function} equalFunc The function to determine equivalents of values.\n * @param {Object} stack Tracks traversed `object` and `other` objects.\n * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n */\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n objProps = getAllKeys(object),\n objLength = objProps.length,\n othProps = getAllKeys(other),\n othLength = othProps.length;\n\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n return false;\n }\n }\n // Assume cyclic values are equal.\n var stacked = stack.get(object);\n if (stacked && stack.get(other)) {\n return stacked == other;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key],\n othValue = other[key];\n\n if (customizer) {\n var compared = isPartial\n ? customizer(othValue, objValue, key, other, object, stack)\n : customizer(objValue, othValue, key, object, other, stack);\n }\n // Recursively compare objects (susceptible to call stack limits).\n if (!(compared === undefined\n ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))\n : compared\n )) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == 'constructor');\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor,\n othCtor = other.constructor;\n\n // Non `Object` object instances with different constructors are not equal.\n if (objCtor != othCtor &&\n ('constructor' in object && 'constructor' in other) &&\n !(typeof objCtor == 'function' && objCtor instanceof objCtor &&\n typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack['delete'](object);\n stack['delete'](other);\n return result;\n }\n\n /**\n * A specialized version of `baseRest` which flattens the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @returns {Function} Returns the new function.\n */\n function flatRest(func) {\n return setToString(overRest(func, undefined, flatten), func + '');\n }\n\n /**\n * Creates an array of own enumerable property names and symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols);\n }\n\n /**\n * Creates an array of own and inherited enumerable property names and\n * symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names and symbols.\n */\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn);\n }\n\n /**\n * Gets metadata for `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {*} Returns the metadata for `func`.\n */\n var getData = !metaMap ? noop : function(func) {\n return metaMap.get(func);\n };\n\n /**\n * Gets the name of `func`.\n *\n * @private\n * @param {Function} func The function to query.\n * @returns {string} Returns the function name.\n */\n function getFuncName(func) {\n var result = (func.name + ''),\n array = realNames[result],\n length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n while (length--) {\n var data = array[length],\n otherFunc = data.func;\n if (otherFunc == null || otherFunc == func) {\n return data.name;\n }\n }\n return result;\n }\n\n /**\n * Gets the argument placeholder value for `func`.\n *\n * @private\n * @param {Function} func The function to inspect.\n * @returns {*} Returns the placeholder value.\n */\n function getHolder(func) {\n var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n return object.placeholder;\n }\n\n /**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\n function getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n }\n\n /**\n * Gets the property names, values, and compare flags of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the match data of `object`.\n */\n function getMatchData(object) {\n var result = keys(object),\n length = result.length;\n\n while (length--) {\n var key = result[length],\n value = object[key];\n\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n\n /**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n }\n\n /**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\n function getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n }\n\n /**\n * Creates an array of the own enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbols = !nativeGetSymbols ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n\n /**\n * Creates an array of the own and inherited enumerable symbols of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of symbols.\n */\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols(object));\n object = getPrototype(object);\n }\n return result;\n };\n\n /**\n * Gets the `toStringTag` of `value`.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\n var getTag = baseGetTag;\n\n // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||\n (Map && getTag(new Map) != mapTag) ||\n (Promise && getTag(Promise.resolve()) != promiseTag) ||\n (Set && getTag(new Set) != setTag) ||\n (WeakMap && getTag(new WeakMap) != weakMapTag)) {\n getTag = function(value) {\n var result = baseGetTag(value),\n Ctor = result == objectTag ? value.constructor : undefined,\n ctorString = Ctor ? toSource(Ctor) : '';\n\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString: return dataViewTag;\n case mapCtorString: return mapTag;\n case promiseCtorString: return promiseTag;\n case setCtorString: return setTag;\n case weakMapCtorString: return weakMapTag;\n }\n }\n return result;\n };\n }\n\n /**\n * Gets the view, applying any `transforms` to the `start` and `end` positions.\n *\n * @private\n * @param {number} start The start of the view.\n * @param {number} end The end of the view.\n * @param {Array} transforms The transformations to apply to the view.\n * @returns {Object} Returns an object containing the `start` and `end`\n * positions of the view.\n */\n function getView(start, end, transforms) {\n var index = -1,\n length = transforms.length;\n\n while (++index < length) {\n var data = transforms[index],\n size = data.size;\n\n switch (data.type) {\n case 'drop': start += size; break;\n case 'dropRight': end -= size; break;\n case 'take': end = nativeMin(end, start + size); break;\n case 'takeRight': start = nativeMax(start, end - size); break;\n }\n }\n return { 'start': start, 'end': end };\n }\n\n /**\n * Extracts wrapper details from the `source` body comment.\n *\n * @private\n * @param {string} source The source to inspect.\n * @returns {Array} Returns the wrapper details.\n */\n function getWrapDetails(source) {\n var match = source.match(reWrapDetails);\n return match ? match[1].split(reSplitDetails) : [];\n }\n\n /**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n }\n\n /**\n * Initializes an array clone.\n *\n * @private\n * @param {Array} array The array to clone.\n * @returns {Array} Returns the initialized clone.\n */\n function initCloneArray(array) {\n var length = array.length,\n result = new array.constructor(length);\n\n // Add properties assigned by `RegExp#exec`.\n if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n\n /**\n * Initializes an object clone.\n *\n * @private\n * @param {Object} object The object to clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneObject(object) {\n return (typeof object.constructor == 'function' && !isPrototype(object))\n ? baseCreate(getPrototype(object))\n : {};\n }\n\n /**\n * Initializes an object clone based on its `toStringTag`.\n *\n * **Note:** This function only supports cloning values with tags of\n * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n *\n * @private\n * @param {Object} object The object to clone.\n * @param {string} tag The `toStringTag` of the object to clone.\n * @param {boolean} [isDeep] Specify a deep clone.\n * @returns {Object} Returns the initialized clone.\n */\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag:\n return cloneArrayBuffer(object);\n\n case boolTag:\n case dateTag:\n return new Ctor(+object);\n\n case dataViewTag:\n return cloneDataView(object, isDeep);\n\n case float32Tag: case float64Tag:\n case int8Tag: case int16Tag: case int32Tag:\n case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:\n return cloneTypedArray(object, isDeep);\n\n case mapTag:\n return new Ctor;\n\n case numberTag:\n case stringTag:\n return new Ctor(object);\n\n case regexpTag:\n return cloneRegExp(object);\n\n case setTag:\n return new Ctor;\n\n case symbolTag:\n return cloneSymbol(object);\n }\n }\n\n /**\n * Inserts wrapper `details` in a comment at the top of the `source` body.\n *\n * @private\n * @param {string} source The source to modify.\n * @returns {Array} details The details to insert.\n * @returns {string} Returns the modified source.\n */\n function insertWrapDetails(source, details) {\n var length = details.length;\n if (!length) {\n return source;\n }\n var lastIndex = length - 1;\n details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n details = details.join(length > 2 ? ', ' : ' ');\n return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n }\n\n /**\n * Checks if `value` is a flattenable `arguments` object or array.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n */\n function isFlattenable(value) {\n return isArray(value) || isArguments(value) ||\n !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n\n /**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n }\n\n /**\n * Checks if the given arguments are from an iteratee call.\n *\n * @private\n * @param {*} value The potential iteratee value argument.\n * @param {*} index The potential iteratee index or key argument.\n * @param {*} object The potential iteratee object argument.\n * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n * else `false`.\n */\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == 'number'\n ? (isArrayLike(object) && isIndex(index, object.length))\n : (type == 'string' && index in object)\n ) {\n return eq(object[index], value);\n }\n return false;\n }\n\n /**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\n function isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n }\n\n /**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\n function isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n }\n\n /**\n * Checks if `func` has a lazy counterpart.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n * else `false`.\n */\n function isLaziable(func) {\n var funcName = getFuncName(func),\n other = lodash[funcName];\n\n if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n return false;\n }\n if (func === other) {\n return true;\n }\n var data = getData(other);\n return !!data && func === data[0];\n }\n\n /**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\n function isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n }\n\n /**\n * Checks if `value` is likely a prototype object.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n */\n function isPrototype(value) {\n var Ctor = value && value.constructor,\n proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;\n\n return value === proto;\n }\n\n /**\n * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` if suitable for strict\n * equality comparisons, else `false`.\n */\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n\n /**\n * A specialized version of `matchesProperty` for source values suitable\n * for strict equality comparisons, i.e. `===`.\n *\n * @private\n * @param {string} key The key of the property to get.\n * @param {*} srcValue The value to match.\n * @returns {Function} Returns the new spec function.\n */\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue &&\n (srcValue !== undefined || (key in Object(object)));\n };\n }\n\n /**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n }\n\n /**\n * Merges the function metadata of `source` into `data`.\n *\n * Merging metadata reduces the number of wrappers used to invoke a function.\n * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n * may be applied regardless of execution order. Methods like `_.ary` and\n * `_.rearg` modify function arguments, making the order in which they are\n * executed important, preventing the merging of metadata. However, we make\n * an exception for a safe combined case where curried functions have `_.ary`\n * and or `_.rearg` applied.\n *\n * @private\n * @param {Array} data The destination metadata.\n * @param {Array} source The source metadata.\n * @returns {Array} Returns `data`.\n */\n function mergeData(data, source) {\n var bitmask = data[1],\n srcBitmask = source[1],\n newBitmask = bitmask | srcBitmask,\n isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n\n var isCombo =\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||\n ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||\n ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));\n\n // Exit early if metadata can't be merged.\n if (!(isCommon || isCombo)) {\n return data;\n }\n // Use source `thisArg` if available.\n if (srcBitmask & WRAP_BIND_FLAG) {\n data[2] = source[2];\n // Set when currying a bound function.\n newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n }\n // Compose partial arguments.\n var value = source[3];\n if (value) {\n var partials = data[3];\n data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n }\n // Compose partial right arguments.\n value = source[5];\n if (value) {\n partials = data[5];\n data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n }\n // Use source `argPos` if available.\n value = source[7];\n if (value) {\n data[7] = value;\n }\n // Use source `ary` if it's smaller.\n if (srcBitmask & WRAP_ARY_FLAG) {\n data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n }\n // Use source `arity` if one is not provided.\n if (data[9] == null) {\n data[9] = source[9];\n }\n // Use source `func` and merge bitmasks.\n data[0] = source[0];\n data[1] = newBitmask;\n\n return data;\n }\n\n /**\n * This function is like\n * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * except that it includes inherited enumerable properties.\n *\n * @private\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n */\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n\n /**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n\n /**\n * A specialized version of `baseRest` which transforms the rest array.\n *\n * @private\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @param {Function} transform The rest array transform.\n * @returns {Function} Returns the new function.\n */\n function overRest(func, start, transform) {\n start = nativeMax(start === undefined ? (func.length - 1) : start, 0);\n return function() {\n var args = arguments,\n index = -1,\n length = nativeMax(args.length - start, 0),\n array = Array(length);\n\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n\n /**\n * Gets the parent value at `path` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array} path The path to get the parent value of.\n * @returns {*} Returns the parent value.\n */\n function parent(object, path) {\n return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n }\n\n /**\n * Reorder `array` according to the specified indexes where the element at\n * the first index is assigned as the first element, the element at\n * the second index is assigned as the second element, and so on.\n *\n * @private\n * @param {Array} array The array to reorder.\n * @param {Array} indexes The arranged array indexes.\n * @returns {Array} Returns `array`.\n */\n function reorder(array, indexes) {\n var arrLength = array.length,\n length = nativeMin(indexes.length, arrLength),\n oldArray = copyArray(array);\n\n while (length--) {\n var index = indexes[length];\n array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n }\n return array;\n }\n\n /**\n * Sets metadata for `func`.\n *\n * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n * period of time, it will trip its breaker and transition to an identity\n * function to avoid garbage collection pauses in V8. See\n * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n * for more details.\n *\n * @private\n * @param {Function} func The function to associate metadata with.\n * @param {*} data The metadata.\n * @returns {Function} Returns `func`.\n */\n var setData = shortOut(baseSetData);\n\n /**\n * Sets the `toString` method of `func` to return `string`.\n *\n * @private\n * @param {Function} func The function to modify.\n * @param {Function} string The `toString` result.\n * @returns {Function} Returns `func`.\n */\n var setToString = shortOut(baseSetToString);\n\n /**\n * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n * with wrapper details in a comment at the top of the source body.\n *\n * @private\n * @param {Function} wrapper The function to modify.\n * @param {Function} reference The reference function.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Function} Returns `wrapper`.\n */\n function setWrapToString(wrapper, reference, bitmask) {\n var source = (reference + '');\n return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n }\n\n /**\n * Creates a function that'll short out and invoke `identity` instead\n * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n * milliseconds.\n *\n * @private\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new shortable function.\n */\n function shortOut(func) {\n var count = 0,\n lastCalled = 0;\n\n return function() {\n var stamp = nativeNow(),\n remaining = HOT_SPAN - (stamp - lastCalled);\n\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(undefined, arguments);\n };\n }\n\n /**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n });\n\n /**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\n function toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n }\n\n /**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n }\n\n /**\n * Updates wrapper `details` based on `bitmask` flags.\n *\n * @private\n * @returns {Array} details The details to modify.\n * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n * @returns {Array} Returns `details`.\n */\n function updateWrapDetails(details, bitmask) {\n arrayEach(wrapFlags, function(pair) {\n var value = '_.' + pair[0];\n if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {\n details.push(value);\n }\n });\n return details.sort();\n }\n\n /**\n * Creates a clone of `wrapper`.\n *\n * @private\n * @param {Object} wrapper The wrapper to clone.\n * @returns {Object} Returns the cloned wrapper.\n */\n function wrapperClone(wrapper) {\n if (wrapper instanceof LazyWrapper) {\n return wrapper.clone();\n }\n var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n result.__actions__ = copyArray(wrapper.__actions__);\n result.__index__ = wrapper.__index__;\n result.__values__ = wrapper.__values__;\n return result;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an array with all falsey values removed. The values `false`, `null`,\n * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to compact.\n * @returns {Array} Returns the new array of filtered values.\n * @example\n *\n * _.compact([0, 1, false, 2, '', 3]);\n * // => [1, 2, 3]\n */\n function compact(array) {\n var index = -1,\n length = array == null ? 0 : array.length,\n resIndex = 0,\n result = [];\n\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n\n /**\n * Creates a new array concatenating `array` with any additional arrays\n * and/or values.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to concatenate.\n * @param {...*} [values] The values to concatenate.\n * @returns {Array} Returns the new concatenated array.\n * @example\n *\n * var array = [1];\n * var other = _.concat(array, 2, [3], [[4]]);\n *\n * console.log(other);\n * // => [1, 2, 3, [4]]\n *\n * console.log(array);\n * // => [1]\n */\n function concat() {\n var length = arguments.length;\n if (!length) {\n return [];\n }\n var args = Array(length - 1),\n array = arguments[0],\n index = length;\n\n while (index--) {\n args[index - 1] = arguments[index];\n }\n return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n }\n\n /**\n * Creates an array of `array` values not included in the other given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * **Note:** Unlike `_.pullAll`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...Array} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.without, _.xor\n * @example\n *\n * _.difference([2, 1], [2, 3]);\n * // => [1]\n */\n var difference = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))\n : [];\n });\n\n /**\n * Creates a slice of `array` with `n` elements dropped from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to drop.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.drop([1, 2, 3]);\n * // => [2, 3]\n *\n * _.drop([1, 2, 3], 2);\n * // => [3]\n *\n * _.drop([1, 2, 3], 5);\n * // => []\n *\n * _.drop([1, 2, 3], 0);\n * // => [1, 2, 3]\n */\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * This method is like `_.find` except that it returns the index of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': false },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': true }\n * ];\n *\n * _.findIndex(users, function(o) { return o.user == 'barney'; });\n * // => 0\n *\n * // The `_.matches` iteratee shorthand.\n * _.findIndex(users, { 'user': 'fred', 'active': false });\n * // => 1\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findIndex(users, ['active', false]);\n * // => 0\n *\n * // The `_.property` iteratee shorthand.\n * _.findIndex(users, 'active');\n * // => 2\n */\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index);\n }\n\n /**\n * This method is like `_.findIndex` except that it iterates over elements\n * of `collection` from right to left.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=array.length-1] The index to search from.\n * @returns {number} Returns the index of the found element, else `-1`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false },\n * { 'user': 'pebbles', 'active': false }\n * ];\n *\n * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n * // => 2\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n * // => 0\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastIndex(users, ['active', false]);\n * // => 2\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastIndex(users, 'active');\n * // => 0\n */\n function findLastIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = length - 1;\n if (fromIndex !== undefined) {\n index = toInteger(fromIndex);\n index = fromIndex < 0\n ? nativeMax(length + index, 0)\n : nativeMin(index, length - 1);\n }\n return baseFindIndex(array, baseIteratee(predicate, 3), index, true);\n }\n\n /**\n * Flattens `array` a single level deep.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flatten([1, [2, [3, [4]], 5]]);\n * // => [1, 2, [3, [4]], 5]\n */\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n\n /**\n * Recursively flattens `array`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to flatten.\n * @returns {Array} Returns the new flattened array.\n * @example\n *\n * _.flattenDeep([1, [2, [3, [4]], 5]]);\n * // => [1, 2, 3, 4, 5]\n */\n function flattenDeep(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, INFINITY) : [];\n }\n\n /**\n * Gets the first element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias first\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the first element of `array`.\n * @example\n *\n * _.head([1, 2, 3]);\n * // => 1\n *\n * _.head([]);\n * // => undefined\n */\n function head(array) {\n return (array && array.length) ? array[0] : undefined;\n }\n\n /**\n * Gets the index at which the first occurrence of `value` is found in `array`\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. If `fromIndex` is negative, it's used as the\n * offset from the end of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n * @example\n *\n * _.indexOf([1, 2, 1, 2], 2);\n * // => 1\n *\n * // Search from the `fromIndex`.\n * _.indexOf([1, 2, 1, 2], 2, 2);\n * // => 3\n */\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n\n /**\n * Gets all but the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.initial([1, 2, 3]);\n * // => [1, 2]\n */\n function initial(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseSlice(array, 0, -1) : [];\n }\n\n /**\n * Creates an array of unique values that are included in all given arrays\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons. The order and references of result values are\n * determined by the first array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of intersecting values.\n * @example\n *\n * _.intersection([2, 1], [2, 3]);\n * // => [2]\n */\n var intersection = baseRest(function(arrays) {\n var mapped = arrayMap(arrays, castArrayLikeObject);\n return (mapped.length && mapped[0] === arrays[0])\n ? baseIntersection(mapped)\n : [];\n });\n\n /**\n * Gets the last element of `array`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @returns {*} Returns the last element of `array`.\n * @example\n *\n * _.last([1, 2, 3]);\n * // => 3\n */\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : undefined;\n }\n\n /**\n * Reverses `array` so that the first element becomes the last, the second\n * element becomes the second to last, and so on.\n *\n * **Note:** This method mutates `array` and is based on\n * [`Array#reverse`](https://mdn.io/Array/reverse).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to modify.\n * @returns {Array} Returns `array`.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _.reverse(array);\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function reverse(array) {\n return array == null ? array : nativeReverse.call(array);\n }\n\n /**\n * Creates a slice of `array` from `start` up to, but not including, `end`.\n *\n * **Note:** This method is used instead of\n * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n * returned.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\n function slice(array, start, end) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n start = 0;\n end = length;\n }\n else {\n start = start == null ? 0 : toInteger(start);\n end = end === undefined ? length : toInteger(end);\n }\n return baseSlice(array, start, end);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the beginning.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.take([1, 2, 3]);\n * // => [1]\n *\n * _.take([1, 2, 3], 2);\n * // => [1, 2]\n *\n * _.take([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.take([1, 2, 3], 0);\n * // => []\n */\n function take(array, n, guard) {\n if (!(array && array.length)) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n\n /**\n * Creates a slice of `array` with `n` elements taken from the end.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Array\n * @param {Array} array The array to query.\n * @param {number} [n=1] The number of elements to take.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {Array} Returns the slice of `array`.\n * @example\n *\n * _.takeRight([1, 2, 3]);\n * // => [3]\n *\n * _.takeRight([1, 2, 3], 2);\n * // => [2, 3]\n *\n * _.takeRight([1, 2, 3], 5);\n * // => [1, 2, 3]\n *\n * _.takeRight([1, 2, 3], 0);\n * // => []\n */\n function takeRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = (guard || n === undefined) ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n\n /**\n * Creates an array of unique values, in order, from all given arrays using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to inspect.\n * @returns {Array} Returns the new array of combined values.\n * @example\n *\n * _.union([2], [1, 2]);\n * // => [2, 1]\n */\n var union = baseRest(function(arrays) {\n return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n });\n\n /**\n * Creates a duplicate-free version of an array, using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons, in which only the first occurrence of each element\n * is kept. The order of result values is determined by the order they occur\n * in the array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniq([2, 1, 2]);\n * // => [2, 1]\n */\n function uniq(array) {\n return (array && array.length) ? baseUniq(array) : [];\n }\n\n /**\n * This method is like `_.uniq` except that it accepts `iteratee` which is\n * invoked for each element in `array` to generate the criterion by which\n * uniqueness is computed. The order of result values is determined by the\n * order they occur in the array. The iteratee is invoked with one argument:\n * (value).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Array} Returns the new duplicate free array.\n * @example\n *\n * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n * // => [2.1, 1.2]\n *\n * // The `_.property` iteratee shorthand.\n * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n * // => [{ 'x': 1 }, { 'x': 2 }]\n */\n function uniqBy(array, iteratee) {\n return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : [];\n }\n\n /**\n * This method is like `_.zip` except that it accepts an array of grouped\n * elements and creates an array regrouping the elements to their pre-zip\n * configuration.\n *\n * @static\n * @memberOf _\n * @since 1.2.0\n * @category Array\n * @param {Array} array The array of grouped elements to process.\n * @returns {Array} Returns the new array of regrouped elements.\n * @example\n *\n * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n *\n * _.unzip(zipped);\n * // => [['a', 'b'], [1, 2], [true, false]]\n */\n function unzip(array) {\n if (!(array && array.length)) {\n return [];\n }\n var length = 0;\n array = arrayFilter(array, function(group) {\n if (isArrayLikeObject(group)) {\n length = nativeMax(group.length, length);\n return true;\n }\n });\n return baseTimes(length, function(index) {\n return arrayMap(array, baseProperty(index));\n });\n }\n\n /**\n * Creates an array excluding all given values using\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * **Note:** Unlike `_.pull`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {Array} array The array to inspect.\n * @param {...*} [values] The values to exclude.\n * @returns {Array} Returns the new array of filtered values.\n * @see _.difference, _.xor\n * @example\n *\n * _.without([2, 1, 2, 3], 1, 2);\n * // => [3]\n */\n var without = baseRest(function(array, values) {\n return isArrayLikeObject(array)\n ? baseDifference(array, values)\n : [];\n });\n\n /**\n * Creates an array of grouped elements, the first of which contains the\n * first elements of the given arrays, the second of which contains the\n * second elements of the given arrays, and so on.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Array\n * @param {...Array} [arrays] The arrays to process.\n * @returns {Array} Returns the new array of grouped elements.\n * @example\n *\n * _.zip(['a', 'b'], [1, 2], [true, false]);\n * // => [['a', 1, true], ['b', 2, false]]\n */\n var zip = baseRest(unzip);\n\n /**\n * This method is like `_.fromPairs` except that it accepts two arrays,\n * one of property identifiers and one of corresponding values.\n *\n * @static\n * @memberOf _\n * @since 0.4.0\n * @category Array\n * @param {Array} [props=[]] The property identifiers.\n * @param {Array} [values=[]] The property values.\n * @returns {Object} Returns the new object.\n * @example\n *\n * _.zipObject(['a', 'b'], [1, 2]);\n * // => { 'a': 1, 'b': 2 }\n */\n function zipObject(props, values) {\n return baseZipObject(props || [], values || [], assignValue);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n * chain sequences enabled. The result of such sequences must be unwrapped\n * with `_#value`.\n *\n * @static\n * @memberOf _\n * @since 1.3.0\n * @category Seq\n * @param {*} value The value to wrap.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'pebbles', 'age': 1 }\n * ];\n *\n * var youngest = _\n * .chain(users)\n * .sortBy('age')\n * .map(function(o) {\n * return o.user + ' is ' + o.age;\n * })\n * .head()\n * .value();\n * // => 'pebbles is 1'\n */\n function chain(value) {\n var result = lodash(value);\n result.__chain__ = true;\n return result;\n }\n\n /**\n * This method invokes `interceptor` and returns `value`. The interceptor\n * is invoked with one argument; (value). The purpose of this method is to\n * \"tap into\" a method chain sequence in order to modify intermediate results.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns `value`.\n * @example\n *\n * _([1, 2, 3])\n * .tap(function(array) {\n * // Mutate input array.\n * array.pop();\n * })\n * .reverse()\n * .value();\n * // => [2, 1]\n */\n function tap(value, interceptor) {\n interceptor(value);\n return value;\n }\n\n /**\n * This method is like `_.tap` except that it returns the result of `interceptor`.\n * The purpose of this method is to \"pass thru\" values replacing intermediate\n * results in a method chain sequence.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Seq\n * @param {*} value The value to provide to `interceptor`.\n * @param {Function} interceptor The function to invoke.\n * @returns {*} Returns the result of `interceptor`.\n * @example\n *\n * _(' abc ')\n * .chain()\n * .trim()\n * .thru(function(value) {\n * return [value];\n * })\n * .value();\n * // => ['abc']\n */\n function thru(value, interceptor) {\n return interceptor(value);\n }\n\n /**\n * This method is the wrapper version of `_.at`.\n *\n * @name at\n * @memberOf _\n * @since 1.0.0\n * @category Seq\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n *\n * _(object).at(['a[0].b.c', 'a[1]']).value();\n * // => [3, 4]\n */\n var wrapperAt = flatRest(function(paths) {\n var length = paths.length,\n start = length ? paths[0] : 0,\n value = this.__wrapped__,\n interceptor = function(object) { return baseAt(object, paths); };\n\n if (length > 1 || this.__actions__.length ||\n !(value instanceof LazyWrapper) || !isIndex(start)) {\n return this.thru(interceptor);\n }\n value = value.slice(start, +start + (length ? 1 : 0));\n value.__actions__.push({\n 'func': thru,\n 'args': [interceptor],\n 'thisArg': undefined\n });\n return new LodashWrapper(value, this.__chain__).thru(function(array) {\n if (length && !array.length) {\n array.push(undefined);\n }\n return array;\n });\n });\n\n /**\n * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n *\n * @name chain\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 }\n * ];\n *\n * // A sequence without explicit chaining.\n * _(users).head();\n * // => { 'user': 'barney', 'age': 36 }\n *\n * // A sequence with explicit chaining.\n * _(users)\n * .chain()\n * .head()\n * .pick('user')\n * .value();\n * // => { 'user': 'barney' }\n */\n function wrapperChain() {\n return chain(this);\n }\n\n /**\n * Executes the chain sequence and returns the wrapped result.\n *\n * @name commit\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2];\n * var wrapped = _(array).push(3);\n *\n * console.log(array);\n * // => [1, 2]\n *\n * wrapped = wrapped.commit();\n * console.log(array);\n * // => [1, 2, 3]\n *\n * wrapped.last();\n * // => 3\n *\n * console.log(array);\n * // => [1, 2, 3]\n */\n function wrapperCommit() {\n return new LodashWrapper(this.value(), this.__chain__);\n }\n\n /**\n * Gets the next value on a wrapped object following the\n * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n *\n * @name next\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the next iterator value.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 1 }\n *\n * wrapped.next();\n * // => { 'done': false, 'value': 2 }\n *\n * wrapped.next();\n * // => { 'done': true, 'value': undefined }\n */\n function wrapperNext() {\n if (this.__values__ === undefined) {\n this.__values__ = toArray(this.value());\n }\n var done = this.__index__ >= this.__values__.length,\n value = done ? undefined : this.__values__[this.__index__++];\n\n return { 'done': done, 'value': value };\n }\n\n /**\n * Enables the wrapper to be iterable.\n *\n * @name Symbol.iterator\n * @memberOf _\n * @since 4.0.0\n * @category Seq\n * @returns {Object} Returns the wrapper object.\n * @example\n *\n * var wrapped = _([1, 2]);\n *\n * wrapped[Symbol.iterator]() === wrapped;\n * // => true\n *\n * Array.from(wrapped);\n * // => [1, 2]\n */\n function wrapperToIterator() {\n return this;\n }\n\n /**\n * Creates a clone of the chain sequence planting `value` as the wrapped value.\n *\n * @name plant\n * @memberOf _\n * @since 3.2.0\n * @category Seq\n * @param {*} value The value to plant.\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * var wrapped = _([1, 2]).map(square);\n * var other = wrapped.plant([3, 4]);\n *\n * other.value();\n * // => [9, 16]\n *\n * wrapped.value();\n * // => [1, 4]\n */\n function wrapperPlant(value) {\n var result,\n parent = this;\n\n while (parent instanceof baseLodash) {\n var clone = wrapperClone(parent);\n clone.__index__ = 0;\n clone.__values__ = undefined;\n if (result) {\n previous.__wrapped__ = clone;\n } else {\n result = clone;\n }\n var previous = clone;\n parent = parent.__wrapped__;\n }\n previous.__wrapped__ = value;\n return result;\n }\n\n /**\n * This method is the wrapper version of `_.reverse`.\n *\n * **Note:** This method mutates the wrapped array.\n *\n * @name reverse\n * @memberOf _\n * @since 0.1.0\n * @category Seq\n * @returns {Object} Returns the new `lodash` wrapper instance.\n * @example\n *\n * var array = [1, 2, 3];\n *\n * _(array).reverse().value()\n * // => [3, 2, 1]\n *\n * console.log(array);\n * // => [3, 2, 1]\n */\n function wrapperReverse() {\n var value = this.__wrapped__;\n if (value instanceof LazyWrapper) {\n var wrapped = value;\n if (this.__actions__.length) {\n wrapped = new LazyWrapper(this);\n }\n wrapped = wrapped.reverse();\n wrapped.__actions__.push({\n 'func': thru,\n 'args': [reverse],\n 'thisArg': undefined\n });\n return new LodashWrapper(wrapped, this.__chain__);\n }\n return this.thru(reverse);\n }\n\n /**\n * Executes the chain sequence to resolve the unwrapped value.\n *\n * @name value\n * @memberOf _\n * @since 0.1.0\n * @alias toJSON, valueOf\n * @category Seq\n * @returns {*} Returns the resolved unwrapped value.\n * @example\n *\n * _([1, 2, 3]).value();\n * // => [1, 2, 3]\n */\n function wrapperValue() {\n return baseWrapperValue(this.__wrapped__, this.__actions__);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The corresponding value of\n * each key is the number of times the key was returned by `iteratee`. The\n * iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.countBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': 1, '6': 2 }\n *\n * // The `_.property` iteratee shorthand.\n * _.countBy(['one', 'two', 'three'], 'length');\n * // => { '3': 2, '5': 1 }\n */\n var countBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n ++result[key];\n } else {\n baseAssignValue(result, key, 1);\n }\n });\n\n /**\n * Checks if `predicate` returns truthy for **all** elements of `collection`.\n * Iteration is stopped once `predicate` returns falsey. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * **Note:** This method returns `true` for\n * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n * elements of empty collections.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if all elements pass the predicate check,\n * else `false`.\n * @example\n *\n * _.every([true, 1, null, 'yes'], Boolean);\n * // => false\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.every(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.every(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.every(users, 'active');\n * // => false\n */\n function every(collection, predicate, guard) {\n var func = isArray(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning an array of all elements\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * **Note:** Unlike `_.remove`, this method returns a new array.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.reject\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * _.filter(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, { 'age': 36, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.filter(users, 'active');\n * // => objects for ['barney']\n */\n function filter(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate, 3));\n }\n\n /**\n * Iterates over elements of `collection`, returning the first element\n * `predicate` returns truthy for. The predicate is invoked with three\n * arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param {number} [fromIndex=0] The index to search from.\n * @returns {*} Returns the matched element, else `undefined`.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false },\n * { 'user': 'pebbles', 'age': 1, 'active': true }\n * ];\n *\n * _.find(users, function(o) { return o.age < 40; });\n * // => object for 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.find(users, { 'age': 1, 'active': true });\n * // => object for 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.find(users, ['active', false]);\n * // => object for 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.find(users, 'active');\n * // => object for 'barney'\n */\n var find = createFind(findIndex);\n\n /**\n * Iterates over elements of `collection` and invokes `iteratee` for each element.\n * The iteratee is invoked with three arguments: (value, index|key, collection).\n * Iteratee functions may exit iteration early by explicitly returning `false`.\n *\n * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n * property are iterated like arrays. To avoid this behavior use `_.forIn`\n * or `_.forOwn` for object iteration.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @alias each\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array|Object} Returns `collection`.\n * @see _.forEachRight\n * @example\n *\n * _.forEach([1, 2], function(value) {\n * console.log(value);\n * });\n * // => Logs `1` then `2`.\n *\n * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n * console.log(key);\n * });\n * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n */\n function forEach(collection, iteratee) {\n var func = isArray(collection) ? arrayEach : baseEach;\n return func(collection, baseIteratee(iteratee, 3));\n }\n\n /**\n * Creates an object composed of keys generated from the results of running\n * each element of `collection` thru `iteratee`. The order of grouped values\n * is determined by the order they occur in `collection`. The corresponding\n * value of each key is an array of elements responsible for generating the\n * key. The iteratee is invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n * @returns {Object} Returns the composed aggregate object.\n * @example\n *\n * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n * // => { '4': [4.2], '6': [6.1, 6.3] }\n *\n * // The `_.property` iteratee shorthand.\n * _.groupBy(['one', 'two', 'three'], 'length');\n * // => { '3': ['one', 'two'], '5': ['three'] }\n */\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n\n /**\n * Creates an array of values by running each element in `collection` thru\n * `iteratee`. The iteratee is invoked with three arguments:\n * (value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n *\n * The guarded methods are:\n * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n * @example\n *\n * function square(n) {\n * return n * n;\n * }\n *\n * _.map([4, 8], square);\n * // => [16, 64]\n *\n * _.map({ 'a': 4, 'b': 8 }, square);\n * // => [16, 64] (iteration order is not guaranteed)\n *\n * var users = [\n * { 'user': 'barney' },\n * { 'user': 'fred' }\n * ];\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, 'user');\n * // => ['barney', 'fred']\n */\n function map(collection, iteratee) {\n var func = isArray(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee, 3));\n }\n\n /**\n * Reduces `collection` to a value which is the accumulated result of running\n * each element in `collection` thru `iteratee`, where each successive\n * invocation is supplied the return value of the previous. If `accumulator`\n * is not given, the first element of `collection` is used as the initial\n * value. The iteratee is invoked with four arguments:\n * (accumulator, value, index|key, collection).\n *\n * Many lodash methods are guarded to work as iteratees for methods like\n * `_.reduce`, `_.reduceRight`, and `_.transform`.\n *\n * The guarded methods are:\n * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n * and `sortBy`\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n * @param {*} [accumulator] The initial value.\n * @returns {*} Returns the accumulated value.\n * @see _.reduceRight\n * @example\n *\n * _.reduce([1, 2], function(sum, n) {\n * return sum + n;\n * }, 0);\n * // => 3\n *\n * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n * (result[value] || (result[value] = [])).push(key);\n * return result;\n * }, {});\n * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n */\n function reduce(collection, iteratee, accumulator) {\n var func = isArray(collection) ? arrayReduce : baseReduce,\n initAccum = arguments.length < 3;\n\n return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n }\n\n /**\n * The opposite of `_.filter`; this method returns the elements of `collection`\n * that `predicate` does **not** return truthy for.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {Array} Returns the new filtered array.\n * @see _.filter\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': false },\n * { 'user': 'fred', 'age': 40, 'active': true }\n * ];\n *\n * _.reject(users, function(o) { return !o.active; });\n * // => objects for ['fred']\n *\n * // The `_.matches` iteratee shorthand.\n * _.reject(users, { 'age': 40, 'active': true });\n * // => objects for ['barney']\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.reject(users, ['active', false]);\n * // => objects for ['fred']\n *\n * // The `_.property` iteratee shorthand.\n * _.reject(users, 'active');\n * // => objects for ['barney']\n */\n function reject(collection, predicate) {\n var func = isArray(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(baseIteratee(predicate, 3)));\n }\n\n /**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n * @example\n *\n * _.size([1, 2, 3]);\n * // => 3\n *\n * _.size({ 'a': 1, 'b': 2 });\n * // => 2\n *\n * _.size('pebbles');\n * // => 7\n */\n function size(collection) {\n if (collection == null) {\n return 0;\n }\n if (isArrayLike(collection)) {\n return isString(collection) ? stringSize(collection) : collection.length;\n }\n var tag = getTag(collection);\n if (tag == mapTag || tag == setTag) {\n return collection.size;\n }\n return baseKeys(collection).length;\n }\n\n /**\n * Checks if `predicate` returns truthy for **any** element of `collection`.\n * Iteration is stopped once `predicate` returns truthy. The predicate is\n * invoked with three arguments: (value, index|key, collection).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {boolean} Returns `true` if any element passes the predicate check,\n * else `false`.\n * @example\n *\n * _.some([null, 0, 'yes', false], Boolean);\n * // => true\n *\n * var users = [\n * { 'user': 'barney', 'active': true },\n * { 'user': 'fred', 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.some(users, { 'user': 'barney', 'active': false });\n * // => false\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.some(users, ['active', false]);\n * // => true\n *\n * // The `_.property` iteratee shorthand.\n * _.some(users, 'active');\n * // => true\n */\n function some(collection, predicate, guard) {\n var func = isArray(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = undefined;\n }\n return func(collection, baseIteratee(predicate, 3));\n }\n\n /**\n * Creates an array of elements, sorted in ascending order by the results of\n * running each element in a collection thru each iteratee. This method\n * performs a stable sort, that is, it preserves the original sort order of\n * equal elements. The iteratees are invoked with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Collection\n * @param {Array|Object} collection The collection to iterate over.\n * @param {...(Function|Function[])} [iteratees=[_.identity]]\n * The iteratees to sort by.\n * @returns {Array} Returns the new sorted array.\n * @example\n *\n * var users = [\n * { 'user': 'fred', 'age': 48 },\n * { 'user': 'barney', 'age': 36 },\n * { 'user': 'fred', 'age': 40 },\n * { 'user': 'barney', 'age': 34 }\n * ];\n *\n * _.sortBy(users, [function(o) { return o.user; }]);\n * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n *\n * _.sortBy(users, ['user', 'age']);\n * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n */\n var sortBy = baseRest(function(collection, iteratees) {\n if (collection == null) {\n return [];\n }\n var length = iteratees.length;\n if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n iteratees = [];\n } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n iteratees = [iteratees[0]];\n }\n return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Gets the timestamp of the number of milliseconds that have elapsed since\n * the Unix epoch (1 January 1970 00:00:00 UTC).\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Date\n * @returns {number} Returns the timestamp.\n * @example\n *\n * _.defer(function(stamp) {\n * console.log(_.now() - stamp);\n * }, _.now());\n * // => Logs the number of milliseconds it took for the deferred invocation.\n */\n var now = function() {\n return root.Date.now();\n };\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The opposite of `_.before`; this method creates a function that invokes\n * `func` once it's called `n` or more times.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {number} n The number of calls before `func` is invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var saves = ['profile', 'settings'];\n *\n * var done = _.after(saves.length, function() {\n * console.log('done saving!');\n * });\n *\n * _.forEach(saves, function(type) {\n * asyncSave({ 'type': type, 'complete': done });\n * });\n * // => Logs 'done saving!' after the two async saves have completed.\n */\n function after(n, func) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n < 1) {\n return func.apply(this, arguments);\n }\n };\n }\n\n /**\n * Creates a function that invokes `func`, with the `this` binding and arguments\n * of the created function, while it's called less than `n` times. Subsequent\n * calls to the created function return the result of the last `func` invocation.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {number} n The number of calls at which `func` is no longer invoked.\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * jQuery(element).on('click', _.before(5, addContactToList));\n * // => Allows adding up to 4 contacts to the list.\n */\n function before(n, func) {\n var result;\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n n = toInteger(n);\n return function() {\n if (--n > 0) {\n result = func.apply(this, arguments);\n }\n if (n <= 1) {\n func = undefined;\n }\n return result;\n };\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of `thisArg`\n * and `partials` prepended to the arguments it receives.\n *\n * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n * may be used as a placeholder for partially applied arguments.\n *\n * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n * property of bound functions.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to bind.\n * @param {*} thisArg The `this` binding of `func`.\n * @param {...*} [partials] The arguments to be partially applied.\n * @returns {Function} Returns the new bound function.\n * @example\n *\n * function greet(greeting, punctuation) {\n * return greeting + ' ' + this.user + punctuation;\n * }\n *\n * var object = { 'user': 'fred' };\n *\n * var bound = _.bind(greet, object, 'hi');\n * bound('!');\n * // => 'hi fred!'\n *\n * // Bound with placeholders.\n * var bound = _.bind(greet, object, _, '!');\n * bound('hi');\n * // => 'hi fred!'\n */\n var bind = baseRest(function(func, thisArg, partials) {\n var bitmask = WRAP_BIND_FLAG;\n if (partials.length) {\n var holders = replaceHolders(partials, getHolder(bind));\n bitmask |= WRAP_PARTIAL_FLAG;\n }\n return createWrap(func, bitmask, thisArg, partials, holders);\n });\n\n /**\n * Creates a debounced function that delays invoking `func` until after `wait`\n * milliseconds have elapsed since the last time the debounced function was\n * invoked. The debounced function comes with a `cancel` method to cancel\n * delayed `func` invocations and a `flush` method to immediately invoke them.\n * Provide `options` to indicate whether `func` should be invoked on the\n * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n * with the last arguments provided to the debounced function. Subsequent\n * calls to the debounced function return the result of the last `func`\n * invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the debounced function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.debounce` and `_.throttle`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to debounce.\n * @param {number} [wait=0] The number of milliseconds to delay.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=false]\n * Specify invoking on the leading edge of the timeout.\n * @param {number} [options.maxWait]\n * The maximum time `func` is allowed to be delayed before it's invoked.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new debounced function.\n * @example\n *\n * // Avoid costly calculations while the window size is in flux.\n * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n *\n * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n * jQuery(element).on('click', _.debounce(sendMail, 300, {\n * 'leading': true,\n * 'trailing': false\n * }));\n *\n * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n * var source = new EventSource('/stream');\n * jQuery(source).on('message', debounced);\n *\n * // Cancel the trailing debounced invocation.\n * jQuery(window).on('popstate', debounced.cancel);\n */\n function debounce(func, wait, options) {\n var lastArgs,\n lastThis,\n maxWait,\n result,\n timerId,\n lastCallTime,\n lastInvokeTime = 0,\n leading = false,\n maxing = false,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n wait = toNumber(wait) || 0;\n if (isObject(options)) {\n leading = !!options.leading;\n maxing = 'maxWait' in options;\n maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n\n function invokeFunc(time) {\n var args = lastArgs,\n thisArg = lastThis;\n\n lastArgs = lastThis = undefined;\n lastInvokeTime = time;\n result = func.apply(thisArg, args);\n return result;\n }\n\n function leadingEdge(time) {\n // Reset any `maxWait` timer.\n lastInvokeTime = time;\n // Start the timer for the trailing edge.\n timerId = setTimeout(timerExpired, wait);\n // Invoke the leading edge.\n return leading ? invokeFunc(time) : result;\n }\n\n function remainingWait(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime,\n timeWaiting = wait - timeSinceLastCall;\n\n return maxing\n ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)\n : timeWaiting;\n }\n\n function shouldInvoke(time) {\n var timeSinceLastCall = time - lastCallTime,\n timeSinceLastInvoke = time - lastInvokeTime;\n\n // Either this is the first call, activity has stopped and we're at the\n // trailing edge, the system time has gone backwards and we're treating\n // it as the trailing edge, or we've hit the `maxWait` limit.\n return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||\n (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));\n }\n\n function timerExpired() {\n var time = now();\n if (shouldInvoke(time)) {\n return trailingEdge(time);\n }\n // Restart the timer.\n timerId = setTimeout(timerExpired, remainingWait(time));\n }\n\n function trailingEdge(time) {\n timerId = undefined;\n\n // Only invoke if we have `lastArgs` which means `func` has been\n // debounced at least once.\n if (trailing && lastArgs) {\n return invokeFunc(time);\n }\n lastArgs = lastThis = undefined;\n return result;\n }\n\n function cancel() {\n if (timerId !== undefined) {\n clearTimeout(timerId);\n }\n lastInvokeTime = 0;\n lastArgs = lastCallTime = lastThis = timerId = undefined;\n }\n\n function flush() {\n return timerId === undefined ? result : trailingEdge(now());\n }\n\n function debounced() {\n var time = now(),\n isInvoking = shouldInvoke(time);\n\n lastArgs = arguments;\n lastThis = this;\n lastCallTime = time;\n\n if (isInvoking) {\n if (timerId === undefined) {\n return leadingEdge(lastCallTime);\n }\n if (maxing) {\n // Handle invocations in a tight loop.\n timerId = setTimeout(timerExpired, wait);\n return invokeFunc(lastCallTime);\n }\n }\n if (timerId === undefined) {\n timerId = setTimeout(timerExpired, wait);\n }\n return result;\n }\n debounced.cancel = cancel;\n debounced.flush = flush;\n return debounced;\n }\n\n /**\n * Defers invoking the `func` until the current call stack has cleared. Any\n * additional arguments are provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to defer.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.defer(function(text) {\n * console.log(text);\n * }, 'deferred');\n * // => Logs 'deferred' after one millisecond.\n */\n var defer = baseRest(function(func, args) {\n return baseDelay(func, 1, args);\n });\n\n /**\n * Invokes `func` after `wait` milliseconds. Any additional arguments are\n * provided to `func` when it's invoked.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to delay.\n * @param {number} wait The number of milliseconds to delay invocation.\n * @param {...*} [args] The arguments to invoke `func` with.\n * @returns {number} Returns the timer id.\n * @example\n *\n * _.delay(function(text) {\n * console.log(text);\n * }, 1000, 'later');\n * // => Logs 'later' after one second.\n */\n var delay = baseRest(function(func, wait, args) {\n return baseDelay(func, toNumber(wait) || 0, args);\n });\n\n /**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\n function memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n }\n\n // Expose `MapCache`.\n memoize.Cache = MapCache;\n\n /**\n * Creates a function that negates the result of the predicate `func`. The\n * `func` predicate is invoked with the `this` binding and arguments of the\n * created function.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Function\n * @param {Function} predicate The predicate to negate.\n * @returns {Function} Returns the new negated function.\n * @example\n *\n * function isEven(n) {\n * return n % 2 == 0;\n * }\n *\n * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n * // => [1, 3, 5]\n */\n function negate(predicate) {\n if (typeof predicate != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0: return !predicate.call(this);\n case 1: return !predicate.call(this, args[0]);\n case 2: return !predicate.call(this, args[0], args[1]);\n case 3: return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n\n /**\n * Creates a function that is restricted to invoking `func` once. Repeat calls\n * to the function return the value of the first invocation. The `func` is\n * invoked with the `this` binding and arguments of the created function.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to restrict.\n * @returns {Function} Returns the new restricted function.\n * @example\n *\n * var initialize = _.once(createApplication);\n * initialize();\n * initialize();\n * // => `createApplication` is invoked once\n */\n function once(func) {\n return before(2, func);\n }\n\n /**\n * Creates a function that invokes `func` with the `this` binding of the\n * created function and arguments from `start` and beyond provided as\n * an array.\n *\n * **Note:** This method is based on the\n * [rest parameter](https://mdn.io/rest_parameters).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Function\n * @param {Function} func The function to apply a rest parameter to.\n * @param {number} [start=func.length-1] The start position of the rest parameter.\n * @returns {Function} Returns the new function.\n * @example\n *\n * var say = _.rest(function(what, names) {\n * return what + ' ' + _.initial(names).join(', ') +\n * (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n * });\n *\n * say('hello', 'fred', 'barney', 'pebbles');\n * // => 'hello fred, barney, & pebbles'\n */\n function rest(func, start) {\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n start = start === undefined ? start : toInteger(start);\n return baseRest(func, start);\n }\n\n /**\n * Creates a throttled function that only invokes `func` at most once per\n * every `wait` milliseconds. The throttled function comes with a `cancel`\n * method to cancel delayed `func` invocations and a `flush` method to\n * immediately invoke them. Provide `options` to indicate whether `func`\n * should be invoked on the leading and/or trailing edge of the `wait`\n * timeout. The `func` is invoked with the last arguments provided to the\n * throttled function. Subsequent calls to the throttled function return the\n * result of the last `func` invocation.\n *\n * **Note:** If `leading` and `trailing` options are `true`, `func` is\n * invoked on the trailing edge of the timeout only if the throttled function\n * is invoked more than once during the `wait` timeout.\n *\n * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n *\n * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n * for details over the differences between `_.throttle` and `_.debounce`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to throttle.\n * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.leading=true]\n * Specify invoking on the leading edge of the timeout.\n * @param {boolean} [options.trailing=true]\n * Specify invoking on the trailing edge of the timeout.\n * @returns {Function} Returns the new throttled function.\n * @example\n *\n * // Avoid excessively updating the position while scrolling.\n * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n *\n * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n * jQuery(element).on('click', throttled);\n *\n * // Cancel the trailing throttled invocation.\n * jQuery(window).on('popstate', throttled.cancel);\n */\n function throttle(func, wait, options) {\n var leading = true,\n trailing = true;\n\n if (typeof func != 'function') {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n if (isObject(options)) {\n leading = 'leading' in options ? !!options.leading : leading;\n trailing = 'trailing' in options ? !!options.trailing : trailing;\n }\n return debounce(func, wait, {\n 'leading': leading,\n 'maxWait': wait,\n 'trailing': trailing\n });\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a shallow clone of `value`.\n *\n * **Note:** This method is loosely based on the\n * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n * and supports cloning arrays, array buffers, booleans, date objects, maps,\n * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n * arrays. The own enumerable properties of `arguments` objects are cloned\n * as plain objects. An empty object is returned for uncloneable values such\n * as error objects, functions, DOM nodes, and WeakMaps.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to clone.\n * @returns {*} Returns the cloned value.\n * @see _.cloneDeep\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var shallow = _.clone(objects);\n * console.log(shallow[0] === objects[0]);\n * // => true\n */\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * This method is like `_.clone` except that it recursively clones `value`.\n *\n * @static\n * @memberOf _\n * @since 1.0.0\n * @category Lang\n * @param {*} value The value to recursively clone.\n * @returns {*} Returns the deep cloned value.\n * @see _.clone\n * @example\n *\n * var objects = [{ 'a': 1 }, { 'b': 2 }];\n *\n * var deep = _.cloneDeep(objects);\n * console.log(deep[0] === objects[0]);\n * // => false\n */\n function cloneDeep(value) {\n return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n }\n\n /**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\n function eq(value, other) {\n return value === other || (value !== value && other !== other);\n }\n\n /**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\n var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n };\n\n /**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\n var isArray = Array.isArray;\n\n /**\n * Checks if `value` is array-like. A value is considered array-like if it's\n * not a function and has a `value.length` that's an integer greater than or\n * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n * @example\n *\n * _.isArrayLike([1, 2, 3]);\n * // => true\n *\n * _.isArrayLike(document.body.children);\n * // => true\n *\n * _.isArrayLike('abc');\n * // => true\n *\n * _.isArrayLike(_.noop);\n * // => false\n */\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n\n /**\n * This method is like `_.isArrayLike` except that it also checks if `value`\n * is an object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array-like object,\n * else `false`.\n * @example\n *\n * _.isArrayLikeObject([1, 2, 3]);\n * // => true\n *\n * _.isArrayLikeObject(document.body.children);\n * // => true\n *\n * _.isArrayLikeObject('abc');\n * // => false\n *\n * _.isArrayLikeObject(_.noop);\n * // => false\n */\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n\n /**\n * Checks if `value` is classified as a boolean primitive or object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n * @example\n *\n * _.isBoolean(false);\n * // => true\n *\n * _.isBoolean(null);\n * // => false\n */\n function isBoolean(value) {\n return value === true || value === false ||\n (isObjectLike(value) && baseGetTag(value) == boolTag);\n }\n\n /**\n * Checks if `value` is a buffer.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n * @example\n *\n * _.isBuffer(new Buffer(2));\n * // => true\n *\n * _.isBuffer(new Uint8Array(2));\n * // => false\n */\n var isBuffer = nativeIsBuffer || stubFalse;\n\n /**\n * Checks if `value` is classified as a `Date` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n * @example\n *\n * _.isDate(new Date);\n * // => true\n *\n * _.isDate('Mon April 23 2012');\n * // => false\n */\n var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n\n /**\n * Checks if `value` is an empty object, collection, map, or set.\n *\n * Objects are considered empty if they have no own enumerable string keyed\n * properties.\n *\n * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n * jQuery-like collections are considered empty if they have a `length` of `0`.\n * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n * @example\n *\n * _.isEmpty(null);\n * // => true\n *\n * _.isEmpty(true);\n * // => true\n *\n * _.isEmpty(1);\n * // => true\n *\n * _.isEmpty([1, 2, 3]);\n * // => false\n *\n * _.isEmpty({ 'a': 1 });\n * // => false\n */\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) &&\n (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||\n isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n return !value.length;\n }\n var tag = getTag(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Performs a deep comparison between two values to determine if they are\n * equivalent.\n *\n * **Note:** This method supports comparing arrays, array buffers, booleans,\n * date objects, error objects, maps, numbers, `Object` objects, regexes,\n * sets, strings, symbols, and typed arrays. `Object` objects are compared\n * by their own, not inherited, enumerable properties. Functions and DOM\n * nodes are compared by strict equality, i.e. `===`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.isEqual(object, other);\n * // => true\n *\n * object === other;\n * // => false\n */\n function isEqual(value, other) {\n return baseIsEqual(value, other);\n }\n\n /**\n * Checks if `value` is a finite primitive number.\n *\n * **Note:** This method is based on\n * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n * @example\n *\n * _.isFinite(3);\n * // => true\n *\n * _.isFinite(Number.MIN_VALUE);\n * // => true\n *\n * _.isFinite(Infinity);\n * // => false\n *\n * _.isFinite('3');\n * // => false\n */\n function isFinite(value) {\n return typeof value == 'number' && nativeIsFinite(value);\n }\n\n /**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n }\n\n /**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\n function isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n\n /**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n }\n\n /**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\n function isObjectLike(value) {\n return value != null && typeof value == 'object';\n }\n\n /**\n * Checks if `value` is classified as a `Map` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n * @example\n *\n * _.isMap(new Map);\n * // => true\n *\n * _.isMap(new WeakMap);\n * // => false\n */\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n\n /**\n * Checks if `value` is `NaN`.\n *\n * **Note:** This method is based on\n * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n * `undefined` and other non-number values.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n * @example\n *\n * _.isNaN(NaN);\n * // => true\n *\n * _.isNaN(new Number(NaN));\n * // => true\n *\n * isNaN(undefined);\n * // => true\n *\n * _.isNaN(undefined);\n * // => false\n */\n function isNaN(value) {\n // An `NaN` primitive is the only value that is not equal to itself.\n // Perform the `toStringTag` check first to avoid errors with some\n // ActiveX objects in IE.\n return isNumber(value) && value != +value;\n }\n\n /**\n * Checks if `value` is `null`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n * @example\n *\n * _.isNull(null);\n * // => true\n *\n * _.isNull(void 0);\n * // => false\n */\n function isNull(value) {\n return value === null;\n }\n\n /**\n * Checks if `value` is classified as a `Number` primitive or object.\n *\n * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n * classified as numbers, use the `_.isFinite` method.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n * @example\n *\n * _.isNumber(3);\n * // => true\n *\n * _.isNumber(Number.MIN_VALUE);\n * // => true\n *\n * _.isNumber(Infinity);\n * // => true\n *\n * _.isNumber('3');\n * // => false\n */\n function isNumber(value) {\n return typeof value == 'number' ||\n (isObjectLike(value) && baseGetTag(value) == numberTag);\n }\n\n /**\n * Checks if `value` is a plain object, that is, an object created by the\n * `Object` constructor or one with a `[[Prototype]]` of `null`.\n *\n * @static\n * @memberOf _\n * @since 0.8.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * _.isPlainObject(new Foo);\n * // => false\n *\n * _.isPlainObject([1, 2, 3]);\n * // => false\n *\n * _.isPlainObject({ 'x': 0, 'y': 0 });\n * // => true\n *\n * _.isPlainObject(Object.create(null));\n * // => true\n */\n function isPlainObject(value) {\n if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n return false;\n }\n var proto = getPrototype(value);\n if (proto === null) {\n return true;\n }\n var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n return typeof Ctor == 'function' && Ctor instanceof Ctor &&\n funcToString.call(Ctor) == objectCtorString;\n }\n\n /**\n * Checks if `value` is classified as a `RegExp` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n * @example\n *\n * _.isRegExp(/abc/);\n * // => true\n *\n * _.isRegExp('/abc/');\n * // => false\n */\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n\n /**\n * Checks if `value` is classified as a `Set` object.\n *\n * @static\n * @memberOf _\n * @since 4.3.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n * @example\n *\n * _.isSet(new Set);\n * // => true\n *\n * _.isSet(new WeakSet);\n * // => false\n */\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n\n /**\n * Checks if `value` is classified as a `String` primitive or object.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n * @example\n *\n * _.isString('abc');\n * // => true\n *\n * _.isString(1);\n * // => false\n */\n function isString(value) {\n return typeof value == 'string' ||\n (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);\n }\n\n /**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\n function isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n }\n\n /**\n * Checks if `value` is classified as a typed array.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n * @example\n *\n * _.isTypedArray(new Uint8Array);\n * // => true\n *\n * _.isTypedArray([]);\n * // => false\n */\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n\n /**\n * Checks if `value` is `undefined`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n * @example\n *\n * _.isUndefined(void 0);\n * // => true\n *\n * _.isUndefined(null);\n * // => false\n */\n function isUndefined(value) {\n return value === undefined;\n }\n\n /**\n * Converts `value` to an array.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Array} Returns the converted array.\n * @example\n *\n * _.toArray({ 'a': 1, 'b': 2 });\n * // => [1, 2]\n *\n * _.toArray('abc');\n * // => ['a', 'b', 'c']\n *\n * _.toArray(1);\n * // => []\n *\n * _.toArray(null);\n * // => []\n */\n function toArray(value) {\n if (!value) {\n return [];\n }\n if (isArrayLike(value)) {\n return isString(value) ? stringToArray(value) : copyArray(value);\n }\n if (symIterator && value[symIterator]) {\n return iteratorToArray(value[symIterator]());\n }\n var tag = getTag(value),\n func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);\n\n return func(value);\n }\n\n /**\n * Converts `value` to a finite number.\n *\n * @static\n * @memberOf _\n * @since 4.12.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted number.\n * @example\n *\n * _.toFinite(3.2);\n * // => 3.2\n *\n * _.toFinite(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toFinite(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toFinite('3.2');\n * // => 3.2\n */\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY || value === -INFINITY) {\n var sign = (value < 0 ? -1 : 1);\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n\n /**\n * Converts `value` to an integer.\n *\n * **Note:** This method is loosely based on\n * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {number} Returns the converted integer.\n * @example\n *\n * _.toInteger(3.2);\n * // => 3\n *\n * _.toInteger(Number.MIN_VALUE);\n * // => 0\n *\n * _.toInteger(Infinity);\n * // => 1.7976931348623157e+308\n *\n * _.toInteger('3.2');\n * // => 3\n */\n function toInteger(value) {\n var result = toFinite(value),\n remainder = result % 1;\n\n return result === result ? (remainder ? result - remainder : result) : 0;\n }\n\n /**\n * Converts `value` to a number.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to process.\n * @returns {number} Returns the number.\n * @example\n *\n * _.toNumber(3.2);\n * // => 3.2\n *\n * _.toNumber(Number.MIN_VALUE);\n * // => 5e-324\n *\n * _.toNumber(Infinity);\n * // => Infinity\n *\n * _.toNumber('3.2');\n * // => 3.2\n */\n function toNumber(value) {\n if (typeof value == 'number') {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n value = isObject(other) ? (other + '') : other;\n }\n if (typeof value != 'string') {\n return value === 0 ? value : +value;\n }\n value = value.replace(reTrim, '');\n var isBinary = reIsBinary.test(value);\n return (isBinary || reIsOctal.test(value))\n ? freeParseInt(value.slice(2), isBinary ? 2 : 8)\n : (reIsBadHex.test(value) ? NAN : +value);\n }\n\n /**\n * Converts `value` to a plain object flattening inherited enumerable string\n * keyed properties of `value` to own properties of the plain object.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {Object} Returns the converted plain object.\n * @example\n *\n * function Foo() {\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.assign({ 'a': 1 }, new Foo);\n * // => { 'a': 1, 'b': 2 }\n *\n * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n * // => { 'a': 1, 'b': 2, 'c': 3 }\n */\n function toPlainObject(value) {\n return copyObject(value, keysIn(value));\n }\n\n /**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\n function toString(value) {\n return value == null ? '' : baseToString(value);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * This method is like `_.assign` except that it iterates over own and\n * inherited source properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @alias extend\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.assign\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * }\n *\n * function Bar() {\n * this.c = 3;\n * }\n *\n * Foo.prototype.b = 2;\n * Bar.prototype.d = 4;\n *\n * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n */\n var assignIn = createAssigner(function(object, source) {\n copyObject(source, keysIn(source), object);\n });\n\n /**\n * Creates an object that inherits from the `prototype` object. If a\n * `properties` object is given, its own enumerable string keyed properties\n * are assigned to the created object.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Object\n * @param {Object} prototype The object to inherit from.\n * @param {Object} [properties] The properties to assign to the object.\n * @returns {Object} Returns the new object.\n * @example\n *\n * function Shape() {\n * this.x = 0;\n * this.y = 0;\n * }\n *\n * function Circle() {\n * Shape.call(this);\n * }\n *\n * Circle.prototype = _.create(Shape.prototype, {\n * 'constructor': Circle\n * });\n *\n * var circle = new Circle;\n * circle instanceof Circle;\n * // => true\n *\n * circle instanceof Shape;\n * // => true\n */\n function create(prototype, properties) {\n var result = baseCreate(prototype);\n return properties == null ? result : baseAssign(result, properties);\n }\n\n /**\n * Assigns own and inherited enumerable string keyed properties of source\n * objects to the destination object for all destination properties that\n * resolve to `undefined`. Source objects are applied from left to right.\n * Once a property is set, additional values of the same property are ignored.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaultsDeep\n * @example\n *\n * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n * // => { 'a': 1, 'b': 2 }\n */\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : undefined;\n\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n\n if (value === undefined ||\n (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {\n object[key] = source[key];\n }\n }\n }\n\n return object;\n });\n\n /**\n * This method is like `_.defaults` except that it recursively assigns\n * default properties.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.10.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @see _.defaults\n * @example\n *\n * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n * // => { 'a': { 'b': 2, 'c': 3 } }\n */\n var defaultsDeep = baseRest(function(args) {\n args.push(undefined, customDefaultsMerge);\n return apply(mergeWith, undefined, args);\n });\n\n /**\n * This method is like `_.find` except that it returns the key of the first\n * element `predicate` returns truthy for instead of the element itself.\n *\n * @static\n * @memberOf _\n * @since 1.1.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findKey(users, function(o) { return o.age < 40; });\n * // => 'barney' (iteration order is not guaranteed)\n *\n * // The `_.matches` iteratee shorthand.\n * _.findKey(users, { 'age': 1, 'active': true });\n * // => 'pebbles'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findKey(users, 'active');\n * // => 'barney'\n */\n function findKey(object, predicate) {\n return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn);\n }\n\n /**\n * This method is like `_.findKey` except that it iterates over elements of\n * a collection in the opposite order.\n *\n * @static\n * @memberOf _\n * @since 2.0.0\n * @category Object\n * @param {Object} object The object to inspect.\n * @param {Function} [predicate=_.identity] The function invoked per iteration.\n * @returns {string|undefined} Returns the key of the matched element,\n * else `undefined`.\n * @example\n *\n * var users = {\n * 'barney': { 'age': 36, 'active': true },\n * 'fred': { 'age': 40, 'active': false },\n * 'pebbles': { 'age': 1, 'active': true }\n * };\n *\n * _.findLastKey(users, function(o) { return o.age < 40; });\n * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n *\n * // The `_.matches` iteratee shorthand.\n * _.findLastKey(users, { 'age': 36, 'active': true });\n * // => 'barney'\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.findLastKey(users, ['active', false]);\n * // => 'fred'\n *\n * // The `_.property` iteratee shorthand.\n * _.findLastKey(users, 'active');\n * // => 'pebbles'\n */\n function findLastKey(object, predicate) {\n return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight);\n }\n\n /**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\n function get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n }\n\n /**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n\n /**\n * Checks if `path` is a direct or inherited property of `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.hasIn(object, 'a');\n * // => true\n *\n * _.hasIn(object, 'a.b');\n * // => true\n *\n * _.hasIn(object, ['a', 'b']);\n * // => true\n *\n * _.hasIn(object, 'b');\n * // => false\n */\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n\n /**\n * Creates an object composed of the inverted keys and values of `object`.\n * If `object` contains duplicate values, subsequent values overwrite\n * property assignments of previous values.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Object\n * @param {Object} object The object to invert.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invert(object);\n * // => { '1': 'c', '2': 'b' }\n */\n var invert = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n result[value] = key;\n }, constant(identity));\n\n /**\n * This method is like `_.invert` except that the inverted object is generated\n * from the results of running each element of `object` thru `iteratee`. The\n * corresponding inverted value of each inverted key is an array of keys\n * responsible for generating the inverted value. The iteratee is invoked\n * with one argument: (value).\n *\n * @static\n * @memberOf _\n * @since 4.1.0\n * @category Object\n * @param {Object} object The object to invert.\n * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n * @returns {Object} Returns the new inverted object.\n * @example\n *\n * var object = { 'a': 1, 'b': 2, 'c': 1 };\n *\n * _.invertBy(object);\n * // => { '1': ['a', 'c'], '2': ['b'] }\n *\n * _.invertBy(object, function(value) {\n * return 'group' + value;\n * });\n * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n */\n var invertBy = createInverter(function(result, value, key) {\n if (value != null &&\n typeof value.toString != 'function') {\n value = nativeObjectToString.call(value);\n }\n\n if (hasOwnProperty.call(result, value)) {\n result[value].push(key);\n } else {\n result[value] = [key];\n }\n }, baseIteratee);\n\n /**\n * Creates an array of the own enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects. See the\n * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n * for more details.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keys(new Foo);\n * // => ['a', 'b'] (iteration order is not guaranteed)\n *\n * _.keys('hi');\n * // => ['0', '1']\n */\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n\n /**\n * Creates an array of the own and inherited enumerable property names of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property names.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.keysIn(new Foo);\n * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n */\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n\n /**\n * This method is like `_.assign` except that it recursively merges own and\n * inherited enumerable string keyed properties of source objects into the\n * destination object. Source properties that resolve to `undefined` are\n * skipped if a destination value exists. Array and plain object properties\n * are merged recursively. Other objects and value types are overridden by\n * assignment. Source objects are applied from left to right. Subsequent\n * sources overwrite property assignments of previous sources.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 0.5.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} [sources] The source objects.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = {\n * 'a': [{ 'b': 2 }, { 'd': 4 }]\n * };\n *\n * var other = {\n * 'a': [{ 'c': 3 }, { 'e': 5 }]\n * };\n *\n * _.merge(object, other);\n * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n */\n var merge = createAssigner(function(object, source, srcIndex) {\n baseMerge(object, source, srcIndex);\n });\n\n /**\n * This method is like `_.merge` except that it accepts `customizer` which\n * is invoked to produce the merged values of the destination and source\n * properties. If `customizer` returns `undefined`, merging is handled by the\n * method instead. The `customizer` is invoked with six arguments:\n * (objValue, srcValue, key, object, source, stack).\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The destination object.\n * @param {...Object} sources The source objects.\n * @param {Function} customizer The function to customize assigned values.\n * @returns {Object} Returns `object`.\n * @example\n *\n * function customizer(objValue, srcValue) {\n * if (_.isArray(objValue)) {\n * return objValue.concat(srcValue);\n * }\n * }\n *\n * var object = { 'a': [1], 'b': [2] };\n * var other = { 'a': [3], 'b': [4] };\n *\n * _.mergeWith(object, other, customizer);\n * // => { 'a': [1, 3], 'b': [2, 4] }\n */\n var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {\n baseMerge(object, source, srcIndex, customizer);\n });\n\n /**\n * The opposite of `_.pick`; this method creates an object composed of the\n * own and inherited enumerable property paths of `object` that are not omitted.\n *\n * **Note:** This method is considerably slower than `_.pick`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to omit.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omit(object, ['a', 'c']);\n * // => { 'b': '2' }\n */\n var omit = flatRest(function(object, paths) {\n var result = {};\n if (object == null) {\n return result;\n }\n var isDeep = false;\n paths = arrayMap(paths, function(path) {\n path = castPath(path, object);\n isDeep || (isDeep = path.length > 1);\n return path;\n });\n copyObject(object, getAllKeysIn(object), result);\n if (isDeep) {\n result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n }\n var length = paths.length;\n while (length--) {\n baseUnset(result, paths[length]);\n }\n return result;\n });\n\n /**\n * The opposite of `_.pickBy`; this method creates an object composed of\n * the own and inherited enumerable string keyed properties of `object` that\n * `predicate` doesn't return truthy for. The predicate is invoked with two\n * arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.omitBy(object, _.isNumber);\n * // => { 'b': '2' }\n */\n function omitBy(object, predicate) {\n return pickBy(object, negate(baseIteratee(predicate)));\n }\n\n /**\n * Creates an object composed of the picked `object` properties.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The source object.\n * @param {...(string|string[])} [paths] The property paths to pick.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pick(object, ['a', 'c']);\n * // => { 'a': 1, 'c': 3 }\n */\n var pick = flatRest(function(object, paths) {\n return object == null ? {} : basePick(object, paths);\n });\n\n /**\n * Creates an object composed of the `object` properties `predicate` returns\n * truthy for. The predicate is invoked with two arguments: (value, key).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Object\n * @param {Object} object The source object.\n * @param {Function} [predicate=_.identity] The function invoked per property.\n * @returns {Object} Returns the new object.\n * @example\n *\n * var object = { 'a': 1, 'b': '2', 'c': 3 };\n *\n * _.pickBy(object, _.isNumber);\n * // => { 'a': 1, 'c': 3 }\n */\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n\n /**\n * This method is like `_.get` except that if the resolved value is a\n * function it's invoked with the `this` binding of its parent object and\n * its result is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to resolve.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n *\n * _.result(object, 'a[0].b.c1');\n * // => 3\n *\n * _.result(object, 'a[0].b.c2');\n * // => 4\n *\n * _.result(object, 'a[0].b.c3', 'default');\n * // => 'default'\n *\n * _.result(object, 'a[0].b.c3', _.constant('default'));\n * // => 'default'\n */\n function result(object, path, defaultValue) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length;\n\n // Ensure the loop is entered when path is empty.\n if (!length) {\n length = 1;\n object = undefined;\n }\n while (++index < length) {\n var value = object == null ? undefined : object[toKey(path[index])];\n if (value === undefined) {\n index = length;\n value = defaultValue;\n }\n object = isFunction(value) ? value.call(object) : value;\n }\n return object;\n }\n\n /**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\n function set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n }\n\n /**\n * Creates an array of the own enumerable string keyed property values of `object`.\n *\n * **Note:** Non-object values are coerced to objects.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @returns {Array} Returns the array of property values.\n * @example\n *\n * function Foo() {\n * this.a = 1;\n * this.b = 2;\n * }\n *\n * Foo.prototype.c = 3;\n *\n * _.values(new Foo);\n * // => [1, 2] (iteration order is not guaranteed)\n *\n * _.values('hi');\n * // => ['h', 'i']\n */\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Clamps `number` within the inclusive `lower` and `upper` bounds.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Number\n * @param {number} number The number to clamp.\n * @param {number} [lower] The lower bound.\n * @param {number} upper The upper bound.\n * @returns {number} Returns the clamped number.\n * @example\n *\n * _.clamp(-10, -5, 5);\n * // => -5\n *\n * _.clamp(10, -5, 5);\n * // => 5\n */\n function clamp(number, lower, upper) {\n if (upper === undefined) {\n upper = lower;\n lower = undefined;\n }\n if (upper !== undefined) {\n upper = toNumber(upper);\n upper = upper === upper ? upper : 0;\n }\n if (lower !== undefined) {\n lower = toNumber(lower);\n lower = lower === lower ? lower : 0;\n }\n return baseClamp(toNumber(number), lower, upper);\n }\n\n /**\n * Produces a random number between the inclusive `lower` and `upper` bounds.\n * If only one argument is provided a number between `0` and the given number\n * is returned. If `floating` is `true`, or either `lower` or `upper` are\n * floats, a floating-point number is returned instead of an integer.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @memberOf _\n * @since 0.7.0\n * @category Number\n * @param {number} [lower=0] The lower bound.\n * @param {number} [upper=1] The upper bound.\n * @param {boolean} [floating] Specify returning a floating-point number.\n * @returns {number} Returns the random number.\n * @example\n *\n * _.random(0, 5);\n * // => an integer between 0 and 5\n *\n * _.random(5);\n * // => also an integer between 0 and 5\n *\n * _.random(5, true);\n * // => a floating-point number between 0 and 5\n *\n * _.random(1.2, 5.2);\n * // => a floating-point number between 1.2 and 5.2\n */\n function random(lower, upper, floating) {\n if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n upper = floating = undefined;\n }\n if (floating === undefined) {\n if (typeof upper == 'boolean') {\n floating = upper;\n upper = undefined;\n }\n else if (typeof lower == 'boolean') {\n floating = lower;\n lower = undefined;\n }\n }\n if (lower === undefined && upper === undefined) {\n lower = 0;\n upper = 1;\n }\n else {\n lower = toFinite(lower);\n if (upper === undefined) {\n upper = lower;\n lower = 0;\n } else {\n upper = toFinite(upper);\n }\n }\n if (lower > upper) {\n var temp = lower;\n lower = upper;\n upper = temp;\n }\n if (floating || lower % 1 || upper % 1) {\n var rand = nativeRandom();\n return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);\n }\n return baseRandom(lower, upper);\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n * corresponding HTML entities.\n *\n * **Note:** No other characters are escaped. To escape additional\n * characters use a third-party library like [_he_](https://mths.be/he).\n *\n * Though the \">\" character is escaped for symmetry, characters like\n * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n * unless they're part of a tag or unquoted attribute value. See\n * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n * (under \"semi-related fun fact\") for more details.\n *\n * When working with HTML you should always\n * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n * XSS vectors.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category String\n * @param {string} [string=''] The string to escape.\n * @returns {string} Returns the escaped string.\n * @example\n *\n * _.escape('fred, barney, & pebbles');\n * // => 'fred, barney, &amp; pebbles'\n */\n function escape(string) {\n string = toString(string);\n return (string && reHasUnescapedHtml.test(string))\n ? string.replace(reUnescapedHtml, escapeHtmlChar)\n : string;\n }\n\n /**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\n function trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return string.replace(reTrim, '');\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Creates a function that returns `value`.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {*} value The value to return from the new function.\n * @returns {Function} Returns the new constant function.\n * @example\n *\n * var objects = _.times(2, _.constant({ 'a': 1 }));\n *\n * console.log(objects);\n * // => [{ 'a': 1 }, { 'a': 1 }]\n *\n * console.log(objects[0] === objects[1]);\n * // => true\n */\n function constant(value) {\n return function() {\n return value;\n };\n }\n\n /**\n * This method returns the first argument it receives.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {*} value Any value.\n * @returns {*} Returns `value`.\n * @example\n *\n * var object = { 'a': 1 };\n *\n * console.log(_.identity(object) === object);\n * // => true\n */\n function identity(value) {\n return value;\n }\n\n /**\n * Creates a function that invokes `func` with the arguments of the created\n * function. If `func` is a property name, the created function returns the\n * property value for a given element. If `func` is an array or object, the\n * created function returns `true` for elements that contain the equivalent\n * source properties, otherwise it returns `false`.\n *\n * @static\n * @since 4.0.0\n * @memberOf _\n * @category Util\n * @param {*} [func=_.identity] The value to convert to a callback.\n * @returns {Function} Returns the callback.\n * @example\n *\n * var users = [\n * { 'user': 'barney', 'age': 36, 'active': true },\n * { 'user': 'fred', 'age': 40, 'active': false }\n * ];\n *\n * // The `_.matches` iteratee shorthand.\n * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n *\n * // The `_.matchesProperty` iteratee shorthand.\n * _.filter(users, _.iteratee(['user', 'fred']));\n * // => [{ 'user': 'fred', 'age': 40 }]\n *\n * // The `_.property` iteratee shorthand.\n * _.map(users, _.iteratee('user'));\n * // => ['barney', 'fred']\n *\n * // Create custom iteratee shorthands.\n * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n * return !_.isRegExp(func) ? iteratee(func) : function(string) {\n * return func.test(string);\n * };\n * });\n *\n * _.filter(['abc', 'def'], /ef/);\n * // => ['def']\n */\n function iteratee(func) {\n return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n }\n\n /**\n * Creates a function that performs a partial deep comparison between a given\n * object and `source`, returning `true` if the given object has equivalent\n * property values, else `false`.\n *\n * **Note:** The created function is equivalent to `_.isMatch` with `source`\n * partially applied.\n *\n * Partial comparisons will match empty array and empty object `source`\n * values against any array or object value, respectively. See `_.isEqual`\n * for a list of supported value comparisons.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category Util\n * @param {Object} source The object of property values to match.\n * @returns {Function} Returns the new spec function.\n * @example\n *\n * var objects = [\n * { 'a': 1, 'b': 2, 'c': 3 },\n * { 'a': 4, 'b': 5, 'c': 6 }\n * ];\n *\n * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n */\n function matches(source) {\n return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n }\n\n /**\n * Adds all own enumerable string keyed function properties of a source\n * object to the destination object. If `object` is a function, then methods\n * are added to its prototype as well.\n *\n * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n * avoid conflicts caused by modifying the original.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {Function|Object} [object=lodash] The destination object.\n * @param {Object} source The object of functions to add.\n * @param {Object} [options={}] The options object.\n * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n * @returns {Function|Object} Returns `object`.\n * @example\n *\n * function vowels(string) {\n * return _.filter(string, function(v) {\n * return /[aeiou]/i.test(v);\n * });\n * }\n *\n * _.mixin({ 'vowels': vowels });\n * _.vowels('fred');\n * // => ['e']\n *\n * _('fred').vowels().value();\n * // => ['e']\n *\n * _.mixin({ 'vowels': vowels }, { 'chain': false });\n * _('fred').vowels();\n * // => ['e']\n */\n function mixin(object, source, options) {\n var props = keys(source),\n methodNames = baseFunctions(source, props);\n\n if (options == null &&\n !(isObject(source) && (methodNames.length || !props.length))) {\n options = source;\n source = object;\n object = this;\n methodNames = baseFunctions(source, keys(source));\n }\n var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n isFunc = isFunction(object);\n\n arrayEach(methodNames, function(methodName) {\n var func = source[methodName];\n object[methodName] = func;\n if (isFunc) {\n object.prototype[methodName] = function() {\n var chainAll = this.__chain__;\n if (chain || chainAll) {\n var result = object(this.__wrapped__),\n actions = result.__actions__ = copyArray(this.__actions__);\n\n actions.push({ 'func': func, 'args': arguments, 'thisArg': object });\n result.__chain__ = chainAll;\n return result;\n }\n return func.apply(object, arrayPush([this.value()], arguments));\n };\n }\n });\n\n return object;\n }\n\n /**\n * Reverts the `_` variable to its previous value and returns a reference to\n * the `lodash` function.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @returns {Function} Returns the `lodash` function.\n * @example\n *\n * var lodash = _.noConflict();\n */\n function noConflict() {\n if (root._ === this) {\n root._ = oldDash;\n }\n return this;\n }\n\n /**\n * This method returns `undefined`.\n *\n * @static\n * @memberOf _\n * @since 2.3.0\n * @category Util\n * @example\n *\n * _.times(2, _.noop);\n * // => [undefined, undefined]\n */\n function noop() {\n // No operation performed.\n }\n\n /**\n * Creates a function that returns the value at `path` of a given object.\n *\n * @static\n * @memberOf _\n * @since 2.4.0\n * @category Util\n * @param {Array|string} path The path of the property to get.\n * @returns {Function} Returns the new accessor function.\n * @example\n *\n * var objects = [\n * { 'a': { 'b': 2 } },\n * { 'a': { 'b': 1 } }\n * ];\n *\n * _.map(objects, _.property('a.b'));\n * // => [2, 1]\n *\n * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n * // => [1, 2]\n */\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n\n /**\n * Creates an array of numbers (positive and/or negative) progressing from\n * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n * `start` is specified without an `end` or `step`. If `end` is not specified,\n * it's set to `start` with `start` then set to `0`.\n *\n * **Note:** JavaScript follows the IEEE-754 standard for resolving\n * floating-point values which can produce unexpected results.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {number} [start=0] The start of the range.\n * @param {number} end The end of the range.\n * @param {number} [step=1] The value to increment or decrement by.\n * @returns {Array} Returns the range of numbers.\n * @see _.inRange, _.rangeRight\n * @example\n *\n * _.range(4);\n * // => [0, 1, 2, 3]\n *\n * _.range(-4);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 5);\n * // => [1, 2, 3, 4]\n *\n * _.range(0, 20, 5);\n * // => [0, 5, 10, 15]\n *\n * _.range(0, -4, -1);\n * // => [0, -1, -2, -3]\n *\n * _.range(1, 4, 0);\n * // => [1, 1, 1]\n *\n * _.range(0);\n * // => []\n */\n var range = createRange();\n\n /**\n * This method returns a new empty array.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {Array} Returns the new empty array.\n * @example\n *\n * var arrays = _.times(2, _.stubArray);\n *\n * console.log(arrays);\n * // => [[], []]\n *\n * console.log(arrays[0] === arrays[1]);\n * // => false\n */\n function stubArray() {\n return [];\n }\n\n /**\n * This method returns `false`.\n *\n * @static\n * @memberOf _\n * @since 4.13.0\n * @category Util\n * @returns {boolean} Returns `false`.\n * @example\n *\n * _.times(2, _.stubFalse);\n * // => [false, false]\n */\n function stubFalse() {\n return false;\n }\n\n /**\n * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Util\n * @param {string} [prefix=''] The value to prefix the ID with.\n * @returns {string} Returns the unique ID.\n * @example\n *\n * _.uniqueId('contact_');\n * // => 'contact_104'\n *\n * _.uniqueId();\n * // => '105'\n */\n function uniqueId(prefix) {\n var id = ++idCounter;\n return toString(prefix) + id;\n }\n\n /*------------------------------------------------------------------------*/\n\n /**\n * Computes the maximum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the maximum value.\n * @example\n *\n * _.max([4, 2, 8, 6]);\n * // => 8\n *\n * _.max([]);\n * // => undefined\n */\n function max(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseGt)\n : undefined;\n }\n\n /**\n * Computes the minimum value of `array`. If `array` is empty or falsey,\n * `undefined` is returned.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Math\n * @param {Array} array The array to iterate over.\n * @returns {*} Returns the minimum value.\n * @example\n *\n * _.min([4, 2, 8, 6]);\n * // => 2\n *\n * _.min([]);\n * // => undefined\n */\n function min(array) {\n return (array && array.length)\n ? baseExtremum(array, identity, baseLt)\n : undefined;\n }\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return wrapped values in chain sequences.\n lodash.after = after;\n lodash.assignIn = assignIn;\n lodash.before = before;\n lodash.bind = bind;\n lodash.chain = chain;\n lodash.compact = compact;\n lodash.concat = concat;\n lodash.countBy = countBy;\n lodash.create = create;\n lodash.debounce = debounce;\n lodash.defaults = defaults;\n lodash.defaultsDeep = defaultsDeep;\n lodash.defer = defer;\n lodash.delay = delay;\n lodash.difference = difference;\n lodash.drop = drop;\n lodash.filter = filter;\n lodash.flatten = flatten;\n lodash.flattenDeep = flattenDeep;\n lodash.groupBy = groupBy;\n lodash.initial = initial;\n lodash.intersection = intersection;\n lodash.invert = invert;\n lodash.invertBy = invertBy;\n lodash.iteratee = iteratee;\n lodash.keys = keys;\n lodash.map = map;\n lodash.matches = matches;\n lodash.merge = merge;\n lodash.mixin = mixin;\n lodash.negate = negate;\n lodash.omit = omit;\n lodash.omitBy = omitBy;\n lodash.once = once;\n lodash.pick = pick;\n lodash.range = range;\n lodash.reject = reject;\n lodash.rest = rest;\n lodash.set = set;\n lodash.slice = slice;\n lodash.sortBy = sortBy;\n lodash.take = take;\n lodash.takeRight = takeRight;\n lodash.tap = tap;\n lodash.throttle = throttle;\n lodash.thru = thru;\n lodash.toArray = toArray;\n lodash.union = union;\n lodash.uniq = uniq;\n lodash.uniqBy = uniqBy;\n lodash.unzip = unzip;\n lodash.values = values;\n lodash.without = without;\n lodash.zip = zip;\n lodash.zipObject = zipObject;\n\n // Add aliases.\n lodash.extend = assignIn;\n\n // Add methods to `lodash.prototype`.\n mixin(lodash, lodash);\n\n /*------------------------------------------------------------------------*/\n\n // Add methods that return unwrapped values in chain sequences.\n lodash.clamp = clamp;\n lodash.clone = clone;\n lodash.cloneDeep = cloneDeep;\n lodash.escape = escape;\n lodash.every = every;\n lodash.find = find;\n lodash.findIndex = findIndex;\n lodash.findKey = findKey;\n lodash.findLastIndex = findLastIndex;\n lodash.findLastKey = findLastKey;\n lodash.forEach = forEach;\n lodash.get = get;\n lodash.has = has;\n lodash.head = head;\n lodash.identity = identity;\n lodash.indexOf = indexOf;\n lodash.isArguments = isArguments;\n lodash.isArray = isArray;\n lodash.isArrayLike = isArrayLike;\n lodash.isBoolean = isBoolean;\n lodash.isDate = isDate;\n lodash.isEmpty = isEmpty;\n lodash.isEqual = isEqual;\n lodash.isFinite = isFinite;\n lodash.isFunction = isFunction;\n lodash.isNaN = isNaN;\n lodash.isNull = isNull;\n lodash.isNumber = isNumber;\n lodash.isObject = isObject;\n lodash.isPlainObject = isPlainObject;\n lodash.isRegExp = isRegExp;\n lodash.isString = isString;\n lodash.isUndefined = isUndefined;\n lodash.last = last;\n lodash.max = max;\n lodash.min = min;\n lodash.noConflict = noConflict;\n lodash.noop = noop;\n lodash.random = random;\n lodash.reduce = reduce;\n lodash.result = result;\n lodash.size = size;\n lodash.some = some;\n lodash.trim = trim;\n lodash.uniqueId = uniqueId;\n\n // Add aliases.\n lodash.each = forEach;\n lodash.first = head;\n\n mixin(lodash, (function() {\n var source = {};\n baseForOwn(lodash, function(func, methodName) {\n if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n source[methodName] = func;\n }\n });\n return source;\n }()), { 'chain': false });\n\n /*------------------------------------------------------------------------*/\n\n /**\n * The semantic version number.\n *\n * @static\n * @memberOf _\n * @type {string}\n */\n lodash.VERSION = VERSION;\n\n // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n arrayEach(['drop', 'take'], function(methodName, index) {\n LazyWrapper.prototype[methodName] = function(n) {\n n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n\n var result = (this.__filtered__ && !index)\n ? new LazyWrapper(this)\n : this.clone();\n\n if (result.__filtered__) {\n result.__takeCount__ = nativeMin(n, result.__takeCount__);\n } else {\n result.__views__.push({\n 'size': nativeMin(n, MAX_ARRAY_LENGTH),\n 'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n });\n }\n return result;\n };\n\n LazyWrapper.prototype[methodName + 'Right'] = function(n) {\n return this.reverse()[methodName](n).reverse();\n };\n });\n\n // Add `LazyWrapper` methods that accept an `iteratee` value.\n arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {\n var type = index + 1,\n isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n LazyWrapper.prototype[methodName] = function(iteratee) {\n var result = this.clone();\n result.__iteratees__.push({\n 'iteratee': getIteratee(iteratee, 3),\n 'type': type\n });\n result.__filtered__ = result.__filtered__ || isFilter;\n return result;\n };\n });\n\n // Add `LazyWrapper` methods for `_.head` and `_.last`.\n arrayEach(['head', 'last'], function(methodName, index) {\n var takeName = 'take' + (index ? 'Right' : '');\n\n LazyWrapper.prototype[methodName] = function() {\n return this[takeName](1).value()[0];\n };\n });\n\n // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n arrayEach(['initial', 'tail'], function(methodName, index) {\n var dropName = 'drop' + (index ? '' : 'Right');\n\n LazyWrapper.prototype[methodName] = function() {\n return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n };\n });\n\n LazyWrapper.prototype.compact = function() {\n return this.filter(identity);\n };\n\n LazyWrapper.prototype.find = function(predicate) {\n return this.filter(predicate).head();\n };\n\n LazyWrapper.prototype.findLast = function(predicate) {\n return this.reverse().find(predicate);\n };\n\n LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {\n if (typeof path == 'function') {\n return new LazyWrapper(this);\n }\n return this.map(function(value) {\n return baseInvoke(value, path, args);\n });\n });\n\n LazyWrapper.prototype.reject = function(predicate) {\n return this.filter(negate(getIteratee(predicate)));\n };\n\n LazyWrapper.prototype.slice = function(start, end) {\n start = toInteger(start);\n\n var result = this;\n if (result.__filtered__ && (start > 0 || end < 0)) {\n return new LazyWrapper(result);\n }\n if (start < 0) {\n result = result.takeRight(-start);\n } else if (start) {\n result = result.drop(start);\n }\n if (end !== undefined) {\n end = toInteger(end);\n result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n }\n return result;\n };\n\n LazyWrapper.prototype.takeRightWhile = function(predicate) {\n return this.reverse().takeWhile(predicate).reverse();\n };\n\n LazyWrapper.prototype.toArray = function() {\n return this.take(MAX_ARRAY_LENGTH);\n };\n\n // Add `LazyWrapper` methods to `lodash.prototype`.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n isTaker = /^(?:head|last)$/.test(methodName),\n lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],\n retUnwrapped = isTaker || /^find/.test(methodName);\n\n if (!lodashFunc) {\n return;\n }\n lodash.prototype[methodName] = function() {\n var value = this.__wrapped__,\n args = isTaker ? [1] : arguments,\n isLazy = value instanceof LazyWrapper,\n iteratee = args[0],\n useLazy = isLazy || isArray(value);\n\n var interceptor = function(value) {\n var result = lodashFunc.apply(lodash, arrayPush([value], args));\n return (isTaker && chainAll) ? result[0] : result;\n };\n\n if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n isLazy = useLazy = false;\n }\n var chainAll = this.__chain__,\n isHybrid = !!this.__actions__.length,\n isUnwrapped = retUnwrapped && !chainAll,\n onlyLazy = isLazy && !isHybrid;\n\n if (!retUnwrapped && useLazy) {\n value = onlyLazy ? value : new LazyWrapper(this);\n var result = func.apply(value, args);\n result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });\n return new LodashWrapper(result, chainAll);\n }\n if (isUnwrapped && onlyLazy) {\n return func.apply(this, args);\n }\n result = this.thru(interceptor);\n return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;\n };\n });\n\n // Add `Array` methods to `lodash.prototype`.\n arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {\n var func = arrayProto[methodName],\n chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n lodash.prototype[methodName] = function() {\n var args = arguments;\n if (retUnwrapped && !this.__chain__) {\n var value = this.value();\n return func.apply(isArray(value) ? value : [], args);\n }\n return this[chainName](function(value) {\n return func.apply(isArray(value) ? value : [], args);\n });\n };\n });\n\n // Map minified method names to their real names.\n baseForOwn(LazyWrapper.prototype, function(func, methodName) {\n var lodashFunc = lodash[methodName];\n if (lodashFunc) {\n var key = (lodashFunc.name + ''),\n names = realNames[key] || (realNames[key] = []);\n\n names.push({ 'name': methodName, 'func': lodashFunc });\n }\n });\n\n realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n 'name': 'wrapper',\n 'func': undefined\n }];\n\n // Add methods to `LazyWrapper`.\n LazyWrapper.prototype.clone = lazyClone;\n LazyWrapper.prototype.reverse = lazyReverse;\n LazyWrapper.prototype.value = lazyValue;\n\n // Add lazy aliases.\n lodash.prototype.first = lodash.prototype.head;\n\n if (symIterator) {\n lodash.prototype[symIterator] = wrapperToIterator;\n }\n\n /*--------------------------------------------------------------------------*/\n\n // Some AMD build optimizers, like r.js, check for condition patterns like:\n if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) {\n // Expose Lodash on the global object to prevent errors when Lodash is\n // loaded by a script tag in the presence of an AMD loader.\n // See http://requirejs.org/docs/errors.html#mismatch for more details.\n // Use `_.noConflict` to remove Lodash from the global object.\n root._ = lodash;\n\n // Define as an anonymous module so, through path mapping, it can be\n // referenced as the \"underscore\" module.\n define(function() {\n return lodash;\n });\n }\n // Check for `exports` after `define` in case a build optimizer adds it.\n else if (freeModule) {\n // Export for Node.js.\n (freeModule.exports = lodash)._ = lodash;\n // Export for CommonJS support.\n freeExports._ = lodash;\n }\n else {\n // Export to the global object.\n root._ = lodash;\n }\n}.call(this));\n","/**\n * 基本函数\n * Create By GUY 2014\\11\\17\n *\n */\n_global = undefined;\nif (typeof window !== \"undefined\") {\n _global = window;\n} else if (typeof global !== \"undefined\") {\n _global = global;\n} else if (typeof self !== \"undefined\") {\n _global = self;\n} else {\n _global = this;\n}\nif (!_global.BI) {\n _global.BI = {};\n}\n\n!(function (undefined) {\n var traverse = function (func, context) {\n return function (value, key, obj) {\n return func.call(context, key, value, obj);\n };\n };\n var _apply = function (name) {\n return function () {\n return _[name].apply(_, arguments);\n };\n };\n var _applyFunc = function (name) {\n return function () {\n var args = Array.prototype.slice.call(arguments, 0);\n args[1] = _.isFunction(args[1]) ? traverse(args[1], args[2]) : args[1];\n return _[name].apply(_, args);\n };\n };\n\n // Utility\n _.extend(BI, {\n assert: function (v, is) {\n if (this.isFunction(is)) {\n if (!is(v)) {\n throw new Error(v + \" error\");\n } else {\n return true;\n }\n }\n if (!this.isArray(is)) {\n is = [is];\n }\n if (!this.deepContains(is, v)) {\n throw new Error(v + \" error\");\n }\n return true;\n },\n\n warn: function (message) {\n console.warn(message);\n },\n\n UUID: function () {\n var f = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n var str = \"\";\n for (var i = 0; i < 16; i++) {\n var r = parseInt(f.length * Math.random(), 10);\n str += f[r];\n }\n return str;\n },\n\n isWidget: function (widget) {\n return widget instanceof BI.Widget || (BI.View && widget instanceof BI.View);\n },\n\n createWidgets: function (items, options, context) {\n if (!BI.isArray(items)) {\n throw new Error(\"cannot create Widgets\");\n }\n if (BI.isWidget(options)) {\n context = options;\n options = {};\n } else {\n options || (options = {});\n }\n return BI.map(BI.flatten(items), function (i, item) {\n return BI.createWidget(item, BI.deepClone(options));\n });\n },\n\n createItems: function (data, innerAttr, outerAttr) {\n innerAttr = BI.isArray(innerAttr) ? innerAttr : BI.makeArray(BI.flatten(data).length, innerAttr || {});\n outerAttr = BI.isArray(outerAttr) ? outerAttr : BI.makeArray(BI.flatten(data).length, outerAttr || {});\n return BI.map(data, function (i, item) {\n if (BI.isArray(item)) {\n return BI.createItems(item, innerAttr, outerAttr);\n }\n if (item instanceof BI.Widget) {\n return BI.extend({}, innerAttr.shift(), outerAttr.shift(), {\n type: null,\n el: item\n });\n }\n if (innerAttr[0] instanceof BI.Widget) {\n outerAttr.shift();\n return BI.extend({}, item, {\n el: innerAttr.shift()\n });\n }\n if (item.el instanceof BI.Widget || (BI.View && item.el instanceof BI.View)) {\n innerAttr.shift();\n return BI.extend({}, outerAttr.shift(), { type: null }, item);\n }\n if (item.el) {\n return BI.extend({}, outerAttr.shift(), item, {\n el: BI.extend({}, innerAttr.shift(), item.el)\n });\n }\n return BI.extend({}, outerAttr.shift(), {\n el: BI.extend({}, innerAttr.shift(), item)\n });\n });\n },\n\n // 用容器包装items\n packageItems: function (items, layouts) {\n for (var i = layouts.length - 1; i >= 0; i--) {\n items = BI.map(items, function (k, it) {\n return BI.extend({}, layouts[i], {\n items: [\n BI.extend({}, layouts[i].el, {\n el: it\n })\n ]\n });\n });\n }\n return items;\n },\n\n formatEL: function (obj) {\n if (obj && !obj.type && obj.el) {\n return obj;\n }\n return {\n el: obj\n };\n },\n\n // 剥开EL\n stripEL: function (obj) {\n return obj.type && obj || obj.el || obj;\n },\n\n trans2Element: function (widgets) {\n return BI.map(widgets, function (i, wi) {\n return wi.element;\n });\n }\n });\n\n // 集合相关方法\n _.each([\"where\", \"findWhere\", \"invoke\", \"pluck\", \"shuffle\", \"sample\", \"toArray\", \"size\"], function (name) {\n BI[name] = _apply(name);\n });\n _.each([\"get\", \"set\", \"each\", \"map\", \"reduce\", \"reduceRight\", \"find\", \"filter\", \"reject\", \"every\", \"all\", \"some\", \"any\", \"max\", \"min\",\n \"sortBy\", \"groupBy\", \"indexBy\", \"countBy\", \"partition\", \"clamp\"], function (name) {\n if (name === \"any\") {\n BI[name] = _applyFunc(\"some\");\n } else {\n BI[name] = _applyFunc(name);\n }\n });\n _.extend(BI, {\n // 数数\n count: function (from, to, predicate) {\n var t;\n if (predicate) {\n for (t = from; t < to; t++) {\n predicate(t);\n }\n }\n return to - from;\n },\n\n // 倒数\n inverse: function (from, to, predicate) {\n return BI.count(to, from, predicate);\n },\n\n firstKey: function (obj) {\n var res = undefined;\n BI.any(obj, function (key, value) {\n res = key;\n return true;\n });\n return res;\n },\n\n lastKey: function (obj) {\n var res = undefined;\n BI.each(obj, function (key, value) {\n res = key;\n return true;\n });\n return res;\n },\n\n firstObject: function (obj) {\n var res = undefined;\n BI.any(obj, function (key, value) {\n res = value;\n return true;\n });\n return res;\n },\n\n lastObject: function (obj) {\n var res = undefined;\n BI.each(obj, function (key, value) {\n res = value;\n return true;\n });\n return res;\n },\n\n concat: function (obj1, obj2) {\n if (BI.isKey(obj1)) {\n return BI.map([].slice.apply(arguments), function (idx, v) {\n return v;\n }).join(\"\");\n }\n if (BI.isArray(obj1)) {\n return _.concat.apply([], arguments);\n }\n if (BI.isObject(obj1)) {\n return _.extend.apply({}, arguments);\n }\n },\n\n backEach: function (obj, predicate, context) {\n predicate = BI.iteratee(predicate, context);\n for (var index = obj.length - 1; index >= 0; index--) {\n predicate(index, obj[index], obj);\n }\n return false;\n },\n\n backAny: function (obj, predicate, context) {\n predicate = BI.iteratee(predicate, context);\n for (var index = obj.length - 1; index >= 0; index--) {\n if (predicate(index, obj[index], obj)) {\n return true;\n }\n }\n return false;\n },\n\n backEvery: function (obj, predicate, context) {\n predicate = BI.iteratee(predicate, context);\n for (var index = obj.length - 1; index >= 0; index--) {\n if (!predicate(index, obj[index], obj)) {\n return false;\n }\n }\n return true;\n },\n\n backFindKey: function (obj, predicate, context) {\n predicate = BI.iteratee(predicate, context);\n var keys = _.keys(obj), key;\n for (var i = keys.length - 1; i >= 0; i--) {\n key = keys[i];\n if (predicate(obj[key], key, obj)) {\n return key;\n }\n }\n },\n\n backFind: function (obj, predicate, context) {\n var key;\n if (BI.isArray(obj)) {\n key = BI.findLastIndex(obj, predicate, context);\n } else {\n key = BI.backFindKey(obj, predicate, context);\n }\n if (key !== void 0 && key !== -1) {\n return obj[key];\n }\n },\n\n remove: function (obj, target, context) {\n var isFunction = BI.isFunction(target);\n target = isFunction || BI.isArray(target) ? target : [target];\n var i;\n if (BI.isArray(obj)) {\n for (i = 0; i < obj.length; i++) {\n if ((isFunction && target.apply(context, [i, obj[i]]) === true) || (!isFunction && BI.contains(target, obj[i]))) {\n obj.splice(i--, 1);\n }\n }\n } else {\n BI.each(obj, function (i, v) {\n if ((isFunction && target.apply(context, [i, obj[i]]) === true) || (!isFunction && BI.contains(target, obj[i]))) {\n delete obj[i];\n }\n });\n }\n },\n\n removeAt: function (obj, index) {\n index = BI.isArray(index) ? index : [index];\n var isArray = BI.isArray(obj), i;\n for (i = 0; i < index.length; i++) {\n if (isArray) {\n obj[index[i]] = \"$deleteIndex\";\n } else {\n delete obj[index[i]];\n }\n }\n if (isArray) {\n BI.remove(obj, \"$deleteIndex\");\n }\n },\n\n string2Array: function (str) {\n return str.split(\"&-&\");\n },\n\n array2String: function (array) {\n return array.join(\"&-&\");\n },\n\n abc2Int: function (str) {\n var idx = 0, start = \"A\", str = str.toUpperCase();\n for (var i = 0, len = str.length; i < len; ++i) {\n idx = str.charAt(i).charCodeAt(0) - start.charCodeAt(0) + 26 * idx + 1;\n if (idx > (2147483646 - str.charAt(i).charCodeAt(0) + start.charCodeAt(0)) / 26) {\n return 0;\n }\n }\n return idx;\n },\n\n int2Abc: function (num) {\n var DIGITS = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\", \"I\", \"J\", \"K\", \"L\", \"M\", \"N\", \"O\", \"P\", \"Q\", \"R\", \"S\", \"T\", \"U\", \"V\", \"W\", \"X\", \"Y\", \"Z\"];\n var idx = num, str = \"\";\n if (num === 0) {\n return \"\";\n }\n while (idx !== 0) {\n var t = idx % 26;\n if (t === 0) {\n t = 26;\n }\n str = DIGITS[t - 1] + str;\n idx = (idx - t) / 26;\n }\n return str;\n }\n });\n\n // 数组相关的方法\n _.each([\"first\", \"initial\", \"last\", \"rest\", \"compact\", \"flatten\", \"without\", \"union\", \"intersection\",\n \"difference\", \"zip\", \"unzip\", \"object\", \"indexOf\", \"lastIndexOf\", \"sortedIndex\", \"range\", \"take\", \"takeRight\", \"uniqBy\"], function (name) {\n BI[name] = _apply(name);\n });\n _.each([\"findIndex\", \"findLastIndex\"], function (name) {\n BI[name] = _applyFunc(name);\n });\n _.extend(BI, {\n // 构建一个长度为length的数组\n makeArray: function (length, value) {\n var res = [];\n for (var i = 0; i < length; i++) {\n if (BI.isNull(value)) {\n res.push(i);\n } else {\n res.push(BI.deepClone(value));\n }\n }\n return res;\n },\n\n makeObject: function (array, value) {\n var map = {};\n for (var i = 0; i < array.length; i++) {\n if (BI.isNull(value)) {\n map[array[i]] = array[i];\n } else {\n map[array[i]] = BI.deepClone(value);\n }\n }\n return map;\n },\n\n makeArrayByArray: function (array, value) {\n var res = [];\n if (!array) {\n return res;\n }\n for (var i = 0, len = array.length; i < len; i++) {\n if (BI.isArray(array[i])) {\n res.push(arguments.callee(array[i], value));\n } else {\n res.push(BI.deepClone(value));\n }\n }\n return res;\n },\n\n uniq: function (array, isSorted, iteratee, context) {\n if (array == null) {\n return [];\n }\n if (!_.isBoolean(isSorted)) {\n context = iteratee;\n iteratee = isSorted;\n isSorted = false;\n }\n iteratee && (iteratee = traverse(iteratee, context));\n return _.uniq.call(_, array, isSorted, iteratee, context);\n }\n });\n\n // 对象相关方法\n _.each([\"keys\", \"allKeys\", \"values\", \"pairs\", \"invert\", \"create\", \"functions\", \"extend\", \"extendOwn\",\n \"defaults\", \"clone\", \"property\", \"propertyOf\", \"matcher\", \"isEqual\", \"isMatch\", \"isEmpty\",\n \"isElement\", \"isNumber\", \"isString\", \"isArray\", \"isObject\", \"isPlainObject\", \"isArguments\", \"isFunction\", \"isFinite\",\n \"isBoolean\", \"isDate\", \"isRegExp\", \"isError\", \"isNaN\", \"isUndefined\", \"zipObject\", \"cloneDeep\"], function (name) {\n BI[name] = _apply(name);\n });\n _.each([\"mapObject\", \"findKey\", \"pick\", \"omit\", \"tap\"], function (name) {\n BI[name] = _applyFunc(name);\n });\n _.extend(BI, {\n\n inherit: function (sb, sp, overrides) {\n if (typeof sp === \"object\") {\n overrides = sp;\n sp = sb;\n sb = function () {\n return sp.apply(this, arguments);\n };\n }\n var F = function () {\n }, spp = sp.prototype;\n F.prototype = spp;\n sb.prototype = new F();\n sb.superclass = spp;\n _.extend(sb.prototype, overrides, {\n superclass: sp\n });\n return sb;\n },\n\n init: function () {\n // 先把准备环境准备好\n while (BI.prepares && BI.prepares.length > 0) {\n BI.prepares.shift()();\n }\n BI.initialized = true;\n },\n\n has: function (obj, keys) {\n if (BI.isArray(keys)) {\n if (keys.length === 0) {\n return false;\n }\n return BI.every(keys, function (i, key) {\n return _.has(obj, key);\n });\n }\n return _.has.apply(_, arguments);\n },\n\n freeze: function (value) {\n // 在ES5中,如果这个方法的参数不是一个对象(一个原始值),那么它会导致 TypeError\n // 在ES2015中,非对象参数将被视为要被冻结的普通对象,并被简单地返回\n if (Object.freeze && BI.isObject(value)) {\n return Object.freeze(value);\n }\n return value;\n },\n\n // 数字和字符串可以作为key\n isKey: function (key) {\n return BI.isNumber(key) || (BI.isString(key) && key.length > 0);\n },\n\n // 忽略大小写的等于\n isCapitalEqual: function (a, b) {\n a = BI.isNull(a) ? a : (\"\" + a).toLowerCase();\n b = BI.isNull(b) ? b : (\"\" + b).toLowerCase();\n return BI.isEqual(a, b);\n },\n\n isWidthOrHeight: function (w) {\n if (typeof w === \"number\") {\n return w >= 0;\n } else if (typeof w === \"string\") {\n return /^\\d{1,3}%$/.exec(w) || w == \"auto\" || /^\\d+px$/.exec(w);\n }\n },\n\n isNotNull: function (obj) {\n return !BI.isNull(obj);\n },\n\n isNull: function (obj) {\n return typeof obj === \"undefined\" || obj === null;\n },\n\n isEmptyArray: function (arr) {\n return BI.isArray(arr) && BI.isEmpty(arr);\n },\n\n isNotEmptyArray: function (arr) {\n return BI.isArray(arr) && !BI.isEmpty(arr);\n },\n\n isEmptyObject: function (obj) {\n return BI.isEqual(obj, {});\n },\n\n isNotEmptyObject: function (obj) {\n return BI.isPlainObject(obj) && !BI.isEmptyObject(obj);\n },\n\n isEmptyString: function (obj) {\n return BI.isString(obj) && obj.length === 0;\n },\n\n isNotEmptyString: function (obj) {\n return BI.isString(obj) && !BI.isEmptyString(obj);\n },\n\n isWindow: function (obj) {\n return obj != null && obj == obj.window;\n }\n });\n\n // deep方法\n _.extend(BI, {\n deepClone: _.cloneDeep,\n deepExtend: _.merge,\n\n isDeepMatch: function (object, attrs) {\n var keys = BI.keys(attrs), length = keys.length;\n if (object == null) {\n return !length;\n }\n var obj = Object(object);\n for (var i = 0; i < length; i++) {\n var key = keys[i];\n if (!BI.isEqual(attrs[key], obj[key]) || !(key in obj)) {\n return false;\n }\n }\n return true;\n },\n\n contains: function (obj, target, fromIndex) {\n if (!_.isArrayLike(obj)) obj = _.values(obj);\n return _.indexOf(obj, target, typeof fromIndex === \"number\" && fromIndex) >= 0;\n },\n\n deepContains: function (obj, copy) {\n if (BI.isObject(copy)) {\n return BI.any(obj, function (i, v) {\n if (BI.isEqual(v, copy)) {\n return true;\n }\n });\n }\n return BI.contains(obj, copy);\n },\n\n deepIndexOf: function (obj, target) {\n for (var i = 0; i < obj.length; i++) {\n if (BI.isEqual(target, obj[i])) {\n return i;\n }\n }\n return -1;\n },\n\n deepRemove: function (obj, target) {\n var done = false;\n var i;\n if (BI.isArray(obj)) {\n for (i = 0; i < obj.length; i++) {\n if (BI.isEqual(target, obj[i])) {\n obj.splice(i--, 1);\n done = true;\n }\n }\n } else {\n BI.each(obj, function (i, v) {\n if (BI.isEqual(target, obj[i])) {\n delete obj[i];\n done = true;\n }\n });\n }\n return done;\n },\n\n deepWithout: function (obj, target) {\n if (BI.isArray(obj)) {\n var result = [];\n for (var i = 0; i < obj.length; i++) {\n if (!BI.isEqual(target, obj[i])) {\n result.push(obj[i]);\n }\n }\n return result;\n }\n var result = {};\n BI.each(obj, function (i, v) {\n if (!BI.isEqual(target, obj[i])) {\n result[i] = v;\n }\n });\n return result;\n\n },\n\n deepUnique: function (array) {\n var result = [];\n BI.each(array, function (i, item) {\n if (!BI.deepContains(result, item)) {\n result.push(item);\n }\n });\n return result;\n },\n\n // 比较两个对象得出不一样的key值\n deepDiff: function (object, other) {\n object || (object = {});\n other || (other = {});\n var result = [];\n var used = [];\n for (var b in object) {\n if (this.has(object, b)) {\n if (!this.isEqual(object[b], other[b])) {\n result.push(b);\n }\n used.push(b);\n }\n }\n for (var b in other) {\n if (this.has(other, b) && !BI.contains(used, b)) {\n result.push(b);\n }\n }\n return result;\n }\n });\n\n // 通用方法\n _.each([\"uniqueId\", \"result\", \"chain\", \"iteratee\", \"escape\", \"unescape\", \"before\", \"after\"], function (name) {\n BI[name] = function () {\n return _[name].apply(_, arguments);\n };\n });\n\n // 事件相关方法\n _.each([\"bind\", \"once\", \"partial\", \"debounce\", \"throttle\", \"delay\", \"defer\", \"wrap\"], function (name) {\n BI[name] = function () {\n return _[name].apply(_, arguments);\n };\n });\n\n _.extend(BI, {\n nextTick: (function () {\n var callbacks = [];\n var pending = false;\n var timerFunc = void 0;\n\n function nextTickHandler() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n }\n\n if (typeof Promise !== \"undefined\") {\n var p = Promise.resolve();\n timerFunc = function timerFunc() {\n p.then(nextTickHandler);\n };\n } else if (typeof MutationObserver !== \"undefined\") {\n var counter = 1;\n var observer = new MutationObserver(nextTickHandler);\n var textNode = document.createTextNode(String(counter));\n observer.observe(textNode, {\n characterData: true\n });\n timerFunc = function timerFunc() {\n counter = (counter + 1) % 2;\n textNode.data = String(counter);\n };\n } else if (typeof setImmediate !== \"undefined\") {\n timerFunc = function timerFunc() {\n setImmediate(nextTickHandler);\n };\n } else {\n // Fallback to setTimeout.\n timerFunc = function timerFunc() {\n setTimeout(nextTickHandler, 0);\n };\n }\n\n return function queueNextTick(cb) {\n var _resolve = void 0;\n var args = [].slice.call(arguments, 1);\n callbacks.push(function () {\n if (cb) {\n try {\n cb.apply(null, args);\n } catch (e) {\n console.error(e);\n }\n } else if (_resolve) {\n _resolve.apply(null, args);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n _resolve = resolve;\n });\n }\n };\n })()\n });\n\n // 数字相关方法\n _.each([\"random\"], function (name) {\n BI[name] = _apply(name);\n });\n _.extend(BI, {\n getTime: function () {\n if (_global.performance && _global.performance.now) {\n return _global.performance.now();\n }\n if (_global.performance && _global.performance.webkitNow) {\n return _global.performance.webkitNow();\n }\n if (Date.now) {\n return Date.now();\n }\n return BI.getDate().getTime();\n\n\n },\n\n parseInt: function (number) {\n var radix = 10;\n if (/^0x/g.test(number)) {\n radix = 16;\n }\n try {\n return parseInt(number, radix);\n } catch (e) {\n throw new Error(number + \"parse int error\");\n return NaN;\n }\n },\n\n parseSafeInt: function (value) {\n var MAX_SAFE_INTEGER = 9007199254740991;\n return value\n ? this.clamp(this.parseInt(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)\n : (value === 0 ? value : 0);\n },\n\n parseFloat: function (number) {\n try {\n return parseFloat(number);\n } catch (e) {\n throw new Error(number + \"parse float error\");\n return NaN;\n }\n },\n\n isNaturalNumber: function (number) {\n if (/^\\d+$/.test(number)) {\n return true;\n }\n return false;\n },\n\n isPositiveInteger: function (number) {\n if (/^\\+?[1-9][0-9]*$/.test(number)) {\n return true;\n }\n return false;\n },\n\n isNegativeInteger: function (number) {\n if (/^\\-[1-9][0-9]*$/.test(number)) {\n return true;\n }\n return false;\n },\n\n isInteger: function (number) {\n if (/^\\-?\\d+$/.test(number)) {\n return true;\n }\n return false;\n },\n\n isNumeric: function (number) {\n return !isNaN(parseFloat(number)) && isFinite(number);\n },\n\n isFloat: function (number) {\n if (/^([+-]?)\\d*\\.\\d+$/.test(number)) {\n return true;\n }\n return false;\n },\n\n isOdd: function (number) {\n if (!BI.isInteger(number)) {\n return false;\n }\n return (number & 1) === 1;\n },\n\n isEven: function (number) {\n if (!BI.isInteger(number)) {\n return false;\n }\n return (number & 1) === 0;\n },\n\n sum: function (array, iteratee, context) {\n var sum = 0;\n BI.each(array, function (i, item) {\n if (iteratee) {\n sum += Number(iteratee.apply(context, [i, item]));\n } else {\n sum += Number(item);\n }\n });\n return sum;\n },\n\n average: function (array, iteratee, context) {\n var sum = BI.sum(array, iteratee, context);\n return sum / array.length;\n }\n });\n\n // 字符串相关方法\n _.extend(BI, {\n trim: function () {\n return _.trim.apply(_, arguments);\n },\n\n toUpperCase: function (string) {\n return (string + \"\").toLocaleUpperCase();\n },\n\n toLowerCase: function (string) {\n return (string + \"\").toLocaleLowerCase();\n },\n\n isEndWithBlank: function (string) {\n return /(\\s|\\u00A0)$/.test(string);\n },\n\n isLiteral: function (exp) {\n var literalValueRE = /^\\s?(true|false|-?[\\d\\.]+|'[^']*'|\"[^\"]*\")\\s?$/;\n return literalValueRE.test(exp);\n },\n\n stripQuotes: function (str) {\n var a = str.charCodeAt(0);\n var b = str.charCodeAt(str.length - 1);\n return a === b && (a === 0x22 || a === 0x27)\n ? str.slice(1, -1)\n : str;\n },\n\n // background-color => backgroundColor\n camelize: function (str) {\n return str.replace(/-(.)/g, function (_, character) {\n return character.toUpperCase();\n });\n },\n\n // backgroundColor => background-color\n hyphenate: function (str) {\n return str.replace(/([A-Z])/g, \"-$1\").toLowerCase();\n },\n\n isNotEmptyString: function (str) {\n return BI.isString(str) && !BI.isEmpty(str);\n },\n\n isEmptyString: function (str) {\n return BI.isString(str) && BI.isEmpty(str);\n },\n\n /**\n * 通用加密方法\n */\n encrypt: function (type, text, key) {\n switch (type) {\n case BI.CRYPT_TYPE.AES:\n default:\n return BI.aesEncrypt(text, key);\n }\n },\n\n /**\n * 通用解密方法\n * @param type 解密方式\n * @param text 文本\n * @param key 种子\n * @return {*}\n */\n decrypt: function (type, text, key) {\n switch (type) {\n case BI.CRYPT_TYPE.AES:\n default:\n return BI.aesDecrypt(text, key);\n }\n },\n\n /**\n * 对字符串中的'和\\做编码处理\n * @static\n * @param {String} string 要做编码处理的字符串\n * @return {String} 编码后的字符串\n */\n escape: function (string) {\n return string.replace(/('|\\\\)/g, \"\\\\$1\");\n },\n\n /**\n * 让字符串通过指定字符做补齐的函数\n *\n * var s = BI.leftPad('123', 5, '0');//s的值为:'00123'\n *\n * @static\n * @param {String} val 原始值\n * @param {Number} size 总共需要的位数\n * @param {String} ch 用于补齐的字符\n * @return {String} 补齐后的字符串\n */\n leftPad: function (val, size, ch) {\n var result = String(val);\n if (!ch) {\n ch = \" \";\n }\n while (result.length < size) {\n result = ch + result;\n }\n return result.toString();\n },\n\n /**\n * 对字符串做替换的函数\n *\n * var cls = 'my-class', text = 'Some text';\n * var res = BI.format('<div class=\"{0}\">{1}</div>', cls, text);\n * //res的值为:'<div class=\"my-class\">Some text</div>';\n *\n * @static\n * @param {String} format 要做替换的字符串,替换字符串1,替换字符串2...\n * @return {String} 做了替换后的字符串\n */\n format: function (format) {\n var args = Array.prototype.slice.call(arguments, 1);\n return format.replace(/\\{(\\d+)\\}/g, function (m, i) {\n return args[i];\n });\n }\n });\n\n // 日期相关方法\n _.extend(BI, {\n /**\n * 是否是闰年\n * @param year\n * @returns {boolean}\n */\n isLeapYear: function (year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n },\n\n /**\n * 检测是否在有效期\n *\n * @param YY 年\n * @param MM 月\n * @param DD 日\n * @param minDate '1900-01-01'\n * @param maxDate '2099-12-31'\n * @returns {Array} 若无效返回无效状态\n */\n checkDateVoid: function (YY, MM, DD, minDate, maxDate) {\n var back = [];\n YY = YY | 0;\n MM = MM | 0;\n DD = DD | 0;\n minDate = BI.isString(minDate) ? minDate.match(/\\d+/g) : minDate;\n maxDate = BI.isString(maxDate) ? maxDate.match(/\\d+/g) : maxDate;\n if (YY < minDate[0]) {\n back = [\"y\"];\n } else if (YY > maxDate[0]) {\n back = [\"y\", 1];\n } else if (YY >= minDate[0] && YY <= maxDate[0]) {\n if (YY == minDate[0]) {\n if (MM < minDate[1]) {\n back = [\"m\"];\n } else if (MM == minDate[1]) {\n if (DD < minDate[2]) {\n back = [\"d\"];\n }\n }\n }\n if (YY == maxDate[0]) {\n if (MM > maxDate[1]) {\n back = [\"m\", 1];\n } else if (MM == maxDate[1]) {\n if (DD > maxDate[2]) {\n back = [\"d\", 1];\n }\n }\n }\n }\n return back;\n },\n\n checkDateLegal: function (str) {\n var ar = str.match(/\\d+/g);\n var YY = ar[0] | 0, MM = ar[1] | 0, DD = ar[2] | 0;\n if (ar.length <= 1) {\n return true;\n }\n if (ar.length <= 2) {\n return MM >= 1 && MM <= 12;\n }\n var MD = BI.Date._MD.slice(0);\n MD[1] = BI.isLeapYear(YY) ? 29 : 28;\n return MM >= 1 && MM <= 12 && DD <= MD[MM - 1];\n },\n\n parseDateTime: function (str, fmt) {\n var today = BI.getDate();\n var y = 0;\n var m = 0;\n var d = 1;\n // wei : 对于fmt为‘YYYYMM’或者‘YYYYMMdd’的格式,str的值为类似'201111'的形式,因为年月之间没有分隔符,所以正则表达式分割无效,导致bug7376。\n var a = str.split(/\\W+/);\n if (fmt.toLowerCase() == \"%y%x\" || fmt.toLowerCase() == \"%y%x%d\") {\n var yearlength = 4;\n var otherlength = 2;\n a[0] = str.substring(0, yearlength);\n a[1] = str.substring(yearlength, yearlength + otherlength);\n a[2] = str.substring(yearlength + otherlength, yearlength + otherlength * 2);\n }\n var b = fmt.match(/%./g);\n var i = 0, j = 0;\n var hr = 0;\n var min = 0;\n var sec = 0;\n for (i = 0; i < a.length; ++i) {\n switch (b[i]) {\n case \"%d\":\n case \"%e\":\n d = parseInt(a[i], 10);\n break;\n\n case \"%X\":\n m = parseInt(a[i], 10) - 1;\n break;\n case \"%x\":\n m = parseInt(a[i], 10) - 1;\n break;\n\n case \"%Y\":\n case \"%y\":\n y = parseInt(a[i], 10);\n (y < 100) && (y += (y > 29) ? 1900 : 2000);\n break;\n\n case \"%b\":\n case \"%B\":\n for (j = 0; j < 12; ++j) {\n if (BI.Date._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) {\n m = j;\n break;\n }\n }\n break;\n\n case \"%H\":\n case \"%I\":\n case \"%k\":\n case \"%l\":\n hr = parseInt(a[i], 10);\n break;\n\n case \"%P\":\n case \"%p\":\n if (/pm/i.test(a[i]) && hr < 12) {\n hr += 12;\n } else if (/am/i.test(a[i]) && hr >= 12) {\n hr -= 12;\n }\n break;\n\n case \"%M\":\n min = parseInt(a[i], 10);\n case \"%S\":\n sec = parseInt(a[i], 10);\n break;\n }\n }\n // if (!a[i]) {\n // continue;\n //\t}\n if (isNaN(y)) {\n y = today.getFullYear();\n }\n if (isNaN(m)) {\n m = today.getMonth();\n }\n if (isNaN(d)) {\n d = today.getDate();\n }\n if (isNaN(hr)) {\n hr = today.getHours();\n }\n if (isNaN(min)) {\n min = today.getMinutes();\n }\n if (isNaN(sec)) {\n sec = today.getSeconds();\n }\n if (y != 0) {\n return BI.getDate(y, m, d, hr, min, sec);\n }\n y = 0;\n m = -1;\n d = 0;\n for (i = 0; i < a.length; ++i) {\n if (a[i].search(/[a-zA-Z]+/) != -1) {\n var t = -1;\n for (j = 0; j < 12; ++j) {\n if (BI.Date._MN[j].substr(0, a[i].length).toLowerCase() == a[i].toLowerCase()) {\n t = j;\n break;\n }\n }\n if (t != -1) {\n if (m != -1) {\n d = m + 1;\n }\n m = t;\n }\n } else if (parseInt(a[i], 10) <= 12 && m == -1) {\n m = a[i] - 1;\n } else if (parseInt(a[i], 10) > 31 && y == 0) {\n y = parseInt(a[i], 10);\n (y < 100) && (y += (y > 29) ? 1900 : 2000);\n } else if (d == 0) {\n d = a[i];\n }\n }\n if (y == 0) {\n y = today.getFullYear();\n }\n if (m != -1 && d != 0) {\n return BI.getDate(y, m, d, hr, min, sec);\n }\n return today;\n },\n\n getDate: function () {\n var length = arguments.length;\n var args = arguments;\n var dt;\n switch (length) {\n // new Date()\n case 0:\n dt = new Date();\n break;\n // new Date(long)\n case 1:\n dt = new Date(args[0]);\n break;\n // new Date(year, month)\n case 2:\n dt = new Date(args[0], args[1]);\n break;\n // new Date(year, month, day)\n case 3:\n dt = new Date(args[0], args[1], args[2]);\n break;\n // new Date(year, month, day, hour)\n case 4:\n dt = new Date(args[0], args[1], args[2], args[3]);\n break;\n // new Date(year, month, day, hour, minute)\n case 5:\n dt = new Date(args[0], args[1], args[2], args[3], args[4]);\n break;\n // new Date(year, month, day, hour, minute, second)\n case 6:\n dt = new Date(args[0], args[1], args[2], args[3], args[4], args[5]);\n break;\n // new Date(year, month, day, hour, minute, second, millisecond)\n case 7:\n dt = new Date(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n break;\n default:\n dt = new Date();\n break;\n }\n if (BI.isNotNull(BI.timeZone) && (arguments.length === 0 || (arguments.length === 1 && BI.isNumber(arguments[0])))) {\n var localTime = dt.getTime();\n // BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准\n var localOffset = dt.getTimezoneOffset() * 60000; // 获得当地时间偏移的毫秒数\n var utc = localTime + localOffset; // utc即GMT时间标准时区\n return new Date(utc + BI.timeZone);// + Pool.timeZone.offset);\n }\n return dt;\n\n },\n\n getTime: function () {\n var length = arguments.length;\n var args = arguments;\n var dt;\n switch (length) {\n // new Date()\n case 0:\n dt = new Date();\n break;\n // new Date(long)\n case 1:\n dt = new Date(args[0]);\n break;\n // new Date(year, month)\n case 2:\n dt = new Date(args[0], args[1]);\n break;\n // new Date(year, month, day)\n case 3:\n dt = new Date(args[0], args[1], args[2]);\n break;\n // new Date(year, month, day, hour)\n case 4:\n dt = new Date(args[0], args[1], args[2], args[3]);\n break;\n // new Date(year, month, day, hour, minute)\n case 5:\n dt = new Date(args[0], args[1], args[2], args[3], args[4]);\n break;\n // new Date(year, month, day, hour, minute, second)\n case 6:\n dt = new Date(args[0], args[1], args[2], args[3], args[4], args[5]);\n break;\n // new Date(year, month, day, hour, minute, second, millisecond)\n case 7:\n dt = new Date(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n break;\n default:\n dt = new Date();\n break;\n }\n if (BI.isNotNull(BI.timeZone)) {\n // BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准\n return dt.getTime() - BI.timeZone - new Date().getTimezoneOffset() * 60000;\n }\n return dt.getTime();\n\n }\n });\n})();\n","(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","!(function () {\n function extend () {\n var target = arguments[0] || {}, length = arguments.length, i = 1, options, name, src, copy;\n for (; i < length; i++) {\n // Only deal with non-null/undefined values\n if ((options = arguments[i]) != null) {\n // Extend the base object\n for (name in options) {\n src = target[name];\n copy = options[name];\n\n // Prevent never-ending loop\n if (target === copy) {\n continue;\n }\n\n if (copy !== undefined) {\n target[name] = copy;\n }\n }\n }\n }\n return target;\n }\n\n /**\n * 客户端观察者,主要处理事件的添加、删除、执行等\n * @class BI.OB\n * @abstract\n */\n BI.OB = function (config) {\n this._constructor(config);\n };\n _.extend(BI.OB.prototype, {\n props: {},\n init: null,\n destroyed: null,\n\n _constructor: function (config) {\n this._initProps(config);\n this._init();\n this._initRef();\n },\n\n _defaultConfig: function (config) {\n return {};\n },\n\n _initProps: function (config) {\n var props = this.props;\n if (BI.isFunction(this.props)) {\n props = this.props(config);\n }\n this.options = extend(this._defaultConfig(config), props, config);\n },\n\n _init: function () {\n this._initListeners();\n this.init && this.init();\n },\n\n _initListeners: function () {\n var self = this;\n if (this.options.listeners != null) {\n _.each(this.options.listeners, function (lis) {\n (lis.target ? lis.target : self)[lis.once ? \"once\" : \"on\"]\n (lis.eventName, _.bind(lis.action, self));\n });\n delete this.options.listeners;\n }\n },\n\n // 获得一个当前对象的引用\n _initRef: function () {\n if (this.options.ref) {\n this.options.ref.call(this, this);\n }\n },\n\n //释放当前对象\n _purgeRef: function () {\n if (this.options.ref) {\n this.options.ref.call(null);\n this.options.ref = null;\n }\n },\n\n _getEvents: function () {\n if (!_.isArray(this.events)) {\n this.events = [];\n }\n return this.events;\n },\n\n /**\n * 给观察者绑定一个事件\n * @param {String} eventName 事件的名字\n * @param {Function} fn 事件对应的执行函数\n */\n on: function (eventName, fn) {\n eventName = eventName.toLowerCase();\n var fns = this._getEvents()[eventName];\n if (!_.isArray(fns)) {\n fns = [];\n this._getEvents()[eventName] = fns;\n }\n fns.push(fn);\n },\n\n /**\n * 给观察者绑定一个只执行一次的事件\n * @param {String} eventName 事件的名字\n * @param {Function} fn 事件对应的执行函数\n */\n once: function (eventName, fn) {\n var proxy = function () {\n fn.apply(this, arguments);\n this.un(eventName, proxy);\n };\n this.on(eventName, proxy);\n },\n /**\n * 解除观察者绑定的指定事件\n * @param {String} eventName 要解除绑定事件的名字\n * @param {Function} fn 事件对应的执行函数,该参数是可选的,没有该参数时,将解除绑定所有同名字的事件\n */\n un: function (eventName, fn) {\n eventName = eventName.toLowerCase();\n\n /* alex:如果fn是null,就是把eventName上面所有方法都un掉*/\n if (fn == null) {\n delete this._getEvents()[eventName];\n } else {\n var fns = this._getEvents()[eventName];\n if (_.isArray(fns)) {\n var newFns = [];\n _.each(fns, function (ifn) {\n if (ifn != fn) {\n newFns.push(ifn);\n }\n });\n this._getEvents()[eventName] = newFns;\n }\n }\n },\n /**\n * 清除观察者的所有事件绑定\n */\n purgeListeners: function () {\n /* alex:清空events*/\n this.events = [];\n },\n /**\n * 触发绑定过的事件\n *\n * @param {String} eventName 要触发的事件的名字\n * @returns {Boolean} 如果事件函数返回false,则返回false并中断其他同名事件的执行,否则执行所有的同名事件并返回true\n */\n fireEvent: function () {\n var eventName = arguments[0].toLowerCase();\n var fns = this._getEvents()[eventName];\n if (BI.isArray(fns)) {\n if (BI.isArguments(arguments[1])) {\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].apply(this, arguments[1]) === false) {\n return false;\n }\n }\n } else {\n var args = Array.prototype.slice.call(arguments, 1);\n for (var i = 0; i < fns.length; i++) {\n if (fns[i].apply(this, args) === false) {\n return false;\n }\n }\n }\n }\n return true;\n },\n\n destroy: function () {\n this.destroyed && this.destroyed();\n this._purgeRef();\n this.purgeListeners();\n }\n });\n})();","!(function () {\n /*\n CryptoJS v3.1.2\n code.google.com/p/crypto-js\n (c) 2009-2013 by Jeff Mott. All rights reserved.\n code.google.com/p/crypto-js/wiki/License\n */\n /**\n * CryptoJS core components.\n */\n BI.CRYPT_TYPE = BI.CRYPT_TYPE || {};\n BI.CRYPT_TYPE.AES = \"aes\";\n\n var CryptoJS = CryptoJS || (function (Math, undefined) {\n /**\n * CryptoJS namespace.\n */\n var C = {};\n\n /**\n * Library namespace.\n */\n var C_lib = C.lib = {};\n\n /**\n * Base object for prototypal inheritance.\n */\n var Base = C_lib.Base = (function () {\n function F () {\n }\n\n return {\n /**\n * Creates a new object that inherits from this object.\n *\n * @param {Object} overrides Properties to copy into the new object.\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * field: 'value',\n *\n * method: function () {\n * }\n * });\n */\n extend: function (overrides) {\n // Spawn\n F.prototype = this;\n var subtype = new F();\n\n // Augment\n if (overrides) {\n subtype.mixIn(overrides);\n }\n\n // Create default initializer\n if (!subtype.hasOwnProperty('init')) {\n subtype.init = function () {\n subtype.$super.init.apply(this, arguments);\n };\n }\n\n // Initializer's prototype is the subtype object\n subtype.init.prototype = subtype;\n\n // Reference supertype\n subtype.$super = this;\n\n return subtype;\n },\n\n /**\n * Extends this object and runs the init method.\n * Arguments to create() will be passed to init().\n *\n * @return {Object} The new object.\n *\n * @static\n *\n * @example\n *\n * var instance = MyType.create();\n */\n create: function () {\n var instance = this.extend();\n instance.init.apply(instance, arguments);\n\n return instance;\n },\n\n /**\n * Initializes a newly created object.\n * Override this method to add some logic when your objects are created.\n *\n * @example\n *\n * var MyType = CryptoJS.lib.Base.extend({\n * init: function () {\n * // ...\n * }\n * });\n */\n init: function () {\n },\n\n /**\n * Copies properties into this object.\n *\n * @param {Object} properties The properties to mix in.\n *\n * @example\n *\n * MyType.mixIn({\n * field: 'value'\n * });\n */\n mixIn: function (properties) {\n for (var propertyName in properties) {\n if (properties.hasOwnProperty(propertyName)) {\n this[propertyName] = properties[propertyName];\n }\n }\n\n // IE won't copy toString using the loop above\n if (properties.hasOwnProperty('toString')) {\n this.toString = properties.toString;\n }\n },\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = instance.clone();\n */\n clone: function () {\n return this.init.prototype.extend(this);\n }\n };\n }());\n\n /**\n * An array of 32-bit words.\n *\n * @property {Array} words The array of 32-bit words.\n * @property {number} sigBytes The number of significant bytes in this word array.\n */\n var WordArray = C_lib.WordArray = Base.extend({\n /**\n * Initializes a newly created word array.\n *\n * @param {Array} words (Optional) An array of 32-bit words.\n * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.create();\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n */\n init: function (words, sigBytes) {\n words = this.words = words || [];\n\n if (sigBytes != undefined) {\n this.sigBytes = sigBytes;\n } else {\n this.sigBytes = words.length * 4;\n }\n },\n\n /**\n * Converts this word array to a string.\n *\n * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n *\n * @return {string} The stringified word array.\n *\n * @example\n *\n * var string = wordArray + '';\n * var string = wordArray.toString();\n * var string = wordArray.toString(CryptoJS.enc.Utf8);\n */\n toString: function (encoder) {\n return (encoder || Hex).stringify(this);\n },\n\n /**\n * Concatenates a word array to this word array.\n *\n * @param {WordArray} wordArray The word array to append.\n *\n * @return {WordArray} This word array.\n *\n * @example\n *\n * wordArray1.concat(wordArray2);\n */\n concat: function (wordArray) {\n // Shortcuts\n var thisWords = this.words;\n var thatWords = wordArray.words;\n var thisSigBytes = this.sigBytes;\n var thatSigBytes = wordArray.sigBytes;\n\n // Clamp excess bits\n this.clamp();\n\n // Concat\n if (thisSigBytes % 4) {\n // Copy one byte at a time\n for (var i = 0; i < thatSigBytes; i++) {\n var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n }\n } else if (thatWords.length > 0xffff) {\n // Copy one word at a time\n for (var i = 0; i < thatSigBytes; i += 4) {\n thisWords[(thisSigBytes + i) >>> 2] = thatWords[i >>> 2];\n }\n } else {\n // Copy all words at once\n thisWords.push.apply(thisWords, thatWords);\n }\n this.sigBytes += thatSigBytes;\n\n // Chainable\n return this;\n },\n\n /**\n * Removes insignificant bits.\n *\n * @example\n *\n * wordArray.clamp();\n */\n clamp: function () {\n // Shortcuts\n var words = this.words;\n var sigBytes = this.sigBytes;\n\n // Clamp\n words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n words.length = Math.ceil(sigBytes / 4);\n },\n\n /**\n * Creates a copy of this word array.\n *\n * @return {WordArray} The clone.\n *\n * @example\n *\n * var clone = wordArray.clone();\n */\n clone: function () {\n var clone = Base.clone.call(this);\n clone.words = this.words.slice(0);\n\n return clone;\n },\n\n /**\n * Creates a word array filled with random bytes.\n *\n * @param {number} nBytes The number of random bytes to generate.\n *\n * @return {WordArray} The random word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.lib.WordArray.random(16);\n */\n random: function (nBytes) {\n var words = [];\n for (var i = 0; i < nBytes; i += 4) {\n words.push((Math.random() * 0x100000000) | 0);\n }\n\n return new WordArray.init(words, nBytes);\n }\n });\n\n /**\n * Encoder namespace.\n */\n var C_enc = C.enc = {};\n\n /**\n * Hex encoding strategy.\n */\n var Hex = C_enc.Hex = {\n /**\n * Converts a word array to a hex string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The hex string.\n *\n * @static\n *\n * @example\n *\n * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var hexChars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n hexChars.push((bite >>> 4).toString(16));\n hexChars.push((bite & 0x0f).toString(16));\n }\n\n return hexChars.join('');\n },\n\n /**\n * Converts a hex string to a word array.\n *\n * @param {string} hexStr The hex string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n */\n parse: function (hexStr) {\n // Shortcut\n var hexStrLength = hexStr.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < hexStrLength; i += 2) {\n words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n }\n\n return new WordArray.init(words, hexStrLength / 2);\n }\n };\n\n /**\n * Latin1 encoding strategy.\n */\n var Latin1 = C_enc.Latin1 = {\n /**\n * Converts a word array to a Latin1 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Latin1 string.\n *\n * @static\n *\n * @example\n *\n * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n\n // Convert\n var latin1Chars = [];\n for (var i = 0; i < sigBytes; i++) {\n var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n latin1Chars.push(String.fromCharCode(bite));\n }\n\n return latin1Chars.join('');\n },\n\n /**\n * Converts a Latin1 string to a word array.\n *\n * @param {string} latin1Str The Latin1 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n */\n parse: function (latin1Str) {\n // Shortcut\n var latin1StrLength = latin1Str.length;\n\n // Convert\n var words = [];\n for (var i = 0; i < latin1StrLength; i++) {\n words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n }\n\n return new WordArray.init(words, latin1StrLength);\n }\n };\n\n /**\n * UTF-8 encoding strategy.\n */\n var Utf8 = C_enc.Utf8 = {\n /**\n * Converts a word array to a UTF-8 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The UTF-8 string.\n *\n * @static\n *\n * @example\n *\n * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n */\n stringify: function (wordArray) {\n try {\n return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n } catch (e) {\n throw new Error('Malformed UTF-8 data');\n }\n },\n\n /**\n * Converts a UTF-8 string to a word array.\n *\n * @param {string} utf8Str The UTF-8 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n */\n parse: function (utf8Str) {\n return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n }\n };\n\n /**\n * Abstract buffered block algorithm template.\n *\n * The property blockSize must be implemented in a concrete subtype.\n *\n * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n */\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n /**\n * Resets this block algorithm's data buffer to its initial state.\n *\n * @example\n *\n * bufferedBlockAlgorithm.reset();\n */\n reset: function () {\n // Initial values\n this._data = new WordArray.init();\n this._nDataBytes = 0;\n },\n\n /**\n * Adds new data to this block algorithm's buffer.\n *\n * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n *\n * @example\n *\n * bufferedBlockAlgorithm._append('data');\n * bufferedBlockAlgorithm._append(wordArray);\n */\n _append: function (data) {\n // Convert string to WordArray, else assume WordArray already\n if (typeof data == 'string') {\n data = Utf8.parse(data);\n }\n\n // Append\n this._data.concat(data);\n this._nDataBytes += data.sigBytes;\n },\n\n /**\n * Processes available data blocks.\n *\n * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n *\n * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n *\n * @return {WordArray} The processed data.\n *\n * @example\n *\n * var processedData = bufferedBlockAlgorithm._process();\n * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n */\n _process: function (doFlush) {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n var dataSigBytes = data.sigBytes;\n var blockSize = this.blockSize;\n var blockSizeBytes = blockSize * 4;\n\n // Count blocks ready\n var nBlocksReady = dataSigBytes / blockSizeBytes;\n if (doFlush) {\n // Round up to include partial blocks\n nBlocksReady = Math.ceil(nBlocksReady);\n } else {\n // Round down to include only full blocks,\n // less the number of blocks that must remain in the buffer\n nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n }\n\n // Count words ready\n var nWordsReady = nBlocksReady * blockSize;\n\n // Count bytes ready\n var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n // Process blocks\n if (nWordsReady) {\n for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n // Perform concrete-algorithm logic\n this._doProcessBlock(dataWords, offset);\n }\n\n // Remove processed words\n var processedWords = dataWords.splice(0, nWordsReady);\n data.sigBytes -= nBytesReady;\n }\n\n // Return processed words\n return new WordArray.init(processedWords, nBytesReady);\n },\n\n /**\n * Creates a copy of this object.\n *\n * @return {Object} The clone.\n *\n * @example\n *\n * var clone = bufferedBlockAlgorithm.clone();\n */\n clone: function () {\n var clone = Base.clone.call(this);\n clone._data = this._data.clone();\n\n return clone;\n },\n\n _minBufferSize: 0\n });\n\n /**\n * Abstract hasher template.\n *\n * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n */\n var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n */\n cfg: Base.extend(),\n\n /**\n * Initializes a newly created hasher.\n *\n * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n *\n * @example\n *\n * var hasher = CryptoJS.algo.SHA256.create();\n */\n init: function (cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Set initial values\n this.reset();\n },\n\n /**\n * Resets this hasher to its initial state.\n *\n * @example\n *\n * hasher.reset();\n */\n reset: function () {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-hasher logic\n this._doReset();\n },\n\n /**\n * Updates this hasher with a message.\n *\n * @param {WordArray|string} messageUpdate The message to append.\n *\n * @return {Hasher} This hasher.\n *\n * @example\n *\n * hasher.update('message');\n * hasher.update(wordArray);\n */\n update: function (messageUpdate) {\n // Append\n this._append(messageUpdate);\n\n // Update the hash\n this._process();\n\n // Chainable\n return this;\n },\n\n /**\n * Finalizes the hash computation.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} messageUpdate (Optional) A final message update.\n *\n * @return {WordArray} The hash.\n *\n * @example\n *\n * var hash = hasher.finalize();\n * var hash = hasher.finalize('message');\n * var hash = hasher.finalize(wordArray);\n */\n finalize: function (messageUpdate) {\n // Final message update\n if (messageUpdate) {\n this._append(messageUpdate);\n }\n\n // Perform concrete-hasher logic\n var hash = this._doFinalize();\n\n return hash;\n },\n\n blockSize: 512 / 32,\n\n /**\n * Creates a shortcut function to a hasher's object interface.\n *\n * @param {Hasher} hasher The hasher to create a helper for.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n */\n _createHelper: function (hasher) {\n return function (message, cfg) {\n return new hasher.init(cfg).finalize(message);\n };\n },\n\n /**\n * Creates a shortcut function to the HMAC's object interface.\n *\n * @param {Hasher} hasher The hasher to use in this HMAC helper.\n *\n * @return {Function} The shortcut function.\n *\n * @static\n *\n * @example\n *\n * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n */\n _createHmacHelper: function (hasher) {\n return function (message, key) {\n return new C_algo.HMAC.init(hasher, key).finalize(message);\n };\n }\n });\n\n /**\n * Algorithm namespace.\n */\n var C_algo = C.algo = {};\n\n return C;\n }(Math));\n\n /*\n CryptoJS v3.1.2\n code.google.com/p/crypto-js\n (c) 2009-2013 by Jeff Mott. All rights reserved.\n code.google.com/p/crypto-js/wiki/License\n */\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var C_enc = C.enc;\n\n /**\n * Base64 encoding strategy.\n */\n var Base64 = C_enc.Base64 = {\n /**\n * Converts a word array to a Base64 string.\n *\n * @param {WordArray} wordArray The word array.\n *\n * @return {string} The Base64 string.\n *\n * @static\n *\n * @example\n *\n * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n */\n stringify: function (wordArray) {\n // Shortcuts\n var words = wordArray.words;\n var sigBytes = wordArray.sigBytes;\n var map = this._map;\n\n // Clamp excess bits\n wordArray.clamp();\n\n // Convert\n var base64Chars = [];\n for (var i = 0; i < sigBytes; i += 3) {\n var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n }\n }\n\n // Add padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n while (base64Chars.length % 4) {\n base64Chars.push(paddingChar);\n }\n }\n\n return base64Chars.join('');\n },\n\n /**\n * Converts a Base64 string to a word array.\n *\n * @param {string} base64Str The Base64 string.\n *\n * @return {WordArray} The word array.\n *\n * @static\n *\n * @example\n *\n * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n */\n parse: function (base64Str) {\n // Shortcuts\n var base64StrLength = base64Str.length;\n var map = this._map;\n\n // Ignore padding\n var paddingChar = map.charAt(64);\n if (paddingChar) {\n var paddingIndex = base64Str.indexOf(paddingChar);\n if (paddingIndex != -1) {\n base64StrLength = paddingIndex;\n }\n }\n\n // Convert\n var words = [];\n var nBytes = 0;\n for (var i = 0; i < base64StrLength; i++) {\n if (i % 4) {\n var bits1 = map.indexOf(base64Str.charAt(i - 1)) << ((i % 4) * 2);\n var bits2 = map.indexOf(base64Str.charAt(i)) >>> (6 - (i % 4) * 2);\n words[nBytes >>> 2] |= (bits1 | bits2) << (24 - (nBytes % 4) * 8);\n nBytes++;\n }\n }\n\n return WordArray.create(words, nBytes);\n },\n\n _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n };\n }());\n\n /*\n CryptoJS v3.1.2\n code.google.com/p/crypto-js\n (c) 2009-2013 by Jeff Mott. All rights reserved.\n code.google.com/p/crypto-js/wiki/License\n */\n (function (Math) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var WordArray = C_lib.WordArray;\n var Hasher = C_lib.Hasher;\n var C_algo = C.algo;\n\n // Constants table\n var T = [];\n\n // Compute constants\n (function () {\n for (var i = 0; i < 64; i++) {\n T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n }\n }());\n\n /**\n * MD5 hash algorithm.\n */\n var MD5 = C_algo.MD5 = Hasher.extend({\n _doReset: function () {\n this._hash = new WordArray.init([\n 0x67452301, 0xefcdab89,\n 0x98badcfe, 0x10325476\n ]);\n },\n\n _doProcessBlock: function (M, offset) {\n // Swap endian\n for (var i = 0; i < 16; i++) {\n // Shortcuts\n var offset_i = offset + i;\n var M_offset_i = M[offset_i];\n\n M[offset_i] = (\n (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n );\n }\n\n // Shortcuts\n var H = this._hash.words;\n\n var M_offset_0 = M[offset + 0];\n var M_offset_1 = M[offset + 1];\n var M_offset_2 = M[offset + 2];\n var M_offset_3 = M[offset + 3];\n var M_offset_4 = M[offset + 4];\n var M_offset_5 = M[offset + 5];\n var M_offset_6 = M[offset + 6];\n var M_offset_7 = M[offset + 7];\n var M_offset_8 = M[offset + 8];\n var M_offset_9 = M[offset + 9];\n var M_offset_10 = M[offset + 10];\n var M_offset_11 = M[offset + 11];\n var M_offset_12 = M[offset + 12];\n var M_offset_13 = M[offset + 13];\n var M_offset_14 = M[offset + 14];\n var M_offset_15 = M[offset + 15];\n\n // Working varialbes\n var a = H[0];\n var b = H[1];\n var c = H[2];\n var d = H[3];\n\n // Computation\n a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n a = II(a, b, c, d, M_offset_0, 6, T[48]);\n d = II(d, a, b, c, M_offset_7, 10, T[49]);\n c = II(c, d, a, b, M_offset_14, 15, T[50]);\n b = II(b, c, d, a, M_offset_5, 21, T[51]);\n a = II(a, b, c, d, M_offset_12, 6, T[52]);\n d = II(d, a, b, c, M_offset_3, 10, T[53]);\n c = II(c, d, a, b, M_offset_10, 15, T[54]);\n b = II(b, c, d, a, M_offset_1, 21, T[55]);\n a = II(a, b, c, d, M_offset_8, 6, T[56]);\n d = II(d, a, b, c, M_offset_15, 10, T[57]);\n c = II(c, d, a, b, M_offset_6, 15, T[58]);\n b = II(b, c, d, a, M_offset_13, 21, T[59]);\n a = II(a, b, c, d, M_offset_4, 6, T[60]);\n d = II(d, a, b, c, M_offset_11, 10, T[61]);\n c = II(c, d, a, b, M_offset_2, 15, T[62]);\n b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n // Intermediate hash value\n H[0] = (H[0] + a) | 0;\n H[1] = (H[1] + b) | 0;\n H[2] = (H[2] + c) | 0;\n H[3] = (H[3] + d) | 0;\n },\n\n _doFinalize: function () {\n // Shortcuts\n var data = this._data;\n var dataWords = data.words;\n\n var nBitsTotal = this._nDataBytes * 8;\n var nBitsLeft = data.sigBytes * 8;\n\n // Add padding\n dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n var nBitsTotalL = nBitsTotal;\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n );\n dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n );\n\n data.sigBytes = (dataWords.length + 1) * 4;\n\n // Hash final blocks\n this._process();\n\n // Shortcuts\n var hash = this._hash;\n var H = hash.words;\n\n // Swap endian\n for (var i = 0; i < 4; i++) {\n // Shortcut\n var H_i = H[i];\n\n H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n }\n\n // Return final computed hash\n return hash;\n },\n\n clone: function () {\n var clone = Hasher.clone.call(this);\n clone._hash = this._hash.clone();\n\n return clone;\n }\n });\n\n function FF (a, b, c, d, x, s, t) {\n var n = a + ((b & c) | (~b & d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n }\n\n function GG (a, b, c, d, x, s, t) {\n var n = a + ((b & d) | (c & ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n }\n\n function HH (a, b, c, d, x, s, t) {\n var n = a + (b ^ c ^ d) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n }\n\n function II (a, b, c, d, x, s, t) {\n var n = a + (c ^ (b | ~d)) + x + t;\n return ((n << s) | (n >>> (32 - s))) + b;\n }\n\n /**\n * Shortcut function to the hasher's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n *\n * @return {WordArray} The hash.\n *\n * @static\n *\n * @example\n *\n * var hash = CryptoJS.MD5('message');\n * var hash = CryptoJS.MD5(wordArray);\n */\n C.MD5 = Hasher._createHelper(MD5);\n\n /**\n * Shortcut function to the HMAC's object interface.\n *\n * @param {WordArray|string} message The message to hash.\n * @param {WordArray|string} key The secret key.\n *\n * @return {WordArray} The HMAC.\n *\n * @static\n *\n * @example\n *\n * var hmac = CryptoJS.HmacMD5(message, key);\n */\n C.HmacMD5 = Hasher._createHmacHelper(MD5);\n }(Math));\n\n /*\n CryptoJS v3.1.2\n code.google.com/p/crypto-js\n (c) 2009-2013 by Jeff Mott. All rights reserved.\n code.google.com/p/crypto-js/wiki/License\n */\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var C_algo = C.algo;\n var MD5 = C_algo.MD5;\n\n /**\n * This key derivation function is meant to conform with EVP_BytesToKey.\n * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n */\n var EvpKDF = C_algo.EvpKDF = Base.extend({\n /**\n * Configuration options.\n *\n * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n * @property {number} iterations The number of iterations to perform. Default: 1\n */\n cfg: Base.extend({\n keySize: 128 / 32,\n hasher: MD5,\n iterations: 1\n }),\n\n /**\n * Initializes a newly created key derivation function.\n *\n * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n *\n * @example\n *\n * var kdf = CryptoJS.algo.EvpKDF.create();\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n */\n init: function (cfg) {\n this.cfg = this.cfg.extend(cfg);\n },\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n *\n * @return {WordArray} The derived key.\n *\n * @example\n *\n * var key = kdf.compute(password, salt);\n */\n compute: function (password, salt) {\n // Shortcut\n var cfg = this.cfg;\n\n // Init hasher\n var hasher = cfg.hasher.create();\n\n // Initial values\n var derivedKey = WordArray.create();\n\n // Shortcuts\n var derivedKeyWords = derivedKey.words;\n var keySize = cfg.keySize;\n var iterations = cfg.iterations;\n\n // Generate key\n while (derivedKeyWords.length < keySize) {\n if (block) {\n hasher.update(block);\n }\n var block = hasher.update(password).finalize(salt);\n hasher.reset();\n\n // Iterations\n for (var i = 1; i < iterations; i++) {\n block = hasher.finalize(block);\n hasher.reset();\n }\n\n derivedKey.concat(block);\n }\n derivedKey.sigBytes = keySize * 4;\n\n return derivedKey;\n }\n });\n\n /**\n * Derives a key from a password.\n *\n * @param {WordArray|string} password The password.\n * @param {WordArray|string} salt A salt.\n * @param {Object} cfg (Optional) The configuration options to use for this computation.\n *\n * @return {WordArray} The derived key.\n *\n * @static\n *\n * @example\n *\n * var key = CryptoJS.EvpKDF(password, salt);\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n */\n C.EvpKDF = function (password, salt, cfg) {\n return EvpKDF.create(cfg).compute(password, salt);\n };\n }());\n\n\n /*\n CryptoJS v3.1.2\n code.google.com/p/crypto-js\n (c) 2009-2013 by Jeff Mott. All rights reserved.\n code.google.com/p/crypto-js/wiki/License\n */\n /**\n * Cipher core components.\n */\n CryptoJS.lib.Cipher || (function (undefined) {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var Base = C_lib.Base;\n var WordArray = C_lib.WordArray;\n var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n var C_enc = C.enc;\n var Utf8 = C_enc.Utf8;\n var Base64 = C_enc.Base64;\n var C_algo = C.algo;\n var EvpKDF = C_algo.EvpKDF;\n\n /**\n * Abstract base cipher template.\n *\n * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n */\n var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n /**\n * Configuration options.\n *\n * @property {WordArray} iv The IV to use for this operation.\n */\n cfg: Base.extend(),\n\n /**\n * Creates this cipher in encryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n */\n createEncryptor: function (key, cfg) {\n return this.create(this._ENC_XFORM_MODE, key, cfg);\n },\n\n /**\n * Creates this cipher in decryption mode.\n *\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {Cipher} A cipher instance.\n *\n * @static\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n */\n createDecryptor: function (key, cfg) {\n return this.create(this._DEC_XFORM_MODE, key, cfg);\n },\n\n /**\n * Initializes a newly created cipher.\n *\n * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @example\n *\n * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n */\n init: function (xformMode, key, cfg) {\n // Apply config defaults\n this.cfg = this.cfg.extend(cfg);\n\n // Store transform mode and key\n this._xformMode = xformMode;\n this._key = key;\n\n // Set initial values\n this.reset();\n },\n\n /**\n * Resets this cipher to its initial state.\n *\n * @example\n *\n * cipher.reset();\n */\n reset: function () {\n // Reset data buffer\n BufferedBlockAlgorithm.reset.call(this);\n\n // Perform concrete-cipher logic\n this._doReset();\n },\n\n /**\n * Adds data to be encrypted or decrypted.\n *\n * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n *\n * @return {WordArray} The data after processing.\n *\n * @example\n *\n * var encrypted = cipher.process('data');\n * var encrypted = cipher.process(wordArray);\n */\n process: function (dataUpdate) {\n // Append\n this._append(dataUpdate);\n\n // Process available blocks\n return this._process();\n },\n\n /**\n * Finalizes the encryption or decryption process.\n * Note that the finalize operation is effectively a destructive, read-once operation.\n *\n * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n *\n * @return {WordArray} The data after final processing.\n *\n * @example\n *\n * var encrypted = cipher.finalize();\n * var encrypted = cipher.finalize('data');\n * var encrypted = cipher.finalize(wordArray);\n */\n finalize: function (dataUpdate) {\n // Final data update\n if (dataUpdate) {\n this._append(dataUpdate);\n }\n\n // Perform concrete-cipher logic\n var finalProcessedData = this._doFinalize();\n\n return finalProcessedData;\n },\n\n keySize: 128 / 32,\n\n ivSize: 128 / 32,\n\n _ENC_XFORM_MODE: 1,\n\n _DEC_XFORM_MODE: 2,\n\n /**\n * Creates shortcut functions to a cipher's object interface.\n *\n * @param {Cipher} cipher The cipher to create a helper for.\n *\n * @return {Object} An object with encrypt and decrypt shortcut functions.\n *\n * @static\n *\n * @example\n *\n * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n */\n _createHelper: (function () {\n function selectCipherStrategy (key) {\n if (typeof key == 'string') {\n return PasswordBasedCipher;\n } else {\n return SerializableCipher;\n }\n }\n\n return function (cipher) {\n return {\n encrypt: function (message, key, cfg) {\n return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n },\n\n decrypt: function (ciphertext, key, cfg) {\n return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n }\n };\n };\n }())\n });\n\n /**\n * Abstract base stream cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n */\n var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n _doFinalize: function () {\n // Process partial blocks\n var finalProcessedBlocks = this._process(!!'flush');\n\n return finalProcessedBlocks;\n },\n\n blockSize: 1\n });\n\n /**\n * Mode namespace.\n */\n var C_mode = C.mode = {};\n\n /**\n * Abstract base block cipher mode template.\n */\n var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n /**\n * Creates this mode for encryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n */\n createEncryptor: function (cipher, iv) {\n return this.Encryptor.create(cipher, iv);\n },\n\n /**\n * Creates this mode for decryption.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @static\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n */\n createDecryptor: function (cipher, iv) {\n return this.Decryptor.create(cipher, iv);\n },\n\n /**\n * Initializes a newly created mode.\n *\n * @param {Cipher} cipher A block cipher instance.\n * @param {Array} iv The IV words.\n *\n * @example\n *\n * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n */\n init: function (cipher, iv) {\n this._cipher = cipher;\n this._iv = iv;\n }\n });\n\n /**\n * Cipher Block Chaining mode.\n */\n var CBC = C_mode.CBC = (function () {\n /**\n * Abstract base CBC mode.\n */\n var CBC = BlockCipherMode.extend();\n\n /**\n * CBC encryptor.\n */\n CBC.Encryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // XOR and encrypt\n xorBlock.call(this, words, offset, blockSize);\n cipher.encryptBlock(words, offset);\n\n // Remember this block to use with next block\n this._prevBlock = words.slice(offset, offset + blockSize);\n }\n });\n\n /**\n * CBC decryptor.\n */\n CBC.Decryptor = CBC.extend({\n /**\n * Processes the data block at offset.\n *\n * @param {Array} words The data words to operate on.\n * @param {number} offset The offset where the block starts.\n *\n * @example\n *\n * mode.processBlock(data.words, offset);\n */\n processBlock: function (words, offset) {\n // Shortcuts\n var cipher = this._cipher;\n var blockSize = cipher.blockSize;\n\n // Remember this block to use with next block\n var thisBlock = words.slice(offset, offset + blockSize);\n\n // Decrypt and XOR\n cipher.decryptBlock(words, offset);\n xorBlock.call(this, words, offset, blockSize);\n\n // This block becomes the previous block\n this._prevBlock = thisBlock;\n }\n });\n\n function xorBlock (words, offset, blockSize) {\n // Shortcut\n var iv = this._iv;\n\n // Choose mixing block\n if (iv) {\n var block = iv;\n\n // Remove IV for subsequent blocks\n this._iv = undefined;\n } else {\n var block = this._prevBlock;\n }\n\n // XOR blocks\n for (var i = 0; i < blockSize; i++) {\n words[offset + i] ^= block[i];\n }\n }\n\n return CBC;\n }());\n\n /**\n * Padding namespace.\n */\n var C_pad = C.pad = {};\n\n /**\n * PKCS #5/7 padding strategy.\n */\n var Pkcs7 = C_pad.Pkcs7 = {\n /**\n * Pads data using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to pad.\n * @param {number} blockSize The multiple that the data should be padded to.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n */\n pad: function (data, blockSize) {\n // Shortcut\n var blockSizeBytes = blockSize * 4;\n\n // Count padding bytes\n var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n // Create padding word\n var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n // Create padding\n var paddingWords = [];\n for (var i = 0; i < nPaddingBytes; i += 4) {\n paddingWords.push(paddingWord);\n }\n var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n // Add padding\n data.concat(padding);\n },\n\n /**\n * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n *\n * @param {WordArray} data The data to unpad.\n *\n * @static\n *\n * @example\n *\n * CryptoJS.pad.Pkcs7.unpad(wordArray);\n */\n unpad: function (data) {\n // Get number of padding bytes from last byte\n var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n // Remove padding\n data.sigBytes -= nPaddingBytes;\n }\n };\n\n /**\n * Abstract base block cipher template.\n *\n * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n */\n var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n /**\n * Configuration options.\n *\n * @property {Mode} mode The block mode to use. Default: CBC\n * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n */\n cfg: Cipher.cfg.extend({\n mode: CBC,\n padding: Pkcs7\n }),\n\n reset: function () {\n // Reset cipher\n Cipher.reset.call(this);\n\n // Shortcuts\n var cfg = this.cfg;\n var iv = cfg.iv;\n var mode = cfg.mode;\n\n // Reset block mode\n if (this._xformMode == this._ENC_XFORM_MODE) {\n var modeCreator = mode.createEncryptor;\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n var modeCreator = mode.createDecryptor;\n\n // Keep at least one block in the buffer for unpadding\n this._minBufferSize = 1;\n }\n this._mode = modeCreator.call(mode, this, iv && iv.words);\n },\n\n _doProcessBlock: function (words, offset) {\n this._mode.processBlock(words, offset);\n },\n\n _doFinalize: function () {\n // Shortcut\n var padding = this.cfg.padding;\n\n // Finalize\n if (this._xformMode == this._ENC_XFORM_MODE) {\n // Pad data\n padding.pad(this._data, this.blockSize);\n\n // Process final blocks\n var finalProcessedBlocks = this._process(!!'flush');\n } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n // Process final blocks\n var finalProcessedBlocks = this._process(!!'flush');\n\n // Unpad data\n padding.unpad(finalProcessedBlocks);\n }\n\n return finalProcessedBlocks;\n },\n\n blockSize: 128 / 32\n });\n\n /**\n * A collection of cipher parameters.\n *\n * @property {WordArray} ciphertext The raw ciphertext.\n * @property {WordArray} key The key to this ciphertext.\n * @property {WordArray} iv The IV used in the ciphering operation.\n * @property {WordArray} salt The salt used with a key derivation function.\n * @property {Cipher} algorithm The cipher algorithm.\n * @property {Mode} mode The block mode used in the ciphering operation.\n * @property {Padding} padding The padding scheme used in the ciphering operation.\n * @property {number} blockSize The block size of the cipher.\n * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n */\n var CipherParams = C_lib.CipherParams = Base.extend({\n /**\n * Initializes a newly created cipher params object.\n *\n * @param {Object} cipherParams An object with any of the possible cipher parameters.\n *\n * @example\n *\n * var cipherParams = CryptoJS.lib.CipherParams.create({\n * ciphertext: ciphertextWordArray,\n * key: keyWordArray,\n * iv: ivWordArray,\n * salt: saltWordArray,\n * algorithm: CryptoJS.algo.AES,\n * mode: CryptoJS.mode.CBC,\n * padding: CryptoJS.pad.PKCS7,\n * blockSize: 4,\n * formatter: CryptoJS.format.OpenSSL\n * });\n */\n init: function (cipherParams) {\n this.mixIn(cipherParams);\n },\n\n /**\n * Converts this cipher params object to a string.\n *\n * @param {Format} formatter (Optional) The formatting strategy to use.\n *\n * @return {string} The stringified cipher params.\n *\n * @throws Error If neither the formatter nor the default formatter is set.\n *\n * @example\n *\n * var string = cipherParams + '';\n * var string = cipherParams.toString();\n * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n */\n toString: function (formatter) {\n return (formatter || this.formatter).stringify(this);\n }\n });\n\n /**\n * Format namespace.\n */\n var C_format = C.format = {};\n\n /**\n * OpenSSL formatting strategy.\n */\n var OpenSSLFormatter = C_format.OpenSSL = {\n /**\n * Converts a cipher params object to an OpenSSL-compatible string.\n *\n * @param {CipherParams} cipherParams The cipher params object.\n *\n * @return {string} The OpenSSL-compatible string.\n *\n * @static\n *\n * @example\n *\n * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n */\n stringify: function (cipherParams) {\n // Shortcuts\n var ciphertext = cipherParams.ciphertext;\n var salt = cipherParams.salt;\n\n // Format\n if (salt) {\n var wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n } else {\n var wordArray = ciphertext;\n }\n\n return wordArray.toString(Base64);\n },\n\n /**\n * Converts an OpenSSL-compatible string to a cipher params object.\n *\n * @param {string} openSSLStr The OpenSSL-compatible string.\n *\n * @return {CipherParams} The cipher params object.\n *\n * @static\n *\n * @example\n *\n * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n */\n parse: function (openSSLStr) {\n // Parse base64\n var ciphertext = Base64.parse(openSSLStr);\n\n // Shortcut\n var ciphertextWords = ciphertext.words;\n\n // Test for salt\n if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n // Extract salt\n var salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n // Remove salt from ciphertext\n ciphertextWords.splice(0, 4);\n ciphertext.sigBytes -= 16;\n }\n\n return CipherParams.create({ciphertext: ciphertext, salt: salt});\n }\n };\n\n /**\n * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n */\n var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n /**\n * Configuration options.\n *\n * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n */\n cfg: Base.extend({\n format: OpenSSLFormatter\n }),\n\n /**\n * Encrypts a message.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n encrypt: function (cipher, message, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Encrypt\n var encryptor = cipher.createEncryptor(key, cfg);\n var ciphertext = encryptor.finalize(message);\n\n // Shortcut\n var cipherCfg = encryptor.cfg;\n\n // Create and return serializable cipher params\n return CipherParams.create({\n ciphertext: ciphertext,\n key: key,\n iv: cipherCfg.iv,\n algorithm: cipher,\n mode: cipherCfg.mode,\n padding: cipherCfg.padding,\n blockSize: cipher.blockSize,\n formatter: cfg.format\n });\n },\n\n /**\n * Decrypts serialized ciphertext.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {WordArray} key The key.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n */\n decrypt: function (cipher, ciphertext, key, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Decrypt\n var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n return plaintext;\n },\n\n /**\n * Converts serialized ciphertext to CipherParams,\n * else assumed CipherParams already and returns ciphertext unchanged.\n *\n * @param {CipherParams|string} ciphertext The ciphertext.\n * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n *\n * @return {CipherParams} The unserialized ciphertext.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n */\n _parse: function (ciphertext, format) {\n if (typeof ciphertext == 'string') {\n return format.parse(ciphertext, this);\n } else {\n return ciphertext;\n }\n }\n });\n\n /**\n * Key derivation function namespace.\n */\n var C_kdf = C.kdf = {};\n\n /**\n * OpenSSL key derivation function.\n */\n var OpenSSLKdf = C_kdf.OpenSSL = {\n /**\n * Derives a key and IV from a password.\n *\n * @param {string} password The password to derive from.\n * @param {number} keySize The size in words of the key to generate.\n * @param {number} ivSize The size in words of the IV to generate.\n * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n *\n * @return {CipherParams} A cipher params object with the key, IV, and salt.\n *\n * @static\n *\n * @example\n *\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n */\n execute: function (password, keySize, ivSize, salt) {\n // Generate random salt\n if (!salt) {\n salt = WordArray.random(64 / 8);\n }\n\n // Derive key and IV\n var key = EvpKDF.create({keySize: keySize + ivSize}).compute(password, salt);\n\n // Separate key and IV\n var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n key.sigBytes = keySize * 4;\n\n // Return params\n return CipherParams.create({key: key, iv: iv, salt: salt});\n }\n };\n\n /**\n * A serializable cipher wrapper that derives the key from a password,\n * and returns ciphertext as a serializable cipher params object.\n */\n var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n /**\n * Configuration options.\n *\n * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n */\n cfg: SerializableCipher.cfg.extend({\n kdf: OpenSSLKdf\n }),\n\n /**\n * Encrypts a message using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {WordArray|string} message The message to encrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {CipherParams} A cipher params object.\n *\n * @static\n *\n * @example\n *\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n */\n encrypt: function (cipher, message, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Encrypt\n var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n // Mix in derived params\n ciphertext.mixIn(derivedParams);\n\n return ciphertext;\n },\n\n /**\n * Decrypts serialized ciphertext using a password.\n *\n * @param {Cipher} cipher The cipher algorithm to use.\n * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n * @param {string} password The password.\n * @param {Object} cfg (Optional) The configuration options to use for this operation.\n *\n * @return {WordArray} The plaintext.\n *\n * @static\n *\n * @example\n *\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n */\n decrypt: function (cipher, ciphertext, password, cfg) {\n // Apply config defaults\n cfg = this.cfg.extend(cfg);\n\n // Convert string to CipherParams\n ciphertext = this._parse(ciphertext, cfg.format);\n\n // Derive key and other params\n var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt);\n\n // Add IV to config\n cfg.iv = derivedParams.iv;\n\n // Decrypt\n var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n return plaintext;\n }\n });\n }());\n\n /*\n CryptoJS v3.1.2\n code.google.com/p/crypto-js\n (c) 2009-2013 by Jeff Mott. All rights reserved.\n code.google.com/p/crypto-js/wiki/License\n */\n /**\n * Electronic Codebook block mode.\n */\n CryptoJS.mode.ECB = (function () {\n var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n ECB.Encryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.encryptBlock(words, offset);\n }\n });\n\n ECB.Decryptor = ECB.extend({\n processBlock: function (words, offset) {\n this._cipher.decryptBlock(words, offset);\n }\n });\n\n return ECB;\n }());\n\n\n /*\n CryptoJS v3.1.2\n code.google.com/p/crypto-js\n (c) 2009-2013 by Jeff Mott. All rights reserved.\n code.google.com/p/crypto-js/wiki/License\n */\n (function () {\n // Shortcuts\n var C = CryptoJS;\n var C_lib = C.lib;\n var BlockCipher = C_lib.BlockCipher;\n var C_algo = C.algo;\n\n // Lookup tables\n var SBOX = [];\n var INV_SBOX = [];\n var SUB_MIX_0 = [];\n var SUB_MIX_1 = [];\n var SUB_MIX_2 = [];\n var SUB_MIX_3 = [];\n var INV_SUB_MIX_0 = [];\n var INV_SUB_MIX_1 = [];\n var INV_SUB_MIX_2 = [];\n var INV_SUB_MIX_3 = [];\n\n // Compute lookup tables\n (function () {\n // Compute double table\n var d = [];\n for (var i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = (i << 1) ^ 0x11b;\n }\n }\n\n // Walk GF(2^8)\n var x = 0;\n var xi = 0;\n for (var i = 0; i < 256; i++) {\n // Compute sbox\n var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n SBOX[x] = sx;\n INV_SBOX[sx] = x;\n\n // Compute multiplication\n var x2 = d[x];\n var x4 = d[x2];\n var x8 = d[x4];\n\n // Compute sub bytes, mix columns tables\n var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n SUB_MIX_3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n INV_SUB_MIX_3[sx] = t;\n\n // Compute next counter\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n }());\n\n // Precomputed Rcon lookup\n var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n /**\n * AES block cipher algorithm.\n */\n var AES = C_algo.AES = BlockCipher.extend({\n _doReset: function () {\n // Shortcuts\n var key = this._key;\n var keyWords = key.words;\n var keySize = key.sigBytes / 4;\n\n // Compute number of rounds\n var nRounds = this._nRounds = keySize + 6;\n\n // Compute number of key schedule rows\n var ksRows = (nRounds + 1) * 4;\n\n // Compute key schedule\n var keySchedule = this._keySchedule = [];\n for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n keySchedule[ksRow] = keyWords[ksRow];\n } else {\n var t = keySchedule[ksRow - 1];\n\n if (!(ksRow % keySize)) {\n // Rot word\n t = (t << 8) | (t >>> 24);\n\n // Sub word\n t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n // Mix Rcon\n t ^= RCON[(ksRow / keySize) | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize == 4) {\n // Sub word\n t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n }\n\n keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n }\n }\n\n // Compute inv key schedule\n var invKeySchedule = this._invKeySchedule = [];\n for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n var ksRow = ksRows - invKsRow;\n\n if (invKsRow % 4) {\n var t = keySchedule[ksRow];\n } else {\n var t = keySchedule[ksRow - 4];\n }\n\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n }\n }\n },\n\n encryptBlock: function (M, offset) {\n this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n },\n\n decryptBlock: function (M, offset) {\n // Swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n\n this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n // Inv swap 2nd and 4th rows\n var t = M[offset + 1];\n M[offset + 1] = M[offset + 3];\n M[offset + 3] = t;\n },\n\n _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n // Shortcut\n var nRounds = this._nRounds;\n\n // Get input, add round key\n var s0 = M[offset] ^ keySchedule[0];\n var s1 = M[offset + 1] ^ keySchedule[1];\n var s2 = M[offset + 2] ^ keySchedule[2];\n var s3 = M[offset + 3] ^ keySchedule[3];\n\n // Key schedule row counter\n var ksRow = 4;\n\n // Rounds\n for (var round = 1; round < nRounds; round++) {\n // Shift rows, sub bytes, mix columns, add round key\n var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n }\n\n // Shift rows, sub bytes, add round key\n var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n // Set output\n M[offset] = t0;\n M[offset + 1] = t1;\n M[offset + 2] = t2;\n M[offset + 3] = t3;\n },\n\n keySize: 256 / 32\n });\n\n /**\n * Shortcut functions to the cipher's object interface.\n *\n * @example\n *\n * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n */\n C.AES = BlockCipher._createHelper(AES);\n }());\n\n\n _.extend(BI, {\n /**\n * aes加密方法\n * aes-128-ecb\n *\n * @example\n *\n * var ciphertext = BI.aesEncrypt(text, key);\n */\n aesEncrypt: function (text, key) {\n key = CryptoJS.enc.Utf8.parse(key);\n var cipher = CryptoJS.AES.encrypt(text, key, {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n var base64Cipher = cipher.ciphertext.toString(CryptoJS.enc.Base64);\n return base64Cipher;\n },\n\n /**\n * aes解密方法\n * @param {String} text \n * @param {String} key \n */\n aesDecrypt: function (text, key) {\n key = CryptoJS.enc.Utf8.parse(key);\n var decipher = CryptoJS.AES.decrypt(text, key, {\n mode: CryptoJS.mode.ECB,\n padding: CryptoJS.pad.Pkcs7\n });\n\n return CryptoJS.enc.Utf8.stringify(decipher);\n }\n });\n}());","!(function () {\n function aspect (type) {\n return function (target, methodName, advice) {\n var exist = target[methodName],\n dispatcher;\n\n if (!exist || exist.target != target) {\n dispatcher = target[methodName] = function () {\n // before methods\n var beforeArr = dispatcher.before;\n var args = arguments, next;\n for (var l = beforeArr.length; l--;) {\n next = beforeArr[l].advice.apply(this, args);\n if (next === false) {\n return false;\n }\n args = next || args;\n }\n // target method\n var rs = dispatcher.method.apply(this, args);\n // after methods\n var afterArr = dispatcher.after;\n for (var i = 0, ii = afterArr.length; i < ii; i++) {\n next = afterArr[i].advice.call(this, rs, args);\n if (rs === false) {\n return false;\n }\n args = next || args;\n }\n return rs;\n };\n\n dispatcher.before = [];\n dispatcher.after = [];\n\n if (exist) {\n dispatcher.method = exist;\n }\n dispatcher.target = target;\n }\n\n var aspectArr = (dispatcher || exist)[type];\n var obj = {\n advice: advice,\n _index: aspectArr.length,\n remove: function () {\n aspectArr.splice(this._index, 1);\n }\n };\n aspectArr.push(obj);\n\n return obj;\n };\n }\n\n BI.aspect = {\n before: aspect(\"before\"),\n after: aspect(\"after\")\n };\n\n return BI.aspect;\n\n})();","\n!(function () {\n\n var _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\n\n // private method for UTF-8 encoding\n var _utf8_encode = function (string) {\n string = string.replace(/\\r\\n/g, \"\\n\");\n var utftext = \"\";\n\n for (var n = 0; n < string.length; n++) {\n\n var c = string.charCodeAt(n);\n\n if (c < 128) {\n utftext += String.fromCharCode(c);\n } else if ((c > 127) && (c < 2048)) {\n utftext += String.fromCharCode((c >> 6) | 192);\n utftext += String.fromCharCode((c & 63) | 128);\n } else {\n utftext += String.fromCharCode((c >> 12) | 224);\n utftext += String.fromCharCode(((c >> 6) & 63) | 128);\n utftext += String.fromCharCode((c & 63) | 128);\n }\n\n }\n\n return utftext;\n };\n\n // private method for UTF-8 decoding\n var _utf8_decode = function (utftext) {\n var string = \"\";\n var i = 0;\n var c = 0, c3 = 0, c2 = 0;\n\n while (i < utftext.length) {\n\n c = utftext.charCodeAt(i);\n\n if (c < 128) {\n string += String.fromCharCode(c);\n i++;\n } else if ((c > 191) && (c < 224)) {\n c2 = utftext.charCodeAt(i + 1);\n string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));\n i += 2;\n } else {\n c2 = utftext.charCodeAt(i + 1);\n c3 = utftext.charCodeAt(i + 2);\n string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));\n i += 3;\n }\n\n }\n return string;\n };\n\n _.extend(BI, {\n\n encode: function (input) {\n var output = \"\";\n var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n var i = 0;\n\n input = _utf8_encode(input);\n\n while (i < input.length) {\n\n chr1 = input.charCodeAt(i++);\n chr2 = input.charCodeAt(i++);\n chr3 = input.charCodeAt(i++);\n\n enc1 = chr1 >> 2;\n enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);\n enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);\n enc4 = chr3 & 63;\n\n if (isNaN(chr2)) {\n enc3 = enc4 = 64;\n } else if (isNaN(chr3)) {\n enc4 = 64;\n }\n\n output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4);\n\n }\n\n return output;\n },\n\n // public method for decoding\n decode: function (input) {\n var output = \"\";\n var chr1, chr2, chr3;\n var enc1, enc2, enc3, enc4;\n var i = 0;\n\n input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n\n while (i < input.length) {\n\n enc1 = _keyStr.indexOf(input.charAt(i++));\n enc2 = _keyStr.indexOf(input.charAt(i++));\n enc3 = _keyStr.indexOf(input.charAt(i++));\n enc4 = _keyStr.indexOf(input.charAt(i++));\n\n chr1 = (enc1 << 2) | (enc2 >> 4);\n chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);\n chr3 = ((enc3 & 3) << 6) | enc4;\n\n output = output + String.fromCharCode(chr1);\n\n if (enc3 != 64) {\n output = output + String.fromCharCode(chr2);\n }\n if (enc4 != 64) {\n output = output + String.fromCharCode(chr3);\n }\n\n }\n\n output = _utf8_decode(output);\n\n return output;\n\n }\n });\n})();","\nBI.Cache = {\n _prefix: \"bi\",\n setUsername: function (username) {\n localStorage.setItem(BI.Cache._prefix + \".username\", (username + \"\" || \"\").toUpperCase());\n },\n getUsername: function () {\n return localStorage.getItem(BI.Cache._prefix + \".username\") || \"\";\n },\n _getKeyPrefix: function () {\n return BI.Cache.getUsername() + \".\" + BI.Cache._prefix + \".\";\n },\n _generateKey: function (key) {\n return BI.Cache._getKeyPrefix() + (key || \"\");\n },\n getItem: function (key) {\n return localStorage.getItem(BI.Cache._generateKey(key));\n },\n setItem: function (key, value) {\n localStorage.setItem(BI.Cache._generateKey(key), value);\n },\n removeItem: function (key) {\n localStorage.removeItem(BI.Cache._generateKey(key));\n },\n clear: function () {\n for (var i = localStorage.length; i >= 0; i--) {\n var key = localStorage.key(i);\n if (key) {\n if (key.indexOf(BI.Cache._getKeyPrefix()) === 0) {\n localStorage.removeItem(key);\n }\n }\n }\n },\n keys: function () {\n var result = [];\n for (var i = localStorage.length; i >= 0; i--) {\n var key = localStorage.key(i);\n if (key) {\n var prefix = BI.Cache._getKeyPrefix();\n if (key.indexOf(prefix) === 0) {\n result[result.length] = key.substring(prefix.length);\n }\n }\n }\n return result;\n },\n\n addCookie: function (name, value, path, expiresHours) {\n var cookieString = name + \"=\" + escape(value);\n // 判断是否设置过期时间\n if (expiresHours && expiresHours > 0) {\n var date = new Date();\n // expires是标准GMT格式时间,应该使用时间戳作为起始时间\n date.setTime(date.getTime() + expiresHours * 3600 * 1000);\n cookieString = cookieString + \"; expires=\" + date.toUTCString();\n }\n if (path) {\n cookieString = cookieString + \"; path=\" + path;\n }\n document.cookie = cookieString;\n },\n getCookie: function (name) {\n var arr, reg = new RegExp(\"(^| )\" + name + \"=([^;]*)(;|$)\");\n if (arr = document.cookie.match(reg)) {return unescape(arr[2]);}\n return null;\n },\n deleteCookie: function (name, path) {\n var date = new Date();\n date.setTime(date.getTime() - 10000);\n var cookieString = name + \"=v; expires=\" + date.toUTCString();\n if (path) {\n cookieString = cookieString + \"; path=\" + path;\n }\n document.cookie = cookieString;\n }\n};","BI.CellSizeAndPositionManager = function (cellCount, cellSizeGetter, estimatedCellSize) {\n this._cellSizeGetter = cellSizeGetter;\n this._cellCount = cellCount;\n this._estimatedCellSize = estimatedCellSize;\n this._cellSizeAndPositionData = {};\n this._lastMeasuredIndex = -1;\n};\n\nBI.CellSizeAndPositionManager.prototype = {\n constructor: BI.CellSizeAndPositionManager,\n configure: function (cellCount, estimatedCellSize) {\n this._cellCount = cellCount;\n this._estimatedCellSize = estimatedCellSize;\n },\n\n getCellCount: function () {\n return this._cellCount;\n },\n\n getEstimatedCellSize: function () {\n return this._estimatedCellSize;\n },\n\n getLastMeasuredIndex: function () {\n return this._lastMeasuredIndex;\n },\n\n getSizeAndPositionOfCell: function (index) {\n if (index < 0 || index >= this._cellCount) {\n return;\n }\n if (index > this._lastMeasuredIndex) {\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var offset = lastMeasuredCellSizeAndPosition.offset + lastMeasuredCellSizeAndPosition.size;\n\n for (var i = this._lastMeasuredIndex + 1; i <= index; i++) {\n var size = this._cellSizeGetter(i);\n\n if (size == null || isNaN(size)) {\n continue;\n }\n\n this._cellSizeAndPositionData[i] = {\n offset: offset,\n size: size\n };\n\n offset += size;\n }\n\n this._lastMeasuredIndex = index;\n }\n return this._cellSizeAndPositionData[index];\n },\n\n getSizeAndPositionOfLastMeasuredCell: function () {\n return this._lastMeasuredIndex >= 0\n ? this._cellSizeAndPositionData[this._lastMeasuredIndex]\n : {\n offset: 0,\n size: 0\n };\n },\n\n getTotalSize: function () {\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n return lastMeasuredCellSizeAndPosition.offset + lastMeasuredCellSizeAndPosition.size + (this._cellCount - this._lastMeasuredIndex - 1) * this._estimatedCellSize;\n },\n\n getUpdatedOffsetForIndex: function (align, containerSize, currentOffset, targetIndex) {\n var datum = this.getSizeAndPositionOfCell(targetIndex);\n var maxOffset = datum.offset;\n var minOffset = maxOffset - containerSize + datum.size;\n\n var idealOffset;\n\n switch (align) {\n case \"start\":\n idealOffset = maxOffset;\n break;\n case \"end\":\n idealOffset = minOffset;\n break;\n case \"center\":\n idealOffset = maxOffset - ((containerSize - datum.size) / 2);\n break;\n default:\n idealOffset = Math.max(minOffset, Math.min(maxOffset, currentOffset));\n break;\n }\n\n var totalSize = this.getTotalSize();\n\n return Math.max(0, Math.min(totalSize - containerSize, idealOffset));\n },\n\n getVisibleCellRange: function (containerSize, offset) {\n var totalSize = this.getTotalSize();\n\n if (totalSize === 0) {\n return {};\n }\n\n var maxOffset = offset + containerSize;\n var start = this._findNearestCell(offset);\n\n var datum = this.getSizeAndPositionOfCell(start);\n offset = datum.offset + datum.size;\n\n var stop = start;\n\n while (offset < maxOffset && stop < this._cellCount - 1) {\n stop++;\n offset += this.getSizeAndPositionOfCell(stop).size;\n }\n\n return {\n start: start,\n stop: stop\n };\n },\n\n resetCell: function (index) {\n this._lastMeasuredIndex = Math.min(this._lastMeasuredIndex, index - 1);\n },\n\n _binarySearch: function (high, low, offset) {\n var middle;\n var currentOffset;\n\n while (low <= high) {\n middle = low + Math.floor((high - low) / 2);\n currentOffset = this.getSizeAndPositionOfCell(middle).offset;\n\n if (currentOffset === offset) {\n return middle;\n } else if (currentOffset < offset) {\n low = middle + 1;\n } else if (currentOffset > offset) {\n high = middle - 1;\n }\n }\n\n if (low > 0) {\n return low - 1;\n }\n },\n\n _exponentialSearch: function (index, offset) {\n var interval = 1;\n\n while (index < this._cellCount && this.getSizeAndPositionOfCell(index).offset < offset) {\n index += interval;\n interval *= 2;\n }\n\n return this._binarySearch(Math.min(index, this._cellCount - 1), Math.floor(index / 2), offset);\n },\n\n _findNearestCell: function (offset) {\n if (isNaN(offset)) {\n return;\n }\n\n offset = Math.max(0, offset);\n\n var lastMeasuredCellSizeAndPosition = this.getSizeAndPositionOfLastMeasuredCell();\n var lastMeasuredIndex = Math.max(0, this._lastMeasuredIndex);\n\n if (lastMeasuredCellSizeAndPosition.offset >= offset) {\n return this._binarySearch(lastMeasuredIndex, 0, offset);\n }\n return this._exponentialSearch(lastMeasuredIndex, offset);\n \n }\n};\n\nBI.ScalingCellSizeAndPositionManager = function (cellCount, cellSizeGetter, estimatedCellSize, maxScrollSize) {\n this._cellSizeAndPositionManager = new BI.CellSizeAndPositionManager(cellCount, cellSizeGetter, estimatedCellSize);\n this._maxScrollSize = maxScrollSize || 10000000;\n};\n\nBI.ScalingCellSizeAndPositionManager.prototype = {\n constructor: BI.ScalingCellSizeAndPositionManager,\n\n configure: function () {\n this._cellSizeAndPositionManager.configure.apply(this._cellSizeAndPositionManager, arguments);\n },\n\n getCellCount: function () {\n return this._cellSizeAndPositionManager.getCellCount();\n },\n\n getEstimatedCellSize: function () {\n return this._cellSizeAndPositionManager.getEstimatedCellSize();\n },\n\n getLastMeasuredIndex: function () {\n return this._cellSizeAndPositionManager.getLastMeasuredIndex();\n },\n\n getOffsetAdjustment: function (containerSize, offset) {\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n var safeTotalSize = this.getTotalSize();\n var offsetPercentage = this._getOffsetPercentage(containerSize, offset, safeTotalSize);\n\n return Math.round(offsetPercentage * (safeTotalSize - totalSize));\n },\n\n getSizeAndPositionOfCell: function (index) {\n return this._cellSizeAndPositionManager.getSizeAndPositionOfCell(index);\n },\n\n getSizeAndPositionOfLastMeasuredCell: function () {\n return this._cellSizeAndPositionManager.getSizeAndPositionOfLastMeasuredCell();\n },\n\n getTotalSize: function () {\n return Math.min(this._maxScrollSize, this._cellSizeAndPositionManager.getTotalSize());\n },\n\n getUpdatedOffsetForIndex: function (align, containerSize, currentOffset, targetIndex) {\n currentOffset = this._safeOffsetToOffset(containerSize, currentOffset);\n\n var offset = this._cellSizeAndPositionManager.getUpdatedOffsetForIndex(align, containerSize, currentOffset, targetIndex);\n\n return this._offsetToSafeOffset(containerSize, offset);\n },\n\n getVisibleCellRange: function (containerSize, offset) {\n offset = this._safeOffsetToOffset(containerSize, offset);\n\n return this._cellSizeAndPositionManager.getVisibleCellRange(containerSize, offset);\n },\n\n resetCell: function (index) {\n this._cellSizeAndPositionManager.resetCell(index);\n },\n\n _getOffsetPercentage: function (containerSize, offset, totalSize) {\n return totalSize <= containerSize\n ? 0\n : offset / (totalSize - containerSize);\n },\n\n _offsetToSafeOffset: function (containerSize, offset) {\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n var safeTotalSize = this.getTotalSize();\n\n if (totalSize === safeTotalSize) {\n return offset;\n }\n var offsetPercentage = this._getOffsetPercentage(containerSize, offset, totalSize);\n\n return Math.round(offsetPercentage * (safeTotalSize - containerSize));\n \n },\n\n _safeOffsetToOffset: function (containerSize, offset) {\n var totalSize = this._cellSizeAndPositionManager.getTotalSize();\n var safeTotalSize = this.getTotalSize();\n\n if (totalSize === safeTotalSize) {\n return offset;\n }\n var offsetPercentage = this._getOffsetPercentage(containerSize, offset, safeTotalSize);\n\n return Math.round(offsetPercentage * (totalSize - containerSize));\n \n }\n};","/**\n * 汉字拼音索引\n */\n\n!(function () {\n var _ChineseFirstPY = \"YDYQSXMWZSSXJBYMGCCZQPSSQBYCDSCDQLDYLYBSSJGYZZJJFKCCLZDHWDWZJLJPFYYNWJJTMYHZWZHFLZPPQHGSCYYYNJQYXXGJHHSDSJNKKTMOMLCRXYPSNQSECCQZGGLLYJLMYZZSECYKYYHQWJSSGGYXYZYJWWKDJHYCHMYXJTLXJYQBYXZLDWRDJRWYSRLDZJPCBZJJBRCFTLECZSTZFXXZHTRQHYBDLYCZSSYMMRFMYQZPWWJJYFCRWFDFZQPYDDWYXKYJAWJFFXYPSFTZYHHYZYSWCJYXSCLCXXWZZXNBGNNXBXLZSZSBSGPYSYZDHMDZBQBZCWDZZYYTZHBTSYYBZGNTNXQYWQSKBPHHLXGYBFMJEBJHHGQTJCYSXSTKZHLYCKGLYSMZXYALMELDCCXGZYRJXSDLTYZCQKCNNJWHJTZZCQLJSTSTBNXBTYXCEQXGKWJYFLZQLYHYXSPSFXLMPBYSXXXYDJCZYLLLSJXFHJXPJBTFFYABYXBHZZBJYZLWLCZGGBTSSMDTJZXPTHYQTGLJSCQFZKJZJQNLZWLSLHDZBWJNCJZYZSQQYCQYRZCJJWYBRTWPYFTWEXCSKDZCTBZHYZZYYJXZCFFZZMJYXXSDZZOTTBZLQWFCKSZSXFYRLNYJMBDTHJXSQQCCSBXYYTSYFBXDZTGBCNSLCYZZPSAZYZZSCJCSHZQYDXLBPJLLMQXTYDZXSQJTZPXLCGLQTZWJBHCTSYJSFXYEJJTLBGXSXJMYJQQPFZASYJNTYDJXKJCDJSZCBARTDCLYJQMWNQNCLLLKBYBZZSYHQQLTWLCCXTXLLZNTYLNEWYZYXCZXXGRKRMTCNDNJTSYYSSDQDGHSDBJGHRWRQLYBGLXHLGTGXBQJDZPYJSJYJCTMRNYMGRZJCZGJMZMGXMPRYXKJNYMSGMZJYMKMFXMLDTGFBHCJHKYLPFMDXLQJJSMTQGZSJLQDLDGJYCALCMZCSDJLLNXDJFFFFJCZFMZFFPFKHKGDPSXKTACJDHHZDDCRRCFQYJKQCCWJDXHWJLYLLZGCFCQDSMLZPBJJPLSBCJGGDCKKDEZSQCCKJGCGKDJTJDLZYCXKLQSCGJCLTFPCQCZGWPJDQYZJJBYJHSJDZWGFSJGZKQCCZLLPSPKJGQJHZZLJPLGJGJJTHJJYJZCZMLZLYQBGJWMLJKXZDZNJQSYZMLJLLJKYWXMKJLHSKJGBMCLYYMKXJQLBMLLKMDXXKWYXYSLMLPSJQQJQXYXFJTJDXMXXLLCXQBSYJBGWYMBGGBCYXPJYGPEPFGDJGBHBNSQJYZJKJKHXQFGQZKFHYGKHDKLLSDJQXPQYKYBNQSXQNSZSWHBSXWHXWBZZXDMNSJBSBKBBZKLYLXGWXDRWYQZMYWSJQLCJXXJXKJEQXSCYETLZHLYYYSDZPAQYZCMTLSHTZCFYZYXYLJSDCJQAGYSLCQLYYYSHMRQQKLDXZSCSSSYDYCJYSFSJBFRSSZQSBXXPXJYSDRCKGJLGDKZJZBDKTCSYQPYHSTCLDJDHMXMCGXYZHJDDTMHLTXZXYLYMOHYJCLTYFBQQXPFBDFHHTKSQHZYYWCNXXCRWHOWGYJLEGWDQCWGFJYCSNTMYTOLBYGWQWESJPWNMLRYDZSZTXYQPZGCWXHNGPYXSHMYQJXZTDPPBFYHZHTJYFDZWKGKZBLDNTSXHQEEGZZYLZMMZYJZGXZXKHKSTXNXXWYLYAPSTHXDWHZYMPXAGKYDXBHNHXKDPJNMYHYLPMGOCSLNZHKXXLPZZLBMLSFBHHGYGYYGGBHSCYAQTYWLXTZQCEZYDQDQMMHTKLLSZHLSJZWFYHQSWSCWLQAZYNYTLSXTHAZNKZZSZZLAXXZWWCTGQQTDDYZTCCHYQZFLXPSLZYGPZSZNGLNDQTBDLXGTCTAJDKYWNSYZLJHHZZCWNYYZYWMHYCHHYXHJKZWSXHZYXLYSKQYSPSLYZWMYPPKBYGLKZHTYXAXQSYSHXASMCHKDSCRSWJPWXSGZJLWWSCHSJHSQNHCSEGNDAQTBAALZZMSSTDQJCJKTSCJAXPLGGXHHGXXZCXPDMMHLDGTYBYSJMXHMRCPXXJZCKZXSHMLQXXTTHXWZFKHCCZDYTCJYXQHLXDHYPJQXYLSYYDZOZJNYXQEZYSQYAYXWYPDGXDDXSPPYZNDLTWRHXYDXZZJHTCXMCZLHPYYYYMHZLLHNXMYLLLMDCPPXHMXDKYCYRDLTXJCHHZZXZLCCLYLNZSHZJZZLNNRLWHYQSNJHXYNTTTKYJPYCHHYEGKCTTWLGQRLGGTGTYGYHPYHYLQYQGCWYQKPYYYTTTTLHYHLLTYTTSPLKYZXGZWGPYDSSZZDQXSKCQNMJJZZBXYQMJRTFFBTKHZKBXLJJKDXJTLBWFZPPTKQTZTGPDGNTPJYFALQMKGXBDCLZFHZCLLLLADPMXDJHLCCLGYHDZFGYDDGCYYFGYDXKSSEBDHYKDKDKHNAXXYBPBYYHXZQGAFFQYJXDMLJCSQZLLPCHBSXGJYNDYBYQSPZWJLZKSDDTACTBXZDYZYPJZQSJNKKTKNJDJGYYPGTLFYQKASDNTCYHBLWDZHBBYDWJRYGKZYHEYYFJMSDTYFZJJHGCXPLXHLDWXXJKYTCYKSSSMTWCTTQZLPBSZDZWZXGZAGYKTYWXLHLSPBCLLOQMMZSSLCMBJCSZZKYDCZJGQQDSMCYTZQQLWZQZXSSFPTTFQMDDZDSHDTDWFHTDYZJYQJQKYPBDJYYXTLJHDRQXXXHAYDHRJLKLYTWHLLRLLRCXYLBWSRSZZSYMKZZHHKYHXKSMDSYDYCJPBZBSQLFCXXXNXKXWYWSDZYQOGGQMMYHCDZTTFJYYBGSTTTYBYKJDHKYXBELHTYPJQNFXFDYKZHQKZBYJTZBXHFDXKDASWTAWAJLDYJSFHBLDNNTNQJTJNCHXFJSRFWHZFMDRYJYJWZPDJKZYJYMPCYZNYNXFBYTFYFWYGDBNZZZDNYTXZEMMQBSQEHXFZMBMFLZZSRXYMJGSXWZJSPRYDJSJGXHJJGLJJYNZZJXHGXKYMLPYYYCXYTWQZSWHWLYRJLPXSLSXMFSWWKLCTNXNYNPSJSZHDZEPTXMYYWXYYSYWLXJQZQXZDCLEEELMCPJPCLWBXSQHFWWTFFJTNQJHJQDXHWLBYZNFJLALKYYJLDXHHYCSTYYWNRJYXYWTRMDRQHWQCMFJDYZMHMYYXJWMYZQZXTLMRSPWWCHAQBXYGZYPXYYRRCLMPYMGKSJSZYSRMYJSNXTPLNBAPPYPYLXYYZKYNLDZYJZCZNNLMZHHARQMPGWQTZMXXMLLHGDZXYHXKYXYCJMFFYYHJFSBSSQLXXNDYCANNMTCJCYPRRNYTYQNYYMBMSXNDLYLYSLJRLXYSXQMLLYZLZJJJKYZZCSFBZXXMSTBJGNXYZHLXNMCWSCYZYFZLXBRNNNYLBNRTGZQYSATSWRYHYJZMZDHZGZDWYBSSCSKXSYHYTXXGCQGXZZSHYXJSCRHMKKBXCZJYJYMKQHZJFNBHMQHYSNJNZYBKNQMCLGQHWLZNZSWXKHLJHYYBQLBFCDSXDLDSPFZPSKJYZWZXZDDXJSMMEGJSCSSMGCLXXKYYYLNYPWWWGYDKZJGGGZGGSYCKNJWNJPCXBJJTQTJWDSSPJXZXNZXUMELPXFSXTLLXCLJXJJLJZXCTPSWXLYDHLYQRWHSYCSQYYBYAYWJJJQFWQCQQCJQGXALDBZZYJGKGXPLTZYFXJLTPADKYQHPMATLCPDCKBMTXYBHKLENXDLEEGQDYMSAWHZMLJTWYGXLYQZLJEEYYBQQFFNLYXRDSCTGJGXYYNKLLYQKCCTLHJLQMKKZGCYYGLLLJDZGYDHZWXPYSJBZKDZGYZZHYWYFQYTYZSZYEZZLYMHJJHTSMQWYZLKYYWZCSRKQYTLTDXWCTYJKLWSQZWBDCQYNCJSRSZJLKCDCDTLZZZACQQZZDDXYPLXZBQJYLZLLLQDDZQJYJYJZYXNYYYNYJXKXDAZWYRDLJYYYRJLXLLDYXJCYWYWNQCCLDDNYYYNYCKCZHXXCCLGZQJGKWPPCQQJYSBZZXYJSQPXJPZBSBDSFNSFPZXHDWZTDWPPTFLZZBZDMYYPQJRSDZSQZSQXBDGCPZSWDWCSQZGMDHZXMWWFYBPDGPHTMJTHZSMMBGZMBZJCFZWFZBBZMQCFMBDMCJXLGPNJBBXGYHYYJGPTZGZMQBQTCGYXJXLWZKYDPDYMGCFTPFXYZTZXDZXTGKMTYBBCLBJASKYTSSQYYMSZXFJEWLXLLSZBQJJJAKLYLXLYCCTSXMCWFKKKBSXLLLLJYXTYLTJYYTDPJHNHNNKBYQNFQYYZBYYESSESSGDYHFHWTCJBSDZZTFDMXHCNJZYMQWSRYJDZJQPDQBBSTJGGFBKJBXTGQHNGWJXJGDLLTHZHHYYYYYYSXWTYYYCCBDBPYPZYCCZYJPZYWCBDLFWZCWJDXXHYHLHWZZXJTCZLCDPXUJCZZZLYXJJTXPHFXWPYWXZPTDZZBDZCYHJHMLXBQXSBYLRDTGJRRCTTTHYTCZWMXFYTWWZCWJWXJYWCSKYBZSCCTZQNHXNWXXKHKFHTSWOCCJYBCMPZZYKBNNZPBZHHZDLSYDDYTYFJPXYNGFXBYQXCBHXCPSXTYZDMKYSNXSXLHKMZXLYHDHKWHXXSSKQYHHCJYXGLHZXCSNHEKDTGZXQYPKDHEXTYKCNYMYYYPKQYYYKXZLTHJQTBYQHXBMYHSQCKWWYLLHCYYLNNEQXQWMCFBDCCMLJGGXDQKTLXKGNQCDGZJWYJJLYHHQTTTNWCHMXCXWHWSZJYDJCCDBQCDGDNYXZTHCQRXCBHZTQCBXWGQWYYBXHMBYMYQTYEXMQKYAQYRGYZSLFYKKQHYSSQYSHJGJCNXKZYCXSBXYXHYYLSTYCXQTHYSMGSCPMMGCCCCCMTZTASMGQZJHKLOSQYLSWTMXSYQKDZLJQQYPLSYCZTCQQPBBQJZCLPKHQZYYXXDTDDTSJCXFFLLCHQXMJLWCJCXTSPYCXNDTJSHJWXDQQJSKXYAMYLSJHMLALYKXCYYDMNMDQMXMCZNNCYBZKKYFLMCHCMLHXRCJJHSYLNMTJZGZGYWJXSRXCWJGJQHQZDQJDCJJZKJKGDZQGJJYJYLXZXXCDQHHHEYTMHLFSBDJSYYSHFYSTCZQLPBDRFRZTZYKYWHSZYQKWDQZRKMSYNBCRXQBJYFAZPZZEDZCJYWBCJWHYJBQSZYWRYSZPTDKZPFPBNZTKLQYHBBZPNPPTYZZYBQNYDCPJMMCYCQMCYFZZDCMNLFPBPLNGQJTBTTNJZPZBBZNJKLJQYLNBZQHKSJZNGGQSZZKYXSHPZSNBCGZKDDZQANZHJKDRTLZLSWJLJZLYWTJNDJZJHXYAYNCBGTZCSSQMNJPJYTYSWXZFKWJQTKHTZPLBHSNJZSYZBWZZZZLSYLSBJHDWWQPSLMMFBJDWAQYZTCJTBNNWZXQXCDSLQGDSDPDZHJTQQPSWLYYJZLGYXYZLCTCBJTKTYCZJTQKBSJLGMGZDMCSGPYNJZYQYYKNXRPWSZXMTNCSZZYXYBYHYZAXYWQCJTLLCKJJTJHGDXDXYQYZZBYWDLWQCGLZGJGQRQZCZSSBCRPCSKYDZNXJSQGXSSJMYDNSTZTPBDLTKZWXQWQTZEXNQCZGWEZKSSBYBRTSSSLCCGBPSZQSZLCCGLLLZXHZQTHCZMQGYZQZNMCOCSZJMMZSQPJYGQLJYJPPLDXRGZYXCCSXHSHGTZNLZWZKJCXTCFCJXLBMQBCZZWPQDNHXLJCTHYZLGYLNLSZZPCXDSCQQHJQKSXZPBAJYEMSMJTZDXLCJYRYYNWJBNGZZTMJXLTBSLYRZPYLSSCNXPHLLHYLLQQZQLXYMRSYCXZLMMCZLTZSDWTJJLLNZGGQXPFSKYGYGHBFZPDKMWGHCXMSGDXJMCJZDYCABXJDLNBCDQYGSKYDQTXDJJYXMSZQAZDZFSLQXYJSJZYLBTXXWXQQZBJZUFBBLYLWDSLJHXJYZJWTDJCZFQZQZZDZSXZZQLZCDZFJHYSPYMPQZMLPPLFFXJJNZZYLSJEYQZFPFZKSYWJJJHRDJZZXTXXGLGHYDXCSKYSWMMZCWYBAZBJKSHFHJCXMHFQHYXXYZFTSJYZFXYXPZLCHMZMBXHZZSXYFYMNCWDABAZLXKTCSHHXKXJJZJSTHYGXSXYYHHHJWXKZXSSBZZWHHHCWTZZZPJXSNXQQJGZYZYWLLCWXZFXXYXYHXMKYYSWSQMNLNAYCYSPMJKHWCQHYLAJJMZXHMMCNZHBHXCLXTJPLTXYJHDYYLTTXFSZHYXXSJBJYAYRSMXYPLCKDUYHLXRLNLLSTYZYYQYGYHHSCCSMZCTZQXKYQFPYYRPFFLKQUNTSZLLZMWWTCQQYZWTLLMLMPWMBZSSTZRBPDDTLQJJBXZCSRZQQYGWCSXFWZLXCCRSZDZMCYGGDZQSGTJSWLJMYMMZYHFBJDGYXCCPSHXNZCSBSJYJGJMPPWAFFYFNXHYZXZYLREMZGZCYZSSZDLLJCSQFNXZKPTXZGXJJGFMYYYSNBTYLBNLHPFZDCYFBMGQRRSSSZXYSGTZRNYDZZCDGPJAFJFZKNZBLCZSZPSGCYCJSZLMLRSZBZZLDLSLLYSXSQZQLYXZLSKKBRXBRBZCYCXZZZEEYFGKLZLYYHGZSGZLFJHGTGWKRAAJYZKZQTSSHJJXDCYZUYJLZYRZDQQHGJZXSSZBYKJPBFRTJXLLFQWJHYLQTYMBLPZDXTZYGBDHZZRBGXHWNJTJXLKSCFSMWLSDQYSJTXKZSCFWJLBXFTZLLJZLLQBLSQMQQCGCZFPBPHZCZJLPYYGGDTGWDCFCZQYYYQYSSCLXZSKLZZZGFFCQNWGLHQYZJJCZLQZZYJPJZZBPDCCMHJGXDQDGDLZQMFGPSYTSDYFWWDJZJYSXYYCZCYHZWPBYKXRYLYBHKJKSFXTZJMMCKHLLTNYYMSYXYZPYJQYCSYCWMTJJKQYRHLLQXPSGTLYYCLJSCPXJYZFNMLRGJJTYZBXYZMSJYJHHFZQMSYXRSZCWTLRTQZSSTKXGQKGSPTGCZNJSJCQCXHMXGGZTQYDJKZDLBZSXJLHYQGGGTHQSZPYHJHHGYYGKGGCWJZZYLCZLXQSFTGZSLLLMLJSKCTBLLZZSZMMNYTPZSXQHJCJYQXYZXZQZCPSHKZZYSXCDFGMWQRLLQXRFZTLYSTCTMJCXJJXHJNXTNRZTZFQYHQGLLGCXSZSJDJLJCYDSJTLNYXHSZXCGJZYQPYLFHDJSBPCCZHJJJQZJQDYBSSLLCMYTTMQTBHJQNNYGKYRQYQMZGCJKPDCGMYZHQLLSLLCLMHOLZGDYYFZSLJCQZLYLZQJESHNYLLJXGJXLYSYYYXNBZLJSSZCQQCJYLLZLTJYLLZLLBNYLGQCHXYYXOXCXQKYJXXXYKLXSXXYQXCYKQXQCSGYXXYQXYGYTQOHXHXPYXXXULCYEYCHZZCBWQBBWJQZSCSZSSLZYLKDESJZWMYMCYTSDSXXSCJPQQSQYLYYZYCMDJDZYWCBTJSYDJKCYDDJLBDJJSODZYSYXQQYXDHHGQQYQHDYXWGMMMAJDYBBBPPBCMUUPLJZSMTXERXJMHQNUTPJDCBSSMSSSTKJTSSMMTRCPLZSZMLQDSDMJMQPNQDXCFYNBFSDQXYXHYAYKQYDDLQYYYSSZBYDSLNTFQTZQPZMCHDHCZCWFDXTMYQSPHQYYXSRGJCWTJTZZQMGWJJTJHTQJBBHWZPXXHYQFXXQYWYYHYSCDYDHHQMNMTMWCPBSZPPZZGLMZFOLLCFWHMMSJZTTDHZZYFFYTZZGZYSKYJXQYJZQBHMBZZLYGHGFMSHPZFZSNCLPBQSNJXZSLXXFPMTYJYGBXLLDLXPZJYZJYHHZCYWHJYLSJEXFSZZYWXKZJLUYDTMLYMQJPWXYHXSKTQJEZRPXXZHHMHWQPWQLYJJQJJZSZCPHJLCHHNXJLQWZJHBMZYXBDHHYPZLHLHLGFWLCHYYTLHJXCJMSCPXSTKPNHQXSRTYXXTESYJCTLSSLSTDLLLWWYHDHRJZSFGXTSYCZYNYHTDHWJSLHTZDQDJZXXQHGYLTZPHCSQFCLNJTCLZPFSTPDYNYLGMJLLYCQHYSSHCHYLHQYQTMZYPBYWRFQYKQSYSLZDQJMPXYYSSRHZJNYWTQDFZBWWTWWRXCWHGYHXMKMYYYQMSMZHNGCEPMLQQMTCWCTMMPXJPJJHFXYYZSXZHTYBMSTSYJTTQQQYYLHYNPYQZLCYZHZWSMYLKFJXLWGXYPJYTYSYXYMZCKTTWLKSMZSYLMPWLZWXWQZSSAQSYXYRHSSNTSRAPXCPWCMGDXHXZDZYFJHGZTTSBJHGYZSZYSMYCLLLXBTYXHBBZJKSSDMALXHYCFYGMQYPJYCQXJLLLJGSLZGQLYCJCCZOTYXMTMTTLLWTGPXYMZMKLPSZZZXHKQYSXCTYJZYHXSHYXZKXLZWPSQPYHJWPJPWXQQYLXSDHMRSLZZYZWTTCYXYSZZSHBSCCSTPLWSSCJCHNLCGCHSSPHYLHFHHXJSXYLLNYLSZDHZXYLSXLWZYKCLDYAXZCMDDYSPJTQJZLNWQPSSSWCTSTSZLBLNXSMNYYMJQBQHRZWTYYDCHQLXKPZWBGQYBKFCMZWPZLLYYLSZYDWHXPSBCMLJBSCGBHXLQHYRLJXYSWXWXZSLDFHLSLYNJLZYFLYJYCDRJLFSYZFSLLCQYQFGJYHYXZLYLMSTDJCYHBZLLNWLXXYGYYHSMGDHXXHHLZZJZXCZZZCYQZFNGWPYLCPKPYYPMCLQKDGXZGGWQBDXZZKZFBXXLZXJTPJPTTBYTSZZDWSLCHZHSLTYXHQLHYXXXYYZYSWTXZKHLXZXZPYHGCHKCFSYHUTJRLXFJXPTZTWHPLYXFCRHXSHXKYXXYHZQDXQWULHYHMJTBFLKHTXCWHJFWJCFPQRYQXCYYYQYGRPYWSGSUNGWCHKZDXYFLXXHJJBYZWTSXXNCYJJYMSWZJQRMHXZWFQSYLZJZGBHYNSLBGTTCSYBYXXWXYHXYYXNSQYXMQYWRGYQLXBBZLJSYLPSYTJZYHYZAWLRORJMKSCZJXXXYXCHDYXRYXXJDTSQFXLYLTSFFYXLMTYJMJUYYYXLTZCSXQZQHZXLYYXZHDNBRXXXJCTYHLBRLMBRLLAXKYLLLJLYXXLYCRYLCJTGJCMTLZLLCYZZPZPCYAWHJJFYBDYYZSMPCKZDQYQPBPCJPDCYZMDPBCYYDYCNNPLMTMLRMFMMGWYZBSJGYGSMZQQQZTXMKQWGXLLPJGZBQCDJJJFPKJKCXBLJMSWMDTQJXLDLPPBXCWRCQFBFQJCZAHZGMYKPHYYHZYKNDKZMBPJYXPXYHLFPNYYGXJDBKXNXHJMZJXSTRSTLDXSKZYSYBZXJLXYSLBZYSLHXJPFXPQNBYLLJQKYGZMCYZZYMCCSLCLHZFWFWYXZMWSXTYNXJHPYYMCYSPMHYSMYDYSHQYZCHMJJMZCAAGCFJBBHPLYZYLXXSDJGXDHKXXTXXNBHRMLYJSLTXMRHNLXQJXYZLLYSWQGDLBJHDCGJYQYCMHWFMJYBMBYJYJWYMDPWHXQLDYGPDFXXBCGJSPCKRSSYZJMSLBZZJFLJJJLGXZGYXYXLSZQYXBEXYXHGCXBPLDYHWETTWWCJMBTXCHXYQXLLXFLYXLLJLSSFWDPZSMYJCLMWYTCZPCHQEKCQBWLCQYDPLQPPQZQFJQDJHYMMCXTXDRMJWRHXCJZYLQXDYYNHYYHRSLSRSYWWZJYMTLTLLGTQCJZYABTCKZCJYCCQLJZQXALMZYHYWLWDXZXQDLLQSHGPJFJLJHJABCQZDJGTKHSSTCYJLPSWZLXZXRWGLDLZRLZXTGSLLLLZLYXXWGDZYGBDPHZPBRLWSXQBPFDWOFMWHLYPCBJCCLDMBZPBZZLCYQXLDOMZBLZWPDWYYGDSTTHCSQSCCRSSSYSLFYBFNTYJSZDFNDPDHDZZMBBLSLCMYFFGTJJQWFTMTPJWFNLBZCMMJTGBDZLQLPYFHYYMJYLSDCHDZJWJCCTLJCLDTLJJCPDDSQDSSZYBNDBJLGGJZXSXNLYCYBJXQYCBYLZCFZPPGKCXZDZFZTJJFJSJXZBNZYJQTTYJYHTYCZHYMDJXTTMPXSPLZCDWSLSHXYPZGTFMLCJTYCBPMGDKWYCYZCDSZZYHFLYCTYGWHKJYYLSJCXGYWJCBLLCSNDDBTZBSCLYZCZZSSQDLLMQYYHFSLQLLXFTYHABXGWNYWYYPLLSDLDLLBJCYXJZMLHLJDXYYQYTDLLLBUGBFDFBBQJZZMDPJHGCLGMJJPGAEHHBWCQXAXHHHZCHXYPHJAXHLPHJPGPZJQCQZGJJZZUZDMQYYBZZPHYHYBWHAZYJHYKFGDPFQSDLZMLJXKXGALXZDAGLMDGXMWZQYXXDXXPFDMMSSYMPFMDMMKXKSYZYSHDZKXSYSMMZZZMSYDNZZCZXFPLSTMZDNMXCKJMZTYYMZMZZMSXHHDCZJEMXXKLJSTLWLSQLYJZLLZJSSDPPMHNLZJCZYHMXXHGZCJMDHXTKGRMXFWMCGMWKDTKSXQMMMFZZYDKMSCLCMPCGMHSPXQPZDSSLCXKYXTWLWJYAHZJGZQMCSNXYYMMPMLKJXMHLMLQMXCTKZMJQYSZJSYSZHSYJZJCDAJZYBSDQJZGWZQQXFKDMSDJLFWEHKZQKJPEYPZYSZCDWYJFFMZZYLTTDZZEFMZLBNPPLPLPEPSZALLTYLKCKQZKGENQLWAGYXYDPXLHSXQQWQCQXQCLHYXXMLYCCWLYMQYSKGCHLCJNSZKPYZKCQZQLJPDMDZHLASXLBYDWQLWDNBQCRYDDZTJYBKBWSZDXDTNPJDTCTQDFXQQMGNXECLTTBKPWSLCTYQLPWYZZKLPYGZCQQPLLKCCYLPQMZCZQCLJSLQZDJXLDDHPZQDLJJXZQDXYZQKZLJCYQDYJPPYPQYKJYRMPCBYMCXKLLZLLFQPYLLLMBSGLCYSSLRSYSQTMXYXZQZFDZUYSYZTFFMZZSMZQHZSSCCMLYXWTPZGXZJGZGSJSGKDDHTQGGZLLBJDZLCBCHYXYZHZFYWXYZYMSDBZZYJGTSMTFXQYXQSTDGSLNXDLRYZZLRYYLXQHTXSRTZNGZXBNQQZFMYKMZJBZYMKBPNLYZPBLMCNQYZZZSJZHJCTZKHYZZJRDYZHNPXGLFZTLKGJTCTSSYLLGZRZBBQZZKLPKLCZYSSUYXBJFPNJZZXCDWXZYJXZZDJJKGGRSRJKMSMZJLSJYWQSKYHQJSXPJZZZLSNSHRNYPZTWCHKLPSRZLZXYJQXQKYSJYCZTLQZYBBYBWZPQDWWYZCYTJCJXCKCWDKKZXSGKDZXWWYYJQYYTCYTDLLXWKCZKKLCCLZCQQDZLQLCSFQCHQHSFSMQZZLNBJJZBSJHTSZDYSJQJPDLZCDCWJKJZZLPYCGMZWDJJBSJQZSYZYHHXJPBJYDSSXDZNCGLQMBTSFSBPDZDLZNFGFJGFSMPXJQLMBLGQCYYXBQKDJJQYRFKZTJDHCZKLBSDZCFJTPLLJGXHYXZCSSZZXSTJYGKGCKGYOQXJPLZPBPGTGYJZGHZQZZLBJLSQFZGKQQJZGYCZBZQTLDXRJXBSXXPZXHYZYCLWDXJJHXMFDZPFZHQHQMQGKSLYHTYCGFRZGNQXCLPDLBZCSCZQLLJBLHBZCYPZZPPDYMZZSGYHCKCPZJGSLJLNSCDSLDLXBMSTLDDFJMKDJDHZLZXLSZQPQPGJLLYBDSZGQLBZLSLKYYHZTTNTJYQTZZPSZQZTLLJTYYLLQLLQYZQLBDZLSLYYZYMDFSZSNHLXZNCZQZPBWSKRFBSYZMTHBLGJPMCZZLSTLXSHTCSYZLZBLFEQHLXFLCJLYLJQCBZLZJHHSSTBRMHXZHJZCLXFNBGXGTQJCZTMSFZKJMSSNXLJKBHSJXNTNLZDNTLMSJXGZJYJCZXYJYJWRWWQNZTNFJSZPZSHZJFYRDJSFSZJZBJFZQZZHZLXFYSBZQLZSGYFTZDCSZXZJBQMSZKJRHYJZCKMJKHCHGTXKXQGLXPXFXTRTYLXJXHDTSJXHJZJXZWZLCQSBTXWXGXTXXHXFTSDKFJHZYJFJXRZSDLLLTQSQQZQWZXSYQTWGWBZCGZLLYZBCLMQQTZHZXZXLJFRMYZFLXYSQXXJKXRMQDZDMMYYBSQBHGZMWFWXGMXLZPYYTGZYCCDXYZXYWGSYJYZNBHPZJSQSYXSXRTFYZGRHZTXSZZTHCBFCLSYXZLZQMZLMPLMXZJXSFLBYZMYQHXJSXRXSQZZZSSLYFRCZJRCRXHHZXQYDYHXSJJHZCXZBTYNSYSXJBQLPXZQPYMLXZKYXLXCJLCYSXXZZLXDLLLJJYHZXGYJWKJRWYHCPSGNRZLFZWFZZNSXGXFLZSXZZZBFCSYJDBRJKRDHHGXJLJJTGXJXXSTJTJXLYXQFCSGSWMSBCTLQZZWLZZKXJMLTMJYHSDDBXGZHDLBMYJFRZFSGCLYJBPMLYSMSXLSZJQQHJZFXGFQFQBPXZGYYQXGZTCQWYLTLGWSGWHRLFSFGZJMGMGBGTJFSYZZGZYZAFLSSPMLPFLCWBJZCLJJMZLPJJLYMQDMYYYFBGYGYZMLYZDXQYXRQQQHSYYYQXYLJTYXFSFSLLGNQCYHYCWFHCCCFXPYLYPLLZYXXXXXKQHHXSHJZCFZSCZJXCPZWHHHHHAPYLQALPQAFYHXDYLUKMZQGGGDDESRNNZLTZGCHYPPYSQJJHCLLJTOLNJPZLJLHYMHEYDYDSQYCDDHGZUNDZCLZYZLLZNTNYZGSLHSLPJJBDGWXPCDUTJCKLKCLWKLLCASSTKZZDNQNTTLYYZSSYSSZZRYLJQKCQDHHCRXRZYDGRGCWCGZQFFFPPJFZYNAKRGYWYQPQXXFKJTSZZXSWZDDFBBXTBGTZKZNPZZPZXZPJSZBMQHKCYXYLDKLJNYPKYGHGDZJXXEAHPNZKZTZCMXCXMMJXNKSZQNMNLWBWWXJKYHCPSTMCSQTZJYXTPCTPDTNNPGLLLZSJLSPBLPLQHDTNJNLYYRSZFFJFQWDPHZDWMRZCCLODAXNSSNYZRESTYJWJYJDBCFXNMWTTBYLWSTSZGYBLJPXGLBOCLHPCBJLTMXZLJYLZXCLTPNCLCKXTPZJSWCYXSFYSZDKNTLBYJCYJLLSTGQCBXRYZXBXKLYLHZLQZLNZCXWJZLJZJNCJHXMNZZGJZZXTZJXYCYYCXXJYYXJJXSSSJSTSSTTPPGQTCSXWZDCSYFPTFBFHFBBLZJCLZZDBXGCXLQPXKFZFLSYLTUWBMQJHSZBMDDBCYSCCLDXYCDDQLYJJWMQLLCSGLJJSYFPYYCCYLTJANTJJPWYCMMGQYYSXDXQMZHSZXPFTWWZQSWQRFKJLZJQQYFBRXJHHFWJJZYQAZMYFRHCYYBYQWLPEXCCZSTYRLTTDMQLYKMBBGMYYJPRKZNPBSXYXBHYZDJDNGHPMFSGMWFZMFQMMBCMZZCJJLCNUXYQLMLRYGQZCYXZLWJGCJCGGMCJNFYZZJHYCPRRCMTZQZXHFQGTJXCCJEAQCRJYHPLQLSZDJRBCQHQDYRHYLYXJSYMHZYDWLDFRYHBPYDTSSCNWBXGLPZMLZZTQSSCPJMXXYCSJYTYCGHYCJWYRXXLFEMWJNMKLLSWTXHYYYNCMMCWJDQDJZGLLJWJRKHPZGGFLCCSCZMCBLTBHBQJXQDSPDJZZGHGLFQYWBZYZJLTSTDHQHCTCBCHFLQMPWDSHYYTQWCNZZJTLBYMBPDYYYXSQKXWYYFLXXNCWCXYPMAELYKKJMZZZBRXYYQJFLJPFHHHYTZZXSGQQMHSPGDZQWBWPJHZJDYSCQWZKTXXSQLZYYMYSDZGRXCKKUJLWPYSYSCSYZLRMLQSYLJXBCXTLWDQZPCYCYKPPPNSXFYZJJRCEMHSZMSXLXGLRWGCSTLRSXBZGBZGZTCPLUJLSLYLYMTXMTZPALZXPXJTJWTCYYZLBLXBZLQMYLXPGHDSLSSDMXMBDZZSXWHAMLCZCPJMCNHJYSNSYGCHSKQMZZQDLLKABLWJXSFMOCDXJRRLYQZKJMYBYQLYHETFJZFRFKSRYXFJTWDSXXSYSQJYSLYXWJHSNLXYYXHBHAWHHJZXWMYLJCSSLKYDZTXBZSYFDXGXZJKHSXXYBSSXDPYNZWRPTQZCZENYGCXQFJYKJBZMLJCMQQXUOXSLYXXLYLLJDZBTYMHPFSTTQQWLHOKYBLZZALZXQLHZWRRQHLSTMYPYXJJXMQSJFNBXYXYJXXYQYLTHYLQYFMLKLJTMLLHSZWKZHLJMLHLJKLJSTLQXYLMBHHLNLZXQJHXCFXXLHYHJJGBYZZKBXSCQDJQDSUJZYYHZHHMGSXCSYMXFEBCQWWRBPYYJQTYZCYQYQQZYHMWFFHGZFRJFCDPXNTQYZPDYKHJLFRZXPPXZDBBGZQSTLGDGYLCQMLCHHMFYWLZYXKJLYPQHSYWMQQGQZMLZJNSQXJQSYJYCBEHSXFSZPXZWFLLBCYYJDYTDTHWZSFJMQQYJLMQXXLLDTTKHHYBFPWTYYSQQWNQWLGWDEBZWCMYGCULKJXTMXMYJSXHYBRWFYMWFRXYQMXYSZTZZTFYKMLDHQDXWYYNLCRYJBLPSXCXYWLSPRRJWXHQYPHTYDNXHHMMYWYTZCSQMTSSCCDALWZTCPQPYJLLQZYJSWXMZZMMYLMXCLMXCZMXMZSQTZPPQQBLPGXQZHFLJJHYTJSRXWZXSCCDLXTYJDCQJXSLQYCLZXLZZXMXQRJMHRHZJBHMFLJLMLCLQNLDXZLLLPYPSYJYSXCQQDCMQJZZXHNPNXZMEKMXHYKYQLXSXTXJYYHWDCWDZHQYYBGYBCYSCFGPSJNZDYZZJZXRZRQJJYMCANYRJTLDPPYZBSTJKXXZYPFDWFGZZRPYMTNGXZQBYXNBUFNQKRJQZMJEGRZGYCLKXZDSKKNSXKCLJSPJYYZLQQJYBZSSQLLLKJXTBKTYLCCDDBLSPPFYLGYDTZJYQGGKQTTFZXBDKTYYHYBBFYTYYBCLPDYTGDHRYRNJSPTCSNYJQHKLLLZSLYDXXWBCJQSPXBPJZJCJDZFFXXBRMLAZHCSNDLBJDSZBLPRZTSWSBXBCLLXXLZDJZSJPYLYXXYFTFFFBHJJXGBYXJPMMMPSSJZJMTLYZJXSWXTYLEDQPJMYGQZJGDJLQJWJQLLSJGJGYGMSCLJJXDTYGJQJQJCJZCJGDZZSXQGSJGGCXHQXSNQLZZBXHSGZXCXYLJXYXYYDFQQJHJFXDHCTXJYRXYSQTJXYEFYYSSYYJXNCYZXFXMSYSZXYYSCHSHXZZZGZZZGFJDLTYLNPZGYJYZYYQZPBXQBDZTZCZYXXYHHSQXSHDHGQHJHGYWSZTMZMLHYXGEBTYLZKQWYTJZRCLEKYSTDBCYKQQSAYXCJXWWGSBHJYZYDHCSJKQCXSWXFLTYNYZPZCCZJQTZWJQDZZZQZLJJXLSBHPYXXPSXSHHEZTXFPTLQYZZXHYTXNCFZYYHXGNXMYWXTZSJPTHHGYMXMXQZXTSBCZYJYXXTYYZYPCQLMMSZMJZZLLZXGXZAAJZYXJMZXWDXZSXZDZXLEYJJZQBHZWZZZQTZPSXZTDSXJJJZNYAZPHXYYSRNQDTHZHYYKYJHDZXZLSWCLYBZYECWCYCRYLCXNHZYDZYDYJDFRJJHTRSQTXYXJRJHOJYNXELXSFSFJZGHPZSXZSZDZCQZBYYKLSGSJHCZSHDGQGXYZGXCHXZJWYQWGYHKSSEQZZNDZFKWYSSTCLZSTSYMCDHJXXYWEYXCZAYDMPXMDSXYBSQMJMZJMTZQLPJYQZCGQHXJHHLXXHLHDLDJQCLDWBSXFZZYYSCHTYTYYBHECXHYKGJPXHHYZJFXHWHBDZFYZBCAPNPGNYDMSXHMMMMAMYNBYJTMPXYYMCTHJBZYFCGTYHWPHFTWZZEZSBZEGPFMTSKFTYCMHFLLHGPZJXZJGZJYXZSBBQSCZZLZCCSTPGXMJSFTCCZJZDJXCYBZLFCJSYZFGSZLYBCWZZBYZDZYPSWYJZXZBDSYUXLZZBZFYGCZXBZHZFTPBGZGEJBSTGKDMFHYZZJHZLLZZGJQZLSFDJSSCBZGPDLFZFZSZYZYZSYGCXSNXXCHCZXTZZLJFZGQSQYXZJQDCCZTQCDXZJYQJQCHXZTDLGSCXZSYQJQTZWLQDQZTQCHQQJZYEZZZPBWKDJFCJPZTYPQYQTTYNLMBDKTJZPQZQZZFPZSBNJLGYJDXJDZZKZGQKXDLPZJTCJDQBXDJQJSTCKNXBXZMSLYJCQMTJQWWCJQNJNLLLHJCWQTBZQYDZCZPZZDZYDDCYZZZCCJTTJFZDPRRTZTJDCQTQZDTJNPLZBCLLCTZSXKJZQZPZLBZRBTJDCXFCZDBCCJJLTQQPLDCGZDBBZJCQDCJWYNLLZYZCCDWLLXWZLXRXNTQQCZXKQLSGDFQTDDGLRLAJJTKUYMKQLLTZYTDYYCZGJWYXDXFRSKSTQTENQMRKQZHHQKDLDAZFKYPBGGPZREBZZYKZZSPEGJXGYKQZZZSLYSYYYZWFQZYLZZLZHWCHKYPQGNPGBLPLRRJYXCCSYYHSFZFYBZYYTGZXYLXCZWXXZJZBLFFLGSKHYJZEYJHLPLLLLCZGXDRZELRHGKLZZYHZLYQSZZJZQLJZFLNBHGWLCZCFJYSPYXZLZLXGCCPZBLLCYBBBBUBBCBPCRNNZCZYRBFSRLDCGQYYQXYGMQZWTZYTYJXYFWTEHZZJYWLCCNTZYJJZDEDPZDZTSYQJHDYMBJNYJZLXTSSTPHNDJXXBYXQTZQDDTJTDYYTGWSCSZQFLSHLGLBCZPHDLYZJYCKWTYTYLBNYTSDSYCCTYSZYYEBHEXHQDTWNYGYCLXTSZYSTQMYGZAZCCSZZDSLZCLZRQXYYELJSBYMXSXZTEMBBLLYYLLYTDQYSHYMRQWKFKBFXNXSBYCHXBWJYHTQBPBSBWDZYLKGZSKYHXQZJXHXJXGNLJKZLYYCDXLFYFGHLJGJYBXQLYBXQPQGZTZPLNCYPXDJYQYDYMRBESJYYHKXXSTMXRCZZYWXYQYBMCLLYZHQYZWQXDBXBZWZMSLPDMYSKFMZKLZCYQYCZLQXFZZYDQZPZYGYJYZMZXDZFYFYTTQTZHGSPCZMLCCYTZXJCYTJMKSLPZHYSNZLLYTPZCTZZCKTXDHXXTQCYFKSMQCCYYAZHTJPCYLZLYJBJXTPNYLJYYNRXSYLMMNXJSMYBCSYSYLZYLXJJQYLDZLPQBFZZBLFNDXQKCZFYWHGQMRDSXYCYTXNQQJZYYPFZXDYZFPRXEJDGYQBXRCNFYYQPGHYJDYZXGRHTKYLNWDZNTSMPKLBTHBPYSZBZTJZSZZJTYYXZPHSSZZBZCZPTQFZMYFLYPYBBJQXZMXXDJMTSYSKKBJZXHJCKLPSMKYJZCXTMLJYXRZZQSLXXQPYZXMKYXXXJCLJPRMYYGADYSKQLSNDHYZKQXZYZTCGHZTLMLWZYBWSYCTBHJHJFCWZTXWYTKZLXQSHLYJZJXTMPLPYCGLTBZZTLZJCYJGDTCLKLPLLQPJMZPAPXYZLKKTKDZCZZBNZDYDYQZJYJGMCTXLTGXSZLMLHBGLKFWNWZHDXUHLFMKYSLGXDTWWFRJEJZTZHYDXYKSHWFZCQSHKTMQQHTZHYMJDJSKHXZJZBZZXYMPAGQMSTPXLSKLZYNWRTSQLSZBPSPSGZWYHTLKSSSWHZZLYYTNXJGMJSZSUFWNLSOZTXGXLSAMMLBWLDSZYLAKQCQCTMYCFJBSLXCLZZCLXXKSBZQCLHJPSQPLSXXCKSLNHPSFQQYTXYJZLQLDXZQJZDYYDJNZPTUZDSKJFSLJHYLZSQZLBTXYDGTQFDBYAZXDZHZJNHHQBYKNXJJQCZMLLJZKSPLDYCLBBLXKLELXJLBQYCXJXGCNLCQPLZLZYJTZLJGYZDZPLTQCSXFDMNYCXGBTJDCZNBGBQYQJWGKFHTNPYQZQGBKPBBYZMTJDYTBLSQMPSXTBNPDXKLEMYYCJYNZCTLDYKZZXDDXHQSHDGMZSJYCCTAYRZLPYLTLKXSLZCGGEXCLFXLKJRTLQJAQZNCMBYDKKCXGLCZJZXJHPTDJJMZQYKQSECQZDSHHADMLZFMMZBGNTJNNLGBYJBRBTMLBYJDZXLCJLPLDLPCQDHLXZLYCBLCXZZJADJLNZMMSSSMYBHBSQKBHRSXXJMXSDZNZPXLGBRHWGGFCXGMSKLLTSJYYCQLTSKYWYYHYWXBXQYWPYWYKQLSQPTNTKHQCWDQKTWPXXHCPTHTWUMSSYHBWCRWXHJMKMZNGWTMLKFGHKJYLSYYCXWHYECLQHKQHTTQKHFZLDXQWYZYYDESBPKYRZPJFYYZJCEQDZZDLATZBBFJLLCXDLMJSSXEGYGSJQXCWBXSSZPDYZCXDNYXPPZYDLYJCZPLTXLSXYZYRXCYYYDYLWWNZSAHJSYQYHGYWWAXTJZDAXYSRLTDPSSYYFNEJDXYZHLXLLLZQZSJNYQYQQXYJGHZGZCYJCHZLYCDSHWSHJZYJXCLLNXZJJYYXNFXMWFPYLCYLLABWDDHWDXJMCXZTZPMLQZHSFHZYNZTLLDYWLSLXHYMMYLMBWWKYXYADTXYLLDJPYBPWUXJMWMLLSAFDLLYFLBHHHBQQLTZJCQJLDJTFFKMMMBYTHYGDCQRDDWRQJXNBYSNWZDBYYTBJHPYBYTTJXAAHGQDQTMYSTQXKBTZPKJLZRBEQQSSMJJBDJOTGTBXPGBKTLHQXJJJCTHXQDWJLWRFWQGWSHCKRYSWGFTGYGBXSDWDWRFHWYTJJXXXJYZYSLPYYYPAYXHYDQKXSHXYXGSKQHYWFDDDPPLCJLQQEEWXKSYYKDYPLTJTHKJLTCYYHHJTTPLTZZCDLTHQKZXQYSTEEYWYYZYXXYYSTTJKLLPZMCYHQGXYHSRMBXPLLNQYDQHXSXXWGDQBSHYLLPJJJTHYJKYPPTHYYKTYEZYENMDSHLCRPQFDGFXZPSFTLJXXJBSWYYSKSFLXLPPLBBBLBSFXFYZBSJSSYLPBBFFFFSSCJDSTZSXZRYYSYFFSYZYZBJTBCTSBSDHRTJJBYTCXYJEYLXCBNEBJDSYXYKGSJZBXBYTFZWGENYHHTHZHHXFWGCSTBGXKLSXYWMTMBYXJSTZSCDYQRCYTWXZFHMYMCXLZNSDJTTTXRYCFYJSBSDYERXJLJXBBDEYNJGHXGCKGSCYMBLXJMSZNSKGXFBNBPTHFJAAFXYXFPXMYPQDTZCXZZPXRSYWZDLYBBKTYQPQJPZYPZJZNJPZJLZZFYSBTTSLMPTZRTDXQSJEHBZYLZDHLJSQMLHTXTJECXSLZZSPKTLZKQQYFSYGYWPCPQFHQHYTQXZKRSGTTSQCZLPTXCDYYZXSQZSLXLZMYCPCQBZYXHBSXLZDLTCDXTYLZJYYZPZYZLTXJSJXHLPMYTXCQRBLZSSFJZZTNJYTXMYJHLHPPLCYXQJQQKZZSCPZKSWALQSBLCCZJSXGWWWYGYKTJBBZTDKHXHKGTGPBKQYSLPXPJCKBMLLXDZSTBKLGGQKQLSBKKTFXRMDKBFTPZFRTBBRFERQGXYJPZSSTLBZTPSZQZSJDHLJQLZBPMSMMSXLQQNHKNBLRDDNXXDHDDJCYYGYLXGZLXSYGMQQGKHBPMXYXLYTQWLWGCPBMQXCYZYDRJBHTDJYHQSHTMJSBYPLWHLZFFNYPMHXXHPLTBQPFBJWQDBYGPNZTPFZJGSDDTQSHZEAWZZYLLTYYBWJKXXGHLFKXDJTMSZSQYNZGGSWQSPHTLSSKMCLZXYSZQZXNCJDQGZDLFNYKLJCJLLZLMZZNHYDSSHTHZZLZZBBHQZWWYCRZHLYQQJBEYFXXXWHSRXWQHWPSLMSSKZTTYGYQQWRSLALHMJTQJSMXQBJJZJXZYZKXBYQXBJXSHZTSFJLXMXZXFGHKZSZGGYLCLSARJYHSLLLMZXELGLXYDJYTLFBHBPNLYZFBBHPTGJKWETZHKJJXZXXGLLJLSTGSHJJYQLQZFKCGNNDJSSZFDBCTWWSEQFHQJBSAQTGYPQLBXBMMYWXGSLZHGLZGQYFLZBYFZJFRYSFMBYZHQGFWZSYFYJJPHZBYYZFFWODGRLMFTWLBZGYCQXCDJYGZYYYYTYTYDWEGAZYHXJLZYYHLRMGRXXZCLHNELJJTJTPWJYBJJBXJJTJTEEKHWSLJPLPSFYZPQQBDLQJJTYYQLYZKDKSQJYYQZLDQTGJQYZJSUCMRYQTHTEJMFCTYHYPKMHYZWJDQFHYYXWSHCTXRLJHQXHCCYYYJLTKTTYTMXGTCJTZAYYOCZLYLBSZYWJYTSJYHBYSHFJLYGJXXTMZYYLTXXYPZLXYJZYZYYPNHMYMDYYLBLHLSYYQQLLNJJYMSOYQBZGDLYXYLCQYXTSZEGXHZGLHWBLJHEYXTWQMAKBPQCGYSHHEGQCMWYYWLJYJHYYZLLJJYLHZYHMGSLJLJXCJJYCLYCJPCPZJZJMMYLCQLNQLJQJSXYJMLSZLJQLYCMMHCFMMFPQQMFYLQMCFFQMMMMHMZNFHHJGTTHHKHSLNCHHYQDXTMMQDCYZYXYQMYQYLTDCYYYZAZZCYMZYDLZFFFMMYCQZWZZMABTBYZTDMNZZGGDFTYPCGQYTTSSFFWFDTZQSSYSTWXJHXYTSXXYLBYQHWWKXHZXWZNNZZJZJJQJCCCHYYXBZXZCYZTLLCQXYNJYCYYCYNZZQYYYEWYCZDCJYCCHYJLBTZYYCQWMPWPYMLGKDLDLGKQQBGYCHJXY\";\n\n // 此处收录了375个多音字,数据来自于http://www.51windows.net/pages/pinyin.asp\n var oMultiDiff = {\n 19969: \"DZ\",\n 19975: \"WM\",\n 19988: \"QJ\",\n 20048: \"YL\",\n 20056: \"SC\",\n 20060: \"NM\",\n 20094: \"QG\",\n 20127: \"QJ\",\n 20167: \"QC\",\n 20193: \"YG\",\n 20250: \"KH\",\n 20256: \"ZC\",\n 20282: \"SC\",\n 20285: \"QJG\",\n 20291: \"TD\",\n 20314: \"YD\",\n 20315: \"BF\",\n 20340: \"NE\",\n 20375: \"TD\",\n 20389: \"YJ\",\n 20391: \"CZ\",\n 20415: \"PB\",\n 20446: \"YS\",\n 20447: \"SQ\",\n 20504: \"TC\",\n 20608: \"KG\",\n 20854: \"QJ\",\n 20857: \"ZC\",\n 20911: \"PF\",\n 20985: \"AW\",\n 21032: \"PB\",\n 21048: \"XQ\",\n 21049: \"SC\",\n 21089: \"YS\",\n 21119: \"JC\",\n 21242: \"SB\",\n 21273: \"SC\",\n 21305: \"YP\",\n 21306: \"QO\",\n 21330: \"ZC\",\n 21333: \"SDC\",\n 21345: \"QK\",\n 21378: \"CA\",\n 21397: \"SC\",\n 21414: \"XS\",\n 21442: \"SC\",\n 21477: \"JG\",\n 21480: \"TD\",\n 21484: \"ZS\",\n 21494: \"YX\",\n 21505: \"YX\",\n 21512: \"HG\",\n 21523: \"XH\",\n 21537: \"PB\",\n 21542: \"PF\",\n 21549: \"KH\",\n 21571: \"E\",\n 21574: \"DA\",\n 21588: \"TD\",\n 21589: \"O\",\n 21618: \"ZC\",\n 21621: \"KHA\",\n 21632: \"ZJ\",\n 21654: \"KG\",\n 21679: \"LKG\",\n 21683: \"KH\",\n 21710: \"A\",\n 21719: \"YH\",\n 21734: \"WOE\",\n 21769: \"A\",\n 21780: \"WN\",\n 21804: \"XH\",\n 21834: \"A\",\n 21899: \"ZD\",\n 21903: \"RN\",\n 21908: \"WO\",\n 21939: \"ZC\",\n 21956: \"SA\",\n 21964: \"YA\",\n 21970: \"TD\",\n 22003: \"A\",\n 22031: \"JG\",\n 22040: \"XS\",\n 22060: \"ZC\",\n 22066: \"ZC\",\n 22079: \"MH\",\n 22129: \"XJ\",\n 22179: \"XA\",\n 22237: \"NJ\",\n 22244: \"TD\",\n 22280: \"JQ\",\n 22300: \"YH\",\n 22313: \"XW\",\n 22331: \"YQ\",\n 22343: \"YJ\",\n 22351: \"PH\",\n 22395: \"DC\",\n 22412: \"TD\",\n 22484: \"PB\",\n 22500: \"PB\",\n 22534: \"ZD\",\n 22549: \"DH\",\n 22561: \"PB\",\n 22612: \"TD\",\n 22771: \"KQ\",\n 22831: \"HB\",\n 22841: \"JG\",\n 22855: \"QJ\",\n 22865: \"XQ\",\n 23013: \"ML\",\n 23081: \"WM\",\n 23487: \"SX\",\n 23558: \"QJ\",\n 23561: \"YW\",\n 23586: \"YW\",\n 23614: \"YW\",\n 23615: \"SN\",\n 23631: \"PB\",\n 23646: \"ZS\",\n 23663: \"ZT\",\n 23673: \"YG\",\n 23762: \"TD\",\n 23769: \"ZS\",\n 23780: \"QJ\",\n 23884: \"QK\",\n 24055: \"XH\",\n 24113: \"DC\",\n 24162: \"ZC\",\n 24191: \"GA\",\n 24273: \"QJ\",\n 24324: \"NL\",\n 24377: \"TD\",\n 24378: \"QJ\",\n 24439: \"PF\",\n 24554: \"ZS\",\n 24683: \"TD\",\n 24694: \"WE\",\n 24733: \"LK\",\n 24925: \"TN\",\n 25094: \"ZG\",\n 25100: \"XQ\",\n 25103: \"XH\",\n 25153: \"PB\",\n 25170: \"PB\",\n 25179: \"KG\",\n 25203: \"PB\",\n 25240: \"ZS\",\n 25282: \"FB\",\n 25303: \"NA\",\n 25324: \"KG\",\n 25341: \"ZY\",\n 25373: \"WZ\",\n 25375: \"XJ\",\n 25384: \"A\",\n 25457: \"A\",\n 25528: \"SD\",\n 25530: \"SC\",\n 25552: \"TD\",\n 25774: \"ZC\",\n 25874: \"ZC\",\n 26044: \"YW\",\n 26080: \"WM\",\n 26292: \"PB\",\n 26333: \"PB\",\n 26355: \"ZY\",\n 26366: \"CZ\",\n 26397: \"ZC\",\n 26399: \"QJ\",\n 26415: \"ZS\",\n 26451: \"SB\",\n 26526: \"ZC\",\n 26552: \"JG\",\n 26561: \"TD\",\n 26588: \"JG\",\n 26597: \"CZ\",\n 26629: \"ZS\",\n 26638: \"YL\",\n 26646: \"XQ\",\n 26653: \"KG\",\n 26657: \"XJ\",\n 26727: \"HG\",\n 26894: \"ZC\",\n 26937: \"ZS\",\n 26946: \"ZC\",\n 26999: \"KJ\",\n 27099: \"KJ\",\n 27449: \"YQ\",\n 27481: \"XS\",\n 27542: \"ZS\",\n 27663: \"ZS\",\n 27748: \"TS\",\n 27784: \"SC\",\n 27788: \"ZD\",\n 27795: \"TD\",\n 27812: \"O\",\n 27850: \"PB\",\n 27852: \"MB\",\n 27895: \"SL\",\n 27898: \"PL\",\n 27973: \"QJ\",\n 27981: \"KH\",\n 27986: \"HX\",\n 27994: \"XJ\",\n 28044: \"YC\",\n 28065: \"WG\",\n 28177: \"SM\",\n 28267: \"QJ\",\n 28291: \"KH\",\n 28337: \"ZQ\",\n 28463: \"TL\",\n 28548: \"DC\",\n 28601: \"TD\",\n 28689: \"PB\",\n 28805: \"JG\",\n 28820: \"QG\",\n 28846: \"PB\",\n 28952: \"TD\",\n 28975: \"ZC\",\n 29100: \"A\",\n 29325: \"QJ\",\n 29575: \"SL\",\n 29602: \"FB\",\n 30010: \"TD\",\n 30044: \"CX\",\n 30058: \"PF\",\n 30091: \"YSP\",\n 30111: \"YN\",\n 30229: \"XJ\",\n 30427: \"SC\",\n 30465: \"SX\",\n 30631: \"YQ\",\n 30655: \"QJ\",\n 30684: \"QJG\",\n 30707: \"SD\",\n 30729: \"XH\",\n 30796: \"LG\",\n 30917: \"PB\",\n 31074: \"NM\",\n 31085: \"JZ\",\n 31109: \"SC\",\n 31181: \"ZC\",\n 31192: \"MLB\",\n 31293: \"JQ\",\n 31400: \"YX\",\n 31584: \"YJ\",\n 31896: \"ZN\",\n 31909: \"ZY\",\n 31995: \"XJ\",\n 32321: \"PF\",\n 32327: \"ZY\",\n 32418: \"HG\",\n 32420: \"XQ\",\n 32421: \"HG\",\n 32438: \"LG\",\n 32473: \"GJ\",\n 32488: \"TD\",\n 32521: \"QJ\",\n 32527: \"PB\",\n 32562: \"ZSQ\",\n 32564: \"JZ\",\n 32735: \"ZD\",\n 32793: \"PB\",\n 33071: \"PF\",\n 33098: \"XL\",\n 33100: \"YA\",\n 33152: \"PB\",\n 33261: \"CX\",\n 33324: \"BP\",\n 33333: \"TD\",\n 33406: \"YA\",\n 33426: \"WM\",\n 33432: \"PB\",\n 33445: \"JG\",\n 33486: \"ZN\",\n 33493: \"TS\",\n 33507: \"QJ\",\n 33540: \"QJ\",\n 33544: \"ZC\",\n 33564: \"XQ\",\n 33617: \"YT\",\n 33632: \"QJ\",\n 33636: \"XH\",\n 33637: \"YX\",\n 33694: \"WG\",\n 33705: \"PF\",\n 33728: \"YW\",\n 33882: \"SR\",\n 34067: \"WM\",\n 34074: \"YW\",\n 34121: \"QJ\",\n 34255: \"ZC\",\n 34259: \"XL\",\n 34425: \"JH\",\n 34430: \"XH\",\n 34485: \"KH\",\n 34503: \"YS\",\n 34532: \"HG\",\n 34552: \"XS\",\n 34558: \"YE\",\n 34593: \"ZL\",\n 34660: \"YQ\",\n 34892: \"XH\",\n 34928: \"SC\",\n 34999: \"QJ\",\n 35048: \"PB\",\n 35059: \"SC\",\n 35098: \"ZC\",\n 35203: \"TQ\",\n 35265: \"JX\",\n 35299: \"JX\",\n 35782: \"SZ\",\n 35828: \"YS\",\n 35830: \"E\",\n 35843: \"TD\",\n 35895: \"YG\",\n 35977: \"MH\",\n 36158: \"JG\",\n 36228: \"QJ\",\n 36426: \"XQ\",\n 36466: \"DC\",\n 36710: \"CJ\",\n 36711: \"ZYG\",\n 36767: \"PB\",\n 36866: \"SK\",\n 36951: \"YW\",\n 37034: \"YX\",\n 37063: \"XH\",\n 37218: \"ZC\",\n 37325: \"ZC\",\n 38063: \"PB\",\n 38079: \"TD\",\n 38085: \"QY\",\n 38107: \"DC\",\n 38116: \"TD\",\n 38123: \"YD\",\n 38224: \"HG\",\n 38241: \"XTC\",\n 38271: \"ZC\",\n 38415: \"YE\",\n 38426: \"KH\",\n 38461: \"YD\",\n 38463: \"AE\",\n 38466: \"PB\",\n 38477: \"XJ\",\n 38518: \"YT\",\n 38551: \"WK\",\n 38585: \"ZC\",\n 38704: \"XS\",\n 38739: \"LJ\",\n 38761: \"GJ\",\n 38808: \"SQ\",\n 39048: \"JG\",\n 39049: \"XJ\",\n 39052: \"HG\",\n 39076: \"CZ\",\n 39271: \"XT\",\n 39534: \"TD\",\n 39552: \"TD\",\n 39584: \"PB\",\n 39647: \"SB\",\n 39730: \"LG\",\n 39748: \"TPB\",\n 40109: \"ZQ\",\n 40479: \"ND\",\n 40516: \"HG\",\n 40536: \"HG\",\n 40583: \"QJ\",\n 40765: \"YQ\",\n 40784: \"QJ\",\n 40840: \"YK\",\n 40863: \"QJG\"\n };\n\n var _checkPYCh = function (ch) {\n var uni = ch.charCodeAt(0);\n // 如果不在汉字处理范围之内,返回原字符,也可以调用自己的处理函数\n if (uni > 40869 || uni < 19968) {return ch;} // dealWithOthers(ch);\n return (oMultiDiff[uni] ? oMultiDiff[uni] : (_ChineseFirstPY.charAt(uni - 19968)));\n };\n\n var _mkPYRslt = function (arr, options) {\n var ignoreMulti = options.ignoreMulti;\n var splitChar = options.splitChar;\n var arrRslt = [\"\"], k, multiLen = 0;\n for (var i = 0, len = arr.length; i < len; i++) {\n var str = arr[i];\n var strlen = str.length;\n // 多音字过多的情况下,指数增长会造成浏览器卡死,超过20完全卡死,18勉强能用,考虑到不同性能最好是16或者14\n // 超过14个多音字之后,后面的都用第一个拼音\n if (strlen == 1 || multiLen > 14 || ignoreMulti) {\n var tmpStr = str.substring(0, 1);\n for (k = 0; k < arrRslt.length; k++) {\n arrRslt[k] += tmpStr;\n }\n } else {\n var tmpArr = arrRslt.slice(0);\n arrRslt = [];\n multiLen ++;\n for (k = 0; k < strlen; k++) {\n // 复制一个相同的arrRslt\n var tmp = tmpArr.slice(0);\n // 把当前字符str[k]添加到每个元素末尾\n for (var j = 0; j < tmp.length; j++) {\n tmp[j] += str.charAt(k);\n }\n // 把复制并修改后的数组连接到arrRslt上\n arrRslt = arrRslt.concat(tmp);\n }\n }\n }\n // BI-56386 这边直接将所有多音字组合拼接是有风险的,因为丢失了每一组的起始索引信息, 外部使用indexOf等方法会造成错位\n // 一旦错位就可能认为不符合条件, 但实际上还是有可能符合条件的,故此处以一个无法搜索的不可见字符作为连接\n return arrRslt.join(splitChar || \"\").toLowerCase();\n };\n\n _.extend(BI, {\n makeFirstPY: function (str, options) {\n options = options || {};\n if (typeof (str) !== \"string\") {return \"\" + str;}\n var arrResult = []; // 保存中间结果的数组\n for (var i = 0, len = str.length; i < len; i++) {\n // 获得unicode码\n var ch = str.charAt(i);\n // 检查该unicode码是否在处理范围之内,在则返回该码对映汉字的拼音首字母,不在则调用其它函数处理\n arrResult.push(_checkPYCh(ch));\n }\n // 处理arrResult,返回所有可能的拼音首字母串数组\n return _mkPYRslt(arrResult, options);\n }\n });\n})();","\n(function () {\n function defaultComparator (a, b) {\n return a < b;\n }\n\n BI.Heap = function (items, comparator) {\n this._items = items || [];\n this._size = this._items.length;\n this._comparator = comparator || defaultComparator;\n this._heapify();\n };\n\n BI.Heap.prototype = {\n constructor: BI.Heap,\n empty: function () {\n return this._size === 0;\n },\n\n pop: function () {\n if (this._size === 0) {\n return;\n }\n\n var elt = this._items[0];\n\n var lastElt = this._items.pop();\n this._size--;\n\n if (this._size > 0) {\n this._items[0] = lastElt;\n this._sinkDown(0);\n }\n\n return elt;\n },\n\n push: function (item) {\n this._items[this._size++] = item;\n this._bubbleUp(this._size - 1);\n },\n\n size: function () {\n return this._size;\n },\n\n peek: function () {\n if (this._size === 0) {\n return;\n }\n\n return this._items[0];\n },\n\n _heapify: function () {\n for (var index = Math.floor((this._size + 1) / 2); index >= 0; index--) {\n this._sinkDown(index);\n }\n },\n\n _bubbleUp: function (index) {\n var elt = this._items[index];\n while (index > 0) {\n var parentIndex = Math.floor((index + 1) / 2) - 1;\n var parentElt = this._items[parentIndex];\n\n // if parentElt < elt, stop\n if (this._comparator(parentElt, elt)) {\n return;\n }\n\n // swap\n this._items[parentIndex] = elt;\n this._items[index] = parentElt;\n index = parentIndex;\n }\n },\n\n _sinkDown: function (index) {\n var elt = this._items[index];\n\n while (true) {\n var leftChildIndex = 2 * (index + 1) - 1;\n var rightChildIndex = 2 * (index + 1);\n var swapIndex = -1;\n\n if (leftChildIndex < this._size) {\n var leftChild = this._items[leftChildIndex];\n if (this._comparator(leftChild, elt)) {\n swapIndex = leftChildIndex;\n }\n }\n\n if (rightChildIndex < this._size) {\n var rightChild = this._items[rightChildIndex];\n if (this._comparator(rightChild, elt)) {\n if (swapIndex === -1 ||\n this._comparator(rightChild, this._items[swapIndex])) {\n swapIndex = rightChildIndex;\n }\n }\n }\n\n // if we don't have a swap, stop\n if (swapIndex === -1) {\n return;\n }\n\n this._items[index] = this._items[swapIndex];\n this._items[swapIndex] = elt;\n index = swapIndex;\n }\n }\n };\n})();\n","\n!(function () {\n BI.LinkHashMap = function () {\n this.array = [];\n this.map = {};\n };\n BI.LinkHashMap.prototype = {\n constructor: BI.LinkHashMap,\n has: function (key) {\n if (key in this.map) {\n return true;\n }\n return false;\n },\n\n add: function (key, value) {\n if (typeof key === \"undefined\") {\n return;\n }\n if (key in this.map) {\n this.map[key] = value;\n } else {\n this.array.push(key);\n this.map[key] = value;\n }\n },\n\n remove: function (key) {\n if (key in this.map) {\n delete this.map[key];\n for (var i = 0; i < this.array.length; i++) {\n if (this.array[i] == key) {\n this.array.splice(i, 1);\n break;\n }\n }\n }\n },\n\n size: function () {\n return this.array.length;\n },\n\n each: function (fn, scope) {\n var scope = scope || window;\n var fn = fn || null;\n if (fn == null || typeof (fn) !== \"function\") {\n return;\n }\n for (var i = 0; i < this.array.length; i++) {\n var key = this.array[i];\n var value = this.map[key];\n var re = fn.call(scope, key, value, i, this.array, this.map);\n if (re == false) {\n break;\n }\n }\n },\n\n get: function (key) {\n return this.map[key];\n },\n\n toArray: function () {\n var array = [];\n this.each(function (key, value) {\n array.push(value);\n });\n return array;\n }\n };\n})();","\n!(function () {\n BI.LRU = function (limit) {\n this.size = 0;\n this.limit = limit;\n this.head = this.tail = undefined;\n this._keymap = {};\n };\n\n var p = BI.LRU.prototype;\n\n p.put = function (key, value) {\n var removed;\n if (this.size === this.limit) {\n removed = this.shift();\n }\n\n var entry = this.get(key, true);\n if (!entry) {\n entry = {\n key: key\n };\n this._keymap[key] = entry;\n if (this.tail) {\n this.tail.newer = entry;\n entry.older = this.tail;\n } else {\n this.head = entry;\n }\n this.tail = entry;\n this.size++;\n }\n entry.value = value;\n\n return removed;\n };\n\n p.shift = function () {\n var entry = this.head;\n if (entry) {\n this.head = this.head.newer;\n this.head.older = undefined;\n entry.newer = entry.older = undefined;\n this._keymap[entry.key] = undefined;\n this.size--;\n }\n return entry;\n };\n\n\n p.get = function (key, returnEntry) {\n var entry = this._keymap[key];\n if (entry === undefined) return;\n if (entry === this.tail) {\n return returnEntry\n ? entry\n : entry.value;\n }\n // HEAD--------------TAIL\n // <.older .newer>\n // <--- add direction --\n // A B C <D> E\n if (entry.newer) {\n if (entry === this.head) {\n this.head = entry.newer;\n }\n entry.newer.older = entry.older; // C <-- E.\n }\n if (entry.older) {\n entry.older.newer = entry.newer; // C. --> E\n }\n entry.newer = undefined; // D --x\n entry.older = this.tail; // D. --> E\n if (this.tail) {\n this.tail.newer = entry; // E. <-- D\n }\n this.tail = entry;\n return returnEntry\n ? entry\n : entry.value;\n };\n\n p.has = function (key) {\n return this._keymap[key] != null;\n };\n})();","// 线段树\n(function () {\n var parent = function (node) {\n return Math.floor(node / 2);\n };\n\n var Int32Array = _global.Int32Array || function (size) {\n var xs = [];\n for (var i = size - 1; i >= 0; --i) {\n xs[i] = 0;\n }\n return xs;\n };\n\n var ceilLog2 = function (x) {\n var y = 1;\n while (y < x) {\n y *= 2;\n }\n return y;\n };\n\n BI.PrefixIntervalTree = function (xs) {\n this._size = xs.length;\n this._half = ceilLog2(this._size);\n // _heap是一个_size两倍以上的堆\n this._heap = new Int32Array(2 * this._half);\n\n var i;\n // 初始化 >= _size 的堆空间, 即叶子节点\n for (i = 0; i < this._size; ++i) {\n this._heap[this._half + i] = xs[i];\n }\n // 初始化 < _size 的堆空间, 即非叶子节点,根节点包含整个区间\n for (i = this._half - 1; i > 0; --i) {\n this._heap[i] = this._heap[2 * i] + this._heap[2 * i + 1];\n }\n };\n\n BI.PrefixIntervalTree.prototype = {\n constructor: BI.PrefixIntervalTree,\n // 往_half之后的空间set值,需要更新其所有祖先节点的值\n set: function (index, value) {\n var node = this._half + index;\n this._heap[node] = value;\n\n node = parent(node);\n for (; node !== 0; node = parent(node)) {\n this._heap[node] =\n this._heap[2 * node] + this._heap[2 * node + 1];\n }\n },\n\n get: function (index) {\n var node = this._half + index;\n return this._heap[node];\n },\n\n getSize: function () {\n return this._size;\n },\n\n /**\n * get(0) + get(1) + ... + get(end - 1).\n */\n sumUntil: function (end) {\n if (end === 0) {\n return 0;\n }\n\n var node = this._half + end - 1;\n var sum = this._heap[node];\n for (; node !== 1; node = parent(node)) {\n if (node % 2 === 1) {\n sum += this._heap[node - 1];\n }\n }\n\n return sum;\n },\n\n /**\n * get(0) + get(1) + ... + get(inclusiveEnd).\n */\n sumTo: function (inclusiveEnd) {\n return this.sumUntil(inclusiveEnd + 1);\n },\n\n /**\n * sum get(begin) + get(begin + 1) + ... + get(end - 1).\n */\n sum: function (begin, end) {\n return this.sumUntil(end) - this.sumUntil(begin);\n },\n\n /**\n * Returns the smallest i such that 0 <= i <= size and sumUntil(i) <= t, or\n * -1 if no such i exists.\n */\n greatestLowerBound: function (t) {\n if (t < 0) {\n return -1;\n }\n\n var node = 1;\n if (this._heap[node] <= t) {\n return this._size;\n }\n\n while (node < this._half) {\n var leftSum = this._heap[2 * node];\n if (t < leftSum) {\n node = 2 * node;\n } else {\n node = 2 * node + 1;\n t -= leftSum;\n }\n }\n\n return node - this._half;\n },\n\n /**\n * Returns the smallest i such that 0 <= i <= size and sumUntil(i) < t, or\n * -1 if no such i exists.\n */\n greatestStrictLowerBound: function (t) {\n if (t <= 0) {\n return -1;\n }\n\n var node = 1;\n if (this._heap[node] < t) {\n return this._size;\n }\n\n while (node < this._half) {\n var leftSum = this._heap[2 * node];\n if (t <= leftSum) {\n node = 2 * node;\n } else {\n node = 2 * node + 1;\n t -= leftSum;\n }\n }\n\n return node - this._half;\n },\n\n /**\n * Returns the smallest i such that 0 <= i <= size and t <= sumUntil(i), or\n * size + 1 if no such i exists.\n */\n leastUpperBound: function (t) {\n return this.greatestStrictLowerBound(t) + 1;\n },\n\n /**\n * Returns the smallest i such that 0 <= i <= size and t < sumUntil(i), or\n * size + 1 if no such i exists.\n */\n leastStrictUpperBound: function (t) {\n return this.greatestLowerBound(t) + 1;\n }\n };\n\n BI.PrefixIntervalTree.uniform = function (size, initialValue) {\n var xs = [];\n for (var i = size - 1; i >= 0; --i) {\n xs[i] = initialValue;\n }\n\n return new BI.PrefixIntervalTree(xs);\n };\n\n BI.PrefixIntervalTree.empty = function (size) {\n return BI.PrefixIntervalTree.uniform(size, 0);\n };\n\n})();\n","\n!(function () {\n BI.Queue = function (capacity) {\n this.capacity = capacity;\n this.array = [];\n };\n BI.Queue.prototype = {\n constructor: BI.Queue,\n\n contains: function (v) {\n return BI.contains(this.array, v);\n },\n\n indexOf: function (v) {\n return BI.contains(this.array, v);\n },\n\n getElementByIndex: function (index) {\n return this.array[index];\n },\n\n push: function (v) {\n this.array.push(v);\n if (this.capacity && this.array.length > this.capacity) {\n this.array.shift();\n }\n },\n\n pop: function () {\n this.array.pop();\n },\n\n shift: function () {\n this.array.shift();\n },\n\n unshift: function (v) {\n this.array.unshift(v);\n if (this.capacity && this.array.length > this.capacity) {\n this.array.pop();\n }\n },\n\n remove: function (v) {\n BI.remove(this.array, v);\n },\n\n splice: function () {\n this.array.splice.apply(this.array, arguments);\n },\n\n slice: function () {\n this.array.slice.apply(this.array, arguments);\n },\n\n size: function () {\n return this.array.length;\n },\n\n each: function (fn, scope) {\n var scope = scope || window;\n var fn = fn || null;\n if (fn == null || typeof (fn) !== \"function\") {\n return;\n }\n for (var i = 0; i < this.array.length; i++) {\n var re = fn.call(scope, i, this.array[i], this.array);\n if (re == false) {\n break;\n }\n }\n },\n\n toArray: function () {\n return this.array;\n },\n\n fromArray: function (array) {\n var self = this;\n BI.each(array, function (i, v) {\n self.push(v);\n });\n },\n\n clear: function () {\n this.array.length = 0;\n }\n };\n})();","!(function () {\n var Section = function (height, width, x, y) {\n this.height = height;\n this.width = width;\n this.x = x;\n this.y = y;\n\n this._indexMap = {};\n this._indices = [];\n };\n\n Section.prototype = {\n constructor: Section,\n addCellIndex: function (index) {\n if (!this._indexMap[index]) {\n this._indexMap[index] = true;\n this._indices.push(index);\n }\n },\n\n getCellIndices: function () {\n return this._indices;\n }\n };\n\n var SECTION_SIZE = 100;\n BI.SectionManager = function (sectionSize) {\n this._sectionSize = sectionSize || SECTION_SIZE;\n this._cellMetadata = [];\n this._sections = {};\n };\n\n BI.SectionManager.prototype = {\n constructor: BI.SectionManager,\n getCellIndices: function (height, width, x, y) {\n var indices = {};\n\n BI.each(this.getSections(height, width, x, y), function (i, section) {\n BI.each(section.getCellIndices(), function (j, index) {\n indices[index] = index;\n });\n });\n\n return BI.map(BI.keys(indices), function (i, index) {\n return indices[index];\n });\n },\n\n getCellMetadata: function (index) {\n return this._cellMetadata[index];\n },\n\n getSections: function (height, width, x, y) {\n var sectionXStart = Math.floor(x / this._sectionSize);\n var sectionXStop = Math.floor((x + width - 1) / this._sectionSize);\n var sectionYStart = Math.floor(y / this._sectionSize);\n var sectionYStop = Math.floor((y + height - 1) / this._sectionSize);\n\n var sections = [];\n\n for (var sectionX = sectionXStart; sectionX <= sectionXStop; sectionX++) {\n for (var sectionY = sectionYStart; sectionY <= sectionYStop; sectionY++) {\n var key = sectionX + \".\" + sectionY;\n\n if (!this._sections[key]) {\n this._sections[key] = new Section(this._sectionSize, this._sectionSize, sectionX * this._sectionSize, sectionY * this._sectionSize);\n }\n\n sections.push(this._sections[key]);\n }\n }\n\n return sections;\n },\n\n getTotalSectionCount: function () {\n return BI.size(this._sections);\n },\n\n registerCell: function (cellMetadatum, index) {\n this._cellMetadata[index] = cellMetadatum;\n\n BI.each(this.getSections(cellMetadatum.height, cellMetadatum.width, cellMetadatum.x, cellMetadatum.y), function (i, section) {\n section.addCellIndex(index);\n });\n }\n };\n})();","(function () {\n BI.Tree = function () {\n this.root = new BI.Node(BI.UUID());\n };\n\n BI.Tree.prototype = {\n constructor: BI.Tree,\n addNode: function (node, newNode, index) {\n if (BI.isNull(newNode)) {\n this.root.addChild(node, index);\n } else if (BI.isNull(node)) {\n this.root.addChild(newNode, index);\n } else {\n node.addChild(newNode, index);\n }\n },\n\n isRoot: function (node) {\n return node === this.root;\n },\n\n getRoot: function () {\n return this.root;\n },\n\n clear: function () {\n this.root.clear();\n },\n\n initTree: function (nodes) {\n var self = this;\n this.clear();\n var queue = [];\n BI.each(nodes, function (i, node) {\n var n = new BI.Node(node);\n n.set(\"data\", node);\n self.addNode(n);\n queue.push(n);\n });\n while (!BI.isEmpty(queue)) {\n var parent = queue.shift();\n var node = parent.get(\"data\");\n BI.each(node.children, function (i, child) {\n var n = new BI.Node(child);\n n.set(\"data\", child);\n queue.push(n);\n self.addNode(parent, n);\n });\n }\n },\n\n _toJSON: function (node) {\n var self = this;\n var children = [];\n BI.each(node.getChildren(), function (i, child) {\n children.push(self._toJSON(child));\n });\n return BI.extend({\n id: node.id\n }, BI.deepClone(node.get(\"data\")), (children.length > 0 ? {\n children: children\n } : {}));\n },\n\n toJSON: function (node) {\n var self = this, result = [];\n BI.each((node || this.root).getChildren(), function (i, child) {\n result.push(self._toJSON(child));\n });\n return result;\n },\n\n _toJSONWithNode: function (node) {\n var self = this;\n var children = [];\n BI.each(node.getChildren(), function (i, child) {\n children.push(self._toJSONWithNode(child));\n });\n return BI.extend({\n id: node.id\n }, BI.deepClone(node.get(\"data\")), {\n node: node\n }, (children.length > 0 ? {\n children: children\n } : {}));\n },\n\n toJSONWithNode: function (node) {\n var self = this, result = [];\n BI.each((node || this.root).getChildren(), function (i, child) {\n result.push(self._toJSONWithNode(child));\n });\n return result;\n },\n\n search: function (root, target, param) {\n if (!(root instanceof BI.Node)) {\n return arguments.callee.apply(this, [this.root, root, target]);\n }\n var self = this, next = null;\n\n if (BI.isNull(target)) {\n return null;\n }\n if (BI.isEqual(root[param || \"id\"], target)) {\n return root;\n }\n BI.any(root.getChildren(), function (i, child) {\n next = self.search(child, target, param);\n if (null !== next) {\n return true;\n }\n });\n return next;\n },\n\n _traverse: function (node, callback) {\n var queue = [];\n queue.push(node);\n while (!BI.isEmpty(queue)) {\n var temp = queue.shift();\n var b = callback && callback(temp);\n if (b === false) {\n break;\n }\n if (b === true) {\n continue;\n }\n if (temp != null) {\n queue = queue.concat(temp.getChildren());\n }\n }\n },\n\n traverse: function (callback) {\n this._traverse(this.root, callback);\n },\n\n _recursion: function (node, route, callback) {\n var self = this;\n return BI.every(node.getChildren(), function (i, child) {\n var next = BI.clone(route);\n next.push(child.id);\n var b = callback && callback(child, next);\n if (b === false) {\n return false;\n }\n if (b === true) {\n return true;\n }\n return self._recursion(child, next, callback);\n });\n },\n\n recursion: function (callback) {\n this._recursion(this.root, [], callback);\n },\n\n inOrderTraverse: function (callback) {\n this._inOrderTraverse(this.root, callback);\n },\n\n // 中序遍历(递归)\n _inOrderTraverse: function (node, callback) {\n if (node != null) {\n this._inOrderTraverse(node.getLeft());\n callback && callback(node);\n this._inOrderTraverse(node.getRight());\n }\n },\n\n // 中序遍历(非递归)\n nrInOrderTraverse: function (callback) {\n\n var stack = [];\n var node = this.root;\n while (node != null || !BI.isEmpty(stack)) {\n while (node != null) {\n stack.push(node);\n node = node.getLeft();\n }\n node = stack.pop();\n callback && callback(node);\n node = node.getRight();\n }\n },\n\n preOrderTraverse: function (callback) {\n this._preOrderTraverse(this.root, callback);\n },\n\n // 先序遍历(递归)\n _preOrderTraverse: function (node, callback) {\n if (node != null) {\n callback && callback(node);\n this._preOrderTraverse(node.getLeft());\n this._preOrderTraverse(node.getRight());\n }\n },\n\n // 先序遍历(非递归)\n nrPreOrderTraverse: function (callback) {\n\n var stack = [];\n var node = this.root;\n\n while (node != null || !BI.isEmpty(stack)) {\n\n while (node != null) {\n callback && callback(node);\n stack.push(node);\n node = node.getLeft();\n }\n node = stack.pop();\n node = node.getRight();\n }\n },\n\n postOrderTraverse: function (callback) {\n this._postOrderTraverse(this.root, callback);\n },\n\n // 后序遍历(递归)\n _postOrderTraverse: function (node, callback) {\n if (node != null) {\n this._postOrderTraverse(node.getLeft());\n this._postOrderTraverse(node.getRight());\n callback && callback(node);\n }\n },\n\n // 后续遍历(非递归)\n nrPostOrderTraverse: function (callback) {\n\n var stack = [];\n var node = this.root;\n var preNode = null;// 表示最近一次访问的节点\n\n while (node != null || !BI.isEmpty(stack)) {\n\n while (node != null) {\n stack.push(node);\n node = node.getLeft();\n }\n\n node = BI.last(stack);\n\n if (node.getRight() == null || node.getRight() == preNode) {\n callback && callback(node);\n node = stack.pop();\n preNode = node;\n node = null;\n } else {\n node = node.getRight();\n }\n }\n }\n };\n\n BI.Node = function (id) {\n if (BI.isObject(id)) {\n BI.extend(this, id);\n } else {\n this.id = id;\n }\n this.clear.apply(this, arguments);\n };\n\n BI.Node.prototype = {\n constructor: BI.Node,\n\n set: function (key, value) {\n if (BI.isObject(key)) {\n BI.extend(this, key);\n return;\n }\n this[key] = value;\n },\n\n get: function (key) {\n return this[key];\n },\n\n isLeaf: function () {\n return BI.isEmpty(this.children);\n },\n\n getChildren: function () {\n return this.children;\n },\n\n getChildrenLength: function () {\n return this.children.length;\n },\n\n getFirstChild: function () {\n return BI.first(this.children);\n },\n\n getLastChild: function () {\n return BI.last(this.children);\n },\n\n setLeft: function (left) {\n this.left = left;\n },\n\n getLeft: function () {\n return this.left;\n },\n\n setRight: function (right) {\n this.right = right;\n },\n\n getRight: function () {\n return this.right;\n },\n\n setParent: function (parent) {\n this.parent = parent;\n },\n\n getParent: function () {\n return this.parent;\n },\n\n getChild: function (index) {\n return this.children[index];\n },\n\n getChildIndex: function (id) {\n return BI.findIndex(this.children, function (i, ch) {\n return ch.get(\"id\") === id;\n });\n },\n\n removeChild: function (id) {\n this.removeChildByIndex(this.getChildIndex(id));\n },\n\n removeChildByIndex: function (index) {\n var before = this.getChild(index - 1);\n var behind = this.getChild(index + 1);\n if (before != null) {\n before.setRight(behind || null);\n }\n if (behind != null) {\n behind.setLeft(before || null);\n }\n this.children.splice(index, 1);\n },\n\n removeAllChilds: function () {\n this.children = [];\n },\n\n addChild: function (child, index) {\n var cur = null;\n if (BI.isUndefined(index)) {\n cur = this.children.length - 1;\n } else {\n cur = index - 1;\n }\n child.setParent(this);\n if (cur >= 0) {\n this.getChild(cur) && this.getChild(cur).setRight(child);\n child.setLeft(this.getChild(cur));\n }\n if (BI.isUndefined(index)) {\n this.children.push(child);\n } else {\n this.children.splice(index, 0, child);\n }\n },\n\n equals: function (obj) {\n return this === obj || this.id === obj.id;\n },\n\n clear: function () {\n this.parent = null;\n this.left = null;\n this.right = null;\n this.children = [];\n }\n };\n\n BI.extend(BI.Tree, {\n transformToArrayFormat: function (nodes, pId) {\n if (!nodes) return [];\n var r = [];\n if (BI.isArray(nodes)) {\n for (var i = 0, l = nodes.length; i < l; i++) {\n var node = BI.clone(nodes[i]);\n node.pId = node.pId == null ? pId : node.pId;\n delete node.children;\n r.push(node);\n if (nodes[i][\"children\"]) {\n r = r.concat(BI.Tree.transformToArrayFormat(nodes[i][\"children\"], node.id));\n }\n }\n } else {\n var newNodes = BI.clone(nodes);\n newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;\n delete newNodes.children;\n r.push(newNodes);\n if (nodes[\"children\"]) {\n r = r.concat(BI.Tree.transformToArrayFormat(nodes[\"children\"], newNodes.id));\n }\n }\n return r;\n },\n\n arrayFormat: function (nodes, pId) {\n if (!nodes) {\n return [];\n }\n var r = [];\n if (BI.isArray(nodes)) {\n for (var i = 0, l = nodes.length; i < l; i++) {\n var node = nodes[i];\n node.pId = node.pId == null ? pId : node.pId;\n r.push(node);\n if (nodes[i][\"children\"]) {\n r = r.concat(BI.Tree.arrayFormat(nodes[i][\"children\"], node.id));\n }\n }\n } else {\n var newNodes = nodes;\n newNodes.pId = newNodes.pId == null ? pId : newNodes.pId;\n r.push(newNodes);\n if (nodes[\"children\"]) {\n r = r.concat(BI.Tree.arrayFormat(nodes[\"children\"], newNodes.id));\n }\n }\n return r;\n },\n\n transformToTreeFormat: function (sNodes) {\n var i, l;\n if (!sNodes) {\n return [];\n }\n\n if (BI.isArray(sNodes)) {\n var r = [];\n var tmpMap = {};\n for (i = 0, l = sNodes.length; i < l; i++) {\n if (BI.isNull(sNodes[i].id)) {\n return sNodes;\n }\n tmpMap[sNodes[i].id] = BI.clone(sNodes[i]);\n }\n for (i = 0, l = sNodes.length; i < l; i++) {\n if (tmpMap[sNodes[i].pId] && sNodes[i].id !== sNodes[i].pId) {\n if (!tmpMap[sNodes[i].pId].children) {\n tmpMap[sNodes[i].pId].children = [];\n }\n tmpMap[sNodes[i].pId].children.push(tmpMap[sNodes[i].id]);\n } else {\n r.push(tmpMap[sNodes[i].id]);\n }\n delete tmpMap[sNodes[i].id].pId;\n }\n return r;\n }\n return [sNodes];\n \n },\n\n treeFormat: function (sNodes) {\n var i, l;\n if (!sNodes) {\n return [];\n }\n\n if (BI.isArray(sNodes)) {\n var r = [];\n var tmpMap = {};\n for (i = 0, l = sNodes.length; i < l; i++) {\n if (BI.isNull(sNodes[i].id)) {\n return sNodes;\n }\n tmpMap[sNodes[i].id] = sNodes[i];\n }\n for (i = 0, l = sNodes.length; i < l; i++) {\n if (tmpMap[sNodes[i].pId] && sNodes[i].id !== sNodes[i].pId) {\n if (!tmpMap[sNodes[i].pId].children) {\n tmpMap[sNodes[i].pId].children = [];\n }\n tmpMap[sNodes[i].pId].children.push(tmpMap[sNodes[i].id]);\n } else {\n r.push(tmpMap[sNodes[i].id]);\n }\n }\n return r;\n }\n return [sNodes];\n \n },\n\n traversal: function (array, callback) {\n if (BI.isNull(array)) {\n return;\n }\n var self = this;\n BI.some(array, function (i, item) {\n if (callback(i, item) === false) {\n return true;\n }\n self.traversal(item.children, callback);\n });\n }\n });\n})();","// 向量操作\nBI.Vector = function (x, y) {\n this.x = x;\n this.y = y;\n};\nBI.Vector.prototype = {\n constructor: BI.Vector,\n cross: function (v) {\n return (this.x * v.y - this.y * v.x);\n },\n length: function (v) {\n return (Math.sqrt(this.x * v.x + this.y * v.y));\n }\n};\nBI.Region = function (x, y, w, h) {\n this.x = x;\n this.y = y;\n this.w = w;\n this.h = h;\n};\nBI.Region.prototype = {\n constructor: BI.Region,\n // 判断两个区域是否相交,若相交,则要么顶点互相包含,要么矩形边界(或对角线)相交\n isIntersects: function (obj) {\n if (this.isPointInside(obj.x, obj.y) ||\n this.isPointInside(obj.x + obj.w, obj.y) ||\n this.isPointInside(obj.x, obj.y + obj.h) ||\n this.isPointInside(obj.x + obj.w, obj.y + obj.h)) {\n return true;\n } else if (obj.isPointInside(this.x, this.y) ||\n obj.isPointInside(this.x + this.w, this.y) ||\n obj.isPointInside(this.x, this.y + this.h) ||\n obj.isPointInside(this.x + this.w, this.y + this.h)) {\n return true;\n } else if (obj.x != null && obj.y != null)// 判断矩形对角线相交 |v1 X v2||v1 X v3| < 0\n {\n var vector1 = new BI.Vector(this.w, this.h);// 矩形对角线向量\n var vector2 = new BI.Vector(obj.x - this.x, obj.y - this.y);\n var vector3 = new BI.Vector(vector2.x + obj.w, vector2.y + obj.h);\n if ((vector1.cross(vector2) * vector1.cross(vector3)) < 0) {\n return true;\n }\n }\n return false;\n },\n // 判断一个点是否在这个区域内部\n isPointInside: function (x, y) {\n if (this.x == null || this.y == null) {\n return false;\n }\n if (x >= this.x && x <= this.x + this.w && y >= this.y && y <= this.y + this.h) {\n return true;\n }\n return false;\n },\n // 返回区域的重心,因为是矩形所以返回中点\n getPosition: function () {\n var pos = [];\n pos.push(this.x + this.w / 2);\n pos.push(this.y + this.h / 2);\n return pos;\n }\n};","(function () {\n var _global;\n if (typeof window !== \"undefined\") {\n _global = window;\n } else if (typeof global !== \"undefined\") {\n _global = global;\n } else if (typeof self !== \"undefined\") {\n _global = self;\n } else {\n _global = this;\n }\n if (!_global.BI) {\n _global.BI = {};\n }\n\n function isEmpty (value) {\n // 判断是否为空值\n var result = value === \"\" || value === null || value === undefined;\n return result;\n }\n\n // 判断是否是无效的日期\n function isInvalidDate (date) {\n return date == \"Invalid Date\" || date == \"NaN\";\n }\n\n /**\n * CHART-1400\n * 使用数值计算的方式来获取任意数值的科学技术表示值。\n * 科学计数格式\n */\n function _eFormat (text, fmt) {\n text = +text;\n\n return eFormat(text, fmt);\n\n /**\n * 科学计数格式具体计算过程\n * @param num\n * @param format {String}有两种形式,\n * 1、\"0.00E00\"这样的字符串表示正常的科学计数表示,只不过规定了数值精确到百分位,\n * 而数量级的绝对值如果是10以下的时候在前面补零。\n * 2、 \"##0.0E0\"这样的字符串则规定用科学计数法表示之后的数值的整数部分是三位,精确到十分位,\n * 数量级没有规定,因为没见过实数里有用科学计数法表示之后E的后面会小于一位的情况(0无所谓)。\n * @returns {*}\n */\n function eFormat (num, format) {\n var neg = num < 0 ? (num *= -1, \"-\") : \"\",\n magnitudeNeg = \"\";\n\n var funcName = num > 0 && num < 1 ? \"floor\" : \"ceil\"; // -0.9999->-1\n // 数量级\n var magnitude = Math[funcName](Math.log(num) / Math.log(10));\n\n if (!isFinite(magnitude)) {\n return format.replace(/#/ig, \"\").replace(/\\.e/ig, \"E\");\n }\n\n num = num / Math.pow(10, magnitude);\n\n // 让num转化成[1, 10)区间上的数\n if (num > 0 && num < 1) {\n num *= 10;\n magnitude -= 1;\n }\n\n // 计算出format中需要显示的整数部分的位数,然后更新这个数值,也更新数量级\n var integerLen = getInteger(magnitude, format);\n integerLen > 1 && (magnitude -= integerLen - 1, num *= Math.pow(10, integerLen - 1));\n\n magnitude < 0 && (magnitudeNeg = \"-\", magnitude *= -1);\n\n // 获取科学计数法精确到的位数\n var precision = getPrecision(format);\n // 判断num经过四舍五入之后是否有进位\n var isValueCarry = isValueCarried(num);\n\n num *= Math.pow(10, precision);\n num = Math.round(num);\n // 如果出现进位的情况,将num除以10\n isValueCarry && (num /= 10, magnitude += magnitudeNeg === \"-\" ? -1 : 1);\n num /= Math.pow(10, precision);\n\n // 小数部分保留precision位\n num = num.toFixed(precision);\n // 格式化指数的部分\n magnitude = formatExponential(format, magnitude, magnitudeNeg);\n\n return neg + num + \"E\" + magnitude;\n }\n\n // 获取format格式规定的数量级的形式\n function formatExponential (format, num, magnitudeNeg) {\n num += \"\";\n if (!/e/ig.test(format)) {\n return num;\n }\n format = format.split(/e/ig)[1];\n\n while (num.length < format.length) {\n num = \"0\" + num;\n }\n\n // 如果magnitudeNeg是一个\"-\",而且num正好全是0,那么就别显示负号了\n var isAllZero = true;\n for (var i = 0, len = num.length; i < len; i++) {\n if (!isAllZero) {\n continue;\n }\n isAllZero = num.charAt(i) === \"0\";\n }\n magnitudeNeg = isAllZero ? \"\" : magnitudeNeg;\n\n return magnitudeNeg + num;\n }\n\n // 获取format规定的科学计数法精确到的位数\n function getPrecision (format) {\n if (!/e/ig.test(format)) {\n return 0;\n }\n var arr = format.split(/e/ig)[0].split(\".\");\n\n return arr.length > 1 ? arr[1].length : 0;\n }\n\n // 获取数值科学计数法表示之后整数的位数\n // 这边我们还需要考虑#和0的问题\n function getInteger (magnitude, format) {\n if (!/e/ig.test(format)) {\n return 0;\n }\n // return format.split(/e/ig)[0].split(\".\")[0].length;\n\n var formatLeft = format.split(/e/ig)[0].split(\".\")[0], i, f, len = formatLeft.length;\n var valueLeftLen = 0;\n\n for (i = 0; i < len; i++) {\n f = formatLeft.charAt(i);\n // \"#\"所在的位置到末尾长度小于等于值的整数部分长度,那么这个#才可以占位\n if (f == 0 || (f == \"#\" && (len - i <= magnitude + 1))) {\n valueLeftLen++;\n }\n }\n\n return valueLeftLen;\n }\n\n // 判断num通过round函数之后是否有进位\n function isValueCarried (num) {\n var roundNum = Math.round(num);\n num = (num + \"\").split(\".\")[0];\n roundNum = (roundNum + \"\").split(\".\")[0];\n return num.length !== roundNum.length;\n }\n }\n\n //'#.##'之类的格式处理 1.324e-18 这种的科学数字\n function _dealNumberPrecision (text, fright) {\n if (/[eE]/.test(text)) {\n var precision = 0, i = 0, ch;\n\n if (/[%‰]$/.test(fright)) {\n precision = /[%]$/.test(fright) ? 2 : 3;\n }\n\n for (var len = fright.length; i < len; i++) {\n if ((ch = fright.charAt(i)) == \"0\" || ch == \"#\") {\n precision++;\n }\n }\n return Number(text).toFixed(precision);\n }\n\n return text;\n }\n\n /**\n * 数字格式\n */\n function _numberFormat (text, format) {\n var text = text + \"\";\n\n //在调用数字格式的时候如果text里没有任何数字则不处理\n if (!(/[0-9]/.test(text)) || !format) {\n return text;\n }\n\n // 数字格式,区分正负数\n var numMod = format.indexOf(\";\");\n if (numMod > -1) {\n if (text >= 0) {\n return _numberFormat(text + \"\", format.substring(0, numMod));\n }\n return _numberFormat((-text) + \"\", format.substr(numMod + 1));\n\n } else {\n // 兼容格式处理负数的情况(copy:fr-jquery.format.js)\n if (+text < 0 && format.charAt(0) !== \"-\") {\n return _numberFormat((-text) + \"\", \"-\" + format);\n }\n }\n\n var fp = format.split(\".\"), fleft = fp[0] || \"\", fright = fp[1] || \"\";\n text = _dealNumberPrecision(text, fright);\n var tp = text.split(\".\"), tleft = tp[0] || \"\", tright = tp[1] || \"\";\n\n // 百分比,千分比的小数点移位处理\n if (/[%‰]$/.test(format)) {\n var paddingZero = /[%]$/.test(format) ? \"00\" : \"000\";\n tright += paddingZero;\n tleft += tright.substr(0, paddingZero.length);\n tleft = tleft.replace(/^0+/gi, \"\");\n tright = tright.substr(paddingZero.length).replace(/0+$/gi, \"\");\n }\n var right = _dealWithRight(tright, fright);\n if (right.leftPlus) {\n // 小数点后有进位\n tleft = parseInt(tleft) + 1 + \"\";\n\n tleft = isNaN(tleft) ? \"1\" : tleft;\n }\n right = right.num;\n var left = _dealWithLeft(tleft, fleft);\n if (!(/[0-9]/.test(left))) {\n left = left + \"0\";\n }\n if (!(/[0-9]/.test(right))) {\n return left + right;\n } else {\n return left + \".\" + right;\n }\n }\n\n /**\n * 处理小数点右边小数部分\n * @param tright 右边内容\n * @param fright 右边格式\n * @returns {JSON} 返回处理结果和整数部分是否需要进位\n * @private\n */\n function _dealWithRight (tright, fright) {\n var right = \"\", j = 0, i = 0;\n for (var len = fright.length; i < len; i++) {\n var ch = fright.charAt(i);\n var c = tright.charAt(j);\n switch (ch) {\n case \"0\":\n if (isEmpty(c)) {\n c = \"0\";\n }\n right += c;\n j++;\n break;\n case \"#\":\n right += c;\n j++;\n break;\n default :\n right += ch;\n break;\n }\n }\n var rll = tright.substr(j);\n var result = {};\n if (!isEmpty(rll) && rll.charAt(0) > 4) {\n // 有多余字符,需要四舍五入\n result.leftPlus = true;\n var numReg = right.match(/^[0-9]+/);\n if (numReg) {\n var num = numReg[0];\n var orilen = num.length;\n var newnum = parseInt(num) + 1 + \"\";\n // 进位到整数部分\n if (newnum.length > orilen) {\n newnum = newnum.substr(1);\n } else {\n newnum = BI.leftPad(newnum, orilen, \"0\");\n result.leftPlus = false;\n }\n right = right.replace(/^[0-9]+/, newnum);\n }\n }\n result.num = right;\n return result;\n }\n\n /**\n * 处理小数点左边整数部分\n * @param tleft 左边内容\n * @param fleft 左边格式\n * @returns {string} 返回处理结果\n * @private\n */\n function _dealWithLeft (tleft, fleft) {\n var left = \"\";\n var j = tleft.length - 1;\n var combo = -1, last = -1;\n var i = fleft.length - 1;\n for (; i >= 0; i--) {\n var ch = fleft.charAt(i);\n var c = tleft.charAt(j);\n switch (ch) {\n case \"0\":\n if (isEmpty(c)) {\n c = \"0\";\n }\n last = -1;\n left = c + left;\n j--;\n break;\n case \"#\":\n last = i;\n left = c + left;\n j--;\n break;\n case \",\":\n if (!isEmpty(c)) {\n // 计算一个,分隔区间的长度\n var com = fleft.match(/,[#0]+/);\n if (com) {\n combo = com[0].length - 1;\n }\n left = \",\" + left;\n }\n break;\n default :\n left = ch + left;\n break;\n }\n }\n if (last > -1) {\n // 处理剩余字符\n var tll = tleft.substr(0, j + 1);\n left = left.substr(0, last) + tll + left.substr(last);\n }\n if (combo > 0) {\n // 处理,分隔区间\n var res = left.match(/[0-9]+,/);\n if (res) {\n res = res[0];\n var newstr = \"\", n = res.length - 1 - combo;\n for (; n >= 0; n = n - combo) {\n newstr = res.substr(n, combo) + \",\" + newstr;\n }\n var lres = res.substr(0, n + combo);\n if (!isEmpty(lres)) {\n newstr = lres + \",\" + newstr;\n }\n }\n left = left.replace(/[0-9]+,/, newstr);\n }\n return left;\n }\n\n\n BI.cjkEncode = function (text) {\n // alex:如果非字符串,返回其本身(cjkEncode(234) 返回 \"\"是不对的)\n if (typeof text !== \"string\") {\n return text;\n }\n\n var newText = \"\";\n for (var i = 0; i < text.length; i++) {\n var code = text.charCodeAt(i);\n if (code >= 128 || code === 91 || code === 93) {// 91 is \"[\", 93 is \"]\".\n newText += \"[\" + code.toString(16) + \"]\";\n } else {\n newText += text.charAt(i);\n }\n }\n\n return newText;\n };\n\n /**\n * 将cjkEncode处理过的字符串转化为原始字符串\n *\n * @static\n * @param text 需要做解码的字符串\n * @return {String} 解码后的字符串\n */\n BI.cjkDecode = function (text) {\n if (text == null) {\n return \"\";\n }\n // 查找没有 \"[\", 直接返回. kunsnat:数字的时候, 不支持indexOf方法, 也是直接返回.\n if (!isNaN(text) || text.indexOf(\"[\") == -1) {\n return text;\n }\n\n var newText = \"\";\n for (var i = 0; i < text.length; i++) {\n var ch = text.charAt(i);\n if (ch == \"[\") {\n var rightIdx = text.indexOf(\"]\", i + 1);\n if (rightIdx > i + 1) {\n var subText = text.substring(i + 1, rightIdx);\n // james:主要是考虑[CDATA[]]这样的值的出现\n if (subText.length > 0) {\n ch = String.fromCharCode(eval(\"0x\" + subText));\n }\n\n i = rightIdx;\n }\n }\n\n newText += ch;\n }\n\n return newText;\n };\n\n // replace the html special tags\n var SPECIAL_TAGS = {\n \"&\": \"&amp;\",\n \"\\\"\": \"&quot;\",\n \"<\": \"&lt;\",\n \">\": \"&gt;\"\n };\n BI.htmlEncode = function (text) {\n return BI.isNull(text) ? \"\" : BI.replaceAll(text + \"\", \"&|\\\"|<|>\", function (v) {\n return SPECIAL_TAGS[v] ? SPECIAL_TAGS[v] : \"&nbsp;\";\n });\n };\n // html decode\n BI.htmlDecode = function (text) {\n return BI.isNull(text) ? \"\" : BI.replaceAll(text + \"\", \"&amp;|&quot;|&lt;|&gt;|&nbsp;\", function (v) {\n switch (v) {\n case \"&amp;\":\n return \"&\";\n case \"&quot;\":\n return \"\\\"\";\n case \"&lt;\":\n return \"<\";\n case \"&gt;\":\n return \">\";\n case \"&nbsp;\":\n default:\n return \" \";\n }\n });\n };\n\n BI.cjkEncodeDO = function (o) {\n if (BI.isPlainObject(o)) {\n var result = {};\n _.each(o, function (v, k) {\n if (!(typeof v === \"string\")) {\n v = BI.jsonEncode(v);\n }\n // wei:bug 43338,如果key是中文,cjkencode后o的长度就加了1,ie9以下版本死循环,所以新建对象result。\n k = BI.cjkEncode(k);\n result[k] = BI.cjkEncode(v);\n });\n return result;\n }\n return o;\n };\n\n BI.jsonEncode = function (o) {\n // james:这个Encode是抄的EXT的\n var useHasOwn = !!{}.hasOwnProperty;\n\n // crashes Safari in some instances\n // var validRE = /^(\"(\\\\.|[^\"\\\\\\n\\r])*?\"|[,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t])+?$/;\n\n var m = {\n \"\\b\": \"\\\\b\",\n \"\\t\": \"\\\\t\",\n \"\\n\": \"\\\\n\",\n \"\\f\": \"\\\\f\",\n \"\\r\": \"\\\\r\",\n \"\\\"\": \"\\\\\\\"\",\n \"\\\\\": \"\\\\\\\\\"\n };\n\n var encodeString = function (s) {\n if (/[\"\\\\\\x00-\\x1f]/.test(s)) {\n return \"\\\"\" + s.replace(/([\\x00-\\x1f\\\\\"])/g, function (a, b) {\n var c = m[b];\n if (c) {\n return c;\n }\n c = b.charCodeAt();\n return \"\\\\u00\" +\n Math.floor(c / 16).toString(16) +\n (c % 16).toString(16);\n }) + \"\\\"\";\n }\n return \"\\\"\" + s + \"\\\"\";\n };\n\n var encodeArray = function (o) {\n var a = [\"[\"], b, i, l = o.length, v;\n for (i = 0; i < l; i += 1) {\n v = o[i];\n switch (typeof v) {\n case \"undefined\":\n case \"function\":\n case \"unknown\":\n break;\n default:\n if (b) {\n a.push(\",\");\n }\n a.push(v === null ? \"null\" : BI.jsonEncode(v));\n b = true;\n }\n }\n a.push(\"]\");\n return a.join(\"\");\n };\n\n if (typeof o === \"undefined\" || o === null) {\n return \"null\";\n } else if (BI.isArray(o)) {\n return encodeArray(o);\n } else if (o instanceof Date) {\n /*\n * alex:原来只是把年月日时分秒简单地拼成一个String,无法decode\n * 现在这么处理就可以decode了,但是JS.jsonDecode和Java.JSONObject也要跟着改一下\n */\n return BI.jsonEncode({\n __time__: o.getTime()\n });\n } else if (typeof o === \"string\") {\n return encodeString(o);\n } else if (typeof o === \"number\") {\n return isFinite(o) ? String(o) : \"null\";\n } else if (typeof o === \"boolean\") {\n return String(o);\n } else if (BI.isFunction(o)) {\n return String(o);\n }\n var a = [\"{\"], b, i, v;\n for (i in o) {\n if (!useHasOwn || o.hasOwnProperty(i)) {\n v = o[i];\n switch (typeof v) {\n case \"undefined\":\n case \"unknown\":\n break;\n default:\n if (b) {\n a.push(\",\");\n }\n a.push(BI.jsonEncode(i), \":\",\n v === null ? \"null\" : BI.jsonEncode(v));\n b = true;\n }\n }\n }\n a.push(\"}\");\n return a.join(\"\");\n\n };\n\n BI.jsonDecode = function (text) {\n\n try {\n // 注意0啊\n // var jo = $.parseJSON(text) || {};\n var jo = BI.$ ? BI.$.parseJSON(text) : _global.JSON.parse(text);\n if (jo == null) {\n jo = {};\n }\n } catch (e) {\n /*\n * richie:浏览器只支持标准的JSON字符串转换,而jQuery会默认调用浏览器的window.JSON.parse()函数进行解析\n * 比如:var str = \"{'a':'b'}\",这种形式的字符串转换为JSON就会抛异常\n */\n try {\n jo = new Function(\"return \" + text)() || {};\n } catch (e) {\n // do nothing\n }\n if (jo == null) {\n jo = [];\n }\n }\n if (!_hasDateInJson(text)) {\n return jo;\n }\n\n function _hasDateInJson (json) {\n if (!json || typeof json !== \"string\") {\n return false;\n }\n return json.indexOf(\"__time__\") != -1;\n }\n\n return (function (o) {\n if (typeof o === \"string\") {\n return o;\n }\n if (o && o.__time__ != null) {\n return new Date(o.__time__);\n }\n for (var a in o) {\n if (o[a] == o || typeof o[a] === \"object\" || _.isFunction(o[a])) {\n break;\n }\n o[a] = arguments.callee(o[a]);\n }\n\n return o;\n })(jo);\n };\n\n /**\n * 获取编码后的url\n * @param urlTemplate url模板\n * @param param 参数\n * @returns {*|String}\n * @example\n * BI.getEncodeURL(\"design/{tableName}/{fieldName}\",{tableName: \"A\", fieldName: \"a\"}) // design/A/a\n */\n BI.getEncodeURL = function (urlTemplate, param) {\n return BI.replaceAll(urlTemplate, \"\\\\{(.*?)\\\\}\", function (ori, str) {\n return BI.encodeURIComponent(BI.isObject(param) ? param[str] : param);\n });\n };\n\n BI.encodeURIComponent = function (url) {\n BI.specialCharsMap = BI.specialCharsMap || {};\n url = url || \"\";\n url = BI.replaceAll(url + \"\", BI.keys(BI.specialCharsMap || []).join(\"|\"), function (str) {\n switch (str) {\n case \"\\\\\":\n return BI.specialCharsMap[\"\\\\\\\\\"] || str;\n default:\n return BI.specialCharsMap[str] || str;\n }\n });\n return _global.encodeURIComponent(url);\n };\n\n BI.decodeURIComponent = function (url) {\n var reserveSpecialCharsMap = {};\n BI.each(BI.specialCharsMap, function (initialChar, encodeChar) {\n reserveSpecialCharsMap[encodeChar] = initialChar === \"\\\\\\\\\" ? \"\\\\\" : initialChar;\n });\n url = url || \"\";\n url = BI.replaceAll(url + \"\", BI.keys(reserveSpecialCharsMap || []).join(\"|\"), function (str) {\n return reserveSpecialCharsMap[str] || str;\n });\n return _global.decodeURIComponent(url);\n };\n\n BI.contentFormat = function (cv, fmt) {\n if (isEmpty(cv)) {\n // 原值为空,返回空字符\n return \"\";\n }\n var text = cv.toString();\n if (isEmpty(fmt)) {\n // 格式为空,返回原字符\n return text;\n }\n if (fmt.match(/^T/)) {\n // T - 文本格式\n return text;\n } else if (fmt.match(/^D/)) {\n // D - 日期(时间)格式\n if (!(cv instanceof Date)) {\n if (typeof cv === \"number\") {\n // 毫秒数类型\n cv = new Date(cv);\n } else {\n //字符串类型转化为date类型\n cv = new Date(Date.parse((\"\" + cv).replace(/-|\\./g, \"/\")));\n }\n }\n if (!isInvalidDate(cv) && !BI.isNull(cv)) {\n var needTrim = fmt.match(/^DT/);\n text = BI.date2Str(cv, fmt.substring(needTrim ? 2 : 1));\n }\n } else if (fmt.match(/E/)) {\n // 科学计数格式\n text = _eFormat(text, fmt);\n } else {\n // 数字格式\n text = _numberFormat(text, fmt);\n }\n // ¤ - 货币格式\n text = text.replace(/¤/g, \"¥\");\n return text;\n };\n\n /**\n * 将Java提供的日期格式字符串装换为JS识别的日期格式字符串\n * @class FR.parseFmt\n * @param fmt 日期格式\n * @returns {String}\n */\n BI.parseFmt = function (fmt) {\n if (!fmt) {\n return \"\";\n }\n //日期\n fmt = String(fmt)\n //年\n .replace(/y{4,}/g, \"%Y\")//yyyy的时候替换为Y\n .replace(/y{2}/g, \"%y\")//yy的时候替换为y\n //月\n .replace(/M{4,}/g, \"%b\")//MMMM的时候替换为b,八\n .replace(/M{3}/g, \"%B\")//MMM的时候替换为M,八月\n .replace(/M{2}/g, \"%X\")//MM的时候替换为X,08\n .replace(/M{1}/g, \"%x\")//M的时候替换为x,8\n .replace(/a{1}/g, \"%p\");\n //天\n if (new RegExp(\"d{2,}\", \"g\").test(fmt)) {\n fmt = fmt.replace(/d{2,}/g, \"%d\");//dd的时候替换为d\n } else {\n fmt = fmt.replace(/d{1}/g, \"%e\");//d的时候替换为j\n }\n //时\n if (new RegExp(\"h{2,}\", \"g\").test(fmt)) {//12小时制\n fmt = fmt.replace(/h{2,}/g, \"%I\");\n } else {\n fmt = fmt.replace(/h{1}/g, \"%I\");\n }\n if (new RegExp(\"H{2,}\", \"g\").test(fmt)) {//24小时制\n fmt = fmt.replace(/H{2,}/g, \"%H\");\n } else {\n fmt = fmt.replace(/H{1}/g, \"%H\");\n }\n fmt = fmt.replace(/m{2,}/g, \"%M\")//分\n //秒\n .replace(/s{2,}/g, \"%S\");\n\n return fmt;\n };\n\n /**\n * 把字符串按照对应的格式转化成日期对象\n *\n * @example\n * var result = BI.str2Date('2013-12-12', 'yyyy-MM-dd');//Thu Dec 12 2013 00:00:00 GMT+0800\n *\n * @class BI.str2Date\n * @param str 字符串\n * @param format 日期格式\n * @returns {*}\n */\n BI.str2Date = function (str, format) {\n if (typeof str != \"string\" || typeof format != \"string\") {\n return null;\n }\n var fmt = BI.parseFmt(format);\n return BI.parseDateTime(str, fmt);\n };\n\n /**\n * 把日期对象按照指定格式转化成字符串\n *\n * @example\n * var date = new Date('Thu Dec 12 2013 00:00:00 GMT+0800');\n * var result = BI.date2Str(date, 'yyyy-MM-dd');//2013-12-12\n *\n * @class BI.date2Str\n * @param date 日期\n * @param format 日期格式\n * @returns {String}\n */\n BI.date2Str = function (date, format) {\n if (!date) {\n return \"\";\n }\n // O(len(format))\n var len = format.length, result = \"\";\n if (len > 0) {\n var flagch = format.charAt(0), start = 0, str = flagch;\n for (var i = 1; i < len; i++) {\n var ch = format.charAt(i);\n if (flagch !== ch) {\n result += compileJFmt({\n char: flagch,\n str: str,\n len: i - start\n }, date);\n flagch = ch;\n start = i;\n str = flagch;\n } else {\n str += ch;\n }\n }\n result += compileJFmt({\n char: flagch,\n str: str,\n len: len - start\n }, date);\n }\n return result;\n\n function compileJFmt (jfmt, date) {\n var str = jfmt.str, len = jfmt.len, ch = jfmt[\"char\"];\n switch (ch) {\n case \"E\": // 星期\n str = BI.Date._DN[date.getDay()];\n break;\n case \"y\": // 年\n if (len <= 3) {\n str = (date.getFullYear() + \"\").slice(2, 4);\n } else {\n str = date.getFullYear();\n }\n break;\n case \"M\": // 月\n if (len > 2) {\n str = BI.Date._MN[date.getMonth()];\n } else if (len < 2) {\n str = date.getMonth() + 1;\n } else {\n str = BI.leftPad(date.getMonth() + 1 + \"\", 2, \"0\");\n }\n break;\n case \"d\": // 日\n if (len > 1) {\n str = BI.leftPad(date.getDate() + \"\", 2, \"0\");\n } else {\n str = date.getDate();\n }\n break;\n case \"h\": // 时(12)\n var hour = date.getHours() % 12;\n if (hour === 0) {\n hour = 12;\n }\n if (len > 1) {\n str = BI.leftPad(hour + \"\", 2, \"0\");\n } else {\n str = hour;\n }\n break;\n case \"H\": // 时(24)\n if (len > 1) {\n str = BI.leftPad(date.getHours() + \"\", 2, \"0\");\n } else {\n str = date.getHours();\n }\n break;\n case \"m\":\n if (len > 1) {\n str = BI.leftPad(date.getMinutes() + \"\", 2, \"0\");\n } else {\n str = date.getMinutes();\n }\n break;\n case \"s\":\n if (len > 1) {\n str = BI.leftPad(date.getSeconds() + \"\", 2, \"0\");\n } else {\n str = date.getSeconds();\n }\n break;\n case \"a\":\n str = date.getHours() < 12 ? \"am\" : \"pm\";\n break;\n case \"z\":\n str = BI.getTimezone(date);\n break;\n default:\n str = jfmt.str;\n break;\n }\n return str;\n }\n };\n\n BI.object2Number = function (value) {\n if (value == null) {\n return 0;\n }\n if (typeof value === \"number\") {\n return value;\n }\n var str = value + \"\";\n if (str.indexOf(\".\") === -1) {\n return parseInt(str);\n }\n return parseFloat(str);\n };\n\n BI.object2Date = function (obj) {\n if (obj == null) {\n return new Date();\n }\n if (obj instanceof Date) {\n return obj;\n } else if (typeof obj === \"number\") {\n return new Date(obj);\n }\n var str = obj + \"\";\n str = str.replace(/-/g, \"/\");\n var dt = new Date(str);\n if (!isInvalidDate(dt)) {\n return dt;\n }\n\n return new Date();\n\n };\n\n BI.object2Time = function (obj) {\n if (obj == null) {\n return new Date();\n }\n if (obj instanceof Date) {\n return obj;\n }\n var str = obj + \"\";\n str = str.replace(/-/g, \"/\");\n var dt = new Date(str);\n if (!isInvalidDate(dt)) {\n return dt;\n }\n if (str.indexOf(\"/\") === -1 && str.indexOf(\":\") !== -1) {\n dt = new Date(\"1970/01/01 \" + str);\n if (!isInvalidDate(dt)) {\n return dt;\n }\n }\n dt = BI.parseDateTime(str, \"HH:mm:ss\");\n if (!isInvalidDate(dt)) {\n return dt;\n }\n return new Date();\n\n };\n})();\n","/**\n * 对数组对象的扩展\n * @class Array\n */\n_.extend(BI, {\n\n pushArray: function (sArray, array) {\n for (var i = 0; i < array.length; i++) {\n sArray.push(array[i]);\n }\n },\n pushDistinct: function (sArray, obj) {\n if (!BI.contains(sArray, obj)) {\n sArray.push(obj);\n }\n },\n pushDistinctArray: function (sArray, array) {\n for (var i = 0, len = array.length; i < len; i++) {\n BI.pushDistinct(sArray, array[i]);\n }\n }\n});\n","/** Constants used for time computations */\nBI.Date = BI.Date || {};\nBI.Date.SECOND = 1000;\nBI.Date.MINUTE = 60 * BI.Date.SECOND;\nBI.Date.HOUR = 60 * BI.Date.MINUTE;\nBI.Date.DAY = 24 * BI.Date.HOUR;\nBI.Date.WEEK = 7 * BI.Date.DAY;\n\n_.extend(BI, {\n /**\n * 获取时区\n * @returns {String}\n */\n getTimezone: function (date) {\n return date.toString().replace(/^.* (?:\\((.*)\\)|([A-Z]{1,4})(?:[\\-+][0-9]{4})?(?: -?\\d+)?)$/, \"$1$2\").replace(/[^A-Z]/g, \"\");\n },\n\n /** Returns the number of days in the current month */\n getMonthDays: function (date, month) {\n var year = date.getFullYear();\n if (typeof month === \"undefined\") {\n month = date.getMonth();\n }\n if (((0 == (year % 4)) && ((0 != (year % 100)) || (0 == (year % 400)))) && month == 1) {\n return 29;\n }\n return BI.Date._MD[month];\n\n },\n\n /**\n * 获取每月的最后一天\n * @returns {Date}\n */\n getLastDateOfMonth: function (date) {\n return BI.getDate(date.getFullYear(), date.getMonth(), BI.getMonthDays(date));\n },\n\n /** Returns the number of day in the year. */\n getDayOfYear: function (date) {\n var now = BI.getDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n var then = BI.getDate(date.getFullYear(), 0, 0, 0, 0, 0);\n var time = now - then;\n return Math.floor(time / BI.Date.DAY);\n },\n\n /** Returns the number of the week in year, as defined in ISO 8601. */\n getWeekNumber: function (date) {\n var d = BI.getDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n var week = d.getDay();\n var startOfWeek = BI.StartOfWeek % 7;\n var middleDay = (startOfWeek + 3) % 7;\n middleDay = middleDay || 7;\n // 偏移到周周首之前需要多少天\n var offsetWeekStartCount = week < startOfWeek ? (7 + week - startOfWeek) : (week - startOfWeek);\n var offsetWeekMiddleCount = middleDay < startOfWeek ? (7 + middleDay - startOfWeek) : (middleDay - startOfWeek);\n d.setDate(d.getDate() - offsetWeekStartCount + offsetWeekMiddleCount);\n var ms = d.valueOf();\n d.setMonth(0);\n d.setDate(1);\n return Math.floor((ms - d.valueOf()) / (7 * 864e5)) + 1;\n },\n\n getQuarter: function (date) {\n return Math.floor(date.getMonth() / 3) + 1;\n },\n\n // 离当前时间多少天的时间\n getOffsetDate: function (date, offset) {\n return BI.getDate(BI.getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()) + offset * 864e5);\n },\n\n getOffsetQuarter: function (date, n) {\n var dt = BI.getDate(BI.getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));\n var day = dt.getDate();\n var monthDay = BI.getMonthDays(BI.getDate(dt.getFullYear(), dt.getMonth() + BI.parseInt(n) * 3, 1));\n if (day > monthDay) {\n day = monthDay;\n }\n dt.setDate(day);\n dt.setMonth(dt.getMonth() + parseInt(n) * 3);\n return dt;\n },\n\n // 得到本季度的起始月份\n getQuarterStartMonth: function (date) {\n var quarterStartMonth = 0;\n var nowMonth = date.getMonth();\n if (nowMonth < 3) {\n quarterStartMonth = 0;\n }\n if (2 < nowMonth && nowMonth < 6) {\n quarterStartMonth = 3;\n }\n if (5 < nowMonth && nowMonth < 9) {\n quarterStartMonth = 6;\n }\n if (nowMonth > 8) {\n quarterStartMonth = 9;\n }\n return quarterStartMonth;\n },\n // 获得本季度的起始日期\n getQuarterStartDate: function (date) {\n return BI.getDate(date.getFullYear(), BI.getQuarterStartMonth(date), 1);\n },\n // 得到本季度的结束日期\n getQuarterEndDate: function (date) {\n var quarterEndMonth = BI.getQuarterStartMonth(date) + 2;\n return BI.getDate(date.getFullYear(), quarterEndMonth, BI.getMonthDays(date, quarterEndMonth));\n },\n\n // 指定日期n个月之前或之后的日期\n getOffsetMonth: function (date, n) {\n var dt = BI.getDate(BI.getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));\n var day = dt.getDate();\n var monthDay = BI.getMonthDays(BI.getDate(dt.getFullYear(), dt.getMonth() + parseInt(n), 1));\n if (day > monthDay) {\n day = monthDay;\n }\n dt.setDate(day);\n dt.setMonth(dt.getMonth() + parseInt(n));\n return dt;\n },\n\n // 获得本周的起始日期\n getWeekStartDate: function (date) {\n var w = date.getDay();\n var startOfWeek = BI.StartOfWeek % 7;\n return BI.getOffsetDate(date, BI.Date._OFFSET[w < startOfWeek ? (7 + w - startOfWeek) : (w - startOfWeek)]);\n },\n // 得到本周的结束日期\n getWeekEndDate: function (date) {\n var w = date.getDay();\n var startOfWeek = BI.StartOfWeek % 7;\n return BI.getOffsetDate(date, BI.Date._OFFSET[w < startOfWeek ? (7 + w - startOfWeek) : (w - startOfWeek)] + 6);\n },\n\n // 格式化打印日期\n print: function (date, str) {\n var m = date.getMonth();\n var d = date.getDate();\n var y = date.getFullYear();\n var yWith4number = y + \"\";\n while (yWith4number.length < 4) {\n yWith4number = \"0\" + yWith4number;\n }\n var wn = BI.getWeekNumber(date);\n var qr = BI.getQuarter(date);\n var w = date.getDay();\n var s = {};\n var hr = date.getHours();\n var pm = (hr >= 12);\n var ir = (pm) ? (hr - 12) : hr;\n var dy = BI.getDayOfYear(date);\n if (ir == 0) {\n ir = 12;\n }\n var min = date.getMinutes();\n var sec = date.getSeconds();\n s[\"%a\"] = BI.Date._SDN[w]; // abbreviated weekday name [FIXME: I18N]\n s[\"%A\"] = BI.Date._DN[w]; // full weekday name\n s[\"%b\"] = BI.Date._SMN[m]; // abbreviated month name [FIXME: I18N]\n s[\"%B\"] = BI.Date._MN[m]; // full month name\n // FIXME: %c : preferred date and time representation for the current locale\n s[\"%C\"] = 1 + Math.floor(y / 100); // the century number\n s[\"%d\"] = (d < 10) ? (\"0\" + d) : d; // the day of the month (range 01 to 31)\n s[\"%e\"] = d; // the day of the month (range 1 to 31)\n // FIXME: %D : american date style: %m/%d/%y\n // FIXME: %E, %F, %G, %g, %h (man strftime)\n s[\"%H\"] = (hr < 10) ? (\"0\" + hr) : hr; // hour, range 00 to 23 (24h format)\n s[\"%I\"] = (ir < 10) ? (\"0\" + ir) : ir; // hour, range 01 to 12 (12h format)\n s[\"%j\"] = (dy < 100) ? ((dy < 10) ? (\"00\" + dy) : (\"0\" + dy)) : dy; // day of the year (range 001 to 366)\n s[\"%k\"] = hr + \"\";\t\t// hour, range 0 to 23 (24h format)\n s[\"%l\"] = ir + \"\";\t\t// hour, range 1 to 12 (12h format)\n s[\"%X\"] = (m < 9) ? (\"0\" + (1 + m)) : (1 + m); // month, range 01 to 12\n s[\"%x\"] = m + 1; // month, range 1 to 12\n s[\"%M\"] = (min < 10) ? (\"0\" + min) : min; // minute, range 00 to 59\n s[\"%n\"] = \"\\n\";\t\t// a newline character\n s[\"%p\"] = pm ? \"PM\" : \"AM\";\n s[\"%P\"] = pm ? \"pm\" : \"am\";\n // FIXME: %r : the time in am/pm notation %I:%M:%S %p\n // FIXME: %R : the time in 24-hour notation %H:%M\n s[\"%s\"] = Math.floor(date.getTime() / 1000);\n s[\"%S\"] = (sec < 10) ? (\"0\" + sec) : sec; // seconds, range 00 to 59\n s[\"%t\"] = \"\\t\";\t\t// a tab character\n // FIXME: %T : the time in 24-hour notation (%H:%M:%S)\n s[\"%U\"] = s[\"%W\"] = s[\"%V\"] = (wn < 10) ? (\"0\" + wn) : wn;\n s[\"%u\"] = w + 1;\t// the day of the week (range 1 to 7, 1 = MON)\n s[\"%w\"] = w;\t\t// the day of the week (range 0 to 6, 0 = SUN)\n // FIXME: %x : preferred date representation for the current locale without the time\n // FIXME: %X : preferred time representation for the current locale without the date\n s[\"%y\"] = yWith4number.substr(2, 2); // year without the century (range 00 to 99)\n s[\"%Y\"] = yWith4number;\t\t// year with the century\n s[\"%%\"] = \"%\";\t\t// a literal '%' character\n s[\"%Q\"] = qr;\n\n var re = /%./g;\n BI.isKhtml = BI.isKhtml || function () {\n if(!_global.navigator) {\n return false;\n }\n return /Konqueror|Safari|KHTML/i.test(navigator.userAgent);\n };\n\n // 包含年周的格式化,ISO8601标准周的计数会影响年\n if ((str.indexOf(\"%Y\") !== -1 || str.indexOf(\"%y\") !== -1) && (str.indexOf(\"%W\") !== -1 || str.indexOf(\"%U\") !== -1 || str.indexOf(\"%V\") !== -1)) {\n switch (wn) {\n // 如果周数是1,但是当前却在12月,表示此周数为下一年的\n case 1:\n if (m === 11) {\n s[\"%y\"] = parseInt(s[\"%y\"]) + 1;\n s[\"%Y\"] = parseInt(s[\"%Y\"]) + 1;\n }\n break;\n // 如果周数是53,但是当前却在1月,表示此周数为上一年的\n case 53:\n if (m === 0) {\n s[\"%y\"] = parseInt(s[\"%y\"]) - 1;\n s[\"%Y\"] = parseInt(s[\"%Y\"]) - 1;\n }\n break;\n default:\n break;\n }\n }\n\n if (!BI.isKhtml()) {\n return str.replace(re, function (par) {\n return s[par] || par;\n });\n }\n var a = str.match(re);\n for (var i = 0; i < a.length; i++) {\n var tmp = s[a[i]];\n if (tmp) {\n re = new RegExp(a[i], \"g\");\n str = str.replace(re, tmp);\n }\n }\n\n return str;\n }\n});\n","/**\n * 基本的函数\n * Created by GUY on 2015/6/24.\n */\nBI.Func = {};\n_.extend(BI.Func, {\n /**\n * 创建唯一的名字\n * @param array\n * @param name\n * @returns {*}\n */\n createDistinctName: function (array, name) {\n var src = name, idx = 1;\n name = name || \"\";\n while (true) {\n if (BI.every(array, function (i, item) {\n return BI.isKey(item) ? item !== name : item.name !== name;\n })) {\n break;\n }\n name = src + (idx++);\n }\n return name;\n },\n\n /**\n * 获取字符宽度\n * @param str\n * @return {number}\n */\n getGBWidth: function (str) {\n str = str + \"\";\n str = str.replace(/[^\\x00-\\xff]/g, \"xx\");\n return Math.ceil(str.length / 2);\n },\n\n /**\n * 获取搜索结果\n * @param items\n * @param keyword\n * @param param 搜索哪个属性\n */\n getSearchResult: function (items, keyword, param) {\n var isArray = BI.isArray(items);\n items = isArray ? BI.flatten(items) : items;\n param || (param = \"text\");\n if (!BI.isKey(keyword)) {\n return {\n find: BI.deepClone(items),\n match: isArray ? [] : {}\n };\n }\n var t, text, py;\n keyword = BI.toUpperCase(keyword);\n var matched = isArray ? [] : {}, find = isArray ? [] : {};\n BI.each(items, function (i, item) {\n // 兼容item为null的处理\n if (BI.isNull(item)) {\n return;\n }\n item = BI.deepClone(item);\n t = BI.stripEL(item);\n text = BI.find([t[param], t.text, t.value, t.name, t], function (index, val) {\n return BI.isNotNull(val);\n });\n\n if (BI.isNull(text) || BI.isObject(text)) return;\n\n py = BI.makeFirstPY(text, {\n splitChar: \"\\u200b\"\n });\n text = BI.toUpperCase(text);\n py = BI.toUpperCase(py);\n var pidx;\n if (text.indexOf(keyword) > -1) {\n if (text === keyword) {\n isArray ? matched.push(item) : (matched[i] = item);\n } else {\n isArray ? find.push(item) : (find[i] = item);\n }\n // BI-56386 这边两个pid / text.length是为了防止截取的首字符串不是完整的,但光这样做还不够,即时错位了,也不能说明就不符合条件\n } else if (pidx = py.indexOf(keyword), (pidx > -1)) {\n if (text === keyword || keyword.length === text.length) {\n isArray ? matched.push(item) : (matched[i] = item);\n } else {\n isArray ? find.push(item) : (find[i] = item);\n }\n }\n });\n return {\n match: matched,\n find: find\n };\n }\n});\n\n_.extend(BI, {\n beforeFunc: function (sFunc, func) {\n var __self = sFunc;\n return function () {\n if (func.apply(sFunc, arguments) === false) {\n return false;\n }\n return __self.apply(sFunc, arguments);\n };\n },\n\n afterFunc: function (sFunc, func) {\n var __self = sFunc;\n return function () {\n var ret = __self.apply(sFunc, arguments);\n if (ret === false) {\n return false;\n }\n func.apply(sFunc, arguments);\n return ret;\n };\n }\n});","_.extend(BI, {\n // 给Number类型增加一个add方法,调用起来更加方便。\n add: function (num, arg) {\n return accAdd(arg, num);\n\n /**\n ** 加法函数,用来得到精确的加法结果\n ** 说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。\n ** 调用:accAdd(arg1,arg2)\n ** 返回值:arg1加上arg2的精确结果\n **/\n function accAdd (arg1, arg2) {\n var r1, r2, m, c;\n try {\n r1 = arg1.toString().split(\".\")[1].length;\n } catch (e) {\n r1 = 0;\n }\n try {\n r2 = arg2.toString().split(\".\")[1].length;\n } catch (e) {\n r2 = 0;\n }\n c = Math.abs(r1 - r2);\n m = Math.pow(10, Math.max(r1, r2));\n if (c > 0) {\n var cm = Math.pow(10, c);\n if (r1 > r2) {\n arg1 = Number(arg1.toString().replace(\".\", \"\"));\n arg2 = Number(arg2.toString().replace(\".\", \"\")) * cm;\n } else {\n arg1 = Number(arg1.toString().replace(\".\", \"\")) * cm;\n arg2 = Number(arg2.toString().replace(\".\", \"\"));\n }\n } else {\n arg1 = Number(arg1.toString().replace(\".\", \"\"));\n arg2 = Number(arg2.toString().replace(\".\", \"\"));\n }\n return (arg1 + arg2) / m;\n }\n },\n\n // 给Number类型增加一个sub方法,调用起来更加方便。\n sub: function (num, arg) {\n return accSub(num, arg);\n\n /**\n ** 减法函数,用来得到精确的减法结果\n ** 说明:javascript的减法结果会有误差,在两个浮点数相减的时候会比较明显。这个函数返回较为精确的减法结果。\n ** 调用:accSub(arg1,arg2)\n ** 返回值:arg1加上arg2的精确结果\n **/\n function accSub (arg1, arg2) {\n var r1, r2, m, n;\n try {\n r1 = arg1.toString().split(\".\")[1].length;\n } catch (e) {\n r1 = 0;\n }\n try {\n r2 = arg2.toString().split(\".\")[1].length;\n } catch (e) {\n r2 = 0;\n }\n m = Math.pow(10, Math.max(r1, r2)); // last modify by deeka //动态控制精度长度\n n = (r1 >= r2) ? r1 : r2;\n return ((arg1 * m - arg2 * m) / m).toFixed(n);\n }\n },\n\n // 给Number类型增加一个mul方法,调用起来更加方便。\n mul: function (num, arg) {\n return accMul(arg, num);\n\n /**\n ** 乘法函数,用来得到精确的乘法结果\n ** 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。\n ** 调用:accMul(arg1,arg2)\n ** 返回值:arg1乘以 arg2的精确结果\n **/\n function accMul (arg1, arg2) {\n var m = 0, s1 = arg1.toString(), s2 = arg2.toString();\n try {\n m += s1.split(\".\")[1].length;\n } catch (e) {\n }\n try {\n m += s2.split(\".\")[1].length;\n } catch (e) {\n }\n return Number(s1.replace(\".\", \"\")) * Number(s2.replace(\".\", \"\")) / Math.pow(10, m);\n }\n },\n \n // 给Number类型增加一个div方法,调用起来更加方便。\n div: function (num, arg) {\n return accDivide(num, arg);\n\n /**\n * Return digits length of a number\n * @param {*number} num Input number\n */\n function digitLength (num) {\n // Get digit length of e\n var eSplit = num.toString().split(/[eE]/);\n var len = (eSplit[0].split(\".\")[1] || \"\").length - (+(eSplit[1] || 0));\n return len > 0 ? len : 0;\n }\n /**\n * 把小数转成整数,支持科学计数法。如果是小数则放大成整数\n * @param {*number} num 输入数\n */\n function float2Fixed (num) {\n if (num.toString().indexOf(\"e\") === -1) {\n return Number(num.toString().replace(\".\", \"\"));\n }\n var dLen = digitLength(num);\n return dLen > 0 ? num * Math.pow(10, dLen) : num;\n }\n\n /**\n * 精确乘法\n */\n function times (num1, num2) {\n var others = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n others[_i - 2] = arguments[_i];\n }\n if (others.length > 0) {\n return times.apply(void 0, [times(num1, num2), others[0]].concat(others.slice(1)));\n }\n var num1Changed = float2Fixed(num1);\n var num2Changed = float2Fixed(num2);\n var baseNum = digitLength(num1) + digitLength(num2);\n var leftValue = num1Changed * num2Changed;\n return leftValue / Math.pow(10, baseNum);\n }\n\n /**\n * 精确除法\n */\n function accDivide (num1, num2) {\n var others = [];\n for (var _i = 2; _i < arguments.length; _i++) {\n others[_i - 2] = arguments[_i];\n }\n if (others.length > 0) {\n return accDivide.apply(void 0, [accDivide(num1, num2), others[0]].concat(others.slice(1)));\n }\n var num1Changed = float2Fixed(num1);\n var num2Changed = float2Fixed(num2);\n return times((num1Changed / num2Changed), Math.pow(10, digitLength(num2) - digitLength(num1)));\n }\n }\n\n});","/**\n * 对字符串对象的扩展\n * @class String\n */\n_.extend(BI, {\n\n /**\n * 判断字符串是否已指定的字符串开始\n * @param str source字符串\n * @param {String} startTag 指定的开始字符串\n * @return {Boolean} 如果字符串以指定字符串开始则返回true,否则返回false\n */\n startWith: function (str, startTag) {\n str = str || \"\";\n if (startTag == null || startTag == \"\" || str.length === 0 || startTag.length > str.length) {\n return false;\n }\n return str.substr(0, startTag.length) == startTag;\n },\n /**\n * 判断字符串是否以指定的字符串结束\n * @param str source字符串\n * @param {String} endTag 指定的字符串\n * @return {Boolean} 如果字符串以指定字符串结束则返回true,否则返回false\n */\n endWith: function (str, endTag) {\n if (endTag == null || endTag == \"\" || str.length === 0 || endTag.length > str.length) {\n return false;\n }\n return str.substring(str.length - endTag.length) == endTag;\n },\n\n /**\n * 获取url中指定名字的参数\n * @param str source字符串\n * @param {String} name 参数的名字\n * @return {String} 参数的值\n */\n getQuery: function (str, name) {\n var reg = new RegExp(\"(^|&)\" + name + \"=([^&]*)(&|$)\");\n var r = str.substr(str.indexOf(\"?\") + 1).match(reg);\n if (r) {\n return unescape(r[2]);\n }\n return null;\n },\n\n /**\n * 给url加上给定的参数\n * @param str source字符串\n * @param {Object} paras 参数对象,是一个键值对对象\n * @return {String} 添加了给定参数的url\n */\n appendQuery: function (str, paras) {\n if (!paras) {\n return str;\n }\n var src = str;\n // 没有问号说明还没有参数\n if (src.indexOf(\"?\") === -1) {\n src += \"?\";\n }\n // 如果以问号结尾,说明没有其他参数\n if (BI.endWith(src, \"?\") !== false) {\n } else {\n src += \"&\";\n }\n _.each(paras, function (value, name) {\n if (typeof(name) === \"string\") {\n src += name + \"=\" + value + \"&\";\n }\n });\n src = src.substr(0, src.length - 1);\n return src;\n },\n /**\n * 将所有符合第一个字符串所表示的字符串替换成为第二个字符串\n * @param str source字符串\n * @param {String} s1 要替换的字符串的正则表达式\n * @param {String} s2 替换的结果字符串\n * @returns {String} 替换后的字符串\n */\n replaceAll: function (str, s1, s2) {\n return str.replace(new RegExp(s1, \"gm\"), s2);\n },\n /**\n * 总是让字符串以指定的字符开头\n * @param str source字符串\n * @param {String} start 指定的字符\n * @returns {String} 以指定字符开头的字符串\n */\n perfectStart: function (str, start) {\n if (BI.startWith(str, start)) {\n return str;\n }\n return start + str;\n\n },\n\n /**\n * 获取字符串中某字符串的所有项位置数组\n * @param str source字符串\n * @param {String} sub 子字符串\n * @return {Number[]} 子字符串在父字符串中出现的所有位置组成的数组\n */\n allIndexOf: function (str, sub) {\n if (typeof sub !== \"string\") {\n return [];\n }\n var location = [];\n var offset = 0;\n while (str.length > 0) {\n var loc = str.indexOf(sub);\n if (loc === -1) {\n break;\n }\n location.push(offset + loc);\n str = str.substring(loc + sub.length, str.length);\n offset += loc + sub.length;\n }\n return location;\n }\n});","!(function () {\n var i18nStore = {};\n _.extend(BI, {\n addI18n: function (i18n) {\n BI.extend(i18nStore, i18n);\n },\n i18nText: function (key) {\n var localeText = i18nStore[key] || (BI.i18n && BI.i18n[key]) || \"\";\n if (!localeText) {\n localeText = key;\n }\n var len = arguments.length;\n if (len > 1) {\n if (localeText.indexOf(\"{R1}\") > -1) {\n for (var i = 1; i < len; i++) {\n var key = \"{R\" + i + \"}\";\n localeText = BI.replaceAll(localeText, key, arguments[i] + \"\");\n }\n } else {\n var args = Array.prototype.slice.call(arguments);\n var count = 1;\n return BI.replaceAll(localeText, \"\\\\{\\\\s*\\\\}\", function () {\n return args[count++] + \"\";\n });\n }\n }\n return localeText;\n }\n });\n})();","(function () {\n var moduleInjection = {};\n BI.module = function (xtype, cls) {\n if (moduleInjection[xtype] != null) {\n _global.console && console.error(\"module:[\" + xtype + \"] has been registed\");\n }\n moduleInjection[xtype] = cls;\n };\n\n var constantInjection = {};\n BI.constant = function (xtype, cls) {\n if (constantInjection[xtype] != null) {\n _global.console && console.error(\"constant:[\" + xtype + \"] has been registed\");\n }\n constantInjection[xtype] = cls;\n };\n\n var modelInjection = {};\n BI.model = function (xtype, cls) {\n if (modelInjection[xtype] != null) {\n _global.console && console.error(\"model:[\" + xtype + \"] has been registed\");\n }\n modelInjection[xtype] = cls;\n };\n\n var storeInjection = {};\n BI.store = function (xtype, cls) {\n if (storeInjection[xtype] != null) {\n _global.console && console.error(\"store:[\" + xtype + \"] has been registed\");\n }\n storeInjection[xtype] = cls;\n };\n\n var serviceInjection = {};\n BI.service = function (xtype, cls) {\n if (serviceInjection[xtype] != null) {\n _global.console && console.error(\"service:[\" + xtype + \"] has been registed\");\n }\n serviceInjection[xtype] = cls;\n };\n\n var providerInjection = {};\n BI.provider = function (xtype, cls) {\n if (providerInjection[xtype] != null) {\n _global.console && console.error(\"provider:[\" + xtype + \"] has been registed\");\n }\n providerInjection[xtype] = cls;\n };\n\n var configFunctions = {};\n BI.config = function (type, configFn) {\n if (BI.initialized) {\n if (constantInjection[type]) {\n return (constantInjection[type] = configFn(constantInjection[type]));\n }\n if (providerInjection[type]) {\n if (!providers[type]) {\n providers[type] = new providerInjection[type]();\n }\n return configFn(providers[type]);\n }\n return BI.Plugin.configWidget(type, configFn);\n }\n if (!configFunctions[type]) {\n configFunctions[type] = [];\n BI.prepares.push(function () {\n var queue = configFunctions[type];\n for (var i = 0; i < queue.length; i++) {\n if (constantInjection[type]) {\n constantInjection[type] = queue[i](constantInjection[type]);\n continue;\n }\n if (providerInjection[type]) {\n if (!providers[type]) {\n providers[type] = new providerInjection[type]();\n }\n queue[i](providers[type]);\n continue;\n }\n BI.Plugin.configWidget(type, queue[i]);\n }\n configFunctions[type] = null;\n });\n }\n configFunctions[type].push(configFn);\n };\n\n var actions = {};\n var globalAction = [];\n BI.action = function (type, actionFn) {\n if (BI.isFunction(type)) {\n globalAction.push(type);\n return function () {\n BI.remove(globalAction, function (idx) {\n return globalAction.indexOf(actionFn) === idx;\n });\n };\n }\n if (!actions[type]) {\n actions[type] = [];\n }\n actions[type].push(actionFn);\n return function () {\n BI.remove(actions[type], function (idx) {\n return actions[type].indexOf(actionFn) === idx;\n });\n if (actions[type].length === 0) {\n delete actions[type];\n }\n };\n };\n\n var points = {};\n BI.point = function (type, action, pointFn, after) {\n if (!points[type]) {\n points[type] = {};\n }\n if (!points[type][action]) {\n points[type][action] = {};\n }\n if (!points[type][action][after ? \"after\" : \"before\"]) {\n points[type][action][after ? \"after\" : \"before\"] = [];\n }\n points[type][action][after ? \"after\" : \"before\"].push(pointFn);\n };\n\n BI.Modules = {\n getModule: function (type) {\n if (!moduleInjection[type]) {\n _global.console && console.error(\"module:[\" + type + \"] does not exists\");\n return false;\n }\n return moduleInjection[type];\n },\n getAllModules: function () {\n return moduleInjection;\n }\n };\n\n BI.Constants = {\n getConstant: function (type) {\n return constantInjection[type];\n }\n };\n\n var callPoint = function (inst, types) {\n types = BI.isArray(types) ? types : [types];\n BI.each(types, function (idx, type) {\n if (points[type]) {\n for (var action in points[type]) {\n var bfns = points[type][action].before;\n if (bfns) {\n BI.aspect.before(inst, action, function (bfns) {\n return function () {\n for (var i = 0, len = bfns.length; i < len; i++) {\n try {\n bfns[i].apply(inst, arguments);\n } catch (e) {\n _global.console && console.error(e);\n }\n }\n };\n }(bfns));\n }\n var afns = points[type][action].after;\n if (afns) {\n BI.aspect.after(inst, action, function (afns) {\n return function () {\n for (var i = 0, len = afns.length; i < len; i++) {\n try {\n afns[i].apply(inst, arguments);\n } catch (e) {\n _global.console && console.error(e);\n }\n }\n };\n }(afns));\n }\n }\n }\n });\n };\n\n BI.Models = {\n getModel: function (type, config) {\n var inst = new modelInjection[type](config);\n inst._constructor && inst._constructor(config);\n inst.mixins && callPoint(inst, inst.mixins);\n callPoint(inst, type);\n return inst;\n }\n };\n\n var stores = {};\n\n BI.Stores = {\n getStore: function (type, config) {\n if (stores[type]) {\n return stores[type];\n }\n var inst = stores[type] = new storeInjection[type](config);\n inst._constructor && inst._constructor(config);\n callPoint(inst, type);\n return inst;\n }\n };\n\n var services = {};\n\n BI.Services = {\n getService: function (type, config) {\n if (services[type]) {\n return services[type];\n }\n services[type] = new serviceInjection[type](config);\n callPoint(services[type], type);\n return services[type];\n }\n };\n\n var providers = {},\n providerInstance = {};\n\n BI.Providers = {\n getProvider: function (type, config) {\n if (!providers[type]) {\n providers[type] = new providerInjection[type]();\n }\n if (!providerInstance[type]) {\n providerInstance[type] = new (providers[type].$get())(config);\n }\n return providerInstance[type];\n }\n };\n\n BI.Actions = {\n runAction: function (type, event, config) {\n BI.each(actions[type], function (i, act) {\n try {\n act(event, config);\n } catch (e) {\n _global.console && console.error(e);\n }\n });\n },\n runGlobalAction: function () {\n var args = [].slice.call(arguments);\n BI.each(globalAction, function (i, act) {\n try {\n act.apply(null, args);\n } catch (e) {\n _global.console && console.error(e);\n }\n });\n }\n };\n\n BI.getContext = function (type, config) {\n if (constantInjection[type]) {\n return BI.Constants.getConstant(type);\n }\n if (modelInjection[type]) {\n return BI.Models.getModel(type, config);\n }\n if (storeInjection[type]) {\n return BI.Stores.getStore(type, config);\n }\n if (serviceInjection[type]) {\n return BI.Services.getService(type, config);\n }\n if (providerInjection[type]) {\n return BI.Providers.getProvider(type, config);\n }\n };\n})();","/**\n * 常量\n */\n\n_.extend(BI, {\n MAX: 0xfffffffffffffff,\n MIN: -0xfffffffffffffff,\n EVENT_RESPONSE_TIME: 200,\n zIndex_layer: 1e5,\n zIndex_popover: 1e6,\n zIndex_popup: 1e7,\n zIndex_masker: 1e8,\n zIndex_tip: 1e9,\n emptyStr: \"\",\n emptyFn: function () {\n },\n empty: null,\n Key: {\n 48: \"0\",\n 49: \"1\",\n 50: \"2\",\n 51: \"3\",\n 52: \"4\",\n 53: \"5\",\n 54: \"6\",\n 55: \"7\",\n 56: \"8\",\n 57: \"9\",\n 65: \"a\",\n 66: \"b\",\n 67: \"c\",\n 68: \"d\",\n 69: \"e\",\n 70: \"f\",\n 71: \"g\",\n 72: \"h\",\n 73: \"i\",\n 74: \"j\",\n 75: \"k\",\n 76: \"l\",\n 77: \"m\",\n 78: \"n\",\n 79: \"o\",\n 80: \"p\",\n 81: \"q\",\n 82: \"r\",\n 83: \"s\",\n 84: \"t\",\n 85: \"u\",\n 86: \"v\",\n 87: \"w\",\n 88: \"x\",\n 89: \"y\",\n 90: \"z\",\n 96: \"0\",\n 97: \"1\",\n 98: \"2\",\n 99: \"3\",\n 100: \"4\",\n 101: \"5\",\n 102: \"6\",\n 103: \"7\",\n 104: \"8\",\n 105: \"9\",\n 106: \"*\",\n 107: \"+\",\n 109: \"-\",\n 110: \".\",\n 111: \"/\"\n },\n KeyCode: {\n BACKSPACE: 8,\n COMMA: 188,\n DELETE: 46,\n DOWN: 40,\n END: 35,\n ENTER: 13,\n ESCAPE: 27,\n HOME: 36,\n LEFT: 37,\n NUMPAD_ADD: 107,\n NUMPAD_DECIMAL: 110,\n NUMPAD_DIVIDE: 111,\n NUMPAD_ENTER: 108,\n NUMPAD_MULTIPLY: 106,\n NUMPAD_SUBTRACT: 109,\n PAGE_DOWN: 34,\n PAGE_UP: 33,\n PERIOD: 190,\n RIGHT: 39,\n SPACE: 32,\n TAB: 9,\n UP: 38\n },\n Status: {\n SUCCESS: 1,\n WRONG: 2,\n START: 3,\n END: 4,\n WAITING: 5,\n READY: 6,\n RUNNING: 7,\n OUTOFBOUNDS: 8,\n NULL: -1\n },\n Direction: {\n Top: \"top\",\n Bottom: \"bottom\",\n Left: \"left\",\n Right: \"right\",\n Custom: \"custom\"\n },\n Axis: {\n Vertical: \"vertical\",\n Horizontal: \"horizontal\"\n },\n Selection: {\n Default: -2,\n None: -1,\n Single: 0,\n Multi: 1,\n All: 2\n },\n HorizontalAlign: {\n Left: \"left\",\n Right: \"right\",\n Center: \"center\",\n Stretch: \"stretch\"\n },\n VerticalAlign: {\n Middle: \"middle\",\n Top: \"top\",\n Bottom: \"bottom\",\n Stretch: \"stretch\"\n },\n StartOfWeek: 1\n});","/**\n * 缓冲池\n * @type {{Buffer: {}}}\n */\n\n(function () {\n var Buffer = {};\n var MODE = false;// 设置缓存模式为关闭\n\n BI.BufferPool = {\n put: function (name, cache) {\n if (BI.isNotNull(Buffer[name])) {\n throw new Error(\"Buffer Pool has the key already!\");\n }\n Buffer[name] = cache;\n },\n\n get: function (name) {\n return Buffer[name];\n }\n };\n})();","/**\n * 共享池\n * @type {{Shared: {}}}\n */\n\n(function () {\n var _Shared = {};\n BI.SharingPool = {\n _Shared: _Shared,\n put: function (name, shared) {\n _Shared[name] = shared;\n },\n\n cat: function () {\n var args = Array.prototype.slice.call(arguments, 0),\n copy = _Shared;\n for (var i = 0; i < args.length; i++) {\n copy = copy && copy[args[i]];\n }\n return copy;\n },\n\n get: function () {\n return BI.deepClone(this.cat.apply(this, arguments));\n },\n\n remove: function (key) {\n delete _Shared[key];\n }\n };\n})();","BI.Req = {\n\n};\n","/**\n * Widget超类\n * @class BI.Widget\n * @extends BI.OB\n *\n * @cfg {JSON} options 配置属性\n */\n\n!(function () {\n BI.Widget = BI.inherit(BI.OB, {\n _defaultConfig: function () {\n return BI.extend(BI.Widget.superclass._defaultConfig.apply(this), {\n root: false,\n tagName: \"div\",\n attributes: null,\n data: null,\n\n tag: null,\n disabled: false,\n invisible: false,\n invalid: false,\n baseCls: \"\",\n extraCls: \"\",\n cls: \"\",\n css: null\n });\n },\n\n // 覆盖父类的_constructor方法,widget不走ob的生命周期\n _constructor: function () {\n },\n\n beforeInit: null,\n\n // 生命周期函数\n beforeCreate: null,\n\n created: null,\n\n render: null,\n\n beforeMount: null,\n\n mounted: null,\n\n shouldUpdate: null,\n\n update: function () {\n },\n\n beforeDestroy: null,\n\n destroyed: null,\n\n _init: function () {\n BI.Widget.superclass._init.apply(this, arguments);\n this._initRoot();\n this._initElementWidth();\n this._initElementHeight();\n this._initVisual();\n this._initState();\n this._initRender();\n },\n\n _initRender: function () {\n if (this.beforeInit) {\n this.__asking = true;\n this.beforeInit(BI.bind(this._render, this));\n if (this.__asking === true) {\n this.__async = true;\n }\n } else {\n this._render();\n }\n },\n\n _render: function () {\n this.__asking = false;\n this.beforeCreate && this.beforeCreate();\n this._initElement();\n this._initEffects();\n this.created && this.created();\n },\n\n /**\n * 初始化根节点\n * @private\n */\n _initRoot: function () {\n var o = this.options;\n this.widgetName = o.widgetName || BI.uniqueId(\"widget\");\n this._isRoot = o.root;\n if (BI.isWidget(o.element)) {\n if (o.element instanceof BI.Widget) {\n this._parent = o.element;\n this._parent.addWidget(this.widgetName, this);\n } else {\n this._isRoot = true;\n }\n this.element = this.options.element.element;\n } else if (o.element) {\n // if (o.root !== true) {\n // throw new Error(\"root is a required property\");\n // }\n this.element = BI.Widget._renderEngine.createElement(this);\n this._isRoot = true;\n } else {\n this.element = BI.Widget._renderEngine.createElement(this);\n }\n this.element._isWidget = true;\n if (o._baseCls || o.baseCls || o.extraCls || o.cls) {\n this.element.addClass((o._baseCls || \"\") + \" \" + (o.baseCls || \"\") + \" \" + (o.extraCls || \"\") + \" \" + (o.cls || \"\"));\n }\n if (o.attributes) {\n this.element.attr(o.attributes);\n }\n if (o.data) {\n this.element.data(o.data);\n }\n if (o.css) {\n this.element.css(o.css);\n }\n this._children = {};\n },\n\n _initElementWidth: function () {\n var o = this.options;\n if (BI.isWidthOrHeight(o.width)) {\n this.element.css(\"width\", o.width);\n }\n },\n\n _initElementHeight: function () {\n var o = this.options;\n if (BI.isWidthOrHeight(o.height)) {\n this.element.css(\"height\", o.height);\n }\n },\n\n _initVisual: function () {\n var o = this.options;\n if (o.invisible) {\n // 用display属性做显示和隐藏,否则jquery会在显示时将display设为block会覆盖掉display:flex属性\n this.element.css(\"display\", \"none\");\n }\n },\n\n _initEffects: function () {\n var o = this.options;\n if (o.disabled || o.invalid) {\n if (this.options.disabled) {\n this.setEnable(false);\n }\n if (this.options.invalid) {\n this.setValid(false);\n }\n }\n },\n\n _initState: function () {\n this._isMounted = false;\n },\n\n _initElement: function () {\n var self = this;\n var els = this.render && this.render();\n if (BI.isPlainObject(els)) {\n els = [els];\n }\n if (BI.isArray(els)) {\n BI.each(els, function (i, el) {\n BI.createWidget(el, {\n element: self\n });\n });\n }\n // if (this._isRoot === true || !(this instanceof BI.Layout)) {\n this._mount();\n // }\n },\n\n _setParent: function (parent) {\n this._parent = parent;\n },\n\n /**\n *\n * @param force 是否强制挂载子节点\n * @param deep 子节点是否也是按照当前force处理\n * @param lifeHook 生命周期钩子触不触发,默认触发\n * @param predicate 递归每个widget的回调\n * @returns {boolean}\n * @private\n */\n _mount: function (force, deep, lifeHook, predicate) {\n var self = this;\n if (!force && (this._isMounted || !this.isVisible() || this.__asking === true || !(this._isRoot === true || (this._parent && this._parent._isMounted === true)))) {\n return false;\n }\n lifeHook !== false && this.beforeMount && this.beforeMount();\n this._isMounted = true;\n this._mountChildren && this._mountChildren();\n BI.each(this._children, function (i, widget) {\n !self.isEnabled() && widget._setEnable(false);\n !self.isValid() && widget._setValid(false);\n widget._mount && widget._mount(deep ? force : false, deep, lifeHook, predicate);\n });\n lifeHook !== false && this.mounted && this.mounted();\n this.fireEvent(BI.Events.MOUNT);\n predicate && predicate(this);\n return true;\n },\n\n _mountChildren: null,\n\n isMounted: function () {\n return this._isMounted;\n },\n\n setWidth: function (w) {\n this.options.width = w;\n this._initElementWidth();\n },\n\n setHeight: function (h) {\n this.options.height = h;\n this._initElementHeight();\n },\n\n _setEnable: function (enable) {\n if (enable === true) {\n this.options.disabled = false;\n } else if (enable === false) {\n this.options.disabled = true;\n }\n // 递归将所有子组件使能\n BI.each(this._children, function (i, child) {\n !child._manualSetEnable && child._setEnable && child._setEnable(enable);\n });\n },\n\n _setValid: function (valid) {\n if (valid === true) {\n this.options.invalid = false;\n } else if (valid === false) {\n this.options.invalid = true;\n }\n // 递归将所有子组件使有效\n BI.each(this._children, function (i, child) {\n !child._manualSetValid && child._setValid && child._setValid(valid);\n });\n },\n\n _setVisible: function (visible) {\n if (visible === true) {\n this.options.invisible = false;\n } else if (visible === false) {\n this.options.invisible = true;\n }\n },\n\n setEnable: function (enable) {\n this._manualSetEnable = true;\n this._setEnable(enable);\n if (enable === true) {\n this.element.removeClass(\"base-disabled disabled\");\n } else if (enable === false) {\n this.element.addClass(\"base-disabled disabled\");\n }\n },\n\n setVisible: function (visible) {\n this._setVisible(visible);\n if (visible === true) {\n // 用this.element.show()会把display属性改成block\n this.element.css(\"display\", \"\");\n this._mount();\n } else if (visible === false) {\n this.element.css(\"display\", \"none\");\n }\n this.fireEvent(BI.Events.VIEW, visible);\n },\n\n setValid: function (valid) {\n this._manualSetValid = true;\n this._setValid(valid);\n if (valid === true) {\n this.element.removeClass(\"base-invalid invalid\");\n } else if (valid === false) {\n this.element.addClass(\"base-invalid invalid\");\n }\n },\n\n doBehavior: function () {\n var args = arguments;\n // 递归将所有子组件使有效\n BI.each(this._children, function (i, child) {\n child.doBehavior && child.doBehavior.apply(child, args);\n });\n },\n\n getWidth: function () {\n return this.options.width;\n },\n\n getHeight: function () {\n return this.options.height;\n },\n\n isValid: function () {\n return !this.options.invalid;\n },\n\n addWidget: function (name, widget) {\n var self = this;\n if (name instanceof BI.Widget) {\n widget = name;\n name = widget.getName();\n }\n if (BI.isKey(name)) {\n name = name + \"\";\n }\n name = name || widget.getName() || BI.uniqueId(\"widget\");\n if (this._children[name]) {\n throw new Error(\"name has already been existed\");\n }\n widget._setParent && widget._setParent(this);\n widget.on(BI.Events.DESTROY, function () {\n BI.remove(self._children, this);\n });\n return (this._children[name] = widget);\n },\n\n getWidgetByName: function (name) {\n if (!BI.isKey(name) || name === this.getName()) {\n return this;\n }\n name = name + \"\";\n var widget = void 0, other = {};\n BI.any(this._children, function (i, wi) {\n if (i === name) {\n widget = wi;\n return true;\n }\n other[i] = wi;\n });\n if (!widget) {\n BI.any(other, function (i, wi) {\n return (widget = wi.getWidgetByName(i));\n });\n }\n return widget;\n },\n\n removeWidget: function (nameOrWidget) {\n var self = this;\n if (BI.isWidget(nameOrWidget)) {\n BI.remove(this._children, nameOrWidget);\n } else {\n delete this._children[nameOrWidget];\n }\n },\n\n hasWidget: function (name) {\n return this._children[name] != null;\n },\n\n getName: function () {\n return this.widgetName;\n },\n\n setTag: function (tag) {\n this.options.tag = tag;\n },\n\n getTag: function () {\n return this.options.tag;\n },\n\n attr: function (key, value) {\n var self = this;\n if (BI.isPlainObject(key)) {\n BI.each(key, function (k, v) {\n self.attr(k, v);\n });\n return;\n }\n if (BI.isNotNull(value)) {\n return this.options[key] = value;\n }\n return this.options[key];\n },\n\n css: function (name, value) {\n return this.element.css(name, value);\n },\n\n getText: function () {\n\n },\n\n setText: function (text) {\n\n },\n\n getValue: function () {\n\n },\n\n setValue: function (value) {\n\n },\n\n isEnabled: function () {\n return !this.options.disabled;\n },\n\n isVisible: function () {\n return !this.options.invisible;\n },\n\n disable: function () {\n this.setEnable(false);\n },\n\n enable: function () {\n this.setEnable(true);\n },\n\n valid: function () {\n this.setValid(true);\n },\n\n invalid: function () {\n this.setValid(false);\n },\n\n invisible: function () {\n this.setVisible(false);\n },\n\n visible: function () {\n this.setVisible(true);\n },\n\n __d: function () {\n this.beforeDestroy && this.beforeDestroy();\n this.beforeDestroy = null;\n BI.each(this._children, function (i, widget) {\n widget && widget._unMount && widget._unMount();\n });\n this._children = {};\n this._parent = null;\n this._isMounted = false;\n this.destroyed && this.destroyed();\n this.destroyed = null;\n },\n\n _unMount: function () {\n this.__d();\n this.fireEvent(BI.Events.UNMOUNT);\n this.purgeListeners();\n },\n\n isolate: function () {\n if (this._parent) {\n this._parent.removeWidget(this);\n }\n BI.DOM.hang([this]);\n },\n\n empty: function () {\n BI.each(this._children, function (i, widget) {\n widget && widget._unMount && widget._unMount();\n });\n this._children = {};\n this.element.empty();\n },\n\n _destroy: function () {\n this.__d();\n this.element.destroy();\n this.purgeListeners();\n },\n\n destroy: function () {\n this.__d();\n this.element.destroy();\n this.fireEvent(BI.Events.DESTROY);\n this._purgeRef();\n this.purgeListeners();\n }\n });\n BI.Widget.registerRenderEngine = function (engine) {\n BI.Widget._renderEngine = engine;\n };\n BI.Widget.registerRenderEngine({\n createElement: function (widget) {\n if (BI.isWidget(widget)) {\n var o = widget.options;\n if (o.element) {\n return BI.$(o.element);\n }\n return BI.$(document.createElement(o.tagName));\n }\n return BI.$(widget);\n },\n createFragment: function () {\n return document.createDocumentFragment();\n }\n });\n\n BI.mount = function (widget, container, predicate, hydrate) {\n if (hydrate === true) {\n // 将widget的element元素都挂载好,并建立相互关系\n widget.element.data(\"__widgets\", [widget]);\n var res = widget._mount(true, false, false, function (w) {\n BI.each(w._children, function (i, child) {\n var ws = child.element.data(\"__widgets\");\n if (!ws) {\n ws = [];\n }\n ws.push(child);\n child.element.data(\"__widgets\", ws);\n });\n predicate && predicate.apply(this, arguments);\n });\n // 将新的dom树属性(事件等)patch到已存在的dom上\n var c = BI.Widget._renderEngine.createElement;\n BI.DOM.patchProps(widget.element, c(c(container).children()[0]));\n\n var triggerLifeHook = function (w) {\n w.beforeMount && w.beforeMount();\n w.mounted && w.mounted();\n BI.each(w._children, function (i, child) {\n triggerLifeHook(child);\n });\n };\n // 最后触发组件树生命周期函数\n triggerLifeHook(widget);\n return res;\n }\n if (container) {\n BI.Widget._renderEngine.createElement(container).append(widget.element);\n }\n return widget._mount(true, false, false, predicate);\n };\n})();","(function () {\n var kv = {};\n BI.shortcut = BI.component = function (xtype, cls) {\n if (kv[xtype] != null) {\n _global.console && console.error(\"shortcut:[\" + xtype + \"] has been registed\");\n }\n kv[xtype] = cls;\n };\n\n // 根据配置属性生成widget\n var createWidget = function (config) {\n var cls = kv[config.type];\n\n var widget = new cls();\n\n widget._initProps(config);\n widget._init();\n widget._initRef();\n\n return widget;\n };\n\n BI.createWidget = function (item, options, context) {\n // 先把准备环境准备好\n BI.init();\n var el, w;\n item || (item = {});\n if (BI.isWidget(options)) {\n context = options;\n options = {};\n } else {\n options || (options = {});\n }\n if (BI.isEmpty(item) && BI.isEmpty(options)) {\n return BI.createWidget({\n type: \"bi.layout\"\n });\n }\n if (BI.isWidget(item)) {\n return item;\n }\n if (item.type || options.type) {\n el = BI.extend({}, options, item);\n w = BI.Plugin.getWidget(el.type, el);\n w.listeners = (w.listeners || []).concat([{\n eventName: BI.Events.MOUNT,\n action: function () {\n BI.Plugin.getObject(el.type, this);\n }\n }]);\n return w.type === el.type ? createWidget(w) : BI.createWidget(BI.extend({}, item, {type: w.type}, options));\n }\n if (item.el && (item.el.type || options.type)) {\n el = BI.extend({}, options, item.el);\n w = BI.Plugin.getWidget(el.type, el);\n w.listeners = (w.listeners || []).concat([{\n eventName: BI.Events.MOUNT,\n action: function () {\n BI.Plugin.getObject(el.type, this);\n }\n }]);\n return w.type === el.type ? createWidget(w) : BI.createWidget(BI.extend({}, item, {type: w.type}, options));\n }\n if (BI.isWidget(item.el)) {\n return item.el;\n }\n throw new Error(\"无法根据item创建组件\");\n };\n\n BI.createElement = function () {\n var widget = BI.createWidget.apply(this, arguments);\n return widget.element;\n };\n\n})();","!(function () {\n var cancelAnimationFrame =\n _global.cancelAnimationFrame ||\n _global.webkitCancelAnimationFrame ||\n _global.mozCancelAnimationFrame ||\n _global.oCancelAnimationFrame ||\n _global.msCancelAnimationFrame ||\n _global.clearTimeout;\n\n var requestAnimationFrame = _global.requestAnimationFrame || _global.webkitRequestAnimationFrame || _global.mozRequestAnimationFrame || _global.oRequestAnimationFrame || _global.msRequestAnimationFrame || _global.setTimeout;\n\n\n BI.MouseMoveTracker = function (onMove, onMoveEnd, domNode) {\n this._isDragging = false;\n this._animationFrameID = null;\n this._domNode = domNode;\n this._onMove = onMove;\n this._onMoveEnd = onMoveEnd;\n\n this._onMouseMove = BI.bind(this._onMouseMove, this);\n this._onMouseUp = BI.bind(this._onMouseUp, this);\n this._didMouseMove = BI.bind(this._didMouseMove, this);\n };\n BI.MouseMoveTracker.prototype = {\n constructor: BI.MouseMoveTracker,\n captureMouseMoves: function (/* object*/ event) {\n if (!this._eventMoveToken && !this._eventUpToken) {\n this._eventMoveToken = BI.EventListener.listen(\n this._domNode,\n \"mousemove\",\n this._onMouseMove\n );\n this._eventUpToken = BI.EventListener.listen(\n this._domNode,\n \"mouseup\",\n this._onMouseUp\n );\n }\n\n if (!this._isDragging) {\n this._deltaX = 0;\n this._deltaY = 0;\n this._isDragging = true;\n this._x = event.clientX;\n this._y = event.clientY;\n }\n event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n },\n\n releaseMouseMoves: function () {\n if (this._eventMoveToken && this._eventUpToken) {\n this._eventMoveToken.remove();\n this._eventMoveToken = null;\n this._eventUpToken.remove();\n this._eventUpToken = null;\n }\n\n if (this._animationFrameID !== null) {\n cancelAnimationFrame(this._animationFrameID);\n this._animationFrameID = null;\n }\n\n if (this._isDragging) {\n this._isDragging = false;\n this._x = null;\n this._y = null;\n }\n },\n\n isDragging: function () /* boolean*/ {\n return this._isDragging;\n },\n\n _onMouseMove: function (/* object*/ event) {\n var x = event.clientX;\n var y = event.clientY;\n\n this._deltaX += (x - this._x);\n this._deltaY += (y - this._y);\n\n if (this._animationFrameID === null) {\n // The mouse may move faster then the animation frame does.\n // Use `requestAnimationFrame` to avoid over-updating.\n this._animationFrameID =\n requestAnimationFrame(this._didMouseMove);\n }\n\n this._x = x;\n this._y = y;\n event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n },\n\n _didMouseMove: function () {\n this._animationFrameID = null;\n this._onMove(this._deltaX, this._deltaY);\n this._deltaX = 0;\n this._deltaY = 0;\n },\n\n _onMouseUp: function () {\n if (this._animationFrameID) {\n this._didMouseMove();\n }\n this._onMoveEnd();\n }\n };\n})();","!(function () {\n var PIXEL_STEP = 10;\n var LINE_HEIGHT = 40;\n var PAGE_HEIGHT = 800;\n var requestAnimationFrame = _global.requestAnimationFrame || _global.webkitRequestAnimationFrame || _global.mozRequestAnimationFrame || _global.oRequestAnimationFrame || _global.msRequestAnimationFrame || _global.setTimeout;\n\n function normalizeWheel (/* object*/event) /* object*/ {\n var sX = 0,\n sY = 0,\n // spinX, spinY\n pX = 0,\n pY = 0; // pixelX, pixelY\n\n // Legacy\n if (\"detail\" in event) {\n sY = event.detail;\n }\n if (\"wheelDelta\" in event) {\n sY = -event.wheelDelta / 120;\n }\n if (\"wheelDeltaY\" in event) {\n sY = -event.wheelDeltaY / 120;\n }\n if (\"wheelDeltaX\" in event) {\n sX = -event.wheelDeltaX / 120;\n }\n\n // side scrolling on FF with DOMMouseScroll\n if (\"axis\" in event && event.axis === event.HORIZONTAL_AXIS) {\n sX = sY;\n sY = 0;\n }\n\n pX = sX * PIXEL_STEP;\n pY = sY * PIXEL_STEP;\n\n if (\"deltaY\" in event) {\n pY = event.deltaY;\n }\n if (\"deltaX\" in event) {\n pX = event.deltaX;\n }\n\n if ((pX || pY) && event.deltaMode) {\n if (event.deltaMode === 1) {\n // delta in LINE units\n pX *= LINE_HEIGHT;\n pY *= LINE_HEIGHT;\n } else {\n // delta in PAGE units\n pX *= PAGE_HEIGHT;\n pY *= PAGE_HEIGHT;\n }\n }\n\n // Fall-back if spin cannot be determined\n if (pX && !sX) {\n sX = pX < 1 ? -1 : 1;\n }\n if (pY && !sY) {\n sY = pY < 1 ? -1 : 1;\n }\n\n return {\n spinX: sX,\n spinY: sY,\n pixelX: pX,\n pixelY: pY\n };\n }\n\n BI.WheelHandler = function (onWheel, handleScrollX, handleScrollY, stopPropagation) {\n this._animationFrameID = null;\n this._deltaX = 0;\n this._deltaY = 0;\n this._didWheel = BI.bind(this._didWheel, this);\n if (typeof handleScrollX !== \"function\") {\n handleScrollX = handleScrollX ?\n function () {\n return true;\n } :\n function () {\n return false;\n };\n }\n\n if (typeof handleScrollY !== \"function\") {\n handleScrollY = handleScrollY ?\n function () {\n return true;\n } :\n function () {\n return false;\n };\n }\n\n if (typeof stopPropagation !== \"function\") {\n stopPropagation = stopPropagation ?\n function () {\n return true;\n } :\n function () {\n return false;\n };\n }\n\n this._handleScrollX = handleScrollX;\n this._handleScrollY = handleScrollY;\n this._stopPropagation = stopPropagation;\n this._onWheelCallback = onWheel;\n this.onWheel = BI.bind(this.onWheel, this);\n };\n BI.WheelHandler.prototype = {\n constructor: BI.WheelHandler,\n onWheel: function (/* object*/ event) {\n var normalizedEvent = normalizeWheel(event);\n var deltaX = this._deltaX + normalizedEvent.pixelX;\n var deltaY = this._deltaY + normalizedEvent.pixelY;\n var handleScrollX = this._handleScrollX(deltaX, deltaY);\n var handleScrollY = this._handleScrollY(deltaY, deltaX);\n if (!handleScrollX && !handleScrollY) {\n return;\n }\n\n this._deltaX += handleScrollX ? normalizedEvent.pixelX : 0;\n this._deltaY += handleScrollY ? normalizedEvent.pixelY : 0;\n event.preventDefault ? event.preventDefault() : (event.returnValue = false);\n\n var changed;\n if (this._deltaX !== 0 || this._deltaY !== 0) {\n if (this._stopPropagation()) {\n event.stopPropagation ? event.stopPropagation() : (event.cancelBubble = true);\n }\n changed = true;\n }\n\n if (changed === true && this._animationFrameID === null) {\n this._animationFrameID = requestAnimationFrame(this._didWheel);\n }\n },\n\n _didWheel: function () {\n this._animationFrameID = null;\n this._onWheelCallback(this._deltaX, this._deltaY);\n this._deltaX = 0;\n this._deltaY = 0;\n }\n };\n})();","BI.BehaviorFactory = {\n createBehavior: function (key, options) {\n var behavior;\n switch (key) {\n case \"highlight\":\n behavior = BI.HighlightBehavior;\n break;\n case \"redmark\":\n behavior = BI.RedMarkBehavior;\n break;\n }\n return new behavior(options);\n }\n};\n\n/**\n * guy\n * 行为控件\n * @class BI.Behavior\n * @extends BI.OB\n */\nBI.Behavior = BI.inherit(BI.OB, {\n _defaultConfig: function () {\n return BI.extend(BI.Behavior.superclass._defaultConfig.apply(this, arguments), {\n rule: function () {return true;}\n });\n },\n\n _init: function () {\n BI.Behavior.superclass._init.apply(this, arguments);\n\n },\n\n doBehavior: function () {\n\n }\n});","/**\n * 布局容器类\n * @class BI.Layout\n * @extends BI.Widget\n *\n * @cfg {JSON} options 配置属性\n * @cfg {Boolean} [options.scrollable=false] 子组件超出容器边界之后是否会出现滚动条\n * @cfg {Boolean} [options.scrollx=false] 子组件超出容器边界之后是否会出现横向滚动条\n * @cfg {Boolean} [options.scrolly=false] 子组件超出容器边界之后是否会出现纵向滚动条\n */\nBI.Layout = BI.inherit(BI.Widget, {\n props: function () {\n return {\n scrollable: null, // true, false, null\n scrollx: false, // true, false\n scrolly: false, // true, false\n items: []\n };\n },\n\n render: function () {\n this._init4Margin();\n this._init4Scroll();\n },\n\n _init4Margin: function () {\n if (this.options.top) {\n this.element.css(\"top\", this.options.top);\n }\n if (this.options.left) {\n this.element.css(\"left\", this.options.left);\n }\n if (this.options.bottom) {\n this.element.css(\"bottom\", this.options.bottom);\n }\n if (this.options.right) {\n this.element.css(\"right\", this.options.right);\n }\n },\n\n _init4Scroll: function () {\n switch (this.options.scrollable) {\n case true:\n this.element.css(\"overflow\", \"auto\");\n break;\n case false:\n this.element.css(\"overflow\", \"hidden\");\n break;\n default :\n break;\n }\n if (this.options.scrollx) {\n this.element.css({\n \"overflow-x\": \"auto\",\n \"overflow-y\": \"hidden\"\n });\n }\n if (this.options.scrolly) {\n this.element.css({\n \"overflow-x\": \"hidden\",\n \"overflow-y\": \"auto\"\n });\n }\n },\n\n appendFragment: function (frag) {\n this.element.append(frag);\n },\n\n _mountChildren: function () {\n var self = this;\n var frag = BI.Widget._renderEngine.createFragment();\n var hasChild = false;\n BI.each(this._children, function (i, widget) {\n if (widget.element !== self.element) {\n frag.appendChild(widget.element[0]);\n hasChild = true;\n }\n });\n if (hasChild === true) {\n this.appendFragment(frag);\n }\n },\n\n _getChildName: function (index) {\n return index + \"\";\n },\n\n _addElement: function (i, item, context) {\n var self = this, w;\n if (!this.hasWidget(this._getChildName(i))) {\n w = BI.createWidget(item, context);\n w.on(BI.Events.DESTROY, function () {\n BI.each(self._children, function (name, child) {\n if (child === w) {\n BI.remove(self._children, child);\n self.removeItemAt(name | 0);\n }\n });\n });\n this.addWidget(this._getChildName(i), w);\n } else {\n w = this.getWidgetByName(this._getChildName(i));\n }\n return w;\n },\n\n _getOptions: function (item) {\n if (item instanceof BI.Widget) {\n item = item.options;\n }\n item = BI.stripEL(item);\n if (item instanceof BI.Widget) {\n item = item.options;\n }\n return item;\n },\n\n _compare: function (item1, item2) {\n var self = this;\n return eq(item1, item2);\n\n // 不比较函数\n function eq (a, b, aStack, bStack) {\n if (a === b) {\n return a !== 0 || 1 / a === 1 / b;\n }\n if (a == null || b == null) {\n return a === b;\n }\n var className = Object.prototype.toString.call(a);\n switch (className) {\n case \"[object RegExp]\":\n case \"[object String]\":\n return \"\" + a === \"\" + b;\n case \"[object Number]\":\n if (+a !== +a) {\n return +b !== +b;\n }\n return +a === 0 ? 1 / +a === 1 / b : +a === +b;\n case \"[object Date]\":\n case \"[object Boolean]\":\n return +a === +b;\n }\n\n var areArrays = className === \"[object Array]\";\n if (!areArrays) {\n if (BI.isFunction(a) && BI.isFunction(b)) {\n return true;\n }\n a = self._getOptions(a);\n b = self._getOptions(b);\n }\n\n aStack = aStack || [];\n bStack = bStack || [];\n var length = aStack.length;\n while (length--) {\n if (aStack[length] === a) {\n return bStack[length] === b;\n }\n }\n\n aStack.push(a);\n bStack.push(b);\n\n if (areArrays) {\n length = a.length;\n if (length !== b.length) {\n return false;\n }\n while (length--) {\n if (!eq(a[length], b[length], aStack, bStack)) {\n return false;\n }\n }\n } else {\n var keys = _.keys(a), key;\n length = keys.length;\n if (_.keys(b).length !== length) {\n return false;\n }\n while (length--) {\n key = keys[length];\n if (!(_.has(b, key) && eq(a[key], b[key], aStack, bStack))) {\n return false;\n }\n }\n }\n aStack.pop();\n bStack.pop();\n return true;\n }\n },\n\n _getWrapper: function () {\n return this.element;\n },\n\n _addItemAt: function (index, item) {\n for (var i = this.options.items.length; i > index; i--) {\n this._children[this._getChildName(i)] = this._children[this._getChildName(i - 1)];\n }\n delete this._children[this._getChildName(index)];\n this.options.items.splice(index, 0, item);\n },\n\n _removeItemAt: function (index) {\n for (var i = index; i < this.options.items.length - 1; i++) {\n this._children[this._getChildName(i)] = this._children[this._getChildName(i + 1)];\n }\n delete this._children[this._getChildName(this.options.items.length - 1)];\n this.options.items.splice(index, 1);\n },\n\n /**\n * 添加一个子组件到容器中\n * @param {JSON/BI.Widget} item 子组件\n */\n addItem: function (item) {\n return this.addItemAt(this.options.items.length, item);\n },\n\n prependItem: function (item) {\n return this.addItemAt(0, item);\n },\n\n addItemAt: function (index, item) {\n if (index < 0 || index > this.options.items.length) {\n return;\n }\n this._addItemAt(index, item);\n var w = this._addElement(index, item);\n if (index > 0) {\n this._children[this._getChildName(index - 1)].element.after(w.element);\n } else {\n w.element.prependTo(this._getWrapper());\n }\n w._mount();\n return w;\n },\n\n removeItemAt: function (indexes) {\n indexes = BI.isArray(indexes) ? indexes : [indexes];\n var deleted = [];\n var newItems = [], newChildren = {};\n for (var i = 0, len = this.options.items.length; i < len; i++) {\n var child = this._children[this._getChildName(i)];\n if (BI.contains(indexes, i)) {\n child && deleted.push(child);\n } else {\n newChildren[this._getChildName(newItems.length)] = child;\n newItems.push(this.options.items[i]);\n }\n }\n this.options.items = newItems;\n this._children = newChildren;\n BI.each(deleted, function (i, c) {\n c._destroy();\n });\n },\n\n shouldUpdateItem: function (index, item) {\n if (index < 0 || index > this.options.items.length - 1) {\n return false;\n }\n var child = this._children[this._getChildName(index)];\n if (!child.shouldUpdate) {\n return null;\n }\n return child.shouldUpdate(this._getOptions(item)) === true;\n },\n\n updateItemAt: function (index, item) {\n if (index < 0 || index > this.options.items.length - 1) {\n return;\n }\n\n var child = this._children[this._getChildName(index)];\n var updated;\n if (updated = child.update(this._getOptions(item))) {\n return updated;\n }\n var del = this._children[this._getChildName(index)];\n delete this._children[this._getChildName(index)];\n this.options.items.splice(index, 1);\n var w = this._addElement(index, item);\n this.options.items.splice(index, 0, item);\n this._children[this._getChildName(index)] = w;\n if (index > 0) {\n this._children[this._getChildName(index - 1)].element.after(w.element);\n } else {\n w.element.prependTo(this._getWrapper());\n }\n del._destroy();\n w._mount();\n },\n\n addItems: function (items, context) {\n var self = this, o = this.options;\n var fragment = BI.Widget._renderEngine.createFragment();\n var added = [];\n BI.each(items, function (i, item) {\n var w = self._addElement(o.items.length, item, context);\n self._children[self._getChildName(o.items.length)] = w;\n o.items.push(item);\n added.push(w);\n fragment.appendChild(w.element[0]);\n });\n if (this._isMounted) {\n this._getWrapper().append(fragment);\n BI.each(added, function (i, w) {\n w._mount();\n });\n }\n },\n\n prependItems: function (items, context) {\n var self = this;\n items = items || [];\n var fragment = BI.Widget._renderEngine.createFragment();\n var added = [];\n for (var i = items.length - 1; i >= 0; i--) {\n this._addItemAt(0, items[i]);\n var w = this._addElement(0, items[i], context);\n self._children[self._getChildName(0)] = w;\n this.options.items.unshift(items[i]);\n added.push(w);\n fragment.appendChild(w.element[0]);\n }\n if (this._isMounted) {\n this._getWrapper().prepend(fragment);\n BI.each(added, function (i, w) {\n w._mount();\n });\n }\n },\n\n getValue: function () {\n var self = this, value = [], child;\n BI.each(this.options.items, function (i) {\n if (child = self._children[self._getChildName(i)]) {\n var v = child.getValue();\n v = BI.isArray(v) ? v : [v];\n value = value.concat(v);\n }\n });\n return value;\n },\n\n setValue: function (v) {\n var self = this, child;\n BI.each(this.options.items, function (i) {\n if (child = self._children[self._getChildName(i)]) {\n child.setValue(v);\n }\n });\n },\n\n setText: function (v) {\n var self = this, child;\n BI.each(this.options.items, function (i) {\n if (child = self._children[self._getChildName(i)]) {\n child.setText(v);\n }\n });\n },\n\n patchItem: function (oldVnode, vnode, index) {\n var shouldUpdate = this.shouldUpdateItem(index, vnode);\n if (shouldUpdate === true || (shouldUpdate === null && !this._compare(oldVnode, vnode))) {\n return this.updateItemAt(index, vnode);\n }\n },\n\n updateChildren: function (oldCh, newCh) {\n var self = this;\n var oldStartIdx = 0, newStartIdx = 0;\n var oldEndIdx = oldCh.length - 1;\n var oldStartVnode = oldCh[0];\n var oldEndVnode = oldCh[oldEndIdx];\n var newEndIdx = newCh.length - 1;\n var newStartVnode = newCh[0];\n var newEndVnode = newCh[newEndIdx];\n var before;\n var updated;\n var children = {};\n BI.each(oldCh, function (i, child) {\n child = self._getOptions(child);\n var key = child.key == null ? i : child.key;\n if (BI.isKey(key)) {\n children[key] = self._children[self._getChildName(i)];\n }\n });\n\n while (oldStartIdx <= oldEndIdx && newStartIdx <= newEndIdx) {\n if (BI.isNull(oldStartVnode)) {\n oldStartVnode = oldCh[++oldStartIdx];\n } else if (BI.isNull(oldEndVnode)) {\n oldEndVnode = oldCh[--oldEndIdx];\n } else if (sameVnode(oldStartVnode, newStartVnode, oldStartIdx, newStartIdx)) {\n updated = this.patchItem(oldStartVnode, newStartVnode, oldStartIdx) || updated;\n children[oldStartVnode.key == null ? this._getChildName(oldStartIdx) : oldStartVnode.key] = this._children[this._getChildName(oldStartIdx)];\n oldStartVnode = oldCh[++oldStartIdx];\n newStartVnode = newCh[++newStartIdx];\n } else if (sameVnode(oldEndVnode, newEndVnode, oldEndIdx, newEndIdx)) {\n updated = this.patchItem(oldEndVnode, newEndVnode, oldEndIdx) || updated;\n children[oldEndVnode.key == null ? this._getChildName(oldEndIdx) : oldEndVnode.key] = this._children[this._getChildName(oldEndIdx)];\n oldEndVnode = oldCh[--oldEndIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldStartVnode, newEndVnode)) {\n updated = this.patchItem(oldStartVnode, newEndVnode, oldStartIdx) || updated;\n children[oldStartVnode.key == null ? this._getChildName(oldStartIdx) : oldStartVnode.key] = this._children[this._getChildName(oldStartIdx)];\n insertBefore(oldStartVnode, oldEndVnode, true);\n oldStartVnode = oldCh[++oldStartIdx];\n newEndVnode = newCh[--newEndIdx];\n } else if (sameVnode(oldEndVnode, newStartVnode)) {\n updated = this.patchItem(oldEndVnode, newStartVnode, oldEndIdx) || updated;\n children[oldEndVnode.key == null ? this._getChildName(oldEndIdx) : oldEndVnode.key] = this._children[this._getChildName(oldEndIdx)];\n insertBefore(oldEndVnode, oldStartVnode);\n oldEndVnode = oldCh[--oldEndIdx];\n newStartVnode = newCh[++newStartIdx];\n } else {\n var sameOldVnode = findOldVnode(oldCh, newStartVnode, oldStartIdx, oldEndIdx);\n if (BI.isNull(sameOldVnode)) { // 不存在就把新的放到左边\n var node = addNode(newStartVnode);\n insertBefore(node, oldStartVnode);\n newStartVnode = newCh[++newStartIdx];\n } else { // 如果新节点在就旧节点区间中存在就复用一下\n BI.each(oldCh, function (index, child) {\n if (child && sameVnode(child, newStartVnode)) {\n updated = self.patchItem(sameOldVnode, newStartVnode, index) || updated;\n children[sameOldVnode.key == null ? self._getChildName(index) : sameOldVnode.key] = self._children[self._getChildName(index)];\n oldCh[index] = undefined;\n insertBefore(sameOldVnode, oldStartVnode);\n }\n });\n newStartVnode = newCh[++newStartIdx];\n }\n }\n }\n if (oldStartIdx > oldEndIdx) {\n before = BI.isNull(newCh[newEndIdx + 1]) ? null : newCh[newEndIdx + 1];\n addVnodes(before, newCh, newStartIdx, newEndIdx);\n } else if (newStartIdx > newEndIdx) {\n removeVnodes(oldCh, oldStartIdx, oldEndIdx);\n }\n\n this._children = {};\n BI.each(newCh, function (i, child) {\n var node = self._getOptions(child);\n var key = node.key == null ? self._getChildName(i) : node.key;\n children[key]._mount();\n self._children[self._getChildName(i)] = children[key];\n });\n\n function sameVnode (vnode1, vnode2, oldIndex, newIndex) {\n vnode1 = self._getOptions(vnode1);\n vnode2 = self._getOptions(vnode2);\n if (BI.isKey(vnode1.key)) {\n return vnode1.key === vnode2.key;\n }\n if (oldIndex >= 0) {\n return oldIndex === newIndex;\n }\n }\n\n function addNode (vnode, index) {\n var opt = self._getOptions(vnode);\n var key = opt.key == null ? self._getChildName(index) : opt.key;\n return children[key] = self._addElement(key, vnode);\n }\n\n function addVnodes (before, vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var node = addNode(vnodes[startIdx], startIdx);\n insertBefore(node, before, false, startIdx);\n }\n }\n\n function removeVnodes (vnodes, startIdx, endIdx) {\n for (; startIdx <= endIdx; ++startIdx) {\n var ch = vnodes[startIdx];\n if (BI.isNotNull(ch)) {\n var node = self._getOptions(ch);\n var key = node.key == null ? self._getChildName(startIdx) : node.key;\n delete self._children[self._getChildName(key)];\n children[key]._destroy();\n }\n }\n }\n\n function insertBefore (insert, before, isNext, index) {\n insert = self._getOptions(insert);\n before = before && self._getOptions(before);\n var insertKey = BI.isKey(insert.key) ? insert.key : self._getChildName(index);\n if (before && children[before.key]) {\n var beforeKey = BI.isKey(before.key) ? before.key : self._getChildName(index);\n var next;\n if (isNext) {\n next = children[beforeKey].element.next();\n } else {\n next = children[beforeKey].element;\n }\n if (next.length > 0) {\n next.before(children[insertKey].element);\n } else {\n self._getWrapper().append(children[insertKey].element);\n }\n } else {\n self._getWrapper().append(children[insertKey].element);\n }\n }\n\n function findOldVnode (vnodes, vNode, beginIdx, endIdx) {\n var i, found;\n for (i = beginIdx; i <= endIdx; ++i) {\n if (vnodes[i] && sameVnode(vnodes[i], vNode)) {\n found = vnodes[i];\n }\n }\n return found;\n }\n\n return updated;\n },\n\n update: function (opt) {\n var o = this.options;\n var items = opt.items || [];\n var updated = this.updateChildren(o.items, items);\n this.options.items = items;\n return updated;\n // var updated, i, len;\n // for (i = 0, len = Math.min(o.items.length, items.length); i < len; i++) {\n // if (!this._compare(o.items[i], items[i])) {\n // updated = this.updateItemAt(i, items[i]) || updated;\n // }\n // }\n // if (o.items.length > items.length) {\n // var deleted = [];\n // for (i = items.length; i < o.items.length; i++) {\n // deleted.push(this._children[this._getChildName(i)]);\n // delete this._children[this._getChildName(i)];\n // }\n // o.items.splice(items.length);\n // BI.each(deleted, function (i, w) {\n // w._destroy();\n // })\n // } else if (items.length > o.items.length) {\n // for (i = o.items.length; i < items.length; i++) {\n // this.addItemAt(i, items[i]);\n // }\n // }\n // return updated;\n },\n\n stroke: function (items) {\n var self = this;\n BI.each(items, function (i, item) {\n if (item) {\n self._addElement(i, item);\n }\n });\n },\n\n removeWidget: function (nameOrWidget) {\n var removeIndex;\n if (BI.isWidget(nameOrWidget)) {\n BI.each(this._children, function (name, child) {\n if (child === nameOrWidget) {\n removeIndex = name;\n }\n });\n } else {\n removeIndex = nameOrWidget;\n }\n if (removeIndex) {\n this._removeItemAt(removeIndex | 0);\n }\n },\n\n empty: function () {\n BI.Layout.superclass.empty.apply(this, arguments);\n this.options.items = [];\n },\n\n destroy: function () {\n BI.Layout.superclass.destroy.apply(this, arguments);\n this.options.items = [];\n },\n\n populate: function (items) {\n var self = this, o = this.options;\n items = items || [];\n if (this._isMounted) {\n this.update({items: items});\n return;\n }\n this.options.items = items;\n this.stroke(items);\n },\n\n resize: function () {\n\n }\n});\nBI.shortcut(\"bi.layout\", BI.Layout);\n","BI.Plugin = BI.Plugin || {};\n!(function () {\n var _WidgetsPlugin = {};\n var _ObjectPlugin = {};\n var _ConfigPlugin = {};\n var _GlobalWidgetConfigFn, _GlobalObjectConfigFn;\n BI.extend(BI.Plugin, {\n\n getWidget: function (type, options) {\n if (_GlobalWidgetConfigFn) {\n _GlobalWidgetConfigFn(type, options);\n }\n var res;\n if (_ConfigPlugin[type]) {\n for (var i = _ConfigPlugin[type].length - 1; i >= 0; i--) {\n if (res = _ConfigPlugin[type][i](options)) {\n options = res;\n }\n }\n }\n // Deprecated\n if (_WidgetsPlugin[type]) {\n for (var i = _WidgetsPlugin[type].length - 1; i >= 0; i--) {\n if (res = _WidgetsPlugin[type][i](options)) {\n return res;\n }\n }\n }\n return options;\n },\n\n config: function (widgetConfigFn, objectConfigFn) {\n _GlobalWidgetConfigFn = widgetConfigFn;\n _GlobalObjectConfigFn = objectConfigFn;\n },\n\n configWidget: function (type, fn) {\n if (!_ConfigPlugin[type]) {\n _ConfigPlugin[type] = [];\n }\n _ConfigPlugin[type].push(fn);\n },\n\n registerWidget: function (type, fn) {\n if (!_WidgetsPlugin[type]) {\n _WidgetsPlugin[type] = [];\n }\n if (_WidgetsPlugin[type].length > 0) {\n console.log(\"组件已经注册过了!\");\n }\n _WidgetsPlugin[type].push(fn);\n },\n\n relieveWidget: function (type) {\n delete _WidgetsPlugin[type];\n },\n\n getObject: function (type, object) {\n if (_GlobalObjectConfigFn) {\n _GlobalObjectConfigFn(type, object);\n }\n if (_ObjectPlugin[type]) {\n var res;\n for (var i = 0, len = _ObjectPlugin[type].length; i < len; i++) {\n if (res = _ObjectPlugin[type][i](object)) {\n object = res;\n };\n }\n }\n return res || object;\n },\n\n registerObject: function (type, fn) {\n if (!_ObjectPlugin[type]) {\n _ObjectPlugin[type] = [];\n }\n if (_ObjectPlugin[type].length > 0) {\n console.log(\"对象已经注册过了!\");\n }\n _ObjectPlugin[type].push(fn);\n },\n\n relieveObject: function (type) {\n delete _ObjectPlugin[type];\n }\n });\n})();","/**\n * guy\n * 由一个元素切换到另一个元素的行为\n * @class BI.Action\n * @extends BI.OB\n * @abstract\n */\nBI.Action = BI.inherit(BI.OB, {\n _defaultConfig: function () {\n return BI.extend(BI.Action.superclass._defaultConfig.apply(this, arguments), {\n src: null,\n tar: null\n });\n },\n\n _init: function () {\n BI.Action.superclass._init.apply(this, arguments);\n },\n\n actionPerformed: function (src, tar, callback) {\n\n },\n\n actionBack: function (tar, src, callback) {\n\n }\n});\n\nBI.ActionFactory = {\n createAction: function (key, options) {\n var action;\n switch (key) {\n case \"show\":\n action = BI.ShowAction;\n break;\n }\n return new action(options);\n }\n};","/**\n * guy\n * 由一个元素切换到另一个元素的行为\n * @class BI.ShowAction\n * @extends BI.Action\n */\nBI.ShowAction = BI.inherit(BI.Action, {\n _defaultConfig: function () {\n return BI.extend(BI.ShowAction.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _init: function () {\n BI.ShowAction.superclass._init.apply(this, arguments);\n },\n\n actionPerformed: function (src, tar, callback) {\n tar = tar || this.options.tar;\n tar.setVisible(true);\n callback && callback();\n },\n\n actionBack: function (tar, src, callback) {\n tar = tar || this.options.tar;\n tar.setVisible(false);\n callback && callback();\n }\n});","/**\n * guy\n *\n * @class BI.HighlightBehavior\n * @extends BI.Behavior\n */\nBI.HighlightBehavior = BI.inherit(BI.Behavior, {\n _defaultConfig: function () {\n return BI.extend(BI.HighlightBehavior.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _init: function () {\n BI.HighlightBehavior.superclass._init.apply(this, arguments);\n\n },\n\n doBehavior: function (items) {\n var args = Array.prototype.slice.call(arguments, 1),\n o = this.options;\n BI.each(items, function (i, item) {\n if (item instanceof BI.Single) {\n var rule = o.rule(item.getValue(), item);\n\n function doBe (run) {\n if (run === true) {\n item.doHighLight && item.doHighLight.apply(item, args);\n } else {\n item.unHighLight && item.unHighLight.apply(item, args);\n }\n }\n\n if (BI.isFunction(rule)) {\n rule(doBe);\n } else {\n doBe(rule);\n }\n } else {\n item.doBehavior && item.doBehavior.apply(item, args);\n }\n });\n }\n});","/**\n * guy\n * 标红行为\n * @class BI.RedMarkBehavior\n * @extends BI.Behavior\n */\nBI.RedMarkBehavior = BI.inherit(BI.Behavior, {\n _defaultConfig: function () {\n return BI.extend(BI.RedMarkBehavior.superclass._defaultConfig.apply(this, arguments), {\n\n });\n },\n\n _init: function () {\n BI.RedMarkBehavior.superclass._init.apply(this, arguments);\n\n },\n\n doBehavior: function (items) {\n var args = Array.prototype.slice.call(arguments, 1),\n o = this.options;\n BI.each(items, function (i, item) {\n if(item instanceof BI.Single) {\n if (o.rule(item.getValue(), item)) {\n item.doRedMark && item.doRedMark.apply(item, args);\n } else {\n item.doRedMark && item.unRedMark.apply(item, args);\n }\n } else {\n item.doBehavior && item.doBehavior.apply(item, args);\n }\n });\n }\n});","/**\n * guy\n * 控制器\n * Controller层超类\n * @class BI.Controller\n * @extends BI.OB\n * @abstract\n */\nBI.Controller = BI.inherit(BI.OB, {\n _defaultConfig: function () {\n return BI.extend(BI.Controller.superclass._defaultConfig.apply(this, arguments), {\n\n });\n },\n _init: function () {\n BI.Controller.superclass._init.apply(this, arguments);\n },\n\n destroy: function () {\n\n }\n});\nBI.Controller.EVENT_CHANGE = \"__EVENT_CHANGE__\";","/**\n * 广播\n *\n * Created by GUY on 2015/12/23.\n * @class\n */\nBI.BroadcastController = BI.inherit(BI.Controller, {\n _defaultConfig: function () {\n return BI.extend(BI.BroadcastController.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _init: function () {\n BI.BroadcastController.superclass._init.apply(this, arguments);\n this._broadcasts = {};\n },\n\n on: function (name, fn) {\n var self = this;\n if (!this._broadcasts[name]) {\n this._broadcasts[name] = [];\n }\n this._broadcasts[name].push(fn);\n return function () {\n self.remove(name, fn);\n };\n },\n\n send: function (name) {\n var args = [].slice.call(arguments, 1);\n BI.each(this._broadcasts[name], function (i, fn) {\n fn.apply(null, args);\n });\n },\n\n remove: function (name, fn) {\n var self = this;\n if (fn) {\n BI.remove(this._broadcasts[name], function (idx) {\n return self._broadcasts[name].indexOf(fn) === idx;\n });\n this._broadcasts[name].remove(fn);\n if (this._broadcasts[name].length === 0) {\n delete this._broadcasts[name];\n }\n } else {\n delete this._broadcasts[name];\n }\n return this;\n }\n});","/**\n * 气泡图控制器\n * 控制气泡图的显示方向\n *\n * Created by GUY on 2015/8/21.\n * @class\n */\nBI.BubblesController = BI.inherit(BI.Controller, {\n _defaultConfig: function () {\n return BI.extend(BI.BubblesController.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _const: {\n bubbleHeight: 18\n },\n\n _init: function () {\n BI.BubblesController.superclass._init.apply(this, arguments);\n var self = this;\n this.bubblesManager = {};\n this.storeBubbles = {};\n BI.Resizers.add(\"bubbleController\" + BI.uniqueId(), function () {\n BI.each(self.bubblesManager, function (name) {\n self.remove(name);\n });\n self.bubblesManager = {};\n self.storeBubbles = {};\n });\n },\n\n _createBubble: function (direct, text, level, height) {\n return BI.createWidget({\n type: \"bi.bubble\",\n text: text,\n level: level,\n height: height || 18,\n direction: direct\n });\n },\n\n _getOffsetLeft: function (name, context, offsetStyle) {\n var left = 0;\n if (\"center\" === offsetStyle) {\n left = context.element.offset().left + (context.element.bounds().width - this.get(name).element.bounds().width) / 2;\n if (left < 0) {\n left = 0;\n }\n return left;\n }\n if (\"right\" === offsetStyle) {\n left = context.element.offset().left + context.element.bounds().width - this.get(name).element.bounds().width;\n if (left < 0) {\n left = 0;\n }\n return left;\n }\n return context.element.offset().left;\n },\n\n _getOffsetTop: function (name, context, offsetStyle) {\n var top = 0;\n if (\"center\" === offsetStyle) {\n top = context.element.offset().top + (context.element.bounds().height - this.get(name).element.bounds().height) / 2;\n if (top < 0) {\n top = 0;\n }\n return top;\n } else if (\"right\" === offsetStyle) {\n top = context.element.offset().top + context.element.bounds().height - this.get(name).element.bounds().height;\n if (top < 0) {\n top = 0;\n }\n return top;\n }\n return context.element.offset().top;\n },\n\n _getLeftPosition: function (name, context, offsetStyle) {\n var position = BI.DOM.getLeftPosition(context, this.get(name));\n position.top = this._getOffsetTop(name, context, offsetStyle);\n return position;\n },\n\n _getBottomPosition: function (name, context, offsetStyle) {\n var position = BI.DOM.getBottomPosition(context, this.get(name));\n position.left = this._getOffsetLeft(name, context, offsetStyle);\n return position;\n },\n\n _getTopPosition: function (name, context, offsetStyle) {\n var position = BI.DOM.getTopPosition(context, this.get(name));\n position.left = this._getOffsetLeft(name, context, offsetStyle);\n return position;\n },\n\n _getRightPosition: function (name, context, offsetStyle) {\n var position = BI.DOM.getRightPosition(context, this.get(name));\n position.top = this._getOffsetTop(name, context, offsetStyle);\n return position;\n },\n\n /**\n *\n * @param name\n * @param text\n * @param context\n * @param offsetStyle center, left, right三种类型, 默认left\n * @returns {BI.BubblesController}\n */\n show: function (name, text, context, opt) {\n opt || (opt = {});\n var container = opt.container || context;\n var offsetStyle = opt.offsetStyle || {};\n var level = opt.level || \"error\";\n var adjustYOffset = opt.adjustYOffset || 0;\n var adjustXOffset = opt.adjustXOffset || 0;\n if (!this.storeBubbles[name]) {\n this.storeBubbles[name] = {};\n }\n if (!this.storeBubbles[name][\"top\"]) {\n this.storeBubbles[name][\"top\"] = this._createBubble(\"top\", text, level);\n }\n BI.createWidget({\n type: \"bi.absolute\",\n element: container,\n items: [{\n el: this.storeBubbles[name][\"top\"]\n }]\n });\n this.set(name, this.storeBubbles[name][\"top\"]);\n var position = this._getTopPosition(name, context, offsetStyle);\n this.get(name).element.css({left: position.left + adjustXOffset, top: position.top - adjustYOffset});\n this.get(name).invisible();\n if (!BI.DOM.isTopSpaceEnough(context, this.get(name), adjustYOffset)) {\n if (!this.storeBubbles[name][\"left\"]) {\n this.storeBubbles[name][\"left\"] = this._createBubble(\"left\", text, level, 30);\n }\n BI.createWidget({\n type: \"bi.absolute\",\n element: container,\n items: [{\n el: this.storeBubbles[name][\"left\"]\n }]\n });\n this.set(name, this.storeBubbles[name][\"left\"]);\n var position = this._getLeftPosition(name, context, offsetStyle);\n this.get(name).element.css({left: position.left - adjustXOffset, top: position.top - adjustYOffset});\n this.get(name).invisible();\n if (!BI.DOM.isLeftSpaceEnough(context, this.get(name), adjustXOffset)) {\n if (!this.storeBubbles[name][\"right\"]) {\n this.storeBubbles[name][\"right\"] = this._createBubble(\"right\", text, level, 30);\n }\n BI.createWidget({\n type: \"bi.absolute\",\n element: container,\n items: [{\n el: this.storeBubbles[name][\"right\"]\n }]\n });\n this.set(name, this.storeBubbles[name][\"right\"]);\n var position = this._getRightPosition(name, context, offsetStyle);\n this.get(name).element.css({left: position.left + adjustXOffset, top: position.top - adjustYOffset});\n this.get(name).invisible();\n if (!BI.DOM.isRightSpaceEnough(context, this.get(name), adjustXOffset)) {\n if (!this.storeBubbles[name][\"bottom\"]) {\n this.storeBubbles[name][\"bottom\"] = this._createBubble(\"bottom\", text, level);\n }\n BI.createWidget({\n type: \"bi.absolute\",\n element: container,\n items: [{\n el: this.storeBubbles[name][\"bottom\"]\n }]\n });\n this.set(name, this.storeBubbles[name][\"bottom\"]);\n var position = this._getBottomPosition(name, context, offsetStyle);\n this.get(name).element.css({left: position.left + adjustXOffset, top: position.top + adjustYOffset});\n this.get(name).invisible();\n }\n }\n }\n this.get(name).setText(text);\n this.get(name).visible();\n return this;\n },\n\n hide: function (name) {\n if (!this.has(name)) {\n return this;\n }\n this.get(name).invisible();\n return this;\n },\n\n add: function (name, bubble) {\n if (this.has(name)) {\n return this;\n }\n this.set(name, bubble);\n return this;\n },\n\n get: function (name) {\n return this.bubblesManager[name];\n },\n\n set: function (name, bubble) {\n this.bubblesManager[name] = bubble;\n },\n\n has: function (name) {\n return this.bubblesManager[name] != null;\n },\n\n remove: function (name) {\n if (!this.has(name)) {\n return this;\n }\n BI.each(this.storeBubbles[name], function (dir, bubble) {\n bubble.destroy();\n });\n delete this.storeBubbles[name];\n delete this.bubblesManager[name];\n return this;\n }\n});","/**\n * 弹出层面板控制器, z-index在10w层级\n *\n * Created by GUY on 2015/6/24.\n * @class\n */\nBI.LayerController = BI.inherit(BI.Controller, {\n _defaultConfig: function () {\n return BI.extend(BI.LayerController.superclass._defaultConfig.apply(this, arguments), {\n render: \"body\"\n });\n },\n\n _init: function () {\n BI.LayerController.superclass._init.apply(this, arguments);\n this.layerManager = {};\n this.layouts = {};\n this.zindex = BI.zIndex_layer;\n BI.Resizers.add(\"layerController\" + BI.uniqueId(), BI.bind(this._resize, this));\n },\n\n _resize: function () {\n BI.each(this.layouts, function (i, layer) {\n if (layer.element.is(\":visible\")) {\n layer.element.trigger(\"__resize__\");\n }\n });\n },\n\n make: function (name, container, op, context) {\n if (BI.isWidget(container)) {\n op = op || {};\n op.container = container;\n } else {\n context = op;\n op = container;\n }\n return this.create(name, null, op, context);\n },\n\n create: function (name, from, op, context) {\n if (this.has(name)) {\n return this.get(name);\n }\n op || (op = {});\n var offset = op.offset || {};\n var w = from;\n if (BI.isWidget(from)) {\n w = from.element;\n }\n if (BI.isNotEmptyString(w)) {\n w = BI.Widget._renderEngine.createElement(w);\n }\n if (this.has(name)) {\n return this.get(name);\n }\n var widget = BI.createWidget((op.render || {}), BI.extend({\n type: \"bi.layout\"\n }, op), context);\n var layout = BI.createWidget({\n type: \"bi.absolute\",\n invisible: true,\n items: [{\n el: widget,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n }, context);\n BI.createWidget({\n type: \"bi.absolute\",\n element: op.container || this.options.render,\n items: [{\n el: layout,\n left: offset.left || 0,\n right: offset.right || 0,\n top: offset.top || 0,\n bottom: offset.bottom || 0\n }]\n });\n if (w) {\n layout.element.addClass(\"bi-popup-view\");\n layout.element.css({\n left: w.offset().left + (offset.left || 0),\n top: w.offset().top + (offset.top || 0),\n width: offset.width || (w.outerWidth() - (offset.left || 0) - (offset.right || 0)) || \"\",\n height: offset.height || (w.outerHeight() - (offset.top || 0) - (offset.bottom || 0)) || \"\"\n });\n layout.element.on(\"__resize__\", function () {\n w.is(\":visible\") &&\n layout.element.css({\n left: w.offset().left + (offset.left || 0),\n top: w.offset().top + (offset.top || 0),\n width: offset.width || (w.outerWidth() - (offset.left || 0) - (offset.right || 0)) || \"\",\n height: offset.height || (w.outerHeight() - (offset.top || 0) - (offset.bottom || 0)) || \"\"\n });\n });\n }\n this.add(name, widget, layout);\n return widget;\n },\n\n hide: function (name, callback) {\n if (!this.has(name)) {\n return this;\n }\n this._getLayout(name).invisible();\n this._getLayout(name).element.hide(0, callback);\n return this;\n },\n\n show: function (name, callback) {\n if (!this.has(name)) {\n return this;\n }\n this._getLayout(name).visible();\n this._getLayout(name).element.css(\"z-index\", this.zindex++).show(0, callback).trigger(\"__resize__\");\n return this;\n },\n\n isVisible: function (name) {\n return this.has(name) && this._getLayout(name).isVisible();\n },\n\n add: function (name, layer, layout) {\n if (this.has(name)) {\n throw new Error(\"name is already exist\");\n }\n layout.setVisible(false);\n this.layerManager[name] = layer;\n this.layouts[name] = layout;\n layout.element.css(\"z-index\", this.zindex++);\n return this;\n },\n\n _getLayout: function (name) {\n return this.layouts[name];\n },\n\n get: function (name) {\n return this.layerManager[name];\n },\n\n has: function (name) {\n return this.layerManager[name] != null;\n },\n\n remove: function (name) {\n if (!this.has(name)) {\n return this;\n }\n this.layerManager[name].destroy();\n this.layouts[name].destroy();\n delete this.layerManager[name];\n delete this.layouts[name];\n return this;\n },\n\n removeAll: function () {\n var self = this;\n BI.each(BI.keys(this.layerManager), function (index, name) {\n self.layerManager[name].destroy();\n self.layouts[name].destroy();\n });\n this.layerManager = {};\n this.layouts = {};\n return this;\n }\n});","/**\n * 遮罩面板, z-index在1亿层级\n *\n * Created by GUY on 2015/6/24.\n * @class\n */\nBI.MaskersController = BI.inherit(BI.LayerController, {\n _defaultConfig: function () {\n return BI.extend(BI.MaskersController.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _init: function () {\n BI.MaskersController.superclass._init.apply(this, arguments);\n this.zindex = BI.zIndex_masker;\n }\n});","/**\n * guy\n * popover弹出层控制器, z-index在100w层级\n * @class BI.popoverController\n * @extends BI.Controller\n */\nBI.PopoverController = BI.inherit(BI.Controller, {\n _defaultConfig: function () {\n return BI.extend(BI.PopoverController.superclass._defaultConfig.apply(this, arguments), {\n modal: true, // 模态窗口\n render: \"body\"\n });\n },\n\n _init: function () {\n BI.PopoverController.superclass._init.apply(this, arguments);\n this.modal = this.options.modal;\n this.floatManager = {};\n this.floatLayer = {};\n this.floatContainer = {};\n this.floatOpened = {};\n this.zindex = BI.zIndex_popover;\n this.zindexMap = {};\n },\n\n _check: function (name) {\n return BI.isNotNull(this.floatManager[name]);\n },\n\n create: function (name, options, context) {\n if (this._check(name)) {\n return this;\n }\n var popover = BI.createWidget(options || {}, {\n type: \"bi.popover\"\n }, context);\n this.add(name, popover, options, context);\n return this;\n },\n\n add: function (name, popover, options, context) {\n var self = this;\n options || (options = {});\n if (this._check(name)) {\n return this;\n }\n this.floatContainer[name] = BI.createWidget({\n type: \"bi.absolute\",\n cls: \"bi-popup-view\",\n items: [{\n el: (this.floatLayer[name] = BI.createWidget({\n type: \"bi.absolute\",\n items: [popover]\n }, context)),\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n this.floatManager[name] = popover;\n (function (key) {\n popover.on(BI.Popover.EVENT_CLOSE, function () {\n self.close(key);\n });\n })(name);\n BI.createWidget({\n type: \"bi.absolute\",\n element: options.container || this.options.render,\n items: [{\n el: this.floatContainer[name],\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n return this;\n },\n\n open: function (name) {\n if (!this._check(name)) {\n return this;\n }\n if (!this.floatOpened[name]) {\n this.floatOpened[name] = true;\n var container = this.floatContainer[name];\n container.element.css(\"zIndex\", this.zindex++);\n this.modal && container.element.__hasZIndexMask__(this.zindexMap[name]) && container.element.__releaseZIndexMask__(this.zindexMap[name]);\n this.zindexMap[name] = this.zindex;\n this.modal && container.element.__buildZIndexMask__(this.zindex++);\n this.get(name).setZindex(this.zindex++);\n this.floatContainer[name].visible();\n var popover = this.get(name);\n popover.show && popover.show();\n var W = BI.Widget._renderEngine.createElement(this.options.render).width(), H = BI.Widget._renderEngine.createElement(this.options.render).height();\n var w = popover.element.width(), h = popover.element.height();\n var left = (W - w) / 2, top = (H - h) / 2;\n if (left < 0) {\n left = 0;\n }\n if (top < 0) {\n top = 0;\n }\n popover.element.css({\n left: left + \"px\",\n top: top + \"px\"\n });\n }\n return this;\n },\n\n close: function (name) {\n if (!this._check(name)) {\n return this;\n }\n if (this.floatOpened[name]) {\n delete this.floatOpened[name];\n this.floatContainer[name].invisible();\n this.modal && this.floatContainer[name].element.__releaseZIndexMask__(this.zindexMap[name]);\n }\n return this;\n },\n\n get: function (name) {\n return this.floatManager[name];\n },\n\n remove: function (name) {\n if (!this._check(name)) {\n return this;\n }\n this.floatContainer[name].destroy();\n this.modal && this.floatContainer[name].element.__releaseZIndexMask__(this.zindexMap[name]);\n delete this.floatManager[name];\n delete this.floatLayer[name];\n delete this.zindexMap[name];\n delete this.floatContainer[name];\n delete this.floatOpened[name];\n return this;\n },\n\n removeAll: function () {\n var self = this;\n BI.each(this.floatContainer, function (name, container) {\n container.destroy();\n self.modal && self.floatContainer[name].element.__releaseZIndexMask__(self.zindexMap[name]);\n });\n this.floatManager = {};\n this.floatLayer = {};\n this.floatContainer = {};\n this.floatOpened = {};\n this.zindexMap = {};\n return this;\n }\n});","/**\n * window.resize 控制器\n *\n * Created by GUY on 2015/6/24.\n * @class\n */\nBI.ResizeController = BI.inherit(BI.Controller, {\n _defaultConfig: function () {\n return BI.extend(BI.ResizeController.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _init: function () {\n BI.ResizeController.superclass._init.apply(this, arguments);\n var self = this;\n this.resizerManger = {};\n var fn = BI.debounce(function (ev) {\n // if (BI.isWindow(ev.target)) {\n self._resize(ev);\n // }\n }, 30);\n BI.Widget._renderEngine.createElement(_global).resize(fn);\n },\n\n _resize: function (ev) {\n BI.each(this.resizerManger, function (key, resizer) {\n if (resizer instanceof BI.$) {\n if (resizer.is(\":visible\")) {\n resizer.trigger(\"__resize__\");\n }\n return;\n }\n if (resizer instanceof BI.Layout) {\n resizer.resize();\n return;\n }\n if (BI.isFunction(resizer)) {\n resizer(ev);\n return;\n }\n });\n },\n\n add: function (name, resizer) {\n var self = this;\n if (this.has(name)) {\n return this;\n }\n this.resizerManger[name] = resizer;\n return function () {\n self.remove(name);\n };\n },\n\n get: function (name) {\n return this.resizerManger[name];\n },\n\n has: function (name) {\n return this.resizerManger[name] != null;\n },\n\n remove: function (name) {\n if (!this.has(name)) {\n return this;\n }\n delete this.resizerManger[name];\n return this;\n }\n});","/**\n * tooltip控制器\n * 控制tooltip的显示, 且页面中只有一个tooltip显示\n *\n * Created by GUY on 2015/9/8.\n * @class BI.TooltipsController\n * @extends BI.Controller\n */\nBI.TooltipsController = BI.inherit(BI.Controller, {\n _defaultConfig: function () {\n return BI.extend(BI.TooltipsController.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _const: {\n height: 18\n },\n\n _init: function () {\n BI.TooltipsController.superclass._init.apply(this, arguments);\n this.tooltipsManager = {};\n this.showingTips = {};// 存储正在显示的tooltip\n },\n\n _createTooltip: function (text, level) {\n return BI.createWidget({\n type: \"bi.tooltip\",\n text: text,\n level: level,\n stopEvent: true\n });\n },\n\n hide: function (name, callback) {\n if (!this.has(name)) {\n return this;\n }\n delete this.showingTips[name];\n this.get(name).element.hide(0, callback);\n this.get(name).invisible();\n return this;\n },\n\n create: function (name, text, level, context) {\n if (!this.has(name)) {\n var tooltip = this._createTooltip(text, level);\n this.add(name, tooltip);\n BI.createWidget({\n type: \"bi.absolute\",\n element: context || \"body\",\n items: [{\n el: tooltip\n }]\n });\n tooltip.invisible();\n }\n return this.get(name);\n },\n\n // opt: {container: '', belowMouse: false}\n show: function (e, name, text, level, context, opt) {\n opt || (opt = {});\n var self = this;\n BI.each(this.showingTips, function (i, tip) {\n self.hide(i);\n });\n this.showingTips = {};\n if (!this.has(name)) {\n this.create(name, text, level, opt.container || \"body\");\n }\n if (!opt.belowMouse) {\n var offset = context.element.offset();\n var bounds = context.element.bounds();\n if (bounds.height === 0 || bounds.width === 0) {\n return;\n }\n var top = offset.top + bounds.height + 5;\n }\n var tooltip = this.get(name);\n tooltip.setText(text);\n tooltip.element.css({\n left: \"0px\",\n top: \"0px\"\n });\n tooltip.visible();\n tooltip.element.height(tooltip.element[0].scrollHeight);\n this.showingTips[name] = true;\n // scale影响要计算在内\n // var scale = context.element.offset().left / context.element.get(0).getBoundingClientRect().left;\n // var x = (e.pageX || e.clientX) * scale + 15, y = (e.pageY || e.clientY) * scale + 15;\n var x = (e.pageX || e.clientX) + 15, y = (e.pageY || e.clientY) + 15;\n if (x + tooltip.element.outerWidth() > BI.Widget._renderEngine.createElement(\"body\").outerWidth()) {\n x -= tooltip.element.outerWidth() + 15;\n }\n var bodyHeight = BI.Widget._renderEngine.createElement(\"body\").outerHeight();\n if (y + tooltip.element.outerHeight() > bodyHeight || top + tooltip.element.outerHeight() > bodyHeight) {\n y -= tooltip.element.outerHeight() + 15;\n !opt.belowMouse && (y = Math.min(y, offset.top - tooltip.element.outerHeight() - 5));\n } else {\n !opt.belowMouse && (y = Math.max(y, top));\n }\n tooltip.element.css({\n left: x < 0 ? 0 : x + \"px\",\n top: y < 0 ? 0 : y + \"px\"\n });\n tooltip.element.hover(function () {\n self.remove(name);\n context.element.trigger(\"mouseleave.title\" + context.getName());\n });\n return this;\n },\n\n add: function (name, bubble) {\n if (this.has(name)) {\n return this;\n }\n this.set(name, bubble);\n return this;\n },\n\n get: function (name) {\n return this.tooltipsManager[name];\n },\n\n set: function (name, bubble) {\n this.tooltipsManager[name] = bubble;\n },\n\n has: function (name) {\n return this.tooltipsManager[name] != null;\n },\n\n remove: function (name) {\n if (!this.has(name)) {\n return this;\n }\n this.tooltipsManager[name].destroy();\n delete this.tooltipsManager[name];\n return this;\n }\n});","/**\n * 事件集合\n * @class BI.Events\n */\n_.extend(BI, {\n Events: {\n\n /**\n * @static\n * @property keydown事件\n */\n KEYDOWN: \"_KEYDOWN\",\n\n /**\n * @static\n * @property 回撤事件\n */\n BACKSPACE: \"_BACKSPACE\",\n\n /**\n * @static\n * @property 空格事件\n */\n SPACE: \"_SPACE\",\n\n /**\n * @static\n * @property 回车事件\n */\n ENTER: \"_ENTER\",\n\n /**\n * @static\n * @property 确定事件\n */\n CONFIRM: \"_CONFIRM\",\n\n /**\n * @static\n * @property 错误事件\n */\n ERROR: \"_ERROR\",\n\n /**\n * @static\n * @property 暂停事件\n */\n PAUSE: \"_PAUSE\",\n\n /**\n * @static\n * @property destroy事件\n */\n DESTROY: \"_DESTROY\",\n\n /**\n * @static\n * @property 挂载事件\n */\n MOUNT: \"_MOUNT\",\n\n /**\n * @static\n * @property 取消挂载事件\n */\n UNMOUNT: \"_UNMOUNT\",\n\n /**\n * @static\n * @property 清除选择\n */\n CLEAR: \"_CLEAR\",\n\n /**\n * @static\n * @property 添加数据\n */\n ADD: \"_ADD\",\n\n /**\n * @static\n * @property 正在编辑状态事件\n */\n EDITING: \"_EDITING\",\n\n /**\n * @static\n * @property 空状态事件\n */\n EMPTY: \"_EMPTY\",\n\n /**\n * @static\n * @property 显示隐藏事件\n */\n VIEW: \"_VIEW\",\n\n /**\n * @static\n * @property 窗体改变大小\n */\n RESIZE: \"_RESIZE\",\n\n /**\n * @static\n * @property 编辑前事件\n */\n BEFOREEDIT: \"_BEFOREEDIT\",\n\n /**\n * @static\n * @property 编辑后事件\n */\n AFTEREDIT: \"_AFTEREDIT\",\n\n /**\n * @static\n * @property 开始编辑事件\n */\n STARTEDIT: \"_STARTEDIT\",\n\n /**\n * @static\n * @property 停止编辑事件\n */\n STOPEDIT: \"_STOPEDIT\",\n\n /**\n * @static\n * @property 值改变事件\n */\n CHANGE: \"_CHANGE\",\n\n /**\n * @static\n * @property 下拉弹出菜单事件\n */\n EXPAND: \"_EXPAND\",\n\n /**\n * @static\n * @property 关闭下拉菜单事件\n */\n COLLAPSE: \"_COLLAPSE\",\n\n /**\n * @static\n * @property 回调事件\n */\n CALLBACK: \"_CALLBACK\",\n\n /**\n * @static\n * @property 点击事件\n */\n CLICK: \"_CLICK\",\n\n /**\n * @static\n * @property 状态改变事件,一般是用在复选按钮和单选按钮\n */\n STATECHANGE: \"_STATECHANGE\",\n\n /**\n * @static\n * @property 状态改变前事件\n */\n BEFORESTATECHANGE: \"_BEFORESTATECHANGE\",\n\n\n /**\n * @static\n * @property 初始化事件\n */\n INIT: \"_INIT\",\n\n /**\n * @static\n * @property 初始化后事件\n */\n AFTERINIT: \"_AFTERINIT\",\n\n /**\n * @static\n * @property 滚动条滚动事件\n */\n SCROLL: \"_SCROLL\",\n\n\n /**\n * @static\n * @property 开始加载事件\n */\n STARTLOAD: \"_STARTLOAD\",\n\n /**\n * @static\n * @property 加载后事件\n */\n AFTERLOAD: \"_AFTERLOAD\",\n\n\n /**\n * @static\n * @property 提交前事件\n */\n BS: \"beforesubmit\",\n\n /**\n * @static\n * @property 提交后事件\n */\n AS: \"aftersubmit\",\n\n /**\n * @static\n * @property 提交完成事件\n */\n SC: \"submitcomplete\",\n\n /**\n * @static\n * @property 提交失败事件\n */\n SF: \"submitfailure\",\n\n /**\n * @static\n * @property 提交成功事件\n */\n SS: \"submitsuccess\",\n\n /**\n * @static\n * @property 校验提交前事件\n */\n BVW: \"beforeverifywrite\",\n\n /**\n * @static\n * @property 校验提交后事件\n */\n AVW: \"afterverifywrite\",\n\n /**\n * @static\n * @property 校验后事件\n */\n AV: \"afterverify\",\n\n /**\n * @static\n * @property 填报前事件\n */\n BW: \"beforewrite\",\n\n /**\n * @static\n * @property 填报后事件\n */\n AW: \"afterwrite\",\n\n /**\n * @static\n * @property 填报成功事件\n */\n WS: \"writesuccess\",\n\n /**\n * @static\n * @property 填报失败事件\n */\n WF: \"writefailure\",\n\n /**\n * @static\n * @property 添加行前事件\n */\n BA: \"beforeappend\",\n\n /**\n * @static\n * @property 添加行后事件\n */\n AA: \"afterappend\",\n\n /**\n * @static\n * @property 删除行前事件\n */\n BD: \"beforedelete\",\n\n /**\n * @static\n * @property 删除行后事件\n */\n AD: \"beforedelete\",\n\n /**\n * @static\n * @property 未提交离开事件\n */\n UC: \"unloadcheck\",\n\n\n /**\n * @static\n * @property PDF导出前事件\n */\n BTOPDF: \"beforetopdf\",\n\n /**\n * @static\n * @property PDF导出后事件\n */\n ATOPDF: \"aftertopdf\",\n\n /**\n * @static\n * @property Excel导出前事件\n */\n BTOEXCEL: \"beforetoexcel\",\n\n /**\n * @static\n * @property Excel导出后事件\n */\n ATOEXCEL: \"aftertoexcel\",\n\n /**\n * @static\n * @property Word导出前事件\n */\n BTOWORD: \"beforetoword\",\n\n /**\n * @static\n * @property Word导出后事件\n */\n ATOWORD: \"aftertoword\",\n\n /**\n * @static\n * @property 图片导出前事件\n */\n BTOIMAGE: \"beforetoimage\",\n\n /**\n * @static\n * @property 图片导出后事件\n */\n ATOIMAGE: \"aftertoimage\",\n\n /**\n * @static\n * @property HTML导出前事件\n */\n BTOHTML: \"beforetohtml\",\n\n /**\n * @static\n * @property HTML导出后事件\n */\n ATOHTML: \"aftertohtml\",\n\n /**\n * @static\n * @property Excel导入前事件\n */\n BIMEXCEL: \"beforeimportexcel\",\n\n /**\n * @static\n * @property Excel导出后事件\n */\n AIMEXCEL: \"afterimportexcel\",\n\n /**\n * @static\n * @property PDF打印前事件\n */\n BPDFPRINT: \"beforepdfprint\",\n\n /**\n * @static\n * @property PDF打印后事件\n */\n APDFPRINT: \"afterpdfprint\",\n\n /**\n * @static\n * @property Flash打印前事件\n */\n BFLASHPRINT: \"beforeflashprint\",\n\n /**\n * @static\n * @property Flash打印后事件\n */\n AFLASHPRINT: \"afterflashprint\",\n\n /**\n * @static\n * @property Applet打印前事件\n */\n BAPPLETPRINT: \"beforeappletprint\",\n\n /**\n * @static\n * @property Applet打印后事件\n */\n AAPPLETPRINT: \"afterappletprint\",\n\n /**\n * @static\n * @property 服务器打印前事件\n */\n BSEVERPRINT: \"beforeserverprint\",\n\n /**\n * @static\n * @property 服务器打印后事件\n */\n ASERVERPRINT: \"afterserverprint\",\n\n /**\n * @static\n * @property 邮件发送前事件\n */\n BEMAIL: \"beforeemail\",\n\n /**\n * @static\n * @property 邮件发送后事件\n */\n AEMAIL: \"afteremail\"\n }\n});","BI.prepares.push(function () {\n BI.Date = BI.Date || {};\n // 牵扯到国际化这些常量在页面加载后再生效\n // full day names\n BI.Date._DN = [BI.i18nText(\"BI-Basic_Sunday\"),\n BI.i18nText(\"BI-Basic_Monday\"),\n BI.i18nText(\"BI-Basic_Tuesday\"),\n BI.i18nText(\"BI-Basic_Wednesday\"),\n BI.i18nText(\"BI-Basic_Thursday\"),\n BI.i18nText(\"BI-Basic_Friday\"),\n BI.i18nText(\"BI-Basic_Saturday\"),\n BI.i18nText(\"BI-Basic_Sunday\")];\n\n // short day names\n BI.Date._SDN = [BI.i18nText(\"BI-Basic_Simple_Sunday\"),\n BI.i18nText(\"BI-Basic_Simple_Monday\"),\n BI.i18nText(\"BI-Basic_Simple_Tuesday\"),\n BI.i18nText(\"BI-Basic_Simple_Wednesday\"),\n BI.i18nText(\"BI-Basic_Simple_Thursday\"),\n BI.i18nText(\"BI-Basic_Simple_Friday\"),\n BI.i18nText(\"BI-Basic_Simple_Saturday\"),\n BI.i18nText(\"BI-Basic_Simple_Sunday\")];\n\n // Monday first, etc.\n BI.Date._FD = 1;\n\n // full month namesdat\n BI.Date._MN = [\n BI.i18nText(\"BI-Basic_January\"),\n BI.i18nText(\"BI-Basic_February\"),\n BI.i18nText(\"BI-Basic_March\"),\n BI.i18nText(\"BI-Basic_April\"),\n BI.i18nText(\"BI-Basic_May\"),\n BI.i18nText(\"BI-Basic_June\"),\n BI.i18nText(\"BI-Basic_July\"),\n BI.i18nText(\"BI-Basic_August\"),\n BI.i18nText(\"BI-Basic_September\"),\n BI.i18nText(\"BI-Basic_October\"),\n BI.i18nText(\"BI-Basic_November\"),\n BI.i18nText(\"BI-Basic_December\")];\n\n // short month names\n BI.Date._SMN = [0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11];\n\n BI.Date._QN = [\"\", BI.i18nText(\"BI-Quarter_1\"),\n BI.i18nText(\"BI-Quarter_2\"),\n BI.i18nText(\"BI-Quarter_3\"),\n BI.i18nText(\"BI-Quarter_4\")];\n\n /** Adds the number of days array to the Date object. */\n BI.Date._MD = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n\n // 实际上无论周几作为一周的第一天,周初周末都是在-6-0间做偏移,用一个数组就可以\n BI.Date._OFFSET = [0, -1, -2, -3, -4, -5, -6];\n});","/**\n * guy\n * 检测某个Widget的EventChange事件然后去show某个card\n * @type {*|void|Object}\n * @class BI.ShowListener\n * @extends BI.OB\n */\nBI.ShowListener = BI.inherit(BI.OB, {\n _defaultConfig: function () {\n return BI.extend(BI.ShowListener.superclass._defaultConfig.apply(this, arguments), {\n eventObj: BI.createWidget(),\n cardLayout: null,\n cardNameCreator: function (v) {\n return v;\n },\n cardCreator: BI.emptyFn,\n afterCardCreated: BI.emptyFn,\n afterCardShow: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.ShowListener.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (o.eventObj) {\n o.eventObj.on(BI.Controller.EVENT_CHANGE, function (type, v, ob) {\n if (type === BI.Events.CLICK) {\n v = v || o.eventObj.getValue();\n v = BI.isArray(v) ? (v.length > 1 ? v.toString() : v[0]) : v;\n if (BI.isNull(v)) {\n throw new Error(\"value cannot be null\");\n }\n var cardName = o.cardNameCreator(v);\n if (!o.cardLayout.isCardExisted(cardName)) {\n var card = o.cardCreator(cardName);\n o.cardLayout.addCardByName(cardName, card);\n o.afterCardCreated(cardName);\n }\n o.cardLayout.showCardByName(cardName);\n BI.nextTick(function () {\n o.afterCardShow(cardName);\n self.fireEvent(BI.ShowListener.EVENT_CHANGE, cardName);\n });\n }\n });\n }\n }\n});\nBI.ShowListener.EVENT_CHANGE = \"EVENT_CHANGE\";","/**\n * style加载管理器\n *\n * Created by GUY on 2015/9/7.\n * @class\n */\nBI.StyleLoaderManager = BI.inherit(BI.OB, {\n _defaultConfig: function () {\n return BI.extend(BI.StyleLoaderManager.superclass._defaultConfig.apply(this, arguments), {});\n },\n\n _init: function () {\n BI.StyleLoaderManager.superclass._init.apply(this, arguments);\n this.stylesManager = {};\n },\n\n loadStyle: function (name, styleString) {\n if(!_global.document) {\n return;\n }\n var d = document, styles = d.createElement(\"style\");\n d.getElementsByTagName(\"head\")[0].appendChild(styles);\n styles.setAttribute(\"type\", \"text/css\");\n if (styles.styleSheet) {\n styles.styleSheet.cssText = styleString;\n } else {\n styles.appendChild(document.createTextNode(styleString));\n }\n this.stylesManager[name] = styles;\n\n return this;\n },\n\n get: function (name) {\n return this.stylesManager[name];\n },\n\n has: function (name) {\n return this.stylesManager[name] != null;\n },\n\n removeStyle: function (name) {\n if (!this.has(name)) {\n return this;\n }\n this.stylesManager[name].parentNode.removeChild(this.stylesManager[name]);\n delete this.stylesManager[name];\n return this;\n }\n});","/**\n * @class BI.Logic\n * @extends BI.OB\n */\nBI.Logic = BI.inherit(BI.OB, {\n createLogic: function () {\n return this.options || {};\n }\n});\n\nBI.LogicFactory = {\n Type: {\n Vertical: \"vertical\",\n Horizontal: \"horizontal\",\n Table: \"table\",\n HorizontalFill: \"horizontal_fill\"\n },\n createLogic: function (key, options) {\n var logic;\n switch (key) {\n case BI.LogicFactory.Type.Vertical:\n logic = BI.VerticalLayoutLogic;\n break;\n case BI.LogicFactory.Type.Horizontal:\n logic = BI.HorizontalLayoutLogic;\n break;\n case BI.LogicFactory.Type.Table:\n logic = BI.TableLayoutLogic;\n break;\n case BI.LogicFactory.Type.HorizontalFill:\n logic = BI.HorizontalFillLayoutLogic;\n break;\n default :\n logic = BI.Logic;\n break;\n }\n return new logic(options).createLogic();\n },\n\n createLogicTypeByDirection: function (direction) {\n switch (direction) {\n case BI.Direction.Top:\n case BI.Direction.Bottom:\n case BI.Direction.Custom:\n return BI.LogicFactory.Type.Vertical;\n break;\n case BI.Direction.Left:\n case BI.Direction.Right:\n return BI.LogicFactory.Type.Horizontal;\n }\n },\n\n createLogicItemsByDirection: function (direction) {\n var layout;\n var items = Array.prototype.slice.call(arguments, 1);\n items = BI.map(items, function (i, item) {\n if (BI.isWidget(item)) {\n return {\n el: item,\n width: item.options.width,\n height: item.options.height\n };\n }\n return item;\n });\n switch (direction) {\n case BI.Direction.Bottom:\n layout = BI.LogicFactory.Type.Vertical;\n items.reverse();\n break;\n case BI.Direction.Right:\n layout = BI.LogicFactory.Type.Horizontal;\n items.reverse();\n break;\n case BI.Direction.Custom:\n items = items.slice(1);\n break;\n }\n return items;\n }\n};","/**\n * guy\n * 上下布局逻辑\n * 上下布局的时候要考虑到是动态布局还是静态布局\n *\n * @class BI.VerticalLayoutLogic\n * @extends BI.Logic\n */\nBI.VerticalLayoutLogic = BI.inherit(BI.Logic, {\n _defaultConfig: function () {\n return BI.extend(BI.VerticalLayoutLogic.superclass._defaultConfig.apply(this, arguments), {\n dynamic: false,\n scrollable: null,\n scrolly: false,\n scrollx: false,\n items: [],\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n createLogic: function () {\n var layout, o = this.options;\n if (o.dynamic) {\n layout = \"bi.vertical\";\n } else {\n layout = \"bi.vtape\";\n }\n return {\n type: layout,\n scrollable: o.scrollable,\n scrolly: o.scrolly,\n scrollx: o.scrollx,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n items: o.items\n };\n },\n\n _init: function () {\n BI.VerticalLayoutLogic.superclass._init.apply(this, arguments);\n }\n});\n\n\n/**\n * guy\n * 左右布局逻辑\n * 左右布局的时候要考虑到是动态布局还是静态布局\n *\n * @class BI.HorizontalLayoutLogic\n * @extends BI.Logic\n */\nBI.HorizontalLayoutLogic = BI.inherit(BI.Logic, {\n _defaultConfig: function () {\n return BI.extend(BI.HorizontalLayoutLogic.superclass._defaultConfig.apply(this, arguments), {\n dynamic: false,\n scrollable: null,\n scrolly: false,\n scrollx: false,\n items: [],\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n createLogic: function () {\n var layout, o = this.options;\n if (o.dynamic) {\n layout = \"bi.vertical_adapt\";\n } else {\n layout = \"bi.htape\";\n }\n return {\n type: layout,\n scrollable: o.scrollable,\n scrolly: o.scrolly,\n scrollx: o.scrollx,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n items: o.items\n };\n },\n\n _init: function () {\n BI.HorizontalLayoutLogic.superclass._init.apply(this, arguments);\n }\n});\n\n/**\n * guy\n * 表格布局逻辑\n * 表格布局的时候要考虑到是动态布局还是静态布局\n *\n * @class BI.TableLayoutLogic\n * @extends BI.OB\n */\nBI.TableLayoutLogic = BI.inherit(BI.Logic, {\n _defaultConfig: function () {\n return BI.extend(BI.TableLayoutLogic.superclass._defaultConfig.apply(this, arguments), {\n dynamic: false,\n scrollable: null,\n scrolly: false,\n scrollx: false,\n columns: 0,\n rows: 0,\n columnSize: [],\n rowSize: [],\n hgap: 0,\n vgap: 0,\n items: []\n });\n },\n\n createLogic: function () {\n var layout, o = this.options;\n if (o.dynamic) {\n layout = \"bi.table\";\n } else {\n layout = \"bi.window\";\n }\n return {\n type: layout,\n scrollable: o.scrollable,\n scrolly: o.scrolly,\n scrollx: o.scrollx,\n columns: o.columns,\n rows: o.rows,\n columnSize: o.columnSize,\n rowSize: o.rowSize,\n hgap: o.hgap,\n vgap: o.vgap,\n items: o.items\n };\n },\n\n _init: function () {\n BI.TableLayoutLogic.superclass._init.apply(this, arguments);\n }\n});\n\n/**\n * guy\n * 左右充满布局逻辑\n *\n * @class BI.HorizontalFillLayoutLogic\n * @extends BI.Logic\n */\nBI.HorizontalFillLayoutLogic = BI.inherit(BI.Logic, {\n _defaultConfig: function () {\n return BI.extend(BI.HorizontalFillLayoutLogic.superclass._defaultConfig.apply(this, arguments), {\n dynamic: false,\n scrollable: null,\n scrolly: false,\n scrollx: false,\n items: [],\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n createLogic: function () {\n var layout, o = this.options;\n var columnSize = [];\n BI.each(o.items, function (i, item) {\n columnSize.push(item.width || 0);\n });\n if (o.dynamic) {\n layout = \"bi.horizontal_adapt\";\n } else {\n layout = \"bi.htape\";\n }\n return {\n type: layout,\n columnSize: columnSize,\n scrollable: o.scrollable,\n scrolly: o.scrolly,\n scrollx: o.scrollx,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n items: o.items\n };\n },\n\n _init: function () {\n BI.HorizontalFillLayoutLogic.superclass._init.apply(this, arguments);\n }\n});","if (!Number.prototype.toFixed || (0.00008).toFixed(3) !== \"0.000\" ||\n (0.9).toFixed(0) === \"0\" || (1.255).toFixed(2) !== \"1.25\" ||\n (1000000000000000128).toFixed(0) !== \"1000000000000000128\") {\n (function () {\n var base, size, data, i;\n base = 1e7;\n size = 6;\n data = [0, 0, 0, 0, 0, 0];\n function multiply (n, c) {\n var i = -1;\n while (++i < size) {\n c += n * data[i];\n data[i] = c % base;\n c = Math.floor(c / base);\n }\n }\n\n function divide (n) {\n var i = size, c = 0;\n while (--i >= 0) {\n c += data[i];\n data[i] = Math.floor(c / n);\n c = (c % n) * base;\n }\n }\n\n function toString () {\n var i = size;\n var s = \"\";\n while (--i >= 0) {\n if (s !== \"\" || i === 0 || data[i] !== 0) {\n var t = String(data[i]);\n if (s === \"\") {\n s = t;\n } else {\n s += \"0000000\".slice(0, 7 - t.length) + t;\n }\n }\n }\n return s;\n }\n\n function pow (x, n, acc) {\n return (n === 0 ? acc : (n % 2 === 1 ? pow(x, n - 1, acc * x)\n : pow(x * x, n / 2, acc)));\n }\n\n function log (x) {\n var n = 0;\n while (x >= 4096) {\n n += 12;\n x /= 4096;\n }\n while (x >= 2) {\n n += 1;\n x /= 2;\n }\n return n;\n }\n\n Number.prototype.toFixed = function (fractionDigits) {\n var f, x, s, m, e, z, j, k;\n f = Number(fractionDigits);\n f = f !== f ? 0 : Math.floor(f);\n\n if (f < 0 || f > 20) {\n throw new RangeError(\"Number.toFixed called with invalid number of decimals\");\n }\n\n x = Number(this);\n\n if (x !== x) {\n return \"NaN\";\n }\n\n if (x <= -1e21 || x > 1e21) {\n return String(x);\n }\n\n s = \"\";\n\n if (x < 0) {\n s = \"-\";\n x = -x;\n }\n\n m = \"0\";\n\n if (x > 1e-21) {\n // 1e-21<x<1e21\n // -70<log2(x)<70\n e = log(x * pow(2, 69, 1)) - 69;\n z = (e < 0 ? x * pow(2, -e, 1) : x / pow(2, e, 1));\n z *= 0x10000000000000;// Math.pow(2,52);\n e = 52 - e;\n\n // -18<e<122\n // x=z/2^e\n if (e > 0) {\n multiply(0, z);\n j = f;\n\n while (j >= 7) {\n multiply(1e7, 0);\n j -= 7;\n }\n\n multiply(pow(10, j, 1), 0);\n j = e - 1;\n\n while (j >= 23) {\n divide(1 << 23);\n j -= 23;\n }\n divide(1 << j);\n multiply(1, 1);\n divide(2);\n m = toString();\n } else {\n multiply(0, z);\n multiply(1 << (-e), 0);\n m = toString() + \"0.00000000000000000000\".slice(2, 2 + f);\n }\n }\n\n if (f > 0) {\n k = m.length;\n\n if (k <= f) {\n m = s + \"0.0000000000000000000\".slice(0, f - k + 2) + m;\n } else {\n m = s + m.slice(0, k - f) + \".\" + m.slice(k - f);\n }\n } else {\n m = s + m;\n }\n\n return m;\n };\n\n })();\n}","BI.version = \"2.0\";","/**\n * absolute实现的居中布局\n * @class BI.AbsoluteCenterLayout\n * @extends BI.Layout\n */\nBI.AbsoluteCenterLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.AbsoluteCenterLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-absolute-center-layout\",\n hgap: 0,\n lgap: 0,\n rgap: 0,\n vgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.AbsoluteCenterLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.AbsoluteCenterLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"absolute\",\n left: o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0),\n right: o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0),\n top: o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0),\n bottom: o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0),\n margin: \"auto\"\n });\n return w;\n },\n\n resize: function () {\n // console.log(\"absolute_center_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n BI.AbsoluteCenterLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.absolute_center_adapt\", BI.AbsoluteCenterLayout);","/**\n * absolute实现的居中布局\n * @class BI.AbsoluteHorizontalLayout\n * @extends BI.Layout\n */\nBI.AbsoluteHorizontalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.AbsoluteHorizontalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-absolute-horizontal-layout\",\n hgap: 0,\n lgap: 0,\n rgap: 0,\n vgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.AbsoluteHorizontalLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.AbsoluteHorizontalLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"absolute\",\n left: o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0),\n right: o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0),\n margin: \"auto\"\n });\n if (o.vgap + o.tgap + (item.vgap || 0) + (item.tgap || 0) !== 0) {\n w.element.css(\"top\", o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0));\n }\n if (o.vgap + o.bgap + (item.vgap || 0) + (item.bgap || 0) !== 0) {\n w.element.css(\"bottom\", o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0));\n }\n return w;\n },\n\n resize: function () {\n // console.log(\"absolute_horizontal_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n BI.AbsoluteHorizontalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.absolute_horizontal_adapt\", BI.AbsoluteHorizontalLayout);","/**\n * absolute实现的居中布局\n * @class BI.AbsoluteVerticalLayout\n * @extends BI.Layout\n */\nBI.AbsoluteVerticalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.AbsoluteVerticalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-absolute-vertical-layout\",\n hgap: 0,\n lgap: 0,\n rgap: 0,\n vgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.AbsoluteVerticalLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.AbsoluteVerticalLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"absolute\",\n left: item.lgap,\n right: item.rgap,\n top: o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0),\n bottom: o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0),\n margin: \"auto\"\n });\n if (o.hgap + o.lgap + (item.hgap || 0) + (item.lgap || 0) !== 0) {\n w.element.css(\"left\", o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0));\n }\n if (o.hgap + o.rgap + (item.hgap || 0) + (item.rgap || 0) !== 0) {\n w.element.css(\"right\", o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0));\n }\n return w;\n },\n\n resize: function () {\n // console.log(\"absolute_vertical_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n BI.AbsoluteVerticalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.absolute_vertical_adapt\", BI.AbsoluteVerticalLayout);","/**\n * 自适应水平和垂直方向都居中容器\n * @class BI.CenterAdaptLayout\n * @extends BI.Layout\n */\nBI.CenterAdaptLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.CenterAdaptLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-center-adapt-layout\",\n horizontalAlign: BI.HorizontalAlign.Center,\n columnSize: [],\n scrollx: false,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var o = this.options, self = this;\n BI.CenterAdaptLayout.superclass.render.apply(this, arguments);\n return {\n type: \"bi.horizontal\",\n verticalAlign: BI.VerticalAlign.Middle,\n horizontalAlign: o.horizontalAlign,\n columnSize: o.columnSize,\n scrollx: o.scrollx,\n items: o.items,\n ref: function (_ref) {\n self.layout = _ref;\n },\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n };\n },\n\n resize: function () {\n // console.log(\"center_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n this.layout.populate.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.center_adapt\", BI.CenterAdaptLayout);","/**\n * 水平方向居中容器\n * @class BI.HorizontalAdaptLayout\n * @extends BI.Layout\n */\nBI.HorizontalAdaptLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.HorizontalAdaptLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-horizontal-adapt-layout\",\n verticalAlign: BI.VerticalAlign.Top,\n horizontalAlign: BI.HorizontalAlign.Center,\n columnSize: [],\n scrollx: false,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var self = this, o = this.options;\n BI.HorizontalAdaptLayout.superclass.render.apply(this, arguments);\n return {\n type: \"bi.horizontal\",\n verticalAlign: BI.VerticalAlign.Top,\n horizontalAlign: o.horizontalAlign,\n columnSize: o.columnSize,\n items: o.items,\n scrollx: o.scrollx,\n ref: function (_ref) {\n self.layout = _ref;\n },\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n };\n },\n\n resize: function () {\n // console.log(\"horizontal_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n this.layout.populate.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.horizontal_adapt\", BI.HorizontalAdaptLayout);","/**\n * 左右分离,垂直方向居中容器\n * items:{\n left: [{el:{type:\"bi.button\"}}],\n right:[{el:{type:\"bi.button\"}}]\n }\n * @class BI.LeftRightVerticalAdaptLayout\n * @extends BI.Layout\n */\nBI.LeftRightVerticalAdaptLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.LeftRightVerticalAdaptLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-left-right-vertical-adapt-layout\",\n items: {},\n llgap: 0,\n lrgap: 0,\n lhgap: 0,\n rlgap: 0,\n rrgap: 0,\n rhgap: 0\n });\n },\n render: function () {\n var o = this.options, self = this;\n BI.LeftRightVerticalAdaptLayout.superclass.render.apply(this, arguments);\n var layoutArray = [];\n if (\"left\" in o.items) {\n layoutArray.push({\n type: \"bi.left\",\n items: [{\n el: {\n type: \"bi.vertical_adapt\",\n height: \"100%\",\n items: o.items.left,\n hgap: o.lhgap,\n lgap: o.llgap,\n rgap: o.lrgap\n }\n }]\n });\n }\n if (\"right\" in o.items) {\n layoutArray.push({\n type: \"bi.right\",\n items: [{\n el: {\n type: \"bi.vertical_adapt\",\n height: \"100%\",\n items: o.items.right,\n textAlign: \"right\",\n hgap: o.rhgap,\n lgap: o.rlgap,\n rgap: o.rrgap\n }\n }]\n });\n }\n return layoutArray;\n },\n\n resize: function () {\n // console.log(\"left_right_vertical_adapt布局不需要resize\");\n },\n\n addItem: function () {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n populate: function (items) {\n BI.LeftRightVerticalAdaptLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.left_right_vertical_adapt\", BI.LeftRightVerticalAdaptLayout);\n\n\nBI.LeftVerticalAdaptLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.LeftRightVerticalAdaptLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-left-vertical-adapt-layout\",\n items: [],\n lgap: 0,\n rgap: 0,\n hgap: 0\n });\n },\n render: function () {\n var o = this.options, self = this;\n BI.LeftVerticalAdaptLayout.superclass.render.apply(this, arguments);\n return {\n type: \"bi.left\",\n ref: function (_ref) {\n self.layout = _ref;\n },\n items: [{\n el: {\n type: \"bi.vertical_adapt\",\n height: \"100%\",\n items: o.items,\n lgap: o.lgap,\n hgap: o.hgap,\n rgap: o.rgap\n }\n }]\n };\n },\n\n resize: function () {\n // console.log(\"left_vertical_adapt布局不需要resize\");\n },\n\n addItem: function () {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n populate: function (items) {\n this.layout.populate.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.left_vertical_adapt\", BI.LeftVerticalAdaptLayout);\n\nBI.RightVerticalAdaptLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.RightVerticalAdaptLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-right-vertical-adapt-layout\",\n items: [],\n lgap: 0,\n rgap: 0,\n hgap: 0\n });\n },\n render: function () {\n var o = this.options, self = this;\n BI.RightVerticalAdaptLayout.superclass.render.apply(this, arguments);\n return {\n type: \"bi.right\",\n ref: function (_ref) {\n self.layout = _ref;\n },\n items: [{\n el: {\n type: \"bi.vertical_adapt\",\n height: \"100%\",\n textAlign: \"right\",\n items: o.items,\n lgap: o.lgap,\n hgap: o.hgap,\n rgap: o.rgap\n }\n }]\n };\n },\n\n resize: function () {\n\n },\n\n addItem: function () {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n populate: function (items) {\n this.layout.populate.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.right_vertical_adapt\", BI.RightVerticalAdaptLayout);","/**\n * 使用display:table和display:table-cell实现的horizontal布局\n * @class BI.TableAdaptLayout\n * @extends BI.Layout\n */\nBI.TableAdaptLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.TableAdaptLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-table-center-adapt-layout\",\n columnSize: [],\n verticalAlign: BI.VerticalAlign.Top,\n horizontalAlign: BI.HorizontalAlign.Left,\n scrollx: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var o = this.options;\n BI.TableAdaptLayout.superclass.render.apply(this, arguments);\n this.$table = BI.Widget._renderEngine.createElement(\"<div>\").css({\n position: \"relative\",\n display: \"table\",\n height: o.verticalAlign === BI.VerticalAlign.Middle ? \"100%\" : \"auto\",\n width: o.horizontalAlign === BI.HorizontalAlign.Center ? \"100%\" : \"auto\",\n \"white-space\": \"nowrap\"\n });\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n\n var o = this.options;\n var td;\n var width = o.columnSize[i] <= 1 ? (o.columnSize[i] * 100 + \"%\") : o.columnSize[i];\n if (!this.hasWidget(this._getChildName(i))) {\n var w = BI.createWidget(item);\n w.element.css({position: \"relative\", top: \"0\", left: \"0\", margin: \"0px auto\"});\n td = BI.createWidget({\n type: \"bi.default\",\n width: width,\n items: [w]\n });\n this.addWidget(this._getChildName(i), td);\n } else {\n td = this.getWidgetByName(this._getChildName(i));\n td.element.width(width);\n }\n // 对于表现为td的元素设置最大宽度,有几点需要注意\n // 1、由于直接对td设置最大宽度是在规范中未定义的, 所以要使用类似td:firstChild来迂回实现\n // 2、不能给多个td设置最大宽度,这样只会平分宽度\n // 3、多百分比宽度就算了\n td.element.css({\"max-width\": o.columnSize[i] <= 1 ? width : width + \"px\"});\n if (i === 0) {\n td.element.addClass(\"first-element\");\n }\n td.element.css({\n position: \"relative\",\n display: \"table-cell\",\n \"vertical-align\": o.verticalAlign,\n margin: \"0\",\n padding: \"0\",\n height: \"100%\"\n });\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return td;\n },\n\n appendFragment: function (frag) {\n this.$table.append(frag);\n this.element.append(this.$table);\n },\n\n resize: function () {\n // console.log(\"center_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n BI.TableAdaptLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.table_adapt\", BI.TableAdaptLayout);","/**\n * 垂直方向居中容器\n * @class BI.VerticalAdaptLayout\n * @extends BI.Layout\n */\nBI.VerticalAdaptLayout = BI.inherit(BI.Layout, {\n props: {\n baseCls: \"bi-vertical-adapt-layout\",\n horizontalAlign: BI.HorizontalAlign.Left,\n columnSize: [],\n scrollx: false,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n },\n\n render: function () {\n var self = this, o = this.options;\n BI.VerticalAdaptLayout.superclass.render.apply(this, arguments);\n return {\n type: \"bi.horizontal\",\n verticalAlign: BI.VerticalAlign.Middle,\n horizontalAlign: o.horizontalAlign,\n columnSize: o.columnSize,\n items: o.items,\n scrollx: o.scrollx,\n ref: function (_ref) {\n self.layout = _ref;\n },\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n };\n },\n\n resize: function () {\n // console.log(\"vertical_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n this.layout.populate.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.vertical_adapt\", BI.VerticalAdaptLayout);","/**\n * 水平方向居中自适应容器\n * @class BI.HorizontalAutoLayout\n * @extends BI.Layout\n */\nBI.HorizontalAutoLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.HorizontalAutoLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-horizon-auto-layout\",\n hgap: 0,\n lgap: 0,\n rgap: 0,\n vgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.HorizontalAutoLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.HorizontalAutoLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n margin: \"0px auto\"\n });\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": (i === 0 ? o.vgap : 0) + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) +\"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n // console.log(\"horizontal_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n BI.HorizontalAutoLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.horizontal_auto\", BI.HorizontalAutoLayout);","/**\n * 浮动的水平居中布局\n */\nBI.FloatHorizontalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FloatHorizontalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-float-horizontal-adapt-layout\",\n items: [],\n hgap: 0,\n vgap: 0,\n tgap: 0,\n bgap: 0,\n lgap: 0,\n rgap: 0\n });\n },\n render: function () {\n BI.FloatHorizontalLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n // console.log(\"float_horizontal_adapt布局不需要resize\");\n },\n\n mounted: function () {\n var self = this;\n var width = this.left.element.width(),\n height = this.left.element.height();\n this.left.element.width(width).height(height).css(\"float\", \"none\");\n BI.remove(this._children, function (i, wi) {\n if (wi === self.container) {\n delete self._children[i];\n }\n });\n BI.createWidget({\n type: \"bi.horizontal_auto\",\n element: this,\n items: [this.left]\n });\n },\n\n _addElement: function (i, item) {\n var self = this, o = this.options;\n this.left = BI.createWidget({\n type: \"bi.vertical\",\n items: [item],\n hgap: o.hgap,\n vgap: o.vgap,\n tgap: o.tgap,\n bgap: o.bgap,\n lgap: o.lgap,\n rgap: o.rgap\n });\n\n this.container = BI.createWidget({\n type: \"bi.left\",\n element: this,\n items: [this.left]\n });\n\n return this.left;\n },\n\n populate: function (items) {\n BI.HorizontalAutoLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.horizontal_float\", BI.FloatHorizontalLayout);","/**\n * 内联布局\n * @class BI.InlineCenterAdaptLayout\n * @extends BI.Layout\n *\n * @cfg {JSON} options 配置属性\n * @cfg {Number} [hgap=0] 水平间隙\n * @cfg {Number} [vgap=0] 垂直间隙\n */\nBI.InlineCenterAdaptLayout = BI.inherit(BI.Layout, {\n\n props: function () {\n return BI.extend(BI.InlineLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-inline-center-adapt-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.InlineCenterAdaptLayout.superclass.render.apply(this, arguments);\n this.element.css({\n whiteSpace: \"nowrap\",\n textAlign: \"center\"\n });\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item, length) {\n var o = this.options;\n var w = BI.InlineVerticalAdaptLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n \"vertical-align\": \"middle\"\n });\n w.element.addClass(\"inline-center-adapt-item\");\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n addItem: function (item) {\n throw new Error(\"不能添加元素\");\n },\n\n stroke: function (items) {\n var self = this;\n BI.each(items, function (i, item) {\n if (item) {\n self._addElement(i, item, items.length);\n }\n });\n },\n\n populate: function (items) {\n BI.InlineCenterAdaptLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.inline_center_adapt\", BI.InlineCenterAdaptLayout);","/**\n * 内联布局\n * @class BI.InlineVerticalAdaptLayout\n * @extends BI.Layout\n *\n * @cfg {JSON} options 配置属性\n * @cfg {Number} [hgap=0] 水平间隙\n * @cfg {Number} [vgap=0] 垂直间隙\n */\nBI.InlineVerticalAdaptLayout = BI.inherit(BI.Layout, {\n\n props: function () {\n return BI.extend(BI.InlineLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-inline-vertical-adapt-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n textAlign: \"left\"\n });\n },\n\n render: function () {\n BI.InlineVerticalAdaptLayout.superclass.render.apply(this, arguments);\n var o = this.options;\n this.element.css({\n whiteSpace: \"nowrap\",\n textAlign: o.textAlign\n });\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.InlineVerticalAdaptLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n \"vertical-align\": \"middle\"\n });\n w.element.addClass(\"inline-vertical-adapt-item\");\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) +\"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n populate: function (items) {\n BI.InlineVerticalAdaptLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.inline_vertical_adapt\", BI.InlineVerticalAdaptLayout);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexCenterLayout\n * @extends BI.Layout\n */\nBI.FlexCenterLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexCenterLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-center-adapt-layout\",\n hgap: 0,\n vgap: 0\n });\n },\n render: function () {\n BI.FlexCenterLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.FlexCenterLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n \"flex-shrink\": \"0\",\n \"margin-left\": (i === 0 ? o.hgap : 0) + \"px\",\n \"margin-right\": o.hgap + \"px\",\n \"margin-top\": o.vgap + \"px\",\n \"margin-bottom\": o.vgap + \"px\"\n });\n return w;\n },\n\n resize: function () {\n // console.log(\"flex_center_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n BI.FlexCenterLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.flex_center_adapt\", BI.FlexCenterLayout);","/**\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexHorizontalCenter\n * @extends BI.Layout\n */\nBI.FlexHorizontalCenter = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexHorizontalCenter.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-horizontal-center-adapt-layout\",\n verticalAlign: BI.VerticalAlign.Top,\n rowSize: [],\n scrolly: false,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.flex_vertical\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n horizontalAlign: BI.HorizontalAlign.Center,\n verticalAlign: o.verticalAlign,\n rowSize: o.rowSize,\n scrollx: o.scrollx,\n scrolly: o.scrolly,\n scrollable: o.scrollable,\n hgap: o.hgap,\n vgap: o.vgap,\n tgap: o.tgap,\n bgap: o.bgap,\n items: o.items\n };\n },\n\n resize: function () {\n // console.log(\"flex_vertical_center_adapt布局不需要resize\");\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate(items);\n }\n});\nBI.shortcut(\"bi.flex_horizontal_adapt\", BI.FlexHorizontalCenter);\nBI.shortcut(\"bi.flex_horizontal_center_adapt\", BI.FlexHorizontalCenter);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexHorizontalLayout\n * @extends BI.Layout\n */\nBI.FlexHorizontalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexHorizontalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-horizontal-layout\",\n verticalAlign: BI.VerticalAlign.Top,\n horizontalAlign: BI.HorizontalAlign.Left,// 如果只有一个子元素且想让该子元素横向撑满,设置成Stretch\n columnSize: [],\n scrollx: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.FlexHorizontalLayout.superclass.render.apply(this, arguments);\n var o = this.options;\n this.element.addClass(\"v-\" + o.verticalAlign).addClass(\"h-\" + o.horizontalAlign);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.FlexHorizontalLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n \"flex-shrink\": \"0\"\n });\n if (o.columnSize[i] > 0) {\n w.element.width(o.columnSize[i]);\n }\n if (o.columnSize[i] === \"fill\") {\n w.element.css(\"flex\", \"1\");\n }\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n // console.log(\"flex_horizontal布局不需要resize\");\n },\n\n populate: function (items) {\n BI.FlexHorizontalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.flex_horizontal\", BI.FlexHorizontalLayout);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexVerticalCenter\n * @extends BI.Layout\n */\nBI.FlexVerticalCenter = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexVerticalCenter.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-vertical-center-adapt-layout\",\n horizontalAlign: BI.HorizontalAlign.Left,\n columnSize: [],\n scrollx: false,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.flex_horizontal\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n verticalAlign: BI.VerticalAlign.Middle,\n horizontalAlign: o.horizontalAlign,\n columnSize: o.columnSize,\n scrollx: o.scrollx,\n scrolly: o.scrolly,\n scrollable: o.scrollable,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n hgap: o.hgap,\n items: o.items\n };\n },\n\n resize: function () {\n // console.log(\"flex_vertical_center_adapt布局不需要resize\");\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate(items);\n }\n});\nBI.shortcut(\"bi.flex_vertical_adapt\", BI.FlexVerticalCenter);\nBI.shortcut(\"bi.flex_vertical_center_adapt\", BI.FlexVerticalCenter);","/**\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexVerticalLayout\n * @extends BI.Layout\n */\nBI.FlexVerticalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexVerticalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-vertical-layout\",\n horizontalAlign: BI.HorizontalAlign.Left,\n verticalAlign: BI.VerticalAlign.Top,\n rowSize: [],\n scrolly: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.FlexVerticalLayout.superclass.render.apply(this, arguments);\n var o = this.options;\n this.element.addClass(\"h-\" + o.horizontalAlign).addClass(\"v-\" + o.verticalAlign);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var w = BI.FlexVerticalLayout.superclass._addElement.apply(this, arguments);\n var o = this.options;\n w.element.css({\n position: \"relative\",\n \"flex-shrink\": \"0\"\n });\n if (o.rowSize[i] > 0) {\n w.element.height(o.rowSize[i]);\n }\n if (o.rowSize[i] === \"fill\") {\n w.element.css(\"flex\", \"1\");\n }\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": (i === 0 ? o.vgap : 0) + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n // console.log(\"flex_vertical布局不需要resize\");\n },\n\n populate: function (items) {\n BI.FlexVerticalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.flex_vertical\", BI.FlexVerticalLayout);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexWrapperCenterLayout\n * @extends BI.Layout\n */\nBI.FlexWrapperCenterLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexWrapperCenterLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-scrollable-center-adapt-layout clearfix\",\n scrollable: true\n });\n },\n render: function () {\n BI.FlexWrapperCenterLayout.superclass.render.apply(this, arguments);\n this.$wrapper = BI.Widget._renderEngine.createElement(\"<div>\").addClass(\"flex-scrollable-center-adapt-layout-wrapper\");\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.FlexWrapperCenterLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n \"margin-left\": (i === 0 ? o.hgap : 0) + \"px\",\n \"margin-right\": o.hgap + \"px\",\n \"margin-top\": o.vgap + \"px\",\n \"margin-bottom\": o.vgap + \"px\"\n });\n return w;\n },\n\n appendFragment: function (frag) {\n this.$wrapper.append(frag);\n this.element.append(this.$wrapper);\n },\n\n _getWrapper: function () {\n return this.$wrapper;\n },\n\n resize: function () {\n // console.log(\"flex_center_adapt布局不需要resize\");\n },\n\n populate: function (items) {\n BI.FlexWrapperCenterLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.flex_scrollable_center_adapt\", BI.FlexWrapperCenterLayout);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexVerticalCenter\n * @extends BI.Layout\n */\nBI.FlexWrapperHorizontalCenter = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexWrapperHorizontalCenter.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-scrollable-vertical-center-adapt-layout clearfix\",\n verticalAlign: BI.VerticalAlign.Top,\n rowSize: [],\n scrollable: true,\n scrolly: false,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.flex_scrollable_vertical\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n horizontalAlign: BI.HorizontalAlign.Center,\n verticalAlign: o.verticalAlign,\n rowSize: o.rowSize,\n scrollx: o.scrollx,\n scrolly: o.scrolly,\n scrollable: o.scrollable,\n hgap: o.hgap,\n vgap: o.vgap,\n tgap: o.tgap,\n bgap: o.bgap,\n items: o.items\n };\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate(items);\n }\n});\nBI.shortcut(\"bi.flex_scrollable_horizontal_adapt\", BI.FlexWrapperHorizontalCenter);\nBI.shortcut(\"bi.flex_scrollable_horizontal_center_adapt\", BI.FlexWrapperHorizontalCenter);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexHorizontalLayout\n * @extends BI.Layout\n */\nBI.FlexWrapperHorizontalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexWrapperHorizontalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-scrollable-horizontal-layout clearfix\",\n verticalAlign: BI.VerticalAlign.Top,\n horizontalAlign: BI.HorizontalAlign.Left,\n columnSize: [],\n scrollable: null,\n scrollx: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.FlexWrapperHorizontalLayout.superclass.render.apply(this, arguments);\n var o = this.options;\n this.$wrapper = BI.Widget._renderEngine.createElement(\"<div>\").addClass(\"flex-scrollable-horizontal-layout-wrapper v-\" + o.verticalAlign).addClass(\"h-\" + o.horizontalAlign);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.FlexWrapperHorizontalLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n \"flex-shrink\": \"0\"\n });\n if (o.columnSize[i] > 0) {\n w.element.width(o.columnSize[i]);\n }\n if (o.columnSize[i] === \"fill\") {\n w.element.css(\"flex\", \"1\");\n }\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n appendFragment: function (frag) {\n this.$wrapper.append(frag);\n this.element.append(this.$wrapper);\n },\n\n _getWrapper: function () {\n return this.$wrapper;\n },\n\n resize: function () {\n // console.log(\"flex_wrapper_horizontal布局不需要resize\");\n },\n\n populate: function (items) {\n BI.FlexWrapperHorizontalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.flex_scrollable_horizontal\", BI.FlexWrapperHorizontalLayout);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexVerticalCenter\n * @extends BI.Layout\n */\nBI.FlexWrapperVerticalCenter = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexWrapperVerticalCenter.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-scrollable-vertical-center-adapt-layout clearfix\",\n horizontalAlign: BI.HorizontalAlign.Left,\n columnSize: [],\n scrollx: false,\n scrollable: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.flex_scrollable_horizontal\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n verticalAlign: BI.VerticalAlign.Middle,\n horizontalAlign: o.horizontalAlign,\n columnSize: o.columnSize,\n scrollx: o.scrollx,\n scrolly: o.scrolly,\n scrollable: o.scrollable,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n items: o.items\n };\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate(items);\n }\n});\nBI.shortcut(\"bi.flex_scrollable_vertical_adapt\", BI.FlexWrapperVerticalCenter);\nBI.shortcut(\"bi.flex_scrollable_vertical_center_adapt\", BI.FlexWrapperVerticalCenter);","/**\n *自适应水平和垂直方向都居中容器\n * Created by GUY on 2016/12/2.\n *\n * @class BI.FlexWrapperVerticalLayout\n * @extends BI.Layout\n */\nBI.FlexWrapperVerticalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FlexWrapperVerticalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-flex-scrollable-vertical-layout clearfix\",\n horizontalAlign: BI.HorizontalAlign.Left,\n verticalAlign: BI.VerticalAlign.Top,\n rowSize: [],\n scrollable: null,\n scrolly: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.FlexWrapperVerticalLayout.superclass.render.apply(this, arguments);\n var o = this.options;\n this.$wrapper = BI.Widget._renderEngine.createElement(\"<div>\").addClass(\"flex-scrollable-vertical-layout-wrapper h-\" + o.horizontalAlign).addClass(\"v-\" + o.verticalAlign);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.FlexWrapperVerticalLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\",\n \"flex-shrink\": \"0\"\n });\n if (o.rowSize[i] > 0) {\n w.element.height(o.rowSize[i]);\n }\n if (o.rowSize[i] === \"fill\") {\n w.element.css(\"flex\", \"1\");\n }\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": (i === 0 ? o.vgap : 0) + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n appendFragment: function (frag) {\n this.$wrapper.append(frag);\n this.element.append(this.$wrapper);\n },\n\n _getWrapper: function () {\n return this.$wrapper;\n },\n\n resize: function () {\n // console.log(\"flex_wrapper_vertical布局不需要resize\");\n },\n\n populate: function (items) {\n BI.FlexWrapperVerticalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.flex_scrollable_vertical\", BI.FlexWrapperVerticalLayout);","/**\n * 固定子组件上下左右的布局容器\n * @class BI.AbsoluteLayout\n * @extends BI.Layout\n */\nBI.AbsoluteLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.AbsoluteLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-absolute-layout\",\n hgap: null,\n vgap: null,\n lgap: null,\n rgap: null,\n tgap: null,\n bgap: null\n });\n },\n render: function () {\n BI.AbsoluteLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.AbsoluteLayout.superclass._addElement.apply(this, arguments);\n var left = 0, right = 0, top = 0, bottom = 0;\n if (BI.isNotNull(item.left)) {\n w.element.css({left: item.left});\n left += item.left;\n }\n if (BI.isNotNull(item.right)) {\n w.element.css({right: item.right});\n right += item.right;\n }\n if (BI.isNotNull(item.top)) {\n w.element.css({top: item.top});\n top += item.top;\n }\n if (BI.isNotNull(item.bottom)) {\n w.element.css({bottom: item.bottom});\n bottom += item.bottom;\n }\n\n if (BI.isNotNull(o.hgap)) {\n left += o.hgap;\n w.element.css({left: left});\n right += o.hgap;\n w.element.css({right: right});\n }\n if (BI.isNotNull(o.vgap)) {\n top += o.vgap;\n w.element.css({top: top});\n bottom += o.vgap;\n w.element.css({bottom: bottom});\n }\n\n if (BI.isNotNull(o.lgap)) {\n left += o.lgap;\n w.element.css({left: left});\n }\n if (BI.isNotNull(o.rgap)) {\n right += o.rgap;\n w.element.css({right: right});\n }\n if (BI.isNotNull(o.tgap)) {\n top += o.tgap;\n w.element.css({top: top});\n }\n if (BI.isNotNull(o.bgap)) {\n bottom += o.bgap;\n w.element.css({bottom: bottom});\n }\n\n\n if (BI.isNotNull(item.width)) {\n w.element.css({width: item.width});\n }\n if (BI.isNotNull(item.height)) {\n w.element.css({height: item.height});\n }\n w.element.css({position: \"absolute\"});\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n stroke: function (items) {\n this.options.items = items || [];\n var self = this;\n BI.each(items, function (i, item) {\n if (item) {\n if (!BI.isWidget(item) && !item.el) {\n throw new Error(\"el must be exist\");\n }\n self._addElement(i, item);\n }\n });\n },\n\n populate: function (items) {\n BI.AbsoluteLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.absolute\", BI.AbsoluteLayout);","BI.AdaptiveLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.AdaptiveLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-adaptive-layout\",\n hgap: null,\n vgap: null,\n lgap: null,\n rgap: null,\n tgap: null,\n bgap: null\n });\n },\n render: function () {\n BI.AdaptiveLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.AdaptiveLayout.superclass._addElement.apply(this, arguments);\n w.element.css({position: \"relative\"});\n var left = 0, right = 0, top = 0, bottom = 0;\n if (BI.isNotNull(item.left)) {\n w.element.css({\n left: item.left\n });\n }\n if (BI.isNotNull(item.right)) {\n w.element.css({\n right: item.right\n });\n }\n if (BI.isNotNull(item.top)) {\n w.element.css({\n top: item.top\n });\n }\n if (BI.isNotNull(item.bottom)) {\n w.element.css({\n bottom: item.bottom\n });\n }\n\n if (BI.isNotNull(o.hgap)) {\n left += o.hgap;\n w.element.css({\"margin-left\": left});\n right += o.hgap;\n w.element.css({\"margin-right\": right});\n }\n if (BI.isNotNull(o.vgap)) {\n top += o.vgap;\n w.element.css({\"margin-top\": top});\n bottom += o.vgap;\n w.element.css({\"margin-bottom\": bottom});\n }\n\n if (BI.isNotNull(o.lgap)) {\n left += o.lgap;\n w.element.css({\"margin-left\": left});\n }\n if (BI.isNotNull(o.rgap)) {\n right += o.rgap;\n w.element.css({\"margin-right\": right});\n }\n if (BI.isNotNull(o.tgap)) {\n top += o.tgap;\n w.element.css({\"margin-top\": top});\n }\n if (BI.isNotNull(o.bgap)) {\n bottom += o.bgap;\n w.element.css({\"margin-bottom\": bottom});\n }\n\n if (BI.isNotNull(item.width)) {\n w.element.css({width: item.width});\n }\n if (BI.isNotNull(item.height)) {\n w.element.css({height: item.height});\n }\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n populate: function (items) {\n BI.AbsoluteLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.adaptive\", BI.AdaptiveLayout);","/**\n * 上下的高度固定/左右的宽度固定,中间的高度/宽度自适应\n *\n * @class BI.BorderLayout\n * @extends BI.Layout\n */\nBI.BorderLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.BorderLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-border-layout\",\n items: {}\n });\n },\n render: function () {\n BI.BorderLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n stroke: function (regions) {\n var item;\n var top = 0;\n var bottom = 0;\n var left = 0;\n var right = 0;\n if (\"north\" in regions) {\n item = regions[\"north\"];\n if (item != null) {\n if (item.el) {\n if (!this.hasWidget(this.getName() + \"north\")) {\n var w = BI.createWidget(item);\n this.addWidget(this.getName() + \"north\", w);\n }\n this.getWidgetByName(this.getName() + \"north\").element.height(item.height)\n .css({\n position: \"absolute\",\n top: (item.top || 0),\n left: (item.left || 0),\n right: (item.right || 0),\n bottom: \"initial\"\n });\n }\n top = (item.height || 0) + (item.top || 0) + (item.bottom || 0);\n }\n }\n if (\"south\" in regions) {\n item = regions[\"south\"];\n if (item != null) {\n if (item.el) {\n if (!this.hasWidget(this.getName() + \"south\")) {\n var w = BI.createWidget(item);\n this.addWidget(this.getName() + \"south\", w);\n }\n this.getWidgetByName(this.getName() + \"south\").element.height(item.height)\n .css({\n position: \"absolute\",\n bottom: (item.bottom || 0),\n left: (item.left || 0),\n right: (item.right || 0),\n top: \"initial\"\n });\n }\n bottom = (item.height || 0) + (item.top || 0) + (item.bottom || 0);\n }\n }\n if (\"west\" in regions) {\n item = regions[\"west\"];\n if (item != null) {\n if (item.el) {\n if (!this.hasWidget(this.getName() + \"west\")) {\n var w = BI.createWidget(item);\n this.addWidget(this.getName() + \"west\", w);\n }\n this.getWidgetByName(this.getName() + \"west\").element.width(item.width)\n .css({\n position: \"absolute\",\n left: (item.left || 0),\n top: top,\n bottom: bottom,\n right: \"initial\"\n });\n }\n left = (item.width || 0) + (item.left || 0) + (item.right || 0);\n }\n }\n if (\"east\" in regions) {\n item = regions[\"east\"];\n if (item != null) {\n if (item.el) {\n if (!this.hasWidget(this.getName() + \"east\")) {\n var w = BI.createWidget(item);\n this.addWidget(this.getName() + \"east\", w);\n }\n this.getWidgetByName(this.getName() + \"east\").element.width(item.width)\n .css({\n position: \"absolute\",\n right: (item.right || 0),\n top: top,\n bottom: bottom,\n left: \"initial\"\n });\n }\n right = (item.width || 0) + (item.left || 0) + (item.right || 0);\n }\n }\n if (\"center\" in regions) {\n item = regions[\"center\"];\n if (item != null) {\n if (!this.hasWidget(this.getName() + \"center\")) {\n var w = BI.createWidget(item);\n this.addWidget(this.getName() + \"center\", w);\n }\n this.getWidgetByName(this.getName() + \"center\").element\n .css({position: \"absolute\", top: top, bottom: bottom, left: left, right: right});\n }\n }\n },\n\n update: function (opt) {\n },\n\n populate: function (items) {\n BI.BorderLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.border\", BI.BorderLayout);","/**\n * 卡片布局,可以做到当前只显示一个组件,其他的都隐藏\n * @class BI.CardLayout\n * @extends BI.Layout\n *\n * @cfg {JSON} options 配置属性\n * @cfg {String} options.defaultShowName 默认展示的子组件名\n */\nBI.CardLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.CardLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-card-layout\",\n items: []\n });\n },\n render: function () {\n BI.CardLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n // console.log(\"default布局不需要resize\");\n },\n\n stroke: function (items) {\n var self = this, o = this.options;\n this.showIndex = void 0;\n BI.each(items, function (i, item) {\n if (item) {\n if (!self.hasWidget(item.cardName)) {\n var w = BI.createWidget(item);\n w.on(BI.Events.DESTROY, function () {\n var index = BI.findIndex(o.items, function (i, tItem) {\n return tItem.cardName == item.cardName;\n });\n if (index > -1) {\n o.items.splice(index, 1);\n }\n });\n self.addWidget(item.cardName, w);\n } else {\n var w = self.getWidgetByName(item.cardName);\n }\n w.element.css({position: \"absolute\", top: \"0\", right: \"0\", bottom: \"0\", left: \"0\"});\n w.setVisible(false);\n }\n });\n },\n\n update: function () {\n },\n\n empty: function () {\n BI.CardLayout.superclass.empty.apply(this, arguments);\n this.options.items = [];\n },\n\n populate: function (items) {\n BI.CardLayout.superclass.populate.apply(this, arguments);\n this._mount();\n this.options.defaultShowName && this.showCardByName(this.options.defaultShowName);\n },\n\n isCardExisted: function (cardName) {\n return BI.some(this.options.items, function (i, item) {\n return item.cardName == cardName && item.el;\n });\n },\n\n getCardByName: function (cardName) {\n if (!this.isCardExisted(cardName)) {\n throw new Error(\"cardName is not exist\");\n }\n return this._children[cardName];\n },\n\n _deleteCardByName: function (cardName) {\n delete this._children[cardName];\n var index = BI.findIndex(this.options.items, function (i, item) {\n return item.cardName == cardName;\n });\n if (index > -1) {\n this.options.items.splice(index, 1);\n }\n },\n\n deleteCardByName: function (cardName) {\n if (!this.isCardExisted(cardName)) {\n throw new Error(\"cardName is not exist\");\n }\n\n var child = this._children[cardName];\n this._deleteCardByName(cardName);\n child && child._destroy();\n },\n\n addCardByName: function (cardName, cardItem) {\n if (this.isCardExisted(cardName)) {\n throw new Error(\"cardName is already exist\");\n }\n var widget = BI.createWidget(cardItem, this);\n widget.element.css({\n position: \"relative\",\n top: \"0\",\n left: \"0\",\n width: \"100%\",\n height: \"100%\"\n }).appendTo(this.element);\n widget.invisible();\n this.addWidget(cardName, widget);\n this.options.items.push({el: cardItem, cardName: cardName});\n return widget;\n },\n\n showCardByName: function (name, action, callback) {\n var self = this;\n // name不存在的时候全部隐藏\n var exist = this.isCardExisted(name);\n if (this.showIndex != null) {\n this.lastShowIndex = this.showIndex;\n }\n this.showIndex = name;\n var flag = false;\n BI.each(this.options.items, function (i, item) {\n var el = self._children[item.cardName];\n if (el) {\n if (name != item.cardName) {\n // 动画效果只有在全部都隐藏的时候才有意义,且只要执行一次动画操作就够了\n !flag && !exist && (BI.Action && action instanceof BI.Action) ? (action.actionBack(el), flag = true) : el.invisible();\n } else {\n (BI.Action && action instanceof BI.Action) ? action.actionPerformed(void 0, el, callback) : (el.visible(), callback && callback());\n }\n }\n });\n },\n\n showLastCard: function () {\n var self = this;\n this.showIndex = this.lastShowIndex;\n BI.each(this.options.items, function (i, item) {\n self._children[item.cardName].setVisible(self.showIndex == i);\n });\n },\n\n setDefaultShowName: function (name) {\n this.options.defaultShowName = name;\n return this;\n },\n\n getDefaultShowName: function () {\n return this.options.defaultShowName;\n },\n\n getAllCardNames: function () {\n return BI.map(this.options.items, function (i, item) {\n return item.cardName;\n });\n },\n\n getShowingCard: function () {\n if (!BI.isKey(this.showIndex)) {\n return void 0;\n }\n return this.getWidgetByName(this.showIndex);\n },\n\n deleteAllCard: function () {\n var self = this;\n BI.each(this.getAllCardNames(), function (i, name) {\n self.deleteCardByName(name);\n });\n },\n\n hideAllCard: function () {\n var self = this;\n BI.each(this.options.items, function (i, item) {\n self._children[item.cardName].invisible();\n });\n },\n\n isAllCardHide: function () {\n var self = this;\n var flag = true;\n BI.some(this.options.items, function (i, item) {\n if (self._children[item.cardName].isVisible()) {\n flag = false;\n return false;\n }\n });\n return flag;\n },\n\n removeWidget: function (nameOrWidget) {\n var removeName;\n if (BI.isWidget(nameOrWidget)) {\n BI.each(this._children, function (name, child) {\n if (child === nameOrWidget) {\n removeName = name;\n }\n });\n } else {\n removeName = nameOrWidget;\n }\n if (removeName) {\n this._deleteCardByName(removeName);\n }\n }\n});\nBI.shortcut(\"bi.card\", BI.CardLayout);","/**\n * 默认的布局方式\n *\n * @class BI.DefaultLayout\n * @extends BI.Layout\n */\nBI.DefaultLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.DefaultLayout.superclass.props.apply(this, arguments), {\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n items: []\n });\n },\n render: function () {\n BI.DefaultLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.DefaultLayout.superclass._addElement.apply(this, arguments);\n if (o.vgap + o.tgap + (item.tgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": o.hgap + o.lgap + (item.lgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n // console.log(\"default布局不需要resize\")\n },\n\n populate: function (items) {\n BI.DefaultLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.default\", BI.DefaultLayout);","/**\n * 分隔容器的控件,按照宽度和高度所占比平分整个容器\n *\n * @class BI.DivisionLayout\n * @extends BI.Layout\n */\nBI.DivisionLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.DivisionLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-division-layout\",\n columns: null,\n rows: null,\n items: []\n // [\n // {\n // column: 0,\n // row: 0,\n // width: 0.25,\n // height: 0.33,\n // el: {type: 'bi.button', text: 'button1'}\n // },\n // {\n // column: 1,\n // row: 1,\n // width: 0.25,\n // height: 0.33,\n // el: {type: 'bi.button', text: 'button2'}\n // },\n // {\n // column: 3,\n // row: 2,\n // width: 0.25,\n // height: 0.33,\n // el: {type: 'bi.button', text: 'button3'}\n // }\n // ]\n });\n },\n render: function () {\n BI.DivisionLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n this.stroke(this.opitons.items);\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n stroke: function (items) {\n var o = this.options;\n var rows = o.rows || o.items.length, columns = o.columns || ((o.items[0] && o.items[0].length) | 0);\n var map = BI.makeArray(rows), widths = {}, heights = {};\n\n function firstElement (item, row, col) {\n if (row === 0) {\n item.addClass(\"first-row\");\n }\n if (col === 0) {\n item.addClass(\"first-col\");\n }\n item.addClass(BI.isOdd(row + 1) ? \"odd-row\" : \"even-row\");\n item.addClass(BI.isOdd(col + 1) ? \"odd-col\" : \"even-col\");\n item.addClass(\"center-element\");\n }\n\n function firstObject (item, row, col) {\n var cls = \"\";\n if (row === 0) {\n cls += \" first-row\";\n }\n if (col === 0) {\n cls += \" first-col\";\n }\n BI.isOdd(row + 1) ? (cls += \" odd-row\") : (cls += \" even-row\");\n BI.isOdd(col + 1) ? (cls += \" odd-col\") : (cls += \" even-col\");\n item.cls = (item.cls || \"\") + cls + \" center-element\";\n }\n\n function first (item, row, col) {\n if (item instanceof BI.Widget) {\n firstElement(item.element, row, col);\n } else if (item.el instanceof BI.Widget) {\n firstElement(item.el.element, row, col);\n } else if (item.el) {\n firstObject(item.el, row, col);\n } else {\n firstObject(item, row, col);\n }\n }\n\n BI.each(map, function (i) {\n map[i] = BI.makeArray(columns);\n });\n BI.each(items, function (i, item) {\n if (BI.isArray(item)) {\n BI.each(item, function (j, el) {\n widths[i] = (widths[i] || 0) + item.width;\n heights[j] = (heights[j] || 0) + item.height;\n map[i][j] = el;\n });\n return;\n }\n widths[item.row] = (widths[item.row] || 0) + item.width;\n heights[item.column] = (heights[item.column] || 0) + item.height;\n map[item.row][item.column] = item;\n });\n for (var i = 0; i < rows; i++) {\n var totalW = 0;\n for (var j = 0; j < columns; j++) {\n if (!map[i][j]) {\n throw new Error(\"item be required\");\n }\n if (!this.hasWidget(this.getName() + i + \"_\" + j)) {\n var w = BI.createWidget(map[i][j]);\n this.addWidget(this.getName() + i + \"_\" + j, w);\n } else {\n w = this.getWidgetByName(this.getName() + i + \"_\" + j);\n }\n var left = totalW * 100 / widths[i];\n w.element.css({position: \"absolute\", left: left + \"%\"});\n if (j > 0) {\n var lastW = this.getWidgetByName(this.getName() + i + \"_\" + (j - 1));\n lastW.element.css({right: (100 - left) + \"%\"});\n }\n if (j == o.columns - 1) {\n w.element.css({right: \"0%\"});\n }\n first(w, i, j);\n totalW += map[i][j].width;\n }\n }\n for (var j = 0; j < o.columns; j++) {\n var totalH = 0;\n for (var i = 0; i < o.rows; i++) {\n var w = this.getWidgetByName(this.getName() + i + \"_\" + j);\n var top = totalH * 100 / heights[j];\n w.element.css({top: top + \"%\"});\n if (i > 0) {\n var lastW = this.getWidgetByName(this.getName() + (i - 1) + \"_\" + j);\n lastW.element.css({bottom: (100 - top) + \"%\"});\n }\n if (i == o.rows - 1) {\n w.element.css({bottom: \"0%\"});\n }\n totalH += map[i][j].height;\n }\n }\n },\n\n update: function () {\n },\n\n populate: function (items) {\n BI.DivisionLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.division\", BI.DivisionLayout);","/**\n * 靠左对齐的自由浮动布局\n * @class BI.FloatLeftLayout\n * @extends BI.Layout\n *\n * @cfg {JSON} options 配置属性\n * @cfg {Number} [hgap=0] 水平间隙\n * @cfg {Number} [vgap=0] 垂直间隙\n */\nBI.FloatLeftLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FloatLeftLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-float-left-layout clearfix\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.FloatLeftLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.FloatLeftLayout.superclass._addElement.apply(this, arguments);\n w.element.css({position: \"relative\", float: \"left\"});\n if (BI.isNotNull(item.left)) {\n w.element.css({left: item.left});\n }\n if (BI.isNotNull(item.right)) {\n w.element.css({right: item.right});\n }\n if (BI.isNotNull(item.top)) {\n w.element.css({top: item.top});\n }\n if (BI.isNotNull(item.bottom)) {\n w.element.css({bottom: item.bottom});\n }\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) +\"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n populate: function (items) {\n BI.FloatLeftLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.left\", BI.FloatLeftLayout);\n\n/**\n * 靠右对齐的自由浮动布局\n * @class BI.FloatRightLayout\n * @extends BI.Layout\n *\n * @cfg {JSON} options 配置属性\n * @cfg {Number} [hgap=0] 水平间隙\n * @cfg {Number} [vgap=0] 垂直间隙\n */\nBI.FloatRightLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FloatRightLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-float-right-layout clearfix\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.FloatRightLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.FloatRightLayout.superclass._addElement.apply(this, arguments);\n w.element.css({position: \"relative\", float: \"right\"});\n if (BI.isNotNull(item.left)) {\n w.element.css({left: item.left});\n }\n if (BI.isNotNull(item.right)) {\n w.element.css({right: item.right});\n }\n if (BI.isNotNull(item.top)) {\n w.element.css({top: item.top});\n }\n if (BI.isNotNull(item.bottom)) {\n w.element.css({bottom: item.bottom});\n }\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) +\"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": (i === 0 ? o.hgap : 0) + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n populate: function (items) {\n BI.FloatRightLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.right\", BI.FloatRightLayout);","/**\n * 上下的高度固定/左右的宽度固定,中间的高度/宽度自适应\n *\n * @class BI.BorderLayout\n * @extends BI.Layout\n */\nBI.GridLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.GridLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-grid-layout\",\n columns: null,\n rows: null,\n items: []\n /* [\n {\n column: 0,\n row: 0,\n el: {type: 'bi.button', text: 'button1'}\n },\n {\n column: 1,\n row: 1,\n el: {type: 'bi.button', text: 'button2'}\n },\n {\n column: 3,\n row: 2,\n el: {type: 'bi.button', text: 'button3'}\n }\n ]*/\n });\n },\n render: function () {\n BI.GridLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n // console.log(\"grid布局不需要resize\")\n },\n\n addItem: function () {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n stroke: function (items) {\n var self = this, o = this.options;\n var rows = o.rows || o.items.length, columns = o.columns || ((o.items[0] && o.items[0].length) | 0);\n var width = 100 / columns, height = 100 / rows;\n var els = [];\n for (var i = 0; i < rows; i++) {\n els[i] = [];\n }\n\n function firstElement (item, row, col) {\n if (row === 0) {\n item.addClass(\"first-row\");\n }\n if (col === 0) {\n item.addClass(\"first-col\");\n }\n item.addClass(BI.isOdd(row + 1) ? \"odd-row\" : \"even-row\");\n item.addClass(BI.isOdd(col + 1) ? \"odd-col\" : \"even-col\");\n item.addClass(\"center-element\");\n }\n\n function firstObject (item, row, col) {\n var cls = \"\";\n if (row === 0) {\n cls += \" first-row\";\n }\n if (col === 0) {\n cls += \" first-col\";\n }\n BI.isOdd(row + 1) ? (cls += \" odd-row\") : (cls += \" even-row\");\n BI.isOdd(col + 1) ? (cls += \" odd-col\") : (cls += \" even-col\");\n item.cls = (item.cls || \"\") + cls + \" center-element\";\n }\n\n function first (item, row, col) {\n if (item instanceof BI.Widget) {\n firstElement(item.element, row, col);\n } else if (item.el instanceof BI.Widget) {\n firstElement(item.el.element, row, col);\n } else if (item.el) {\n firstObject(item.el, row, col);\n } else {\n firstObject(item, row, col);\n }\n }\n\n BI.each(items, function (i, item) {\n if (BI.isArray(item)) {\n BI.each(item, function (j, el) {\n els[i][j] = BI.createWidget(el);\n });\n return;\n }\n els[item.row][item.column] = BI.createWidget(item);\n });\n for (var i = 0; i < rows; i++) {\n for (var j = 0; j < columns; j++) {\n if (!els[i][j]) {\n els[i][j] = BI.createWidget({\n type: \"bi.layout\"\n });\n }\n first(els[i][j], i, j);\n els[i][j].element.css({\n position: \"absolute\",\n top: height * i + \"%\",\n left: width * j + \"%\",\n right: (100 - (width * (j + 1))) + \"%\",\n bottom: (100 - (height * (i + 1))) + \"%\"\n });\n this.addWidget(els[i][j]);\n }\n }\n },\n\n update: function () {\n },\n\n populate: function (items) {\n BI.GridLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.grid\", BI.GridLayout);","/**\n * 水平布局\n * @class BI.HorizontalLayout\n * @extends BI.Layout\n */\nBI.HorizontalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.HorizontalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-horizontal-layout\",\n verticalAlign: BI.VerticalAlign.Top,\n horizontalAlign: BI.HorizontalAlign.Left,\n columnSize: [],\n scrollx: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n var o = this.options;\n BI.HorizontalLayout.superclass.render.apply(this, arguments);\n this.$table = BI.Widget._renderEngine.createElement(\"<table>\").attr({cellspacing: 0, cellpadding: 0}).css({\n position: \"relative\",\n \"white-space\": \"nowrap\",\n height: o.verticalAlign === BI.VerticalAlign.Middle ? \"100%\" : \"auto\",\n width: (o.horizontalAlign === BI.HorizontalAlign.Center || o.horizontalAlign === BI.HorizontalAlign.Stretch) ? \"100%\" : \"auto\",\n \"border-spacing\": \"0px\",\n border: \"none\",\n \"border-collapse\": \"separate\"\n });\n this.$tr = BI.Widget._renderEngine.createElement(\"<tr>\");\n this.$tr.appendTo(this.$table);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var td;\n var width = o.columnSize[i] <= 1 ? (o.columnSize[i] * 100 + \"%\") : o.columnSize[i];\n if (!this.hasWidget(this._getChildName(i))) {\n var w = BI.createWidget(item);\n w.element.css({position: \"relative\", margin: \"0px auto\"});\n td = BI.createWidget({\n type: \"bi.default\",\n tagName: \"td\",\n attributes: {\n width: width\n },\n items: [w]\n });\n this.addWidget(this._getChildName(i), td);\n } else {\n td = this.getWidgetByName(this._getChildName(i));\n td.element.attr(\"width\", width);\n }\n // 对于表现为td的元素设置最大宽度,有几点需要注意\n // 1、由于直接对td设置最大宽度是在规范中未定义的, 所以要使用类似td:firstChild来迂回实现\n // 2、不能给多个td设置最大宽度,这样只会平分宽度\n // 3、多百分比宽度就算了\n td.element.css({\"max-width\": o.columnSize[i] <= 1 ? width : width + \"px\"});\n if (i === 0) {\n td.element.addClass(\"first-element\");\n }\n td.element.css({\n position: \"relative\",\n \"vertical-align\": o.verticalAlign,\n margin: \"0\",\n padding: \"0\",\n border: \"none\"\n });\n\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) +\"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return td;\n },\n\n appendFragment: function (frag) {\n this.$tr.append(frag);\n this.element.append(this.$table);\n },\n\n resize: function () {\n // console.log(\"horizontal layout do not need to resize\");\n },\n\n _getWrapper: function () {\n return this.$tr;\n },\n\n populate: function (items) {\n BI.HorizontalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.horizontal\", BI.HorizontalLayout);\n\n/**\n * 水平布局\n * @class BI.HorizontalCellLayout\n * @extends BI.Layout\n */\nBI.HorizontalCellLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.HorizontalCellLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-horizontal-cell-layout\",\n scrollable: true,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.HorizontalCellLayout.superclass.render.apply(this, arguments);\n this.element.css({display: \"table\", \"vertical-align\": \"top\"});\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.HorizontalCellLayout.superclass._addElement.apply(this, arguments);\n w.element.css({position: \"relative\", display: \"table-cell\", \"vertical-align\": \"middle\"});\n if (o.hgap + o.lgap > 0) {\n w.element.css({\n \"margin-left\": o.hgap + o.lgap + \"px\"\n });\n }\n if (o.hgap + o.rgap > 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + \"px\"\n });\n }\n if (o.vgap + o.tgap > 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + \"px\"\n });\n }\n if (o.vgap + o.bgap > 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n // console.log(\"horizontal do not need to resize\");\n },\n\n populate: function (items) {\n BI.HorizontalCellLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.horizontal_cell\", BI.HorizontalCellLayout);","/**\n * 内联布局\n * @class BI.InlineLayout\n * @extends BI.Layout\n *\n * @cfg {JSON} options 配置属性\n * @cfg {Number} [hgap=0] 水平间隙\n * @cfg {Number} [vgap=0] 垂直间隙\n */\nBI.InlineLayout = BI.inherit(BI.Layout, {\n\n props: function () {\n return BI.extend(BI.InlineLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-inline-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.InlineLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.InlineLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\"position\": \"relative\", display: \"inline-block\", \"*display\": \"inline\", \"*zoom\": 1});\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": (i === 0 ? o.hgap : 0) + o.lgap + (item.lgap || 0) + (item.hgap || 0) +\"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n populate: function (items) {\n BI.InlineLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.inline\", BI.InlineLayout);","/**\n * 靠左对齐的自由浮动布局\n * @class BI.LatticeLayout\n * @extends BI.Layout\n *\n * @cfg {JSON} options 配置属性\n * @cfg {Number} [hgap=0] 水平间隙\n * @cfg {Number} [vgap=0] 垂直间隙\n */\nBI.LatticeLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.LatticeLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-lattice-layout clearfix\"\n // columnSize: [0.2, 0.2, 0.6],\n });\n },\n render: function () {\n BI.LatticeLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.LatticeLayout.superclass._addElement.apply(this, arguments);\n if (o.columnSize && o.columnSize[i]) {\n var width = o.columnSize[i] / BI.sum(o.columnSize) * 100 + \"%\";\n } else {\n var width = 1 / this.options.items.length * 100 + \"%\";\n }\n w.element.css({position: \"relative\", float: \"left\", width: width});\n return w;\n },\n\n addItem: function (item) {\n var w = BI.LatticeLayout.superclass.addItem.apply(this, arguments);\n this.resize();\n return w;\n },\n\n addItemAt: function (item) {\n var w = BI.LatticeLayout.superclass.addItemAt.apply(this, arguments);\n this.resize();\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n populate: function (items) {\n BI.LatticeLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.lattice\", BI.LatticeLayout);","/**\n * 上下的高度固定/左右的宽度固定,中间的高度/宽度自适应\n *\n * @class BI.TableLayout\n * @extends BI.Layout\n */\nBI.TableLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.TableLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-table-layout\",\n scrolly: true,\n columnSize: [200, 200, \"fill\"],\n rowSize: 30, // or [30,30,30]\n hgap: 0,\n vgap: 0,\n items: [[\n {\n el: {text: \"label1\"}\n },\n {\n el: {text: \"label2\"}\n },\n {\n el: {text: \"label3\"}\n }\n ]]\n });\n },\n render: function () {\n BI.TableLayout.superclass.render.apply(this, arguments);\n this.rows = 0;\n this.populate(this.options.items);\n },\n\n _addElement: function (idx, arr) {\n var o = this.options;\n var abs = [], left = 0, right = 0, i, j;\n\n function firstElement (item, row, col) {\n if (row === 0) {\n item.addClass(\"first-row\");\n }\n if (col === 0) {\n item.addClass(\"first-col\");\n }\n item.addClass(BI.isOdd(row + 1) ? \"odd-row\" : \"even-row\");\n item.addClass(BI.isOdd(col + 1) ? \"odd-col\" : \"even-col\");\n item.addClass(\"center-element\");\n }\n\n function firstObject (item, row, col) {\n var cls = \"\";\n if (row === 0) {\n cls += \" first-row\";\n }\n if (col === 0) {\n cls += \" first-col\";\n }\n BI.isOdd(row + 1) ? (cls += \" odd-row\") : (cls += \" even-row\");\n BI.isOdd(col + 1) ? (cls += \" odd-col\") : (cls += \" even-col\");\n item.cls = (item.cls || \"\") + cls + \" center-element\";\n }\n\n function first (item, row, col) {\n if (item instanceof BI.Widget) {\n firstElement(item.element, row, col);\n } else if (item.el instanceof BI.Widget) {\n firstElement(item.el.element, row, col);\n } else if (item.el) {\n firstObject(item.el, row, col);\n } else {\n firstObject(item, row, col);\n }\n }\n\n for (i = 0; i < arr.length; i++) {\n if (BI.isNumber(o.columnSize[i])) {\n first(arr[i], this.rows, i);\n abs.push(BI.extend({\n top: 0,\n bottom: 0,\n left: o.columnSize[i] <= 1 ? left * 100 + \"%\" : left,\n width: o.columnSize[i] <= 1 ? o.columnSize[i] * 100 + \"%\" : o.columnSize[i]\n }, arr[i]));\n left += o.columnSize[i] + (o.columnSize[i] < 1 ? 0 : o.hgap);\n } else {\n break;\n }\n }\n for (j = arr.length - 1; j > i; j--) {\n if (BI.isNumber(o.columnSize[j])) {\n first(arr[j], this.rows, j);\n abs.push(BI.extend({\n top: 0,\n bottom: 0,\n right: o.columnSize[j] <= 1 ? right * 100 + \"%\" : right,\n width: o.columnSize[j] <= 1 ? o.columnSize[j] * 100 + \"%\" : o.columnSize[j]\n }, arr[j]));\n right += o.columnSize[j] + (o.columnSize[j] < 1 ? 0 : o.hgap);\n } else {\n throw new Error(\"item with fill can only be one\");\n }\n }\n if (i >= 0 && i < arr.length) {\n first(arr[i], this.rows, i);\n abs.push(BI.extend({\n top: 0,\n bottom: 0,\n left: left <= 1 ? left * 100 + \"%\" : left,\n right: right <= 1 ? right * 100 + \"%\" : right\n }, arr[i]));\n }\n var w = BI.createWidget({\n type: \"bi.absolute\",\n height: BI.isArray(o.rowSize) ? o.rowSize[this.rows] : o.rowSize,\n items: abs\n });\n if (this.rows > 0) {\n this.getWidgetByName(this.getName() + (this.rows - 1)).element.css({\n \"margin-bottom\": o.vgap\n });\n }\n w.element.css({\n position: \"relative\"\n });\n this.addWidget(this.getName() + (this.rows++), w);\n return w;\n },\n\n resize: function () {\n // console.log(\"table布局不需要resize\");\n },\n\n addItem: function (arr) {\n if (!BI.isArray(arr)) {\n throw new Error(\"item must be array\");\n }\n return BI.TableLayout.superclass.addItem.apply(this, arguments);\n },\n\n update: function () {\n },\n\n populate: function (items) {\n BI.TableLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.table\", BI.TableLayout);","/**\n * 水平tape布局\n * @class BI.HTapeLayout\n * @extends BI.Layout\n */\nBI.HTapeLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.HTapeLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-h-tape-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n items: [\n {\n width: 100,\n el: {type: \"bi.button\", text: \"button1\"}\n },\n {\n width: \"fill\",\n el: {type: \"bi.button\", text: \"button2\"}\n },\n {\n width: 200,\n el: {type: \"bi.button\", text: \"button3\"}\n }\n ]\n });\n },\n render: function () {\n BI.HTapeLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n stroke: function (items) {\n var self = this, o = this.options;\n items = BI.compact(items);\n BI.each(items, function (i, item) {\n if (!self.hasWidget(self.getName() + i + \"\")) {\n var w = BI.createWidget(item);\n self.addWidget(self.getName() + i + \"\", w);\n } else {\n w = self.getWidgetByName(self.getName() + i + \"\");\n }\n w.element.css({position: \"absolute\", top: (item.vgap || 0) + (item.tgap || 0) + o.vgap + o.tgap + \"px\", bottom: (item.bgap || 0) + (item.vgap || 0) + o.vgap + o.bgap + \"px\"});\n });\n\n var left = {}, right = {};\n left[0] = 0;\n right[items.length - 1] = 0;\n\n BI.any(items, function (i, item) {\n var w = self.getWidgetByName(self.getName() + i + \"\");\n if (BI.isNull(left[i])) {\n left[i] = left[i - 1] + items[i - 1].width + (items[i - 1].lgap || 0) + 2 * (items[i - 1].hgap || 0) + o.hgap + o.lgap + o.rgap;\n }\n if (item.width < 1 && item.width >= 0) {\n w.element.css({left: left[i] * 100 + \"%\", width: item.width * 100 + \"%\"});\n } else {\n w.element.css({\n left: left[i] + (item.lgap || 0) + (item.hgap || 0) + o.hgap + o.lgap + \"px\",\n width: BI.isNumber(item.width) ? item.width : \"\"\n });\n }\n if (!BI.isNumber(item.width)) {\n return true;\n }\n });\n BI.backAny(items, function (i, item) {\n var w = self.getWidgetByName(self.getName() + i + \"\");\n if (BI.isNull(right[i])) {\n right[i] = right[i + 1] + items[i + 1].width + (items[i + 1].rgap || 0) + 2 * (items[i + 1].hgap || 0) + o.hgap + o.lgap + o.rgap;\n }\n if (item.width < 1 && item.width >= 0) {\n w.element.css({right: right[i] * 100 + \"%\", width: item.width * 100 + \"%\"});\n } else {\n w.element.css({\n right: right[i] + (item.rgap || 0) + (item.hgap || 0) + o.hgap + o.rgap + \"px\",\n width: BI.isNumber(item.width) ? item.width : \"\"\n });\n }\n if (!BI.isNumber(item.width)) {\n return true;\n }\n });\n },\n\n update: function () {\n var updated;\n BI.each(this._children, function (i, child) {\n updated = child.update() || updated;\n });\n return updated;\n },\n\n populate: function (items) {\n BI.HTapeLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.htape\", BI.HTapeLayout);\n\n/**\n * 垂直tape布局\n * @class BI.VTapeLayout\n * @extends BI.Layout\n */\nBI.VTapeLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.VTapeLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-v-tape-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n items: [\n {\n height: 100,\n el: {type: \"bi.button\", text: \"button1\"}\n },\n {\n height: \"fill\",\n el: {type: \"bi.button\", text: \"button2\"}\n },\n {\n height: 200,\n el: {type: \"bi.button\", text: \"button3\"}\n }\n ]\n });\n },\n render: function () {\n BI.VTapeLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n stroke: function (items) {\n var self = this, o = this.options;\n items = BI.compact(items);\n BI.each(items, function (i, item) {\n if (!self.hasWidget(self.getName() + i + \"\")) {\n var w = BI.createWidget(item);\n self.addWidget(self.getName() + i + \"\", w);\n } else {\n w = self.getWidgetByName(self.getName() + i + \"\");\n }\n w.element.css({position: \"absolute\", left: (item.lgap || 0) + (item.hgap || 0) + o.hgap + o.lgap + \"px\", right: + (item.hgap || 0) + (item.rgap || 0) + o.hgap + o.rgap + \"px\"});\n });\n\n var top = {}, bottom = {};\n top[0] = 0;\n bottom[items.length - 1] = 0;\n\n BI.any(items, function (i, item) {\n var w = self.getWidgetByName(self.getName() + i + \"\");\n if (BI.isNull(top[i])) {\n top[i] = top[i - 1] + items[i - 1].height + (items[i - 1].tgap || 0) + 2 * (items[i - 1].vgap || 0) + o.vgap + o.tgap + o.bgap;\n }\n if (item.height < 1 && item.height >= 0) {\n w.element.css({top: top[i] * 100 + \"%\", height: item.height * 100 + \"%\"});\n } else {\n w.element.css({\n top: top[i] + (item.vgap || 0) + (item.tgap || 0) + o.vgap + o.tgap + \"px\",\n height: BI.isNumber(item.height) ? item.height : \"\"\n });\n }\n if (!BI.isNumber(item.height)) {\n return true;\n }\n });\n BI.backAny(items, function (i, item) {\n var w = self.getWidgetByName(self.getName() + i + \"\");\n if (BI.isNull(bottom[i])) {\n bottom[i] = bottom[i + 1] + items[i + 1].height + (items[i + 1].bgap || 0) + 2 * (items[i + 1].vgap || 0) + o.vgap + o.tgap + o.bgap;\n }\n if (item.height < 1 && item.height >= 0) {\n w.element.css({bottom: bottom[i] * 100 + \"%\", height: item.height * 100 + \"%\"});\n } else {\n w.element.css({\n bottom: bottom[i] + (item.vgap || 0) + (item.bgap || 0) + o.vgap + o.bgap + \"px\",\n height: BI.isNumber(item.height) ? item.height : \"\"\n });\n }\n if (!BI.isNumber(item.height)) {\n return true;\n }\n });\n },\n\n update: function () {\n },\n\n populate: function (items) {\n BI.VTapeLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.vtape\", BI.VTapeLayout);","/**\n * td布局\n * @class BI.TdLayout\n * @extends BI.Layout\n */\nBI.TdLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.TdLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-td-layout\",\n columnSize: [200, 200, 200],\n hgap: 0,\n vgap: 0,\n items: [[\n {\n el: {text: \"label1\"}\n },\n {\n el: {text: \"label2\"}\n },\n {\n el: {text: \"label3\"}\n }\n ]]\n });\n },\n render: function () {\n BI.TdLayout.superclass.render.apply(this, arguments);\n this.$table = BI.Widget._renderEngine.createElement(\"<table>\").attr({cellspacing: 0, cellpadding: 0}).css({\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n \"border-spacing\": \"0px\",\n border: \"none\",\n \"border-collapse\": \"separate\"\n });\n this.rows = 0;\n this.populate(this.options.items);\n },\n\n _addElement: function (idx, arr) {\n var o = this.options;\n\n function firstElement (item, row, col) {\n if (row === 0) {\n item.addClass(\"first-row\");\n }\n if (col === 0) {\n item.addClass(\"first-col\");\n }\n item.addClass(BI.isOdd(row + 1) ? \"odd-row\" : \"even-row\");\n item.addClass(BI.isOdd(col + 1) ? \"odd-col\" : \"even-col\");\n item.addClass(\"center-element\");\n }\n\n function firstObject (item, row, col) {\n var cls = \"\";\n if (row === 0) {\n cls += \" first-row\";\n }\n if (col === 0) {\n cls += \" first-col\";\n }\n BI.isOdd(row + 1) ? (cls += \" odd-row\") : (cls += \" even-row\");\n BI.isOdd(col + 1) ? (cls += \" odd-col\") : (cls += \" even-col\");\n item.cls = (item.cls || \"\") + cls + \" center-element\";\n }\n\n function first (item, row, col) {\n if (item instanceof BI.Widget) {\n firstElement(item.element, row, col);\n } else if (item.el instanceof BI.Widget) {\n firstElement(item.el.element, row, col);\n } else if (item.el) {\n firstObject(item.el, row, col);\n } else {\n firstObject(item, row, col);\n }\n }\n\n var tr = BI.createWidget({\n type: \"bi.default\",\n tagName: \"tr\"\n });\n\n for (var i = 0; i < arr.length; i++) {\n var w = BI.createWidget(arr[i]);\n w.element.css({position: \"relative\", top: \"0\", left: \"0\", margin: \"0px auto\"});\n if (arr[i].lgap) {\n w.element.css({\"margin-left\": arr[i].lgap + \"px\"});\n }\n if (arr[i].rgap) {\n w.element.css({\"margin-right\": arr[i].rgap + \"px\"});\n }\n if (arr[i].tgap) {\n w.element.css({\"margin-top\": arr[i].tgap + \"px\"});\n }\n if (arr[i].bgap) {\n w.element.css({\"margin-bottom\": arr[i].bgap + \"px\"});\n }\n first(w, this.rows++, i);\n var td = BI.createWidget({\n type: \"bi.default\",\n attributes: {\n width: o.columnSize[i] <= 1 ? (o.columnSize[i] * 100 + \"%\") : o.columnSize[i]\n },\n tagName: \"td\",\n items: [w]\n });\n td.element.css({\n position: \"relative\",\n \"vertical-align\": \"middle\",\n margin: \"0\",\n padding: \"0\",\n border: \"none\"\n });\n tr.addItem(td);\n }\n this.addWidget(this.getName() + idx, tr);\n return tr;\n },\n\n appendFragment: function (frag) {\n this.$table.append(frag);\n this.element.append(this.$table);\n },\n\n resize: function () {\n // console.log(\"td布局不需要resize\");\n },\n\n addItem: function (arr) {\n if (!BI.isArray(arr)) {\n throw new Error(\"item must be array\");\n }\n return BI.TdLayout.superclass.addItem.apply(this, arguments);\n },\n\n update: function () {\n },\n\n populate: function (items) {\n BI.TdLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.td\", BI.TdLayout);","/**\n * 垂直布局\n * @class BI.VerticalLayout\n * @extends BI.Layout\n */\nBI.VerticalLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.VerticalLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-vertical-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n scrolly: true\n });\n },\n render: function () {\n BI.VerticalLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n _addElement: function (i, item) {\n var o = this.options;\n var w = BI.VerticalLayout.superclass._addElement.apply(this, arguments);\n w.element.css({\n position: \"relative\"\n });\n if (o.vgap + o.tgap + (item.tgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-top\": (i === 0 ? o.vgap : 0) + o.tgap + (item.tgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n if (o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-left\": o.hgap + o.lgap + (item.lgap || 0) + (item.hgap || 0) +\"px\"\n });\n }\n if (o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) !== 0) {\n w.element.css({\n \"margin-right\": o.hgap + o.rgap + (item.rgap || 0) + (item.hgap || 0) + \"px\"\n });\n }\n if (o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) !== 0) {\n w.element.css({\n \"margin-bottom\": o.vgap + o.bgap + (item.bgap || 0) + (item.vgap || 0) + \"px\"\n });\n }\n return w;\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n populate: function (items) {\n BI.VerticalLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.vertical\", BI.VerticalLayout);","/**\n *\n * @class BI.WindowLayout\n * @extends BI.Layout\n */\nBI.WindowLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.WindowLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-window-layout\",\n columns: 3,\n rows: 2,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n columnSize: [100, \"fill\", 200],\n rowSize: [100, \"fill\"],\n items: [[\n {\n el: {type: \"bi.button\", text: \"button1\"}\n },\n {\n el: {type: \"bi.button\", text: \"button2\"}\n },\n {\n el: {type: \"bi.button\", text: \"button3\"}\n }\n ]]\n });\n },\n render: function () {\n BI.WindowLayout.superclass.render.apply(this, arguments);\n this.populate(this.options.items);\n },\n\n resize: function () {\n this.stroke(this.options.items);\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n stroke: function (items) {\n var o = this.options;\n if (BI.isNumber(o.rowSize)) {\n o.rowSize = BI.makeArray(o.items.length, 1 / o.items.length);\n }\n if (BI.isNumber(o.columnSize)) {\n o.columnSize = BI.makeArray(o.items[0].length, 1 / o.items[0].length);\n }\n function firstElement (item, row, col) {\n if (row === 0) {\n item.addClass(\"first-row\");\n }\n if (col === 0) {\n item.addClass(\"first-col\");\n }\n item.addClass(BI.isOdd(row + 1) ? \"odd-row\" : \"even-row\");\n item.addClass(BI.isOdd(col + 1) ? \"odd-col\" : \"even-col\");\n item.addClass(\"center-element\");\n }\n\n function firstObject (item, row, col) {\n var cls = \"\";\n if (row === 0) {\n cls += \" first-row\";\n }\n if (col === 0) {\n cls += \" first-col\";\n }\n BI.isOdd(row + 1) ? (cls += \" odd-row\") : (cls += \" even-row\");\n BI.isOdd(col + 1) ? (cls += \" odd-col\") : (cls += \" even-col\");\n item.cls = (item.cls || \"\") + cls + \" center-element\";\n }\n\n function first (item, row, col) {\n if (item instanceof BI.Widget) {\n firstElement(item.element, row, col);\n } else if (item.el instanceof BI.Widget) {\n firstElement(item.el.element, row, col);\n } else if (item.el) {\n firstObject(item.el, row, col);\n } else {\n firstObject(item, row, col);\n }\n }\n\n for (var i = 0; i < o.rows; i++) {\n for (var j = 0; j < o.columns; j++) {\n if (!o.items[i][j]) {\n throw new Error(\"item be required\");\n }\n if (!this.hasWidget(this.getName() + i + \"_\" + j)) {\n var w = BI.createWidget(o.items[i][j]);\n w.element.css({position: \"absolute\"});\n this.addWidget(this.getName() + i + \"_\" + j, w);\n }\n }\n }\n var left = {}, right = {}, top = {}, bottom = {};\n left[0] = 0;\n top[0] = 0;\n right[o.columns - 1] = 0;\n bottom[o.rows - 1] = 0;\n // 从上到下\n for (var i = 0; i < o.rows; i++) {\n for (var j = 0; j < o.columns; j++) {\n var wi = this.getWidgetByName(this.getName() + i + \"_\" + j);\n if (BI.isNull(top[i])) {\n top[i] = top[i - 1] + (o.rowSize[i - 1] < 1 ? o.rowSize[i - 1] : o.rowSize[i - 1] + o.vgap + o.bgap);\n }\n var t = top[i] <= 1 ? top[i] * 100 + \"%\" : top[i] + o.vgap + o.tgap + \"px\", h = \"\";\n if (BI.isNumber(o.rowSize[i])) {\n h = o.rowSize[i] <= 1 ? o.rowSize[i] * 100 + \"%\" : o.rowSize[i] + \"px\";\n }\n wi.element.css({top: t, height: h});\n first(wi, i, j);\n }\n if (!BI.isNumber(o.rowSize[i])) {\n break;\n }\n }\n // 从下到上\n for (var i = o.rows - 1; i >= 0; i--) {\n for (var j = 0; j < o.columns; j++) {\n var wi = this.getWidgetByName(this.getName() + i + \"_\" + j);\n if (BI.isNull(bottom[i])) {\n bottom[i] = bottom[i + 1] + (o.rowSize[i + 1] < 1 ? o.rowSize[i + 1] : o.rowSize[i + 1] + o.vgap + o.tgap);\n }\n var b = bottom[i] <= 1 ? bottom[i] * 100 + \"%\" : bottom[i] + o.vgap + o.bgap + \"px\", h = \"\";\n if (BI.isNumber(o.rowSize[i])) {\n h = o.rowSize[i] <= 1 ? o.rowSize[i] * 100 + \"%\" : o.rowSize[i] + \"px\";\n }\n wi.element.css({bottom: b, height: h});\n first(wi, i, j);\n }\n if (!BI.isNumber(o.rowSize[i])) {\n break;\n }\n }\n // 从左到右\n for (var j = 0; j < o.columns; j++) {\n for (var i = 0; i < o.rows; i++) {\n var wi = this.getWidgetByName(this.getName() + i + \"_\" + j);\n if (BI.isNull(left[j])) {\n left[j] = left[j - 1] + (o.columnSize[j - 1] < 1 ? o.columnSize[j - 1] : o.columnSize[j - 1] + o.hgap + o.rgap);\n }\n var l = left[j] <= 1 ? left[j] * 100 + \"%\" : left[j] + o.hgap + o.lgap + \"px\", w = \"\";\n if (BI.isNumber(o.columnSize[j])) {\n w = o.columnSize[j] <= 1 ? o.columnSize[j] * 100 + \"%\" : o.columnSize[j] + \"px\";\n }\n wi.element.css({left: l, width: w});\n first(wi, i, j);\n }\n if (!BI.isNumber(o.columnSize[j])) {\n break;\n }\n }\n // 从右到左\n for (var j = o.columns - 1; j >= 0; j--) {\n for (var i = 0; i < o.rows; i++) {\n var wi = this.getWidgetByName(this.getName() + i + \"_\" + j);\n if (BI.isNull(right[j])) {\n right[j] = right[j + 1] + (o.columnSize[j + 1] < 1 ? o.columnSize[j + 1] : o.columnSize[j + 1] + o.hgap + o.lgap);\n }\n var r = right[j] <= 1 ? right[j] * 100 + \"%\" : right[j] + o.hgap + o.rgap + \"px\", w = \"\";\n if (BI.isNumber(o.columnSize[j])) {\n w = o.columnSize[j] <= 1 ? o.columnSize[j] * 100 + \"%\" : o.columnSize[j] + \"px\";\n }\n wi.element.css({right: r, width: w});\n first(wi, i, j);\n }\n if (!BI.isNumber(o.columnSize[j])) {\n break;\n }\n }\n },\n\n update: function () {\n },\n\n populate: function (items) {\n BI.WindowLayout.superclass.populate.apply(this, arguments);\n this._mount();\n }\n});\nBI.shortcut(\"bi.window\", BI.WindowLayout);","/**\n * 水平和垂直方向都居中容器, 非自适应,用于宽度高度固定的面板\n * @class BI.CenterLayout\n * @extends BI.Layout\n */\nBI.CenterLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.CenterLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-center-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.CenterLayout.superclass.render.apply(this, arguments);\n var self = this, o = this.options;\n var list = [], items = o.items;\n BI.each(items, function (i) {\n list.push({\n column: i,\n row: 0,\n el: BI.createWidget({\n type: \"bi.default\",\n cls: \"center-element \" + (i === 0 ? \"first-element \" : \"\") + (i === items.length - 1 ? \"last-element\" : \"\")\n })\n });\n });\n BI.each(items, function (i, item) {\n if (item) {\n var w = BI.createWidget(item);\n w.element.css({\n position: \"absolute\",\n left: o.hgap + o.lgap,\n right: o.hgap + o.rgap,\n top: o.vgap + o.tgap,\n bottom: o.vgap + o.bgap,\n width: \"auto\",\n height: \"auto\"\n });\n list[i].el.addItem(w);\n }\n });\n return {\n type: \"bi.grid\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n columns: list.length,\n rows: 1,\n items: list\n };\n },\n\n resize: function () {\n // console.log(\"center布局不需要resize\");\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate.apply(this.wrapper, arguments);\n }\n});\nBI.shortcut(\"bi.center\", BI.CenterLayout);","/**\n * 浮动布局实现的居中容器\n * @class BI.FloatCenterLayout\n * @extends BI.Layout\n */\nBI.FloatCenterLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.FloatCenterLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-float-center-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.FloatCenterLayout.superclass.render.apply(this, arguments);\n var self = this, o = this.options, items = o.items;\n var list = [], width = 100 / items.length;\n BI.each(items, function (i) {\n var widget = BI.createWidget({\n type: \"bi.default\"\n });\n widget.element.addClass(\"center-element \" + (i === 0 ? \"first-element \" : \"\") + (i === items.length - 1 ? \"last-element\" : \"\")).css({\n width: width + \"%\",\n height: \"100%\"\n });\n list.push({\n el: widget\n });\n });\n BI.each(items, function (i, item) {\n if (item) {\n var w = BI.createWidget(item);\n w.element.css({\n position: \"absolute\",\n left: o.hgap + o.lgap,\n right: o.hgap + o.rgap,\n top: o.vgap + o.tgap,\n bottom: o.vgap + o.bgap,\n width: \"auto\",\n height: \"auto\"\n });\n list[i].el.addItem(w);\n }\n });\n return {\n type: \"bi.left\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n items: list\n };\n },\n\n resize: function () {\n // console.log(\"floatcenter布局不需要resize\");\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate.apply(this.wrapper, arguments);\n }\n});\nBI.shortcut(\"bi.float_center\", BI.FloatCenterLayout);","/**\n * 水平和垂直方向都居中容器, 非自适应,用于宽度高度固定的面板\n * @class BI.HorizontalCenterLayout\n * @extends BI.Layout\n */\nBI.HorizontalCenterLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.HorizontalCenterLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-horizontal-center-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n render: function () {\n BI.HorizontalCenterLayout.superclass.render.apply(this, arguments);\n var self = this, o = this.options, items = o.items;\n var list = [];\n BI.each(items, function (i) {\n list.push({\n column: i,\n row: 0,\n el: BI.createWidget({\n type: \"bi.default\",\n cls: \"center-element \" + (i === 0 ? \"first-element \" : \"\") + (i === items.length - 1 ? \"last-element\" : \"\")\n })\n });\n });\n BI.each(items, function (i, item) {\n if (item) {\n var w = BI.createWidget(item);\n w.element.css({\n position: \"absolute\",\n left: o.hgap + o.lgap,\n right: o.hgap + o.rgap,\n top: o.vgap + o.tgap,\n bottom: o.vgap + o.bgap,\n width: \"auto\"\n });\n list[i].el.addItem(w);\n }\n });\n return {\n type: \"bi.grid\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n columns: list.length,\n rows: 1,\n items: list\n };\n },\n\n resize: function () {\n // console.log(\"horizontal_center布局不需要resize\");\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate.apply(this.wrapper, arguments);\n }\n});\nBI.shortcut(\"bi.horizontal_center\", BI.HorizontalCenterLayout);","/**\n * 垂直方向都居中容器, 非自适应,用于高度不固定的面板\n * @class BI.VerticalCenterLayout\n * @extends BI.Layout\n */\nBI.VerticalCenterLayout = BI.inherit(BI.Layout, {\n props: function () {\n return BI.extend(BI.VerticalCenterLayout.superclass.props.apply(this, arguments), {\n baseCls: \"bi-vertical-center-layout\",\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0\n });\n },\n\n render: function () {\n BI.VerticalCenterLayout.superclass.render.apply(this, arguments);\n var self = this, o = this.options, items = o.items;\n var list = [];\n BI.each(items, function (i) {\n list.push({\n column: 0,\n row: i,\n el: BI.createWidget({\n type: \"bi.default\",\n cls: \"center-element \" + (i === 0 ? \"first-element \" : \"\") + (i === items.length - 1 ? \"last-element\" : \"\")\n })\n });\n });\n BI.each(items, function (i, item) {\n if (item) {\n var w = BI.createWidget(item);\n w.element.css({\n position: \"absolute\",\n left: o.hgap + o.lgap,\n right: o.hgap + o.rgap,\n top: o.vgap + o.tgap,\n bottom: o.vgap + o.bgap,\n height: \"auto\"\n });\n list[i].el.addItem(w);\n }\n });\n return {\n type: \"bi.grid\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n columns: 1,\n rows: list.length,\n items: list\n };\n },\n\n resize: function () {\n // console.log(\"vertical_center布局不需要resize\");\n },\n\n addItem: function (item) {\n // do nothing\n throw new Error(\"cannot be added\");\n },\n\n update: function (opt) {\n return this.wrapper.update(opt);\n },\n\n populate: function (items) {\n this.wrapper.populate.apply(this.wrapper, arguments);\n }\n});\nBI.shortcut(\"bi.vertical_center\", BI.VerticalCenterLayout);","/**\n * 当没有元素时有提示信息的view\n *\n * Created by GUY on 2015/9/8.\n * @class BI.Pane\n * @extends BI.Widget\n * @abstract\n */\nBI.Pane = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.Pane.superclass._defaultConfig.apply(this, arguments), {\n _baseCls: \"bi-pane\",\n tipText: BI.i18nText(\"BI-No_Selected_Item\"),\n overlap: true,\n onLoaded: BI.emptyFn\n });\n },\n\n _assertTip: function () {\n var o = this.options;\n if (!this._tipText) {\n this._tipText = BI.createWidget({\n type: \"bi.label\",\n cls: \"bi-tips\",\n text: o.tipText,\n height: 25\n });\n BI.createWidget({\n type: \"bi.absolute_center_adapt\",\n element: this,\n items: [this._tipText]\n });\n }\n },\n\n loading: function () {\n var self = this, o = this.options;\n var isIE = BI.isIE();\n var loadingAnimation = BI.createWidget({\n type: \"bi.horizontal\",\n cls: \"bi-loading-widget\" + (isIE ? \" wave-loading hack\" : \"\"),\n height: 30,\n width: 30,\n hgap: 5,\n vgap: 2.5,\n items: isIE ? [] : [{\n type: \"bi.layout\",\n cls: \"animate-rect rect1\",\n height: 25,\n width: 3\n }, {\n type: \"bi.layout\",\n cls: \"animate-rect rect2\",\n height: 25,\n width: 3\n }, {\n type: \"bi.layout\",\n cls: \"animate-rect rect3\",\n height: 25,\n width: 3\n }]\n });\n // pane在同步方式下由items决定tipText的显示与否\n // loading的异步情况下由loaded后对面板的populate的时机决定\n this.setTipVisible(false);\n if (o.overlap === true) {\n if (!BI.Layers.has(this.getName())) {\n BI.createWidget({\n type: \"bi.absolute_center_adapt\",\n cls: \"loading-container\",\n items: [{\n el: loadingAnimation\n }],\n element: BI.Layers.make(this.getName(), this)\n });\n }\n BI.Layers.show(self.getName());\n } else if (BI.isNull(this._loading)) {\n this._loading = loadingAnimation;\n this._loading.element.css(\"zIndex\", 1);\n BI.createWidget({\n type: \"bi.absolute_center_adapt\",\n element: this,\n cls: \"loading-container\",\n items: [{\n el: this._loading,\n left: 0,\n right: 0,\n top: 0\n }]\n });\n }\n this.element.addClass(\"loading-status\");\n },\n\n loaded: function () {\n var self = this, o = this.options;\n BI.Layers.remove(self.getName());\n this._loading && this._loading.destroy();\n this._loading && (this._loading = null);\n o.onLoaded();\n self.fireEvent(BI.Pane.EVENT_LOADED);\n this.element.removeClass(\"loading-status\");\n },\n\n check: function () {\n this.setTipVisible(BI.isEmpty(this.options.items));\n },\n\n setTipVisible: function (b) {\n if (b === true) {\n this._assertTip();\n this._tipText.setVisible(true);\n } else {\n this._tipText && this._tipText.setVisible(false);\n }\n },\n\n populate: function (items) {\n this.options.items = items || [];\n this.check();\n },\n\n empty: function () {\n\n }\n});\nBI.Pane.EVENT_LOADED = \"EVENT_LOADED\";","/**\n * guy\n * 这仅仅只是一个超类, 所有简单控件的基类\n * 1、类的控制,\n * 2、title的控制\n * 3、文字超过边界显示3个点\n * 4、cursor默认pointor\n * @class BI.Single\n * @extends BI.Widget\n * @abstract\n */\nBI.Single = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.Single.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n _baseCls: (conf._baseCls || \"\") + \" bi-single\",\n readonly: false,\n title: null,\n warningTitle: null,\n tipType: null, // success或warning\n value: null,\n belowMouse: false // title是否跟随鼠标\n });\n },\n\n _showToolTip: function (e, opt) {\n opt || (opt = {});\n var self = this, o = this.options;\n var type = this.getTipType() || (this.isEnabled() ? \"success\" : \"warning\");\n var title = type === \"success\" ? this.getTitle() : (this.getWarningTitle() || this.getTitle());\n if (BI.isKey(title)) {\n BI.Tooltips.show(e, this.getName(), title, type, this, opt);\n if (o.action) {\n BI.Actions.runAction(o.action, \"hover\", o, this);\n }\n BI.Actions.runGlobalAction(\"hover\", o, this);\n }\n },\n\n _hideTooltip: function () {\n var self = this;\n var tooltip = BI.Tooltips.get(this.getName());\n if (BI.isNotNull(tooltip)) {\n tooltip.element.fadeOut(200, function () {\n BI.Tooltips.remove(self.getName());\n });\n }\n },\n\n _init: function () {\n BI.Single.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isKey(o.title) || BI.isKey(o.warningTitle)\n || BI.isFunction(o.title) || BI.isFunction(o.warningTitle)) {\n this.enableHover({\n belowMouse: o.belowMouse,\n container: o.container\n });\n }\n },\n\n _clearTimeOut: function () {\n if (BI.isNotNull(this.showTimeout)) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n if (BI.isNotNull(this.hideTimeout)) {\n clearTimeout(this.hideTimeout);\n this.hideTimeout = null;\n }\n },\n\n enableHover: function (opt) {\n opt || (opt = {});\n var self = this;\n if (!this._hoverBinded) {\n this.element.on(\"mouseenter.title\" + this.getName(), function (e) {\n self._e = e;\n if (self.getTipType() === \"warning\" || (BI.isKey(self.getWarningTitle()) && !self.isEnabled())) {\n self.showTimeout = BI.delay(function () {\n if (BI.isNotNull(self.showTimeout)) {\n self._showToolTip(self._e || e, opt);\n }\n }, 200);\n } else if (self.getTipType() === \"success\" || self.isEnabled()) {\n self.showTimeout = BI.delay(function () {\n if (BI.isNotNull(self.showTimeout)) {\n self._showToolTip(self._e || e, opt);\n }\n }, 500);\n }\n });\n this.element.on(\"mousemove.title\" + this.getName(), function (e) {\n self._e = e;\n if (BI.isNotNull(self.showTimeout)) {\n clearTimeout(self.showTimeout);\n self.showTimeout = null;\n }\n if(BI.isNull(self.hideTimeout)) {\n self.hideTimeout = BI.delay(function () {\n if (BI.isNotNull(self.hideTimeout)) {\n self._hideTooltip();\n }\n }, 500);\n }\n\n self.showTimeout = BI.delay(function () {\n // DEC-5321 IE下如果回调已经进入事件队列,clearTimeout将不会起作用\n if (BI.isNotNull(self.showTimeout)) {\n if (BI.isNotNull(self.hideTimeout)) {\n clearTimeout(self.hideTimeout);\n self.hideTimeout = null;\n }\n // CHART-10611 在拖拽的情况下, 鼠标拖拽着元素离开了拖拽元素的容器,但是子元素在dom结构上仍然属于容器\n // 这样会认为鼠标仍然在容器中, 500ms内放开的话,会在容器之外显示鼠标停留处显示容器的title\n if (self.element.__isMouseInBounds__(self._e || e)) {\n self._showToolTip(self._e || e, opt);\n }\n }\n }, 500);\n\n });\n this.element.on(\"mouseleave.title\" + this.getName(), function (e) {\n self._e = null;\n self._clearTimeOut();\n self._hideTooltip();\n });\n this._hoverBinded = true;\n }\n },\n\n disabledHover: function () {\n // 取消hover事件\n this._clearTimeOut();\n this._hideTooltip();\n this.element.unbind(\"mouseenter.title\" + this.getName())\n .unbind(\"mousemove.title\" + this.getName())\n .unbind(\"mouseleave.title\" + this.getName());\n this._hoverBinded = false;\n },\n\n populate: function (items) {\n this.items = items || [];\n },\n\n // opt: {container: '', belowMouse: false}\n setTitle: function (title, opt) {\n this.options.title = title;\n if (BI.isKey(title) || BI.isFunction(title)) {\n this.enableHover(opt);\n } else {\n this.disabledHover();\n }\n },\n\n setWarningTitle: function (title, opt) {\n this.options.warningTitle = title;\n if (BI.isKey(title) || BI.isFunction(title)) {\n this.enableHover(opt);\n } else {\n this.disabledHover();\n }\n },\n\n getTipType: function () {\n return this.options.tipType;\n },\n\n isReadOnly: function () {\n return !!this.options.readonly;\n },\n\n getTitle: function () {\n var title = this.options.title;\n if(BI.isFunction(title)) {\n return title();\n }\n return title;\n },\n\n getWarningTitle: function () {\n var title = this.options.warningTitle;\n if(BI.isFunction(title)) {\n return title();\n }\n return title;\n },\n\n setValue: function (val) {\n if (!this.options.readonly) {\n this.options.value = val;\n }\n },\n\n getValue: function () {\n return this.options.value;\n },\n\n _unMount: function () {\n BI.Single.superclass._unMount.apply(this, arguments);\n if(BI.isNotNull(this.showTimeout)) {\n clearTimeout(this.showTimeout);\n this.showTimeout = null;\n }\n BI.Tooltips.remove(this.getName());\n }\n});","/**\n * guy 表示一行数据,通过position来定位位置的数据\n * @class BI.Text\n * @extends BI.Single\n */\nBI.Text = BI.inherit(BI.Single, {\n\n props: {\n baseCls: \"bi-text\",\n textAlign: \"left\",\n whiteSpace: \"normal\",\n lineHeight: null,\n handler: null, // 如果传入handler,表示处理文字的点击事件,不是区域的\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n text: \"\",\n py: \"\",\n highLight: false\n },\n\n render: function () {\n var self = this, o = this.options;\n if (o.hgap + o.lgap > 0) {\n this.element.css({\n \"padding-left\": o.hgap + o.lgap + \"px\"\n });\n }\n if (o.hgap + o.rgap > 0) {\n this.element.css({\n \"padding-right\": o.hgap + o.rgap + \"px\"\n });\n }\n if (o.vgap + o.tgap > 0) {\n this.element.css({\n \"padding-top\": o.vgap + o.tgap + \"px\"\n });\n }\n if (o.vgap + o.bgap > 0) {\n this.element.css({\n \"padding-bottom\": o.vgap + o.bgap + \"px\"\n });\n }\n if (BI.isNumber(o.height)) {\n this.element.css({lineHeight: o.height + \"px\"});\n }\n if (BI.isNumber(o.lineHeight)) {\n this.element.css({lineHeight: o.lineHeight + \"px\"});\n }\n if (BI.isWidthOrHeight(o.maxWidth)) {\n this.element.css({maxWidth: o.maxWidth});\n }\n this.element.css({\n textAlign: o.textAlign,\n whiteSpace: this._getTextWrap(),\n textOverflow: o.whiteSpace === \"nowrap\" ? \"ellipsis\" : \"\",\n overflow: o.whiteSpace === \"nowrap\" ? \"\" : (BI.isWidthOrHeight(o.height) ? \"auto\" : \"\")\n });\n if (o.handler) {\n this.text = BI.createWidget({\n type: \"bi.layout\",\n tagName: \"span\"\n });\n this.text.element.click(function () {\n o.handler(self.getValue());\n });\n BI.createWidget({\n type: \"bi.default\",\n element: this,\n items: [this.text]\n });\n } else {\n this.text = this;\n }\n\n var text = this._getShowText();\n if (BI.isKey(text)) {\n this.setText(text);\n } else if (BI.isKey(o.value)) {\n this.setText(o.value);\n }\n if (BI.isKey(o.keyword)) {\n this.doRedMark(o.keyword);\n }\n if (o.highLight) {\n this.doHighLight();\n }\n },\n\n _getTextWrap: function () {\n var o = this.options;\n switch (o.whiteSpace) {\n case \"nowrap\":\n return \"pre\";\n case \"normal\":\n default:\n return \"pre-wrap\";\n }\n },\n\n _getShowText: function () {\n var o = this.options;\n return BI.isFunction(o.text) ? o.text() : o.text;\n },\n\n\n doRedMark: function (keyword) {\n var o = this.options;\n // render之后做的doredmark,这个时候虽然标红了,但是之后text mounted执行的时候并没有keyword\n o.keyword = keyword;\n this.text.element.__textKeywordMarked__(this._getShowText() || o.value, keyword, o.py);\n },\n\n unRedMark: function () {\n var o = this.options;\n o.keyword = \"\";\n this.text.element.__textKeywordMarked__(this._getShowText() || o.value, \"\", o.py);\n },\n\n doHighLight: function () {\n this.text.element.addClass(\"bi-high-light\");\n },\n\n unHighLight: function () {\n this.text.element.removeClass(\"bi-high-light\");\n },\n\n setValue: function (text) {\n BI.Text.superclass.setValue.apply(this, arguments);\n if (!this.isReadOnly()) {\n this.setText(text);\n }\n },\n\n setStyle: function (css) {\n this.text.element.css(css);\n },\n\n setText: function (text) {\n BI.Text.superclass.setText.apply(this, arguments);\n // 为textContext赋值为undefined时在ie和edge下会真的显示undefined\n this.options.text = BI.isNotNull(text) ? text : \"\";\n if (BI.isIE9Below()) {\n this.text.element.html(BI.htmlEncode(this._getShowText()));\n return;\n }\n // textContent性能更好,并且原生防xss\n this.text.element[0].textContent = this._getShowText();\n BI.isKey(this.options.keyword) && this.doRedMark(this.options.keyword);\n }\n});\n\nBI.shortcut(\"bi.text\", BI.Text);\n","/**\n * guy\n * @class BI.BasicButton\n * @extends BI.Single\n *\n * 一般的button父级\n */\nBI.BasicButton = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.BasicButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n _baseCls: (conf._baseCls || \"\") + \" bi-basic-button\" + (conf.invalid ? \"\" : \" cursor-pointer\") + ((BI.isIE() && BI.getIEVersion() < 10) ? \" hack\" : \"\"),\n value: \"\",\n text: \"\",\n stopEvent: false,\n stopPropagation: false,\n selected: false,\n once: false, // 点击一次选中有效,再点无效\n forceSelected: false, // 点击即选中, 选中了就不会被取消,与once的区别是forceSelected不影响事件的触发\n forceNotSelected: false, // 无论怎么点击都不会被选中\n disableSelected: false, // 使能选中\n\n shadow: false,\n isShadowShowingOnSelected: false, // 选中状态下是否显示阴影\n trigger: null,\n handler: BI.emptyFn,\n bubble: null\n });\n },\n _init: function () {\n BI.BasicButton.superclass._init.apply(this, arguments);\n var opts = this.options;\n if (opts.selected === true) {\n BI.nextTick(BI.bind(function () {\n this.setSelected(opts.selected);\n }, this));\n }\n BI.nextTick(BI.bind(this.bindEvent, this));\n\n if (opts.shadow) {\n this._createShadow();\n }\n if (opts.level) {\n this.element.addClass(\"button-\" + opts.level);\n }\n },\n\n _createShadow: function () {\n var self = this, o = this.options;\n\n var assertMask = function () {\n if (!self.$mask) {\n self.$mask = BI.createWidget(BI.isObject(o.shadow) ? o.shadow : {}, {\n type: \"bi.layout\",\n cls: \"bi-button-mask\"\n });\n self.$mask.invisible();\n BI.createWidget({\n type: \"bi.absolute\",\n element: self,\n items: [{\n el: self.$mask,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n }\n };\n\n this.element.mouseup(function () {\n if (!self._hover && !o.isShadowShowingOnSelected) {\n assertMask();\n self.$mask.invisible();\n }\n });\n this.element.on(\"mouseenter.\" + this.getName(), function (e) {\n if (self.element.__isMouseInBounds__(e)) {\n if (self.isEnabled() && !self._hover && (o.isShadowShowingOnSelected || !self.isSelected())) {\n assertMask();\n self.$mask.visible();\n }\n }\n });\n this.element.on(\"mousemove.\" + this.getName(), function (e) {\n if (!self.element.__isMouseInBounds__(e)) {\n if (self.isEnabled() && !self._hover) {\n assertMask();\n self.$mask.invisible();\n }\n }\n });\n this.element.on(\"mouseleave.\" + this.getName(), function () {\n if (self.isEnabled() && !self._hover) {\n assertMask();\n self.$mask.invisible();\n }\n });\n },\n\n bindEvent: function () {\n var self = this;\n var o = this.options, hand = this.handle();\n if (!hand) {\n return;\n }\n hand = hand.element;\n var triggerArr = (o.trigger || \"\").split(\",\");\n BI.each(triggerArr, function (idx, trigger) {\n switch (trigger) {\n case \"mouseup\":\n var mouseDown = false;\n hand.mousedown(function () {\n mouseDown = true;\n });\n hand.mouseup(function (e) {\n if (mouseDown === true) {\n clk(e);\n }\n mouseDown = false;\n ev(e);\n });\n break;\n case \"mousedown\":\n var mouseDown = false;\n var selected = false;\n hand.mousedown(function (e) {\n // if (e.button === 0) {\n BI.Widget._renderEngine.createElement(document).bind(\"mouseup.\" + self.getName(), function (e) {\n // if (e.button === 0) {\n if (BI.DOM.isExist(self) && !hand.__isMouseInBounds__(e) && mouseDown === true && !selected) {\n // self.setSelected(!self.isSelected());\n self._trigger();\n }\n mouseDown = false;\n BI.Widget._renderEngine.createElement(document).unbind(\"mouseup.\" + self.getName());\n // }\n });\n if (mouseDown === true) {\n return;\n }\n if (self.isSelected()) {\n selected = true;\n } else {\n clk(e);\n }\n mouseDown = true;\n ev(e);\n // }\n });\n hand.mouseup(function (e) {\n // if (e.button === 0) {\n if (BI.DOM.isExist(self) && mouseDown === true && selected === true) {\n clk(e);\n }\n mouseDown = false;\n selected = false;\n BI.Widget._renderEngine.createElement(document).unbind(\"mouseup.\" + self.getName());\n // }\n });\n break;\n case \"dblclick\":\n hand.dblclick(clk);\n break;\n case \"lclick\":\n var mouseDown = false;\n var interval;\n hand.mousedown(function (e) {\n BI.Widget._renderEngine.createElement(document).bind(\"mouseup.\" + self.getName(), function (e) {\n interval && clearInterval(interval);\n interval = null;\n mouseDown = false;\n BI.Widget._renderEngine.createElement(document).unbind(\"mouseup.\" + self.getName());\n });\n if (mouseDown === true) {\n return;\n }\n if (!self.isEnabled() || (self.isOnce() && self.isSelected())) {\n return;\n }\n interval = setInterval(function () {\n if (self.isEnabled()) {\n self.doClick();\n }\n }, 180);\n mouseDown = true;\n ev(e);\n });\n break;\n default:\n if (o.stopEvent || o.stopPropagation) {\n hand.mousedown(function (e) {\n ev(e);\n });\n }\n hand.click(clk);\n break;\n }\n });\n\n // 之后的300ms点击无效\n var onClick = BI.debounce(this._doClick, BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n });\n\n function ev (e) {\n if (o.stopEvent) {\n e.stopEvent();\n }\n if (o.stopPropagation) {\n e.stopPropagation();\n }\n }\n\n function clk (e) {\n ev(e);\n if (!self.isEnabled() || (self.isOnce() && self.isSelected())) {\n return;\n }\n if (BI.isKey(o.bubble) || BI.isFunction(o.bubble)) {\n if (BI.isNull(self.combo)) {\n var popup;\n BI.createWidget({\n type: \"bi.absolute\",\n element: self,\n items: [{\n el: {\n type: \"bi.bubble_combo\",\n trigger: \"\",\n // bubble的提示不需要一直存在在界面上\n destroyWhenHide: true,\n ref: function () {\n self.combo = this;\n },\n el: {\n type: \"bi.layout\",\n height: \"100%\"\n },\n popup: {\n type: \"bi.text_bubble_bar_popup_view\",\n text: getBubble(),\n ref: function () {\n popup = this;\n },\n listeners: [{\n eventName: BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON,\n action: function (v) {\n self.combo.hideView();\n if (v) {\n onClick.apply(self, arguments);\n }\n }\n }]\n },\n listeners: [{\n eventName: BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n popup.populate(getBubble());\n }\n }]\n },\n left: 0,\n right: 0,\n bottom: 0,\n top: 0\n }]\n });\n }\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n return;\n }\n onClick.apply(self, arguments);\n }\n\n function getBubble () {\n var bubble = self.options.bubble;\n if (BI.isFunction(bubble)) {\n return bubble();\n }\n return bubble;\n }\n },\n\n _trigger: function (e) {\n var o = this.options;\n if (!this.isEnabled()) {\n return;\n }\n if (!this.isDisableSelected()) {\n this.isForceSelected() ? this.setSelected(true) :\n (this.isForceNotSelected() ? this.setSelected(false) :\n this.setSelected(!this.isSelected()));\n }\n if (this.isValid()) {\n o.handler.call(this, this.getValue(), this, e);\n var v = this.getValue();\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, v, this, e);\n this.fireEvent(BI.BasicButton.EVENT_CHANGE, v, this);\n if (o.action) {\n BI.Actions.runAction(o.action, \"click\", o, this);\n }\n BI.Actions.runGlobalAction(\"click\", o, this);\n }\n },\n\n _doClick: function (e) {\n if (this.isValid()) {\n this.beforeClick(e);\n }\n this._trigger(e);\n if (this.isValid()) {\n this.doClick(e);\n }\n },\n\n beforeClick: function () {\n\n },\n\n doClick: function () {\n\n },\n\n handle: function () {\n return this;\n },\n\n hover: function () {\n this._hover = true;\n this.handle().element.addClass(\"hover\");\n if (this.options.shadow) {\n this.$mask && this.$mask.setVisible(true);\n }\n },\n\n dishover: function () {\n this._hover = false;\n this.handle().element.removeClass(\"hover\");\n if (this.options.shadow) {\n this.$mask && this.$mask.setVisible(false);\n }\n },\n\n setSelected: function (b) {\n var o = this.options;\n o.selected = b;\n if (b) {\n this.handle().element.addClass(\"active\");\n } else {\n this.handle().element.removeClass(\"active\");\n }\n if (o.shadow && !o.isShadowShowingOnSelected) {\n this.$mask && this.$mask.setVisible(false);\n }\n },\n\n isSelected: function () {\n return this.options.selected;\n },\n\n isOnce: function () {\n return this.options.once;\n },\n\n isForceSelected: function () {\n return this.options.forceSelected;\n },\n\n isForceNotSelected: function () {\n return this.options.forceNotSelected;\n },\n\n isDisableSelected: function () {\n return this.options.disableSelected;\n },\n\n setText: function (text) {\n this.options.text = text;\n },\n\n getText: function () {\n return this.options.text;\n },\n\n _setEnable: function (enable) {\n BI.BasicButton.superclass._setEnable.apply(this, arguments);\n if (enable === true) {\n this.element.removeClass(\"base-disabled disabled\");\n } else if (enable === false) {\n this.element.addClass(\"base-disabled disabled\");\n }\n if (!enable) {\n if (this.options.shadow) {\n this.$mask && this.$mask.setVisible(false);\n }\n }\n },\n\n empty: function () {\n BI.Widget._renderEngine.createElement(document).unbind(\"mouseup.\" + this.getName());\n BI.BasicButton.superclass.empty.apply(this, arguments);\n },\n\n destroy: function () {\n BI.BasicButton.superclass.destroy.apply(this, arguments);\n }\n});\nBI.BasicButton.EVENT_CHANGE = \"BasicButton.EVENT_CHANGE\";","/**\n * 表示一个可以展开的节点, 不仅有选中状态而且有展开状态\n *\n * Created by GUY on 2015/9/9.\n * @class BI.NodeButton\n * @extends BI.BasicButton\n * @abstract\n */\nBI.NodeButton = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n var conf = BI.NodeButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend( conf, {\n _baseCls: (conf._baseCls || \"\") + \" bi-node\",\n open: false\n });\n },\n\n _init: function () {\n BI.NodeButton.superclass._init.apply(this, arguments);\n var self = this;\n BI.nextTick(function () {\n self.setOpened(self.isOpened());\n });\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n this.setOpened(!this.isOpened());\n },\n\n isOnce: function () {\n return false;\n },\n\n isOpened: function () {\n return !!this.options.open;\n },\n\n setOpened: function (b) {\n this.options.open = !!b;\n },\n\n triggerCollapse: function () {\n if(this.isOpened()) {\n this.setOpened(false);\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.COLLAPSE, this.getValue(), this);\n }\n },\n\n triggerExpand: function () {\n if(!this.isOpened()) {\n this.setOpened(true);\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, this.getValue(), this);\n }\n }\n});","/**\n * guy\n * tip提示\n * zIndex在10亿级别\n * @class BI.Tip\n * @extends BI.Single\n * @abstract\n */\nBI.Tip = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.Tip.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n _baseCls: (conf._baseCls || \"\") + \" bi-tip\",\n zIndex: BI.zIndex_tip\n });\n },\n\n _init: function () {\n BI.Tip.superclass._init.apply(this, arguments);\n this.element.css({zIndex: this.options.zIndex});\n }\n});","/**\n * Created by GUY on 2015/6/26.\n * @class BI.ButtonGroup\n * @extends BI.Widget\n */\n\nBI.ButtonGroup = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.ButtonGroup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-button-group\",\n behaviors: {},\n items: [],\n value: \"\",\n chooseType: BI.Selection.Single,\n layouts: [{\n type: \"bi.center\",\n hgap: 0,\n vgap: 0\n }]\n });\n },\n\n _init: function () {\n BI.ButtonGroup.superclass._init.apply(this, arguments);\n var o = this.options;\n var behaviors = {};\n BI.each(o.behaviors, function (key, rule) {\n behaviors[key] = BI.BehaviorFactory.createBehavior(key, {\n rule: rule\n });\n });\n this.behaviors = behaviors;\n this.populate(o.items);\n if(BI.isKey(o.value) || BI.isNotEmptyArray(o.value)){\n this.setValue(o.value);\n }\n },\n\n _createBtns: function (items) {\n var o = this.options;\n return BI.createWidgets(BI.createItems(items, {\n type: \"bi.text_button\"\n }));\n },\n\n _btnsCreator: function (items) {\n var self = this, args = Array.prototype.slice.call(arguments), o = this.options;\n var buttons = this._createBtns(items);\n args[0] = buttons;\n\n BI.each(this.behaviors, function (i, behavior) {\n behavior.doBehavior.apply(behavior, args);\n });\n BI.each(buttons, function (i, btn) {\n btn.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (type === BI.Events.CLICK) {\n switch (o.chooseType) {\n case BI.ButtonGroup.CHOOSE_TYPE_SINGLE:\n self.setValue(btn.getValue());\n break;\n case BI.ButtonGroup.CHOOSE_TYPE_NONE:\n self.setValue([]);\n break;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.fireEvent(BI.ButtonGroup.EVENT_CHANGE, value, obj);\n } else {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n });\n btn.on(BI.Events.DESTROY, function () {\n BI.remove(self.buttons, btn);\n });\n });\n\n return buttons;\n },\n\n _packageBtns: function (btns) {\n var o = this.options;\n for (var i = o.layouts.length - 1; i > 0; i--) {\n btns = BI.map(btns, function (k, it) {\n return BI.extend({}, o.layouts[i], {\n items: [\n BI.extend({}, o.layouts[i].el, {\n el: it\n })\n ]\n });\n });\n }\n return btns;\n },\n\n _packageSimpleItems: function (btns) {\n var o = this.options;\n return BI.map(o.items, function (i, item) {\n if (BI.stripEL(item) === item) {\n return btns[i];\n }\n return BI.extend({}, item, {\n el: btns[i]\n });\n });\n },\n\n _packageItems: function (items, packBtns) {\n return BI.createItems(BI.makeArrayByArray(items, {}), BI.clone(packBtns));\n },\n\n _packageLayout: function (items) {\n var o = this.options, layout = BI.deepClone(o.layouts[0]);\n\n var lay = BI.formatEL(layout).el;\n while (lay && lay.items && !BI.isEmpty(lay.items)) {\n lay = BI.formatEL(lay.items[0]).el;\n }\n lay.items = items;\n return layout;\n },\n\n // 如果是一个简单的layout\n _isSimpleLayout: function () {\n var o = this.options;\n return o.layouts.length === 1 && !BI.isArray(o.items[0]);\n },\n\n doBehavior: function () {\n var args = Array.prototype.slice.call(arguments);\n args.unshift(this.buttons);\n BI.each(this.behaviors, function (i, behavior) {\n behavior.doBehavior.apply(behavior, args);\n });\n },\n\n prependItems: function (items) {\n var o = this.options;\n var btns = this._btnsCreator.apply(this, arguments);\n this.buttons = BI.concat(btns, this.buttons);\n\n if (this._isSimpleLayout() && this.layouts && this.layouts.prependItems) {\n this.layouts.prependItems(btns);\n return;\n }\n\n items = this._packageItems(items, this._packageBtns(btns));\n this.layouts.prependItems(this._packageLayout(items).items);\n },\n\n addItems: function (items) {\n var o = this.options;\n var btns = this._btnsCreator.apply(this, arguments);\n this.buttons = BI.concat(this.buttons, btns);\n\n // 如果是一个简单的layout\n if (this._isSimpleLayout() && this.layouts && this.layouts.addItems) {\n this.layouts.addItems(btns);\n return;\n }\n\n items = this._packageItems(items, this._packageBtns(btns));\n this.layouts.addItems(this._packageLayout(items).items);\n },\n\n removeItemAt: function (indexes) {\n BI.removeAt(this.buttons, indexes);\n this.layouts.removeItemAt(indexes);\n },\n\n removeItems: function (values) {\n values = BI.isArray(values) ? values : [values];\n var deleted = [];\n BI.each(this.buttons, function (i, button) {\n if (BI.deepContains(values, button.getValue())) {\n deleted.push(i);\n }\n });\n BI.removeAt(this.buttons, deleted);\n this.layouts.removeItemAt(deleted);\n },\n\n populate: function (items) {\n items = items || [];\n this.empty();\n this.options.items = items;\n\n this.buttons = this._btnsCreator.apply(this, arguments);\n if (this._isSimpleLayout()) {\n items = this._packageSimpleItems(this.buttons);\n } else {\n items = this._packageItems(items, this._packageBtns(this.buttons));\n }\n\n this.layouts = BI.createWidget(BI.extend({element: this}, this._packageLayout(items)));\n },\n\n setNotSelectedValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n BI.each(this.buttons, function (i, item) {\n if (BI.deepContains(v, item.getValue())) {\n item.setSelected && item.setSelected(false);\n } else {\n item.setSelected && item.setSelected(true);\n }\n });\n },\n\n setEnabledValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n BI.each(this.buttons, function (i, item) {\n if (BI.deepContains(v, item.getValue())) {\n item.setEnable(true);\n } else {\n item.setEnable(false);\n }\n });\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n BI.each(this.buttons, function (i, item) {\n if (BI.deepContains(v, item.getValue())) {\n item.setSelected && item.setSelected(true);\n } else {\n item.setSelected && item.setSelected(false);\n }\n });\n },\n\n getNotSelectedValue: function () {\n var v = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isEnabled() && !(item.isSelected && item.isSelected())) {\n v.push(item.getValue());\n }\n });\n return v;\n },\n\n getValue: function () {\n var v = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isEnabled() && item.isSelected && item.isSelected()) {\n v.push(item.getValue());\n }\n });\n return v;\n },\n\n getAllButtons: function () {\n return this.buttons;\n },\n\n getAllLeaves: function () {\n return this.buttons;\n },\n\n getSelectedButtons: function () {\n var btns = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isSelected && item.isSelected()) {\n btns.push(item);\n }\n });\n return btns;\n },\n\n getNotSelectedButtons: function () {\n var btns = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isSelected && !item.isSelected()) {\n btns.push(item);\n }\n });\n return btns;\n },\n\n getIndexByValue: function (value) {\n var index = -1;\n BI.any(this.buttons, function (i, item) {\n if (item.isEnabled() && item.getValue() === value) {\n index = i;\n return true;\n }\n });\n return index;\n },\n\n getNodeById: function (id) {\n var node;\n BI.any(this.buttons, function (i, item) {\n if (item.isEnabled() && item.options.id === id) {\n node = item;\n return true;\n }\n });\n return node;\n },\n\n getNodeByValue: function (value) {\n var node;\n BI.any(this.buttons, function (i, item) {\n if (item.isEnabled() && item.getValue() === value) {\n node = item;\n return true;\n }\n });\n return node;\n },\n\n empty: function () {\n BI.ButtonGroup.superclass.empty.apply(this, arguments);\n this.options.items = [];\n },\n\n destroy: function () {\n BI.ButtonGroup.superclass.destroy.apply(this, arguments);\n this.options.items = [];\n }\n});\nBI.extend(BI.ButtonGroup, {\n CHOOSE_TYPE_SINGLE: BI.Selection.Single,\n CHOOSE_TYPE_MULTI: BI.Selection.Multi,\n CHOOSE_TYPE_ALL: BI.Selection.All,\n CHOOSE_TYPE_NONE: BI.Selection.None,\n CHOOSE_TYPE_DEFAULT: BI.Selection.Default\n});\nBI.ButtonGroup.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.button_group\", BI.ButtonGroup);","/**\n * Created by GUY on 2015/8/10.\n * @class BI.ButtonTree\n * @extends BI.ButtonGroup\n */\n\nBI.ButtonTree = BI.inherit(BI.ButtonGroup, {\n _defaultConfig: function () {\n return BI.extend(BI.ButtonTree.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-button-tree\"\n });\n },\n\n _init: function () {\n BI.ButtonTree.superclass._init.apply(this, arguments);\n },\n\n setNotSelectedValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n BI.each(this.buttons, function (i, item) {\n if (!BI.isFunction(item.setSelected)) {\n item.setNotSelectedValue(v);\n return;\n }\n if (BI.deepContains(v, item.getValue())) {\n item.setSelected(false);\n } else {\n item.setSelected(true);\n }\n });\n },\n\n setEnabledValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n BI.each(this.buttons, function (i, item) {\n if (BI.isFunction(item.setEnabledValue)) {\n item.setEnabledValue(v);\n return;\n }\n if (BI.deepContains(v, item.getValue())) {\n item.setEnable(true);\n } else {\n item.setEnable(false);\n }\n });\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n BI.each(this.buttons, function (i, item) {\n if (!BI.isFunction(item.setSelected)) {\n item.setValue(v);\n return;\n }\n if (BI.deepContains(v, item.getValue())) {\n item.setSelected(true);\n } else {\n item.setSelected(false);\n }\n });\n },\n\n getNotSelectedValue: function () {\n var v = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isEnabled() && !BI.isFunction(item.setSelected)) {\n v = BI.concat(v, item.getNotSelectedValue());\n return;\n }\n if (item.isEnabled() && item.isSelected && !item.isSelected()) {\n v.push(item.getValue());\n }\n });\n return v;\n },\n\n getValue: function () {\n var v = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isEnabled() && !BI.isFunction(item.setSelected)) {\n v = BI.concat(v, item.getValue());\n return;\n }\n if (item.isEnabled() && item.isSelected && item.isSelected()) {\n v.push(item.getValue());\n }\n });\n return v;\n },\n\n getSelectedButtons: function () {\n var btns = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isEnabled() && !BI.isFunction(item.setSelected)) {\n btns = btns.concat(item.getSelectedButtons());\n return;\n }\n if (item.isSelected && item.isSelected()) {\n btns.push(item);\n }\n });\n return btns;\n },\n\n getNotSelectedButtons: function () {\n var btns = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isEnabled() && !BI.isFunction(item.setSelected)) {\n btns = btns.concat(item.getNotSelectedButtons());\n return;\n }\n if (item.isSelected && !item.isSelected()) {\n btns.push(item);\n }\n });\n return btns;\n },\n\n // 获取所有的叶子节点\n getAllLeaves: function () {\n var leaves = [];\n BI.each(this.buttons, function (i, item) {\n if (item.isEnabled() && !BI.isFunction(item.setSelected)) {\n leaves = leaves.concat(item.getAllLeaves());\n return;\n }\n if (item.isEnabled()) {\n leaves.push(item);\n }\n });\n return leaves;\n },\n\n getIndexByValue: function (value) {\n var index = -1;\n BI.any(this.buttons, function (i, item) {\n var vs = item.getValue();\n if (item.isEnabled() && (vs === value || BI.contains(vs, value))) {\n index = i;\n return true;\n }\n });\n return index;\n },\n\n getNodeById: function (id) {\n var node;\n BI.any(this.buttons, function (i, item) {\n if (item.isEnabled()) {\n if (item.attr(\"id\") === id) {\n node = item;\n return true;\n } else if (BI.isFunction(item.getNodeById)) {\n if (node = item.getNodeById(id)) {\n return true;\n }\n }\n }\n });\n return node;\n },\n\n getNodeByValue: function (value) {\n var node;\n BI.any(this.buttons, function (i, item) {\n if (item.isEnabled()) {\n if (BI.isFunction(item.getNodeByValue)) {\n if (node = item.getNodeByValue(value)) {\n return true;\n }\n } else if (item.attr(\"value\") === value) {\n node = item;\n return true;\n }\n }\n });\n return node;\n }\n});\nBI.ButtonTree.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.button_tree\", BI.ButtonTree);","BI.prepares.push(function () {\n BI.Resizers = new BI.ResizeController();\n BI.Layers = new BI.LayerController();\n BI.Maskers = new BI.MaskersController();\n BI.Bubbles = new BI.BubblesController();\n BI.Tooltips = new BI.TooltipsController();\n BI.Popovers = new BI.PopoverController();\n BI.Broadcasts = new BI.BroadcastController();\n BI.StyleLoaders = new BI.StyleLoaderManager();\n});\n","/**\n * CollectionView\n *\n * Created by GUY on 2016/1/15.\n * @class BI.CollectionView\n * @extends BI.Widget\n */\nBI.CollectionView = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.CollectionView.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-collection\",\n // width: 400, //必设\n // height: 300, //必设\n overflowX: true,\n overflowY: true,\n cellSizeAndPositionGetter: BI.emptyFn,\n horizontalOverscanSize: 0,\n verticalOverscanSize: 0,\n scrollLeft: 0,\n scrollTop: 0,\n items: []\n });\n },\n\n _init: function () {\n BI.CollectionView.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.renderedCells = [];\n this.renderedKeys = [];\n this.renderRange = {};\n this._scrollLock = false;\n this._debounceRelease = BI.debounce(function () {\n self._scrollLock = false;\n }, 1000 / 60);\n this.container = BI.createWidget({\n type: \"bi.absolute\"\n });\n this.element.scroll(function () {\n if (self._scrollLock === true) {\n return;\n }\n o.scrollLeft = self.element.scrollLeft();\n o.scrollTop = self.element.scrollTop();\n self._calculateChildrenToRender();\n self.fireEvent(BI.CollectionView.EVENT_SCROLL, {\n scrollLeft: o.scrollLeft,\n scrollTop: o.scrollTop\n });\n });\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n scrollable: o.overflowX === true && o.overflowY === true,\n scrolly: o.overflowX === false && o.overflowY === true,\n scrollx: o.overflowX === true && o.overflowY === false,\n items: [this.container]\n });\n if (o.items.length > 0) {\n this._calculateSizeAndPositionData();\n this._populate();\n }\n },\n\n mounted: function () {\n var o = this.options;\n if (o.scrollLeft !== 0 || o.scrollTop !== 0) {\n this.element.scrollTop(o.scrollTop);\n this.element.scrollLeft(o.scrollLeft);\n }\n },\n\n _calculateSizeAndPositionData: function () {\n var o = this.options;\n var cellMetadata = [];\n var sectionManager = new BI.SectionManager();\n var height = 0;\n var width = 0;\n\n for (var index = 0, len = o.items.length; index < len; index++) {\n var cellMetadatum = o.cellSizeAndPositionGetter(index);\n\n if (cellMetadatum.height == null || isNaN(cellMetadatum.height) ||\n cellMetadatum.width == null || isNaN(cellMetadatum.width) ||\n cellMetadatum.x == null || isNaN(cellMetadatum.x) ||\n cellMetadatum.y == null || isNaN(cellMetadatum.y)) {\n throw Error();\n }\n\n height = Math.max(height, cellMetadatum.y + cellMetadatum.height);\n width = Math.max(width, cellMetadatum.x + cellMetadatum.width);\n\n cellMetadatum.index = index;\n cellMetadata[index] = cellMetadatum;\n sectionManager.registerCell(cellMetadatum, index);\n }\n\n this._cellMetadata = cellMetadata;\n this._sectionManager = sectionManager;\n this._height = height;\n this._width = width;\n },\n\n _cellRenderers: function (height, width, x, y) {\n this._lastRenderedCellIndices = this._sectionManager.getCellIndices(height, width, x, y);\n return this._cellGroupRenderer();\n },\n\n _cellGroupRenderer: function () {\n var self = this, o = this.options;\n var rendered = [];\n BI.each(this._lastRenderedCellIndices, function (i, index) {\n var cellMetadata = self._sectionManager.getCellMetadata(index);\n rendered.push(cellMetadata);\n });\n return rendered;\n },\n\n _calculateChildrenToRender: function () {\n var self = this, o = this.options;\n var scrollLeft = BI.clamp(o.scrollLeft, 0, this._getMaxScrollLeft());\n var scrollTop = BI.clamp(o.scrollTop, 0, this._getMaxScrollTop());\n var left = Math.max(0, scrollLeft - o.horizontalOverscanSize);\n var top = Math.max(0, scrollTop - o.verticalOverscanSize);\n var right = Math.min(this._width, scrollLeft + o.width + o.horizontalOverscanSize);\n var bottom = Math.min(this._height, scrollTop + o.height + o.verticalOverscanSize);\n if (right > 0 && bottom > 0) {\n // 如果滚动的区间并没有超出渲染的范围\n if (top >= this.renderRange.minY && bottom <= this.renderRange.maxY && left >= this.renderRange.minX && right <= this.renderRange.maxX) {\n return;\n }\n var childrenToDisplay = this._cellRenderers(bottom - top, right - left, left, top);\n var renderedCells = [], renderedKeys = {}, renderedWidgets = {};\n // 存储所有的left和top\n var lefts = {}, tops = {};\n for (var i = 0, len = childrenToDisplay.length; i < len; i++) {\n var datum = childrenToDisplay[i];\n lefts[datum.x] = datum.x;\n lefts[datum.x + datum.width] = datum.x + datum.width;\n tops[datum.y] = datum.y;\n tops[datum.y + datum.height] = datum.y + datum.height;\n }\n lefts = BI.toArray(lefts);\n tops = BI.toArray(tops);\n var leftMap = BI.invert(lefts);\n var topMap = BI.invert(tops);\n // 存储上下左右四个边界\n var leftBorder = {}, rightBorder = {}, topBorder = {}, bottomBorder = {};\n var assertMinBorder = function (border, offset) {\n if (border[offset] == null) {\n border[offset] = Number.MAX_VALUE;\n }\n };\n var assertMaxBorder = function (border, offset) {\n if (border[offset] == null) {\n border[offset] = 0;\n }\n };\n for (var i = 0, len = childrenToDisplay.length; i < len; i++) {\n var datum = childrenToDisplay[i];\n var index = this.renderedKeys[datum.index] && this.renderedKeys[datum.index][1];\n var child;\n if (index >= 0) {\n if (datum.width !== this.renderedCells[index]._width) {\n this.renderedCells[index]._width = datum.width;\n this.renderedCells[index].el.setWidth(datum.width);\n }\n if (datum.height !== this.renderedCells[index]._height) {\n this.renderedCells[index]._height = datum.height;\n this.renderedCells[index].el.setHeight(datum.height);\n }\n if (this.renderedCells[index]._left !== datum.x) {\n this.renderedCells[index].el.element.css(\"left\", datum.x + \"px\");\n }\n if (this.renderedCells[index]._top !== datum.y) {\n this.renderedCells[index].el.element.css(\"top\", datum.y + \"px\");\n }\n renderedCells.push(child = this.renderedCells[index]);\n } else {\n child = BI.createWidget(BI.extend({\n type: \"bi.label\",\n width: datum.width,\n height: datum.height\n }, o.items[datum.index], {\n cls: (o.items[datum.index].cls || \"\") + \" container-cell\" + (datum.y === 0 ? \" first-row\" : \"\") + (datum.x === 0 ? \" first-col\" : \"\"),\n _left: datum.x,\n _top: datum.y\n }));\n renderedCells.push({\n el: child,\n left: datum.x,\n top: datum.y,\n _left: datum.x,\n _top: datum.y,\n _width: datum.width,\n _height: datum.height\n });\n }\n var startTopIndex = topMap[datum.y] | 0;\n var endTopIndex = topMap[datum.y + datum.height] | 0;\n for (var k = startTopIndex; k <= endTopIndex; k++) {\n var t = tops[k];\n assertMinBorder(leftBorder, t);\n assertMaxBorder(rightBorder, t);\n leftBorder[t] = Math.min(leftBorder[t], datum.x);\n rightBorder[t] = Math.max(rightBorder[t], datum.x + datum.width);\n }\n var startLeftIndex = leftMap[datum.x] | 0;\n var endLeftIndex = leftMap[datum.x + datum.width] | 0;\n for (var k = startLeftIndex; k <= endLeftIndex; k++) {\n var l = lefts[k];\n assertMinBorder(topBorder, l);\n assertMaxBorder(bottomBorder, l);\n topBorder[l] = Math.min(topBorder[l], datum.y);\n bottomBorder[l] = Math.max(bottomBorder[l], datum.y + datum.height);\n }\n\n renderedKeys[datum.index] = [datum.index, i];\n renderedWidgets[i] = child;\n }\n // 已存在的, 需要添加的和需要删除的\n var existSet = {}, addSet = {}, deleteArray = [];\n BI.each(renderedKeys, function (i, key) {\n if (self.renderedKeys[i]) {\n existSet[i] = key;\n } else {\n addSet[i] = key;\n }\n });\n BI.each(this.renderedKeys, function (i, key) {\n if (existSet[i]) {\n return;\n }\n if (addSet[i]) {\n return;\n }\n deleteArray.push(key[1]);\n });\n BI.each(deleteArray, function (i, index) {\n // 性能优化,不调用destroy方法防止触发destroy事件\n self.renderedCells[index].el._destroy();\n });\n var addedItems = [];\n BI.each(addSet, function (index, key) {\n addedItems.push(renderedCells[key[1]]);\n });\n this.container.addItems(addedItems);\n // 拦截父子级关系\n this.container._children = renderedWidgets;\n this.container.attr(\"items\", renderedCells);\n this.renderedCells = renderedCells;\n this.renderedKeys = renderedKeys;\n\n // Todo 左右比较特殊\n var minX = BI.min(leftBorder);\n var maxX = BI.max(rightBorder);\n\n var minY = BI.max(topBorder);\n var maxY = BI.min(bottomBorder);\n\n this.renderRange = {minX: minX, minY: minY, maxX: maxX, maxY: maxY};\n }\n },\n\n _getMaxScrollLeft: function () {\n return Math.max(0, this._width - this.options.width + (this.options.overflowX ? BI.DOM.getScrollWidth() : 0));\n },\n\n _getMaxScrollTop: function () {\n return Math.max(0, this._height - this.options.height + (this.options.overflowY ? BI.DOM.getScrollWidth() : 0));\n },\n\n _populate: function (items) {\n var o = this.options;\n this._reRange();\n if (items && items !== this.options.items) {\n this.options.items = items;\n this._calculateSizeAndPositionData();\n }\n if (o.items.length > 0) {\n this.container.setWidth(this._width);\n this.container.setHeight(this._height);\n\n this._calculateChildrenToRender();\n // 元素未挂载时不能设置scrollTop\n try {\n this.element.scrollTop(o.scrollTop);\n this.element.scrollLeft(o.scrollLeft);\n } catch (e) {\n }\n }\n },\n\n setScrollLeft: function (scrollLeft) {\n if (this.options.scrollLeft === scrollLeft) {\n return;\n }\n this._scrollLock = true;\n this.options.scrollLeft = BI.clamp(scrollLeft || 0, 0, this._getMaxScrollLeft());\n this._debounceRelease();\n this._calculateChildrenToRender();\n this.element.scrollLeft(this.options.scrollLeft);\n },\n\n setScrollTop: function (scrollTop) {\n if (this.options.scrollTop === scrollTop) {\n return;\n }\n this._scrollLock = true;\n this.options.scrollTop = BI.clamp(scrollTop || 0, 0, this._getMaxScrollTop());\n this._debounceRelease();\n this._calculateChildrenToRender();\n this.element.scrollTop(this.options.scrollTop);\n },\n\n setOverflowX: function (b) {\n var self = this;\n if (this.options.overflowX !== !!b) {\n this.options.overflowX = !!b;\n BI.nextTick(function () {\n self.element.css({overflowX: b ? \"auto\" : \"hidden\"});\n });\n }\n },\n\n setOverflowY: function (b) {\n var self = this;\n if (this.options.overflowY !== !!b) {\n this.options.overflowY = !!b;\n BI.nextTick(function () {\n self.element.css({overflowY: b ? \"auto\" : \"hidden\"});\n });\n }\n },\n\n getScrollLeft: function () {\n return this.options.scrollLeft;\n },\n\n getScrollTop: function () {\n return this.options.scrollTop;\n },\n\n getMaxScrollLeft: function () {\n return this._getMaxScrollLeft();\n },\n\n getMaxScrollTop: function () {\n return this._getMaxScrollTop();\n },\n\n // 重新计算children\n _reRange: function () {\n this.renderRange = {};\n },\n\n _clearChildren: function () {\n this.container._children = {};\n this.container.attr(\"items\", []);\n },\n\n restore: function () {\n BI.each(this.renderedCells, function (i, cell) {\n cell.el._destroy();\n });\n this._clearChildren();\n this.renderedCells = [];\n this.renderedKeys = [];\n this.renderRange = {};\n this._scrollLock = false;\n },\n\n populate: function (items) {\n if (items && items !== this.options.items) {\n this.restore();\n }\n this._populate(items);\n }\n});\nBI.CollectionView.EVENT_SCROLL = \"EVENT_SCROLL\";\nBI.shortcut(\"bi.collection_view\", BI.CollectionView);","/**\n * @class BI.Combo\n * @extends BI.Widget\n */\nBI.Combo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.Combo.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-combo\",\n trigger: \"click\",\n toggle: true,\n direction: \"bottom\", // top||bottom||left||right||top,left||top,right||bottom,left||bottom,right||right,innerRight||right,innerLeft||innerRight||innerLeft\n logic: {\n dynamic: true\n },\n container: null, // popupview放置的容器,默认为this.element\n isDefaultInit: false,\n destroyWhenHide: false,\n isNeedAdjustHeight: true, // 是否需要高度调整\n isNeedAdjustWidth: true,\n stopEvent: false,\n stopPropagation: false,\n adjustLength: 0, // 调整的距离\n adjustXOffset: 0,\n adjustYOffset: 0,\n hideChecker: BI.emptyFn,\n offsetStyle: \"left\", // left,right,center\n el: {},\n popup: {},\n comboClass: \"bi-combo-popup\",\n hoverClass: \"bi-combo-hover\"\n });\n },\n\n _init: function () {\n BI.Combo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this._initCombo();\n this._initPullDownAction();\n this.combo.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (self.isEnabled() && self.isValid()) {\n if (type === BI.Events.EXPAND) {\n self._popupView();\n }\n if (type === BI.Events.COLLAPSE) {\n self._hideView();\n }\n if (type === BI.Events.EXPAND) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.fireEvent(BI.Combo.EVENT_EXPAND);\n }\n if (type === BI.Events.COLLAPSE) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.isViewVisible() && self.fireEvent(BI.Combo.EVENT_COLLAPSE);\n }\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.Combo.EVENT_TRIGGER_CHANGE, obj);\n }\n }\n });\n\n self.element.on(\"mouseenter.\" + self.getName(), function (e) {\n if (self.isEnabled() && self.isValid() && self.combo.isEnabled() && self.combo.isValid()) {\n self.element.addClass(o.hoverClass);\n }\n });\n self.element.on(\"mouseleave.\" + self.getName(), function (e) {\n if (self.isEnabled() && self.isValid() && self.combo.isEnabled() && self.combo.isValid()) {\n self.element.removeClass(o.hoverClass);\n }\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"vertical\", BI.extend(o.logic, {\n items: [\n { el: this.combo }\n ]\n }))));\n o.isDefaultInit && (this._assertPopupView());\n BI.Resizers.add(this.getName(), BI.bind(function () {\n if (this.isViewVisible()) {\n this._hideView();\n }\n }, this));\n },\n\n _toggle: function () {\n this._assertPopupViewRender();\n if (this.popupView.isVisible()) {\n this._hideView();\n } else {\n if (this.isEnabled()) {\n this._popupView();\n }\n }\n },\n\n _initPullDownAction: function () {\n var self = this, o = this.options;\n var evs = (this.options.trigger || \"\").split(\",\");\n var st = function (e) {\n if (o.stopEvent) {\n e.stopEvent();\n }\n if (o.stopPropagation) {\n e.stopPropagation();\n }\n };\n\n var enterPopup = false;\n\n function hide () {\n if (self.isEnabled() && self.isValid() && self.combo.isEnabled() && self.combo.isValid() && o.toggle === true) {\n self._hideView();\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.COLLAPSE, \"\", self.combo);\n self.fireEvent(BI.Combo.EVENT_COLLAPSE);\n }\n self.popupView && self.popupView.element.off(\"mouseenter.\" + self.getName()).off(\"mouseleave.\" + self.getName());\n enterPopup = false;\n }\n\n BI.each(evs, function (i, ev) {\n switch (ev) {\n case \"hover\":\n self.element.on(\"mouseenter.\" + self.getName(), function (e) {\n if (self.isEnabled() && self.isValid() && self.combo.isEnabled() && self.combo.isValid()) {\n self._popupView();\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, \"\", self.combo);\n self.fireEvent(BI.Combo.EVENT_EXPAND);\n }\n });\n self.element.on(\"mouseleave.\" + self.getName(), function (e) {\n if (self.popupView) {\n self.popupView.element.on(\"mouseenter.\" + self.getName(), function (e) {\n enterPopup = true;\n self.popupView.element.on(\"mouseleave.\" + self.getName(), function (e) {\n hide();\n });\n self.popupView.element.off(\"mouseenter.\" + self.getName());\n });\n BI.defer(function () {\n if (!enterPopup) {\n hide();\n }\n }, 50);\n }\n });\n break;\n case \"click\":\n var debounce = BI.debounce(function (e) {\n if (self.combo.element.__isMouseInBounds__(e)) {\n if (self.isEnabled() && self.isValid() && self.combo.isEnabled() && self.combo.isValid()) {\n // if (!o.toggle && self.isViewVisible()) {\n // return;\n // }\n o.toggle ? self._toggle() : self._popupView();\n if (self.isViewVisible()) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, \"\", self.combo);\n self.fireEvent(BI.Combo.EVENT_EXPAND);\n } else {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.COLLAPSE, \"\", self.combo);\n self.fireEvent(BI.Combo.EVENT_COLLAPSE);\n }\n }\n }\n }, BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n });\n self.element.off(ev + \".\" + self.getName()).on(ev + \".\" + self.getName(), function (e) {\n debounce(e);\n st(e);\n });\n break;\n case \"click-hover\":\n var debounce = BI.debounce(function (e) {\n if (self.combo.element.__isMouseInBounds__(e)) {\n if (self.isEnabled() && self.isValid() && self.combo.isEnabled() && self.combo.isValid()) {\n // if (self.isViewVisible()) {\n // return;\n // }\n self._popupView();\n if (self.isViewVisible()) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, \"\", self.combo);\n self.fireEvent(BI.Combo.EVENT_EXPAND);\n }\n }\n }\n }, BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n });\n self.element.off(\"click.\" + self.getName()).on(\"click.\" + self.getName(), function (e) {\n debounce(e);\n st(e);\n });\n self.element.on(\"mouseleave.\" + self.getName(), function (e) {\n if (self.popupView) {\n self.popupView.element.on(\"mouseenter.\" + self.getName(), function (e) {\n enterPopup = true;\n self.popupView.element.on(\"mouseleave.\" + self.getName(), function (e) {\n hide();\n });\n self.popupView.element.off(\"mouseenter.\" + self.getName());\n });\n BI.defer(function () {\n if (!enterPopup) {\n hide();\n }\n }, 50);\n }\n });\n break;\n }\n });\n },\n\n _initCombo: function () {\n this.combo = BI.createWidget(this.options.el, {\n value: this.options.value\n });\n },\n\n _assertPopupView: function () {\n var self = this, o = this.options;\n if (this.popupView == null) {\n this.popupView = BI.createWidget(this.options.popup, {\n type: \"bi.popup_view\",\n value: o.value\n }, this);\n this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (type === BI.Events.CLICK) {\n self.combo.setValue(self.getValue());\n self.fireEvent(BI.Combo.EVENT_CHANGE, value, obj);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.popupView.setVisible(false);\n BI.nextTick(function () {\n self.fireEvent(BI.Combo.EVENT_AFTER_INIT);\n });\n }\n },\n\n _assertPopupViewRender: function () {\n this._assertPopupView();\n if (!this._rendered) {\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this.options.container || this,\n items: [\n {el: this.popupView}\n ]\n });\n this._rendered = true;\n }\n },\n\n _hideIf: function (e) {\n // if (this.element.__isMouseInBounds__(e) || (this.popupView && this.popupView.element.__isMouseInBounds__(e))) {\n // return;\n // }\n // BI-10290 公式combo双击公式内容会收起\n if ((this.element.find(e.target).length > 0)\n || (this.popupView && this.popupView.element.find(e.target).length > 0)\n || e.target.className === \"CodeMirror-cursor\" || BI.Widget._renderEngine.createElement(e.target).closest(\".CodeMirror-hints\").length > 0) {// BI-9887 CodeMirror的公式弹框需要特殊处理下\n var directions = this.options.direction.split(\",\");\n if (BI.contains(directions, \"innerLeft\") || BI.contains(directions, \"innerRight\")) {\n // popup可以出现的trigger内部的combo,滚动时不需要消失,而是调整位置\n this.adjustWidth();\n this.adjustHeight();\n }\n return;\n }\n var isHide = this.options.hideChecker.apply(this, [e]);\n if (isHide === false) {\n return;\n }\n this._hideView();\n },\n\n _hideView: function () {\n this.fireEvent(BI.Combo.EVENT_BEFORE_HIDEVIEW);\n if (this.options.destroyWhenHide === true) {\n this.popupView && this.popupView.destroy();\n this.popupView = null;\n this._rendered = false;\n } else {\n this.popupView && this.popupView.invisible();\n }\n this.element.removeClass(this.options.comboClass);\n\n BI.Widget._renderEngine.createElement(document).unbind(\"mousedown.\" + this.getName()).unbind(\"mousewheel.\" + this.getName());\n this.fireEvent(BI.Combo.EVENT_AFTER_HIDEVIEW);\n },\n\n _popupView: function (e) {\n this._assertPopupViewRender();\n this.fireEvent(BI.Combo.EVENT_BEFORE_POPUPVIEW);\n\n this.popupView.visible();\n this.adjustWidth(e);\n this.adjustHeight(e);\n\n this.element.addClass(this.options.comboClass);\n BI.Widget._renderEngine.createElement(document).unbind(\"mousedown.\" + this.getName()).unbind(\"mousewheel.\" + this.getName());\n BI.Widget._renderEngine.createElement(document).bind(\"mousedown.\" + this.getName(), BI.bind(this._hideIf, this)).bind(\"mousewheel.\" + this.getName(), BI.bind(this._hideIf, this));\n this.fireEvent(BI.Combo.EVENT_AFTER_POPUPVIEW);\n },\n\n adjustWidth: function (e) {\n var o = this.options;\n if (!this.popupView) {\n return;\n }\n if (o.isNeedAdjustWidth === true) {\n this.resetListWidth(\"\");\n var width = this.popupView.element.outerWidth();\n var maxW = this.element.outerWidth() || o.width;\n if (width > maxW + 80) {\n maxW = maxW + 80;\n } else if (width > maxW) {\n maxW = width;\n }\n this.resetListWidth(maxW < 100 ? 100 : maxW);\n }\n },\n\n adjustHeight: function (e) {\n var o = this.options, p = {};\n if (!this.popupView) {\n return;\n }\n var isVisible = this.popupView.isVisible();\n this.popupView.visible();\n var combo = BI.isNotNull(e) ? {\n element: {\n offset: function () {\n return {\n left: e.pageX,\n top: e.pageY\n };\n },\n bounds: function () {\n // offset为其相对于父定位元素的偏移\n return {\n x: e.offsetX,\n y: e.offsetY,\n width: 0,\n height: 24\n };\n },\n outerWidth: function () {\n return 0;\n },\n outerHeight: function () {\n return 24;\n }\n }\n } : this.combo;\n switch (o.direction) {\n case \"bottom\":\n case \"bottom,right\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, [\"bottom\", \"top\", \"right\", \"left\"], o.offsetStyle);\n break;\n case \"top\":\n case \"top,right\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, [\"top\", \"bottom\", \"right\", \"left\"], o.offsetStyle);\n break;\n case \"left\":\n case \"left,bottom\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"left\", \"right\", \"bottom\", \"top\"], o.offsetStyle);\n break;\n case \"right\":\n case \"right,bottom\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"right\", \"left\", \"bottom\", \"top\"], o.offsetStyle);\n break;\n case \"top,left\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, [\"top\", \"bottom\", \"left\", \"right\"], o.offsetStyle);\n break;\n case \"bottom,left\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight, [\"bottom\", \"top\", \"left\", \"right\"], o.offsetStyle);\n break;\n case \"left,top\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"left\", \"right\", \"top\", \"bottom\"], o.offsetStyle);\n break;\n case \"right,top\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"right\", \"left\", \"top\", \"bottom\"], o.offsetStyle);\n break;\n case \"right,innerRight\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"right\", \"left\", \"innerRight\", \"innerLeft\", \"bottom\", \"top\"], o.offsetStyle);\n break;\n case \"right,innerLeft\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"right\", \"left\", \"innerLeft\", \"innerRight\", \"bottom\", \"top\"], o.offsetStyle);\n break;\n case \"innerRight\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"innerRight\", \"innerLeft\", \"right\", \"left\", \"bottom\", \"top\"], o.offsetStyle);\n break;\n case \"innerLeft\":\n p = BI.DOM.getComboPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength, o.adjustYOffset, o.isNeedAdjustHeight, [\"innerLeft\", \"innerRight\", \"left\", \"right\", \"bottom\", \"top\"], o.offsetStyle);\n break;\n case \"top,custom\":\n case \"custom,top\":\n p = BI.DOM.getTopAdaptPosition(combo, this.popupView, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight);\n break;\n case \"custom,bottom\":\n case \"bottom,custom\":\n p = BI.DOM.getBottomAdaptPosition(combo, this.popupView, o.adjustYOffset || o.adjustLength, o.isNeedAdjustHeight);\n break;\n case \"left,custom\":\n case \"custom,left\":\n p = BI.DOM.getLeftAdaptPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength);\n delete p.top;\n delete p.adaptHeight;\n break;\n case \"custom,right\":\n case \"right,custom\":\n p = BI.DOM.getRightAdaptPosition(combo, this.popupView, o.adjustXOffset || o.adjustLength);\n delete p.top;\n delete p.adaptHeight;\n break;\n }\n\n if (\"adaptHeight\" in p) {\n this.resetListHeight(p[\"adaptHeight\"]);\n }\n if (\"left\" in p) {\n this.popupView.element.css({\n left: p.left\n });\n }\n if (\"top\" in p) {\n this.popupView.element.css({\n top: p.top\n });\n }\n this.position = p;\n this.popupView.setVisible(isVisible);\n },\n\n resetListHeight: function (h) {\n this._assertPopupView();\n this.popupView.resetHeight && this.popupView.resetHeight(h);\n },\n\n resetListWidth: function (w) {\n this._assertPopupView();\n this.popupView.resetWidth && this.popupView.resetWidth(w);\n },\n\n populate: function (items) {\n this._assertPopupView();\n this.popupView.populate.apply(this.popupView, arguments);\n this.combo.populate.apply(this.combo, arguments);\n },\n\n _setEnable: function (arg) {\n BI.Combo.superclass._setEnable.apply(this, arguments);\n if (arg === true) {\n this.element.removeClass(\"base-disabled disabled\");\n } else if (arg === false) {\n this.element.addClass(\"base-disabled disabled\");\n }\n !arg && this.element.removeClass(this.options.hoverClass);\n !arg && this.isViewVisible() && this._hideView();\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n if (BI.isNull(this.popupView)) {\n this.options.popup.value = v;\n } else {\n this.popupView.setValue(v);\n }\n },\n\n getValue: function () {\n if (BI.isNull(this.popupView)) {\n return this.options.popup.value;\n } else {\n return this.popupView.getValue();\n }\n },\n\n isViewVisible: function () {\n return this.isEnabled() && this.combo.isEnabled() && !!this.popupView && this.popupView.isVisible();\n },\n\n showView: function (e) {\n // 减少popup 调整宽高的次数\n if (this.isEnabled() && this.combo.isEnabled() && !this.isViewVisible()) {\n this._popupView(e);\n }\n },\n\n hideView: function () {\n this._hideView();\n },\n\n getView: function () {\n return this.popupView;\n },\n\n getPopupPosition: function () {\n return this.position;\n },\n\n toggle: function () {\n this._toggle();\n },\n\n destroyed: function () {\n BI.Widget._renderEngine.createElement(document).unbind(\"mousedown.\" + this.getName())\n .unbind(\"mousewheel.\" + this.getName())\n .unbind(\"mouseenter.\" + this.getName())\n .unbind(\"mousemove.\" + this.getName())\n .unbind(\"mouseleave.\" + this.getName());\n BI.Resizers.remove(this.getName());\n this.popupView && this.popupView._destroy();\n }\n});\nBI.Combo.EVENT_TRIGGER_CHANGE = \"EVENT_TRIGGER_CHANGE\";\nBI.Combo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.Combo.EVENT_EXPAND = \"EVENT_EXPAND\";\nBI.Combo.EVENT_COLLAPSE = \"EVENT_COLLAPSE\";\nBI.Combo.EVENT_AFTER_INIT = \"EVENT_AFTER_INIT\";\n\n\nBI.Combo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.Combo.EVENT_AFTER_POPUPVIEW = \"EVENT_AFTER_POPUPVIEW\";\nBI.Combo.EVENT_BEFORE_HIDEVIEW = \"EVENT_BEFORE_HIDEVIEW\";\nBI.Combo.EVENT_AFTER_HIDEVIEW = \"EVENT_AFTER_HIDEVIEW\";\n\nBI.shortcut(\"bi.combo\", BI.Combo);","/**\n *\n * 某个可以展开的节点\n *\n * Created by GUY on 2015/9/10.\n * @class BI.Expander\n * @extends BI.Widget\n */\nBI.Expander = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Expander.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-expander\",\n trigger: \"click\",\n toggle: true,\n // direction: \"bottom\", //top,bottom四个方向\n isDefaultInit: false, // 是否默认初始化子节点\n el: {},\n popup: {},\n expanderClass: \"bi-expander-popup\",\n hoverClass: \"bi-expander-hover\"\n });\n },\n\n _init: function () {\n BI.Expander.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this._expanded = !!o.el.open;\n this._initExpander();\n this._initPullDownAction();\n this.expander.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (self.isEnabled() && self.isValid()) {\n if (type === BI.Events.EXPAND) {\n self._popupView();\n }\n if (type === BI.Events.COLLAPSE) {\n self._hideView();\n }\n if (type === BI.Events.EXPAND) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.fireEvent(BI.Expander.EVENT_EXPAND);\n }\n if (type === BI.Events.COLLAPSE) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.isViewVisible() && self.fireEvent(BI.Expander.EVENT_COLLAPSE);\n }\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.Expander.EVENT_TRIGGER_CHANGE, value, obj);\n }\n }\n });\n\n this.element.hover(function () {\n if (self.isEnabled() && self.isValid() && self.expander.isEnabled() && self.expander.isValid()) {\n self.element.addClass(o.hoverClass);\n }\n }, function () {\n if (self.isEnabled() && self.isValid() && self.expander.isEnabled() && self.expander.isValid()) {\n self.element.removeClass(o.hoverClass);\n }\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [\n {el: this.expander}\n ]\n });\n o.isDefaultInit && this._assertPopupView();\n if (this.expander.isOpened() === true) {\n this._popupView();\n }\n },\n\n _toggle: function () {\n this._assertPopupViewRender();\n if (this.popupView.isVisible()) {\n this._hideView();\n } else {\n if (this.isEnabled()) {\n this._popupView();\n }\n }\n },\n\n _initPullDownAction: function () {\n var self = this, o = this.options;\n var evs = this.options.trigger.split(\",\");\n BI.each(evs, function (i, e) {\n switch (e) {\n case \"hover\":\n self.element[e](function (e) {\n if (self.isEnabled() && self.isValid() && self.expander.isEnabled() && self.expander.isValid()) {\n self._popupView();\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, \"\", self.expander);\n self.fireEvent(BI.Expander.EVENT_EXPAND);\n }\n }, function () {\n if (self.isEnabled() && self.isValid() && self.expander.isEnabled() && self.expander.isValid() && o.toggle) {\n self._hideView();\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.COLLAPSE, \"\", self.expander);\n self.fireEvent(BI.Expander.EVENT_COLLAPSE);\n }\n });\n break;\n case \"click\":\n if (e) {\n self.element.off(e + \".\" + self.getName()).on(e + \".\" + self.getName(), BI.debounce(function (e) {\n if (self.expander.element.__isMouseInBounds__(e)) {\n if (self.isEnabled() && self.isValid() && self.expander.isEnabled() && self.expander.isValid()) {\n o.toggle ? self._toggle() : self._popupView();\n if (self.isExpanded()) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, \"\", self.expander);\n self.fireEvent(BI.Expander.EVENT_EXPAND);\n } else {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.COLLAPSE, \"\", self.expander);\n self.fireEvent(BI.Expander.EVENT_COLLAPSE);\n }\n }\n }\n }, BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n }));\n }\n break;\n }\n });\n },\n\n _initExpander: function () {\n this.expander = BI.createWidget(this.options.el);\n },\n\n _assertPopupView: function () {\n var self = this, o = this.options;\n if (this.popupView == null) {\n this.popupView = BI.createWidget(this.options.popup, {\n type: \"bi.button_group\",\n cls: \"expander-popup\",\n layouts: [{\n type: \"bi.vertical\",\n hgap: 0,\n vgap: 0\n }],\n value: o.value\n }, this);\n this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n // self.setValue(self.getValue());\n self.fireEvent(BI.Expander.EVENT_CHANGE, value, obj);\n }\n });\n this.popupView.setVisible(this.isExpanded());\n BI.nextTick(function () {\n self.fireEvent(BI.Expander.EVENT_AFTER_INIT);\n });\n }\n },\n\n _assertPopupViewRender: function () {\n this._assertPopupView();\n if (!this._rendered) {\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [\n {el: this.popupView}\n ]\n });\n this._rendered = true;\n }\n },\n\n _hideView: function () {\n this.fireEvent(BI.Expander.EVENT_BEFORE_HIDEVIEW);\n this._expanded = false;\n this.expander.setOpened(false);\n this.popupView && this.popupView.invisible();\n this.element.removeClass(this.options.expanderClass);\n\n this.fireEvent(BI.Expander.EVENT_AFTER_HIDEVIEW);\n },\n\n _popupView: function () {\n this._assertPopupViewRender();\n this.fireEvent(BI.Expander.EVENT_BEFORE_POPUPVIEW);\n this._expanded = true;\n this.expander.setOpened(true);\n this.popupView.visible();\n this.element.addClass(this.options.expanderClass);\n this.fireEvent(BI.Expander.EVENT_AFTER_POPUPVIEW);\n },\n\n populate: function (items) {\n // this._assertPopupView();\n this.popupView && this.popupView.populate.apply(this.popupView, arguments);\n this.expander.populate.apply(this.expander, arguments);\n },\n\n _setEnable: function (arg) {\n BI.Expander.superclass._setEnable.apply(this, arguments);\n !arg && this.element.removeClass(this.options.hoverClass);\n !arg && this.isViewVisible() && this._hideView();\n },\n\n setValue: function (v) {\n this.expander.setValue(v);\n if (BI.isNull(this.popupView)) {\n this.options.popup.value = v;\n } else {\n this.popupView.setValue(v);\n }\n },\n\n getValue: function () {\n if (BI.isNull(this.popupView)) {\n return this.options.popup.value;\n } else {\n return this.popupView.getValue();\n }\n },\n\n isViewVisible: function () {\n return this.isEnabled() && this.expander.isEnabled() && !!this.popupView && this.popupView.isVisible();\n },\n\n isExpanded: function () {\n return this._expanded;\n },\n\n showView: function () {\n if (this.isEnabled() && this.expander.isEnabled()) {\n this._popupView();\n }\n },\n\n hideView: function () {\n this._hideView();\n },\n\n getView: function () {\n return this.popupView;\n },\n\n getAllLeaves: function () {\n return this.popupView && this.popupView.getAllLeaves();\n },\n\n getNodeById: function (id) {\n if (this.expander.options.id === id) {\n return this.expander;\n }\n return this.popupView && this.popupView.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n if (this.expander.getValue() === value) {\n return this.expander;\n }\n return this.popupView && this.popupView.getNodeByValue(value);\n },\n\n destroy: function () {\n BI.Expander.superclass.destroy.apply(this, arguments);\n }\n});\nBI.Expander.EVENT_EXPAND = \"EVENT_EXPAND\";\nBI.Expander.EVENT_COLLAPSE = \"EVENT_COLLAPSE\";\nBI.Expander.EVENT_TRIGGER_CHANGE = \"EVENT_TRIGGER_CHANGE\";\nBI.Expander.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.Expander.EVENT_AFTER_INIT = \"EVENT_AFTER_INIT\";\n\n\nBI.Expander.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.Expander.EVENT_AFTER_POPUPVIEW = \"EVENT_AFTER_POPUPVIEW\";\nBI.Expander.EVENT_BEFORE_HIDEVIEW = \"EVENT_BEFORE_HIDEVIEW\";\nBI.Expander.EVENT_AFTER_HIDEVIEW = \"EVENT_AFTER_HIDEVIEW\";\n\nBI.shortcut(\"bi.expander\", BI.Expander);","/**\n * Created by GUY on 2015/8/10.\n */\n\nBI.ComboGroup = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.ComboGroup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-combo-group bi-list-item\",\n\n // 以下这些属性对每一个combo都是公用的\n trigger: \"click,hover\",\n direction: \"right\",\n adjustLength: 0,\n isDefaultInit: false,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n\n el: {type: \"bi.text_button\", text: \"\", value: \"\"},\n children: [],\n\n popup: {\n el: {\n type: \"bi.button_tree\",\n chooseType: 0,\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n }\n });\n },\n\n _init: function () {\n BI.ComboGroup.superclass._init.apply(this, arguments);\n this._populate(this.options.el);\n },\n\n _populate: function (item) {\n var self = this, o = this.options;\n var children = o.children;\n if (BI.isEmpty(children)) {\n throw new Error(\"ComboGroup构造错误\");\n }\n BI.each(children, function (i, ch) {\n var son = BI.formatEL(ch).el.children;\n ch = BI.formatEL(ch).el;\n if (!BI.isEmpty(son)) {\n ch.el = BI.clone(ch);\n ch.children = son;\n ch.type = \"bi.combo_group\";\n ch.action = o.action;\n ch.height = o.height;\n ch.direction = o.direction;\n ch.isDefaultInit = o.isDefaultInit;\n ch.isNeedAdjustHeight = o.isNeedAdjustHeight;\n ch.isNeedAdjustWidth = o.isNeedAdjustWidth;\n ch.adjustLength = o.adjustLength;\n ch.popup = o.popup;\n }\n });\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n element: this,\n container: o.container,\n height: o.height,\n trigger: o.trigger,\n direction: o.direction,\n isDefaultInit: o.isDefaultInit,\n isNeedAdjustWidth: o.isNeedAdjustWidth,\n isNeedAdjustHeight: o.isNeedAdjustHeight,\n adjustLength: o.adjustLength,\n el: item,\n popup: BI.extend({}, o.popup, {\n el: BI.extend({\n items: children\n }, o.popup.el)\n })\n });\n this.combo.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.ComboGroup.EVENT_CHANGE, obj);\n }\n });\n },\n\n getValue: function () {\n return this.combo.getValue();\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n }\n});\nBI.ComboGroup.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.combo_group\", BI.ComboGroup);","BI.VirtualGroup = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.VirtualGroup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-virtual-group\",\n items: [],\n layouts: [{\n type: \"bi.center\",\n hgap: 0,\n vgap: 0\n }]\n });\n },\n\n render: function () {\n var o = this.options;\n this.populate(o.items);\n if (BI.isKey(o.value)) {\n this.setValue(o.value);\n }\n },\n\n _packageBtns: function (items) {\n var o = this.options;\n var map = this.buttonMap = {};\n for (var i = o.layouts.length - 1; i > 0; i--) {\n items = BI.map(items, function (k, it) {\n var el = BI.stripEL(it);\n return BI.extend({}, o.layouts[i], {\n items: [\n BI.extend({}, o.layouts[i].el, {\n el: BI.extend({\n ref: function (_ref) {\n if (BI.isKey(map[el.value])) {\n map[el.value] = _ref;\n }\n }\n }, el)\n })\n ]\n });\n });\n }\n return items;\n },\n\n _packageLayout: function (items) {\n var o = this.options, layout = BI.deepClone(o.layouts[0]);\n\n var lay = BI.formatEL(layout).el;\n while (lay && lay.items && !BI.isEmpty(lay.items)) {\n lay = BI.formatEL(lay.items[0]).el;\n }\n lay.items = items;\n return layout;\n },\n\n addItems: function (items) {\n this.layouts.addItems(items);\n },\n\n prependItems: function (items) {\n this.layouts.prependItems(items);\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n BI.each(this.buttonMap, function (key, item) {\n if (item) {\n if (v.deepContains(key)) {\n item.setSelected && item.setSelected(true);\n } else {\n item.setSelected && item.setSelected(false);\n }\n }\n });\n },\n\n getNotSelectedValue: function () {\n var v = [];\n BI.each(this.buttonMap, function (i, item) {\n if (item) {\n if (item.isEnabled() && !(item.isSelected && item.isSelected())) {\n v.push(item.getValue());\n }\n }\n });\n return v;\n },\n\n getValue: function () {\n var v = [];\n BI.each(this.buttonMap, function (i, item) {\n if (item) {\n if (item.isEnabled() && item.isSelected && item.isSelected()) {\n v.push(item.getValue());\n }\n }\n });\n return v;\n },\n\n populate: function (items) {\n var self = this;\n items = items || [];\n this.options.items = items;\n items = this._packageBtns(items);\n if (!this.layouts) {\n this.layouts = BI.createWidget(BI.extend({element: this}, this._packageLayout(items)));\n } else {\n this.layouts.populate(items);\n }\n }\n});\nBI.VirtualGroup.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.virtual_group\", BI.VirtualGroup);","/**\n * 加载控件\n *\n * Created by GUY on 2015/8/31.\n * @class BI.Loader\n * @extends BI.Widget\n */\nBI.Loader = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Loader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-loader\",\n\n direction: \"top\",\n isDefaultInit: true, // 是否默认初始化数据\n logic: {\n dynamic: true,\n scrolly: true\n },\n\n // 下面是button_group的属性\n el: {\n type: \"bi.button_group\"\n },\n\n items: [],\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn,\n\n // 下面是分页信息\n count: false,\n prev: false,\n next: {},\n hasPrev: BI.emptyFn,\n hasNext: BI.emptyFn\n });\n },\n\n _prevLoad: function () {\n var self = this, o = this.options;\n this.prev.setLoading();\n o.itemsCreator.apply(this, [{times: --this.times}, function () {\n self.prev.setLoaded();\n self.prependItems.apply(self, arguments);\n }]);\n },\n\n _nextLoad: function () {\n var self = this, o = this.options;\n this.next.setLoading();\n o.itemsCreator.apply(this, [{times: ++this.times}, function () {\n self.next.setLoaded();\n self.addItems.apply(self, arguments);\n }]);\n },\n\n _init: function () {\n BI.Loader.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (o.itemsCreator === false) {\n o.prev = false;\n o.next = false;\n }\n if (o.prev !== false) {\n this.prev = BI.createWidget(BI.extend({\n type: \"bi.loading_bar\"\n }, o.prev));\n this.prev.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n self._prevLoad();\n }\n });\n }\n\n this.button_group = BI.createWidget(o.el, {\n type: \"bi.button_group\",\n chooseType: 0,\n items: o.items,\n behaviors: {},\n layouts: [{\n type: \"bi.vertical\"\n }],\n value: o.value\n });\n this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.Loader.EVENT_CHANGE, obj);\n }\n });\n\n if (o.next !== false) {\n this.next = BI.createWidget(BI.extend({\n type: \"bi.loading_bar\"\n }, o.next));\n this.next.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n self._nextLoad();\n }\n });\n }\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({\n scrolly: true\n }, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.prev, this.button_group, this.next)\n }))));\n\n o.isDefaultInit && BI.isEmpty(o.items) && BI.nextTick(BI.bind(function () {\n o.isDefaultInit && BI.isEmpty(o.items) && this._populate();\n }, this));\n if (BI.isNotEmptyArray(o.items)) {\n this._populate(o.items);\n }\n },\n\n hasPrev: function () {\n var o = this.options;\n if (BI.isNumber(o.count)) {\n return this.count < o.count;\n }\n return !!o.hasPrev.apply(this, [{\n times: this.times,\n count: this.count\n }]);\n },\n\n hasNext: function () {\n var o = this.options;\n if (BI.isNumber(o.count)) {\n return this.count < o.count;\n }\n return !!o.hasNext.apply(this, [{\n times: this.times,\n count: this.count\n }]);\n },\n\n prependItems: function (items) {\n this.count += items.length;\n if (this.next !== false) {\n if (this.hasPrev()) {\n this.options.items = this.options.items.concat(items);\n this.prev.setLoaded();\n } else {\n this.prev.setEnd();\n }\n }\n this.button_group.prependItems.apply(this.button_group, arguments);\n },\n\n addItems: function (items) {\n this.count += items.length;\n if (BI.isObject(this.next)) {\n if (this.hasNext()) {\n this.options.items = this.options.items.concat(items);\n this.next.setLoaded();\n } else {\n this.next.setEnd();\n }\n }\n this.button_group.addItems.apply(this.button_group, arguments);\n },\n\n\n _populate: function (items) {\n var self = this, o = this.options;\n if (arguments.length === 0 && (BI.isFunction(o.itemsCreator))) {\n o.itemsCreator.apply(this, [{times: 1}, function () {\n if (arguments.length === 0) {\n throw new Error(\"arguments can not be null!!!\");\n }\n self.populate.apply(self, arguments);\n o.onLoaded();\n }]);\n return false;\n }\n this.options.items = items;\n this.times = 1;\n this.count = 0;\n this.count += items.length;\n if (BI.isObject(this.next)) {\n if (this.hasNext()) {\n this.next.setLoaded();\n } else {\n this.next.invisible();\n }\n }\n if (BI.isObject(this.prev)) {\n if (this.hasPrev()) {\n this.prev.setLoaded();\n } else {\n this.prev.invisible();\n }\n }\n return true;\n },\n\n populate: function () {\n this._populate.apply(this, arguments) && this.button_group.populate.apply(this.button_group, arguments);\n },\n\n setNotSelectedValue: function () {\n this.button_group.setNotSelectedValue.apply(this.button_group, arguments);\n },\n\n getNotSelectedValue: function () {\n return this.button_group.getNotSelectedValue();\n },\n\n setValue: function () {\n this.button_group.setValue.apply(this.button_group, arguments);\n },\n\n getValue: function () {\n return this.button_group.getValue.apply(this.button_group, arguments);\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n getAllLeaves: function () {\n return this.button_group.getAllLeaves();\n },\n\n getSelectedButtons: function () {\n return this.button_group.getSelectedButtons();\n },\n\n getNotSelectedButtons: function () {\n return this.button_group.getNotSelectedButtons();\n },\n\n getIndexByValue: function (value) {\n return this.button_group.getIndexByValue(value);\n },\n\n getNodeById: function (id) {\n return this.button_group.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n return this.button_group.getNodeByValue(value);\n },\n\n empty: function () {\n this.button_group.empty();\n BI.each([this.prev, this.next], function (i, ob) {\n ob && ob.setVisible(false);\n });\n },\n\n destroy: function () {\n BI.Loader.superclass.destroy.apply(this, arguments);\n }\n});\nBI.Loader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.loader\", BI.Loader);","/**\n * Created by GUY on 2015/6/26.\n */\n\nBI.Navigation = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Navigation.superclass._defaultConfig.apply(this, arguments), {\n direction: \"bottom\", // top, bottom, left, right, custom\n logic: {\n dynamic: false\n },\n single: false,\n showIndex: false,\n tab: false,\n cardCreator: function (v) {\n return BI.createWidget();\n },\n\n afterCardCreated: BI.emptyFn,\n afterCardShow: BI.emptyFn\n });\n },\n\n render: function () {\n var self = this, o = this.options;\n this.tab = BI.createWidget(this.options.tab, {type: \"bi.button_group\"});\n this.cardMap = {};\n this.showIndex = 0;\n this.layout = BI.createWidget({\n type: \"bi.card\"\n });\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tab, this.layout)\n }))));\n\n\n new BI.ShowListener({\n eventObj: this.tab,\n cardLayout: this.layout,\n cardNameCreator: function (v) {\n return self.showIndex + v;\n },\n cardCreator: function (v) {\n var card = o.cardCreator(v);\n self.cardMap[v] = card;\n return card;\n },\n afterCardCreated: BI.bind(this.afterCardCreated, this),\n afterCardShow: BI.bind(this.afterCardShow, this)\n });\n },\n\n mounted: function () {\n var o = this.options;\n if (o.showIndex !== false) {\n this.setSelect(o.showIndex);\n }\n },\n\n _deleteOtherCards: function (currCardName) {\n var self = this, o = this.options;\n if (o.single === true) {\n BI.each(this.cardMap, function (name, card) {\n if (name !== (currCardName + \"\")) {\n self.layout.deleteCardByName(name);\n delete self.cardMap[name];\n }\n });\n }\n },\n\n afterCardCreated: function (v) {\n var self = this;\n this.cardMap[v].on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.Navigation.EVENT_CHANGE, obj);\n }\n });\n this.options.afterCardCreated.apply(this, arguments);\n },\n\n afterCardShow: function (v) {\n this.showIndex = v;\n this._deleteOtherCards(v);\n this.options.afterCardShow.apply(this, arguments);\n },\n\n populate: function () {\n var card = this.layout.getShowingCard();\n if (card) {\n return card.populate.apply(card, arguments);\n }\n },\n\n _assertCard: function (v) {\n if (!this.layout.isCardExisted(v)) {\n var card = this.options.cardCreator(v);\n this.cardMap[v] = card;\n this.layout.addCardByName(v, card);\n this.afterCardCreated(v);\n }\n },\n\n setSelect: function (v) {\n this._assertCard(v);\n this.layout.showCardByName(v);\n this._deleteOtherCards(v);\n if (this.showIndex !== v) {\n this.showIndex = v;\n BI.nextTick(BI.bind(this.afterCardShow, this, v));\n }\n },\n\n getSelect: function () {\n return this.showIndex;\n },\n\n getSelectedCard: function () {\n if (BI.isKey(this.showIndex)) {\n return this.cardMap[this.showIndex];\n }\n },\n\n /**\n * @override\n */\n setValue: function (v) {\n var card = this.layout.getShowingCard();\n if (card) {\n card.setValue(v);\n }\n },\n\n /**\n * @override\n */\n getValue: function () {\n var card = this.layout.getShowingCard();\n if (card) {\n return card.getValue();\n }\n },\n\n empty: function () {\n this.layout.deleteAllCard();\n this.cardMap = {};\n },\n\n destroy: function () {\n BI.Navigation.superclass.destroy.apply(this, arguments);\n }\n});\nBI.Navigation.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.navigation\", BI.Navigation);","/**\n * 搜索逻辑控件\n *\n * Created by GUY on 2015/9/28.\n * @class BI.Searcher\n * @extends BI.Widget\n */\n\nBI.Searcher = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Searcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-searcher\",\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n vgap: 0,\n hgap: 0,\n\n isDefaultInit: false,\n isAutoSearch: true, // 是否自动搜索\n isAutoSync: true, // 是否自动同步数据, 即是否保持搜索面板和adapter面板状态值的统一\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n allowSearchBlank: true, // 是否能够搜索包含空格的字符串\n\n // isAutoSearch为false时启用\n onSearch: function (op, callback) {\n callback([]);\n },\n\n el: {\n type: \"bi.search_editor\"\n },\n\n popup: {\n type: \"bi.searcher_view\"\n },\n\n adapter: null,\n masker: { // masker层\n offset: {}\n }\n });\n },\n\n _init: function () {\n BI.Searcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.editor = BI.createWidget(o.el, {\n type: \"bi.search_editor\"\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n vgap: o.vgap,\n hgap: o.hgap,\n items: [this.editor]\n });\n o.isDefaultInit && (this._assertPopupView());\n\n var search = BI.debounce(BI.bind(this._search, this), BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function (type) {\n switch (type) {\n case BI.Events.STARTEDIT:\n self._startSearch();\n break;\n case BI.Events.EMPTY:\n self._stopSearch();\n break;\n case BI.Events.CHANGE:\n search();\n break;\n case BI.Events.PAUSE:\n self._pauseSearch();\n break;\n }\n });\n },\n\n _assertPopupView: function () {\n var self = this, o = this.options;\n if ((o.masker && !BI.Maskers.has(this.getName())) || (o.masker === false && !this.popupView)) {\n this.popupView = BI.createWidget(o.popup, {\n type: \"bi.searcher_view\",\n chooseType: o.chooseType\n });\n this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n if (o.isAutoSync) {\n var values = o.adapter && o.adapter.getValue();\n if (!obj.isSelected()) {\n o.adapter && o.adapter.setValue(BI.deepWithout(values, obj.getValue()));\n } else {\n switch (o.chooseType) {\n case BI.ButtonGroup.CHOOSE_TYPE_SINGLE:\n o.adapter && o.adapter.setValue([obj.getValue()]);\n break;\n case BI.ButtonGroup.CHOOSE_TYPE_MULTI:\n values.push(obj.getValue());\n o.adapter && o.adapter.setValue(values);\n break;\n }\n }\n }\n self.fireEvent(BI.Searcher.EVENT_CHANGE, value, obj);\n }\n });\n BI.nextTick(function () {\n self.fireEvent(BI.Searcher.EVENT_AFTER_INIT);\n });\n }\n if (o.masker && !BI.Maskers.has(this.getName())) {\n BI.Maskers.create(this.getName(), o.adapter, BI.extend({\n container: this,\n render: this.popupView\n }, o.masker), this);\n }\n },\n\n _startSearch: function () {\n this._assertPopupView();\n this._stop = false;\n this._isSearching = true;\n this.fireEvent(BI.Searcher.EVENT_START);\n this.popupView.startSearch && this.popupView.startSearch();\n // 搜索前先清空dom\n // BI.Maskers.get(this.getName()).empty();\n BI.nextTick(function (name) {\n BI.Maskers.show(name);\n }, this.getName());\n },\n\n _pauseSearch: function () {\n var o = this.options, name = this.getName();\n this._stop = true;\n BI.nextTick(function (name) {\n BI.Maskers.hide(name);\n }, this.getName());\n if (this._isSearching === true) {\n this.popupView && this.popupView.pauseSearch && this.popupView.pauseSearch();\n this.fireEvent(BI.Searcher.EVENT_PAUSE);\n }\n this._isSearching = false;\n },\n\n _stopSearch: function () {\n var o = this.options, name = this.getName();\n this._stop = true;\n BI.Maskers.hide(name);\n if (this._isSearching === true) {\n this.popupView && this.popupView.stopSearch && this.popupView.stopSearch();\n this.fireEvent(BI.Searcher.EVENT_STOP);\n }\n this._isSearching = false;\n },\n\n _search: function () {\n var self = this, o = this.options, keyword = o.allowSearchBlank ? this.editor.getValue() : this._getLastSearchKeyword();\n if (keyword === \"\" || this._stop) {\n return;\n }\n if (o.isAutoSearch) {\n var items = (o.adapter && ((o.adapter.getItems && o.adapter.getItems()) || o.adapter.attr(\"items\"))) || [];\n var finding = BI.Func.getSearchResult(items, keyword);\n var match = finding.match, find = finding.find;\n this.popupView.populate(find, match, keyword);\n o.isAutoSync && o.adapter && o.adapter.getValue && this.popupView.setValue(o.adapter.getValue());\n self.fireEvent(BI.Searcher.EVENT_SEARCHING);\n return;\n }\n this.popupView.loading && this.popupView.loading();\n o.onSearch({\n times: 1,\n keyword: keyword,\n selectedValues: o.adapter && o.adapter.getValue()\n }, function (searchResult, matchResult) {\n if (!self._stop) {\n var args = [].slice.call(arguments);\n if (args.length > 0) {\n args.push(keyword);\n }\n BI.Maskers.show(self.getName());\n self.popupView.populate.apply(self.popupView, args);\n o.isAutoSync && o.adapter && o.adapter.getValue && self.popupView.setValue(o.adapter.getValue());\n self.popupView.loaded && self.popupView.loaded();\n self.fireEvent(BI.Searcher.EVENT_SEARCHING);\n }\n });\n },\n\n _getLastSearchKeyword: function () {\n if (this.isValid()) {\n var res = this.editor.getValue().match(/[\\S]+/g);\n return BI.isNull(res) ? \"\" : res[res.length - 1];\n }\n },\n\n setAdapter: function (adapter) {\n this.options.adapter = adapter;\n BI.Maskers.remove(this.getName());\n },\n\n doSearch: function () {\n if (this.isSearching()) {\n this._search();\n }\n },\n\n stopSearch: function () {\n this._stopSearch();// 先停止搜索,然后再去设置editor为空\n // important:停止搜索必须退出编辑状态,这里必须加上try(input框不显示时blur会抛异常)\n try {\n this.editor.blur();\n } catch (e) {\n if (!this.editor.blur) {\n throw new Error(\"editor没有实现blur方法\");\n }\n } finally {\n this.editor.setValue(\"\");\n }\n },\n\n isSearching: function () {\n return this._isSearching;\n },\n\n isViewVisible: function () {\n return this.editor.isEnabled() && BI.Maskers.isVisible(this.getName());\n },\n\n getView: function () {\n return this.popupView;\n },\n\n hasMatched: function () {\n this._assertPopupView();\n return this.popupView.hasMatched();\n },\n\n adjustHeight: function () {\n if (BI.Maskers.has(this.getName()) && BI.Maskers.get(this.getName()).isVisible()) {\n BI.Maskers.show(this.getName());\n }\n },\n\n adjustView: function () {\n this.isViewVisible() && BI.Maskers.show(this.getName());\n },\n\n setValue: function (v) {\n if (BI.isNull(this.popupView)) {\n this.options.popup.value = v;\n } else {\n this.popupView.setValue(v);\n }\n },\n\n getKeyword: function () {\n return this._getLastSearchKeyword();\n },\n\n getKeywords: function () {\n return this.editor.getKeywords();\n },\n\n getValue: function () {\n var o = this.options;\n if (o.isAutoSync && o.adapter && o.adapter.getValue) {\n return o.adapter.getValue();\n }\n if (this.isSearching()) {\n return this.popupView.getValue();\n } else if (o.adapter && o.adapter.getValue) {\n return o.adapter.getValue();\n }\n if (BI.isNull(this.popupView)) {\n return o.popup.value;\n }\n return this.popupView.getValue();\n\n },\n\n populate: function (result, searchResult, keyword) {\n var o = this.options;\n this._assertPopupView();\n this.popupView.populate.apply(this.popupView, arguments);\n if (o.isAutoSync && o.adapter && o.adapter.getValue) {\n this.popupView.setValue(o.adapter.getValue());\n }\n },\n\n empty: function () {\n this.popupView && this.popupView.empty();\n },\n\n destroyed: function () {\n BI.Maskers.remove(this.getName());\n }\n});\nBI.Searcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.Searcher.EVENT_START = \"EVENT_START\";\nBI.Searcher.EVENT_STOP = \"EVENT_STOP\";\nBI.Searcher.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.Searcher.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.Searcher.EVENT_AFTER_INIT = \"EVENT_AFTER_INIT\";\n\nBI.shortcut(\"bi.searcher\", BI.Searcher);","/**\n *\n * 切换显示或隐藏面板\n *\n * Created by GUY on 2015/11/2.\n * @class BI.Switcher\n * @extends BI.Widget\n */\nBI.Switcher = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Switcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-switcher\",\n direction: BI.Direction.Top,\n trigger: \"click\",\n toggle: true,\n el: {},\n popup: {},\n adapter: null,\n masker: {},\n switcherClass: \"bi-switcher-popup\",\n hoverClass: \"bi-switcher-hover\"\n });\n },\n\n _init: function () {\n BI.Switcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this._initSwitcher();\n this._initPullDownAction();\n this.switcher.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (self.isEnabled() && self.isValid()) {\n if (type === BI.Events.EXPAND) {\n self._popupView();\n }\n if (type === BI.Events.COLLAPSE) {\n self._hideView();\n }\n if (type === BI.Events.EXPAND) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.fireEvent(BI.Switcher.EVENT_EXPAND);\n }\n if (type === BI.Events.COLLAPSE) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.isViewVisible() && self.fireEvent(BI.Switcher.EVENT_COLLAPSE);\n }\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.Switcher.EVENT_TRIGGER_CHANGE, value, obj);\n }\n }\n });\n\n this.element.hover(function () {\n if (self.isEnabled() && self.switcher.isEnabled()) {\n self.element.addClass(o.hoverClass);\n }\n }, function () {\n if (self.isEnabled() && self.switcher.isEnabled()) {\n self.element.removeClass(o.hoverClass);\n }\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [\n {el: this.switcher}\n ]\n });\n o.isDefaultInit && (this._assertPopupView());\n },\n\n _toggle: function () {\n this._assertPopupView();\n if (this.isExpanded()) {\n this._hideView();\n } else {\n if (this.isEnabled()) {\n this._popupView();\n }\n }\n },\n\n _initPullDownAction: function () {\n var self = this, o = this.options;\n var evs = this.options.trigger.split(\",\");\n BI.each(evs, function (i, e) {\n switch (e) {\n case \"hover\":\n self.element[e](function (e) {\n if (self.isEnabled() && self.switcher.isEnabled()) {\n self._popupView();\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, \"\", self.switcher);\n self.fireEvent(BI.Switcher.EVENT_EXPAND);\n }\n }, function () {\n if (self.isEnabled() && self.switcher.isEnabled() && o.toggle) {\n self._hideView();\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.COLLAPSE, \"\", self.switcher);\n self.fireEvent(BI.Switcher.EVENT_COLLAPSE);\n }\n });\n break;\n default :\n if (e) {\n self.element.off(e + \".\" + self.getName()).on(e + \".\" + self.getName(), BI.debounce(function (e) {\n if (self.switcher.element.__isMouseInBounds__(e)) {\n if (self.isEnabled() && self.switcher.isEnabled()) {\n o.toggle ? self._toggle() : self._popupView();\n if (self.isExpanded()) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, \"\", self.switcher);\n self.fireEvent(BI.Switcher.EVENT_EXPAND);\n } else {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.COLLAPSE, \"\", self.switcher);\n self.fireEvent(BI.Switcher.EVENT_COLLAPSE);\n }\n }\n }\n }, BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n }));\n }\n break;\n }\n });\n },\n\n _initSwitcher: function () {\n this.switcher = BI.createWidget(this.options.el, {\n value: this.options.value\n });\n },\n\n _assertPopupView: function () {\n var self = this, o = this.options;\n if (!this._created) {\n this.popupView = BI.createWidget(o.popup, {\n type: \"bi.button_group\",\n element: o.adapter && BI.Maskers.create(this.getName(), o.adapter, BI.extend({container: this}, o.masker)),\n cls: \"switcher-popup\",\n layouts: [{\n type: \"bi.vertical\",\n hgap: 0,\n vgap: 0\n }],\n value: o.value\n }, this);\n this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.Switcher.EVENT_CHANGE, value, obj);\n }\n });\n if (o.direction !== BI.Direction.Custom && !o.adapter) {\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [\n {el: this.popupView}\n ]\n });\n }\n this._created = true;\n BI.nextTick(function () {\n self.fireEvent(BI.Switcher.EVENT_AFTER_INIT);\n });\n }\n },\n\n _hideView: function () {\n this.fireEvent(BI.Switcher.EVENT_BEFORE_HIDEVIEW);\n var self = this, o = this.options;\n o.adapter ? BI.Maskers.hide(self.getName()) : (self.popupView && self.popupView.setVisible(false));\n BI.nextTick(function () {\n o.adapter ? BI.Maskers.hide(self.getName()) : (self.popupView && self.popupView.setVisible(false));\n self.element.removeClass(o.switcherClass);\n self.fireEvent(BI.Switcher.EVENT_AFTER_HIDEVIEW);\n });\n },\n\n _popupView: function () {\n var self = this, o = this.options;\n this._assertPopupView();\n this.fireEvent(BI.Switcher.EVENT_BEFORE_POPUPVIEW);\n o.adapter ? BI.Maskers.show(this.getName()) : self.popupView.setVisible(true);\n BI.nextTick(function (name) {\n o.adapter ? BI.Maskers.show(name) : self.popupView.setVisible(true);\n self.element.addClass(o.switcherClass);\n self.fireEvent(BI.Switcher.EVENT_AFTER_POPUPVIEW);\n }, this.getName());\n },\n\n populate: function (items) {\n this._assertPopupView();\n this.popupView.populate.apply(this.popupView, arguments);\n this.switcher.populate.apply(this.switcher, arguments);\n },\n\n _setEnable: function (arg) {\n BI.Switcher.superclass._setEnable.apply(this, arguments);\n !arg && this.isViewVisible() && this._hideView();\n },\n\n setValue: function (v) {\n this.switcher.setValue(v);\n if (BI.isNull(this.popupView)) {\n this.options.popup.value = v;\n } else {\n this.popupView.setValue(v);\n }\n },\n\n getValue: function () {\n if (BI.isNull(this.popupView)) {\n return this.options.popup.value;\n } else {\n return this.popupView.getValue();\n }\n },\n\n setAdapter: function (adapter) {\n this.options.adapter = adapter;\n BI.Maskers.remove(this.getName());\n },\n\n isViewVisible: function () {\n return this.isEnabled() && this.switcher.isEnabled() &&\n (this.options.adapter ? BI.Maskers.isVisible(this.getName()) : (this.popupView && this.popupView.isVisible()));\n },\n\n isExpanded: function () {\n return this.isViewVisible();\n },\n\n showView: function () {\n if (this.isEnabled() && this.switcher.isEnabled()) {\n this._popupView();\n }\n },\n\n hideView: function () {\n this._hideView();\n },\n\n getView: function () {\n return this.popupView;\n },\n\n adjustView: function () {\n this.isViewVisible() && BI.Maskers.show(this.getName());\n },\n\n getAllLeaves: function () {\n return this.popupView && this.popupView.getAllLeaves();\n },\n\n getNodeById: function (id) {\n if (this.switcher.attr(\"id\") === id) {\n return this.switcher;\n }\n return this.popupView && this.popupView.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n if (this.switcher.getValue() === value) {\n return this.switcher;\n }\n return this.popupView && this.popupView.getNodeByValue(value);\n },\n\n empty: function () {\n this.popupView && this.popupView.empty();\n }\n});\nBI.Switcher.EVENT_EXPAND = \"EVENT_EXPAND\";\nBI.Switcher.EVENT_COLLAPSE = \"EVENT_COLLAPSE\";\nBI.Switcher.EVENT_TRIGGER_CHANGE = \"EVENT_TRIGGER_CHANGE\";\nBI.Switcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.Switcher.EVENT_AFTER_INIT = \"EVENT_AFTER_INIT\";\n\n\nBI.Switcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.Switcher.EVENT_AFTER_POPUPVIEW = \"EVENT_AFTER_POPUPVIEW\";\nBI.Switcher.EVENT_BEFORE_HIDEVIEW = \"EVENT_BEFORE_HIDEVIEW\";\nBI.Switcher.EVENT_AFTER_HIDEVIEW = \"EVENT_AFTER_HIDEVIEW\";\n\nBI.shortcut(\"bi.switcher\", BI.Switcher);","/**\n * Created by GUY on 2015/6/26.\n */\n\nBI.Tab = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Tab.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-tab\",\n direction: \"top\", // top, bottom, left, right, custom\n single: false, // 是不是单页面\n logic: {\n dynamic: false\n },\n showIndex: false,\n tab: false,\n cardCreator: function (v) {\n return BI.createWidget();\n }\n });\n },\n\n render: function () {\n var self = this, o = this.options;\n if (BI.isObject(o.tab)) {\n this.tab = BI.createWidget(this.options.tab, {type: \"bi.button_group\"});\n this.tab.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n }\n this.cardMap = {};\n this.layout = BI.createWidget({\n type: \"bi.card\"\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tab, this.layout)\n }))));\n\n var listener = new BI.ShowListener({\n eventObj: this.tab,\n cardLayout: this.layout,\n cardCreator: function (v) {\n var card = o.cardCreator.apply(self, arguments);\n self.cardMap[v] = card;\n return card;\n },\n afterCardShow: function (v) {\n self._deleteOtherCards(v);\n self.curr = v;\n }\n });\n listener.on(BI.ShowListener.EVENT_CHANGE, function (value) {\n self.fireEvent(BI.Tab.EVENT_CHANGE, value, self);\n });\n },\n\n _deleteOtherCards: function (currCardName) {\n var self = this, o = this.options;\n if (o.single === true) {\n BI.each(this.cardMap, function (name, card) {\n if (name !== (currCardName + \"\")) {\n self.layout.deleteCardByName(name);\n delete self.cardMap[name];\n }\n });\n }\n },\n\n _assertCard: function (v) {\n if (!this.layout.isCardExisted(v)) {\n var card = this.options.cardCreator(v);\n this.cardMap[v] = card;\n this.layout.addCardByName(v, card);\n }\n },\n\n mounted: function () {\n var o = this.options;\n if (o.showIndex !== false) {\n this.setSelect(o.showIndex);\n }\n },\n\n setSelect: function (v) {\n this.tab && this.tab.setValue(v);\n this._assertCard(v);\n this.layout.showCardByName(v);\n this._deleteOtherCards(v);\n if (this.curr !== v) {\n this.curr = v;\n }\n },\n\n removeTab: function (cardname) {\n var self = this, o = this.options;\n BI.any(this.cardMap, function (name, card) {\n if (BI.isEqual(name, (cardname + \"\"))) {\n self.layout.deleteCardByName(name);\n delete self.cardMap[name];\n return true;\n }\n });\n },\n\n getSelect: function () {\n return this.curr;\n },\n\n getSelectedTab: function () {\n return this.layout.getShowingCard();\n },\n\n getTab: function (v) {\n this._assertCard(v);\n return this.layout.getCardByName(v);\n },\n\n setValue: function (v) {\n var card = this.layout.getShowingCard();\n if (card) {\n card.setValue(v);\n }\n },\n\n getValue: function () {\n var card = this.layout.getShowingCard();\n if (card) {\n return card.getValue();\n }\n },\n\n populate: function () {\n var card = this.layout.getShowingCard();\n if (card) {\n return card.populate && card.populate.apply(card, arguments);\n }\n },\n\n empty: function () {\n this.layout.deleteAllCard();\n this.cardMap = {};\n },\n\n destroy: function () {\n this.cardMap = {};\n BI.Tab.superclass.destroy.apply(this, arguments);\n }\n});\nBI.Tab.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.tab\", BI.Tab);","/**\n * 表示当前对象\n *\n * Created by GUY on 2015/9/7.\n * @class BI.EL\n * @extends BI.Widget\n */\nBI.EL = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.EL.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-el\",\n el: {},\n layout: {}\n });\n },\n _init: function () {\n BI.EL.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.ele = BI.createWidget(o.el);\n BI.createWidget(o.layout, {\n type: \"bi.adaptive\",\n element: this,\n items: [this.ele]\n });\n this.ele.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n },\n\n setValue: function (v) {\n this.ele.setValue(v);\n },\n\n getValue: function () {\n return this.ele.getValue();\n },\n\n populate: function () {\n this.ele.populate.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.el\", BI.EL);","/**\n * z-index在1亿层级\n * 弹出提示消息框,用于模拟阻塞操作(通过回调函数实现)\n * @class BI.Msg\n */\nBI.Msg = function () {\n\n var $mask, $pop;\n\n var messageShows = [];\n\n var toastStack = [];\n\n return {\n alert: function (title, message, callback) {\n this._show(false, title, message, callback);\n },\n confirm: function (title, message, callback) {\n this._show(true, title, message, callback);\n },\n prompt: function (title, message, value, callback, min_width) {\n // BI.Msg.prompt(title, message, value, callback, min_width);\n },\n toast: function (message, options, context) {\n options = options || {};\n context = context || BI.Widget._renderEngine.createElement(\"body\");\n var level = options.level || \"normal\";\n var autoClose = BI.isNull(options.autoClose) ? true : options.autoClose;\n var callback = BI.isFunction(options.callback) ? options.callback : BI.emptyFn;\n var toast = BI.createWidget({\n type: \"bi.toast\",\n cls: \"bi-message-animate bi-message-leave\",\n level: level,\n autoClose: autoClose,\n text: message,\n listeners: [{\n eventName: BI.Toast.EVENT_DESTORY,\n action: function () {\n BI.remove(toastStack, toast.element);\n var _height = 10;\n BI.each(toastStack, function (i, element) {\n element.css({\"top\": _height});\n _height += element.outerHeight() + 10;\n });\n callback();\n }\n }]\n });\n var height = 10;\n BI.each(toastStack, function (i, element) {\n height += element.outerHeight() + 10;\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: context,\n items: [{\n el: toast,\n left: \"50%\",\n top: height\n }]\n });\n toastStack.push(toast.element);\n toast.element.css({\"margin-left\": -1 * toast.element.outerWidth() / 2});\n toast.element.removeClass(\"bi-message-leave\").addClass(\"bi-message-enter\");\n\n autoClose && BI.delay(function () {\n toast.element.removeClass(\"bi-message-enter\").addClass(\"bi-message-leave\");\n toast.destroy();\n }, 5000);\n },\n _show: function (hasCancel, title, message, callback) {\n BI.isNull($mask) && ($mask = BI.Widget._renderEngine.createElement(\"<div class=\\\"bi-z-index-mask\\\">\").css({\n position: \"absolute\",\n zIndex: BI.zIndex_tip - 2,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n opacity: 0.5\n }).appendTo(\"body\"));\n $pop = BI.Widget._renderEngine.createElement(\"<div class=\\\"bi-message-depend\\\">\").css({\n position: \"absolute\",\n zIndex: BI.zIndex_tip - 1,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }).appendTo(\"body\");\n var close = function () {\n messageShows[messageShows.length - 1].destroy();\n messageShows.pop();\n if (messageShows.length === 0) {\n $mask.remove();\n $mask = null;\n }\n };\n var controlItems = [];\n if (hasCancel === true) {\n controlItems.push({\n el: {\n type: \"bi.button\",\n text: BI.i18nText(\"BI-Basic_Cancel\"),\n level: \"ignore\",\n handler: function () {\n close();\n if (BI.isFunction(callback)) {\n callback.apply(null, [false]);\n }\n }\n }\n });\n }\n controlItems.push({\n el: {\n type: \"bi.button\",\n text: BI.i18nText(\"BI-Basic_OK\"),\n handler: function () {\n close();\n if (BI.isFunction(callback)) {\n callback.apply(null, [true]);\n }\n }\n }\n });\n var conf = {\n element: $pop,\n type: \"bi.center_adapt\",\n items: [\n {\n type: \"bi.border\",\n cls: \"bi-card\",\n items: {\n north: {\n el: {\n type: \"bi.border\",\n cls: \"bi-message-title bi-background\",\n items: {\n center: {\n el: {\n type: \"bi.label\",\n cls: \"bi-font-bold\",\n text: title || BI.i18nText(\"BI-Basic_Prompt\"),\n textAlign: \"left\",\n hgap: 20,\n height: 40\n }\n },\n east: {\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-message-close close-font\",\n // height: 50,\n handler: function () {\n close();\n if (BI.isFunction(callback)) {\n callback.apply(null, [false]);\n }\n }\n },\n width: 60\n }\n }\n },\n height: 40\n },\n center: {\n el: {\n type: \"bi.label\",\n vgap: 10,\n hgap: 20,\n whiteSpace: \"normal\",\n text: message\n }\n },\n south: {\n el: {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.right_vertical_adapt\",\n lgap: 10,\n items: controlItems\n },\n top: 0,\n left: 20,\n right: 20,\n bottom: 0\n }]\n\n },\n height: 44\n }\n },\n width: 450,\n height: 200\n }\n ]\n };\n\n messageShows[messageShows.length] = BI.createWidget(conf);\n }\n };\n}();","/**\n * GridView\n *\n * Created by GUY on 2016/1/11.\n * @class BI.GridView\n * @extends BI.Widget\n */\nBI.GridView = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.GridView.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-grid-view\",\n // width: 400, //必设\n // height: 300, //必设\n overflowX: true,\n overflowY: true,\n overscanColumnCount: 0,\n overscanRowCount: 0,\n rowHeightGetter: BI.emptyFn, // number类型或function类型\n columnWidthGetter: BI.emptyFn, // number类型或function类型\n // estimatedColumnSize: 100, //columnWidthGetter为function时必设\n // estimatedRowSize: 30, //rowHeightGetter为function时必设\n scrollLeft: 0,\n scrollTop: 0,\n items: []\n });\n },\n\n _init: function () {\n BI.GridView.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.renderedCells = [];\n this.renderedKeys = [];\n this.renderRange = {};\n this._scrollLock = false;\n this._debounceRelease = BI.debounce(function () {\n self._scrollLock = false;\n }, 1000 / 60);\n this.container = BI.createWidget({\n type: \"bi.absolute\"\n });\n this.element.scroll(function () {\n if (self._scrollLock === true) {\n return;\n }\n o.scrollLeft = self.element.scrollLeft();\n o.scrollTop = self.element.scrollTop();\n self._calculateChildrenToRender();\n self.fireEvent(BI.GridView.EVENT_SCROLL, {\n scrollLeft: o.scrollLeft,\n scrollTop: o.scrollTop\n });\n });\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n scrollable: o.overflowX === true && o.overflowY === true,\n scrolly: o.overflowX === false && o.overflowY === true,\n scrollx: o.overflowX === true && o.overflowY === false,\n items: [this.container]\n });\n if (o.items.length > 0) {\n this._populate();\n }\n },\n\n mounted: function () {\n var o = this.options;\n if (o.scrollLeft !== 0 || o.scrollTop !== 0) {\n this.element.scrollTop(o.scrollTop);\n this.element.scrollLeft(o.scrollLeft);\n }\n },\n\n _getOverscanIndices: function (cellCount, overscanCellsCount, startIndex, stopIndex) {\n return {\n overscanStartIndex: Math.max(0, startIndex - overscanCellsCount),\n overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount)\n };\n },\n\n _calculateChildrenToRender: function () {\n var self = this, o = this.options;\n\n var width = o.width, height = o.height, scrollLeft = BI.clamp(o.scrollLeft, 0, this._getMaxScrollLeft()),\n scrollTop = BI.clamp(o.scrollTop, 0, this._getMaxScrollTop()),\n overscanColumnCount = o.overscanColumnCount, overscanRowCount = o.overscanRowCount;\n\n if (height > 0 && width > 0) {\n var visibleColumnIndices = this._columnSizeAndPositionManager.getVisibleCellRange(width, scrollLeft);\n var visibleRowIndices = this._rowSizeAndPositionManager.getVisibleCellRange(height, scrollTop);\n\n if (BI.isEmpty(visibleColumnIndices) || BI.isEmpty(visibleRowIndices)) {\n return;\n }\n var horizontalOffsetAdjustment = this._columnSizeAndPositionManager.getOffsetAdjustment(width, scrollLeft);\n var verticalOffsetAdjustment = this._rowSizeAndPositionManager.getOffsetAdjustment(height, scrollTop);\n\n this._renderedColumnStartIndex = visibleColumnIndices.start;\n this._renderedColumnStopIndex = visibleColumnIndices.stop;\n this._renderedRowStartIndex = visibleRowIndices.start;\n this._renderedRowStopIndex = visibleRowIndices.stop;\n\n var overscanColumnIndices = this._getOverscanIndices(this.columnCount, overscanColumnCount, this._renderedColumnStartIndex, this._renderedColumnStopIndex);\n\n var overscanRowIndices = this._getOverscanIndices(this.rowCount, overscanRowCount, this._renderedRowStartIndex, this._renderedRowStopIndex);\n\n var columnStartIndex = overscanColumnIndices.overscanStartIndex;\n var columnStopIndex = overscanColumnIndices.overscanStopIndex;\n var rowStartIndex = overscanRowIndices.overscanStartIndex;\n var rowStopIndex = overscanRowIndices.overscanStopIndex;\n\n // 算区间size\n var minRowDatum = this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowStartIndex);\n var minColumnDatum = this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnStartIndex);\n var maxRowDatum = this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowStopIndex);\n var maxColumnDatum = this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnStopIndex);\n var top = minRowDatum.offset + verticalOffsetAdjustment;\n var left = minColumnDatum.offset + horizontalOffsetAdjustment;\n var bottom = maxRowDatum.offset + verticalOffsetAdjustment + maxRowDatum.size;\n var right = maxColumnDatum.offset + horizontalOffsetAdjustment + maxColumnDatum.size;\n // 如果滚动的区间并没有超出渲染的范围\n if (top >= this.renderRange.minY && bottom <= this.renderRange.maxY && left >= this.renderRange.minX && right <= this.renderRange.maxX) {\n return;\n }\n\n var renderedCells = [], renderedKeys = {}, renderedWidgets = {};\n var minX = this._getMaxScrollLeft(), minY = this._getMaxScrollTop(), maxX = 0, maxY = 0;\n var count = 0;\n for (var rowIndex = rowStartIndex; rowIndex <= rowStopIndex; rowIndex++) {\n var rowDatum = this._rowSizeAndPositionManager.getSizeAndPositionOfCell(rowIndex);\n\n for (var columnIndex = columnStartIndex; columnIndex <= columnStopIndex; columnIndex++) {\n var key = rowIndex + \"-\" + columnIndex;\n var columnDatum = this._columnSizeAndPositionManager.getSizeAndPositionOfCell(columnIndex);\n\n var index = this.renderedKeys[key] && this.renderedKeys[key][2];\n var child;\n if (index >= 0) {\n if (columnDatum.size !== this.renderedCells[index]._width) {\n this.renderedCells[index]._width = columnDatum.size;\n this.renderedCells[index].el.setWidth(columnDatum.size);\n }\n if (rowDatum.size !== this.renderedCells[index]._height) {\n this.renderedCells[index]._height = rowDatum.size;\n this.renderedCells[index].el.setHeight(rowDatum.size);\n }\n if (this.renderedCells[index]._left !== columnDatum.offset + horizontalOffsetAdjustment) {\n this.renderedCells[index].el.element.css(\"left\", (columnDatum.offset + horizontalOffsetAdjustment) + \"px\");\n }\n if (this.renderedCells[index]._top !== rowDatum.offset + verticalOffsetAdjustment) {\n this.renderedCells[index].el.element.css(\"top\", (rowDatum.offset + verticalOffsetAdjustment) + \"px\");\n }\n renderedCells.push(child = this.renderedCells[index]);\n } else {\n child = BI.createWidget(BI.extend({\n type: \"bi.label\",\n width: columnDatum.size,\n height: rowDatum.size\n }, o.items[rowIndex][columnIndex], {\n cls: (o.items[rowIndex][columnIndex].cls || \"\") + \" grid-cell\" + (rowIndex === 0 ? \" first-row\" : \"\") + (columnIndex === 0 ? \" first-col\" : \"\"),\n _rowIndex: rowIndex,\n _columnIndex: columnIndex,\n _left: columnDatum.offset + horizontalOffsetAdjustment,\n _top: rowDatum.offset + verticalOffsetAdjustment\n }), this);\n renderedCells.push({\n el: child,\n left: columnDatum.offset + horizontalOffsetAdjustment,\n top: rowDatum.offset + verticalOffsetAdjustment,\n _left: columnDatum.offset + horizontalOffsetAdjustment,\n _top: rowDatum.offset + verticalOffsetAdjustment,\n _width: columnDatum.size,\n _height: rowDatum.size\n });\n }\n minX = Math.min(minX, columnDatum.offset + horizontalOffsetAdjustment);\n maxX = Math.max(maxX, columnDatum.offset + horizontalOffsetAdjustment + columnDatum.size);\n minY = Math.min(minY, rowDatum.offset + verticalOffsetAdjustment);\n maxY = Math.max(maxY, rowDatum.offset + verticalOffsetAdjustment + rowDatum.size);\n renderedKeys[key] = [rowIndex, columnIndex, count];\n renderedWidgets[count] = child;\n count++;\n }\n }\n // 已存在的, 需要添加的和需要删除的\n var existSet = {}, addSet = {}, deleteArray = [];\n BI.each(renderedKeys, function (i, key) {\n if (self.renderedKeys[i]) {\n existSet[i] = key;\n } else {\n addSet[i] = key;\n }\n });\n BI.each(this.renderedKeys, function (i, key) {\n if (existSet[i]) {\n return;\n }\n if (addSet[i]) {\n return;\n }\n deleteArray.push(key[2]);\n });\n BI.each(deleteArray, function (i, index) {\n // 性能优化,不调用destroy方法防止触发destroy事件\n self.renderedCells[index].el._destroy();\n });\n var addedItems = [];\n BI.each(addSet, function (index, key) {\n addedItems.push(renderedCells[key[2]]);\n });\n // 与listview一样, 给上下文\n this.container.addItems(addedItems, this);\n // 拦截父子级关系\n this.container._children = renderedWidgets;\n this.container.attr(\"items\", renderedCells);\n this.renderedCells = renderedCells;\n this.renderedKeys = renderedKeys;\n this.renderRange = {minX: minX, minY: minY, maxX: maxX, maxY: maxY};\n }\n },\n\n /**\n * 获取真实的可滚动的最大宽度\n * 对于grid_view如果没有全部渲染过,this._columnSizeAndPositionManager.getTotalSize获取的宽度是不准确的\n * 因此在调用setScrollLeft等函数时会造成没法移动到最右端(预估可移动具体太短)\n */\n _getRealMaxScrollLeft: function () {\n var o = this.options;\n var totalWidth = 0;\n BI.count(0, this.columnCount, function (index) {\n totalWidth += o.columnWidthGetter(index);\n });\n return Math.max(0, totalWidth - this.options.width + (this.options.overflowX ? BI.DOM.getScrollWidth() : 0));\n },\n\n _getMaxScrollLeft: function () {\n return Math.max(0, this._columnSizeAndPositionManager.getTotalSize() - this.options.width + (this.options.overflowX ? BI.DOM.getScrollWidth() : 0));\n },\n\n _getMaxScrollTop: function () {\n return Math.max(0, this._rowSizeAndPositionManager.getTotalSize() - this.options.height + (this.options.overflowY ? BI.DOM.getScrollWidth() : 0));\n },\n\n _populate: function (items) {\n var self = this, o = this.options;\n this._reRange();\n this.columnCount = 0;\n this.rowCount = 0;\n if (items && items !== this.options.items) {\n this.options.items = items;\n }\n if (BI.isNumber(o.columnCount)) {\n this.columnCount = o.columnCount;\n } else if (o.items.length > 0) {\n this.columnCount = o.items[0].length;\n }\n if (BI.isNumber(o.rowCount)) {\n this.rowCount = o.rowCount;\n } else {\n this.rowCount = o.items.length;\n }\n this.container.setWidth(this.columnCount * o.estimatedColumnSize);\n this.container.setHeight(this.rowCount * o.estimatedRowSize);\n\n this._columnSizeAndPositionManager = new BI.ScalingCellSizeAndPositionManager(this.columnCount, o.columnWidthGetter, o.estimatedColumnSize);\n this._rowSizeAndPositionManager = new BI.ScalingCellSizeAndPositionManager(this.rowCount, o.rowHeightGetter, o.estimatedRowSize);\n\n this._calculateChildrenToRender();\n // 元素未挂载时不能设置scrollTop\n try {\n this.element.scrollTop(o.scrollTop);\n this.element.scrollLeft(o.scrollLeft);\n } catch (e) {\n }\n },\n\n setScrollLeft: function (scrollLeft) {\n if (this.options.scrollLeft === scrollLeft) {\n return;\n }\n this._scrollLock = true;\n this.options.scrollLeft = BI.clamp(scrollLeft || 0, 0, this._getRealMaxScrollLeft());\n this._debounceRelease();\n this._calculateChildrenToRender();\n this.element.scrollLeft(this.options.scrollLeft);\n },\n\n setScrollTop: function (scrollTop) {\n if (this.options.scrollTop === scrollTop) {\n return;\n }\n this._scrollLock = true;\n this.options.scrollTop = BI.clamp(scrollTop || 0, 0, this._getMaxScrollTop());\n this._debounceRelease();\n this._calculateChildrenToRender();\n this.element.scrollTop(this.options.scrollTop);\n },\n\n setColumnCount: function (columnCount) {\n this.options.columnCount = columnCount;\n },\n\n setRowCount: function (rowCount) {\n this.options.rowCount = rowCount;\n },\n\n setOverflowX: function (b) {\n var self = this;\n if (this.options.overflowX !== !!b) {\n this.options.overflowX = !!b;\n BI.nextTick(function () {\n self.element.css({overflowX: b ? \"auto\" : \"hidden\"});\n });\n }\n },\n\n setOverflowY: function (b) {\n var self = this;\n if (this.options.overflowY !== !!b) {\n this.options.overflowY = !!b;\n BI.nextTick(function () {\n self.element.css({overflowY: b ? \"auto\" : \"hidden\"});\n });\n }\n },\n\n getScrollLeft: function () {\n return this.options.scrollLeft;\n },\n\n getScrollTop: function () {\n return this.options.scrollTop;\n },\n\n getMaxScrollLeft: function () {\n return this._getMaxScrollLeft();\n },\n\n getMaxScrollTop: function () {\n return this._getMaxScrollTop();\n },\n\n setEstimatedColumnSize: function (width) {\n this.options.estimatedColumnSize = width;\n },\n\n setEstimatedRowSize: function (height) {\n this.options.estimatedRowSize = height;\n },\n\n // 重新计算children\n _reRange: function () {\n this.renderRange = {};\n },\n\n _clearChildren: function () {\n this.container._children = {};\n this.container.attr(\"items\", []);\n },\n\n restore: function () {\n BI.each(this.renderedCells, function (i, cell) {\n cell.el._destroy();\n });\n this._clearChildren();\n this.renderedCells = [];\n this.renderedKeys = [];\n this.renderRange = {};\n this._scrollLock = false;\n },\n\n populate: function (items) {\n if (items && items !== this.options.items) {\n this.restore();\n }\n this._populate(items);\n }\n});\nBI.GridView.EVENT_SCROLL = \"EVENT_SCROLL\";\nBI.shortcut(\"bi.grid_view\", BI.GridView);\n","/**\n * Popover弹出层,\n * @class BI.Popover\n * @extends BI.Widget\n */\nBI.Popover = BI.inherit(BI.Widget, {\n _constant: {\n SIZE: {\n SMALL: \"small\",\n NORMAL: \"normal\",\n BIG: \"big\"\n },\n HEADER_HEIGHT: 40\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.Popover.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-popover bi-card bi-border-radius\",\n // width: 600,\n // height: 500,\n size: \"normal\", // small, normal, big\n logic: {\n dynamic: false\n },\n header: null,\n body: null,\n footer: null,\n closable: true // BI-40839 是否显示右上角的关闭按钮\n });\n },\n render: function () {\n var self = this, o = this.options;\n this.startX = 0;\n this.startY = 0;\n this.tracker = new BI.MouseMoveTracker(function (deltaX, deltaY) {\n var size = self._calculateSize();\n var W = BI.Widget._renderEngine.createElement(\"body\").width(), H = BI.Widget._renderEngine.createElement(\"body\").height();\n self.startX += deltaX;\n self.startY += deltaY;\n self.element.css({\n left: BI.clamp(self.startX, 0, W - self.element.width()) + \"px\",\n top: BI.clamp(self.startY, 0, H - self.element.height()) + \"px\"\n });\n // BI-12134 没有什么特别好的方法\n BI.Resizers._resize();\n }, function () {\n self.tracker.releaseMouseMoves();\n }, _global);\n var items = [{\n el: {\n type: \"bi.htape\",\n cls: \"bi-message-title bi-header-background\",\n ref: function (_ref) {\n self.dragger = _ref;\n },\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: BI.isPlainObject(o.header) ? BI.createWidget(o.header, {\n extraCls: \"bi-font-bold\"\n }) : {\n type: \"bi.label\",\n cls: \"bi-font-bold\",\n height: this._constant.HEADER_HEIGHT,\n text: o.header,\n title: o.header,\n textAlign: \"left\"\n },\n left: 20,\n top: 0,\n right: 0,\n bottom: 0\n }]\n }, {\n el: o.closable ? {\n type: \"bi.icon_button\",\n cls: \"bi-message-close close-font\",\n height: this._constant.HEADER_HEIGHT,\n handler: function () {\n self.close();\n }\n } : {\n type: \"bi.layout\"\n },\n width: 56\n }],\n height: this._constant.HEADER_HEIGHT\n },\n height: this._constant.HEADER_HEIGHT\n }, {\n el: o.logic.dynamic ? {\n type: \"bi.vertical\",\n scrolly: false,\n cls: \"popover-body\",\n ref: function () {\n self.body = this;\n },\n hgap: 20,\n tgap: 10,\n items: [{\n el: BI.createWidget(o.body)\n }]\n } : {\n type: \"bi.absolute\",\n items: [{\n el: BI.createWidget(o.body),\n left: 20,\n top: 10,\n right: 20,\n bottom: 0\n }]\n }\n }];\n if (o.footer) {\n items.push({\n el: {\n type: \"bi.absolute\",\n items: [{\n el: BI.createWidget(o.footer),\n left: 20,\n top: 0,\n right: 20,\n bottom: 0\n }],\n height: 44\n },\n height: 44\n });\n }\n\n var size = this._calculateSize();\n\n return BI.extend({\n type: o.logic.dynamic ? \"bi.vertical\" : \"bi.vtape\",\n items: items,\n width: size.width\n }, o.logic.dynamic ? {\n type: \"bi.vertical\",\n scrolly: false\n } : {\n type: \"bi.vtape\",\n height: size.height\n });\n },\n\n mounted: function () {\n var self = this, o = this.options;\n this.dragger.element.mousedown(function (e) {\n var pos = self.element.offset();\n self.startX = pos.left;\n self.startY = pos.top;\n self.tracker.captureMouseMoves(e);\n });\n if (o.logic.dynamic) {\n var size = this._calculateSize();\n var height = this.element.height();\n var compareHeight = BI.clamp(height, size.height, 600) - (o.footer ? 84 : 44);\n this.body.element.height(compareHeight);\n }\n },\n\n _calculateSize: function () {\n var o = this.options;\n var size = {};\n if (BI.isNotNull(o.size)) {\n switch (o.size) {\n case this._constant.SIZE.SMALL:\n size.width = 450;\n size.height = 200;\n break;\n case this._constant.SIZE.BIG:\n size.width = 900;\n size.height = 500;\n break;\n default:\n size.width = 550;\n size.height = 500;\n }\n }\n return {\n width: o.width || size.width,\n height: o.height || size.height\n };\n },\n\n hide: function () {\n\n },\n\n open: function () {\n this.show();\n this.fireEvent(BI.Popover.EVENT_OPEN, arguments);\n },\n\n close: function () {\n this.hide();\n this.fireEvent(BI.Popover.EVENT_CLOSE, arguments);\n },\n\n setZindex: function (zindex) {\n this.element.css({\"z-index\": zindex});\n },\n\n destroyed: function () {\n }\n});\n\nBI.shortcut(\"bi.popover\", BI.Popover);\n\nBI.BarPopover = BI.inherit(BI.Popover, {\n _defaultConfig: function () {\n return BI.extend(BI.BarPopover.superclass._defaultConfig.apply(this, arguments), {\n btns: [BI.i18nText(\"BI-Basic_Sure\"), BI.i18nText(\"BI-Basic_Cancel\")]\n });\n },\n\n beforeCreate: function () {\n var self = this, o = this.options;\n o.footer || (o.footer = {\n type: \"bi.right_vertical_adapt\",\n lgap: 10,\n items: [{\n type: \"bi.button\",\n text: this.options.btns[1],\n value: 1,\n level: \"ignore\",\n handler: function (v) {\n self.fireEvent(BI.Popover.EVENT_CANCEL, v);\n self.close(v);\n }\n }, {\n type: \"bi.button\",\n text: this.options.btns[0],\n warningTitle: o.warningTitle,\n value: 0,\n handler: function (v) {\n self.fireEvent(BI.Popover.EVENT_CONFIRM, v);\n self.close(v);\n }\n }]\n });\n }\n});\n\nBI.shortcut(\"bi.bar_popover\", BI.BarPopover);\n\nBI.Popover.EVENT_CLOSE = \"EVENT_CLOSE\";\nBI.Popover.EVENT_OPEN = \"EVENT_OPEN\";\nBI.Popover.EVENT_CANCEL = \"EVENT_CANCEL\";\nBI.Popover.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n","/**\n * 下拉框弹出层, zIndex在1000w\n * @class BI.PopupView\n * @extends BI.Widget\n */\nBI.PopupView = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), {\n _baseCls: \"bi-popup-view\",\n maxWidth: \"auto\",\n minWidth: 100,\n // maxHeight: 200,\n minHeight: 24,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n vgap: 0,\n hgap: 0,\n innerVGap: 0,\n direction: BI.Direction.Top, // 工具栏的方向\n stopEvent: false, // 是否停止mousedown、mouseup事件\n stopPropagation: false, // 是否停止mousedown、mouseup向上冒泡\n logic: {\n dynamic: true\n },\n\n tool: false, // 自定义工具栏\n tabs: [], // 导航栏\n buttons: [], // toolbar栏\n\n el: {\n type: \"bi.button_group\",\n items: [],\n chooseType: 0,\n behaviors: {},\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n });\n },\n\n _init: function () {\n BI.PopupView.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var fn = function (e) {\n e.stopPropagation();\n }, stop = function (e) {\n e.stopEvent();\n return false;\n };\n this.element.css({\n \"z-index\": BI.zIndex_popup,\n \"min-width\": o.minWidth + \"px\",\n \"max-width\": o.maxWidth + \"px\"\n }).bind({click: fn});\n\n this.element.bind(\"mousewheel\", fn);\n\n o.stopPropagation && this.element.bind({mousedown: fn, mouseup: fn, mouseover: fn});\n o.stopEvent && this.element.bind({mousedown: stop, mouseup: stop, mouseover: stop});\n this.tool = this._createTool();\n this.tab = this._createTab();\n this.view = this._createView();\n this.toolbar = this._createToolBar();\n\n this.view.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.PopupView.EVENT_CHANGE);\n }\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, {\n scrolly: false,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n vgap: o.vgap,\n hgap: o.hgap,\n items: BI.LogicFactory.createLogicItemsByDirection(o.direction,\n BI.extend({\n cls: \"list-view-outer bi-card list-view-shadow\"\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tool, this.tab, this.view, this.toolbar)\n })))\n )\n }))));\n },\n\n _createView: function () {\n var o = this.options;\n this.button_group = BI.createWidget(o.el, {type: \"bi.button_group\", value: o.value});\n this.button_group.element.css({\"min-height\": o.minHeight + \"px\", \"padding-top\": o.innerVGap + \"px\", \"padding-bottom\": o.innerVGap + \"px\"});\n return this.button_group;\n },\n\n _createTool: function () {\n var o = this.options;\n if (false === o.tool) {\n return;\n }\n return BI.createWidget(o.tool);\n },\n\n _createTab: function () {\n var o = this.options;\n if (o.tabs.length === 0) {\n return;\n }\n return BI.createWidget({\n type: \"bi.center\",\n cls: \"list-view-tab\",\n height: 25,\n items: o.tabs,\n value: o.value\n });\n },\n\n _createToolBar: function () {\n var o = this.options;\n if (o.buttons.length === 0) {\n return;\n }\n\n return BI.createWidget({\n type: \"bi.center\",\n cls: \"list-view-toolbar bi-high-light bi-split-top\",\n height: 24,\n items: BI.createItems(o.buttons, {\n once: false,\n shadow: true,\n isShadowShowingOnSelected: true\n })\n });\n },\n\n getView: function () {\n return this.view;\n },\n\n populate: function (items) {\n this.view.populate.apply(this.view, arguments);\n },\n\n resetWidth: function (w) {\n this.options.width = w;\n this.element.width(w);\n },\n\n resetHeight: function (h) {\n var tbHeight = this.toolbar ? (this.toolbar.attr(\"height\") || 24) : 0,\n tabHeight = this.tab ? (this.tab.attr(\"height\") || 24) : 0,\n toolHeight = ((this.tool && this.tool.attr(\"height\")) || 24) * ((this.tool && this.tool.isVisible()) ? 1 : 0);\n var resetHeight = h - tbHeight - tabHeight - toolHeight - 2 * this.options.innerVGap;\n this.view.resetHeight ? this.view.resetHeight(resetHeight) :\n this.view.element.css({\"max-height\": resetHeight + \"px\"});\n },\n\n setValue: function (selectedValues) {\n this.tab && this.tab.setValue(selectedValues);\n this.view.setValue(selectedValues);\n },\n\n getValue: function () {\n return this.view.getValue();\n }\n});\nBI.PopupView.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.popup_view\", BI.PopupView);","/**\n * 搜索面板\n *\n * Created by GUY on 2015/9/28.\n * @class BI.SearcherView\n * @extends BI.Pane\n */\n\nBI.SearcherView = BI.inherit(BI.Pane, {\n _defaultConfig: function () {\n var conf = BI.SearcherView.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-searcher-view bi-card\",\n tipText: BI.i18nText(\"BI-No_Select\"),\n chooseType: BI.Selection.Single,\n\n matcher: {// 完全匹配的构造器\n type: \"bi.button_group\",\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n items: [],\n layouts: [{\n type: \"bi.vertical\"\n }]\n },\n searcher: {\n type: \"bi.button_group\",\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n items: [],\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n });\n },\n\n _init: function () {\n BI.SearcherView.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.matcher = BI.createWidget(o.matcher, {\n type: \"bi.button_group\",\n chooseType: o.chooseType,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }],\n value: o.value\n });\n this.matcher.on(BI.Controller.EVENT_CHANGE, function (type, val, ob) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.SearcherView.EVENT_CHANGE, val, ob);\n }\n });\n this.spliter = BI.createWidget({\n type: \"bi.vertical\",\n height: 1,\n hgap: 10,\n items: [{\n type: \"bi.layout\",\n height: 1,\n cls: \"searcher-view-spliter bi-background\"\n }]\n });\n this.searcher = BI.createWidget(o.searcher, {\n type: \"bi.button_group\",\n chooseType: o.chooseType,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }],\n value: o.value\n });\n this.searcher.on(BI.Controller.EVENT_CHANGE, function (type, val, ob) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.SearcherView.EVENT_CHANGE, val, ob);\n }\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n items: [this.matcher, this.spliter, this.searcher]\n });\n },\n\n startSearch: function () {\n\n },\n\n stopSearch: function () {\n\n },\n\n setValue: function (v) {\n this.matcher.setValue(v);\n this.searcher.setValue(v);\n },\n\n getValue: function () {\n return this.matcher.getValue().concat(this.searcher.getValue());\n },\n\n populate: function (searchResult, matchResult, keyword) {\n searchResult || (searchResult = []);\n matchResult || (matchResult = []);\n this.setTipVisible(searchResult.length + matchResult.length === 0);\n this.spliter.setVisible(BI.isNotEmptyArray(matchResult) && BI.isNotEmptyArray(searchResult));\n this.matcher.populate(matchResult, keyword);\n this.searcher.populate(searchResult, keyword);\n },\n\n empty: function () {\n this.searcher.empty();\n this.matcher.empty();\n },\n\n hasMatched: function () {\n return this.matcher.getAllButtons().length > 0;\n }\n});\nBI.SearcherView.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.searcher_view\", BI.SearcherView);","/**\n * 表示当前对象\n *\n * Created by GUY on 2017/5/23.\n * @class BI.ListView\n * @extends BI.Widget\n */\nBI.ListView = BI.inherit(BI.Widget, {\n props: function () {\n return {\n baseCls: \"bi-list-view\",\n overscanHeight: 100,\n blockSize: 10,\n scrollTop: 0,\n el: {},\n items: []\n };\n },\n\n init: function () {\n var self = this;\n this.renderedIndex = -1;\n this.cache = {};\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.vertical\",\n items: [BI.extend({\n type: \"bi.vertical\",\n scrolly: false,\n ref: function () {\n self.container = this;\n }\n }, o.el)],\n element: this\n };\n },\n\n mounted: function () {\n var self = this, o = this.options;\n this._populate();\n this.element.scroll(function (e) {\n o.scrollTop = self.element.scrollTop();\n self._calculateBlocksToRender();\n });\n var lastWidth = this.element.width(),\n lastHeight = this.element.height();\n BI.ResizeDetector.addResizeListener(this, function () {\n var width = self.element.width(),\n height = self.element.height();\n if (width !== lastWidth || height !== lastHeight) {\n lastWidth = width;\n lastHeight = height;\n self._calculateBlocksToRender();\n }\n });\n },\n\n _renderMoreIf: function () {\n var self = this, o = this.options;\n var height = this.element.height();\n var minContentHeight = o.scrollTop + height + o.overscanHeight;\n var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,\n cnt = this.renderedIndex + 1;\n var lastHeight;\n var getElementHeight = function () {\n return self.container.element.height();\n };\n while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {\n var items = o.items.slice(index, index + o.blockSize);\n this.container.addItems(items, this);\n var addedHeight = getElementHeight() - lastHeight;\n this.cache[cnt] = {\n index: index,\n scrollTop: lastHeight,\n height: addedHeight\n };\n this.renderedIndex = cnt;\n cnt++;\n index += o.blockSize;\n }\n },\n\n _calculateBlocksToRender: function () {\n var o = this.options;\n this._renderMoreIf();\n },\n\n _populate: function (items) {\n var o = this.options;\n if (items && this.options.items !== items) {\n this.options.items = items;\n }\n this._calculateBlocksToRender();\n this.element.scrollTop(o.scrollTop);\n },\n\n restore: function () {\n this.renderedIndex = -1;\n this.container.empty();\n this.cache = {};\n },\n\n populate: function (items) {\n if (items && this.options.items !== items) {\n this.restore();\n }\n this._populate(items);\n },\n\n destroyed: function () {\n this.restore();\n }\n});\nBI.shortcut(\"bi.list_view\", BI.ListView);\n\n","/**\n * 表示当前对象\n *\n * Created by GUY on 2017/5/22.\n * @class BI.VirtualList\n * @extends BI.Widget\n */\nBI.VirtualList = BI.inherit(BI.Widget, {\n props: function () {\n return {\n baseCls: \"bi-virtual-list\",\n overscanHeight: 100,\n blockSize: 10,\n scrollTop: 0,\n items: []\n };\n },\n\n init: function () {\n var self = this;\n this.renderedIndex = -1;\n this.cache = {};\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.layout\",\n ref: function () {\n self.topBlank = this;\n }\n }, {\n type: \"bi.vertical\",\n scrolly: false,\n ref: function () {\n self.container = this;\n }\n }, {\n type: \"bi.layout\",\n ref: function () {\n self.bottomBlank = this;\n }\n }],\n element: this\n };\n },\n\n mounted: function () {\n var self = this, o = this.options;\n this._populate();\n this.element.scroll(function (e) {\n o.scrollTop = self.element.scrollTop();\n self._calculateBlocksToRender();\n });\n BI.ResizeDetector.addResizeListener(this, function () {\n self._calculateBlocksToRender();\n });\n },\n\n _renderMoreIf: function () {\n var self = this, o = this.options;\n var height = this.element.height();\n var minContentHeight = o.scrollTop + height + o.overscanHeight;\n var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0,\n cnt = this.renderedIndex + 1;\n var lastHeight;\n var getElementHeight = function () {\n return self.container.element.height() + self.topBlank.element.height() + self.bottomBlank.element.height();\n };\n while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) {\n var items = o.items.slice(index, index + o.blockSize);\n this.container.addItems(items, this);\n var addedHeight = getElementHeight() - lastHeight;\n this.cache[cnt] = {\n index: index,\n scrollTop: lastHeight,\n height: addedHeight\n };\n this.tree.set(cnt, addedHeight);\n this.renderedIndex = cnt;\n cnt++;\n index += o.blockSize;\n }\n },\n\n _calculateBlocksToRender: function () {\n var o = this.options;\n this._renderMoreIf();\n var height = this.element.height();\n var minContentHeightFrom = o.scrollTop - o.overscanHeight;\n var minContentHeightTo = o.scrollTop + height + o.overscanHeight;\n var start = this.tree.greatestLowerBound(minContentHeightFrom);\n var end = this.tree.leastUpperBound(minContentHeightTo);\n var needDestroyed = [];\n for (var i = 0; i < start; i++) {\n var index = this.cache[i].index;\n if (!this.cache[i].destroyed) {\n for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {\n needDestroyed.push(this.container._children[j]);\n this.container._children[j] = null;\n }\n this.cache[i].destroyed = true;\n }\n }\n for (var i = end + 1; i <= this.renderedIndex; i++) {\n var index = this.cache[i].index;\n if (!this.cache[i].destroyed) {\n for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {\n needDestroyed.push(this.container._children[j]);\n this.container._children[j] = null;\n }\n this.cache[i].destroyed = true;\n }\n }\n var firstFragment = BI.Widget._renderEngine.createFragment(), lastFragment = BI.Widget._renderEngine.createFragment();\n var currentFragment = firstFragment;\n for (var i = (start < 0 ? 0 : start); i <= end && i <= this.renderedIndex; i++) {\n var index = this.cache[i].index;\n if (!this.cache[i].destroyed) {\n currentFragment = lastFragment;\n }\n if (this.cache[i].destroyed === true) {\n for (var j = index; j < index + o.blockSize && j < o.items.length; j++) {\n var w = this.container._addElement(j, BI.extend({root: true}, BI.stripEL(o.items[j])), this);\n currentFragment.appendChild(w.element[0]);\n }\n this.cache[i].destroyed = false;\n }\n }\n this.container.element.prepend(firstFragment);\n this.container.element.append(lastFragment);\n this.topBlank.setHeight(this.cache[start < 0 ? 0 : start].scrollTop);\n var lastCache = this.cache[Math.min(end, this.renderedIndex)];\n this.bottomBlank.setHeight(this.tree.sumTo(this.renderedIndex) - lastCache.scrollTop - lastCache.height);\n BI.each(needDestroyed, function (i, child) {\n child && child._destroy();\n });\n },\n\n _populate: function (items) {\n var o = this.options;\n if (items && this.options.items !== items) {\n this.options.items = items;\n }\n this.tree = BI.PrefixIntervalTree.empty(Math.ceil(o.items.length / o.blockSize));\n this._calculateBlocksToRender();\n this.element.scrollTop(o.scrollTop);\n },\n\n _clearChildren: function () {\n BI.each(this.container._children, function (i, cell) {\n cell && cell._destroy();\n });\n this.container._children = {};\n this.container.attr(\"items\", []);\n },\n\n restore: function () {\n this.renderedIndex = -1;\n this._clearChildren();\n this.cache = {};\n this.options.scrollTop = 0;\n // 依赖于cache的占位元素也要初始化\n this.topBlank.setHeight(0);\n this.bottomBlank.setHeight(0);\n },\n\n populate: function (items) {\n if (items && this.options.items !== items) {\n this.restore();\n }\n this._populate(items);\n },\n\n destroyed: function () {\n this.restore();\n }\n});\nBI.shortcut(\"bi.virtual_list\", BI.VirtualList);\n\n","/**\n * 分页控件\n *\n * Created by GUY on 2015/8/31.\n * @class BI.Pager\n * @extends BI.Widget\n */\nBI.Pager = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Pager.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-pager\",\n behaviors: {},\n layouts: [{\n type: \"bi.horizontal\",\n hgap: 10,\n vgap: 0\n }],\n\n dynamicShow: true, // 是否动态显示上一页、下一页、首页、尾页, 若为false,则指对其设置使能状态\n // dynamicShow为false时以下两个有用\n dynamicShowFirstLast: false, // 是否动态显示首页、尾页\n dynamicShowPrevNext: false, // 是否动态显示上一页、下一页\n pages: false, // 总页数\n curr: function () {\n return 1;\n }, // 初始化当前页\n groups: 0, // 连续显示分页数\n jump: BI.emptyFn, // 分页的回调函数\n\n first: false, // 是否显示首页\n last: false, // 是否显示尾页\n prev: \"上一页\",\n next: \"下一页\",\n\n firstPage: 1,\n lastPage: function () { // 在万不得已时才会调用这个函数获取最后一页的页码, 主要作用于setValue方法\n return 1;\n },\n hasPrev: BI.emptyFn, // pages不可用时有效\n hasNext: BI.emptyFn // pages不可用时有效\n });\n },\n _init: function () {\n BI.Pager.superclass._init.apply(this, arguments);\n var self = this;\n this.currPage = BI.result(this.options, \"curr\");\n // 翻页太灵敏\n // this._lock = false;\n // this._debouce = BI.debounce(function () {\n // self._lock = false;\n // }, 300);\n this._populate();\n },\n\n _populate: function () {\n var self = this, o = this.options, view = [], dict = {};\n this.empty();\n var pages = BI.result(o, \"pages\");\n var curr = BI.result(this, \"currPage\");\n var groups = BI.result(o, \"groups\");\n var first = BI.result(o, \"first\");\n var last = BI.result(o, \"last\");\n var prev = BI.result(o, \"prev\");\n var next = BI.result(o, \"next\");\n\n if (pages === false) {\n groups = 0;\n first = false;\n last = false;\n } else {\n groups > pages && (groups = pages);\n }\n\n // 计算当前组\n dict.index = Math.ceil((curr + ((groups > 1 && groups !== pages) ? 1 : 0)) / (groups === 0 ? 1 : groups));\n\n // 当前页非首页,则输出上一页\n if (((!o.dynamicShow && !o.dynamicShowPrevNext) || curr > 1) && prev !== false) {\n if (BI.isKey(prev)) {\n view.push({\n text: prev,\n value: \"prev\",\n disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false)\n });\n } else {\n view.push(BI.extend({\n disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false)\n }, prev));\n }\n }\n\n // 当前组非首组,则输出首页\n if (((!o.dynamicShow && !o.dynamicShowFirstLast) || (dict.index > 1 && groups !== 0)) && first) {\n view.push({\n text: first,\n value: \"first\",\n disabled: !(dict.index > 1 && groups !== 0)\n });\n if (dict.index > 1 && groups !== 0) {\n view.push({\n type: \"bi.label\",\n cls: \"page-ellipsis\",\n text: \"\\u2026\"\n });\n }\n }\n\n // 输出当前页组\n dict.poor = Math.floor((groups - 1) / 2);\n dict.start = dict.index > 1 ? curr - dict.poor : 1;\n dict.end = dict.index > 1 ? (function () {\n var max = curr + (groups - dict.poor - 1);\n return max > pages ? pages : max;\n }()) : groups;\n if (dict.end - dict.start < groups - 1) { // 最后一组状态\n dict.start = dict.end - groups + 1;\n }\n var s = dict.start, e = dict.end;\n if (first && last && (dict.index > 1 && groups !== 0) && (pages > groups && dict.end < pages && groups !== 0)) {\n s++;\n e--;\n }\n for (; s <= e; s++) {\n if (s === curr) {\n view.push({\n text: s,\n value: s,\n selected: true\n });\n } else {\n view.push({\n text: s,\n value: s\n });\n }\n }\n\n // 总页数大于连续分页数,且当前组最大页小于总页,输出尾页\n if (((!o.dynamicShow && !o.dynamicShowFirstLast) || (pages > groups && dict.end < pages && groups !== 0)) && last) {\n if (pages > groups && dict.end < pages && groups !== 0) {\n view.push({\n type: \"bi.label\",\n cls: \"page-ellipsis\",\n text: \"\\u2026\"\n });\n }\n view.push({\n text: last,\n value: \"last\",\n disabled: !(pages > groups && dict.end < pages && groups !== 0)\n });\n }\n\n // 当前页不为尾页时,输出下一页\n dict.flow = !prev && groups === 0;\n if (((!o.dynamicShow && !o.dynamicShowPrevNext) && next) || (curr !== pages && next || dict.flow)) {\n view.push((function () {\n if (BI.isKey(next)) {\n if (pages === false) {\n return {text: next, value: \"next\", disabled: o.hasNext(curr) === false};\n }\n return (dict.flow && curr === pages)\n ?\n {text: next, value: \"next\", disabled: true}\n :\n {text: next, value: \"next\", disabled: !(curr !== pages && next || dict.flow)};\n }\n return BI.extend({\n disabled: pages === false ? o.hasNext(curr) === false : !(curr !== pages && next || dict.flow)\n }, next);\n\n }()));\n }\n\n this.button_group = BI.createWidget({\n type: \"bi.button_group\",\n element: this,\n items: BI.createItems(view, {\n cls: \"bi-list-item-select bi-border-radius\",\n height: 23,\n hgap: 10\n }),\n behaviors: o.behaviors,\n layouts: o.layouts\n });\n this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n // if (self._lock === true) {\n // return;\n // }\n // self._lock = true;\n // self._debouce();\n if (type === BI.Events.CLICK) {\n var v = self.button_group.getValue()[0];\n switch (v) {\n case \"first\":\n self.currPage = 1;\n break;\n case \"last\":\n self.currPage = pages;\n break;\n case \"prev\":\n self.currPage--;\n break;\n case \"next\":\n self.currPage++;\n break;\n default:\n self.currPage = v;\n break;\n }\n o.jump.apply(self, [{\n pages: pages,\n curr: self.currPage\n }]);\n self._populate();\n self.fireEvent(BI.Pager.EVENT_CHANGE, obj);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.fireEvent(BI.Pager.EVENT_AFTER_POPULATE);\n },\n\n getCurrentPage: function () {\n return this.currPage;\n },\n\n setAllPages: function (pages) {\n this.options.pages = pages;\n },\n\n hasPrev: function (v) {\n v || (v = 1);\n var o = this.options;\n var pages = this.options.pages;\n return pages === false ? o.hasPrev(v) : v > 1;\n },\n\n hasNext: function (v) {\n v || (v = 1);\n var o = this.options;\n var pages = this.options.pages;\n return pages === false ? o.hasNext(v) : v < pages;\n },\n\n setValue: function (v) {\n var o = this.options;\n v = v || 0;\n v = v < 1 ? 1 : v;\n if (o.pages === false) {\n var lastPage = BI.result(o, \"lastPage\"), firstPage = 1;\n this.currPage = v > lastPage ? lastPage : ((firstPage = BI.result(o, \"firstPage\")), (v < firstPage ? firstPage : v));\n } else {\n v = v > o.pages ? o.pages : v;\n this.currPage = v;\n }\n this._populate();\n },\n\n getValue: function () {\n var val = this.button_group.getValue()[0];\n switch (val) {\n case \"prev\":\n return -1;\n case \"next\":\n return 1;\n case \"first\":\n return BI.MIN;\n case \"last\":\n return BI.MAX;\n default :\n return val;\n }\n },\n\n attr: function (key, value) {\n BI.Pager.superclass.attr.apply(this, arguments);\n if (key === \"curr\") {\n this.currPage = BI.result(this.options, \"curr\");\n }\n },\n\n populate: function () {\n this._populate();\n }\n});\nBI.Pager.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.Pager.EVENT_AFTER_POPULATE = \"EVENT_AFTER_POPULATE\";\nBI.shortcut(\"bi.pager\", BI.Pager);","/**\n * 超链接\n *\n * Created by GUY on 2015/9/9.\n * @class BI.A\n * @extends BI.Text\n * @abstract\n */\nBI.A = BI.inherit(BI.Text, {\n _defaultConfig: function () {\n var conf = BI.A.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-a display-block\",\n href: \"\",\n target: \"_blank\",\n el: null,\n tagName: \"a\"\n });\n },\n _init: function () {\n var o = this.options;\n BI.A.superclass._init.apply(this, arguments);\n this.element.attr({href: o.href, target: o.target});\n if (o.el) {\n BI.createWidget(o.el, {\n element: this\n });\n }\n }\n});\n\nBI.shortcut(\"bi.a\", BI.A);","/**\n * guy\n * 加载条\n * @type {*|void|Object}\n */\nBI.LoadingBar = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.LoadingBar.superclass._defaultConfig.apply(this, arguments);\n return BI.extend( conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-loading-bar bi-tips\",\n height: 30,\n handler: BI.emptyFn\n });\n },\n _init: function () {\n BI.LoadingBar.superclass._init.apply(this, arguments);\n var self = this;\n this.loaded = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"loading-text bi-list-item-simple\",\n text: BI.i18nText(\"BI-Load_More\"),\n width: 120,\n handler: this.options.handler\n });\n this.loaded.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.loading = BI.createWidget({\n type: \"bi.layout\",\n width: this.options.height,\n height: this.options.height,\n cls: \"loading-background cursor-default\"\n });\n var loaded = BI.createWidget({\n type: \"bi.center_adapt\",\n items: [this.loaded]\n });\n var loading = BI.createWidget({\n type: \"bi.center_adapt\",\n items: [this.loading]\n });\n this.cardLayout = BI.createWidget({\n type: \"bi.card\",\n element: this,\n items: [{\n el: loaded,\n cardName: \"loaded\"\n }, {\n el: loading,\n cardName: \"loading\"\n }]\n });\n this.invisible();\n },\n\n _reset: function () {\n this.visible();\n this.loaded.setText(BI.i18nText(\"BI-Load_More\"));\n this.loaded.enable();\n },\n\n setLoaded: function () {\n this._reset();\n this.cardLayout.showCardByName(\"loaded\");\n },\n\n setEnd: function () {\n this.setLoaded();\n this.loaded.setText(BI.i18nText(\"BI-No_More_Data\"));\n this.loaded.disable();\n },\n\n setLoading: function () {\n this._reset();\n this.cardLayout.showCardByName(\"loading\");\n }\n});\n\nBI.shortcut(\"bi.loading_bar\", BI.LoadingBar);","/**\n * @class BI.IconButton\n * @extends BI.BasicButton\n * 图标的button\n */\nBI.IconButton = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n var conf = BI.IconButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n _baseCls: (conf._baseCls || \"\") + \" bi-icon-button horizon-center\",\n iconWidth: null,\n iconHeight: null\n });\n },\n\n _init: function () {\n BI.IconButton.superclass._init.apply(this, arguments);\n var o = this.options;\n this.element.css({\n textAlign: \"center\"\n });\n this.icon = BI.createWidget({\n type: \"bi.icon\",\n width: o.iconWidth,\n height: o.iconHeight\n });\n if (BI.isNumber(o.height) && o.height > 0 && BI.isNull(o.iconWidth) && BI.isNull(o.iconHeight)) {\n this.element.css(\"lineHeight\", o.height + \"px\");\n BI.createWidget({\n type: \"bi.default\",\n element: this,\n items: [this.icon]\n });\n } else {\n this.element.css(\"lineHeight\", \"1\");\n BI.createWidget({\n element: this,\n type: \"bi.center_adapt\",\n items: [this.icon]\n });\n }\n },\n\n doClick: function () {\n BI.IconButton.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.IconButton.EVENT_CHANGE, this);\n }\n }\n});\nBI.IconButton.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_button\", BI.IconButton);","/**\n * 图片的button\n *\n * Created by GUY on 2016/1/27.\n * @class BI.ImageButton\n * @extends BI.BasicButton\n */\nBI.ImageButton = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n var conf = BI.ImageButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-image-button\",\n src: \"\",\n iconWidth: \"100%\",\n iconHeight: \"100%\"\n });\n },\n\n _init: function () {\n BI.ImageButton.superclass._init.apply(this, arguments);\n var o = this.options;\n this.image = BI.createWidget({\n type: \"bi.img\",\n width: o.iconWidth,\n height: o.iconHeight,\n src: o.src\n });\n if (BI.isNumber(o.iconWidth) || BI.isNumber(o.iconHeight)) {\n BI.createWidget({\n type: \"bi.center_adapt\",\n element: this,\n items: [this.image]\n });\n } else {\n BI.createWidget({\n type: \"bi.adaptive\",\n element: this,\n items: [this.image],\n scrollable: false\n });\n }\n },\n\n setWidth: function (w) {\n BI.ImageButton.superclass.setWidth.apply(this, arguments);\n this.options.width = w;\n },\n\n setHeight: function (h) {\n BI.ImageButton.superclass.setHeight.apply(this, arguments);\n this.options.height = h;\n },\n\n setImageWidth: function (w) {\n this.image.setWidth(w);\n },\n\n setImageHeight: function (h) {\n this.image.setHeight(h);\n },\n\n getImageWidth: function () {\n return this.image.element.width();\n },\n\n getImageHeight: function () {\n return this.image.element.height();\n },\n\n setSrc: function (src) {\n this.options.src = src;\n this.image.setSrc(src);\n },\n\n getSrc: function () {\n return this.image.getSrc();\n },\n\n doClick: function () {\n BI.ImageButton.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.ImageButton.EVENT_CHANGE, this);\n }\n }\n});\nBI.ImageButton.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.image_button\", BI.ImageButton);","\n/**\n * 文字类型的按钮\n * @class BI.Button\n * @extends BI.BasicButton\n *\n * @cfg {JSON} options 配置属性\n * @cfg {'common'/'success'/'warning'/'ignore'} [options.level='common'] 按钮类型,用不同颜色强调不同的场景\n */\nBI.Button = BI.inherit(BI.BasicButton, {\n\n _const: {\n iconWidth: 18\n },\n\n _defaultConfig: function (props) {\n var conf = BI.Button.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-button\" + ((BI.isIE() && BI.isIE9Below()) ? \" hack\" : \"\"),\n minWidth: (props.block === true || props.clear === true) ? 0 : 80,\n height: 24,\n shadow: props.clear !== true,\n isShadowShowingOnSelected: true,\n readonly: true,\n iconCls: \"\",\n level: \"common\",\n block: false, // 是否块状显示,即不显示边框,没有最小宽度的限制\n clear: false, // 是否去掉边框和背景\n ghost: false, // 是否幽灵显示, 即正常状态无背景\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n textWidth: null,\n textHeight: null,\n hgap: props.clear ? 0 : 10,\n vgap: 0,\n tgap: 0,\n bgap: 0,\n lgap: 0,\n rgap: 0\n });\n },\n\n _init: function () {\n BI.Button.superclass._init.apply(this, arguments);\n var o = this.options, self = this;\n if (BI.isNumber(o.height) && !o.clear && !o.block) {\n this.element.css({height: o.height + \"px\", lineHeight: (o.height - 2) + \"px\"});\n } else if (o.clear || o.block) {\n this.element.css({lineHeight: o.height + \"px\"});\n } else {\n this.element.css({lineHeight: (o.height - 2) + \"px\"});\n }\n if (BI.isKey(o.iconCls)) {\n this.icon = BI.createWidget({\n type: \"bi.icon_label\",\n cls: o.iconCls,\n width: this._const.iconWidth,\n height: o.height - 2,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n text: o.text,\n textWidth: BI.isNotNull(o.textWidth) ? o.textWidth - this._const.iconWidth : null,\n textHeight: o.textHeight,\n value: o.value,\n height: o.height - 2\n });\n BI.createWidget({\n type: \"bi.center_adapt\",\n element: this,\n hgap: o.hgap,\n vgap: o.vgap,\n items: [{\n type: \"bi.horizontal\",\n items: [this.icon, this.text]\n }]\n });\n } else {\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n textWidth: o.textWidth,\n textHeight: o.textHeight,\n hgap: o.hgap,\n vgap: o.vgap,\n tgap: o.tgap,\n bgap: o.bgap,\n lgap: o.lgap,\n rgap: o.rgap,\n element: this,\n text: o.text,\n value: o.value\n });\n }\n if (o.block === true) {\n this.element.addClass(\"block\");\n }\n if (o.clear === true) {\n this.element.addClass(\"clear\");\n }\n if (o.ghost === true) {\n this.element.addClass(\"ghost\");\n }\n if (o.minWidth > 0) {\n this.element.css({\"min-width\": o.minWidth + \"px\"});\n }\n },\n\n doClick: function () {\n BI.Button.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.Button.EVENT_CHANGE, this);\n }\n },\n\n setText: function (text) {\n BI.Button.superclass.setText.apply(this, arguments);\n this.text.setText(text);\n },\n\n setValue: function (text) {\n BI.Button.superclass.setValue.apply(this, arguments);\n if (!this.isReadOnly()) {\n this.text.setValue(text);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n destroy: function () {\n BI.Button.superclass.destroy.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.button\", BI.Button);\nBI.Button.EVENT_CHANGE = \"EVENT_CHANGE\";\n","/**\n * guy\n * 可以点击的一行文字\n * @class BI.TextButton\n * @extends BI.BasicButton\n * 文字button\n */\nBI.TextButton = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n var conf = BI.TextButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-button\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n textWidth: null,\n textHeight: null,\n hgap: 0,\n lgap: 0,\n rgap: 0,\n vgap: 0,\n text: \"\",\n py: \"\"\n });\n },\n\n _init: function () {\n BI.TextButton.superclass._init.apply(this, arguments);\n var o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n element: this,\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n textWidth: o.textWidth,\n textHeight: o.textHeight,\n width: o.width,\n height: o.height,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n },\n\n doClick: function () {\n BI.TextButton.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.TextButton.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n setText: function (text) {\n BI.TextButton.superclass.setText.apply(this, arguments);\n text = BI.isArray(text) ? text.join(\",\") : text;\n this.text.setText(text);\n },\n\n setStyle: function (style) {\n this.text.setStyle(style);\n },\n\n setValue: function (text) {\n BI.TextButton.superclass.setValue.apply(this, arguments);\n if (!this.isReadOnly()) {\n text = BI.isArray(text) ? text.join(\",\") : text;\n this.text.setValue(text);\n }\n }\n});\nBI.TextButton.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_button\", BI.TextButton);","/**\n * 带有一个占位\n *\n * Created by GUY on 2015/9/11.\n * @class BI.BlankIconIconTextItem\n * @extends BI.BasicButton\n */\nBI.BlankIconIconTextItem = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.BlankIconIconTextItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-blank-icon-text-item\",\n logic: {\n dynamic: false\n },\n iconCls1: \"close-ha-font\",\n iconCls2: \"close-ha-font\",\n blankWidth: 0,\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.BlankIconIconTextItem.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n var blank = BI.createWidget({\n type: \"bi.layout\",\n width: o.blankWidth,\n height: o.height\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n this.icon1 = BI.createWidget({\n type: \"bi.icon_button\",\n cls: o.iconCls1,\n forceNotSelected: true,\n width: o.height,\n height: o.height\n });\n this.icon2 = BI.createWidget({\n type: \"bi.icon_button\",\n cls: o.iconCls2,\n forceNotSelected: true,\n width: o.height,\n height: o.height\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", blank, this.icon1, this.icon2, this.text)\n }))));\n },\n\n doClick: function () {\n BI.BlankIconIconTextItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.BlankIconIconTextItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n setSelected: function (b) {\n BI.BlankIconIconTextItem.superclass.setSelected.apply(this, arguments);\n this.icon1.setSelected(b);\n this.icon2.setSelected(b);\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n }\n});\nBI.BlankIconIconTextItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.blank_icon_icon_text_item\", BI.BlankIconIconTextItem);","/**\n * guy\n * 一个占位符和两个icon和一行数 组成的一行listitem\n *\n * Created by GUY on 2015/9/15.\n * @class BI.BlankIconTextIconItem\n * @extends BI.BasicButton\n */\nBI.BlankIconTextIconItem = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.BlankIconTextIconItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-blank-icon-text-icon-item\",\n logic: {\n dynamic: false\n },\n iconCls1: \"close-ha-font\",\n iconCls2: \"close-ha-font\",\n blankWidth: 0,\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.BlankIconTextIconItem.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n\n var icon1 = BI.createWidget({\n type: \"bi.icon_label\",\n cls: o.iconCls1,\n width: o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.icon_label\",\n cls: o.iconCls2,\n width: o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n },\n top: 0,\n bottom: 0,\n right: 0\n }]\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", {\n type: \"bi.layout\",\n width: o.blankWidth\n }, icon1, this.text, {\n type: \"bi.layout\",\n width: o.height\n })\n }))));\n },\n\n doClick: function () {\n BI.BlankIconTextIconItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.BlankIconTextIconItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n }\n});\nBI.BlankIconTextIconItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.blank_icon_text_icon_item\", BI.BlankIconTextIconItem);","/**\n * 带有一个占位\n *\n * Created by GUY on 2015/9/11.\n * @class BI.BlankIconTextItem\n * @extends BI.BasicButton\n */\nBI.BlankIconTextItem = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.BlankIconTextItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-blank-icon-text-item\",\n logic: {\n dynamic: false\n },\n cls: \"close-ha-font\",\n blankWidth: 0,\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.BlankIconTextItem.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n var blank = BI.createWidget({\n type: \"bi.layout\",\n width: o.blankWidth\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n this.icon = BI.createWidget({\n type: \"bi.icon_label\",\n width: o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", blank, this.icon, this.text)\n }))));\n },\n\n doClick: function () {\n BI.BlankIconTextItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.BlankIconTextItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n }\n});\nBI.BlankIconTextItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.blank_icon_text_item\", BI.BlankIconTextItem);","/**\n * guy\n * 两个icon和一行数 组成的一行listitem\n *\n * Created by GUY on 2015/9/9.\n * @class BI.IconTextIconItem\n * @extends BI.BasicButton\n */\nBI.IconTextIconItem = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.IconTextIconItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-icon-text-icon-item\",\n logic: {\n dynamic: false\n },\n iconCls1: \"close-ha-font\",\n iconCls2: \"close-ha-font\",\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.IconTextIconItem.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n\n var icon1 = BI.createWidget({\n type: \"bi.icon_label\",\n cls: o.iconCls1,\n width: o.leftIconWrapperWidth,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n var blank = BI.createWidget({\n type: \"bi.layout\",\n width: o.height\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.icon_label\",\n cls: o.iconCls2,\n width: o.rightIconWrapperWidth,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n },\n top: 0,\n bottom: 0,\n right: 0\n }]\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", icon1, this.text, blank)\n }))));\n },\n\n doClick: function () {\n BI.IconTextIconItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.IconTextIconItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n }\n});\nBI.IconTextIconItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_text_icon_item\", BI.IconTextIconItem);","/**\n * guy\n *\n * Created by GUY on 2015/9/9.\n * @class BI.IconTextItem\n * @extends BI.BasicButton\n */\nBI.IconTextItem = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.IconTextItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-icon-text-item\",\n direction: BI.Direction.Left,\n logic: {\n dynamic: false\n },\n iconWrapperWidth: null,\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.IconTextItem.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n this.icon = BI.createWidget({\n type: \"bi.icon_label\",\n width: o.iconWrapperWidth || o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.icon, this.text)\n }))));\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n },\n\n doClick: function () {\n BI.IconTextItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.IconTextItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n }\n});\nBI.IconTextItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_text_item\", BI.IconTextItem);","/**\n *\n * 图标的button\n *\n * Created by GUY on 2015/9/9.\n * @class BI.TextIconItem\n * @extends BI.BasicButton\n */\nBI.TextIconItem = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.TextIconItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-icon-item\",\n logic: {\n dynamic: false\n },\n cls: \"close-ha-font\",\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.TextIconItem.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n this.icon = BI.createWidget({\n type: \"bi.icon_label\",\n width: o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", this.text, this.icon)\n }))));\n },\n\n doClick: function () {\n BI.TextIconItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.TextIconItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n }\n});\nBI.TextIconItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_icon_item\", BI.TextIconItem);","/**\n * guy\n * 一个button和一行数 组成的一行listitem\n *\n * Created by GUY on 2015/9/9.\n * @class BI.TextItem\n * @extends BI.BasicButton\n */\nBI.TextItem = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.TextItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-item\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.TextItem.superclass._init.apply(this, arguments);\n var o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n element: this,\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n textHeight: o.whiteSpace == \"nowrap\" ? o.height : o.textHeight,\n height: o.height,\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n py: o.py\n });\n },\n\n doClick: function () {\n BI.TextItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.TextItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n }\n});\nBI.TextItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_item\", BI.TextItem);","/**\n * guy\n * Created by GUY on 2015/9/9.\n * @class BI.IconTextIconNode\n * @extends BI.NodeButton\n */\nBI.IconTextIconNode = BI.inherit(BI.NodeButton, {\n\n _defaultConfig: function () {\n var conf = BI.IconTextIconNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-icon-text-icon-node\",\n logic: {\n dynamic: false\n },\n iconCls1: \"close-ha-font\",\n iconCls2: \"close-ha-font\",\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.IconTextIconNode.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n\n var icon1 = BI.createWidget({\n type: \"bi.icon_label\",\n cls: o.iconCls1,\n width: o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n var blank = BI.createWidget({\n type: \"bi.layout\",\n width: o.height,\n height: o.height\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.icon_label\",\n cls: o.iconCls2,\n width: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n },\n top: 0,\n bottom: 0,\n right: 0\n }]\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", icon1, this.text, blank)\n }))));\n },\n\n doClick: function () {\n BI.IconTextIconNode.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.IconTextIconNode.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n }\n});\nBI.IconTextIconNode.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_text_icon_node\", BI.IconTextIconNode);","/**\n * guy\n * Created by GUY on 2015/9/9.\n * @class BI.IconTextNode\n * @extends BI.NodeButton\n */\nBI.IconTextNode = BI.inherit(BI.NodeButton, {\n\n _defaultConfig: function () {\n var conf = BI.IconTextNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-icon-text-node\",\n logic: {\n dynamic: false\n },\n cls: \"close-ha-font\",\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.IconTextNode.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n this.icon = BI.createWidget({\n type: \"bi.icon_label\",\n width: o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", this.icon, this.text)\n }))));\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n },\n\n doClick: function () {\n BI.IconTextNode.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.IconTextNode.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n }\n});\nBI.IconTextNode.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_text_node\", BI.IconTextNode);","/**\n * Created by GUY on 2015/9/9.\n * @class BI.TextIconNode\n * @extends BI.NodeButton\n */\nBI.TextIconNode = BI.inherit(BI.NodeButton, {\n\n _defaultConfig: function () {\n var conf = BI.TextIconNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-icon-node\",\n logic: {\n dynamic: false\n },\n cls: \"close-ha-font\",\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.TextIconNode.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n this.icon = BI.createWidget({\n type: \"bi.icon_label\",\n width: o.height,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", this.text, this.icon)\n }))));\n },\n\n doClick: function () {\n BI.TextIconNode.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.TextIconNode.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n }\n});\nBI.TextIconNode.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_icon_node\", BI.TextIconNode);","/**\n * guy\n *\n * Created by GUY on 2015/9/9.\n * @class BI.TextNode\n * @extends BI.NodeButton\n */\nBI.TextNode = BI.inherit(BI.NodeButton, {\n\n _defaultConfig: function () {\n var conf = BI.TextNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-node\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.TextNode.superclass._init.apply(this, arguments);\n var o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n element: this,\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n textHeight: o.whiteSpace == \"nowrap\" ? o.height : o.textHeight,\n height: o.height,\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n py: o.py\n });\n },\n\n doClick: function () {\n BI.TextNode.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.TextNode.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n }\n});\nBI.TextNode.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_node\", BI.TextNode);","/**\n * Created by GUY on 2015/4/15.\n * @class BI.Editor\n * @extends BI.Single\n */\nBI.Editor = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.Editor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-editor bi-focus-shadow\",\n hgap: 4,\n vgap: 2,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n // title,warningTitle这两个属性没用\n tipType: \"warning\",\n inputType: \"text\",\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n allowBlank: false,\n watermark: \"\",\n errorText: \"\"\n });\n },\n\n _init: function () {\n BI.Editor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = this.addWidget(BI.createWidget({\n type: \"bi.input\",\n element: \"<input type='\" + o.inputType + \"'/>\",\n root: true,\n value: o.value,\n watermark: o.watermark,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank\n }));\n this.editor.element.css({\n width: \"100%\",\n height: \"100%\",\n border: \"none\",\n outline: \"none\",\n padding: \"0\",\n margin: \"0\"\n });\n if (BI.isKey(this.options.watermark)) {\n this._assertWaterMark();\n }\n\n var _items = [];\n if (this.watermark) {\n _items.push({\n el: this.watermark,\n left: 3,\n right: 3,\n top: 0,\n bottom: 0\n });\n }\n _items.push({\n el: this.editor,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n });\n\n var items = [{\n el: {\n type: \"bi.absolute\",\n ref: function(_ref) {\n self.contentWrapper = _ref;\n },\n items: _items\n },\n left: o.hgap + o.lgap,\n right: o.hgap + o.rgap,\n top: o.vgap + o.tgap,\n bottom: o.vgap + o.bgap\n }];\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: items\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Input.EVENT_FOCUS, function () {\n self._checkError();\n self.element.addClass(\"bi-editor-focus\");\n self.fireEvent(BI.Editor.EVENT_FOCUS, arguments);\n });\n this.editor.on(BI.Input.EVENT_BLUR, function () {\n self._setErrorVisible(false);\n self.element.removeClass(\"bi-editor-focus\");\n self.fireEvent(BI.Editor.EVENT_BLUR, arguments);\n });\n this.editor.on(BI.Input.EVENT_CLICK, function () {\n self.fireEvent(BI.Editor.EVENT_CLICK, arguments);\n });\n this.editor.on(BI.Input.EVENT_CHANGE, function () {\n self.fireEvent(BI.Editor.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Input.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.Editor.EVENT_KEY_DOWN, arguments);\n });\n this.editor.on(BI.Input.EVENT_QUICK_DOWN, function (e) {\n // tab键就不要隐藏了\n if (e.keyCode !== BI.KeyCode.TAB && self.watermark) {\n self.watermark.invisible();\n }\n });\n\n this.editor.on(BI.Input.EVENT_VALID, function () {\n self._checkWaterMark();\n self._setErrorVisible(false);\n self.fireEvent(BI.Editor.EVENT_VALID, arguments);\n });\n this.editor.on(BI.Input.EVENT_ERROR, function () {\n self._checkWaterMark();\n self.fireEvent(BI.Editor.EVENT_ERROR, arguments);\n self._setErrorVisible(self.isEditing());\n });\n this.editor.on(BI.Input.EVENT_RESTRICT, function () {\n self._checkWaterMark();\n var tip = self._setErrorVisible(true);\n tip && tip.element.fadeOut(100, function () {\n tip.element.fadeIn(100);\n });\n self.fireEvent(BI.Editor.EVENT_RESTRICT, arguments);\n });\n this.editor.on(BI.Input.EVENT_EMPTY, function () {\n self._checkWaterMark();\n self.fireEvent(BI.Editor.EVENT_EMPTY, arguments);\n });\n this.editor.on(BI.Input.EVENT_ENTER, function () {\n self.fireEvent(BI.Editor.EVENT_ENTER, arguments);\n });\n this.editor.on(BI.Input.EVENT_SPACE, function () {\n self.fireEvent(BI.Editor.EVENT_SPACE, arguments);\n });\n this.editor.on(BI.Input.EVENT_BACKSPACE, function () {\n self.fireEvent(BI.Editor.EVENT_BACKSPACE, arguments);\n });\n this.editor.on(BI.Input.EVENT_REMOVE, function () {\n self.fireEvent(BI.Editor.EVENT_REMOVE, arguments);\n });\n this.editor.on(BI.Input.EVENT_START, function () {\n self.fireEvent(BI.Editor.EVENT_START, arguments);\n });\n this.editor.on(BI.Input.EVENT_PAUSE, function () {\n self.fireEvent(BI.Editor.EVENT_PAUSE, arguments);\n });\n this.editor.on(BI.Input.EVENT_STOP, function () {\n self.fireEvent(BI.Editor.EVENT_STOP, arguments);\n });\n this.editor.on(BI.Input.EVENT_CONFIRM, function () {\n self.fireEvent(BI.Editor.EVENT_CONFIRM, arguments);\n });\n this.editor.on(BI.Input.EVENT_CHANGE_CONFIRM, function () {\n self.fireEvent(BI.Editor.EVENT_CHANGE_CONFIRM, arguments);\n });\n this.element.click(function (e) {\n e.stopPropagation();\n return false;\n });\n if (BI.isKey(this.options.value) || BI.isEmptyString(this.options.value)) {\n this._checkError();\n this._checkWaterMark();\n } else {\n this._checkWaterMark();\n }\n },\n\n _checkToolTip: function () {\n var o = this.options;\n var errorText = o.errorText;\n if (BI.isFunction(errorText)) {\n errorText = errorText(this.editor.getValue());\n }\n if (BI.isKey(errorText)) {\n if (!this.isEnabled() || this.isValid() || (BI.Bubbles.has(this.getName()) && BI.Bubbles.get(this.getName()).isVisible())) {\n this.setTitle(\"\");\n } else {\n this.setTitle(errorText);\n }\n }\n },\n\n _assertWaterMark: function() {\n var self = this, o = this.options;\n if(BI.isNull(this.watermark)) {\n this.watermark = BI.createWidget({\n type: \"bi.label\",\n cls: \"bi-water-mark\",\n text: this.options.watermark,\n height: o.height - 2 * (o.vgap + o.tgap),\n whiteSpace: \"nowrap\",\n textAlign: \"left\"\n });\n this.watermark.element.bind({\n mousedown: function (e) {\n if (self.isEnabled()) {\n self.editor.isEditing() || self.editor.focus();\n } else {\n self.editor.isEditing() && self.editor.blur();\n }\n e.stopEvent();\n }\n });\n this.watermark.element.bind(\"click\", function (e) {\n if (self.isEnabled()) {\n self.editor.isEditing() || self.editor.focus();\n } else {\n self.editor.isEditing() && self.editor.blur();\n }\n e.stopEvent();\n });\n }\n },\n\n _checkError: function () {\n this._setErrorVisible(this.isEnabled() && !this.isValid());\n this._checkToolTip();\n },\n\n _checkWaterMark: function () {\n var o = this.options;\n if (!this.disabledWaterMark && this.editor.getValue() === \"\" && BI.isKey(o.watermark)) {\n this.watermark && this.watermark.visible();\n } else {\n this.watermark && this.watermark.invisible();\n }\n },\n\n setErrorText: function (text) {\n this.options.errorText = text;\n },\n\n getErrorText: function () {\n return this.options.errorText;\n },\n\n setWaterMark: function(v) {\n this.options.watermark = v;\n if(BI.isNull(this.watermark)) {\n this._assertWaterMark();\n BI.createWidget({\n type: \"bi.absolute\",\n element: this.contentWrapper,\n items: [{\n el: this.watermark,\n left: 3,\n right: 3,\n top: 0,\n bottom: 0\n }]\n })\n }\n BI.isKey(v) && this.watermark.setText(v);\n },\n\n _setErrorVisible: function (b) {\n var o = this.options;\n var errorText = o.errorText;\n if (BI.isFunction(errorText)) {\n errorText = errorText(BI.trim(this.editor.getValue()));\n }\n if (!this.disabledError && BI.isKey(errorText)) {\n BI.Bubbles[b ? \"show\" : \"hide\"](this.getName(), errorText, this, {\n adjustYOffset: 2\n });\n this._checkToolTip();\n return BI.Bubbles.get(this.getName());\n }\n },\n\n disableError: function () {\n this.disabledError = true;\n this._checkError();\n },\n\n enableError: function () {\n this.disabledError = false;\n this._checkError();\n },\n\n disableWaterMark: function () {\n this.disabledWaterMark = true;\n this._checkWaterMark();\n },\n\n enableWaterMark: function () {\n this.disabledWaterMark = false;\n this._checkWaterMark();\n },\n\n focus: function () {\n this.element.addClass(\"text-editor-focus\");\n this.editor.focus();\n },\n\n blur: function () {\n this.element.removeClass(\"text-editor-focus\");\n this.editor.blur();\n },\n\n selectAll: function () {\n this.editor.selectAll();\n },\n\n onKeyDown: function (k) {\n this.editor.onKeyDown(k);\n },\n\n setValue: function (v) {\n BI.Editor.superclass.setValue.apply(this, arguments);\n this.editor.setValue(v);\n this._checkError();\n this._checkWaterMark();\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n getValue: function () {\n if (!this.isValid()) {\n return BI.trim(this.editor.getLastValidValue());\n }\n return BI.trim(this.editor.getValue());\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n destroyed: function () {\n BI.Bubbles.remove(this.getName());\n }\n});\nBI.Editor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.Editor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.Editor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.Editor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.Editor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.Editor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.Editor.EVENT_BACKSPACE = \"EVENT_BACKSPACE\";\n\nBI.Editor.EVENT_START = \"EVENT_START\";\nBI.Editor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.Editor.EVENT_STOP = \"EVENT_STOP\";\nBI.Editor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.Editor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.Editor.EVENT_VALID = \"EVENT_VALID\";\nBI.Editor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.Editor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.Editor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.Editor.EVENT_REMOVE = \"EVENT_REMOVE\";\nBI.Editor.EVENT_EMPTY = \"EVENT_EMPTY\";\n\nBI.shortcut(\"bi.editor\", BI.Editor);","/**\n * 多文件\n *\n * Created by GUY on 2016/4/13.\n * @class BI.MultifileEditor\n * @extends BI.Single\n * @abstract\n */\nBI.MultifileEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.MultifileEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-multifile-editor\",\n multiple: false,\n maxSize: -1, // 1024 * 1024\n accept: \"\",\n url: \"\"\n });\n },\n\n _init: function () {\n var self = this, o = this.options;\n BI.MultifileEditor.superclass._init.apply(this, arguments);\n this.file = BI.createWidget({\n type: \"bi.file\",\n cls: \"multifile-editor\",\n width: \"100%\",\n height: \"100%\",\n name: o.name,\n url: o.url,\n multiple: o.multiple,\n accept: o.accept,\n maxSize: o.maxSize,\n title: o.title\n });\n this.file.on(BI.File.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultifileEditor.EVENT_CHANGE, arguments);\n });\n this.file.on(BI.File.EVENT_UPLOADSTART, function () {\n self.fireEvent(BI.MultifileEditor.EVENT_UPLOADSTART, arguments);\n });\n this.file.on(BI.File.EVENT_ERROR, function () {\n self.fireEvent(BI.MultifileEditor.EVENT_ERROR, arguments);\n });\n this.file.on(BI.File.EVENT_PROGRESS, function () {\n self.fireEvent(BI.MultifileEditor.EVENT_PROGRESS, arguments);\n });\n this.file.on(BI.File.EVENT_UPLOADED, function () {\n self.fireEvent(BI.MultifileEditor.EVENT_UPLOADED, arguments);\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.adaptive\",\n scrollable: false,\n items: [this.file]\n },\n top: 0,\n right: 0,\n left: 0,\n bottom: 0\n }]\n });\n },\n\n select: function () {\n this.file.select();\n },\n\n getValue: function () {\n return this.file.getValue();\n },\n\n upload: function () {\n this.file.upload();\n },\n\n reset: function () {\n this.file.reset();\n }\n});\nBI.MultifileEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultifileEditor.EVENT_UPLOADSTART = \"EVENT_UPLOADSTART\";\nBI.MultifileEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.MultifileEditor.EVENT_PROGRESS = \"EVENT_PROGRESS\";\nBI.MultifileEditor.EVENT_UPLOADED = \"EVENT_UPLOADED\";\nBI.shortcut(\"bi.multifile_editor\", BI.MultifileEditor);","/**\n *\n * Created by GUY on 2016/1/18.\n * @class BI.TextAreaEditor\n * @extends BI.Single\n */\nBI.TextAreaEditor = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n return BI.extend(BI.TextAreaEditor.superclass._defaultConfig.apply(), {\n baseCls: \"bi-textarea-editor\",\n value: \"\"\n });\n },\n\n render: function() {\n var o = this.options, self = this;\n this.content = BI.createWidget({\n type: \"bi.layout\",\n tagName: \"textarea\",\n width: \"100%\",\n height: \"100%\",\n cls: \"bi-textarea textarea-editor-content display-block\"\n });\n this.content.element.css({resize: \"none\"});\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.adaptive\",\n items: [this.content]\n },\n left: 4,\n right: 4,\n top: 4,\n bottom: 4\n }]\n });\n\n this.content.element.on(\"input propertychange\", function (e) {\n self._checkWaterMark();\n self.fireEvent(BI.TextAreaEditor.EVENT_CHANGE);\n });\n\n this.content.element.focus(function () {\n if (self.isValid()) {\n self._focus();\n self.fireEvent(BI.TextAreaEditor.EVENT_FOCUS);\n }\n BI.Widget._renderEngine.createElement(document).bind(\"mousedown.\" + self.getName(), function (e) {\n if (BI.DOM.isExist(self) && !self.element.__isMouseInBounds__(e)) {\n BI.Widget._renderEngine.createElement(document).unbind(\"mousedown.\" + self.getName());\n self.content.element.blur();\n }\n });\n });\n this.content.element.blur(function () {\n if (self.isValid()) {\n self._blur();\n self.fireEvent(BI.TextAreaEditor.EVENT_BLUR);\n }\n BI.Widget._renderEngine.createElement(document).unbind(\"mousedown.\" + self.getName());\n });\n if (BI.isKey(o.value)) {\n this.setValue(o.value);\n }\n if (BI.isNotNull(o.style)) {\n this.setStyle(o.style);\n }\n this._checkWaterMark();\n },\n\n _checkWaterMark: function () {\n var self = this, o = this.options;\n var val = this.getValue();\n if (BI.isNotEmptyString(val)) {\n this.watermark && this.watermark.destroy();\n this.watermark = null;\n } else {\n if (BI.isNotEmptyString(o.watermark)) {\n if (!this.watermark) {\n this.watermark = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"bi-water-mark cursor-default textarea-watermark\",\n textAlign: \"left\",\n whiteSpace: \"normal\",\n text: o.watermark,\n invalid: o.invalid,\n disabled: o.disabled,\n hgap: 4,\n vgap: 4\n });\n this.watermark.on(BI.TextButton.EVENT_CHANGE, function () {\n self.focus();\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.watermark,\n left: 0,\n top: 0,\n right: 0\n }]\n });\n } else {\n this.watermark.setText(o.watermark);\n this.watermark.setValid(!o.invalid);\n this.watermark.setEnable(!o.disabled);\n }\n }\n }\n },\n\n _focus: function () {\n this.content.element.addClass(\"textarea-editor-focus\");\n this._checkWaterMark();\n },\n\n _blur: function () {\n this.content.element.removeClass(\"textarea-editor-focus\");\n this._checkWaterMark();\n },\n\n focus: function () {\n this._focus();\n this.content.element.focus();\n },\n\n blur: function () {\n this._blur();\n this.content.element.blur();\n },\n\n getValue: function () {\n return this.content.element.val();\n },\n\n setValue: function (value) {\n this.content.element.val(value);\n this._checkWaterMark();\n },\n\n setStyle: function (style) {\n this.style = style;\n this.element.css(style);\n this.content.element.css(BI.extend({}, style, {\n color: style.color || BI.DOM.getContrastColor(BI.DOM.isRGBColor(style.backgroundColor) ? BI.DOM.rgb2hex(style.backgroundColor) : style.backgroundColor)\n }));\n },\n\n getStyle: function () {\n return this.style;\n },\n\n _setValid: function (b) {\n BI.TextAreaEditor.superclass._setValid.apply(this, arguments);\n // this.content.setValid(b);\n // this.watermark && this.watermark.setValid(b);\n },\n\n _setEnable: function (b) {\n BI.TextAreaEditor.superclass._setEnable.apply(this, [b]);\n this.content && (this.content.element[0].disabled = !b);\n }\n});\nBI.TextAreaEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.TextAreaEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.TextAreaEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.shortcut(\"bi.textarea_editor\", BI.TextAreaEditor);","/**\n * guy 表示一行数据,通过position来定位位置的数据\n * @class BI.Html\n * @extends BI.Single\n */\nBI.Html = BI.inherit(BI.Single, {\n\n props: {\n baseCls: \"bi-html\",\n textAlign: \"left\",\n whiteSpace: \"normal\",\n lineHeight: null,\n handler: null, // 如果传入handler,表示处理文字的点击事件,不是区域的\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n text: \"\",\n highLight: false\n },\n\n render: function () {\n var self = this, o = this.options;\n if (o.hgap + o.lgap > 0) {\n this.element.css({\n \"padding-left\": o.hgap + o.lgap + \"px\"\n });\n }\n if (o.hgap + o.rgap > 0) {\n this.element.css({\n \"padding-right\": o.hgap + o.rgap + \"px\"\n });\n }\n if (o.vgap + o.tgap > 0) {\n this.element.css({\n \"padding-top\": o.vgap + o.tgap + \"px\"\n });\n }\n if (o.vgap + o.bgap > 0) {\n this.element.css({\n \"padding-bottom\": o.vgap + o.bgap + \"px\"\n });\n }\n if (BI.isNumber(o.height)) {\n this.element.css({lineHeight: o.height + \"px\"});\n }\n if (BI.isNumber(o.lineHeight)) {\n this.element.css({lineHeight: o.lineHeight + \"px\"});\n }\n if (BI.isWidthOrHeight(o.maxWidth)) {\n this.element.css({maxWidth: o.maxWidth});\n }\n this.element.css({\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n textOverflow: o.whiteSpace === 'nowrap' ? \"ellipsis\" : \"\",\n overflow: o.whiteSpace === \"nowrap\" ? \"\" : \"auto\"\n });\n if (o.handler) {\n this.text = BI.createWidget({\n type: \"bi.layout\",\n tagName: \"span\"\n });\n this.text.element.click(function () {\n o.handler(self.getValue());\n });\n BI.createWidget({\n type: \"bi.default\",\n element: this,\n items: [this.text]\n });\n } else {\n this.text = this;\n }\n\n if (BI.isKey(o.text)) {\n this.setText(o.text);\n } else if (BI.isKey(o.value)) {\n this.setText(o.value);\n }\n if (o.highLight) {\n this.doHighLight();\n }\n },\n\n doHighLight: function () {\n this.text.element.addClass(\"bi-high-light\");\n },\n\n unHighLight: function () {\n this.text.element.removeClass(\"bi-high-light\");\n },\n\n setValue: function (text) {\n BI.Html.superclass.setValue.apply(this, arguments);\n if (!this.isReadOnly()) {\n this.setText(text);\n }\n },\n\n setStyle: function (css) {\n this.text.element.css(css);\n },\n\n setText: function (text) {\n BI.Html.superclass.setText.apply(this, arguments);\n this.options.text = text;\n this.text.element.html(text);\n }\n});\n\nBI.shortcut(\"bi.html\", BI.Html);","/**\n * guy 图标\n * @class BI.Icon\n * @extends BI.Single\n */\nBI.Icon = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.Icon.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n tagName: \"i\",\n baseCls: (conf.baseCls || \"\") + \" x-icon b-font horizon-center display-block\"\n });\n },\n _init: function () {\n BI.Icon.superclass._init.apply(this, arguments);\n if (BI.isIE9Below && BI.isIE9Below()) {\n this.element.addClass(\"hack\");\n }\n }\n});\nBI.shortcut(\"bi.icon\", BI.Icon);","/**\n * @class BI.Iframe\n * @extends BI.Single\n * @abstract\n * Created by GameJian on 2016/3/2.\n */\nBI.Iframe = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.Iframe.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n tagName: \"iframe\",\n baseCls: (conf.baseCls || \"\") + \" bi-iframe\",\n src: \"\",\n name: \"\",\n attributes: {},\n width: \"100%\",\n height: \"100%\"\n });\n },\n\n _init: function () {\n var o = this.options;\n o.attributes.frameborder = \"0\";\n o.attributes.src = o.src;\n o.attributes.name = o.name;\n BI.Iframe.superclass._init.apply(this, arguments);\n },\n\n setSrc: function (src) {\n this.options.src = src;\n this.element.attr(\"src\", src);\n },\n\n getSrc: function () {\n return this.options.src;\n },\n\n setName: function (name) {\n this.options.name = name;\n this.element.attr(\"name\", name);\n },\n\n getName: function () {\n return this.options.name;\n }\n});\n\nBI.shortcut(\"bi.iframe\", BI.Iframe);","/**\n * ͼƬ\n *\n * Created by GUY on 2016/1/26.\n * @class BI.Img\n * @extends BI.Single\n * @abstract\n */\nBI.Img = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.Img.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n tagName: \"img\",\n baseCls: (conf.baseCls || \"\") + \" bi-img display-block\",\n src: \"\",\n attributes: {},\n width: \"100%\",\n height: \"100%\"\n });\n },\n\n _init: function () {\n var o = this.options;\n o.attributes.src = o.src;\n BI.Img.superclass._init.apply(this, arguments);\n },\n\n setSrc: function (src) {\n this.options.src = src;\n this.element.attr(\"src\", src);\n },\n\n getSrc: function () {\n return this.options.src;\n }\n});\n\nBI.shortcut(\"bi.img\", BI.Img);\n","/**\n * guy\n * @extends BI.Single\n * @type {*|void|Object}\n */\nBI.ImageCheckbox = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n var conf = BI.ImageCheckbox.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-image-checkbox check-box-icon\",\n selected: false,\n handler: BI.emptyFn,\n width: 16,\n height: 16,\n iconWidth: 16,\n iconHeight: 16\n });\n }\n});\nBI.ImageCheckbox.EVENT_CHANGE = BI.IconButton.EVENT_CHANGE;\n\nBI.shortcut(\"bi.image_checkbox\", BI.ImageCheckbox);","/**\n * guy\n * @extends BI.Single\n * @type {*|void|Object}\n */\nBI.Checkbox = BI.inherit(BI.BasicButton, {\n\n props: {\n baseCls: \"bi-checkbox\",\n selected: false,\n handler: BI.emptyFn,\n width: 16,\n height: 16,\n iconWidth: 16,\n iconHeight: 16\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.center_adapt\",\n items: [{\n type: \"bi.default\",\n ref: function (_ref) {\n self.checkbox = _ref;\n },\n cls: \"checkbox-content\",\n width: o.iconWidth - 2,\n height: o.iconHeight - 2\n }]\n };\n },\n\n _setEnable: function (enable) {\n BI.Checkbox.superclass._setEnable.apply(this, arguments);\n if (enable === true) {\n this.checkbox.element.removeClass(\"base-disabled disabled\");\n } else {\n this.checkbox.element.addClass(\"base-disabled disabled\");\n }\n },\n\n doClick: function () {\n BI.Checkbox.superclass.doClick.apply(this, arguments);\n if(this.isValid()) {\n this.fireEvent(BI.Checkbox.EVENT_CHANGE);\n }\n },\n\n setSelected: function (b) {\n BI.Checkbox.superclass.setSelected.apply(this, arguments);\n if (b) {\n this.checkbox.element.addClass(\"bi-high-light-background\");\n } else {\n this.checkbox.element.removeClass(\"bi-high-light-background\");\n }\n }\n});\nBI.Checkbox.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.checkbox\", BI.Checkbox);","/**\n * guy\n * @class BI.Input 一个button和一行数 组成的一行listitem\n * @extends BI.Single\n * @type {*|void|Object}\n */\nBI.Input = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.Input.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-input display-block overflow-dot\",\n tagName: \"input\",\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn, // 按确定键能否退出编辑\n allowBlank: false\n });\n },\n\n _init: function () {\n BI.Input.superclass._init.apply(this, arguments);\n var self = this;\n var ctrlKey = false;\n var keyCode = null;\n var inputEventValid = false;\n var _keydown = BI.debounce(function (keyCode) {\n self.onKeyDown(keyCode, ctrlKey);\n self._keydown_ = false;\n }, 300);\n var _clk = BI.debounce(BI.bind(this._click, this), BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n });\n this._focusDebounce = BI.debounce(BI.bind(this._focus, this), BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n });\n this._blurDebounce = BI.debounce(BI.bind(this._blur, this), BI.EVENT_RESPONSE_TIME, {\n \"leading\": true,\n \"trailing\": false\n });\n this.element\n .keydown(function (e) {\n inputEventValid = false;\n ctrlKey = e.ctrlKey || e.metaKey; // mac的cmd支持一下\n keyCode = e.keyCode;\n self.fireEvent(BI.Input.EVENT_QUICK_DOWN, arguments);\n })\n .keyup(function (e) {\n keyCode = null;\n if (!(inputEventValid && e.keyCode === BI.KeyCode.ENTER)) {\n self._keydown_ = true;\n _keydown(e.keyCode);\n }\n })\n .on(\"input propertychange\", function (e) {\n // 输入内容全选并直接删光,如果按键没放开就失去焦点不会触发keyup,被focusout覆盖了\n // 其中propertychange在元素属性发生改变的时候就会触发 是为了兼容IE8\n // 通过keyCode判断会漏掉输入法点击输入(右键粘贴暂缓)\n var originalEvent = e.originalEvent;\n if (BI.isNull(originalEvent.propertyName) || originalEvent.propertyName === \"value\") {\n inputEventValid = true;\n self._keydown_ = true;\n _keydown(keyCode);\n keyCode = null;\n }\n })\n .click(function (e) {\n e.stopPropagation();\n _clk();\n })\n .mousedown(function (e) {\n self.element.val(self.element.val());\n })\n .focus(function (e) { // 可以不用冒泡\n self._focusDebounce();\n })\n .focusout(function (e) {\n self._blurDebounce();\n });\n if (BI.isKey(this.options.value) || BI.isEmptyString(this.options.value)) {\n this.setValue(this.options.value);\n }\n },\n\n _focus: function () {\n this.element.addClass(\"bi-input-focus\");\n this._checkValidationOnValueChange();\n this._isEditing = true;\n if (this.getValue() == \"\") {\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EMPTY, this.getValue(), this);\n this.fireEvent(BI.Input.EVENT_EMPTY);\n }\n this.fireEvent(BI.Input.EVENT_FOCUS);\n },\n\n _blur: function () {\n var self = this;\n if (self._keydown_ === true) {\n BI.delay(blur, 300);\n } else {\n blur();\n }\n\n function blur () {\n if (!self.isValid() && self.options.quitChecker.apply(self, [BI.trim(self.getValue())]) !== false) {\n self.element.val(self._lastValidValue ? self._lastValidValue : \"\");\n self._checkValidationOnValueChange();\n self._defaultState();\n }\n self.element.removeClass(\"bi-input-focus\");\n self._isEditing = false;\n self._start = false;\n if (self.isValid()) {\n var lastValidValue = self._lastValidValue;\n self._lastValidValue = self.getValue();\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CONFIRM, self.getValue(), self);\n self.fireEvent(BI.Input.EVENT_CONFIRM);\n if (self._lastValidValue !== lastValidValue) {\n self.fireEvent(BI.Input.EVENT_CHANGE_CONFIRM);\n }\n }\n self.fireEvent(BI.Input.EVENT_BLUR);\n }\n },\n\n _click: function () {\n if (this._isEditing !== true) {\n this.selectAll();\n this.fireEvent(BI.Input.EVENT_CLICK);\n }\n },\n\n onClick: function () {\n this._click();\n },\n\n onKeyDown: function (keyCode, ctrlKey) {\n if (!this.isValid() || BI.trim(this._lastChangedValue) !== BI.trim(this.getValue())) {\n this._checkValidationOnValueChange();\n }\n if (this.isValid() && BI.trim(this.getValue()) !== \"\") {\n if (BI.trim(this.getValue()) !== this._lastValue && (!this._start || this._lastValue == null || this._lastValue === \"\")\n || (this._pause === true && !/(\\s|\\u00A0)$/.test(this.getValue()))) {\n this._start = true;\n this._pause = false;\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.STARTEDIT, this.getValue(), this);\n this.fireEvent(BI.Input.EVENT_START);\n }\n }\n if (keyCode == BI.KeyCode.ENTER) {\n if (this.isValid() || this.options.quitChecker.apply(this, [BI.trim(this.getValue())]) !== false) {\n this.blur();\n this.fireEvent(BI.Input.EVENT_ENTER);\n } else {\n this.fireEvent(BI.Input.EVENT_RESTRICT);\n }\n }\n if (keyCode == BI.KeyCode.SPACE) {\n this.fireEvent(BI.Input.EVENT_SPACE);\n }\n if (keyCode == BI.KeyCode.BACKSPACE && this._lastValue == \"\") {\n this.fireEvent(BI.Input.EVENT_REMOVE);\n }\n if (keyCode == BI.KeyCode.BACKSPACE || keyCode == BI.KeyCode.DELETE) {\n this.fireEvent(BI.Input.EVENT_BACKSPACE);\n }\n this.fireEvent(BI.Input.EVENT_KEY_DOWN, arguments);\n\n // _valueChange中会更新_lastValue, 这边缓存用以后续STOP事件服务\n var lastValue = this._lastValue;\n if(BI.trim(this.getValue()) !== BI.trim(this._lastValue || \"\")){\n this._valueChange();\n }\n if (BI.isEndWithBlank(this.getValue())) {\n this._pause = true;\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.PAUSE, \"\", this);\n this.fireEvent(BI.Input.EVENT_PAUSE);\n this._defaultState();\n } else if ((keyCode === BI.KeyCode.BACKSPACE || keyCode === BI.KeyCode.DELETE) &&\n BI.trim(this.getValue()) === \"\" && (lastValue !== null && BI.trim(lastValue) !== \"\")) {\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.STOPEDIT, this.getValue(), this);\n this.fireEvent(BI.Input.EVENT_STOP);\n }\n },\n\n // 初始状态\n _defaultState: function () {\n if (this.getValue() == \"\") {\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EMPTY, this.getValue(), this);\n this.fireEvent(BI.Input.EVENT_EMPTY);\n }\n this._lastValue = this.getValue();\n this._lastSubmitValue = null;\n },\n\n _valueChange: function () {\n if (this.isValid() && BI.trim(this.getValue()) !== this._lastSubmitValue) {\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CHANGE, this.getValue(), this);\n this.fireEvent(BI.Input.EVENT_CHANGE);\n this._lastSubmitValue = BI.trim(this.getValue());\n }\n if (this.getValue() == \"\") {\n this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EMPTY, this.getValue(), this);\n this.fireEvent(BI.Input.EVENT_EMPTY);\n }\n this._lastValue = this.getValue();\n },\n\n _checkValidationOnValueChange: function () {\n var o = this.options;\n var v = this.getValue();\n this.setValid(\n (o.allowBlank === true && BI.trim(v) == \"\") || (\n BI.isNotEmptyString(BI.trim(v)) && o.validationChecker.apply(this, [BI.trim(v)]) !== false\n )\n );\n },\n\n focus: function () {\n if (!this.element.is(\":visible\")) {\n throw new Error(\"input输入框在不可见下不能focus\");\n }\n if (!this._isEditing === true) {\n this.element.focus();\n this.selectAll();\n }\n },\n\n blur: function () {\n if (!this.element.is(\":visible\")) {\n throw new Error(\"input输入框在不可见下不能blur\");\n }\n if (this._isEditing === true) {\n this.element.blur();\n this._blurDebounce();\n }\n },\n\n selectAll: function () {\n if (!this.element.is(\":visible\")) {\n throw new Error(\"input输入框在不可见下不能select\");\n }\n this.element.select();\n this._isEditing = true;\n },\n\n setValue: function (textValue) {\n this.element.val(textValue);\n BI.nextTick(BI.bind(function () {\n this._checkValidationOnValueChange();\n this._defaultState();\n if (this.isValid()) {\n this._lastValidValue = this._lastSubmitValue = this.getValue();\n }\n }, this));\n },\n\n getValue: function () {\n return this.element.val() || \"\";\n },\n\n isEditing: function () {\n return this._isEditing;\n },\n\n getLastValidValue: function () {\n return this._lastValidValue;\n },\n\n getLastChangedValue: function () {\n return this._lastChangedValue;\n },\n\n _setValid: function () {\n BI.Input.superclass._setValid.apply(this, arguments);\n if (this.isValid()) {\n this._lastChangedValue = this.getValue();\n this.element.removeClass(\"bi-input-error\");\n this.fireEvent(BI.Input.EVENT_VALID, BI.trim(this.getValue()), this);\n } else {\n if (this._lastChangedValue === this.getValue()) {\n this._lastChangedValue = null;\n }\n this.element.addClass(\"bi-input-error\");\n this.fireEvent(BI.Input.EVENT_ERROR, BI.trim(this.getValue()), this);\n }\n },\n\n _setEnable: function (b) {\n BI.Input.superclass._setEnable.apply(this, [b]);\n this.element[0].disabled = !b;\n }\n});\nBI.Input.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.Input.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.Input.EVENT_CLICK = \"EVENT_CLICK\";\nBI.Input.EVENT_BLUR = \"EVENT_BLUR\";\nBI.Input.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.Input.EVENT_QUICK_DOWN = \"EVENT_QUICK_DOWN\";\nBI.Input.EVENT_SPACE = \"EVENT_SPACE\";\nBI.Input.EVENT_BACKSPACE = \"EVENT_BACKSPACE\";\n\nBI.Input.EVENT_START = \"EVENT_START\";\nBI.Input.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.Input.EVENT_STOP = \"EVENT_STOP\";\nBI.Input.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.Input.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.Input.EVENT_REMOVE = \"EVENT_REMOVE\";\nBI.Input.EVENT_EMPTY = \"EVENT_EMPTY\";\nBI.Input.EVENT_VALID = \"EVENT_VALID\";\nBI.Input.EVENT_ERROR = \"EVENT_ERROR\";\nBI.Input.EVENT_ENTER = \"EVENT_ENTER\";\nBI.Input.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.shortcut(\"bi.input\", BI.Input);\n","/**\n * guy\n * @extends BI.Single\n * @type {*|void|Object}\n */\nBI.ImageRadio = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n var conf = BI.ImageRadio.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-radio radio-icon\",\n selected: false,\n handler: BI.emptyFn,\n width: 16,\n height: 16,\n iconWidth: 16,\n iconHeight: 16\n });\n },\n\n _init: function () {\n BI.ImageRadio.superclass._init.apply(this, arguments);\n },\n\n doClick: function () {\n BI.ImageRadio.superclass.doClick.apply(this, arguments);\n if(this.isValid()) {\n this.fireEvent(BI.ImageRadio.EVENT_CHANGE);\n }\n }\n});\nBI.ImageRadio.EVENT_CHANGE = BI.IconButton.EVENT_CHANGE;\n\nBI.shortcut(\"bi.image_radio\", BI.ImageRadio);","/**\n * guy\n * @extends BI.Single\n * @type {*|void|Object}\n */\nBI.Radio = BI.inherit(BI.BasicButton, {\n\n props: {\n baseCls: \"bi-radio\",\n selected: false,\n handler: BI.emptyFn,\n width: 16,\n height: 16,\n iconWidth: 14,\n iconHeight: 14\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.center_adapt\",\n element: this.element,\n items: [{\n type: \"bi.layout\",\n cls: \"radio-content\",\n ref: function (_ref) {\n self.radio = _ref;\n },\n width: o.iconWidth,\n height: o.iconHeight\n }]\n };\n },\n\n _setEnable: function (enable) {\n BI.Radio.superclass._setEnable.apply(this, arguments);\n if (enable === true) {\n this.radio.element.removeClass(\"base-disabled disabled\");\n } else {\n this.radio.element.addClass(\"base-disabled disabled\");\n }\n },\n\n doClick: function () {\n BI.Radio.superclass.doClick.apply(this, arguments);\n if(this.isValid()) {\n this.fireEvent(BI.Radio.EVENT_CHANGE);\n }\n },\n\n setSelected: function (b) {\n BI.Radio.superclass.setSelected.apply(this, arguments);\n if (b) {\n this.radio.element.addClass(\"bi-high-light-background\");\n } else {\n this.radio.element.removeClass(\"bi-high-light-background\");\n }\n }\n});\nBI.Radio.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.radio\", BI.Radio);","/**\n * Created by dailer on 2019/6/19.\n */\n\nBI.AbstractLabel = BI.inherit(BI.Single, {\n\n _defaultConfig: function (props) {\n var conf = BI.AbstractLabel.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n textAlign: \"center\",\n whiteSpace: \"nowrap\", // normal or nowrap\n textWidth: null,\n textHeight: null,\n hgap: 0,\n vgap: 0,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n text: \"\",\n highLight: false\n });\n },\n\n _createJson: function () {\n var o = this.options;\n return {\n type: \"bi.text\",\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n lineHeight: o.textHeight,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword,\n highLight: o.highLight\n };\n },\n\n _init: function () {\n BI.AbstractLabel.superclass._init.apply(this, arguments);\n\n if (this.options.textAlign === \"center\") {\n this._createCenterEl();\n } else {\n this._createNotCenterEl();\n }\n },\n\n _createCenterEl: function () {\n var o = this.options;\n var json = this._createJson();\n json.textAlign = \"left\";\n if (BI.isNumber(o.width) && o.width > 0) {\n if (BI.isNumber(o.textWidth) && o.textWidth > 0) {\n json.maxWidth = o.textWidth;\n if (BI.isNumber(o.height) && o.height > 0) { // 1.1\n BI.createWidget({\n type: \"bi.center_adapt\",\n height: o.height,\n scrollable: o.whiteSpace === \"normal\",\n element: this,\n items: [\n {\n el: (this.text = BI.createWidget(json))\n }\n ]\n });\n return;\n }\n BI.createWidget({ // 1.2\n type: \"bi.center_adapt\",\n scrollable: o.whiteSpace === \"normal\",\n element: this,\n items: [\n {\n el: (this.text = BI.createWidget(json))\n }\n ]\n });\n return;\n }\n if (o.whiteSpace == \"normal\") { // 1.3\n BI.extend(json, {\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n });\n this.text = BI.createWidget(json);\n BI.createWidget({\n type: \"bi.center_adapt\",\n scrollable: o.whiteSpace === \"normal\",\n element: this,\n items: [this.text]\n });\n return;\n }\n if (BI.isNumber(o.height) && o.height > 0) { // 1.4\n this.element.css({\n \"line-height\": o.height + \"px\"\n });\n json.textAlign = o.textAlign;\n this.text = BI.createWidget(BI.extend(json, {\n element: this,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n }));\n return;\n }\n BI.extend(json, { // 1.5\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n maxWidth: \"100%\"\n });\n this.text = BI.createWidget(json);\n BI.createWidget({\n type: \"bi.center_adapt\",\n scrollable: o.whiteSpace === \"normal\",\n element: this,\n items: [this.text]\n });\n return;\n }\n if (BI.isNumber(o.textWidth) && o.textWidth > 0) { // 1.6\n json.maxWidth = o.textWidth;\n BI.createWidget({\n type: \"bi.center_adapt\",\n scrollable: o.whiteSpace === \"normal\",\n element: this,\n items: [\n {\n el: (this.text = BI.createWidget(json))\n }\n ]\n });\n return;\n }\n if (o.whiteSpace == \"normal\") { // 1.7\n BI.extend(json, {\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n });\n this.text = BI.createWidget(json);\n BI.createWidget({\n type: \"bi.center_adapt\",\n scrollable: true,\n element: this,\n items: [this.text]\n });\n return;\n }\n if (BI.isNumber(o.height) && o.height > 0) { // 1.8\n this.element.css({\n \"line-height\": o.height + \"px\"\n });\n json.textAlign = o.textAlign;\n this.text = BI.createWidget(BI.extend(json, {\n element: this,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n }));\n return;\n }\n BI.extend(json, {\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n });\n\n this.text = BI.createWidget(BI.extend(json, {\n maxWidth: \"100%\"\n }));\n BI.createWidget({\n type: \"bi.center_adapt\",\n element: this,\n items: [this.text]\n });\n },\n\n _createNotCenterEl: function () {\n var o = this.options;\n var adaptLayout = o.textAlign === \"right\" ? \"bi.right_vertical_adapt\" : \"bi.vertical_adapt\";\n var json = this._createJson();\n if (BI.isNumber(o.width) && o.width > 0) {\n if (BI.isNumber(o.textWidth) && o.textWidth > 0) {\n json.width = o.textWidth;\n if (BI.isNumber(o.height) && o.height > 0) { // 2.1\n BI.createWidget({\n type: adaptLayout,\n height: o.height,\n scrollable: o.whiteSpace === \"normal\",\n element: this,\n items: [\n {\n el: (this.text = BI.createWidget(json))\n }\n ]\n });\n return;\n }\n BI.createWidget({ // 2.2\n type: adaptLayout,\n scrollable: o.whiteSpace === \"normal\",\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n element: this,\n items: [\n {\n el: (this.text = BI.createWidget(json))\n }\n ]\n });\n return;\n }\n if (BI.isNumber(o.height) && o.height > 0) { // 2.3\n this.text = BI.createWidget(BI.extend(json, {\n element: this,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n }));\n if (o.whiteSpace !== \"normal\") {\n this.element.css({\n \"line-height\": o.height - (o.vgap * 2) + \"px\"\n });\n }\n return;\n }\n json.width = o.width - 2 * o.hgap - o.lgap - o.rgap;\n BI.createWidget({ // 2.4\n type: adaptLayout,\n scrollable: o.whiteSpace === \"normal\",\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n element: this,\n items: [{\n el: (this.text = BI.createWidget(json))\n }]\n });\n return;\n }\n if (BI.isNumber(o.textWidth) && o.textWidth > 0) {\n json.width = o.textWidth;\n BI.createWidget({ // 2.5\n type: adaptLayout,\n scrollable: o.whiteSpace === \"normal\",\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n element: this,\n items: [\n {\n el: (this.text = BI.createWidget(json))\n }\n ]\n });\n return;\n }\n if (BI.isNumber(o.height) && o.height > 0) {\n if (o.whiteSpace !== \"normal\") {\n this.element.css({\n \"line-height\": o.height - (o.vgap * 2) + \"px\"\n });\n }\n this.text = BI.createWidget(BI.extend(json, { // 2.6\n element: this,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n }));\n return;\n }\n BI.extend(json, {\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap\n });\n\n this.text = BI.createWidget(BI.extend(json, {\n maxWidth: \"100%\"\n }));\n BI.createWidget({\n type: adaptLayout,\n element: this,\n scrollable: o.whiteSpace === \"normal\",\n items: [this.text]\n });\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n setText: function (v) {\n this.options.text = v;\n this.text.setText(v);\n },\n\n getText: function () {\n return this.options.text;\n },\n\n setStyle: function (css) {\n this.text.setStyle(css);\n },\n\n setValue: function (v) {\n BI.AbstractLabel.superclass.setValue.apply(this, arguments);\n if (!this.isReadOnly()) {\n this.text.setValue(v);\n }\n },\n\n populate: function () {\n BI.AbstractLabel.superclass.populate.apply(this, arguments);\n }\n});","/**\n * Created by GUY on 2015/6/26.\n */\n\nBI.HtmlLabel = BI.inherit(BI.AbstractLabel, {\n\n props: {\n baseCls: \"bi-html-label\"\n },\n\n _createJson: function () {\n var o = this.options;\n return {\n type: \"bi.html\",\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n lineHeight: o.textHeight,\n text: o.text,\n value: o.value\n };\n }\n});\n\nBI.shortcut(\"bi.html_label\", BI.HtmlLabel);","/**\n * @class BI.IconButton\n * @extends BI.BasicButton\n * 图标标签\n */\nBI.IconLabel = BI.inherit(BI.Single, {\n\n props: {\n baseCls: \"bi-icon-label horizon-center\",\n iconWidth: null,\n iconHeight: null\n },\n\n _init: function () {\n BI.IconLabel.superclass._init.apply(this, arguments);\n var o = this.options;\n this.element.css({\n textAlign: \"center\"\n });\n this.icon = BI.createWidget({\n type: \"bi.icon\",\n width: o.iconWidth,\n height: o.iconHeight\n });\n if (BI.isNumber(o.height) && o.height > 0 && BI.isNull(o.iconWidth) && BI.isNull(o.iconHeight)) {\n this.element.css(\"lineHeight\", o.height + \"px\");\n BI.createWidget({\n type: \"bi.default\",\n element: this,\n items: [this.icon]\n });\n } else {\n this.element.css(\"lineHeight\", \"1\");\n BI.createWidget({\n element: this,\n type: \"bi.center_adapt\",\n items: [this.icon]\n });\n }\n }\n});\nBI.shortcut(\"bi.icon_label\", BI.IconLabel);","/**\n * Created by GUY on 2015/6/26.\n */\n\nBI.Label = BI.inherit(BI.AbstractLabel, {\n\n props: {\n baseCls: \"bi-label\",\n py: \"\",\n keyword: \"\"\n },\n\n _createJson: function () {\n var o = this.options;\n return {\n type: \"bi.text\",\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n lineHeight: o.textHeight,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword,\n highLight: o.highLight\n };\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n }\n});\n\nBI.shortcut(\"bi.label\", BI.Label);","/**\n * guy a元素\n * @class BI.Link\n * @extends BI.Text\n */\nBI.Link = BI.inherit(BI.Label, {\n _defaultConfig: function () {\n var conf = BI.Link.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-link display-block\",\n tagName: \"a\",\n href: \"\",\n target: \"_blank\"\n });\n },\n\n _createJson: function () {\n var o = this.options;\n return {\n type: \"bi.a\",\n textAlign: o.textAlign,\n whiteSpace: o.whiteSpace,\n lineHeight: o.textHeight,\n text: o.text,\n keyword: o.keyword,\n value: o.value,\n py: o.py,\n href: o.href,\n target: o.target\n };\n },\n\n _init: function () {\n BI.Link.superclass._init.apply(this, arguments);\n }\n});\n\nBI.shortcut(\"bi.link\", BI.Link);","/**\n * guy\n * 气泡提示\n * @class BI.Bubble\n * @extends BI.Tip\n * @type {*|void|Object}\n */\nBI.Bubble = BI.inherit(BI.Tip, {\n _defaultConfig: function () {\n return BI.extend(BI.Bubble.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-bubble\",\n direction: \"top\",\n text: \"\",\n level: \"error\",\n height: 18\n });\n },\n _init: function () {\n BI.Bubble.superclass._init.apply(this, arguments);\n var fn = function (e) {\n e.stopPropagation();\n e.stopEvent();\n return false;\n };\n this.element.bind({click: fn, mousedown: fn, mouseup: fn, mouseover: fn, mouseenter: fn, mouseleave: fn, mousemove: fn});\n BI.createWidget({\n type: \"bi.left\",\n element: this,\n items: [this[\"_\" + this.options.direction]()]\n });\n },\n\n _createBubbleText: function () {\n var o = this.options;\n return (this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"bubble-text\" + (\" bubble-\" + o.level),\n text: o.text,\n hgap: 5,\n height: 18\n }));\n },\n\n _top: function () {\n return BI.createWidget({\n type: \"bi.vertical\",\n items: [{\n el: this._createBubbleText(),\n height: 18\n }, {\n el: {\n type: \"bi.layout\"\n },\n height: 3\n }]\n });\n },\n\n _bottom: function () {\n return BI.createWidget({\n type: \"bi.vertical\",\n items: [{\n el: {\n type: \"bi.layout\"\n },\n height: 3\n }, {\n el: this._createBubbleText(),\n height: 18\n }]\n });\n },\n\n _left: function () {\n return BI.createWidget({\n type: \"bi.right\",\n items: [{\n el: {\n type: \"bi.layout\",\n width: 3,\n height: 18\n }\n }, {\n el: this._createBubbleText()\n }]\n });\n },\n\n _right: function () {\n return BI.createWidget({\n type: \"bi.left\",\n items: [{\n el: {\n type: \"bi.layout\",\n width: 3,\n height: 18\n }\n }, {\n el: this._createBubbleText()\n }]\n });\n },\n\n setText: function (text) {\n this.text.setText(text);\n }\n});\n\nBI.shortcut(\"bi.bubble\", BI.Bubble);","/**\n * toast提示\n *\n * Created by GUY on 2015/9/7.\n * @class BI.Toast\n * @extends BI.Tip\n */\nBI.Toast = BI.inherit(BI.Tip, {\n _const: {\n minWidth: 200,\n hgap: 10\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.Toast.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-toast\",\n text: \"\",\n level: \"success\" // success或warning\n });\n },\n _init: function () {\n BI.Toast.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.element.css({\n minWidth: this._const.minWidth + \"px\"\n });\n this.element.addClass(\"toast-\" + o.level);\n var fn = function (e) {\n e.stopPropagation();\n e.stopEvent();\n return false;\n };\n this.element.bind({click: fn, mousedown: fn, mouseup: fn, mouseover: fn, mouseenter: fn, mouseleave: fn, mousemove: fn});\n var cls = \"close-font\";\n switch(o.level) {\n case \"success\":\n cls = \"toast-success-font\";\n break;\n case \"error\":\n cls = \"toast-error-font\";\n break;\n case \"warning\":\n cls = \"toast-warning-font\";\n break;\n case \"normal\":\n default:\n cls = \"toast-message-font\";\n break;\n }\n\n var items = [{\n type: \"bi.icon_label\",\n cls: cls + \" toast-icon\",\n width: 36\n }, {\n el: {\n type: \"bi.label\",\n whiteSpace: \"normal\",\n text: o.text,\n textHeight: 16,\n textAlign: \"left\"\n },\n rgap: o.autoClose ? this._const.hgap : 0\n }];\n\n var columnSize = [36, \"\"];\n\n if(o.autoClose === false) {\n items.push({\n type: \"bi.icon_button\",\n cls: \"close-font toast-icon\",\n handler: function () {\n self.destroy();\n },\n width: 36\n });\n columnSize.push(36);\n }\n\n this.text = BI.createWidget({\n type: \"bi.horizontal_adapt\",\n element: this,\n items: items,\n vgap: 7,\n columnSize: columnSize\n });\n },\n\n setText: function (text) {\n this.text.setText(text);\n },\n\n beforeDestroy: function () {\n this.fireEvent(BI.Toast.EVENT_DESTORY);\n }\n});\nBI.Toast.EVENT_DESTORY = \"EVENT_DESTORY\";\nBI.shortcut(\"bi.toast\", BI.Toast);","/**\n * title提示\n *\n * Created by GUY on 2015/9/7.\n * @class BI.Tooltip\n * @extends BI.Tip\n */\nBI.Tooltip = BI.inherit(BI.Tip, {\n _const: {\n hgap: 5,\n vgap: 3\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.Tooltip.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-tooltip\",\n text: \"\",\n level: \"success\", // success或warning\n stopEvent: false,\n stopPropagation: false\n });\n },\n _init: function () {\n BI.Tooltip.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.element.addClass(\"tooltip-\" + o.level);\n var fn = function (e) {\n o.stopPropagation && e.stopPropagation();\n o.stopEvent && e.stopEvent();\n };\n this.element.bind({\n click: fn,\n mousedown: fn,\n mouseup: fn,\n mouseover: fn,\n mouseenter: fn,\n mouseleave: fn,\n mousemove: fn\n });\n\n var texts = (o.text + \"\").split(\"\\n\");\n if (texts.length > 1) {\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n hgap: this._const.hgap,\n items: BI.map(texts, function (i, text) {\n return {\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"normal\",\n text: text,\n textHeight: 18\n };\n })\n });\n } else {\n this.text = BI.createWidget({\n type: \"bi.label\",\n element: this,\n textAlign: \"left\",\n whiteSpace: \"normal\",\n text: o.text,\n textHeight: 18,\n hgap: this._const.hgap\n });\n }\n },\n\n setWidth: function (width) {\n this.element.width(width - 2 * this._const.hgap);\n },\n\n setText: function (text) {\n this.text && this.text.setText(text);\n },\n\n setLevel: function (level) {\n this.element.removeClass(\"tooltip-success\").removeClass(\"tooltip-warning\");\n this.element.addClass(\"tooltip-\" + level);\n }\n});\n\nBI.shortcut(\"bi.tooltip\", BI.Tooltip);","/**\n * 下拉\n * @class BI.Trigger\n * @extends BI.Single\n * @abstract\n */\nBI.Trigger = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.Trigger.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n _baseCls: (conf._baseCls || \"\") + \" bi-trigger cursor-pointer\",\n height: 24\n });\n },\n\n _init: function () {\n BI.Trigger.superclass._init.apply(this, arguments);\n },\n\n setKey: function () {\n\n },\n\n getKey: function () {\n\n }\n});","/**\n *\n * 自定义树\n *\n * Created by GUY on 2015/9/7.\n * @class BI.CustomTree\n * @extends BI.Single\n */\nBI.CustomTree = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.CustomTree.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-custom-tree\",\n expander: {\n el: {},\n popup: {\n type: \"bi.custom_tree\"\n }\n },\n\n items: [],\n itemsCreator: BI.emptyFn,\n\n el: {\n type: \"bi.button_tree\",\n chooseType: 0,\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n });\n },\n\n _init: function () {\n BI.CustomTree.superclass._init.apply(this, arguments);\n this.initTree(this.options.items);\n },\n\n _formatItems: function (nodes) {\n var self = this, o = this.options;\n nodes = BI.Tree.transformToTreeFormat(nodes);\n\n var items = [];\n BI.each(nodes, function (i, node) {\n if (BI.isNotEmptyArray(node.children) || node.isParent === true) {\n var item = BI.extend({\n type: \"bi.expander\",\n el: {\n value: node.value\n },\n popup: {type: \"bi.custom_tree\"}\n }, BI.deepClone(o.expander), {\n id: node.id,\n pId: node.pId\n });\n var el = BI.stripEL(node);\n if (!BI.isWidget(el)) {\n el = BI.clone(el);\n delete el.children;\n BI.extend(item.el, el);\n } else {\n item.el = el;\n }\n item.popup.expander = BI.deepClone(o.expander);\n item.items = item.popup.items = node.children;\n item.itemsCreator = item.popup.itemsCreator = function (op) {\n if (BI.isNotNull(op.node)) {// 从子节点传过来的itemsCreator直接向上传递\n return o.itemsCreator.apply(self, arguments);\n }\n var args = Array.prototype.slice.call(arguments, 0);\n args[0].node = node;\n return o.itemsCreator.apply(self, args);\n };\n BI.isNull(item.popup.el) && (item.popup.el = BI.deepClone(o.el));\n items.push(item);\n } else {\n items.push(node);\n }\n });\n return items;\n },\n\n // 构造树结构,\n initTree: function (nodes) {\n var self = this, o = this.options;\n this.tree = BI.createWidget(o.el, {\n element: this,\n items: this._formatItems(nodes),\n itemsCreator: function (op, callback) {\n o.itemsCreator.apply(this, [op, function (items) {\n var args = Array.prototype.slice.call(arguments, 0);\n args[0] = self._formatItems(items);\n callback.apply(null, args);\n }]);\n },\n value: o.value\n });\n this.tree.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.CustomTree.EVENT_CHANGE, val, obj);\n }\n });\n },\n\n // 生成树方法\n stroke: function (nodes) {\n this.populate.apply(this, arguments);\n },\n\n populate: function (nodes) {\n var args = Array.prototype.slice.call(arguments, 0);\n if (arguments.length > 0) {\n args[0] = this._formatItems(nodes);\n }\n this.tree.populate.apply(this.tree, args);\n },\n\n setValue: function (v) {\n this.tree && this.tree.setValue(v);\n },\n\n getValue: function () {\n return this.tree ? this.tree.getValue() : [];\n },\n\n getAllButtons: function () {\n return this.tree ? this.tree.getAllButtons() : [];\n },\n\n getAllLeaves: function () {\n return this.tree ? this.tree.getAllLeaves() : [];\n },\n\n getNodeById: function (id) {\n return this.tree && this.tree.getNodeById(id);\n },\n\n getNodeByValue: function (id) {\n return this.tree && this.tree.getNodeByValue(id);\n },\n\n empty: function () {\n this.tree.empty();\n }\n});\nBI.CustomTree.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.custom_tree\", BI.CustomTree);","/**\n * 可以改变图标的button\n *\n * Created by GUY on 2016/2/2.\n *\n * @class BI.IconChangeButton\n * @extends BI.Single\n */\nBI.IconChangeButton = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n var conf = BI.IconChangeButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-icon-change-button\",\n iconCls: \"\",\n iconWidth: null,\n iconHeight: null,\n\n stopEvent: false,\n stopPropagation: false,\n selected: false,\n once: false, // 点击一次选中有效,再点无效\n forceSelected: false, // 点击即选中, 选中了就不会被取消\n forceNotSelected: false, // 无论怎么点击都不会被选中\n disableSelected: false, // 使能选中\n\n shadow: false,\n isShadowShowingOnSelected: false, // 选中状态下是否显示阴影\n trigger: null,\n handler: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.IconChangeButton.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.button = BI.createWidget({\n type: \"bi.icon_button\",\n element: this,\n cls: o.iconCls,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight,\n\n stopEvent: o.stopEvent,\n stopPropagation: o.stopPropagation,\n selected: o.selected,\n once: o.once,\n forceSelected: o.forceSelected,\n forceNotSelected: o.forceNotSelected,\n disableSelected: o.disableSelected,\n\n shadow: o.shadow,\n isShadowShowingOnSelected: o.isShadowShowingOnSelected,\n trigger: o.trigger,\n handler: o.handler\n });\n\n this.button.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.button.on(BI.IconButton.EVENT_CHANGE, function () {\n self.fireEvent(BI.IconChangeButton.EVENT_CHANGE, arguments);\n });\n },\n\n isSelected: function () {\n return this.button.isSelected();\n },\n\n setSelected: function (b) {\n this.button.setSelected(b);\n },\n\n setIcon: function (cls) {\n var o = this.options;\n if (o.iconCls !== cls) {\n this.element.removeClass(o.iconCls).addClass(cls);\n o.iconCls = cls;\n }\n }\n});\nBI.IconChangeButton.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_change_button\", BI.IconChangeButton);","/**\n * 统一的trigger图标按钮\n *\n * Created by GUY on 2015/9/16.\n * @class BI.TriggerIconButton\n * @extends BI.IconButton\n */\nBI.TriggerIconButton = BI.inherit(BI.IconButton, {\n\n _defaultConfig: function () {\n var conf = BI.TriggerIconButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-trigger-icon-button\",\n extraCls: \"pull-down-font\"\n });\n }\n});\nBI.TriggerIconButton.EVENT_CHANGE = BI.IconButton.EVENT_CHANGE;\nBI.shortcut(\"bi.trigger_icon_button\", BI.TriggerIconButton);","/**\n * guy\n * @extends BI.Single\n * @type {*|void|Object}\n */\nBI.HalfIconButton = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n var conf = BI.HalfIconButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-half-icon-button check-half-select-icon\",\n height: 16,\n width: 16,\n iconWidth: 16,\n iconHeight: 16,\n selected: false\n });\n }\n});\nBI.HalfIconButton.EVENT_CHANGE = BI.IconButton.EVENT_CHANGE;\n\nBI.shortcut(\"bi.half_icon_button\", BI.HalfIconButton);","/**\n * guy\n * @extends BI.Single\n * @type {*|void|Object}\n */\nBI.HalfButton = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n var conf = BI.HalfIconButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-half-button bi-high-light-border\",\n height: 14,\n width: 14,\n selected: false\n });\n },\n\n _init: function () {\n BI.HalfButton.superclass._init.apply(this, arguments);\n BI.createWidget({\n type: \"bi.center_adapt\",\n element: this.element,\n items: [{\n type: \"bi.layout\",\n cls: \"bi-high-light-background\",\n width: 8,\n height: 8\n }]\n });\n },\n\n doClick: function () {\n BI.HalfButton.superclass.doClick.apply(this, arguments);\n if(this.isValid()) {\n this.fireEvent(BI.HalfButton.EVENT_CHANGE);\n }\n }\n});\nBI.HalfButton.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.half_button\", BI.HalfButton);","/**\n * guy\n * 复选框item\n * @type {*|void|Object}\n */\nBI.MultiSelectItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-multi-select-item\",\n height: 24,\n logic: {\n dynamic: false\n },\n iconWrapperWidth: 26\n });\n },\n _init: function () {\n BI.MultiSelectItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.checkbox\"\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n rgap: o.rgap,\n text: o.text,\n keyword: o.keyword,\n value: o.value,\n py: o.py\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n self.setSelected(self.isSelected());\n }\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", {\n type: \"bi.center_adapt\",\n items: [this.checkbox],\n width: o.iconWrapperWidth\n }, this.text)\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.MultiSelectItem.superclass.doClick.apply(this, arguments);\n this.checkbox.setSelected(this.isSelected());\n if (this.isValid()) {\n this.fireEvent(BI.MultiSelectItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n setSelected: function (v) {\n BI.MultiSelectItem.superclass.setSelected.apply(this, arguments);\n this.checkbox.setSelected(v);\n }\n});\nBI.MultiSelectItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_item\", BI.MultiSelectItem);","/**\n * Created by GUY on 2016/2/2.\n *\n * @class BI.SingleSelectIconTextItem\n * @extends BI.BasicButton\n */\nBI.SingleSelectIconTextItem = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectIconTextItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-single-select-icon-text-item bi-list-item-active\",\n iconCls: \"\",\n height: 24\n });\n },\n _init: function () {\n BI.SingleSelectIconTextItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.text = BI.createWidget({\n type: \"bi.icon_text_item\",\n element: this,\n cls: o.iconCls,\n once: o.once,\n iconWrapperWidth: o.iconWrapperWidth,\n selected: o.selected,\n height: o.height,\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth,\n text: o.text,\n keyword: o.keyword,\n value: o.value,\n py: o.py\n });\n this.text.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n },\n\n isSelected: function () {\n return this.text.isSelected();\n },\n\n setSelected: function (b) {\n this.text.setSelected(b);\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.SingleSelectIconTextItem.superclass.doClick.apply(this, arguments);\n }\n});\n\nBI.shortcut(\"bi.single_select_icon_text_item\", BI.SingleSelectIconTextItem);","BI.SingleSelectItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-single-select-item bi-list-item-active\",\n hgap: 10,\n height: 24,\n textAlign: \"left\"\n });\n },\n _init: function () {\n BI.SingleSelectItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n element: this,\n textAlign: o.textAlign,\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n keyword: o.keyword,\n value: o.value,\n title: o.title || o.text,\n warningTitle: o.warningTitle,\n py: o.py\n });\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.SingleSelectItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.SingleSelectItem.EVENT_CHANGE, this.isSelected(), this);\n }\n },\n\n setSelected: function (v) {\n BI.SingleSelectItem.superclass.setSelected.apply(this, arguments);\n }\n});\n\nBI.SingleSelectItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_select_item\", BI.SingleSelectItem);","/**\n * guy\n * 单选框item\n * @type {*|void|Object}\n */\nBI.SingleSelectRadioItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectRadioItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-single-select-radio-item\",\n logic: {\n dynamic: false\n },\n hgap: 10,\n height: 24\n });\n },\n _init: function () {\n BI.SingleSelectRadioItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.radio = BI.createWidget({\n type: \"bi.radio\",\n once: o.once\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n keyword: o.keyword,\n value: o.value,\n py: o.py\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", {\n type: \"bi.center_adapt\",\n items: [this.radio],\n width: 16\n }, this.text)\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.SingleSelectRadioItem.superclass.doClick.apply(this, arguments);\n this.radio.setSelected(this.isSelected());\n if (this.isValid()) {\n this.fireEvent(BI.SingleSelectRadioItem.EVENT_CHANGE, this.isSelected(), this);\n }\n },\n\n setSelected: function (v) {\n BI.SingleSelectRadioItem.superclass.setSelected.apply(this, arguments);\n this.radio.setSelected(v);\n\n }\n});\n\nBI.SingleSelectRadioItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_select_radio_item\", BI.SingleSelectRadioItem);","/**\n * Created by roy on 15/10/16.\n */\nBI.ArrowNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.ArrowNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-arrow-group-node bi-list-item\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n open: false,\n height: 24,\n iconWrapperWidth: 16\n });\n },\n _init: function () {\n var self = this, o = this.options;\n BI.ArrowNode.superclass._init.apply(this, arguments);\n this.checkbox = BI.createWidget({\n type: \"bi.arrow_group_node_checkbox\"\n });\n\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n self.setSelected(self.isSelected());\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: o.iconWrapperWidth,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.ArrowNode.superclass.doClick.apply(this, arguments);\n this.checkbox.setSelected(this.isOpened());\n },\n \n setText: function (text) {\n BI.ArrowNode.superclass.setText.apply(this, arguments);\n this.text.setText(text);\n },\n\n setOpened: function (v) {\n BI.ArrowNode.superclass.setOpened.apply(this, arguments);\n this.checkbox.setSelected(v);\n }\n});\n\nBI.shortcut(\"bi.arrow_group_node\", BI.ArrowNode);","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.FirstPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.FirstPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.FirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-first-plus-group-node bi-list-item\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.FirstPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.first_tree_node_checkbox\",\n stopPropagation: true\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.FirstPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.checkbox.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.FirstPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.first_plus_group_node\", BI.FirstPlusGroupNode);","/**\n * Created by User on 2016/3/31.\n */\n/**\n * > + icon + 文本\n * @class BI.IconArrowNode\n * @extends BI.NodeButton\n */\nBI.IconArrowNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.IconArrowNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-icon-arrow-node bi-list-item\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n open: false,\n height: 24,\n iconHeight: 12,\n iconWidth: 12,\n iconCls: \"\",\n iconWrapperWidth: 16\n });\n },\n _init: function () {\n BI.IconArrowNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.arrow_group_node_checkbox\",\n width: 24,\n stopPropagation: true\n });\n\n var icon = BI.createWidget({\n type: \"bi.icon_label\",\n width: 24,\n cls: o.iconCls,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: o.iconWrapperWidth,\n el: this.checkbox\n }, {\n width: 16,\n el: icon\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items,\n rgap: 5\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.IconArrowNode.superclass.doClick.apply(this, arguments);\n this.checkbox.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.IconArrowNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.icon_arrow_node\", BI.IconArrowNode);","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.LastPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.LastPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.LastPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-last-plus-group-node bi-list-item\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.LastPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.last_tree_node_checkbox\",\n stopPropagation: true\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if(type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.LastPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.checkbox.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.LastPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.last_plus_group_node\", BI.LastPlusGroupNode);","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.MidPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MidPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MidPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-mid-plus-group-node bi-list-item\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MidPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.mid_tree_node_checkbox\",\n stopPropagation: true\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.MidPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.checkbox.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MidPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.mid_plus_group_node\", BI.MidPlusGroupNode);","BI.MultiLayerIconArrowNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerIconArrowNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-icon-arrow-node bi-list-item\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n open: false,\n height: 24,\n iconHeight: 16,\n iconWidth: 16,\n iconCls: \"\"\n });\n },\n _init: function () {\n BI.MultiLayerIconArrowNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = BI.createWidget({\n type: \"bi.icon_arrow_node\",\n iconCls: o.iconCls,\n cls: \"bi-list-item-none\",\n id: o.id,\n pId: o.pId,\n open: o.open,\n height: o.height,\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n this.node.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.setSelected(self.isSelected());\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var items = [];\n BI.count(0, o.layer, function () {\n items.push({\n type: \"bi.layout\",\n width: 15,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 15),\n items: [items]\n });\n },\n\n isOnce: function () {\n return true;\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n isSelected: function () {\n return this.node.isSelected();\n },\n\n setSelected: function (b) {\n BI.MultiLayerIconArrowNode.superclass.setSelected.apply(this, arguments);\n this.node.setSelected(b);\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerIconArrowNode.superclass.setOpened.apply(this, arguments);\n this.node.setOpened(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_icon_arrow_node\", BI.MultiLayerIconArrowNode);\n","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.PlusGroupNode\n * @extends BI.NodeButton\n */\nBI.PlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.PlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-plus-group-node bi-list-item\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.PlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.tree_node_checkbox\"\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n py: o.py\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n self.setSelected(self.isSelected());\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.PlusGroupNode.superclass.doClick.apply(this, arguments);\n this.checkbox.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.PlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (this.checkbox) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.plus_group_node\", BI.PlusGroupNode);","/**\n * Created by Windy on 2018/2/1.\n */\nBI.Switch = BI.inherit(BI.BasicButton, {\n\n props: {\n extraCls: \"bi-switch\",\n height: 22,\n width: 44,\n logic: {\n dynamic: false\n }\n },\n\n render: function () {\n var self = this;\n return {\n type: \"bi.absolute\",\n ref: function () {\n self.layout = this;\n },\n items: [{\n el: {\n type: \"bi.text_button\",\n cls: \"circle-button bi-card\"\n },\n width: 18,\n height: 18,\n top: 2,\n left: this.options.selected ? 24 : 2\n }]\n };\n },\n\n setSelected: function (v) {\n BI.Switch.superclass.setSelected.apply(this, arguments);\n this.layout.attr(\"items\")[0].left = v ? 24 : 2;\n this.layout.resize();\n },\n\n doClick: function () {\n BI.Switch.superclass.doClick.apply(this, arguments);\n this.fireEvent(BI.Switch.EVENT_CHANGE);\n }\n});\nBI.Switch.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.switch\", BI.Switch);","BI.FirstTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.FirstTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-first-tree-leaf-item bi-list-item-active\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n layer: 0,\n height: 24\n });\n },\n _init: function () {\n BI.FirstTreeLeafItem.superclass._init.apply(this, arguments);\n var o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, ((o.layer === 0) ? \"\" : {\n width: 12,\n el: {\n type: \"bi.layout\",\n cls: (o.pNode && o.pNode.isLastNode) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n }\n }), {\n width: 24,\n el: {\n type: \"bi.layout\",\n cls: \"first-line-conn-background\",\n width: 24,\n height: o.height\n }\n }, {\n el: this.text\n });\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n }\n});\n\nBI.shortcut(\"bi.first_tree_leaf_item\", BI.FirstTreeLeafItem);","BI.IconTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.IconTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-icon-tree-leaf-item bi-list-item-active\",\n logic: {\n dynamic: false\n },\n height: 24,\n iconWidth: 16,\n iconHeight: 16,\n iconCls: \"\"\n });\n },\n\n _init: function () {\n BI.IconTreeLeafItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n var icon = BI.createWidget({\n type: \"bi.center_adapt\",\n width: 24,\n cls: o.iconCls,\n items: [{\n type: \"bi.icon\",\n width: o.iconWidth,\n height: o.iconHeight\n }]\n });\n\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 16,\n el: icon\n }, {\n el: this.text\n });\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items,\n hgap: 5\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n }\n});\n\nBI.shortcut(\"bi.icon_tree_leaf_item\", BI.IconTreeLeafItem);","BI.LastTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.LastTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-last-tree-leaf-item bi-list-item-active\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n layer: 0,\n height: 24\n });\n },\n _init: function () {\n BI.LastTreeLeafItem.superclass._init.apply(this, arguments);\n var o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, ((o.layer === 0) ? \"\" : {\n width: 12,\n el: {\n type: \"bi.layout\",\n cls: (o.pNode && o.pNode.isLastNode) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n }\n }), {\n width: 24,\n el: {\n type: \"bi.layout\",\n cls: \"last-line-conn-background\",\n width: 24,\n height: o.height\n }\n }, {\n el: this.text\n });\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n }\n});\n\nBI.shortcut(\"bi.last_tree_leaf_item\", BI.LastTreeLeafItem);","BI.MidTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.MidTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-mid-tree-leaf-item bi-list-item-active\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n layer: 0,\n height: 24\n });\n },\n _init: function () {\n BI.MidTreeLeafItem.superclass._init.apply(this, arguments);\n var o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, ((o.layer === 0) ? \"\" : {\n width: 12,\n el: {\n type: \"bi.layout\",\n cls: (o.pNode && o.pNode.isLastNode) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n }\n }), {\n width: 24,\n el: {\n type: \"bi.layout\",\n cls: \"mid-line-conn-background\",\n width: 24,\n height: o.height\n }\n }, {\n el: this.text\n });\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n }\n});\n\nBI.shortcut(\"bi.mid_tree_leaf_item\", BI.MidTreeLeafItem);","/**\n * @class BI.MultiLayerIconTreeLeafItem\n * @extends BI.BasicButton\n */\nBI.MultiLayerIconTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerIconTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-multilayer-icon-tree-leaf-item bi-list-item-active\",\n layer: 0,\n height: 24,\n iconCls: \"\",\n iconHeight: 16,\n iconWidth: 16\n });\n },\n _init: function () {\n BI.MultiLayerIconTreeLeafItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.item = BI.createWidget({\n type: \"bi.icon_tree_leaf_item\",\n cls: \"bi-list-item-none\",\n iconCls: o.iconCls,\n id: o.id,\n pId: o.pId,\n isFront: true,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight\n });\n this.item.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var items = [];\n BI.count(0, o.layer, function () {\n items.push({\n type: \"bi.layout\",\n width: 15,\n height: o.height\n });\n });\n items.push(this.item);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 15),\n items: [items]\n });\n },\n\n doRedMark: function () {\n this.item.doRedMark.apply(this.item, arguments);\n },\n\n unRedMark: function () {\n this.item.unRedMark.apply(this.item, arguments);\n },\n\n doHighLight: function () {\n this.item.doHighLight.apply(this.item, arguments);\n },\n\n unHighLight: function () {\n this.item.unHighLight.apply(this.item, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n },\n\n doClick: function () {\n BI.MultiLayerIconTreeLeafItem.superclass.doClick.apply(this, arguments);\n this.item.setSelected(this.isSelected());\n },\n\n setSelected: function (v) {\n BI.MultiLayerIconTreeLeafItem.superclass.setSelected.apply(this, arguments);\n this.item.setSelected(v);\n },\n\n getValue: function () {\n return this.options.value;\n }\n});\n\nBI.shortcut(\"bi.multilayer_icon_tree_leaf_item\", BI.MultiLayerIconTreeLeafItem);\n","/**\n * 树叶子节点\n * Created by GUY on 2015/9/6.\n * @class BI.TreeTextLeafItem\n * @extends BI.BasicButton\n */\nBI.TreeTextLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.TreeTextLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-tree-text-leaf-item bi-list-item-active\",\n id: \"\",\n pId: \"\",\n height: 24,\n hgap: 0,\n lgap: 0,\n rgap: 0\n });\n },\n _init: function () {\n BI.TreeTextLeafItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n lgap: o.lgap,\n rgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n el: this.text\n }]\n });\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n }\n});\n\nBI.shortcut(\"bi.tree_text_leaf_item\", BI.TreeTextLeafItem);","/**\n * 专门为calendar的视觉加的button,作为私有button,不能配置任何属性,也不要用这个玩意\n */\nBI.CalendarDateItem = BI.inherit(BI.BasicButton, {\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.text_item\",\n cls: \"bi-list-item-select\",\n textAlign: \"center\",\n whiteSpace: \"normal\",\n text: o.text,\n value: o.value,\n ref: function () {\n self.text = this;\n }\n },\n left: o.lgap,\n right: o.rgap,\n top: 0,\n bottom: 0\n }]\n };\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n setSelected: function (b) {\n BI.CalendarDateItem.superclass.setSelected.apply(this, arguments);\n this.text.setSelected(b);\n },\n\n getValue: function () {\n return this.text.getValue();\n }\n});\nBI.shortcut(\"bi.calendar_date_item\", BI.CalendarDateItem);","/**\n * Created by GUY on 2015/8/28.\n * @class BI.Calendar\n * @extends BI.Widget\n */\nBI.Calendar = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.Calendar.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-calendar\",\n logic: {\n dynamic: false\n },\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n year: 2015,\n month: 8,\n day: 25\n });\n },\n\n _dateCreator: function (Y, M, D) {\n var self = this, o = this.options, log = {}, De = BI.getDate();\n var mins = o.min.match(/\\d+/g);\n var maxs = o.max.match(/\\d+/g);\n Y < (mins[0] | 0) && (Y = (mins[0] | 0));\n Y > (maxs[0] | 0) && (Y = (maxs[0] | 0));\n\n De.setFullYear(Y, M, D);\n log.ymd = [De.getFullYear(), De.getMonth(), De.getDate()];\n\n var MD = BI.Date._MD.slice(0);\n MD[1] = BI.isLeapYear(log.ymd[0]) ? 29 : 28;\n\n // 日期所在月第一天\n De.setFullYear(log.ymd[0], log.ymd[1], 1);\n // 是周几\n log.FDay = De.getDay();\n\n // 当前BI.StartOfWeek与周日对齐后的FDay是周几\n var offSetFDay = (7 - BI.StartOfWeek + log.FDay) % 7;\n\n // 当前月页第一天是几号\n log.PDay = MD[M === 0 ? 11 : M - 1] - offSetFDay + 1;\n log.NDay = 1;\n\n var items = [];\n BI.each(BI.range(42), function (i) {\n var td = {}, YY = log.ymd[0], MM = log.ymd[1] + 1, DD;\n // 上个月的日期\n if (i < offSetFDay) {\n td.lastMonth = true;\n DD = i + log.PDay;\n // 上一年\n MM === 1 && (YY -= 1);\n MM = MM === 1 ? 12 : MM - 1;\n } else if (i >= offSetFDay && i < offSetFDay + MD[log.ymd[1]]) {\n DD = i - offSetFDay + 1;\n if (i - offSetFDay + 1 === log.ymd[2]) {\n td.currentDay = true;\n }\n } else {\n td.nextMonth = true;\n DD = log.NDay++;\n MM === 12 && (YY += 1);\n MM = MM === 12 ? 1 : MM + 1;\n }\n if (BI.checkDateVoid(YY, MM, DD, mins, maxs)[0]) {\n td.disabled = true;\n }\n td.text = DD;\n items.push(td);\n });\n return items;\n },\n\n _init: function () {\n BI.Calendar.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var items = BI.map(this._getWeekLabel(), function (i, value) {\n return {\n type: \"bi.label\",\n height: 24,\n text: value\n };\n });\n var title = BI.createWidget({\n type: \"bi.button_group\",\n height: 44,\n items: items,\n layouts: [{\n type: \"bi.center\",\n hgap: 5,\n vgap: 10\n }]\n });\n\n this.days = BI.createWidget({\n type: \"bi.button_group\",\n items: BI.createItems(this._getItems(), {}),\n layouts: [BI.LogicFactory.createLogic(\"table\", BI.extend({}, o.logic, {\n columns: 7,\n rows: 6,\n columnSize: [1 / 7, 1 / 7, 1 / 7, 1 / 7, 1 / 7, 1 / 7, 1 / 7],\n rowSize: 24,\n vgap: 10\n }))]\n });\n this.days.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n BI.createWidget(BI.extend({\n element: this\n\n }, BI.LogicFactory.createLogic(\"vertical\", BI.extend({}, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"top\", title, this.days)\n }))));\n },\n\n _getWeekLabel: function () {\n return BI.map(BI.range(0, 7), function (idx, v) {\n return BI.Date._SDN[(v + BI.StartOfWeek) % 7];\n });\n },\n\n isFrontDate: function () {\n var o = this.options, c = this._const;\n var Y = o.year, M = o.month, De = BI.getDate(), day = De.getDay();\n Y = Y | 0;\n De.setFullYear(Y, M, 1);\n var newDate = BI.getOffsetDate(De, -1 * (day + 1));\n return !!BI.checkDateVoid(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), o.min, o.max)[0];\n },\n\n isFinalDate: function () {\n var o = this.options, c = this._const;\n var Y = o.year, M = o.month, De = BI.getDate(), day = De.getDay();\n Y = Y | 0;\n De.setFullYear(Y, M, 1);\n var newDate = BI.getOffsetDate(De, 42 - day);\n return !!BI.checkDateVoid(newDate.getFullYear(), newDate.getMonth(), newDate.getDate(), o.min, o.max)[0];\n },\n\n _getItems: function () {\n var o = this.options;\n var days = this._dateCreator(o.year, o.month - 1, o.day);\n var items = [];\n items.push(days.slice(0, 7));\n items.push(days.slice(7, 14));\n items.push(days.slice(14, 21));\n items.push(days.slice(21, 28));\n items.push(days.slice(28, 35));\n items.push(days.slice(35, 42));\n\n return BI.map(items, function (i, item) {\n return BI.map(item, function (j, td) {\n var month = td.lastMonth ? o.month - 1 : (td.nextMonth ? o.month + 1 : o.month);\n return BI.extend(td, {\n type: \"bi.calendar_date_item\",\n textAlign: \"center\",\n whiteSpace: \"normal\",\n once: false,\n forceSelected: true,\n height: 24,\n value: o.year + \"-\" + month + \"-\" + td.text,\n disabled: td.lastMonth || td.nextMonth || td.disabled,\n lgap: 5,\n rgap: 5\n // selected: td.currentDay\n });\n });\n });\n },\n\n _populate: function() {\n this.days.populate(this._getItems());\n },\n\n setMinDate: function (minDate) {\n var o = this.options;\n if (BI.isNotEmptyString(o.min)) {\n o.min = minDate;\n this._populate();\n }\n },\n\n setMaxDate: function (maxDate) {\n var o = this.options;\n if (BI.isNotEmptyString(o.max)) {\n o.max = maxDate;\n this._populate();\n }\n },\n\n setValue: function (ob) {\n this.days.setValue([ob.year + \"-\" + ob.month + \"-\" + ob.day]);\n },\n\n getValue: function () {\n var date = this.days.getValue()[0].match(/\\d+/g);\n return {\n year: date[0] | 0,\n month: date[1] | 0,\n day: date[2] | 0\n };\n }\n});\n\nBI.extend(BI.Calendar, {\n getPageByDateJSON: function (json) {\n var year = BI.getDate().getFullYear();\n var month = BI.getDate().getMonth();\n var page = (json.year - year) * 12;\n page += json.month - 1 - month;\n return page;\n },\n getDateJSONByPage: function (v) {\n var months = BI.getDate().getMonth();\n var page = v;\n\n // 对当前page做偏移,使到当前年初\n page = page + months;\n\n var year = BI.parseInt(page / 12);\n if(page < 0 && page % 12 !== 0) {\n year--;\n }\n var month = page >= 0 ? (page % 12) : ((12 + page % 12) % 12);\n return {\n year: BI.getDate().getFullYear() + year,\n month: month + 1\n };\n }\n});\n\nBI.shortcut(\"bi.calendar\", BI.Calendar);","/**\n * Created by GUY on 2015/8/28.\n * @class BI.YearCalendar\n * @extends BI.Widget\n */\nBI.YearCalendar = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n var conf = BI.YearCalendar.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-year-calendar\",\n behaviors: {},\n logic: {\n dynamic: false\n },\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n year: null\n });\n },\n\n _yearCreator: function (Y) {\n var o = this.options;\n Y = Y | 0;\n var start = BI.YearCalendar.getStartYear(Y);\n var items = [];\n // 对于年控件来说,只要传入的minDate和maxDate的year区间包含v就是合法的\n var startDate = BI.parseDateTime(o.min, \"%Y-%X-%d\");\n var endDate = BI.parseDateTime(o.max, \"%Y-%X-%d\");\n BI.each(BI.range(BI.YearCalendar.INTERVAL), function (i) {\n var td = {};\n if (BI.checkDateVoid(start + i, 1, 1, BI.print(BI.getDate(startDate.getFullYear(), 0, 1), \"%Y-%X-%d\"), BI.print(BI.getDate(endDate.getFullYear(), 0, 1), \"%Y-%X-%d\"))[0]) {\n td.disabled = true;\n }\n td.text = start + i;\n items.push(td);\n });\n return items;\n },\n\n _init: function () {\n BI.YearCalendar.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.currentYear = BI.getDate().getFullYear();\n\n this.years = BI.createWidget({\n type: \"bi.button_group\",\n behaviors: o.behaviors,\n items: BI.createItems(this._getItems(), {}),\n layouts: [BI.LogicFactory.createLogic(\"table\", BI.extend({}, o.logic, {\n columns: 2,\n rows: 6,\n columnSize: [1 / 2, 1 / 2],\n rowSize: 24\n })), {\n type: \"bi.center_adapt\",\n vgap: 1\n }]\n });\n this.years.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n BI.createWidget(BI.extend({\n element: this\n\n }, BI.LogicFactory.createLogic(\"vertical\", BI.extend({}, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"top\", this.years)\n }))));\n },\n\n isFrontYear: function () {\n var o = this.options;\n var Y = o.year;\n Y = Y | 0;\n return !!BI.checkDateVoid(BI.YearCalendar.getStartYear(Y) - 1, 1, 1, o.min, o.max)[0];\n },\n\n isFinalYear: function () {\n var o = this.options, c = this._const;\n var Y = o.year;\n Y = Y | 0;\n return !!BI.checkDateVoid(BI.YearCalendar.getEndYear(Y) + 1, 1, 1, o.min, o.max)[0];\n },\n\n _getItems: function () {\n var o = this.options;\n var years = this._yearCreator(o.year || this.currentYear);\n\n // 纵向排列年\n var len = years.length, tyears = BI.makeArray(len, \"\");\n var map = [0, 6, 1, 7, 2, 8, 3, 9, 4, 10, 5, 11];\n BI.each(years, function (i, y) {\n tyears[i] = years[map[i]];\n });\n\n var items = [];\n items.push(tyears.slice(0, 2));\n items.push(tyears.slice(2, 4));\n items.push(tyears.slice(4, 6));\n items.push(tyears.slice(6, 8));\n items.push(tyears.slice(8, 10));\n items.push(tyears.slice(10, 12));\n\n return BI.map(items, function (i, item) {\n return BI.map(item, function (j, td) {\n return BI.extend(td, {\n type: \"bi.text_item\",\n cls: \"bi-list-item-select\",\n textAlign: \"center\",\n whiteSpace: \"normal\",\n once: false,\n forceSelected: true,\n height: 24,\n width: 45,\n value: td.text,\n disabled: td.disabled\n });\n });\n });\n },\n\n _populate: function () {\n this.years.populate(this._getItems());\n },\n\n setMinDate: function (minDate) {\n var o = this.options;\n if (BI.isNotEmptyString(o.min)) {\n o.min = minDate;\n this._populate();\n }\n },\n\n setMaxDate: function (maxDate) {\n var o = this.options;\n if (BI.isNotEmptyString(this.options.max)) {\n o.max = maxDate;\n this._populate();\n }\n },\n\n setValue: function (val) {\n this.years.setValue([val]);\n },\n\n getValue: function () {\n return this.years.getValue()[0];\n }\n});\n// 类方法\nBI.extend(BI.YearCalendar, {\n INTERVAL: 12,\n\n // 获取显示的第一年\n getStartYear: function (year) {\n var cur = BI.getDate().getFullYear();\n return year - ((year - cur + 3) % BI.YearCalendar.INTERVAL + 12) % BI.YearCalendar.INTERVAL;\n },\n\n getEndYear: function (year) {\n return BI.YearCalendar.getStartYear(year) + BI.YearCalendar.INTERVAL - 1;\n },\n\n getPageByYear: function (year) {\n var cur = BI.getDate().getFullYear();\n year = BI.YearCalendar.getStartYear(year);\n return (year - cur + 3) / BI.YearCalendar.INTERVAL;\n }\n});\n\nBI.shortcut(\"bi.year_calendar\", BI.YearCalendar);","/**\n * Created by roy on 15/10/16.\n * 右与下箭头切换的树节点\n */\nBI.ArrowTreeGroupNodeCheckbox = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n return BI.extend(BI.ArrowTreeGroupNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-arrow-group-node-checkbox\"\n });\n },\n\n setSelected: function (v) {\n BI.ArrowTreeGroupNodeCheckbox.superclass.setSelected.apply(this, arguments);\n if(v) {\n this.element.removeClass(\"expander-right-font\").addClass(\"expander-down-font\");\n } else {\n this.element.removeClass(\"expander-down-font\").addClass(\"expander-right-font\");\n }\n }\n});\nBI.shortcut(\"bi.arrow_group_node_checkbox\", BI.ArrowTreeGroupNodeCheckbox);","/**\n * 十字型的树节点\n * @class BI.CheckingMarkNode\n * @extends BI.IconButton\n */\nBI.CheckingMarkNode = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n return BI.extend( BI.CheckingMarkNode.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"check-mark-font\"\n });\n },\n _init: function () {\n BI.CheckingMarkNode.superclass._init.apply(this, arguments);\n this.setSelected(this.options.selected);\n\n },\n setSelected: function (v) {\n BI.CheckingMarkNode.superclass.setSelected.apply(this, arguments);\n if(v === true) {\n this.element.addClass(\"check-mark-font\");\n } else {\n this.element.removeClass(\"check-mark-font\");\n }\n }\n});\nBI.shortcut(\"bi.checking_mark_node\", BI.CheckingMarkNode);","/**\n * 十字型的树节点\n * @class BI.FirstTreeNodeCheckbox\n * @extends BI.IconButton\n */\nBI.FirstTreeNodeCheckbox = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n return BI.extend( BI.FirstTreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"tree-collapse-icon-type2\",\n iconWidth: 24,\n iconHeight: 24\n });\n },\n\n setSelected: function (v) {\n BI.FirstTreeNodeCheckbox.superclass.setSelected.apply(this, arguments);\n if(v === true) {\n this.element.addClass(\"tree-expand-icon-type2\");\n } else {\n this.element.removeClass(\"tree-expand-icon-type2\");\n }\n }\n});\nBI.shortcut(\"bi.first_tree_node_checkbox\", BI.FirstTreeNodeCheckbox);","/**\n * 十字型的树节点\n * @class BI.LastTreeNodeCheckbox\n * @extends BI.IconButton\n */\nBI.LastTreeNodeCheckbox = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n return BI.extend(BI.LastTreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"tree-collapse-icon-type4\",\n iconWidth: 24,\n iconHeight: 24\n });\n },\n\n setSelected: function (v) {\n BI.LastTreeNodeCheckbox.superclass.setSelected.apply(this, arguments);\n if (v === true) {\n this.element.addClass(\"tree-expand-icon-type4\");\n } else {\n this.element.removeClass(\"tree-expand-icon-type4\");\n }\n }\n});\nBI.shortcut(\"bi.last_tree_node_checkbox\", BI.LastTreeNodeCheckbox);","/**\n * 十字型的树节点\n * @class BI.MidTreeNodeCheckbox\n * @extends BI.IconButton\n */\nBI.MidTreeNodeCheckbox = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n return BI.extend( BI.MidTreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"tree-collapse-icon-type3\",\n iconWidth: 24,\n iconHeight: 24\n });\n },\n\n setSelected: function (v) {\n BI.MidTreeNodeCheckbox.superclass.setSelected.apply(this, arguments);\n if(v === true) {\n this.element.addClass(\"tree-expand-icon-type3\");\n } else {\n this.element.removeClass(\"tree-expand-icon-type3\");\n }\n }\n});\nBI.shortcut(\"bi.mid_tree_node_checkbox\", BI.MidTreeNodeCheckbox);","/**\n * 十字型的树节点\n * @class BI.TreeNodeCheckbox\n * @extends BI.IconButton\n */\nBI.TreeNodeCheckbox = BI.inherit(BI.IconButton, {\n _defaultConfig: function () {\n return BI.extend( BI.TreeNodeCheckbox.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"tree-collapse-icon-type1\",\n iconWidth: 24,\n iconHeight: 24\n });\n },\n\n setSelected: function (v) {\n BI.TreeNodeCheckbox.superclass.setSelected.apply(this, arguments);\n if(v) {\n this.element.addClass(\"tree-expand-icon-type1\");\n } else {\n this.element.removeClass(\"tree-expand-icon-type1\");\n }\n }\n});\nBI.shortcut(\"bi.tree_node_checkbox\", BI.TreeNodeCheckbox);","/**\n * Created by GUY on 2017/2/8.\n *\n * @class BI.BubbleCombo\n * @extends BI.Widget\n */\nBI.BubbleCombo = BI.inherit(BI.Widget, {\n _const: {\n TRIANGLE_LENGTH: 6\n },\n _defaultConfig: function () {\n return BI.extend(BI.BubbleCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-bubble-combo\",\n trigger: \"click\",\n toggle: true,\n direction: \"bottom,left\", // top||bottom||left||right||top,left||top,right||bottom,left||bottom,right\n isDefaultInit: false,\n destroyWhenHide: false,\n isNeedAdjustHeight: true, // 是否需要高度调整\n isNeedAdjustWidth: true,\n stopPropagation: false,\n adjustLength: 0, // 调整的距离\n // adjustXOffset: 0,\n // adjustYOffset: 10,\n hideChecker: BI.emptyFn,\n offsetStyle: \"left\", // left,right,center\n el: {},\n popup: {}\n });\n },\n _init: function () {\n BI.BubbleCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n element: this,\n trigger: o.trigger,\n toggle: o.toggle,\n container: o.container,\n direction: o.direction,\n isDefaultInit: o.isDefaultInit,\n destroyWhenHide: o.destroyWhenHide,\n isNeedAdjustHeight: o.isNeedAdjustHeight,\n isNeedAdjustWidth: o.isNeedAdjustWidth,\n adjustLength: this._getAdjustLength(),\n stopPropagation: o.stopPropagation,\n adjustXOffset: 0,\n adjustYOffset: 0,\n hideChecker: o.hideChecker,\n offsetStyle: o.offsetStyle,\n el: o.el,\n popup: BI.extend({\n type: \"bi.bubble_popup_view\"\n }, o.popup)\n });\n this.combo.on(BI.Combo.EVENT_TRIGGER_CHANGE, function () {\n self.fireEvent(BI.BubbleCombo.EVENT_TRIGGER_CHANGE, arguments);\n });\n this.combo.on(BI.Combo.EVENT_CHANGE, function () {\n self.fireEvent(BI.BubbleCombo.EVENT_CHANGE, arguments);\n });\n this.combo.on(BI.Combo.EVENT_EXPAND, function () {\n self.fireEvent(BI.BubbleCombo.EVENT_EXPAND, arguments);\n });\n this.combo.on(BI.Combo.EVENT_COLLAPSE, function () {\n self.fireEvent(BI.BubbleCombo.EVENT_COLLAPSE, arguments);\n });\n this.combo.on(BI.Combo.EVENT_AFTER_INIT, function () {\n self.fireEvent(BI.BubbleCombo.EVENT_AFTER_INIT, arguments);\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW, arguments);\n });\n this.combo.on(BI.Combo.EVENT_AFTER_POPUPVIEW, function () {\n self._showTriangle();\n self.fireEvent(BI.BubbleCombo.EVENT_AFTER_POPUPVIEW, arguments);\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () {\n self._hideTriangle();\n self.fireEvent(BI.BubbleCombo.EVENT_BEFORE_HIDEVIEW, arguments);\n });\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n self.fireEvent(BI.BubbleCombo.EVENT_AFTER_HIDEVIEW, arguments);\n });\n },\n\n _getAdjustLength: function () {\n return this._const.TRIANGLE_LENGTH + this.options.adjustLength;\n },\n\n _createTriangle: function (direction) {\n var pos = {}, op = {};\n var adjustLength = this.options.adjustLength;\n var offset = this.element.offset();\n var left = offset.left, right = offset.left + this.element.outerWidth();\n var top = offset.top, bottom = offset.top + this.element.outerHeight();\n switch (direction) {\n case \"left\":\n pos = {\n top: top,\n height: this.element.outerHeight(),\n left: left - adjustLength - this._const.TRIANGLE_LENGTH\n };\n op = {width: this._const.TRIANGLE_LENGTH};\n break;\n case \"right\":\n pos = {\n top: top,\n height: this.element.outerHeight(),\n left: right + adjustLength\n };\n op = {width: this._const.TRIANGLE_LENGTH};\n break;\n case \"top\":\n pos = {\n left: left,\n width: this.element.outerWidth(),\n top: top - adjustLength - this._const.TRIANGLE_LENGTH\n };\n op = {height: this._const.TRIANGLE_LENGTH};\n break;\n case \"bottom\":\n pos = {\n left: left,\n width: this.element.outerWidth(),\n top: bottom + adjustLength\n };\n op = {height: this._const.TRIANGLE_LENGTH};\n break;\n default:\n break;\n }\n this.triangle && this.triangle.destroy();\n this.triangle = BI.createWidget(op, {\n type: \"bi.center_adapt\",\n cls: \"button-combo-triangle-wrapper\",\n items: [{\n type: \"bi.layout\",\n cls: \"bubble-combo-triangle-\" + direction\n }]\n });\n pos.el = this.triangle;\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [pos]\n });\n },\n\n _createLeftTriangle: function () {\n this._createTriangle(\"left\");\n },\n\n _createRightTriangle: function () {\n this._createTriangle(\"right\");\n },\n\n _createTopTriangle: function () {\n this._createTriangle(\"top\");\n },\n\n _createBottomTriangle: function () {\n this._createTriangle(\"bottom\");\n },\n\n _showTriangle: function () {\n var pos = this.combo.getPopupPosition();\n switch (pos.dir) {\n case \"left,top\":\n case \"left,bottom\":\n this._createLeftTriangle();\n break;\n case \"right,top\":\n case \"right,bottom\":\n this._createRightTriangle();\n break;\n case \"top,left\":\n case \"top,right\":\n this._createTopTriangle();\n break;\n case \"bottom,left\":\n case \"bottom,right\":\n this._createBottomTriangle();\n break;\n }\n },\n\n _hideTriangle: function () {\n this.triangle && this.triangle.destroy();\n this.triangle = null;\n },\n\n hideView: function () {\n this._hideTriangle();\n this.combo && this.combo.hideView();\n },\n\n showView: function () {\n this.combo && this.combo.showView();\n },\n\n isViewVisible: function () {\n return this.combo.isViewVisible();\n }\n});\n\nBI.BubbleCombo.EVENT_TRIGGER_CHANGE = \"EVENT_TRIGGER_CHANGE\";\nBI.BubbleCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.BubbleCombo.EVENT_EXPAND = \"EVENT_EXPAND\";\nBI.BubbleCombo.EVENT_COLLAPSE = \"EVENT_COLLAPSE\";\nBI.BubbleCombo.EVENT_AFTER_INIT = \"EVENT_AFTER_INIT\";\n\n\nBI.BubbleCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.BubbleCombo.EVENT_AFTER_POPUPVIEW = \"EVENT_AFTER_POPUPVIEW\";\nBI.BubbleCombo.EVENT_BEFORE_HIDEVIEW = \"EVENT_BEFORE_HIDEVIEW\";\nBI.BubbleCombo.EVENT_AFTER_HIDEVIEW = \"EVENT_AFTER_HIDEVIEW\";\nBI.shortcut(\"bi.bubble_combo\", BI.BubbleCombo);","/**\n * Created by GUY on 2017/2/8.\n *\n * @class BI.BubblePopupView\n * @extends BI.PopupView\n */\nBI.BubblePopupView = BI.inherit(BI.PopupView, {\n _defaultConfig: function () {\n var config = BI.BubblePopupView.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(config, {\n baseCls: config.baseCls + \" bi-bubble-popup-view\",\n minWidth: 220,\n maxWidth: 300,\n minHeight: 90\n });\n },\n _init: function () {\n BI.BubblePopupView.superclass._init.apply(this, arguments);\n }\n});\n\nBI.shortcut(\"bi.bubble_popup_view\", BI.BubblePopupView);\n\n/**\n * Created by GUY on 2017/2/8.\n *\n * @class BI.BubblePopupBarView\n * @extends BI.BubblePopupView\n */\nBI.BubblePopupBarView = BI.inherit(BI.BubblePopupView, {\n _defaultConfig: function () {\n return BI.extend(BI.BubblePopupBarView.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-bubble-bar-popup-view\",\n buttons: [{\n value: false,\n text: BI.i18nText(\"BI-Basic_Cancel\"),\n ghost: true\n }, {\n text: BI.i18nText(BI.i18nText(\"BI-Basic_Sure\")),\n value: true\n }]\n });\n },\n _init: function () {\n BI.BubblePopupBarView.superclass._init.apply(this, arguments);\n },\n _createToolBar: function () {\n var o = this.options, self = this;\n\n var items = [];\n BI.each(o.buttons, function (i, buttonOpt) {\n if (BI.isWidget(buttonOpt)) {\n items.push(buttonOpt);\n } else {\n items.push(BI.extend({\n type: \"bi.button\",\n height: 24,\n handler: function (v) {\n self.fireEvent(BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON, v);\n }\n }, buttonOpt));\n }\n });\n return BI.createWidget({\n type: \"bi.center\",\n height: 44,\n rgap: 15,\n items: [{\n type: \"bi.right_vertical_adapt\",\n lgap: 10,\n items: items\n }]\n });\n },\n\n _createView: function () {\n var o = this.options;\n\n var button = BI.createWidget({\n type: \"bi.button_group\",\n items: [o.el],\n layouts: [{\n type: \"bi.vertical\",\n cls: \"bar-popup-container\",\n hgap: 15,\n tgap: 10\n }]\n });\n\n button.element.css(\"min-height\", o.minHeight - 44);\n\n return button;\n }\n});\nBI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON = \"EVENT_CLICK_TOOLBAR_BUTTON\";\nBI.shortcut(\"bi.bubble_bar_popup_view\", BI.BubblePopupBarView);\n\n/**\n * Created by Windy on 2018/2/2.\n *\n * @class BI.TextBubblePopupBarView\n * @extends BI.BubblePopupView\n */\nBI.TextBubblePopupBarView = BI.inherit(BI.Widget, {\n\n props: function () {\n return {\n baseCls: \"bi-text-bubble-bar-popup-view\",\n text: \"\",\n buttons: [{\n level: \"ignore\",\n value: false,\n stopPropagation: true,\n text: BI.i18nText(\"BI-Basic_Cancel\")\n }, {\n value: true,\n stopPropagation: true,\n text: BI.i18nText(\"BI-Basic_Sure\")\n }]\n };\n },\n\n render: function () {\n var self = this, o = this.options;\n var buttons = BI.map(o.buttons, function (index, buttonOpt) {\n if (BI.isWidget(buttonOpt)) {\n return buttonOpt;\n }\n return BI.extend({\n type: \"bi.button\",\n height: 24,\n handler: function (v) {\n self.fireEvent(BI.TextBubblePopupBarView.EVENT_CHANGE, v);\n }\n }, buttonOpt);\n\n });\n return {\n type: \"bi.bubble_bar_popup_view\",\n minWidth: o.minWidth,\n maxWidth: o.maxWidth,\n minHeight: o.minHeight,\n ref: function () {\n self.popup = this;\n },\n el: {\n type: \"bi.label\",\n text: o.text,\n whiteSpace: \"normal\",\n textAlign: \"left\",\n ref: function () {\n self.text = this;\n }\n },\n buttons: buttons\n };\n },\n\n populate: function (v) {\n this.text.setText(v || this.options.text);\n }\n});\nBI.TextBubblePopupBarView.EVENT_CHANGE = \"EVENT_CLICK_TOOLBAR_BUTTON\";\nBI.shortcut(\"bi.text_bubble_bar_popup_view\", BI.TextBubblePopupBarView);\n","/**\n * Created by Young's on 2016/4/28.\n */\nBI.EditorIconCheckCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.EditorIconCheckCombo.superclass._defaultConfig.apply(this, arguments), {\n baseClass: \"bi-check-editor-combo\",\n width: 100,\n height: 24,\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n allowBlank: true,\n watermark: \"\",\n errorText: \"\"\n });\n },\n\n _init: function () {\n BI.EditorIconCheckCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.trigger = BI.createWidget({\n type: \"bi.editor_trigger\",\n items: o.items,\n height: o.height,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank,\n watermark: o.watermark,\n errorText: o.errorText,\n value: o.value\n });\n this.trigger.on(BI.EditorTrigger.EVENT_CHANGE, function () {\n self.popup.setValue(this.getValue());\n self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE, arguments);\n });\n this.trigger.on(BI.EditorTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.EditorIconCheckCombo.EVENT_FOCUS, arguments);\n });\n this.trigger.on(BI.EditorTrigger.EVENT_EMPTY, function () {\n self.fireEvent(BI.EditorIconCheckCombo.EVENT_EMPTY, arguments);\n });\n this.trigger.on(BI.EditorTrigger.EVENT_VALID, function () {\n self.fireEvent(BI.EditorIconCheckCombo.EVENT_VALID, arguments);\n });\n this.trigger.on(BI.EditorTrigger.EVENT_ERROR, function () {\n self.fireEvent(BI.EditorIconCheckCombo.EVENT_ERROR, arguments);\n });\n\n this.popup = BI.createWidget({\n type: \"bi.text_value_check_combo_popup\",\n chooseType: o.chooseType,\n items: o.items,\n value: o.value\n });\n this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.editorIconCheckCombo.hideView();\n self.fireEvent(BI.EditorIconCheckCombo.EVENT_CHANGE);\n });\n this.popup.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editorIconCheckCombo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n element: this,\n adjustLength: 2,\n el: this.trigger,\n popup: {\n el: this.popup,\n maxHeight: 300\n }\n });\n },\n\n setValue: function (v) {\n this.editorIconCheckCombo.setValue(v);\n },\n\n getValue: function () {\n return this.trigger.getValue();\n },\n\n populate: function (items) {\n this.options.items = items;\n this.editorIconCheckCombo.populate(items);\n }\n});\nBI.EditorIconCheckCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.EditorIconCheckCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.EditorIconCheckCombo.EVENT_EMPTY = \"EVENT_EMPTY\";\nBI.EditorIconCheckCombo.EVENT_VALID = \"EVENT_VALID\";\nBI.EditorIconCheckCombo.EVENT_ERROR = \"EVENT_ERROR\";\nBI.shortcut(\"bi.editor_icon_check_combo\", BI.EditorIconCheckCombo);\n","/**\n * Created by GUY on 2016/2/2.\n *\n * @class BI.IconCombo\n * @extend BI.Widget\n */\nBI.IconCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.IconCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-icon-combo\",\n width: 24,\n height: 24,\n el: {},\n popup: {},\n minWidth: 100,\n maxWidth: \"auto\",\n maxHeight: 300,\n direction: \"bottom\",\n adjustLength: 3, // 调整的距离\n adjustXOffset: 0,\n adjustYOffset: 0,\n offsetStyle: \"left\",\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE\n });\n },\n\n _init: function () {\n BI.IconCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.trigger = BI.createWidget(o.el, {\n type: \"bi.icon_combo_trigger\",\n iconCls: o.iconCls,\n title: o.title,\n items: o.items,\n width: o.width,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight,\n value: o.value\n });\n this.popup = BI.createWidget(o.popup, {\n type: \"bi.icon_combo_popup\",\n chooseType: o.chooseType,\n items: o.items,\n value: o.value\n });\n this.popup.on(BI.IconComboPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.iconCombo.hideView();\n self.fireEvent(BI.IconCombo.EVENT_CHANGE);\n });\n this.popup.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.iconCombo = BI.createWidget({\n type: \"bi.combo\",\n element: this,\n direction: o.direction,\n trigger: o.trigger,\n container: o.container,\n adjustLength: o.adjustLength,\n adjustXOffset: o.adjustXOffset,\n adjustYOffset: o.adjustYOffset,\n offsetStyle: o.offsetStyle,\n el: this.trigger,\n popup: {\n el: this.popup,\n maxWidth: o.maxWidth,\n maxHeight: o.maxHeight,\n minWidth: o.minWidth\n }\n });\n },\n\n showView: function () {\n this.iconCombo.showView();\n },\n\n hideView: function () {\n this.iconCombo.hideView();\n },\n\n setValue: function (v) {\n this.trigger.setValue(v);\n this.popup.setValue(v);\n },\n\n getValue: function () {\n var value = this.popup.getValue();\n return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]);\n },\n\n populate: function (items) {\n this.options.items = items;\n this.iconCombo.populate(items);\n }\n});\nBI.IconCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_combo\", BI.IconCombo);","/**\n * Created by GUY on 2016/2/2.\n *\n * @class BI.IconComboPopup\n * @extend BI.Pane\n */\nBI.IconComboPopup = BI.inherit(BI.Pane, {\n _defaultConfig: function () {\n return BI.extend(BI.IconComboPopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi.icon-combo-popup\",\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE\n });\n },\n\n _init: function () {\n BI.IconComboPopup.superclass._init.apply(this, arguments);\n var o = this.options, self = this;\n this.popup = BI.createWidget({\n type: \"bi.button_group\",\n items: BI.createItems(o.items, {\n type: \"bi.single_select_icon_text_item\",\n height: 24\n }),\n chooseType: o.chooseType,\n layouts: [{\n type: \"bi.vertical\"\n }],\n value: o.value\n });\n\n this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.IconComboPopup.EVENT_CHANGE, val, obj);\n }\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n vgap: 5,\n items: [this.popup]\n });\n },\n\n populate: function (items) {\n BI.IconComboPopup.superclass.populate.apply(this, arguments);\n items = BI.createItems(items, {\n type: \"bi.single_select_icon_text_item\",\n height: 24\n });\n this.popup.populate(items);\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n setValue: function (v) {\n this.popup.setValue(v);\n }\n\n});\nBI.IconComboPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_combo_popup\", BI.IconComboPopup);","/**\n * Created by GUY on 2016/2/2.\n *\n * @class BI.IconComboTrigger\n * @extend BI.Widget\n */\nBI.IconComboTrigger = BI.inherit(BI.Trigger, {\n _defaultConfig: function () {\n return BI.extend(BI.IconComboTrigger.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-icon-combo-trigger\",\n el: {},\n items: [],\n iconCls: \"\",\n width: 24,\n height: 24,\n isShowDown: true,\n value: \"\"\n });\n },\n\n _init: function () {\n BI.IconComboTrigger.superclass._init.apply(this, arguments);\n var o = this.options, self = this;\n var iconCls = \"\";\n if(BI.isKey(o.value)){\n iconCls = this._digest(o.value, o.items);\n }\n this.button = BI.createWidget(o.el, {\n type: \"bi.icon_change_button\",\n cls: \"icon-combo-trigger-icon\",\n iconCls: iconCls,\n disableSelected: true,\n width: o.isShowDown ? o.width - 12 : o.width,\n height: o.height,\n iconWidth: o.iconWidth,\n iconHeight: o.iconHeight,\n selected: BI.isNotEmptyString(iconCls)\n });\n this.down = BI.createWidget({\n type: \"bi.icon_button\",\n disableSelected: true,\n cls: \"icon-combo-down-icon trigger-triangle-font font-size-12\",\n width: 12,\n height: 8,\n selected: BI.isNotEmptyString(iconCls)\n });\n this.down.setVisible(o.isShowDown);\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.button,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: this.down,\n right: 3,\n bottom: 0\n }]\n });\n },\n\n _digest: function (v, items) {\n var iconCls = \"\";\n v = BI.isArray(v) ? v[0] : v;\n BI.any(items, function (i, item) {\n if (v === item.value) {\n iconCls = item.iconCls;\n return true;\n }\n });\n return iconCls;\n },\n\n populate: function (items) {\n var o = this.options;\n this.options.items = items || [];\n this.button.setIcon(o.iconCls);\n this.button.setSelected(false);\n this.down.setSelected(false);\n },\n\n setValue: function (v) {\n BI.IconComboTrigger.superclass.setValue.apply(this, arguments);\n var o = this.options;\n var iconCls = this._digest(v, this.options.items);\n v = BI.isArray(v) ? v[0] : v;\n if (BI.isNotEmptyString(iconCls)) {\n this.button.setIcon(iconCls);\n this.button.setSelected(true);\n this.down.setSelected(true);\n } else {\n this.button.setIcon(o.iconCls);\n this.button.setSelected(false);\n this.down.setSelected(false);\n }\n }\n});\nBI.IconComboTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_combo_trigger\", BI.IconComboTrigger);","/**\n * Created by Windy on 2017/12/12.\n * combo : icon + text + icon, popup : icon + text\n */\nBI.IconTextValueCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.IconTextValueCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-icon-text-value-combo\",\n height: 24,\n iconHeight: null,\n iconWidth: null,\n value: \"\",\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.IconTextValueCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.trigger = BI.createWidget({\n type: \"bi.select_icon_text_trigger\",\n cls: \"icon-text-value-trigger\",\n items: o.items,\n height: o.height,\n text: o.text,\n iconCls: o.iconCls,\n value: o.value,\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth,\n iconWrapperWidth: o.iconWrapperWidth,\n title: o.title,\n warningTitle: o.warningTitle\n });\n this.popup = BI.createWidget({\n type: \"bi.icon_text_value_combo_popup\",\n items: o.items,\n value: o.value,\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth,\n iconWrapperWidth: o.iconWrapperWidth\n });\n this.popup.on(BI.IconTextValueComboPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.textIconCombo.hideView();\n self.fireEvent(BI.IconTextValueCombo.EVENT_CHANGE, arguments);\n });\n this.popup.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.textIconCombo = BI.createWidget({\n type: \"bi.combo\",\n element: this,\n container: o.container,\n adjustLength: 2,\n el: this.trigger,\n popup: {\n el: this.popup,\n maxHeight: 240,\n minHeight: 25\n }\n });\n if (BI.isKey(o.value)) {\n this.setValue(o.value);\n }\n },\n\n _checkError: function (v) {\n if(BI.isNotNull(v)) {\n v = BI.isArray(v) ? v : [v];\n var result = BI.find(this.options.items, function (idx, item) {\n return BI.contains(v, item.value);\n });\n if (BI.isNull(result)) {\n this.trigger.options.tipType = \"warning\";\n this.element.removeClass(\"combo-error\").addClass(\"combo-error\");\n } else {\n this.trigger.options.tipType = \"success\";\n this.element.removeClass(\"combo-error\");\n }\n }\n },\n\n setValue: function (v) {\n this.trigger.setValue(v);\n this.popup.setValue(v);\n this._checkError(v);\n },\n\n getValue: function () {\n var value = this.popup.getValue();\n return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]);\n },\n\n populate: function (items) {\n this.options.items = items;\n this.textIconCombo.populate(items);\n }\n});\nBI.IconTextValueCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_text_value_combo\", BI.IconTextValueCombo);\n","/**\n * Created by Windy on 2017/12/12.\n */\nBI.IconTextValueComboPopup = BI.inherit(BI.Pane, {\n _defaultConfig: function () {\n return BI.extend(BI.IconTextValueComboPopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-icon-text-icon-popup\",\n behaviors: {\n redmark: function () {\n return true;\n }\n }\n });\n },\n\n _init: function () {\n BI.IconTextValueComboPopup.superclass._init.apply(this, arguments);\n var o = this.options, self = this;\n this.popup = BI.createWidget({\n type: \"bi.button_group\",\n items: BI.createItems(o.items, {\n type: \"bi.single_select_icon_text_item\",\n height: 24,\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth,\n iconWrapperWidth: o.iconWrapperWidth\n }),\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n layouts: [{\n type: \"bi.vertical\"\n }],\n behaviors: o.behaviors,\n value: o.value\n });\n\n this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.IconTextValueComboPopup.EVENT_CHANGE, val, obj);\n }\n });\n\n this.check();\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n vgap: 5,\n items: [this.popup]\n });\n },\n\n populate: function (items, keyword) {\n BI.IconTextValueComboPopup.superclass.populate.apply(this, arguments);\n var o = this.options;\n items = BI.createItems(items, {\n type: \"bi.single_select_icon_text_item\",\n height: 24,\n iconWrapperWidth: o.iconWrapperWidth,\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth\n });\n this.popup.populate(items, keyword);\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n setValue: function (v) {\n this.popup.setValue(v);\n }\n\n});\nBI.IconTextValueComboPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.icon_text_value_combo_popup\", BI.IconTextValueComboPopup);\n","/**\n * Created by Windy on 2018/2/2.\n */\nBI.SearchTextValueCombo = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-search-text-value-combo\",\n height: 24,\n text: \"\",\n items: [],\n tipType: \"\",\n warningTitle: \"\",\n attributes: {\n tabIndex: 0\n }\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.combo\",\n container: o.container,\n adjustLength: 2,\n toggle: false,\n ref: function () {\n self.combo = this;\n },\n el: {\n type: \"bi.search_text_value_trigger\",\n cls: \"search-text-value-trigger\",\n ref: function () {\n self.trigger = this;\n },\n items: o.items,\n height: o.height - 2,\n text: o.text,\n value: o.value,\n tipType: o.tipType,\n warningTitle: o.warningTitle,\n title: o.title,\n listeners: [{\n eventName: BI.SearchTextValueTrigger.EVENT_CHANGE,\n action: function () {\n self.setValue(this.getValue());\n self.combo.hideView();\n self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE);\n }\n }]\n },\n popup: {\n el: {\n type: \"bi.text_value_combo_popup\",\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n value: o.value,\n items: o.items,\n ref: function () {\n self.popup = this;\n self.trigger.getSearcher().setAdapter(self.popup);\n },\n listeners: [{\n eventName: BI.TextValueComboPopup.EVENT_CHANGE,\n action: function () {\n self.setValue(this.getValue());\n self.combo.hideView();\n self.fireEvent(BI.SearchTextValueCombo.EVENT_CHANGE);\n }\n }]\n },\n value: o.value,\n maxHeight: 252,\n minHeight: 25\n },\n listeners: [{\n eventName: BI.Combo.EVENT_AFTER_HIDEVIEW,\n action: function () {\n self.trigger.stopEditing();\n }\n }, {\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }],\n hideChecker: function (e) {\n return self.triggerBtn.element.find(e.target).length === 0;\n }\n },\n left: 0,\n right: 0,\n bottom: 0,\n top: 0\n }, {\n el: {\n type: \"bi.trigger_icon_button\",\n cls: \"trigger-icon-button\",\n ref: function () {\n self.triggerBtn = this;\n },\n width: o.height,\n height: o.height,\n handler: function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n }\n },\n right: 0,\n bottom: 0,\n top: 0\n }]\n };\n },\n\n mounted: function () {\n var o = this.options;\n if(BI.isKey(o.value)) {\n this._checkError(o.value);\n }\n },\n\n _checkError: function (v) {\n if(BI.isNotNull(v)) {\n v = BI.isArray(v) ? v : [v];\n var result = BI.find(this.options.items, function (idx, item) {\n return BI.contains(v, item.value);\n });\n if (BI.isNull(result)) {\n this.element.removeClass(\"combo-error\").addClass(\"combo-error\");\n this.trigger.attr(\"tipType\", \"warning\");\n } else {\n this.element.removeClass(\"combo-error\");\n this.trigger.attr(\"tipType\", \"success\");\n }\n }\n },\n\n populate: function (items) {\n this.options.items = items;\n this.combo.populate(items);\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n this._checkError(v);\n },\n\n getValue: function () {\n var value = this.combo.getValue();\n return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]);\n }\n});\nBI.SearchTextValueCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SearchTextValueCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.search_text_value_combo\", BI.SearchTextValueCombo);\n","/**\n * Created by Windy on 2018/2/5.\n */\nBI.SearchTextValueComboPopup = BI.inherit(BI.Pane, {\n\n props: {\n baseCls: \"bi-search-text-value-popup\"\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.vertical\",\n vgap: 5,\n items: [{\n type: \"bi.button_group\",\n ref: function () {\n self.popup = this;\n },\n items: BI.createItems(o.items, {\n type: \"bi.single_select_item\",\n textAlign: o.textAlign,\n height: 24\n }),\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n layouts: [{\n type: \"bi.vertical\"\n }],\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n value: o.value,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function (type, val, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.SearchTextValueComboPopup.EVENT_CHANGE, val, obj);\n }\n }\n }]\n }]\n };\n },\n\n mounted: function() {\n this.check();\n },\n\n populate: function (find, match, keyword) {\n var items = BI.concat(find, match);\n BI.SearchTextValueComboPopup.superclass.populate.apply(this, items);\n items = BI.createItems(items, {\n type: \"bi.single_select_item\",\n height: 24\n });\n this.popup.populate(items, keyword);\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n setValue: function (v) {\n this.popup.setValue(v);\n }\n\n});\nBI.SearchTextValueComboPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.search_text_value_combo_popup\", BI.SearchTextValueComboPopup);","/**\n * Created by Windy on 2018/2/2.\n */\nBI.SearchTextValueTrigger = BI.inherit(BI.Trigger, {\n\n props: {\n extraCls: \"bi-search-text-value-trigger bi-border\",\n height: 24\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.htape\",\n items: [\n {\n el: {\n type: \"bi.searcher\",\n ref: function () {\n self.searcher = this;\n },\n isAutoSearch: false,\n el: {\n type: \"bi.state_editor\",\n ref: function () {\n self.editor = this;\n },\n defaultText: o.text,\n text: this._digest(o.value, o.items),\n value: o.value,\n height: o.height,\n tipText: \"\"\n },\n popup: {\n type: \"bi.search_text_value_combo_popup\",\n cls: \"bi-card\",\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE\n },\n onSearch: function (obj, callback) {\n var keyword = obj.keyword;\n var finding = BI.Func.getSearchResult(o.items, keyword);\n var matched = finding.match, find = finding.find;\n callback(find, matched);\n },\n listeners: [{\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.SearchTextValueTrigger.EVENT_CHANGE);\n }\n }]\n }\n }, {\n el: {\n type: \"bi.layout\",\n width: 24\n },\n width: 24\n }\n ]\n };\n },\n\n _setState: function (v) {\n this.editor.setState(v);\n },\n\n _digest: function(vals, items){\n var o = this.options;\n vals = BI.isArray(vals) ? vals : [vals];\n var result = [];\n var formatItems = BI.Tree.transformToArrayFormat(items);\n BI.each(formatItems, function (i, item) {\n if (BI.deepContains(vals, item.value) && !BI.contains(result, item.text || item.value)) {\n result.push(item.text || item.value);\n }\n });\n\n if (result.length > 0) {\n return result.join(\",\");\n } else {\n return BI.isFunction(o.text) ? o.text() : o.text;\n }\n },\n\n stopEditing: function () {\n this.searcher.stopSearch();\n },\n\n getSearcher: function () {\n return this.searcher;\n },\n\n populate: function (items) {\n this.options.items = items;\n },\n\n setValue: function (vals) {\n this._setState(this._digest(vals, this.options.items));\n },\n\n getValue: function () {\n return this.searcher.getValue();\n }\n});\nBI.SearchTextValueTrigger.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.SearchTextValueTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.SearchTextValueTrigger.EVENT_START = \"EVENT_START\";\nBI.SearchTextValueTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.search_text_value_trigger\", BI.SearchTextValueTrigger);","/**\n * @class BI.TextValueCheckCombo\n * @extend BI.Widget\n * combo : text + icon, popup : check + text\n */\nBI.TextValueCheckCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.TextValueCheckCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-text-value-check-combo\",\n width: 100,\n height: 24,\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n value: \"\",\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.TextValueCheckCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.trigger = BI.createWidget({\n type: \"bi.select_text_trigger\",\n cls: \"text-value-trigger\",\n items: o.items,\n height: o.height,\n text: o.text,\n value: o.value\n });\n this.popup = BI.createWidget({\n type: \"bi.text_value_check_combo_popup\",\n chooseType: o.chooseType,\n items: o.items,\n value: o.value\n });\n this.popup.on(BI.TextValueCheckComboPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.textIconCheckCombo.hideView();\n self.fireEvent(BI.TextValueCheckCombo.EVENT_CHANGE);\n });\n this.popup.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.textIconCheckCombo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n element: this,\n adjustLength: 2,\n el: this.trigger,\n popup: {\n el: this.popup,\n maxHeight: 300\n }\n });\n\n if (BI.isKey(o.value)) {\n this.setValue(o.value);\n }\n },\n\n setTitle: function (title) {\n this.trigger.setTitle(title);\n },\n\n setValue: function (v) {\n this.trigger.setValue(v);\n this.popup.setValue(v);\n },\n\n setWarningTitle: function (title) {\n this.trigger.setWarningTitle(title);\n },\n\n getValue: function () {\n var value = this.popup.getValue();\n return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]);\n },\n\n populate: function (items) {\n this.options.items = items;\n this.textIconCheckCombo.populate(items);\n }\n});\nBI.TextValueCheckCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_value_check_combo\", BI.TextValueCheckCombo);","BI.TextValueCheckComboPopup = BI.inherit(BI.Pane, {\n _defaultConfig: function () {\n return BI.extend(BI.TextValueCheckComboPopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-text-icon-popup\",\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE\n });\n },\n\n _init: function () {\n BI.TextValueCheckComboPopup.superclass._init.apply(this, arguments);\n var o = this.options, self = this;\n this.popup = BI.createWidget({\n type: \"bi.button_group\",\n items: this._formatItems(o.items),\n chooseType: o.chooseType,\n layouts: [{\n type: \"bi.vertical\"\n }],\n value: o.value\n });\n\n this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.TextValueCheckComboPopup.EVENT_CHANGE, val, obj);\n }\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n vgap: 5,\n items: [this.popup]\n });\n },\n\n _formatItems: function (items) {\n return BI.map(items, function (i, item) {\n return BI.extend({\n type: \"bi.single_select_item\",\n cls: \"bi-list-item\",\n height: 24\n }, item);\n });\n },\n\n populate: function (items) {\n BI.TextValueCheckComboPopup.superclass.populate.apply(this, arguments);\n this.popup.populate(this._formatItems(items));\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n setValue: function (v) {\n this.popup.setValue(v);\n }\n\n});\nBI.TextValueCheckComboPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_value_check_combo_popup\", BI.TextValueCheckComboPopup);\n","/**\n * @class BI.TextValueCombo\n * @extend BI.Widget\n * combo : text + icon, popup : text\n * 参见场景dashboard布局方式选择\n */\nBI.TextValueCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.TextValueCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-text-value-combo\",\n height: 24,\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n text: \"\",\n value: \"\",\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.TextValueCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.trigger = BI.createWidget({\n type: \"bi.select_text_trigger\",\n cls: \"text-value-trigger\",\n items: o.items,\n height: o.height,\n text: o.text,\n value: o.value,\n warningTitle: o.warningTitle\n });\n this.popup = BI.createWidget({\n type: \"bi.text_value_combo_popup\",\n chooseType: o.chooseType,\n value: o.value,\n items: o.items\n });\n this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.textIconCombo.hideView();\n self.fireEvent(BI.TextValueCombo.EVENT_CHANGE, arguments);\n });\n this.popup.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.textIconCombo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n element: this,\n adjustLength: 2,\n el: this.trigger,\n popup: {\n el: this.popup,\n maxHeight: 240,\n minHeight: 25\n }\n });\n if(BI.isKey(o.value)) {\n this._checkError(o.value);\n }\n },\n\n _checkError: function (v) {\n if(BI.isNotNull(v)) {\n v = BI.isArray(v) ? v : [v];\n var result = BI.find(this.options.items, function (idx, item) {\n return BI.contains(v, item.value);\n });\n if (BI.isNull(result)) {\n this.trigger.setTipType(\"warning\");\n this.element.removeClass(\"combo-error\").addClass(\"combo-error\");\n } else {\n this.trigger.setTipType(\"success\");\n this.element.removeClass(\"combo-error\");\n }\n }\n },\n\n setValue: function (v) {\n this.trigger.setValue(v);\n this.popup.setValue(v);\n this._checkError(v);\n },\n\n getValue: function () {\n var value = this.popup.getValue();\n return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]);\n },\n\n populate: function (items) {\n this.options.items = items;\n this.textIconCombo.populate(items);\n }\n});\nBI.TextValueCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_value_combo\", BI.TextValueCombo);\n","/**\n * @class BI.SmallTextValueCombo\n * @extend BI.Widget\n * combo : text + icon, popup : text\n * 参见场景dashboard布局方式选择\n */\nBI.SmallTextValueCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.SmallTextValueCombo.superclass._defaultConfig.apply(this, arguments), {\n width: 100,\n height: 20,\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n el: {},\n text: \"\"\n });\n },\n\n _init: function () {\n BI.SmallTextValueCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.trigger = BI.createWidget(o.el, {\n type: \"bi.small_select_text_trigger\",\n items: o.items,\n height: o.height,\n text: o.text\n });\n this.popup = BI.createWidget({\n type: \"bi.text_value_combo_popup\",\n chooseType: o.chooseType,\n items: o.items\n });\n this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.SmallTextValueCombo.hideView();\n self.fireEvent(BI.SmallTextValueCombo.EVENT_CHANGE);\n });\n this.popup.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.SmallTextValueCombo = BI.createWidget({\n type: \"bi.combo\",\n element: this,\n container: o.container,\n adjustLength: 2,\n el: this.trigger,\n popup: {\n el: this.popup,\n maxHeight: 240,\n minHeight: 25\n }\n });\n },\n\n setValue: function (v) {\n this.trigger.setValue(v);\n this.popup.setValue(v);\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n populate: function (items) {\n this.options.items = items;\n this.SmallTextValueCombo.populate(items);\n }\n});\nBI.SmallTextValueCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.small_text_value_combo\", BI.SmallTextValueCombo);","BI.TextValueComboPopup = BI.inherit(BI.Pane, {\n _defaultConfig: function () {\n return BI.extend(BI.TextValueComboPopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-text-icon-popup\",\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE\n });\n },\n\n _init: function () {\n BI.TextValueComboPopup.superclass._init.apply(this, arguments);\n var o = this.options, self = this;\n this.popup = BI.createWidget({\n type: \"bi.button_group\",\n items: BI.createItems(o.items, {\n type: \"bi.single_select_item\",\n textAlign: o.textAlign,\n height: 24\n }),\n chooseType: o.chooseType,\n layouts: [{\n type: \"bi.vertical\"\n }],\n value: o.value\n });\n\n this.popup.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.TextValueComboPopup.EVENT_CHANGE, val, obj);\n }\n });\n this.check();\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n vgap: 5,\n items: [this.popup]\n });\n },\n\n populate: function (items) {\n BI.TextValueComboPopup.superclass.populate.apply(this, arguments);\n items = BI.createItems(items, {\n type: \"bi.single_select_item\",\n height: 24\n });\n this.popup.populate(items);\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n setValue: function (v) {\n this.popup.setValue(v);\n }\n\n});\nBI.TextValueComboPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_value_combo_popup\", BI.TextValueComboPopup);","/**\n * 有清楚按钮的文本框\n * Created by GUY on 2015/9/29.\n * @class BI.SmallTextEditor\n * @extends BI.SearchEditor\n */\nBI.ClearEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.ClearEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-clear-editor\",\n height: 24,\n errorText: \"\",\n watermark: \"\",\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn\n });\n },\n _init: function () {\n BI.ClearEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height,\n watermark: o.watermark,\n allowBlank: true,\n errorText: o.errorText,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n value: o.value\n });\n this.clear = BI.createWidget({\n type: \"bi.icon_button\",\n stopEvent: true,\n cls: \"search-close-h-font\"\n });\n this.clear.on(BI.IconButton.EVENT_CHANGE, function () {\n self.setValue(\"\");\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.STOPEDIT);\n self.fireEvent(BI.ClearEditor.EVENT_CLEAR);\n });\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [\n {\n el: this.editor\n },\n {\n el: this.clear,\n width: 24\n }]\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.editor.on(BI.Editor.EVENT_FOCUS, function () {\n self.fireEvent(BI.ClearEditor.EVENT_FOCUS);\n });\n this.editor.on(BI.Editor.EVENT_BLUR, function () {\n self.fireEvent(BI.ClearEditor.EVENT_BLUR);\n });\n this.editor.on(BI.Editor.EVENT_CLICK, function () {\n self.fireEvent(BI.ClearEditor.EVENT_CLICK);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE, function () {\n self._checkClear();\n self.fireEvent(BI.ClearEditor.EVENT_CHANGE);\n });\n this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.ClearEditor.EVENT_KEY_DOWN, v);\n });\n this.editor.on(BI.Editor.EVENT_SPACE, function () {\n self.fireEvent(BI.ClearEditor.EVENT_SPACE);\n });\n this.editor.on(BI.Editor.EVENT_BACKSPACE, function () {\n self.fireEvent(BI.ClearEditor.EVENT_BACKSPACE);\n });\n\n\n this.editor.on(BI.Editor.EVENT_VALID, function () {\n self.fireEvent(BI.ClearEditor.EVENT_VALID);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self.fireEvent(BI.ClearEditor.EVENT_ERROR);\n });\n this.editor.on(BI.Editor.EVENT_ENTER, function () {\n self.fireEvent(BI.ClearEditor.EVENT_ENTER);\n });\n this.editor.on(BI.Editor.EVENT_RESTRICT, function () {\n self.fireEvent(BI.ClearEditor.EVENT_RESTRICT);\n });\n this.editor.on(BI.Editor.EVENT_EMPTY, function () {\n self._checkClear();\n self.fireEvent(BI.ClearEditor.EVENT_EMPTY);\n });\n this.editor.on(BI.Editor.EVENT_REMOVE, function () {\n self.fireEvent(BI.ClearEditor.EVENT_REMOVE);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self.fireEvent(BI.ClearEditor.EVENT_CONFIRM);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self.fireEvent(BI.ClearEditor.EVENT_CHANGE_CONFIRM);\n });\n this.editor.on(BI.Editor.EVENT_START, function () {\n self.fireEvent(BI.ClearEditor.EVENT_START);\n });\n this.editor.on(BI.Editor.EVENT_PAUSE, function () {\n self.fireEvent(BI.ClearEditor.EVENT_PAUSE);\n });\n this.editor.on(BI.Editor.EVENT_STOP, function () {\n self.fireEvent(BI.ClearEditor.EVENT_STOP);\n });\n\n if (BI.isKey(o.value)) {\n this.clear.visible();\n } else {\n this.clear.invisible();\n }\n },\n\n _checkClear: function () {\n if (!this.getValue()) {\n this.clear.invisible();\n } else {\n this.clear.visible();\n }\n },\n\n setWaterMark: function (v) {\n this.options.watermark = v;\n this.editor.setWaterMark(v);\n },\n\n focus: function () {\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n },\n\n getValue: function () {\n if (this.isValid()) {\n return this.editor.getValue();\n }\n },\n\n setValue: function (v) {\n this.editor.setValue(v);\n if (BI.isKey(v)) {\n this.clear.visible();\n }\n },\n\n isValid: function () {\n return this.editor.isValid();\n }\n});\nBI.ClearEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.ClearEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.ClearEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.ClearEditor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.ClearEditor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.ClearEditor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.ClearEditor.EVENT_BACKSPACE = \"EVENT_BACKSPACE\";\nBI.ClearEditor.EVENT_CLEAR = \"EVENT_CLEAR\";\n\nBI.ClearEditor.EVENT_START = \"EVENT_START\";\nBI.ClearEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.ClearEditor.EVENT_STOP = \"EVENT_STOP\";\nBI.ClearEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.ClearEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.ClearEditor.EVENT_VALID = \"EVENT_VALID\";\nBI.ClearEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.ClearEditor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.ClearEditor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.ClearEditor.EVENT_REMOVE = \"EVENT_REMOVE\";\nBI.ClearEditor.EVENT_EMPTY = \"EVENT_EMPTY\";\nBI.shortcut(\"bi.clear_editor\", BI.ClearEditor);","/**\n * 带标记的文本框\n * Created by GUY on 2016/1/25.\n * @class BI.ShelterEditor\n * @extends BI.Widget\n */\nBI.ShelterEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.ShelterEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-shelter-editor\",\n hgap: 4,\n vgap: 2,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n allowBlank: true,\n watermark: \"\",\n errorText: \"\",\n height: 24,\n textAlign: \"left\"\n });\n },\n\n _init: function () {\n BI.ShelterEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n value: o.value,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank,\n watermark: o.watermark,\n errorText: o.errorText\n });\n this.text = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"shelter-editor-text\",\n title: o.title,\n warningTitle: o.warningTitle,\n tipType: o.tipType,\n textAlign: o.textAlign,\n height: o.height,\n hgap: o.hgap\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.text,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n this.text.on(BI.Controller.EVENT_CHANGE, function () {\n arguments[2] = self;\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.text.on(BI.TextButton.EVENT_CHANGE, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_CLICK_LABEL);\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_FOCUS, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_FOCUS, arguments);\n });\n this.editor.on(BI.Editor.EVENT_BLUR, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_BLUR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CLICK, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_CLICK, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.ShelterEditor.EVENT_KEY_DOWN, arguments);\n });\n\n this.editor.on(BI.Editor.EVENT_VALID, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_VALID, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self._showHint();\n self._checkText();\n self.fireEvent(BI.ShelterEditor.EVENT_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self._showHint();\n self._checkText();\n self.fireEvent(BI.ShelterEditor.EVENT_CHANGE_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_START, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_START, arguments);\n });\n this.editor.on(BI.Editor.EVENT_PAUSE, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_PAUSE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_STOP, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_STOP, arguments);\n });\n this.editor.on(BI.Editor.EVENT_SPACE, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_SPACE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self._checkText();\n self.fireEvent(BI.ShelterEditor.EVENT_ERROR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ENTER, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_ENTER, arguments);\n });\n this.editor.on(BI.Editor.EVENT_RESTRICT, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_RESTRICT, arguments);\n });\n this.editor.on(BI.Editor.EVENT_EMPTY, function () {\n self.fireEvent(BI.ShelterEditor.EVENT_EMPTY, arguments);\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [this.editor]\n });\n this._showHint();\n self._checkText();\n },\n\n _checkText: function () {\n var o = this.options;\n if (this.editor.getValue() === \"\") {\n this.text.setValue(o.watermark || \"\");\n this.text.element.addClass(\"bi-water-mark\");\n } else {\n this.text.setValue(this.editor.getValue());\n this.text.element.removeClass(\"bi-water-mark\");\n }\n BI.isKey(o.keyword) && this.text.doRedMark(o.keyword);\n },\n\n _showInput: function () {\n this.editor.visible();\n this.text.invisible();\n },\n\n _showHint: function () {\n this.editor.invisible();\n this.text.visible();\n },\n\n setWaterMark: function (v) {\n this.options.watermark = v;\n this.editor.setWaterMark(v);\n },\n\n setTitle: function (title) {\n this.text.setTitle(title);\n },\n\n setWarningTitle: function (title) {\n this.text.setWarningTitle(title);\n },\n\n focus: function () {\n this._showInput();\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n this._showHint();\n this._checkText();\n },\n\n doRedMark: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n setErrorText: function (text) {\n this.editor.setErrorText(text);\n },\n\n getErrorText: function () {\n return this.editor.getErrorText();\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n setTextStyle: function (style) {\n this.text.setStyle(style);\n },\n\n setValue: function (k) {\n var o = this.options;\n this.editor.setValue(k);\n this._checkText();\n },\n\n getValue: function () {\n return this.editor.getValue();\n },\n\n getState: function () {\n return this.text.getValue();\n },\n\n setState: function (v) {\n this._showHint();\n this.text.setValue(v);\n }\n});\nBI.ShelterEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.ShelterEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.ShelterEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.ShelterEditor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.ShelterEditor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.ShelterEditor.EVENT_CLICK_LABEL = \"EVENT_CLICK_LABEL\";\n\nBI.ShelterEditor.EVENT_START = \"EVENT_START\";\nBI.ShelterEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.ShelterEditor.EVENT_STOP = \"EVENT_STOP\";\nBI.ShelterEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.ShelterEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.ShelterEditor.EVENT_VALID = \"EVENT_VALID\";\nBI.ShelterEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.ShelterEditor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.ShelterEditor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.ShelterEditor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.ShelterEditor.EVENT_EMPTY = \"EVENT_EMPTY\";\n\nBI.shortcut(\"bi.shelter_editor\", BI.ShelterEditor);\n","/**\n * 带标记的文本框\n * Created by GUY on 2015/8/28.\n * @class BI.SignEditor\n * @extends BI.Widget\n */\nBI.SignEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.SignEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-sign-editor\",\n hgap: 4,\n vgap: 2,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n allowBlank: true,\n watermark: \"\",\n errorText: \"\",\n height: 24\n });\n },\n\n _init: function () {\n BI.SignEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n value: o.value,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank,\n watermark: o.watermark,\n errorText: o.errorText\n });\n this.text = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"sign-editor-text\",\n title: o.title,\n warningTitle: o.warningTitle,\n tipType: o.tipType,\n textAlign: \"left\",\n height: o.height,\n hgap: o.hgap,\n handler: function () {\n self._showInput();\n self.editor.focus();\n self.editor.selectAll();\n }\n });\n this.text.on(BI.TextButton.EVENT_CHANGE, function () {\n BI.nextTick(function () {\n self.fireEvent(BI.SignEditor.EVENT_CLICK_LABEL);\n });\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.text,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_FOCUS, function () {\n self.fireEvent(BI.SignEditor.EVENT_FOCUS, arguments);\n });\n this.editor.on(BI.Editor.EVENT_BLUR, function () {\n self.fireEvent(BI.SignEditor.EVENT_BLUR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CLICK, function () {\n self.fireEvent(BI.SignEditor.EVENT_CLICK, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE, function () {\n self.fireEvent(BI.SignEditor.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.SignEditor.EVENT_KEY_DOWN, arguments);\n });\n\n this.editor.on(BI.Editor.EVENT_VALID, function () {\n self.fireEvent(BI.SignEditor.EVENT_VALID, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self._showHint();\n self._checkText();\n self.fireEvent(BI.SignEditor.EVENT_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self._showHint();\n self._checkText();\n self.fireEvent(BI.SignEditor.EVENT_CHANGE_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_START, function () {\n self.fireEvent(BI.SignEditor.EVENT_START, arguments);\n });\n this.editor.on(BI.Editor.EVENT_PAUSE, function () {\n self.fireEvent(BI.SignEditor.EVENT_PAUSE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_STOP, function () {\n self.fireEvent(BI.SignEditor.EVENT_STOP, arguments);\n });\n this.editor.on(BI.Editor.EVENT_SPACE, function () {\n self.fireEvent(BI.SignEditor.EVENT_SPACE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self._checkText();\n self.fireEvent(BI.SignEditor.EVENT_ERROR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ENTER, function () {\n self.fireEvent(BI.SignEditor.EVENT_ENTER, arguments);\n });\n this.editor.on(BI.Editor.EVENT_RESTRICT, function () {\n self.fireEvent(BI.SignEditor.EVENT_RESTRICT, arguments);\n });\n this.editor.on(BI.Editor.EVENT_EMPTY, function () {\n self.fireEvent(BI.SignEditor.EVENT_EMPTY, arguments);\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [this.editor]\n });\n this._showHint();\n self._checkText();\n },\n\n _checkText: function () {\n var o = this.options;\n BI.nextTick(BI.bind(function () {\n if (this.editor.getValue() === \"\") {\n this.text.setValue(o.watermark || \"\");\n this.text.element.addClass(\"bi-water-mark\");\n } else {\n this.text.setValue(this.editor.getValue());\n this.text.element.removeClass(\"bi-water-mark\");\n BI.isKey(o.keyword) && this.text.doRedMark(o.keyword);\n }\n }, this));\n },\n\n _showInput: function () {\n this.editor.visible();\n this.text.invisible();\n },\n\n _showHint: function () {\n this.editor.invisible();\n this.text.visible();\n },\n\n setTitle: function (title) {\n this.text.setTitle(title);\n },\n\n setWarningTitle: function (title) {\n this.text.setWarningTitle(title);\n },\n\n setWaterMark: function (v) {\n this.options.watermark = v;\n this.editor.setWaterMark(v);\n },\n\n focus: function () {\n this._showInput();\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n this._showHint();\n this._checkText();\n },\n\n doRedMark: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n setErrorText: function (text) {\n this.editor.setErrorText(text);\n },\n\n getErrorText: function () {\n return this.editor.getErrorText();\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n setValue: function (k) {\n this.editor.setValue(k);\n this._checkText();\n },\n\n getValue: function () {\n return this.editor.getValue();\n },\n\n getState: function () {\n return this.text.getValue();\n },\n\n setState: function (v) {\n this._showHint();\n this.text.setValue(v);\n }\n});\nBI.SignEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SignEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SignEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.SignEditor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.SignEditor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.SignEditor.EVENT_CLICK_LABEL = \"EVENT_CLICK_LABEL\";\n\nBI.SignEditor.EVENT_START = \"EVENT_START\";\nBI.SignEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.SignEditor.EVENT_STOP = \"EVENT_STOP\";\nBI.SignEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.SignEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.SignEditor.EVENT_VALID = \"EVENT_VALID\";\nBI.SignEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.SignEditor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.SignEditor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.SignEditor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.SignEditor.EVENT_EMPTY = \"EVENT_EMPTY\";\n\nBI.shortcut(\"bi.sign_editor\", BI.SignEditor);","/**\n * guy\n * 记录状态的输入框\n * @class BI.StateEditor\n * @extends BI.Single\n */\nBI.StateEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.StateEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-state-editor\",\n hgap: 4,\n vgap: 2,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n allowBlank: true,\n watermark: \"\",\n errorText: \"\",\n height: 24,\n defaultText: \"\", // 默认显示值,默认显示值与显示值的区别是默认显示值标记灰色\n text: BI.i18nText(\"BI-Basic_Unrestricted\") // 显示值\n });\n },\n\n _init: function () {\n BI.StateEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n value: o.value,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank,\n watermark: o.watermark,\n errorText: o.errorText\n });\n this.text = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"bi-water-mark tip-text-style\",\n textAlign: \"left\",\n height: o.height,\n text: o.text,\n hgap: o.hgap,\n handler: function () {\n self._showInput();\n self.editor.focus();\n self.editor.setValue(\"\");\n },\n title: BI.isNotNull(o.tipText) ? o.tipText : function () {\n var title = \"\";\n if (BI.isString(self.stateValue)) {\n title = self.stateValue;\n }\n if (BI.isArray(self.stateValue) && self.stateValue.length === 1) {\n title = self.stateValue[0];\n }\n return title;\n },\n warningTitle: o.warningTitle,\n tipType: o.tipType\n });\n this.text.on(BI.TextButton.EVENT_CHANGE, function () {\n BI.nextTick(function () {\n self.fireEvent(BI.StateEditor.EVENT_CLICK_LABEL);\n });\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.text,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_FOCUS, function () {\n self.fireEvent(BI.StateEditor.EVENT_FOCUS, arguments);\n });\n this.editor.on(BI.Editor.EVENT_BLUR, function () {\n self.fireEvent(BI.StateEditor.EVENT_BLUR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CLICK, function () {\n self.fireEvent(BI.StateEditor.EVENT_CLICK, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE, function () {\n self.fireEvent(BI.StateEditor.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.StateEditor.EVENT_KEY_DOWN, arguments);\n });\n\n this.editor.on(BI.Editor.EVENT_VALID, function () {\n self.fireEvent(BI.StateEditor.EVENT_VALID, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self._showHint();\n self.fireEvent(BI.StateEditor.EVENT_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self._showHint();\n self.fireEvent(BI.StateEditor.EVENT_CHANGE_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_START, function () {\n self.fireEvent(BI.StateEditor.EVENT_START, arguments);\n });\n this.editor.on(BI.Editor.EVENT_PAUSE, function () {\n self.fireEvent(BI.StateEditor.EVENT_PAUSE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_STOP, function () {\n self.fireEvent(BI.StateEditor.EVENT_STOP, arguments);\n });\n this.editor.on(BI.Editor.EVENT_SPACE, function () {\n self.fireEvent(BI.StateEditor.EVENT_SPACE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self.fireEvent(BI.StateEditor.EVENT_ERROR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ENTER, function () {\n self.fireEvent(BI.StateEditor.EVENT_ENTER, arguments);\n });\n this.editor.on(BI.Editor.EVENT_RESTRICT, function () {\n self.fireEvent(BI.StateEditor.EVENT_RESTRICT, arguments);\n });\n this.editor.on(BI.Editor.EVENT_EMPTY, function () {\n self.fireEvent(BI.StateEditor.EVENT_EMPTY, arguments);\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [this.editor]\n });\n this._showHint();\n if (BI.isNotNull(o.text)) {\n this.setState(o.text);\n }\n },\n\n setWaterMark: function (v) {\n this.options.watermark = v;\n this.editor.setWaterMark(v);\n },\n\n doRedMark: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n focus: function () {\n if (this.options.disabled === false) {\n this._showInput();\n this.editor.focus();\n }\n },\n\n blur: function () {\n this.editor.blur();\n this._showHint();\n },\n\n _showInput: function () {\n this.editor.visible();\n this.text.invisible();\n },\n\n _showHint: function () {\n this.editor.invisible();\n this.text.visible();\n },\n\n _setText: function (v) {\n this.text.setText(v);\n this.text.setTitle(v);\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n setErrorText: function (text) {\n this.editor.setErrorText(text);\n },\n\n getErrorText: function () {\n return this.editor.getErrorText();\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n setValue: function (k) {\n this.editor.setValue(k);\n },\n\n getValue: function () {\n return this.editor.getValue();\n },\n\n getState: function () {\n return this.editor.getValue().match(/[^\\s]+/g);\n },\n\n setState: function (v) {\n var o = this.options;\n BI.StateEditor.superclass.setValue.apply(this, arguments);\n this.stateValue = v;\n if (BI.isNumber(v)) {\n if (v === BI.Selection.All) {\n this._setText(BI.i18nText(\"BI-Select_All\"));\n this.text.element.removeClass(\"bi-water-mark\");\n } else if (v === BI.Selection.Multi) {\n this._setText(BI.i18nText(\"BI-Select_Part\"));\n this.text.element.removeClass(\"bi-water-mark\");\n } else {\n this._setText(BI.isKey(o.defaultText) ? o.defaultText : o.text);\n BI.isKey(o.defaultText) ? this.text.element.addClass(\"bi-water-mark\") : this.text.element.removeClass(\"bi-water-mark\");\n }\n return;\n }\n if (BI.isString(v)) {\n this._setText(v);\n // 配置了defaultText才判断标灰,其他情况不标灰\n (BI.isKey(o.defaultText) && o.defaultText === v) ? this.text.element.addClass(\"bi-water-mark\") : this.text.element.removeClass(\"bi-water-mark\");\n return;\n }\n if (BI.isArray(v)) {\n if (BI.isEmpty(v)) {\n this._setText(BI.isKey(o.defaultText) ? o.defaultText : o.text);\n BI.isKey(o.defaultText) ? this.text.element.addClass(\"bi-water-mark\") : this.text.element.removeClass(\"bi-water-mark\");\n } else if (v.length === 1) {\n this._setText(v[0]);\n this.text.element.removeClass(\"bi-water-mark\");\n } else {\n this._setText(BI.i18nText(\"BI-Select_Part\"));\n this.text.element.removeClass(\"bi-water-mark\");\n }\n }\n },\n\n setTipType: function (v) {\n this.text.options.tipType = v;\n },\n\n getText: function () {\n return this.text.getText();\n }\n});\nBI.StateEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.StateEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.StateEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.StateEditor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.StateEditor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.StateEditor.EVENT_CLICK_LABEL = \"EVENT_CLICK_LABEL\";\n\nBI.StateEditor.EVENT_START = \"EVENT_START\";\nBI.StateEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.StateEditor.EVENT_STOP = \"EVENT_STOP\";\nBI.StateEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.StateEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.StateEditor.EVENT_VALID = \"EVENT_VALID\";\nBI.StateEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.StateEditor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.StateEditor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.StateEditor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.StateEditor.EVENT_EMPTY = \"EVENT_EMPTY\";\n\nBI.shortcut(\"bi.state_editor\", BI.StateEditor);\n","/**\n * 无限制-已选择状态输入框\n * Created by GUY on 2016/5/18.\n * @class BI.SimpleStateEditor\n * @extends BI.Single\n */\nBI.SimpleStateEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.SimpleStateEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-simple-state-editor\",\n hgap: 4,\n vgap: 2,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n mouseOut: false,\n allowBlank: true,\n watermark: \"\",\n errorText: \"\",\n height: 24,\n text: BI.i18nText(\"BI-Basic_Unrestricted\")\n });\n },\n\n _init: function () {\n BI.SimpleStateEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n value: o.value,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank,\n watermark: o.watermark,\n errorText: o.errorText\n });\n this.text = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"bi-water-mark\",\n textAlign: \"left\",\n text: o.text,\n height: o.height,\n hgap: o.hgap,\n handler: function () {\n self._showInput();\n self.editor.focus();\n self.editor.setValue(\"\");\n }\n });\n this.text.on(BI.TextButton.EVENT_CHANGE, function () {\n BI.nextTick(function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK_LABEL);\n });\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.text,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_FOCUS, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_FOCUS, arguments);\n });\n this.editor.on(BI.Editor.EVENT_BLUR, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_BLUR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CLICK, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_CLICK, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.SimpleStateEditor.EVENT_KEY_DOWN, arguments);\n });\n\n this.editor.on(BI.Editor.EVENT_VALID, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_VALID, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self._showHint();\n self.fireEvent(BI.SimpleStateEditor.EVENT_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self._showHint();\n self.fireEvent(BI.SimpleStateEditor.EVENT_CHANGE_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_START, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_START, arguments);\n });\n this.editor.on(BI.Editor.EVENT_PAUSE, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_PAUSE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_STOP, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_STOP, arguments);\n });\n this.editor.on(BI.Editor.EVENT_SPACE, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_SPACE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_ERROR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ENTER, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_ENTER, arguments);\n });\n this.editor.on(BI.Editor.EVENT_RESTRICT, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_RESTRICT, arguments);\n });\n this.editor.on(BI.Editor.EVENT_EMPTY, function () {\n self.fireEvent(BI.SimpleStateEditor.EVENT_EMPTY, arguments);\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [this.editor]\n });\n this._showHint();\n if(BI.isNotNull(o.text)){\n this.setState(o.text);\n }\n },\n\n setWaterMark: function (v) {\n this.options.watermark = v;\n this.editor.setWaterMark(v);\n },\n\n doRedMark: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n focus: function () {\n this._showInput();\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n this._showHint();\n },\n\n _showInput: function () {\n this.editor.visible();\n this.text.invisible();\n },\n\n _showHint: function () {\n this.editor.invisible();\n this.text.visible();\n },\n\n _setText: function (v) {\n this.text.setText(v);\n this.text.setTitle(v);\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n setErrorText: function (text) {\n this.editor.setErrorText(text);\n },\n\n getErrorText: function () {\n return this.editor.getErrorText();\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n setValue: function (k) {\n this.editor.setValue(k);\n },\n\n getValue: function () {\n return this.editor.getValue();\n },\n\n getState: function () {\n return this.editor.getValue().match(/[^\\s]+/g);\n },\n\n setState: function (v) {\n var o = this.options;\n BI.SimpleStateEditor.superclass.setValue.apply(this, arguments);\n if (BI.isNumber(v)) {\n if (v === BI.Selection.All) {\n this._setText(BI.i18nText(\"BI-Already_Selected\"));\n this.text.element.removeClass(\"bi-water-mark\");\n } else if (v === BI.Selection.Multi) {\n this._setText(BI.i18nText(\"BI-Already_Selected\"));\n this.text.element.removeClass(\"bi-water-mark\");\n } else {\n this._setText(o.text);\n this.text.element.addClass(\"bi-water-mark\");\n }\n return;\n }\n if (!BI.isArray(v) || v.length === 1) {\n this._setText(v);\n this.text.element.removeClass(\"bi-water-mark\");\n } else if (BI.isEmpty(v)) {\n this._setText(o.text);\n this.text.element.addClass(\"bi-water-mark\");\n } else {\n this._setText(BI.i18nText(\"BI-Already_Selected\"));\n this.text.element.removeClass(\"bi-water-mark\");\n }\n },\n\n getText: function () {\n return this.text.getText();\n }\n});\nBI.SimpleStateEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SimpleStateEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SimpleStateEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.SimpleStateEditor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.SimpleStateEditor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.SimpleStateEditor.EVENT_CLICK_LABEL = \"EVENT_CLICK_LABEL\";\n\nBI.SimpleStateEditor.EVENT_START = \"EVENT_START\";\nBI.SimpleStateEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.SimpleStateEditor.EVENT_STOP = \"EVENT_STOP\";\nBI.SimpleStateEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.SimpleStateEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.SimpleStateEditor.EVENT_VALID = \"EVENT_VALID\";\nBI.SimpleStateEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.SimpleStateEditor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.SimpleStateEditor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.SimpleStateEditor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.SimpleStateEditor.EVENT_EMPTY = \"EVENT_EMPTY\";\n\nBI.shortcut(\"bi.simple_state_editor\", BI.SimpleStateEditor);","/**\n * 下拉框弹出层的多选版本,toolbar带有若干按钮, zIndex在1000w\n * @class BI.MultiPopupView\n * @extends BI.Widget\n */\n\nBI.MultiPopupView = BI.inherit(BI.PopupView, {\n\n _defaultConfig: function () {\n var conf = BI.MultiPopupView.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n _baseCls: (conf._baseCls || \"\") + \" bi-multi-list-view\",\n buttons: [BI.i18nText(\"BI-Basic_Sure\")]\n });\n },\n\n _init: function () {\n BI.MultiPopupView.superclass._init.apply(this, arguments);\n },\n\n _createToolBar: function () {\n var o = this.options, self = this;\n if (o.buttons.length === 0) {\n return;\n }\n\n var text = []; // 构造[{text:content},……]\n BI.each(o.buttons, function (idx, item) {\n text.push({\n text: item,\n value: idx\n });\n });\n\n this.buttongroup = BI.createWidget({\n type: \"bi.button_group\",\n cls: \"list-view-toolbar bi-high-light bi-split-top\",\n height: 24,\n items: BI.createItems(text, {\n type: \"bi.text_button\",\n once: false,\n shadow: true,\n isShadowShowingOnSelected: true\n }),\n layouts: [{\n type: \"bi.center\",\n hgap: 0,\n vgap: 0\n }]\n });\n\n this.buttongroup.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) {\n self.fireEvent(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, value, obj);\n });\n\n return this.buttongroup;\n }\n\n});\n\nBI.MultiPopupView.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON = \"EVENT_CLICK_TOOLBAR_BUTTON\";\n\nBI.shortcut(\"bi.multi_popup_view\", BI.MultiPopupView);","/**\n * 可以理解为MultiPopupView和Panel两个面板的结合体\n * @class BI.PopupPanel\n * @extends BI.MultiPopupView\n */\n\nBI.PopupPanel = BI.inherit(BI.MultiPopupView, {\n\n _defaultConfig: function () {\n var conf = BI.PopupPanel.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-popup-panel\",\n title: \"\"\n });\n },\n\n _init: function () {\n BI.PopupPanel.superclass._init.apply(this, arguments);\n },\n\n _createTool: function () {\n var self = this, o = this.options;\n var close = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"close-h-font\",\n width: 25,\n height: 25\n });\n close.on(BI.IconButton.EVENT_CHANGE, function () {\n self.setVisible(false);\n self.fireEvent(BI.PopupPanel.EVENT_CLOSE);\n });\n return BI.createWidget({\n type: \"bi.htape\",\n cls: \"popup-panel-title bi-header-background\",\n height: 25,\n items: [{\n el: {\n type: \"bi.label\",\n textAlign: \"left\",\n text: o.title,\n height: 25,\n lgap: 10\n }\n }, {\n el: close,\n width: 25\n }]\n });\n }\n});\n\nBI.PopupPanel.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.PopupPanel.EVENT_CLOSE = \"EVENT_CLOSE\";\nBI.PopupPanel.EVENT_CLICK_TOOLBAR_BUTTON = \"EVENT_CLICK_TOOLBAR_BUTTON\";\n\nBI.shortcut(\"bi.popup_panel\", BI.PopupPanel);","/**\n * list面板\n *\n * Created by GUY on 2015/10/30.\n * @class BI.ListPane\n * @extends BI.Pane\n */\nBI.ListPane = BI.inherit(BI.Pane, {\n\n _defaultConfig: function () {\n var conf = BI.ListPane.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-list-pane\",\n logic: {\n dynamic: true\n },\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n vgap: 0,\n hgap: 0,\n items: [],\n itemsCreator: BI.emptyFn,\n hasNext: BI.emptyFn,\n onLoaded: BI.emptyFn,\n el: {\n type: \"bi.button_group\"\n }\n });\n },\n _init: function () {\n BI.ListPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.button_group = BI.createWidget(o.el, {\n type: \"bi.button_group\",\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n behaviors: {},\n items: o.items,\n itemsCreator: function (op, calback) {\n if (op.times === 1) {\n self.empty();\n BI.nextTick(function () {\n self.loading();\n });\n }\n o.itemsCreator(op, function () {\n calback.apply(self, arguments);\n op.times === 1 && BI.nextTick(function () {\n self.loaded();\n // callback可能在loading之前执行, check保证显示正确\n self.check();\n });\n });\n },\n hasNext: o.hasNext,\n layouts: [{\n type: \"bi.vertical\"\n }]\n });\n\n this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.ListPane.EVENT_CHANGE, value, obj);\n }\n });\n this.check();\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Top), BI.extend({\n scrolly: true,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n vgap: o.vgap,\n hgap: o.hgap\n }, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Top, this.button_group)\n }))));\n },\n\n hasPrev: function () {\n return this.button_group.hasPrev && this.button_group.hasPrev();\n },\n\n hasNext: function () {\n return this.button_group.hasNext && this.button_group.hasNext();\n },\n\n prependItems: function (items) {\n this.options.items = items.concat(this.options.items);\n this.button_group.prependItems.apply(this.button_group, arguments);\n this.check();\n },\n\n addItems: function (items) {\n this.options.items = this.options.items.concat(items);\n this.button_group.addItems.apply(this.button_group, arguments);\n this.check();\n },\n\n removeItemAt: function (indexes) {\n indexes = indexes || [];\n BI.removeAt(this.options.items, indexes);\n this.button_group.removeItemAt.apply(this.button_group, arguments);\n this.check();\n },\n\n populate: function (items) {\n var self = this, o = this.options;\n if (arguments.length === 0 && (BI.isFunction(this.button_group.attr(\"itemsCreator\")))) {// 接管loader的populate方法\n this.button_group.attr(\"itemsCreator\").apply(this, [{times: 1}, function () {\n if (arguments.length === 0) {\n throw new Error(\"参数不能为空\");\n }\n self.populate.apply(self, arguments);\n }]);\n return;\n }\n BI.ListPane.superclass.populate.apply(this, arguments);\n this.button_group.populate.apply(this.button_group, arguments);\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n setNotSelectedValue: function () {\n this.button_group.setNotSelectedValue.apply(this.button_group, arguments);\n },\n\n getNotSelectedValue: function () {\n return this.button_group.getNotSelectedValue();\n },\n\n setValue: function () {\n this.button_group.setValue.apply(this.button_group, arguments);\n },\n\n getValue: function () {\n return this.button_group.getValue.apply(this.button_group, arguments);\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n getAllLeaves: function () {\n return this.button_group.getAllLeaves();\n },\n\n getSelectedButtons: function () {\n return this.button_group.getSelectedButtons();\n },\n\n getNotSelectedButtons: function () {\n return this.button_group.getNotSelectedButtons();\n },\n\n getIndexByValue: function (value) {\n return this.button_group.getIndexByValue(value);\n },\n\n getNodeById: function (id) {\n return this.button_group.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n return this.button_group.getNodeByValue(value);\n }\n});\nBI.ListPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.list_pane\", BI.ListPane);","/**\n * 带有标题栏的pane\n * @class BI.Panel\n * @extends BI.Widget\n */\nBI.Panel = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Panel.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-panel bi-border\",\n title: \"\",\n titleButtons: [],\n el: {},\n logic: {\n dynamic: false\n }\n });\n },\n\n _init: function () {\n BI.Panel.superclass._init.apply(this, arguments);\n var o = this.options;\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"vertical\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"top\", this._createTitle()\n , this.options.el)\n }))));\n },\n\n _createTitle: function () {\n var self = this, o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"panel-title-text\",\n text: o.title,\n height: 30\n });\n\n this.button_group = BI.createWidget({\n type: \"bi.button_group\",\n items: o.titleButtons,\n layouts: [{\n type: \"bi.center_adapt\",\n lgap: 10\n }]\n });\n\n this.button_group.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.button_group.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) {\n self.fireEvent(BI.Panel.EVENT_CHANGE, value, obj);\n });\n\n return {\n el: {\n type: \"bi.left_right_vertical_adapt\",\n cls: \"panel-title bi-header-background bi-border-bottom\",\n height: 29,\n items: {\n left: [this.text],\n right: [this.button_group]\n },\n lhgap: 10,\n rhgap: 10\n },\n height: 29\n };\n },\n\n setTitle: function (title) {\n this.text.setValue(title);\n }\n});\nBI.Panel.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.panel\", BI.Panel);\n","BI.LinearSegmentButton = BI.inherit(BI.BasicButton, {\n\n props: {\n extraCls: \"bi-line-segment-button bi-list-item-effect\",\n once: true,\n readonly: true,\n hgap: 10,\n height: 25\n },\n\n render: function () {\n var self = this, o = this.options;\n\n return [{\n type: \"bi.label\",\n text: o.text,\n height: o.height,\n value: o.value,\n hgap: o.hgap,\n ref: function () {\n self.text = this;\n }\n }, {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.layout\",\n cls: \"line-segment-button-line\",\n height: 2,\n ref: function () {\n self.line = this;\n }\n },\n left: 0,\n right: 0,\n bottom: 0\n }]\n }];\n },\n\n setSelected: function (v) {\n BI.LinearSegmentButton.superclass.setSelected.apply(this, arguments);\n if (v) {\n this.line.element.addClass(\"bi-high-light-background\");\n } else {\n this.line.element.removeClass(\"bi-high-light-background\");\n }\n },\n\n setText: function (text) {\n this.text.setText(text);\n }\n});\nBI.shortcut(\"bi.linear_segment_button\", BI.LinearSegmentButton);","BI.LinearSegment = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-linear-segment bi-split-bottom\",\n items: [],\n layouts: [{\n type: \"bi.center\"\n }],\n height: 29\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.button_group\",\n items: BI.createItems(o.items, {\n type: \"bi.linear_segment_button\",\n height: o.height - 1\n }),\n layouts: o.layouts,\n listeners: [{\n eventName: \"__EVENT_CHANGE__\",\n action: function () {\n self.fireEvent(\"__EVENT_CHANGE__\", arguments);\n }\n }, {\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }],\n ref: function () {\n self.buttonGroup = this;\n }\n };\n },\n\n setValue: function (v) {\n this.buttonGroup.setValue(v);\n },\n\n setEnabledValue: function (v) {\n this.buttonGroup.setEnabledValue(v);\n },\n\n\n getValue: function () {\n return this.buttonGroup.getValue();\n }\n});\nBI.shortcut(\"bi.linear_segment\", BI.LinearSegment);","/**\n * 选择列表\n *\n * Created by GUY on 2015/11/1.\n * @class BI.SelectList\n * @extends BI.Widget\n */\nBI.SelectList = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SelectList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-select-list\",\n direction: BI.Direction.Top, // toolbar的位置\n logic: {\n dynamic: true\n },\n items: [],\n itemsCreator: BI.emptyFn,\n hasNext: BI.emptyFn,\n onLoaded: BI.emptyFn,\n toolbar: {\n type: \"bi.multi_select_bar\",\n iconWrapperWidth: 36\n },\n el: {\n type: \"bi.list_pane\"\n }\n });\n },\n _init: function () {\n BI.SelectList.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n // 全选\n this.toolbar = BI.createWidget(o.toolbar);\n this.allSelected = false;\n this.toolbar.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.allSelected = this.isSelected();\n if (type === BI.Events.CLICK) {\n self.setAllSelected(self.allSelected);\n self.fireEvent(BI.SelectList.EVENT_CHANGE, value, obj);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.list = BI.createWidget(o.el, {\n type: \"bi.list_pane\",\n items: o.items,\n itemsCreator: function (op, callback) {\n op.times === 1 && self.toolbar.setVisible(false);\n o.itemsCreator(op, function (items) {\n callback.apply(self, arguments);\n if (op.times === 1) {\n self.toolbar.setVisible(items && items.length > 0);\n self.toolbar.setEnable(self.isEnabled() && items && items.length > 0);\n }\n self._checkAllSelected();\n });\n },\n onLoaded: o.onLoaded,\n hasNext: o.hasNext\n });\n\n this.list.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (type === BI.Events.CLICK) {\n self._checkAllSelected();\n self.fireEvent(BI.SelectList.EVENT_CHANGE, value, obj);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({\n scrolly: true\n }, o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.toolbar, this.list)\n }))));\n\n if (o.items.length <= 0) {\n this.toolbar.setVisible(false);\n this.toolbar.setEnable(false);\n }\n if(BI.isNotNull(o.value)){\n this.setValue(o.value);\n }\n },\n\n _checkAllSelected: function () {\n var selectLength = this.list.getValue().length;\n var notSelectLength = this.getAllLeaves().length - selectLength;\n var hasNext = this.list.hasNext();\n var isAlreadyAllSelected = this.toolbar.isSelected();\n var isHalf = selectLength > 0 && (notSelectLength > 0 || (!isAlreadyAllSelected && hasNext));\n isHalf = isHalf || (notSelectLength > 0 && hasNext && isAlreadyAllSelected);\n this.toolbar.setHalfSelected(isHalf);\n !isHalf && this.toolbar.setSelected(selectLength > 0 && notSelectLength <= 0 && (!hasNext || isAlreadyAllSelected));\n },\n\n setAllSelected: function (v) {\n BI.each(this.getAllButtons(), function (i, btn) {\n (btn.setSelected || btn.setAllSelected).apply(btn, [v]);\n });\n this.allSelected = !!v;\n this.toolbar.setSelected(v);\n this.toolbar.setHalfSelected(false);\n },\n\n setToolBarVisible: function (b) {\n this.toolbar.setVisible(b);\n },\n\n isAllSelected: function () {\n return this.allSelected;\n // return this.toolbar.isSelected();\n },\n\n hasPrev: function () {\n return this.list.hasPrev();\n },\n\n hasNext: function () {\n return this.list.hasNext();\n },\n\n prependItems: function (items) {\n this.list.prependItems.apply(this.list, arguments);\n },\n\n addItems: function (items) {\n this.list.addItems.apply(this.list, arguments);\n },\n\n setValue: function (data) {\n var selectAll = data.type === BI.ButtonGroup.CHOOSE_TYPE_ALL;\n this.setAllSelected(selectAll);\n this.list[selectAll ? \"setNotSelectedValue\" : \"setValue\"](data.value);\n this._checkAllSelected();\n },\n\n getValue: function () {\n if (this.isAllSelected() === false) {\n return {\n type: BI.ButtonGroup.CHOOSE_TYPE_MULTI,\n value: this.list.getValue(),\n assist: this.list.getNotSelectedValue()\n };\n }\n return {\n type: BI.ButtonGroup.CHOOSE_TYPE_ALL,\n value: this.list.getNotSelectedValue(),\n assist: this.list.getValue()\n };\n\n },\n\n empty: function () {\n this.list.empty();\n },\n\n populate: function (items) {\n this.toolbar.setVisible(!BI.isEmptyArray(items));\n this.toolbar.setEnable(this.isEnabled() && !BI.isEmptyArray(items));\n this.list.populate.apply(this.list, arguments);\n this._checkAllSelected();\n },\n\n _setEnable: function (enable) {\n BI.SelectList.superclass._setEnable.apply(this, arguments);\n this.toolbar.setEnable(enable);\n },\n\n resetHeight: function (h) {\n var toolHeight = ( this.toolbar.element.outerHeight() || 25) * ( this.toolbar.isVisible() ? 1 : 0);\n this.list.resetHeight ? this.list.resetHeight(h - toolHeight) :\n this.list.element.css({\"max-height\": h - toolHeight + \"px\"});\n },\n\n setNotSelectedValue: function () {\n this.list.setNotSelectedValue.apply(this.list, arguments);\n this._checkAllSelected();\n },\n\n getNotSelectedValue: function () {\n return this.list.getNotSelectedValue();\n },\n\n getAllButtons: function () {\n return this.list.getAllButtons();\n },\n\n getAllLeaves: function () {\n return this.list.getAllLeaves();\n },\n\n getSelectedButtons: function () {\n return this.list.getSelectedButtons();\n },\n\n getNotSelectedButtons: function () {\n return this.list.getNotSelectedButtons();\n },\n\n getIndexByValue: function (value) {\n return this.list.getIndexByValue(value);\n },\n\n getNodeById: function (id) {\n return this.list.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n return this.list.getNodeByValue(value);\n }\n});\nBI.SelectList.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.select_list\", BI.SelectList);","/**\n * Created by roy on 15/11/6.\n */\nBI.LazyLoader = BI.inherit(BI.Widget, {\n _const: {\n PAGE: 100\n },\n _defaultConfig: function () {\n return BI.extend(BI.LazyLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-lazy-loader\",\n el: {},\n items: []\n });\n },\n\n _init: function () {\n var self = this, o = this.options;\n BI.LazyLoader.superclass._init.apply(this, arguments);\n var all = o.items.length;\n this.loader = BI.createWidget({\n type: \"bi.loader\",\n element: this,\n // 下面是button_group的属性\n el: o.el,\n\n itemsCreator: function (options, populate) {\n populate(self._getNextItems(options));\n },\n hasNext: function (option) {\n return option.count < all;\n }\n });\n\n this.loader.on(BI.Loader.EVENT_CHANGE, function (obj) {\n self.fireEvent(BI.LazyLoader.EVENT_CHANGE, obj);\n });\n },\n _getNextItems: function (options) {\n var self = this, o = this.options;\n var lastNum = o.items.length - this._const.PAGE * (options.times - 1);\n var lastItems = BI.takeRight(o.items, lastNum);\n var nextItems = BI.take(lastItems, this._const.PAGE);\n return nextItems;\n },\n\n populate: function (items) {\n this.loader.populate(items);\n },\n\n addItems: function (items) {\n this.loader.addItems(items);\n },\n\n empty: function () {\n this.loader.empty();\n },\n\n setNotSelectedValue: function () {\n this.loader.setNotSelectedValue.apply(this.loader, arguments);\n },\n\n getNotSelectedValue: function () {\n return this.loader.getNotSelectedValue();\n },\n\n setValue: function () {\n this.loader.setValue.apply(this.loader, arguments);\n },\n\n getValue: function () {\n return this.loader.getValue.apply(this.loader, arguments);\n },\n\n getAllButtons: function () {\n return this.loader.getAllButtons();\n },\n\n getAllLeaves: function () {\n return this.loader.getAllLeaves();\n },\n\n getSelectedButtons: function () {\n return this.loader.getSelectedButtons();\n },\n\n getNotSelectedButtons: function () {\n return this.loader.getNotSelectedButtons();\n },\n\n getIndexByValue: function (value) {\n return this.loader.getIndexByValue(value);\n },\n\n getNodeById: function (id) {\n return this.loader.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n return this.loader.getNodeByValue(value);\n }\n});\nBI.LazyLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.lazy_loader\", BI.LazyLoader);","/**\n * 恶心的加载控件, 为解决排序问题引入的控件\n *\n * Created by GUY on 2015/11/12.\n * @class BI.ListLoader\n * @extends BI.Widget\n */\nBI.ListLoader = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.ListLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-list-loader\",\n\n isDefaultInit: true, // 是否默认初始化数据\n\n // 下面是button_group的属性\n el: {\n type: \"bi.button_group\"\n },\n\n items: [],\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn,\n\n // 下面是分页信息\n count: false,\n next: {},\n hasNext: BI.emptyFn\n });\n },\n\n _nextLoad: function () {\n var self = this, o = this.options;\n this.next.setLoading();\n o.itemsCreator.apply(this, [{times: ++this.times}, function () {\n self.next.setLoaded();\n self.addItems.apply(self, arguments);\n }]);\n },\n\n _init: function () {\n BI.ListLoader.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (o.itemsCreator === false) {\n o.next = false;\n }\n\n this.button_group = BI.createWidget(o.el, {\n type: \"bi.button_group\",\n element: this,\n chooseType: 0,\n items: o.items,\n behaviors: {},\n layouts: [{\n type: \"bi.vertical\"\n }]\n });\n this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.ListLoader.EVENT_CHANGE, obj);\n }\n });\n\n if (o.next !== false) {\n this.next = BI.createWidget(BI.extend({\n type: \"bi.loading_bar\"\n }, o.next));\n this.next.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n self._nextLoad();\n }\n });\n }\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n items: [this.next]\n });\n\n o.isDefaultInit && BI.isEmpty(o.items) && BI.nextTick(BI.bind(function () {\n this.populate();\n }, this));\n if (BI.isNotEmptyArray(o.items)) {\n this.populate(o.items);\n }\n },\n\n hasNext: function () {\n var o = this.options;\n if (BI.isNumber(o.count)) {\n return this.count < o.count;\n }\n return !!o.hasNext.apply(this, [{\n times: this.times,\n count: this.count\n }]);\n },\n\n addItems: function (items) {\n this.count += items.length;\n if (BI.isObject(this.next)) {\n this.options.items = this.options.items.concat(items);\n if (this.hasNext()) {\n this.next.setLoaded();\n } else {\n this.next.setEnd();\n }\n }\n this.button_group.addItems.apply(this.button_group, arguments);\n this.next.element.appendTo(this.element);\n },\n\n populate: function (items) {\n var self = this, o = this.options;\n if (arguments.length === 0 && (BI.isFunction(o.itemsCreator))) {\n o.itemsCreator.apply(this, [{times: 1}, function () {\n if (arguments.length === 0) {\n throw new Error(\"参数不能为空\");\n }\n self.populate.apply(self, arguments);\n o.onLoaded();\n }]);\n return;\n }\n this.options.items = items;\n this.times = 1;\n this.count = 0;\n this.count += items.length;\n if (BI.isObject(this.next)) {\n if (this.hasNext()) {\n this.next.setLoaded();\n } else {\n this.next.invisible();\n }\n }\n BI.DOM.hang([this.next]);\n this.button_group.populate.apply(this.button_group, arguments);\n this.next.element.appendTo(this.element);\n },\n\n empty: function () {\n BI.DOM.hang([this.next]);\n this.button_group.empty();\n this.next.element.appendTo(this.element);\n BI.each([this.next], function (i, ob) {\n ob && ob.setVisible(false);\n });\n },\n\n setNotSelectedValue: function () {\n this.button_group.setNotSelectedValue.apply(this.button_group, arguments);\n },\n\n getNotSelectedValue: function () {\n return this.button_group.getNotSelectedValue();\n },\n\n setValue: function () {\n this.button_group.setValue.apply(this.button_group, arguments);\n },\n\n getValue: function () {\n return this.button_group.getValue.apply(this.button_group, arguments);\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n getAllLeaves: function () {\n return this.button_group.getAllLeaves();\n },\n\n getSelectedButtons: function () {\n return this.button_group.getSelectedButtons();\n },\n\n getNotSelectedButtons: function () {\n return this.button_group.getNotSelectedButtons();\n },\n\n getIndexByValue: function (value) {\n return this.button_group.getIndexByValue(value);\n },\n\n getNodeById: function (id) {\n return this.button_group.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n return this.button_group.getNodeByValue(value);\n }\n});\nBI.ListLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.list_loader\", BI.ListLoader);","/**\n * Created by GUY on 2016/4/29.\n *\n * @class BI.SortList\n * @extends BI.Widget\n */\nBI.SortList = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.SortList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-sort-list\",\n\n isDefaultInit: true, // 是否默认初始化数据\n\n // 下面是button_group的属性\n el: {\n type: \"bi.button_group\"\n },\n\n items: [],\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn,\n\n // 下面是分页信息\n count: false,\n next: {},\n hasNext: BI.emptyFn\n\n // containment: this.element,\n // connectWith: \".bi-sort-list\",\n });\n },\n\n _init: function () {\n BI.SortList.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.loader = BI.createWidget({\n type: \"bi.list_loader\",\n element: this,\n isDefaultInit: o.isDefaultInit,\n el: o.el,\n items: this._formatItems(o.items),\n itemsCreator: function (op, callback) {\n o.itemsCreator(op, function (items) {\n callback(self._formatItems(items));\n });\n },\n onLoaded: o.onLoaded,\n count: o.count,\n next: o.next,\n hasNext: o.hasNext\n });\n this.loader.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.SortList.EVENT_CHANGE, value, obj);\n }\n });\n\n this.loader.element.sortable({\n containment: o.containment || this.element,\n connectWith: o.connectWith || \".bi-sort-list\",\n items: \".sort-item\",\n cursor: o.cursor || \"drag\",\n tolerance: o.tolerance || \"intersect\",\n placeholder: {\n element: function ($currentItem) {\n var holder = BI.createWidget({\n type: \"bi.layout\",\n cls: \"bi-sortable-holder\",\n height: $currentItem.outerHeight()\n });\n holder.element.css({\n \"margin-left\": $currentItem.css(\"margin-left\"),\n \"margin-right\": $currentItem.css(\"margin-right\"),\n \"margin-top\": $currentItem.css(\"margin-top\"),\n \"margin-bottom\": $currentItem.css(\"margin-bottom\"),\n margin: $currentItem.css(\"margin\")\n });\n return holder.element;\n },\n update: function () {\n\n }\n },\n start: function (event, ui) {\n\n },\n stop: function (event, ui) {\n self.fireEvent(BI.SortList.EVENT_CHANGE);\n },\n over: function (event, ui) {\n\n }\n });\n },\n\n _formatItems: function (items) {\n BI.each(items, function (i, item) {\n item = BI.stripEL(item);\n item.cls = item.cls ? item.cls + \" sort-item\" : \"sort-item\";\n item.attributes = {\n sorted: item.value\n };\n });\n return items;\n },\n\n hasNext: function () {\n return this.loader.hasNext();\n },\n\n addItems: function (items) {\n this.loader.addItems(items);\n },\n\n populate: function (items) {\n if (items) {\n arguments[0] = this._formatItems(items);\n }\n this.loader.populate.apply(this.loader, arguments);\n },\n\n empty: function () {\n this.loader.empty();\n },\n\n setNotSelectedValue: function () {\n this.loader.setNotSelectedValue.apply(this.loader, arguments);\n },\n\n getNotSelectedValue: function () {\n return this.loader.getNotSelectedValue();\n },\n\n setValue: function () {\n this.loader.setValue.apply(this.loader, arguments);\n },\n\n getValue: function () {\n return this.loader.getValue();\n },\n\n getAllButtons: function () {\n return this.loader.getAllButtons();\n },\n\n getAllLeaves: function () {\n return this.loader.getAllLeaves();\n },\n\n getSelectedButtons: function () {\n return this.loader.getSelectedButtons();\n },\n\n getNotSelectedButtons: function () {\n return this.loader.getNotSelectedButtons();\n },\n\n getIndexByValue: function (value) {\n return this.loader.getIndexByValue(value);\n },\n\n getNodeById: function (id) {\n return this.loader.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n return this.loader.getNodeByValue(value);\n },\n\n getSortedValues: function () {\n return this.loader.element.sortable(\"toArray\", {attribute: \"sorted\"});\n }\n});\nBI.SortList.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.sort_list\", BI.SortList);\n","/**\n * author: young\n * createdDate: 2018/12/18\n * description:\n */\nBI.LoadingPane = BI.inherit(BI.Pane, {\n _mount: function () {\n var isMounted = BI.Pane.superclass._mount.apply(this, arguments);\n if (isMounted) {\n if (this.beforeInit) {\n this.__asking = true;\n this.loading();\n this.beforeInit(BI.bind(this.__loaded, this));\n }\n }\n },\n\n _initRender: function () {\n if (this.beforeInit) {\n this.__async = true;\n } else {\n this._render();\n }\n },\n\n __loaded: function () {\n this.__asking = false;\n this.loaded();\n this._render();\n }\n});","/**\n * 有总页数和总行数的分页控件\n * Created by Young's on 2016/10/13.\n */\nBI.AllCountPager = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.AllCountPager.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-all-count-pager\",\n pagerDirection: \"vertical\", // 翻页按钮方向,可选值:vertical/horizontal\n height: 24,\n pages: 1, // 必选项\n curr: 1, // 初始化当前页, pages为数字时可用,\n count: 1 // 总行数\n });\n },\n _init: function () {\n BI.AllCountPager.superclass._init.apply(this, arguments);\n var self = this, o = this.options, pagerIconCls = this._getPagerIconCls();\n this.editor = BI.createWidget({\n type: \"bi.small_text_editor\",\n cls: \"pager-editor bi-border-radius\",\n validationChecker: function (v) {\n return (self.rowCount.getValue() === 0 && v === \"0\") || BI.isPositiveInteger(v);\n },\n hgap: 4,\n vgap: 0,\n value: o.curr,\n errorText: BI.i18nText(\"BI-Please_Input_Positive_Integer\"),\n width: 40,\n height: 24,\n invisible: o.pages <= 1\n });\n\n this.pager = BI.createWidget({\n type: \"bi.pager\",\n width: 58,\n layouts: [{\n type: \"bi.horizontal\",\n lgap: 5\n }],\n\n dynamicShow: false,\n pages: o.pages,\n curr: o.curr,\n groups: 0,\n\n first: false,\n last: false,\n prev: {\n type: \"bi.icon_button\",\n value: \"prev\",\n title: BI.i18nText(\"BI-Previous_Page\"),\n warningTitle: BI.i18nText(\"BI-Current_Is_First_Page\"),\n height: 22,\n width: 22,\n cls: \"bi-border bi-border-radius all-pager-prev bi-list-item-select2 \" + pagerIconCls.preCls\n },\n next: {\n type: \"bi.icon_button\",\n value: \"next\",\n title: BI.i18nText(\"BI-Next_Page\"),\n warningTitle: BI.i18nText(\"BI-Current_Is_Last_Page\"),\n height: 22,\n width: 22,\n cls: \"bi-border bi-border-radius all-pager-next bi-list-item-select2 \" + pagerIconCls.nextCls\n },\n\n hasPrev: o.hasPrev,\n hasNext: o.hasNext,\n firstPage: o.firstPage,\n lastPage: o.lastPage,\n invisible: o.pages <= 1\n });\n\n this.editor.on(BI.TextEditor.EVENT_CONFIRM, function () {\n self.pager.setValue(BI.parseInt(self.editor.getValue()));\n self.fireEvent(BI.AllCountPager.EVENT_CHANGE);\n });\n this.pager.on(BI.Pager.EVENT_CHANGE, function () {\n self.fireEvent(BI.AllCountPager.EVENT_CHANGE);\n });\n this.pager.on(BI.Pager.EVENT_AFTER_POPULATE, function () {\n self.editor.setValue(self.pager.getCurrentPage());\n });\n\n this.allPages = BI.createWidget({\n type: \"bi.label\",\n title: o.pages,\n text: \"/\" + o.pages,\n lgap: 5,\n invisible: o.pages <= 1\n });\n\n this.rowCount = BI.createWidget({\n type: \"bi.label\",\n cls: \"row-count\",\n height: o.height,\n hgap: 5,\n text: o.count,\n title: o.count\n });\n\n var count = BI.createWidget({\n type: \"bi.left\",\n height: o.height,\n scrollable: false,\n items: [{\n type: \"bi.label\",\n height: o.height,\n text: BI.i18nText(\"BI-Basic_Total\"),\n width: 15\n }, this.rowCount, {\n type: \"bi.label\",\n height: o.height,\n text: BI.i18nText(\"BI-Tiao_Data\"),\n width: 50,\n textAlign: \"left\"\n }]\n });\n BI.createWidget({\n type: \"bi.left_right_vertical_adapt\",\n element: this,\n items: {\n left: [count],\n right: [this.editor, this.allPages, this.pager]\n }\n });\n },\n\n alwaysShowPager: true,\n\n _getPagerIconCls: function () {\n var o = this.options;\n switch (o.pagerDirection) {\n case \"horizontal\":\n return {\n preCls: \"row-pre-page-h-font \",\n nextCls: \"row-next-page-h-font \"\n };\n case \"vertical\":\n default:\n return {\n preCls: \"column-pre-page-h-font \",\n nextCls: \"column-next-page-h-font \"\n };\n }\n },\n\n setAllPages: function (v) {\n this.allPages.setText(\"/\" + v);\n this.allPages.setTitle(v);\n this.options.pages = v;\n this.pager.setAllPages(v);\n this.editor.setEnable(v >= 1);\n this.setPagerVisible(v > 1);\n },\n\n setValue: function (v) {\n this.pager.setValue(v);\n },\n\n setVPage: function (v) {\n this.pager.setValue(v);\n },\n\n setCount: function (count) {\n this.rowCount.setText(count);\n this.rowCount.setTitle(count);\n },\n\n getCurrentPage: function () {\n return this.pager.getCurrentPage();\n },\n\n hasPrev: function () {\n return this.pager.hasPrev();\n },\n\n hasNext: function () {\n return this.pager.hasNext();\n },\n\n setPagerVisible: function (b) {\n this.editor.setVisible(b);\n this.allPages.setVisible(b);\n this.pager.setVisible(b);\n },\n\n populate: function () {\n this.pager.populate();\n this.setPagerVisible(this.options.pages > 1);\n }\n});\nBI.AllCountPager.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.all_count_pager\", BI.AllCountPager);","/**\n * 显示页码的分页控件\n *\n * Created by GUY on 2016/6/30.\n * @class BI.DirectionPager\n * @extends BI.Widget\n */\nBI.DirectionPager = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.DirectionPager.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-direction-pager\",\n height: 24,\n horizontal: {\n pages: false, // 总页数\n curr: 1, // 初始化当前页, pages为数字时可用\n\n hasPrev: BI.emptyFn,\n hasNext: BI.emptyFn,\n firstPage: 1,\n lastPage: BI.emptyFn\n },\n vertical: {\n pages: false, // 总页数\n curr: 1, // 初始化当前页, pages为数字时可用\n\n hasPrev: BI.emptyFn,\n hasNext: BI.emptyFn,\n firstPage: 1,\n lastPage: BI.emptyFn\n }\n });\n },\n _init: function () {\n BI.DirectionPager.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var v = o.vertical, h = o.horizontal;\n this._createVPager();\n this._createHPager();\n this.layout = BI.createWidget({\n type: \"bi.absolute\",\n scrollable: false,\n element: this,\n items: [{\n el: this.vpager,\n top: 0,\n right: 86\n }, {\n el: this.vlabel,\n top: 0,\n right: 110\n }, {\n el: this.hpager,\n top: 0,\n right: 0\n }, {\n el: this.hlabel,\n top: 0,\n right: 24\n }]\n });\n },\n\n _createVPager: function () {\n var self = this, o = this.options;\n var v = o.vertical;\n this.vlabel = BI.createWidget({\n type: \"bi.label\",\n width: 24,\n height: 24,\n value: v.curr,\n title: v.curr,\n invisible: true\n });\n this.vpager = BI.createWidget({\n type: \"bi.pager\",\n width: 72,\n layouts: [{\n type: \"bi.horizontal\",\n scrollx: false,\n rgap: 24\n }],\n invisible: true,\n\n dynamicShow: false,\n pages: v.pages,\n curr: v.curr,\n groups: 0,\n\n first: false,\n last: false,\n prev: {\n type: \"bi.icon_button\",\n value: \"prev\",\n title: BI.i18nText(\"BI-Up_Page\"),\n warningTitle: BI.i18nText(\"BI-Current_Is_First_Page\"),\n height: 22,\n width: 22,\n cls: \"bi-border bi-border-radius direction-pager-prev column-pre-page-h-font bi-list-item-select2\"\n },\n next: {\n type: \"bi.icon_button\",\n value: \"next\",\n title: BI.i18nText(\"BI-Down_Page\"),\n warningTitle: BI.i18nText(\"BI-Current_Is_Last_Page\"),\n height: 22,\n width: 22,\n cls: \"bi-border bi-border-radius direction-pager-next column-next-page-h-font bi-list-item-select2\"\n },\n\n hasPrev: v.hasPrev,\n hasNext: v.hasNext,\n firstPage: v.firstPage,\n lastPage: v.lastPage\n });\n\n this.vpager.on(BI.Pager.EVENT_CHANGE, function () {\n self.fireEvent(BI.DirectionPager.EVENT_CHANGE);\n });\n this.vpager.on(BI.Pager.EVENT_AFTER_POPULATE, function () {\n self.vlabel.setValue(this.getCurrentPage());\n self.vlabel.setTitle(this.getCurrentPage());\n });\n },\n\n _createHPager: function () {\n var self = this, o = this.options;\n var h = o.horizontal;\n this.hlabel = BI.createWidget({\n type: \"bi.label\",\n width: 24,\n height: 24,\n value: h.curr,\n title: h.curr,\n invisible: true\n });\n this.hpager = BI.createWidget({\n type: \"bi.pager\",\n width: 72,\n layouts: [{\n type: \"bi.horizontal\",\n scrollx: false,\n rgap: 24\n }],\n invisible: true,\n\n dynamicShow: false,\n pages: h.pages,\n curr: h.curr,\n groups: 0,\n\n first: false,\n last: false,\n prev: {\n type: \"bi.icon_button\",\n value: \"prev\",\n title: BI.i18nText(\"BI-Left_Page\"),\n warningTitle: BI.i18nText(\"BI-Current_Is_First_Page\"),\n height: 22,\n width: 22,\n cls: \"bi-border bi-border-radius direction-pager-prev row-pre-page-h-font bi-list-item-select2\"\n },\n next: {\n type: \"bi.icon_button\",\n value: \"next\",\n title: BI.i18nText(\"BI-Right_Page\"),\n warningTitle: BI.i18nText(\"BI-Current_Is_Last_Page\"),\n height: 22,\n width: 22,\n cls: \"bi-border bi-border-radius direction-pager-next row-next-page-h-font bi-list-item-select2\"\n },\n\n hasPrev: h.hasPrev,\n hasNext: h.hasNext,\n firstPage: h.firstPage,\n lastPage: h.lastPage\n });\n\n this.hpager.on(BI.Pager.EVENT_CHANGE, function () {\n self.fireEvent(BI.DirectionPager.EVENT_CHANGE);\n });\n this.hpager.on(BI.Pager.EVENT_AFTER_POPULATE, function () {\n self.hlabel.setValue(this.getCurrentPage());\n self.hlabel.setTitle(this.getCurrentPage());\n });\n },\n\n getVPage: function () {\n return this.vpager.getCurrentPage();\n },\n\n getHPage: function () {\n return this.hpager.getCurrentPage();\n },\n\n setVPage: function (v) {\n this.vpager.setValue(v);\n this.vlabel.setValue(v);\n this.vlabel.setTitle(v);\n },\n\n setHPage: function (v) {\n this.hpager.setValue(v);\n this.hlabel.setValue(v);\n this.hlabel.setTitle(v);\n },\n\n hasVNext: function () {\n return this.vpager.hasNext();\n },\n\n hasHNext: function () {\n return this.hpager.hasNext();\n },\n\n hasVPrev: function () {\n return this.vpager.hasPrev();\n },\n\n hasHPrev: function () {\n return this.hpager.hasPrev();\n },\n\n setHPagerVisible: function (b) {\n this.hpager.setVisible(b);\n this.hlabel.setVisible(b);\n },\n\n setVPagerVisible: function (b) {\n this.vpager.setVisible(b);\n this.vlabel.setVisible(b);\n },\n\n populate: function () {\n this.vpager.populate();\n this.hpager.populate();\n var vShow = false, hShow = false;\n if (!this.hasHNext() && !this.hasHPrev()) {\n this.setHPagerVisible(false);\n } else {\n this.setHPagerVisible(true);\n hShow = true;\n }\n if (!this.hasVNext() && !this.hasVPrev()) {\n this.setVPagerVisible(false);\n } else {\n this.setVPagerVisible(true);\n vShow = true;\n }\n this.setVisible(hShow || vShow);\n var num = [86, 110, 0, 24];\n var items = this.layout.attr(\"items\");\n\n if (vShow === true && hShow === true) {\n items[0].right = num[0];\n items[1].right = num[1];\n items[2].right = num[2];\n items[3].right = num[3];\n } else if (vShow === true) {\n items[0].right = num[2];\n items[1].right = num[3];\n } else if (hShow === true) {\n items[2].right = num[2];\n items[3].right = num[3];\n }\n this.layout.attr(\"items\", items);\n this.layout.resize();\n },\n\n clear: function () {\n this.vpager.attr(\"curr\", 1);\n this.hpager.attr(\"curr\", 1);\n }\n});\nBI.DirectionPager.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.direction_pager\", BI.DirectionPager);","/**\n * 分页控件\n *\n * Created by GUY on 2015/8/31.\n * @class BI.DetailPager\n * @extends BI.Widget\n */\nBI.DetailPager = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.DetailPager.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-detail-pager\",\n behaviors: {},\n layouts: [{\n type: \"bi.horizontal\",\n hgap: 10,\n vgap: 0\n }],\n\n dynamicShow: true, // 是否动态显示上一页、下一页、首页、尾页, 若为false,则指对其设置使能状态\n // dynamicShow为false时以下两个有用\n dynamicShowFirstLast: false, // 是否动态显示首页、尾页\n dynamicShowPrevNext: false, // 是否动态显示上一页、下一页\n pages: false, // 总页数\n curr: function () {\n return 1;\n }, // 初始化当前页\n groups: 0, // 连续显示分页数\n jump: BI.emptyFn, // 分页的回调函数\n\n first: false, // 是否显示首页\n last: false, // 是否显示尾页\n prev: \"上一页\",\n next: \"下一页\",\n\n firstPage: 1,\n lastPage: function () { // 在万不得已时才会调用这个函数获取最后一页的页码, 主要作用于setValue方法\n return 1;\n },\n hasPrev: BI.emptyFn, // pages不可用时有效\n hasNext: BI.emptyFn // pages不可用时有效\n });\n },\n _init: function () {\n BI.DetailPager.superclass._init.apply(this, arguments);\n var self = this;\n this.currPage = BI.result(this.options, \"curr\");\n // 翻页太灵敏\n this._lock = false;\n this._debouce = BI.debounce(function () {\n self._lock = false;\n }, 300);\n this._populate();\n },\n\n _populate: function () {\n var self = this, o = this.options, view = [], dict = {};\n this.empty();\n var pages = BI.result(o, \"pages\");\n var curr = BI.result(this, \"currPage\");\n var groups = BI.result(o, \"groups\");\n var first = BI.result(o, \"first\");\n var last = BI.result(o, \"last\");\n var prev = BI.result(o, \"prev\");\n var next = BI.result(o, \"next\");\n\n if (pages === false) {\n groups = 0;\n first = false;\n last = false;\n } else {\n groups > pages && (groups = pages);\n }\n\n // 计算当前组\n dict.index = Math.ceil((curr + ((groups > 1 && groups !== pages) ? 1 : 0)) / (groups === 0 ? 1 : groups));\n\n // 当前页非首页,则输出上一页\n if (((!o.dynamicShow && !o.dynamicShowPrevNext) || curr > 1) && prev !== false) {\n if (BI.isKey(prev)) {\n view.push({\n text: prev,\n value: \"prev\",\n disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false)\n });\n } else {\n view.push(BI.extend({\n disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false)\n }, prev));\n }\n }\n\n // 当前组非首组,则输出首页\n if (((!o.dynamicShow && !o.dynamicShowFirstLast) || (dict.index > 1 && groups !== 0)) && first) {\n view.push({\n text: first,\n value: \"first\",\n disabled: !(dict.index > 1 && groups !== 0)\n });\n if (dict.index > 1 && groups !== 0) {\n view.push({\n type: \"bi.label\",\n cls: \"page-ellipsis\",\n text: \"\\u2026\"\n });\n }\n }\n\n // 输出当前页组\n dict.poor = Math.floor((groups - 1) / 2);\n dict.start = dict.index > 1 ? curr - dict.poor : 1;\n dict.end = dict.index > 1 ? (function () {\n var max = curr + (groups - dict.poor - 1);\n return max > pages ? pages : max;\n }()) : groups;\n if (dict.end - dict.start < groups - 1) { // 最后一组状态\n dict.start = dict.end - groups + 1;\n }\n var s = dict.start, e = dict.end;\n if (first && last && (dict.index > 1 && groups !== 0) && (pages > groups && dict.end < pages && groups !== 0)) {\n s++;\n e--;\n }\n for (; s <= e; s++) {\n if (s === curr) {\n view.push({\n text: s,\n value: s,\n selected: true\n });\n } else {\n view.push({\n text: s,\n value: s\n });\n }\n }\n\n // 总页数大于连续分页数,且当前组最大页小于总页,输出尾页\n if (((!o.dynamicShow && !o.dynamicShowFirstLast) || (pages > groups && dict.end < pages && groups !== 0)) && last) {\n if (pages > groups && dict.end < pages && groups !== 0) {\n view.push({\n type: \"bi.label\",\n cls: \"page-ellipsis\",\n text: \"\\u2026\"\n });\n }\n view.push({\n text: last,\n value: \"last\",\n disabled: !(pages > groups && dict.end < pages && groups !== 0)\n });\n }\n\n // 当前页不为尾页时,输出下一页\n dict.flow = !prev && groups === 0;\n if (((!o.dynamicShow && !o.dynamicShowPrevNext) && next) || (curr !== pages && next || dict.flow)) {\n view.push((function () {\n if (BI.isKey(next)) {\n if (pages === false) {\n return {text: next, value: \"next\", disabled: o.hasNext(curr) === false};\n }\n return (dict.flow && curr === pages)\n ?\n {text: next, value: \"next\", disabled: true}\n :\n {text: next, value: \"next\", disabled: !(curr !== pages && next || dict.flow)};\n }\n return BI.extend({\n disabled: pages === false ? o.hasNext(curr) === false : !(curr !== pages && next || dict.flow)\n }, next);\n\n }()));\n }\n\n this.button_group = BI.createWidget({\n type: \"bi.button_group\",\n element: this,\n items: BI.createItems(view, {\n cls: \"page-item bi-border bi-list-item-active\",\n height: 23,\n hgap: 10\n }),\n behaviors: o.behaviors,\n layouts: o.layouts\n });\n this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (self._lock === true) {\n return;\n }\n self._lock = true;\n self._debouce();\n if (type === BI.Events.CLICK) {\n var v = self.button_group.getValue()[0];\n switch (v) {\n case \"first\":\n self.currPage = 1;\n break;\n case \"last\":\n self.currPage = pages;\n break;\n case \"prev\":\n self.currPage--;\n break;\n case \"next\":\n self.currPage++;\n break;\n default:\n self.currPage = v;\n break;\n }\n o.jump.apply(self, [{\n pages: pages,\n curr: self.currPage\n }]);\n self._populate();\n self.fireEvent(BI.DetailPager.EVENT_CHANGE, obj);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.fireEvent(BI.DetailPager.EVENT_AFTER_POPULATE);\n },\n\n getCurrentPage: function () {\n return this.currPage;\n },\n\n setAllPages: function (pages) {\n this.options.pages = pages;\n },\n\n hasPrev: function (v) {\n v || (v = 1);\n var o = this.options;\n var pages = this.options.pages;\n return pages === false ? o.hasPrev(v) : v > 1;\n },\n\n hasNext: function (v) {\n v || (v = 1);\n var o = this.options;\n var pages = this.options.pages;\n return pages === false ? o.hasNext(v) : v < pages;\n },\n\n setValue: function (v) {\n var o = this.options;\n v = v || 0;\n v = v < 1 ? 1 : v;\n if (o.pages === false) {\n var lastPage = BI.result(o, \"lastPage\"), firstPage = 1;\n this.currPage = v > lastPage ? lastPage : ((firstPage = BI.result(o, \"firstPage\")), (v < firstPage ? firstPage : v));\n } else {\n v = v > o.pages ? o.pages : v;\n this.currPage = v;\n }\n this._populate();\n },\n\n getValue: function () {\n var val = this.button_group.getValue()[0];\n switch (val) {\n case \"prev\":\n return -1;\n case \"next\":\n return 1;\n case \"first\":\n return BI.MIN;\n case \"last\":\n return BI.MAX;\n default :\n return val;\n }\n },\n\n attr: function (key, value) {\n BI.DetailPager.superclass.attr.apply(this, arguments);\n if (key === \"curr\") {\n this.currPage = BI.result(this.options, \"curr\");\n }\n },\n\n populate: function () {\n this._populate();\n }\n});\nBI.DetailPager.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DetailPager.EVENT_AFTER_POPULATE = \"EVENT_AFTER_POPULATE\";\nBI.shortcut(\"bi.detail_pager\", BI.DetailPager);","/**\n * 分段控件使用的button\n *\n * Created by GUY on 2015/9/7.\n * @class BI.SegmentButton\n * @extends BI.BasicButton\n */\nBI.SegmentButton = BI.inherit(BI.BasicButton, {\n\n _defaultConfig: function () {\n var conf = BI.SegmentButton.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-segment-button bi-list-item-select\",\n shadow: true,\n readonly: true,\n hgap: 5\n });\n },\n\n _init: function () {\n BI.SegmentButton.superclass._init.apply(this, arguments);\n var opts = this.options, self = this;\n // if (BI.isNumber(opts.height) && BI.isNull(opts.lineHeight)) {\n // this.element.css({lineHeight : (opts.height - 2) + 'px'});\n // }\n this.text = BI.createWidget({\n type: \"bi.label\",\n element: this,\n textHeight: opts.height,\n whiteSpace: opts.whiteSpace,\n text: opts.text,\n value: opts.value,\n hgap: opts.hgap\n });\n },\n\n setSelected: function () {\n BI.SegmentButton.superclass.setSelected.apply(this, arguments);\n },\n\n setText: function (text) {\n BI.SegmentButton.superclass.setText.apply(this, arguments);\n this.text.setText(text);\n },\n\n destroy: function () {\n BI.SegmentButton.superclass.destroy.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.segment_button\", BI.SegmentButton);","/**\n * 单选按钮组\n *\n * Created by GUY on 2015/9/7.\n * @class BI.Segment\n * @extends BI.Widget\n */\nBI.Segment = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.Segment.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-segment\",\n items: [],\n height: 24\n });\n },\n _init: function () {\n BI.Segment.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.buttonGroup = BI.createWidget({\n element: this,\n type: \"bi.button_group\",\n value: o.value,\n items: BI.createItems(o.items, {\n type: \"bi.segment_button\",\n height: o.height - 2,\n whiteSpace: o.whiteSpace\n }),\n layout: [\n {\n type: \"bi.center\"\n }\n ]\n });\n this.buttonGroup.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.buttonGroup.on(BI.ButtonGroup.EVENT_CHANGE, function (value, obj) {\n self.fireEvent(BI.Segment.EVENT_CHANGE, value, obj);\n });\n },\n\n _setEnable: function (enable) {\n BI.Segment.superclass._setEnable.apply(this, arguments);\n if (enable === true) {\n this.element.removeClass(\"base-disabled disabled\");\n } else if (enable === false) {\n this.element.addClass(\"base-disabled disabled\");\n }\n },\n\n setValue: function (v) {\n this.buttonGroup.setValue(v);\n },\n\n setEnabledValue: function (v) {\n this.buttonGroup.setEnabledValue(v);\n },\n\n getValue: function () {\n return this.buttonGroup.getValue();\n }\n});\nBI.Segment.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.segment\", BI.Segment);","/**\n * guy\n * 复选导航条\n * Created by GUY on 2015/8/25.\n * @class BI.MultiSelectBar\n * @extends BI.BasicButton\n */\nBI.MultiSelectBar = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectBar.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-multi-select-bar\",\n height: 25,\n text: BI.i18nText(\"BI-Select_All\"),\n isAllCheckedBySelectedValue: BI.emptyFn,\n // 手动控制选中\n disableSelected: true,\n isHalfCheckedBySelectedValue: function (selectedValues) {\n return selectedValues.length > 0;\n },\n halfSelected: false,\n iconWrapperWidth: 26\n });\n },\n _init: function () {\n BI.MultiSelectBar.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var isSelect = o.selected === true;\n var isHalfSelect = !o.selected && o.halfSelected;\n this.checkbox = BI.createWidget({\n type: \"bi.checkbox\",\n stopPropagation: true,\n handler: function () {\n self.setSelected(self.isSelected());\n },\n selected: isSelect,\n invisible: isHalfSelect\n });\n this.half = BI.createWidget({\n type: \"bi.half_icon_button\",\n stopPropagation: true,\n handler: function () {\n self.setSelected(true);\n },\n invisible: isSelect || !isHalfSelect\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, self.isSelected(), self);\n });\n this.checkbox.on(BI.Checkbox.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE, self.isSelected(), self);\n });\n this.half.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.CLICK, self.isSelected(), self);\n });\n this.half.on(BI.HalfIconButton.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectBar.EVENT_CHANGE, self.isSelected(), self);\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n keyword: o.keyword,\n value: o.value,\n py: o.py\n });\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n width: o.iconWrapperWidth,\n el: {\n type: \"bi.center_adapt\",\n items: [this.checkbox, this.half]\n }\n }, {\n el: this.text\n }]\n });\n },\n\n _setSelected: function (v) {\n this.checkbox.setSelected(!!v);\n },\n\n // 自己手动控制选中\n beforeClick: function () {\n var isHalf = this.isHalfSelected(), isSelected = this.isSelected();\n if (isHalf === true) {\n this.setSelected(true);\n } else {\n this.setSelected(!isSelected);\n }\n },\n\n setSelected: function (v) {\n this.checkbox.setSelected(v);\n this.setHalfSelected(false);\n },\n\n setHalfSelected: function (b) {\n this.halfSelected = !!b;\n if (b === true) {\n this.checkbox.setSelected(false);\n this.half.visible();\n this.checkbox.invisible();\n } else {\n this.half.invisible();\n this.checkbox.visible();\n }\n },\n\n isHalfSelected: function () {\n return !this.isSelected() && !!this.halfSelected;\n },\n\n isSelected: function () {\n return this.checkbox.isSelected();\n },\n\n setValue: function (selectedValues) {\n BI.MultiSelectBar.superclass.setValue.apply(this, arguments);\n var isAllChecked = this.options.isAllCheckedBySelectedValue.apply(this, arguments);\n this._setSelected(isAllChecked);\n !isAllChecked && this.setHalfSelected(this.options.isHalfCheckedBySelectedValue.apply(this, arguments));\n },\n\n doClick: function () {\n BI.MultiSelectBar.superclass.doClick.apply(this, arguments);\n if(this.isValid()) {\n this.fireEvent(BI.MultiSelectBar.EVENT_CHANGE, this.isSelected(), this);\n }\n }\n});\nBI.MultiSelectBar.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_bar\", BI.MultiSelectBar);\n","/**\n * guy\n * 二级树\n * @class BI.LevelTree\n * @extends BI.Single\n */\nBI.LevelTree = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.LevelTree.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-level-tree\",\n el: {\n chooseType: 0\n },\n expander: {},\n items: [],\n value: \"\"\n });\n },\n\n _init: function () {\n BI.LevelTree.superclass._init.apply(this, arguments);\n\n this.initTree(this.options.items);\n },\n\n _formatItems: function (nodes, layer, pNode) {\n var self = this;\n BI.each(nodes, function (i, node) {\n var extend = {layer: layer};\n if (!BI.isKey(node.id)) {\n node.id = BI.UUID();\n }\n extend.pNode = pNode;\n if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) {\n extend.type = \"bi.mid_plus_group_node\";\n if (i === nodes.length - 1) {\n extend.type = \"bi.last_plus_group_node\";\n extend.isLastNode = true;\n }\n if (i === 0 && !pNode) {\n extend.type = \"bi.first_plus_group_node\"\n }\n if (i === 0 && i === nodes.length - 1) { // 根\n extend.type = \"bi.plus_group_node\";\n }\n BI.defaults(node, extend);\n self._formatItems(node.children, layer + 1, node);\n } else {\n extend.type = \"bi.mid_tree_leaf_item\";\n if (i === 0 && !pNode) {\n extend.type = \"bi.first_tree_leaf_item\"\n }\n if (i === nodes.length - 1) {\n extend.type = \"bi.last_tree_leaf_item\";\n }\n BI.defaults(node, extend);\n }\n });\n return nodes;\n },\n\n _assertId: function (sNodes) {\n BI.each(sNodes, function (i, node) {\n if (!BI.isKey(node.id)) {\n node.id = BI.UUID();\n }\n });\n },\n\n // 构造树结构,\n initTree: function (nodes) {\n var self = this, o = this.options;\n this.empty();\n this._assertId(nodes);\n this.tree = BI.createWidget({\n type: \"bi.custom_tree\",\n element: this,\n expander: BI.extend({\n el: {},\n popup: {\n type: \"bi.custom_tree\"\n }\n }, o.expander),\n\n items: this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0),\n value: o.value,\n\n el: BI.extend({\n type: \"bi.button_tree\",\n chooseType: 0,\n layouts: [{\n type: \"bi.vertical\"\n }]\n }, o.el)\n });\n this.tree.on(BI.Controller.EVENT_CHANGE, function (type, value, ob) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.LevelTree.EVENT_CHANGE, value, ob);\n }\n });\n },\n\n // 生成树方法\n stroke: function (nodes) {\n this.tree.stroke.apply(this.tree, arguments);\n },\n\n populate: function (items, keyword) {\n items = this._formatItems(BI.Tree.transformToTreeFormat(items), 0);\n this.tree.populate(items, keyword);\n },\n\n setValue: function (v) {\n this.tree.setValue(v);\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n getAllLeaves: function () {\n return this.tree.getAllLeaves();\n },\n\n getNodeById: function (id) {\n return this.tree.getNodeById(id);\n },\n\n getNodeByValue: function (id) {\n return this.tree.getNodeByValue(id);\n }\n});\nBI.LevelTree.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.level_tree\", BI.LevelTree);","/**\n * 文本输入框trigger\n *\n * Created by GUY on 2015/9/15.\n * @class BI.EditorTrigger\n * @extends BI.Trigger\n */\nBI.EditorTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4\n },\n\n _defaultConfig: function () {\n var conf = BI.EditorTrigger.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-editor-trigger bi-border\",\n height: 24,\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n allowBlank: false,\n watermark: \"\",\n errorText: \"\"\n });\n },\n\n _init: function () {\n this.options.height -= 2;\n BI.EditorTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.editor = BI.createWidget({\n type: \"bi.sign_editor\",\n height: o.height,\n value: o.value,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank,\n watermark: o.watermark,\n errorText: o.errorText,\n title: function () {\n return self.getValue();\n }\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_CHANGE, function () {\n self.fireEvent(BI.EditorTrigger.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_FOCUS, function () {\n self.fireEvent(BI.EditorTrigger.EVENT_FOCUS, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_EMPTY, function () {\n self.fireEvent(BI.EditorTrigger.EVENT_EMPTY, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_VALID, function () {\n self.fireEvent(BI.EditorTrigger.EVENT_VALID, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_ERROR, function () {\n self.fireEvent(BI.EditorTrigger.EVENT_ERROR, arguments);\n });\n\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [\n {\n el: this.editor\n }, {\n el: {\n type: \"bi.trigger_icon_button\",\n width: o.triggerWidth || o.height\n },\n width: o.triggerWidth || o.height\n }\n ]\n });\n },\n\n getValue: function () {\n return this.editor.getValue();\n },\n\n setValue: function (value) {\n this.editor.setValue(value);\n },\n\n setText: function (text) {\n this.editor.setState(text);\n }\n});\nBI.EditorTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.EditorTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.EditorTrigger.EVENT_EMPTY = \"EVENT_EMPTY\";\nBI.EditorTrigger.EVENT_VALID = \"EVENT_VALID\";\nBI.EditorTrigger.EVENT_ERROR = \"EVENT_ERROR\";\nBI.shortcut(\"bi.editor_trigger\", BI.EditorTrigger);\n","/**\n * 图标按钮trigger\n *\n * Created by GUY on 2015/10/8.\n * @class BI.IconTrigger\n * @extends BI.Trigger\n */\nBI.IconTrigger = BI.inherit(BI.Trigger, {\n\n _defaultConfig: function () {\n return BI.extend(BI.IconTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-icon-trigger\",\n extraCls: \"pull-down-font\",\n el: {},\n height: 24\n });\n },\n _init: function () {\n var o = this.options;\n BI.IconTrigger.superclass._init.apply(this, arguments);\n this.iconButton = BI.createWidget(o.el, {\n type: \"bi.trigger_icon_button\",\n element: this,\n width: o.width,\n height: o.height,\n extraCls: o.extraCls\n });\n }\n});\nBI.shortcut(\"bi.icon_trigger\", BI.IconTrigger);","/**\n * 文字trigger\n *\n * Created by GUY on 2015/9/15.\n * @class BI.IconTextTrigger\n * @extends BI.Trigger\n */\nBI.IconTextTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4\n },\n\n _defaultConfig: function () {\n var conf = BI.IconTextTrigger.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-trigger\",\n height: 24,\n iconHeight: null,\n iconWidth: null,\n textCls: \"\"\n });\n },\n\n _init: function () {\n BI.IconTextTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"select-text-label\" + (BI.isKey(o.textCls) ? (\" \" + o.textCls) : \"\"),\n textAlign: \"left\",\n height: o.height,\n text: o.text\n });\n this.trigerButton = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.triggerWidth || o.height\n });\n\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n ref: function (_ref) {\n self.wrapper = _ref;\n },\n items: [{\n el: {\n type: \"bi.icon_change_button\",\n cls: \"icon-combo-trigger-icon\",\n iconCls: o.iconCls,\n ref: function (_ref) {\n self.icon = _ref;\n },\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth,\n disableSelected: true\n },\n width: BI.isEmptyString(o.iconCls) ? 0 : (o.iconWrapperWidth || o.height)\n },\n {\n el: this.text,\n lgap: BI.isEmptyString(o.iconCls) ? 5 : 0\n }, {\n el: this.trigerButton,\n width: o.triggerWidth || o.height\n }\n ]\n });\n },\n\n setValue: function (value) {\n this.text.setValue(value);\n },\n\n setIcon: function (iconCls) {\n var o = this.options;\n this.icon.setIcon(iconCls);\n var iconItem = this.wrapper.attr(\"items\")[0];\n var textItem = this.wrapper.attr(\"items\")[1];\n if(BI.isNull(iconCls) || BI.isEmptyString(iconCls)) {\n if(iconItem.width !== 0) {\n iconItem.width = 0;\n textItem.lgap = 5;\n this.wrapper.resize();\n }\n }else{\n if(iconItem.width !== (o.iconWrapperWidth || o.height)) {\n iconItem.width = (o.iconWrapperWidth || o.height);\n textItem.lgap = 0;\n this.wrapper.resize();\n }\n }\n },\n\n setTextCls: function(cls) {\n var o = this.options;\n var oldCls = o.textCls;\n o.textCls = cls;\n this.text.element.removeClass(oldCls).addClass(cls);\n },\n\n setText: function (text) {\n this.text.setText(text);\n }\n});\nBI.shortcut(\"bi.icon_text_trigger\", BI.IconTextTrigger);","/**\n * Created by Windy on 2017/12/12.\n */\nBI.SelectIconTextTrigger = BI.inherit(BI.Trigger, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SelectIconTextTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-select-text-trigger bi-border\",\n height: 24,\n iconHeight: null,\n iconWidth: null,\n iconCls: \"\"\n });\n },\n\n _init: function () {\n this.options.height -= 2;\n BI.SelectIconTextTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var obj = this._digist(o.value, o.items);\n this.trigger = BI.createWidget({\n type: \"bi.icon_text_trigger\",\n element: this,\n text: obj.text,\n textCls: obj.textCls,\n iconCls: obj.iconCls,\n height: o.height,\n iconHeight: o.iconHeight,\n iconWidth: o.iconWidth,\n iconWrapperWidth: o.iconWrapperWidth\n });\n },\n\n _digist: function (vals, items) {\n var o = this.options;\n vals = BI.isArray(vals) ? vals : [vals];\n var result;\n var formatItems = BI.Tree.transformToArrayFormat(items);\n BI.any(formatItems, function (i, item) {\n if (BI.deepContains(vals, item.value)) {\n result = {\n text: item.text || item.value,\n iconCls: item.iconCls\n };\n return true;\n }\n });\n\n if (BI.isNotNull(result)) {\n return {\n text: result.text,\n textCls: \"\",\n iconCls: result.iconCls\n };\n } else {\n return {\n text: BI.isFunction(o.text) ? o.text() : o.text,\n textCls: \"bi-water-mark\",\n iconCls: o.iconCls\n };\n }\n },\n\n setValue: function (vals) {\n var obj = this._digist(vals, this.options.items);\n this.trigger.setText(obj.text);\n this.trigger.setIcon(obj.iconCls);\n this.trigger.setTextCls(obj.textCls);\n },\n\n populate: function (items) {\n this.options.items = items;\n }\n});\nBI.shortcut(\"bi.select_icon_text_trigger\", BI.SelectIconTextTrigger);","/**\n * 文字trigger\n *\n * Created by GUY on 2015/9/15.\n * @class BI.TextTrigger\n * @extends BI.Trigger\n */\nBI.TextTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4\n },\n\n _defaultConfig: function () {\n var conf = BI.TextTrigger.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-trigger\",\n height: 24,\n textCls: \"\"\n });\n },\n\n _init: function () {\n BI.TextTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"select-text-label\" + (BI.isKey(o.textCls) ? (\" \" + o.textCls) : \"\"),\n textAlign: \"left\",\n height: o.height,\n text: o.text,\n title: function () {\n return self.text.getText();\n },\n tipType: o.tipType,\n warningTitle: o.warningTitle,\n hgap: c.hgap,\n readonly: o.readonly\n });\n this.trigerButton = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.triggerWidth || o.height\n });\n\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [\n {\n el: this.text\n }, {\n el: this.trigerButton,\n width: o.triggerWidth || o.height\n }\n ]\n });\n },\n\n setTextCls: function(cls) {\n var o = this.options;\n var oldCls = o.textCls;\n o.textCls = cls;\n this.text.element.removeClass(oldCls).addClass(cls);\n },\n\n setText: function (text) {\n this.text.setText(text);\n },\n\n setTipType: function (v) {\n this.text.options.tipType = v;\n }\n});\nBI.shortcut(\"bi.text_trigger\", BI.TextTrigger);\n","/**\n * 选择字段trigger\n *\n * Created by GUY on 2015/9/15.\n * @class BI.SelectTextTrigger\n * @extends BI.Trigger\n */\nBI.SelectTextTrigger = BI.inherit(BI.Trigger, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SelectTextTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-select-text-trigger bi-border bi-focus-shadow\",\n height: 24\n });\n },\n\n _init: function () {\n this.options.height -= 2;\n BI.SelectTextTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var obj = this._digest(o.value, o.items);\n this.trigger = BI.createWidget({\n type: \"bi.text_trigger\",\n element: this,\n height: o.height,\n readonly: o.readonly,\n text: obj.text,\n textCls: obj.textCls,\n tipType: o.tipType,\n warningTitle: o.warningTitle\n });\n },\n\n _digest: function(vals, items){\n var o = this.options;\n vals = BI.isArray(vals) ? vals : [vals];\n var result = [];\n var formatItems = BI.Tree.transformToArrayFormat(items);\n BI.each(formatItems, function (i, item) {\n if (BI.deepContains(vals, item.value) && !BI.contains(result, item.text || item.value)) {\n result.push(item.text || item.value);\n }\n });\n\n if (result.length > 0) {\n return {\n textCls: \"\",\n text: result.join(\",\")\n }\n } else {\n return {\n textCls: \"bi-water-mark\",\n text: BI.isFunction(o.text) ? o.text() : o.text\n }\n }\n },\n\n setValue: function (vals) {\n var formatValue = this._digest(vals, this.options.items);\n this.trigger.setTextCls(formatValue.textCls);\n this.trigger.setText(formatValue.text);\n },\n\n setTipType: function (v) {\n this.trigger.setTipType(v);\n },\n\n populate: function (items) {\n this.options.items = items;\n }\n});\nBI.shortcut(\"bi.select_text_trigger\", BI.SelectTextTrigger);\n","/**\n * 选择字段trigger小一号的\n *\n * @class BI.SmallSelectTextTrigger\n * @extends BI.Trigger\n */\nBI.SmallSelectTextTrigger = BI.inherit(BI.Trigger, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SmallSelectTextTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-small-select-text-trigger bi-border\",\n height: 20\n });\n },\n\n _init: function () {\n this.options.height -= 2;\n BI.SmallSelectTextTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var obj = this._digest(o.value, o.items);\n this.trigger = BI.createWidget({\n type: \"bi.small_text_trigger\",\n element: this,\n height: o.height - 2,\n text: obj.text,\n cls: obj.cls\n });\n },\n\n _digest: function(vals, items){\n var o = this.options;\n vals = BI.isArray(vals) ? vals : [vals];\n var result = [];\n var formatItems = BI.Tree.transformToArrayFormat(items);\n BI.each(formatItems, function (i, item) {\n if (BI.deepContains(vals, item.value) && !BI.contains(result, item.text || item.value)) {\n result.push(item.text || item.value);\n }\n });\n\n if (result.length > 0) {\n return {\n cls: \"\",\n text: result.join(\",\")\n }\n } else {\n return {\n cls: \"bi-water-mark\",\n text: o.text\n }\n }\n },\n\n setValue: function (vals) {\n var formatValue = this._digest(vals, this.options.items);\n this.trigger.element.removeClass(\"bi-water-mark\").addClass(formatValue.cls);\n this.trigger.setText(formatValue.text);\n },\n\n populate: function (items) {\n this.options.items = items;\n }\n});\nBI.shortcut(\"bi.small_select_text_trigger\", BI.SmallSelectTextTrigger);","/**\n * 文字trigger(右边小三角小一号的) ==\n *\n * @class BI.SmallTextTrigger\n * @extends BI.Trigger\n */\nBI.SmallTextTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4\n },\n\n _defaultConfig: function () {\n var conf = BI.SmallTextTrigger.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-text-trigger\",\n height: 20\n });\n },\n\n _init: function () {\n BI.SmallTextTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n height: o.height,\n text: o.text,\n hgap: c.hgap\n });\n this.trigerButton = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.triggerWidth || o.height\n });\n\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [\n {\n el: this.text\n }, {\n el: this.trigerButton,\n width: o.triggerWidth || o.height\n }\n ]\n });\n },\n\n setValue: function (value) {\n this.text.setValue(value);\n },\n\n setText: function (text) {\n this.text.setText(text);\n }\n});\nBI.shortcut(\"bi.small_text_trigger\", BI.SmallTextTrigger);","/**\n * 日期控件中的月份下拉框\n *\n * Created by GUY on 2015/9/7.\n * @class BI.MonthDateCombo\n * @extends BI.Trigger\n */\nBI.MonthDateCombo = BI.inherit(BI.Trigger, {\n _defaultConfig: function () {\n return BI.extend( BI.MonthDateCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-month-combo\",\n height: 24,\n container: null\n });\n },\n _init: function () {\n BI.MonthDateCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.trigger = BI.createWidget({\n type: \"bi.date_triangle_trigger\"\n });\n\n this.popup = BI.createWidget({\n type: \"bi.month_popup\",\n behaviors: o.behaviors\n });\n\n this.popup.on(BI.YearPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n });\n\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n offsetStyle: \"center\",\n container: o.container,\n element: this,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: this.trigger,\n popup: {\n minWidth: 85,\n stopPropagation: false,\n el: this.popup\n }\n });\n this.combo.on(BI.Combo.EVENT_CHANGE, function () {\n self.combo.hideView();\n self.fireEvent(BI.MonthDateCombo.EVENT_CHANGE);\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.doBehavior();\n });\n },\n\n setValue: function (v) {\n this.trigger.setValue(v);\n this.popup.setValue(v);\n },\n\n getValue: function () {\n return this.popup.getValue();\n }\n});\nBI.MonthDateCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.month_date_combo\", BI.MonthDateCombo);","/**\n * 年份下拉框\n *\n * Created by GUY on 2015/9/7.\n * @class BI.YearDateCombo\n * @extends BI.Trigger\n */\nBI.YearDateCombo = BI.inherit(BI.Trigger, {\n _defaultConfig: function () {\n return BI.extend( BI.YearDateCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-year-combo\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n behaviors: {},\n height: 24,\n container: null\n });\n },\n _init: function () {\n BI.YearDateCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.trigger = BI.createWidget({\n type: \"bi.date_triangle_trigger\"\n });\n\n this.popup = BI.createWidget({\n type: \"bi.year_popup\",\n behaviors: o.behaviors,\n min: o.min,\n max: o.max\n });\n\n this.popup.on(BI.YearPopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.YearDateCombo.EVENT_CHANGE);\n });\n\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n offsetStyle: \"center\",\n element: this,\n container: o.container,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: this.trigger,\n popup: {\n minWidth: 100,\n stopPropagation: false,\n el: this.popup\n }\n });\n this.combo.on(BI.Combo.EVENT_CHANGE, function () {\n self.fireEvent(BI.YearDateCombo.EVENT_CHANGE);\n });\n // BI-22551 popup未初始化传入的behavior无效\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.doBehavior();\n });\n },\n\n setMinDate: function (minDate) {\n this.popup.setMinDate(minDate);\n },\n\n setMaxDate: function (maxDate) {\n this.popup.setMaxDate(maxDate);\n },\n\n setValue: function (v) {\n this.trigger.setValue(v);\n this.popup.setValue(v);\n },\n\n getValue: function () {\n return this.popup.getValue();\n }\n});\nBI.YearDateCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.year_date_combo\", BI.YearDateCombo);\n","/**\n * Created by GUY on 2015/9/7.\n * @class BI.DatePicker\n * @extends BI.Widget\n */\nBI.DatePicker = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.DatePicker.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-date-picker\",\n height: 40,\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\" // 最大日期\n });\n },\n\n _init: function () {\n BI.DatePicker.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this._year = BI.getDate().getFullYear();\n this._month = BI.getDate().getMonth() + 1;\n this.left = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"pre-page-h-font\",\n width: 24,\n height: 24\n });\n this.left.on(BI.IconButton.EVENT_CHANGE, function () {\n if (self._month === 1) {\n self.setValue({\n year: self.year.getValue() - 1,\n month: 12\n });\n } else {\n self.setValue({\n year: self.year.getValue(),\n month: self.month.getValue() - 1\n });\n }\n self.fireEvent(BI.DatePicker.EVENT_CHANGE);\n self._checkLeftValid();\n self._checkRightValid();\n });\n\n this.right = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"next-page-h-font\",\n width: 24,\n height: 24\n });\n\n this.right.on(BI.IconButton.EVENT_CHANGE, function () {\n if (self._month === 12) {\n self.setValue({\n year: self.year.getValue() + 1,\n month: 1\n });\n } else {\n self.setValue({\n year: self.year.getValue(),\n month: self.month.getValue() + 1\n });\n }\n self.fireEvent(BI.DatePicker.EVENT_CHANGE);\n self._checkLeftValid();\n self._checkRightValid();\n });\n\n this.year = BI.createWidget({\n type: \"bi.year_date_combo\",\n behaviors: o.behaviors,\n min: o.min,\n max: o.max\n });\n this.year.on(BI.YearDateCombo.EVENT_CHANGE, function () {\n self.setValue({\n year: self.year.getValue(),\n month: self.month.getValue()\n });\n self.fireEvent(BI.DatePicker.EVENT_CHANGE);\n });\n this.month = BI.createWidget({\n type: \"bi.month_date_combo\",\n behaviors: o.behaviors\n });\n this.month.on(BI.MonthDateCombo.EVENT_CHANGE, function () {\n self.setValue({\n year: self.year.getValue(),\n month: self.month.getValue()\n });\n self.fireEvent(BI.DatePicker.EVENT_CHANGE);\n });\n\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n el: {\n type: \"bi.center_adapt\",\n items: [this.left]\n },\n width: 24\n }, {\n type: \"bi.center_adapt\",\n items: [{\n el: {\n type: \"bi.horizontal\",\n width: 120,\n rgap: 10,\n items: [{\n el: this.year,\n lgap: 10\n }, this.month]\n }\n }]\n }, {\n el: {\n type: \"bi.center_adapt\",\n items: [this.right]\n },\n width: 24\n }]\n });\n this.setValue({\n year: this._year,\n month: this._month\n });\n },\n\n _checkLeftValid: function () {\n var o = this.options;\n var valid = !(this._month === 1 && this._year === BI.parseDateTime(o.min, \"%Y-%X-%d\").getFullYear());\n this.left.setEnable(valid);\n return valid;\n },\n\n _checkRightValid: function () {\n var o = this.options;\n var valid = !(this._month === 12 && this._year === BI.parseDateTime(o.max, \"%Y-%X-%d\").getFullYear());\n this.right.setEnable(valid);\n return valid;\n },\n\n setMinDate: function (minDate) {\n this.year.setMinDate(minDate);\n },\n\n setMaxDate: function (maxDate) {\n this.year.setMaxDate(maxDate);\n },\n\n setValue: function (ob) {\n this._year = BI.parseInt(ob.year);\n this._month = BI.parseInt(ob.month);\n this.year.setValue(ob.year);\n this.month.setValue(ob.month);\n this._checkLeftValid();\n this._checkRightValid();\n },\n\n getValue: function () {\n return {\n year: this.year.getValue(),\n month: this.month.getValue()\n };\n }\n});\nBI.DatePicker.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.date_picker\", BI.DatePicker);","/**\n * Created by GUY on 2015/9/7.\n * @class BI.YearPicker\n * @extends BI.Widget\n */\nBI.YearPicker = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.YearPicker.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-year-picker\",\n behaviors: {},\n height: 40,\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\" // 最大日期\n });\n },\n\n _init: function () {\n BI.YearPicker.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this._year = BI.getDate().getFullYear();\n this.left = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"pre-page-h-font\",\n width: 25,\n height: 25\n });\n this.left.on(BI.IconButton.EVENT_CHANGE, function () {\n self.setValue(self.year.getValue() - 1);\n self.fireEvent(BI.YearPicker.EVENT_CHANGE);\n self._checkLeftValid();\n self._checkRightValid();\n });\n\n this.right = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"next-page-h-font\",\n width: 25,\n height: 25\n });\n\n this.right.on(BI.IconButton.EVENT_CHANGE, function () {\n self.setValue(self.year.getValue() + 1);\n self.fireEvent(BI.YearPicker.EVENT_CHANGE);\n self._checkLeftValid();\n self._checkRightValid();\n });\n\n this.year = BI.createWidget({\n type: \"bi.year_date_combo\",\n min: o.min,\n behaviors: o.behaviors,\n max: o.max,\n width: 50\n });\n this.year.on(BI.YearDateCombo.EVENT_CHANGE, function () {\n self.setValue(self.year.getValue());\n self.fireEvent(BI.YearPicker.EVENT_CHANGE);\n });\n\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n el: {\n type: \"bi.center_adapt\",\n items: [this.left]\n },\n width: 25\n }, {\n type: \"bi.center_adapt\",\n items: [{\n el: this.year\n }]\n }, {\n el: {\n type: \"bi.center_adapt\",\n items: [this.right]\n },\n width: 25\n }]\n });\n this.setValue({\n year: this._year\n });\n },\n\n _checkLeftValid: function () {\n var o = this.options;\n var valid = !(this._year === BI.parseDateTime(o.min, \"%Y-%X-%d\").getFullYear());\n this.left.setEnable(valid);\n return valid;\n },\n\n _checkRightValid: function () {\n var o = this.options;\n var valid = !(this._year === BI.parseDateTime(o.max, \"%Y-%X-%d\").getFullYear());\n this.right.setEnable(valid);\n return valid;\n },\n\n setMinDate: function (minDate) {\n this.options.min = minDate;\n this.year.setMinDate(minDate);\n this._checkLeftValid();\n this._checkRightValid();\n },\n\n setMaxDate: function (maxDate) {\n this.options.max = maxDate;\n this.year.setMaxDate(maxDate);\n this._checkLeftValid();\n this._checkRightValid();\n },\n\n\n setValue: function (v) {\n this._year = v;\n this.year.setValue(v);\n this._checkLeftValid();\n this._checkRightValid();\n },\n\n getValue: function () {\n return this.year.getValue();\n }\n});\nBI.YearPicker.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.year_picker\", BI.YearPicker);\n","/**\n * Created by GUY on 2015/9/7.\n * @class BI.DateCalendarPopup\n * @extends BI.Widget\n */\nBI.DateCalendarPopup = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.DateCalendarPopup.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-date-calendar-popup\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n selectedTime: null\n });\n },\n\n _createNav: function (v) {\n var date = BI.Calendar.getDateJSONByPage(v);\n var calendar = BI.createWidget({\n type: \"bi.calendar\",\n logic: {\n dynamic: true\n },\n min: this.options.min,\n max: this.options.max,\n year: date.year,\n month: date.month,\n // BI-45616 此处为确定当前应该展示哪个年月对应的Calendar, day不是关键数据, 给1号就可\n day: 1\n });\n return calendar;\n },\n\n _init: function () {\n BI.DateCalendarPopup.superclass._init.apply(this, arguments);\n var self = this,\n o = this.options;\n this.today = BI.getDate();\n this._year = this.today.getFullYear();\n this._month = this.today.getMonth() + 1;\n this._day = this.today.getDate();\n\n this.selectedTime = o.selectedTime || {\n year: this._year,\n month: this._month,\n day: this._day\n };\n this.datePicker = BI.createWidget({\n type: \"bi.date_picker\",\n behaviors: o.behaviors,\n min: o.min,\n max: o.max\n });\n\n this.calendar = BI.createWidget({\n direction: \"top\",\n logic: {\n dynamic: true\n },\n type: \"bi.navigation\",\n tab: this.datePicker,\n cardCreator: BI.bind(this._createNav, this),\n\n afterCardCreated: function () {\n\n },\n\n afterCardShow: function () {\n this.setValue(self.selectedTime);\n }\n });\n\n this.datePicker.on(BI.DatePicker.EVENT_CHANGE, function () {\n self.selectedTime = self.datePicker.getValue();\n self.selectedTime.day = 1;\n self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime));\n });\n\n this.calendar.on(BI.Navigation.EVENT_CHANGE, function () {\n self.selectedTime = self.calendar.getValue();\n self.setValue(self.selectedTime);\n self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE);\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.calendar,\n left: 5,\n right: 5\n }, {\n el: {\n type: \"bi.layout\",\n cls: \"bi-split-top\"\n },\n height: 1,\n top: 40,\n left: 0,\n right: 0\n }]\n });\n },\n\n _checkMin: function () {\n var calendar = this.calendar.getSelectedCard();\n if (BI.isNotNull(calendar)) {\n calendar.setMinDate(this.options.min);\n }\n },\n\n _checkMax: function () {\n var calendar = this.calendar.getSelectedCard();\n if (BI.isNotNull(calendar)) {\n calendar.setMaxDate(this.options.max);\n }\n },\n\n setMinDate: function (minDate) {\n if (BI.isNotEmptyString(this.options.min)) {\n this.options.min = minDate;\n this.datePicker.setMinDate(minDate);\n this._checkMin();\n }\n },\n\n setMaxDate: function (maxDate) {\n if (BI.isNotEmptyString(this.options.max)) {\n this.options.max = maxDate;\n this.datePicker.setMaxDate(maxDate);\n this._checkMax();\n }\n },\n\n setValue: function (timeOb) {\n this.datePicker.setValue(timeOb);\n this.calendar.setSelect(BI.Calendar.getPageByDateJSON(timeOb));\n this.calendar.setValue(timeOb);\n this.selectedTime = timeOb;\n },\n\n getValue: function () {\n return this.selectedTime;\n }\n});\nBI.DateCalendarPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.date_calendar_popup\", BI.DateCalendarPopup);","/**\n * 月份展示面板\n *\n * Created by GUY on 2015/9/2.\n * @class BI.MonthPopup\n * @extends BI.Trigger\n */\nBI.MonthPopup = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MonthPopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-month-popup\",\n behaviors: {}\n });\n },\n\n _init: function () {\n BI.MonthPopup.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n // 纵向排列月\n var month = [1, 7, 2, 8, 3, 9, 4, 10, 5, 11, 6, 12];\n var items = [];\n items.push(month.slice(0, 2));\n items.push(month.slice(2, 4));\n items.push(month.slice(4, 6));\n items.push(month.slice(6, 8));\n items.push(month.slice(8, 10));\n items.push(month.slice(10, 12));\n items = BI.map(items, function (i, item) {\n return BI.map(item, function (j, td) {\n return {\n type: \"bi.text_item\",\n cls: \"bi-list-item-select\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n once: false,\n forceSelected: true,\n height: 23,\n width: 38,\n value: td,\n text: td\n };\n });\n });\n\n this.month = BI.createWidget({\n type: \"bi.button_group\",\n element: this,\n behaviors: o.behaviors,\n items: BI.createItems(items, {}),\n layouts: [BI.LogicFactory.createLogic(\"table\", BI.extend({\n dynamic: true\n }, {\n columns: 2,\n rows: 6,\n columnSize: [1 / 2, 1 / 2],\n rowSize: 25\n })), {\n type: \"bi.center_adapt\",\n vgap: 1,\n hgap: 2\n }],\n value: o.value\n });\n\n this.month.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.MonthPopup.EVENT_CHANGE);\n }\n });\n },\n\n getValue: function () {\n return this.month.getValue()[0];\n },\n\n setValue: function (v) {\n v = BI.parseInt(v);\n this.month.setValue([v]);\n }\n});\nBI.MonthPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.month_popup\", BI.MonthPopup);","/**\n * 年份展示面板\n *\n * Created by GUY on 2015/9/2.\n * @class BI.YearPopup\n * @extends BI.Trigger\n */\nBI.YearPopup = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.YearPopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-year-popup\",\n behaviors: {},\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\" // 最大日期\n });\n },\n\n _createYearCalendar: function (v) {\n var o = this.options, y = this._year;\n\n var calendar = BI.createWidget({\n type: \"bi.year_calendar\",\n behaviors: o.behaviors,\n min: o.min,\n max: o.max,\n logic: {\n dynamic: true\n },\n year: y + v * 12\n });\n calendar.setValue(this._year);\n return calendar;\n },\n\n _init: function () {\n BI.YearPopup.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.selectedYear = this._year = BI.getDate().getFullYear();\n\n this.backBtn = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"pre-page-h-font\",\n width: 24,\n height: 24,\n value: -1\n });\n\n this.preBtn = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"next-page-h-font\",\n width: 24,\n height: 24,\n value: 1\n });\n\n this.navigation = BI.createWidget({\n type: \"bi.navigation\",\n element: this,\n single: true,\n logic: {\n dynamic: true\n },\n tab: {\n cls: \"year-popup-navigation bi-high-light bi-split-top\",\n height: 24,\n items: [this.backBtn, this.preBtn]\n },\n cardCreator: BI.bind(this._createYearCalendar, this),\n\n afterCardShow: function () {\n this.setValue(self.selectedYear);\n var calendar = this.getSelectedCard();\n calendar && self.backBtn.setEnable(!calendar.isFrontYear());\n calendar && self.preBtn.setEnable(!calendar.isFinalYear());\n }\n });\n\n this.navigation.on(BI.Navigation.EVENT_CHANGE, function () {\n self.selectedYear = this.getValue();\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.fireEvent(BI.YearPopup.EVENT_CHANGE, self.selectedYear);\n });\n\n if(BI.isKey(o.value)){\n this.setValue(o.value);\n }\n },\n\n _checkMin: function () {\n var calendar = this.navigation.getSelectedCard();\n if (BI.isNotNull(calendar)) {\n calendar.setMinDate(this.options.min);\n this.backBtn.setEnable(!calendar.isFrontYear());\n this.preBtn.setEnable(!calendar.isFinalYear());\n }\n },\n\n _checkMax: function () {\n var calendar = this.navigation.getSelectedCard();\n if (BI.isNotNull(calendar)) {\n calendar.setMaxDate(this.options.max);\n this.backBtn.setEnable(!calendar.isFrontYear());\n this.preBtn.setEnable(!calendar.isFinalYear());\n }\n },\n\n setMinDate: function (minDate) {\n if (BI.isNotEmptyString(this.options.min)) {\n this.options.min = minDate;\n this._checkMin();\n }\n },\n\n setMaxDate: function (maxDate) {\n if (BI.isNotEmptyString(this.options.max)) {\n this.options.max = maxDate;\n this._checkMax();\n }\n },\n\n getValue: function () {\n return this.selectedYear;\n },\n\n setValue: function (v) {\n var o = this.options;\n v = BI.parseInt(v);\n // 对于年控件来说,只要传入的minDate和maxDate的year区间包含v就是合法的\n var startDate = BI.parseDateTime(o.min, \"%Y-%X-%d\");\n var endDate = BI.parseDateTime(o.max, \"%Y-%X-%d\");\n if (BI.checkDateVoid(v, 1, 1, BI.print(BI.getDate(startDate.getFullYear(), 0, 1), \"%Y-%X-%d\"), BI.print(BI.getDate(endDate.getFullYear(), 0, 1), \"%Y-%X-%d\"))[0]) {\n v = BI.getDate().getFullYear();\n this.selectedYear = \"\";\n this.navigation.setSelect(BI.YearCalendar.getPageByYear(v));\n this.navigation.setValue(\"\");\n } else {\n this.selectedYear = v;\n this.navigation.setSelect(BI.YearCalendar.getPageByYear(v));\n this.navigation.setValue(v);\n }\n }\n});\nBI.YearPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.year_popup\", BI.YearPopup);","/**\n * 日期控件中的年份或月份trigger\n *\n * Created by GUY on 2015/9/7.\n * @class BI.DateTriangleTrigger\n * @extends BI.Trigger\n */\nBI.DateTriangleTrigger = BI.inherit(BI.Trigger, {\n _const: {\n height: 24,\n iconWidth: 12,\n iconHeight: 12\n },\n\n _defaultConfig: function () {\n return BI.extend( BI.DateTriangleTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-date-triangle-trigger pull-down-ha-font cursor-pointer\",\n height: 24\n });\n },\n _init: function () {\n BI.DateTriangleTrigger.superclass._init.apply(this, arguments);\n var o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"right\",\n text: o.text,\n value: o.value,\n height: c.height\n });\n\n BI.createWidget({\n type: \"bi.vertical_adapt\",\n element: this,\n items: [{\n el: this.text,\n rgap: 5\n }, {\n type: \"bi.icon_label\",\n width: 16\n }]\n });\n },\n\n setValue: function (v) {\n this.text.setValue(v);\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function (v) {\n this.text.setText(v);\n },\n\n getText: function () {\n return this.item.getText();\n },\n\n getKey: function () {\n\n }\n});\nBI.shortcut(\"bi.date_triangle_trigger\", BI.DateTriangleTrigger);","/**\n * Created by zcf on 2017/2/20.\n */\nBI.StaticDatePaneCard = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.StaticDatePaneCard.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-date-pane\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n selectedTime: null\n });\n },\n _init: function () {\n BI.StaticDatePaneCard.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.today = BI.getDate();\n this._year = this.today.getFullYear();\n this._month = this.today.getMonth() + 1;\n\n this.selectedTime = o.selectedTime || {\n year: this._year,\n month: this._month\n };\n\n this.datePicker = BI.createWidget({\n type: \"bi.date_picker\",\n behaviors: o.behaviors,\n min: o.min,\n max: o.max\n });\n this.datePicker.on(BI.DatePicker.EVENT_CHANGE, function () {\n var value = self.datePicker.getValue();\n var monthDay = BI.getMonthDays(BI.getDate(value.year, value.month - 1, 1));\n var day = self.selectedTime.day || 0;\n if (day > monthDay) {\n day = monthDay;\n }\n self.selectedTime = {\n year: value.year,\n month: value.month\n };\n day !== 0 && (self.selectedTime.day = day);\n self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime));\n self.calendar.setValue(self.selectedTime);\n day !== 0 && self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE);\n });\n\n this.calendar = BI.createWidget({\n direction: \"custom\",\n // logic: {\n // dynamic: false\n // },\n type: \"bi.navigation\",\n tab: this.datePicker,\n cardCreator: BI.bind(this._createNav, this)\n });\n this.calendar.on(BI.Navigation.EVENT_CHANGE, function () {\n self.selectedTime = self.calendar.getValue();\n self.calendar.empty();\n self.setValue(self.selectedTime);\n self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE);\n });\n this.setValue(o.selectedTime);\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.datePicker,\n height: 40\n }, this.calendar],\n hgap: 10\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.layout\",\n cls: \"bi-split-top\"\n },\n height: 1,\n top: 40,\n left: 0,\n right: 0\n }]\n });\n\n },\n\n _createNav: function (v) {\n var date = BI.Calendar.getDateJSONByPage(v);\n var calendar = BI.createWidget({\n type: \"bi.calendar\",\n logic: {\n dynamic: false\n },\n min: this.options.min,\n max: this.options.max,\n year: date.year,\n month: date.month,\n day: this.selectedTime.day\n });\n return calendar;\n },\n\n _getNewCurrentDate: function () {\n var today = BI.getDate();\n return {\n year: today.getFullYear(),\n month: today.getMonth() + 1\n };\n },\n\n _setCalenderValue: function (date) {\n this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date));\n this.calendar.setValue(date);\n this.selectedTime = date;\n },\n\n _setDatePicker: function (timeOb) {\n if (BI.isNull(timeOb) || BI.isNull(timeOb.year) || BI.isNull(timeOb.month)) {\n this.datePicker.setValue(this._getNewCurrentDate());\n } else {\n this.datePicker.setValue(timeOb);\n }\n },\n\n _setCalendar: function (timeOb) {\n if (BI.isNull(timeOb) || BI.isNull(timeOb.day)) {\n this.calendar.empty();\n this._setCalenderValue(this._getNewCurrentDate());\n } else {\n this._setCalenderValue(timeOb);\n }\n },\n\n setValue: function (timeOb) {\n this._setDatePicker(timeOb);\n this._setCalendar(timeOb);\n },\n\n getValue: function () {\n return this.selectedTime;\n }\n\n});\nBI.shortcut(\"bi.static_date_pane_card\", BI.StaticDatePaneCard);","BI.DynamicDatePane = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-dynamic-date-pane\"\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.vtape\",\n items: [{\n el: {\n type: \"bi.linear_segment\",\n cls: \"bi-split-bottom\",\n height: 30,\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Multi_Date_YMD\"),\n value: BI.DynamicDatePane.Static\n }, {\n text: BI.i18nText(\"BI-Basic_Dynamic_Title\"),\n value: BI.DynamicDatePane.Dynamic\n }], {\n textAlign: \"center\"\n }),\n listeners: [{\n eventName: BI.ButtonGroup.EVENT_CHANGE,\n action: function () {\n var value = this.getValue()[0];\n self.dateTab.setSelect(value);\n switch (value) {\n case BI.DynamicDatePane.Static:\n var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());\n self.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n });\n break;\n case BI.DynamicDatePane.Dynamic:\n self.dynamicPane.setValue({\n year: 0\n });\n break;\n default:\n break;\n }\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }],\n ref: function () {\n self.switcher = this;\n }\n },\n height: 30\n }, {\n type: \"bi.tab\",\n ref: function () {\n self.dateTab = this;\n },\n showIndex: BI.DynamicDatePane.Static,\n cardCreator: function (v) {\n switch (v) {\n case BI.DynamicDatePane.Static:\n return {\n type: \"bi.static_date_pane_card\",\n behaviors: o.behaviors,\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }],\n ref: function () {\n self.ymd = this;\n }\n };\n case BI.DynamicDatePane.Dynamic:\n default:\n return {\n type: \"bi.dynamic_date_card\",\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n if(self._checkValue(self.getValue())) {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }\n }],\n ref: function () {\n self.dynamicPane = this;\n }\n };\n }\n }\n }]\n };\n },\n\n mounted: function () {\n this.setValue(this.options.value);\n },\n\n _checkValueValid: function (value) {\n return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value);\n },\n\n _checkValue: function (v) {\n switch (v.type) {\n case BI.DynamicDateCombo.Dynamic:\n return BI.isNotEmptyObject(v.value);\n case BI.DynamicDateCombo.Static:\n default:\n return true;\n }\n },\n\n setValue: function (v) {\n v = v || {};\n var type = v.type || BI.DynamicDateCombo.Static;\n var value = v.value || v;\n this.switcher.setValue(type);\n this.dateTab.setSelect(type);\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n this.dynamicPane.setValue(value);\n break;\n case BI.DynamicDateCombo.Static:\n default:\n if (this._checkValueValid(value)) {\n var date = BI.getDate();\n this.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1\n });\n } else {\n this.ymd.setValue(value);\n }\n break;\n }\n },\n\n getValue: function () {\n return {\n type: this.dateTab.getSelect(),\n value: this.dateTab.getValue()\n };\n }\n});\nBI.shortcut(\"bi.dynamic_date_pane\", BI.DynamicDatePane);\n\nBI.extend(BI.DynamicDatePane, {\n Static: 1,\n Dynamic: 2\n});","/**\n * Created by Urthur on 2017/7/14.\n */\nBI.DateTimeCombo = BI.inherit(BI.Single, {\n constants: {\n popupHeight: 290,\n popupWidth: 270,\n comboAdjustHeight: 1,\n border: 1\n },\n _defaultConfig: function () {\n return BI.extend(BI.DateTimeCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-date-time-combo bi-border bi-border-radius\",\n width: 200,\n height: 24,\n minDate: \"1900-01-01\",\n maxDate: \"2099-12-31\"\n });\n },\n _init: function () {\n BI.DateTimeCombo.superclass._init.apply(this, arguments);\n var self = this, opts = this.options;\n var date = BI.getDate();\n this.storeValue = BI.isNotNull(opts.value) ? opts.value : {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n hour: date.getHours(),\n minute: date.getMinutes(),\n second: date.getSeconds()\n };\n this.trigger = BI.createWidget({\n type: \"bi.date_time_trigger\",\n min: opts.minDate,\n max: opts.maxDate,\n value: opts.value\n });\n\n this.popup = BI.createWidget({\n type: \"bi.date_time_popup\",\n behaviors: opts.behaviors,\n min: opts.minDate,\n max: opts.maxDate,\n value: opts.value\n });\n self.setValue(this.storeValue);\n\n this.popup.on(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE, function () {\n self.setValue(self.storeValue);\n self.hidePopupView();\n self.fireEvent(BI.DateTimeCombo.EVENT_CANCEL);\n });\n this.popup.on(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE, function () {\n self.storeValue = self.popup.getValue();\n self.setValue(self.storeValue);\n self.hidePopupView();\n self.fireEvent(BI.DateTimeCombo.EVENT_CONFIRM);\n });\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: opts.container,\n toggle: false,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: this.trigger,\n adjustLength: this.constants.comboAdjustHeight,\n popup: {\n el: this.popup,\n width: this.constants.popupWidth,\n stopPropagation: false\n },\n // DEC-4250 和复选下拉一样,点击不收起\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0;\n }\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.popup.setValue(self.storeValue);\n self.fireEvent(BI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW);\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-font\",\n width: 24,\n height: 24\n });\n triggerBtn.on(BI.IconButton.EVENT_CHANGE, function () {\n if (self.combo.isViewVisible()) {\n // self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.combo,\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n top: 0,\n right: 0\n }]\n }]\n });\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.popup.setValue(v);\n this.trigger.setValue(v);\n },\n getValue: function () {\n return this.storeValue;\n },\n\n hidePopupView: function () {\n this.combo.hideView();\n }\n});\n\nBI.DateTimeCombo.EVENT_CANCEL = \"EVENT_CANCEL\";\nBI.DateTimeCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DateTimeCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DateTimeCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.date_time_combo\", BI.DateTimeCombo);\n","/**\n * Created by Urthur on 2017/7/14.\n */\nBI.DateTimePopup = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.DateTimePopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-date-time-popup\",\n width: 268,\n height: 374\n });\n },\n _init: function () {\n BI.DateTimePopup.superclass._init.apply(this, arguments);\n var self = this, opts = this.options;\n this.cancelButton = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"multidate-popup-button bi-border-top bi-border-right\",\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Cancel\")\n });\n this.cancelButton.on(BI.TextButton.EVENT_CHANGE, function () {\n self.fireEvent(BI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE);\n });\n\n this.okButton = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"multidate-popup-button bi-border-top\",\n shadow: true,\n text: BI.i18nText(\"BI-Basic_OK\")\n });\n this.okButton.on(BI.TextButton.EVENT_CHANGE, function () {\n self.fireEvent(BI.DateTimePopup.BUTTON_OK_EVENT_CHANGE);\n });\n\n this.dateCombo = BI.createWidget({\n type: \"bi.date_calendar_popup\",\n behaviors: opts.behaviors,\n min: self.options.min,\n max: self.options.max\n });\n self.dateCombo.on(BI.DateCalendarPopup.EVENT_CHANGE, function () {\n self.fireEvent(BI.DateTimePopup.CALENDAR_EVENT_CHANGE);\n });\n\n this.dateButton = BI.createWidget({\n type: \"bi.grid\",\n items: [[this.cancelButton, this.okButton]]\n });\n BI.createWidget({\n element: this,\n type: \"bi.vtape\",\n items: [{\n el: this.dateCombo\n }, {\n el: {\n type: \"bi.center_adapt\",\n cls: \"bi-split-top\",\n items: [{\n type: \"bi.dynamic_date_time_select\",\n ref: function (_ref) {\n self.timeSelect = _ref;\n }\n }]\n },\n height: 50\n }, {\n el: this.dateButton,\n height: 30\n }]\n });\n this.setValue(opts.value);\n },\n\n setValue: function (v) {\n var value = v, date;\n if (BI.isNull(value)) {\n date = BI.getDate();\n this.dateCombo.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n });\n this.timeSelect.setValue({\n hour: date.getHours(),\n minute: date.getMinutes(),\n second: date.getSeconds()\n });\n } else {\n this.dateCombo.setValue({\n year: value.year,\n month: value.month,\n day: value.day\n });\n this.timeSelect.setValue({\n hour: value.hour,\n minute: value.minute,\n second: value.second\n });\n }\n },\n\n getValue: function () {\n return BI.extend({\n year: this.dateCombo.getValue().year,\n month: this.dateCombo.getValue().month,\n day: this.dateCombo.getValue().day\n }, this.timeSelect.getValue());\n }\n});\nBI.DateTimePopup.BUTTON_OK_EVENT_CHANGE = \"BUTTON_OK_EVENT_CHANGE\";\nBI.DateTimePopup.BUTTON_CANCEL_EVENT_CHANGE = \"BUTTON_CANCEL_EVENT_CHANGE\";\nBI.DateTimePopup.CALENDAR_EVENT_CHANGE = \"CALENDAR_EVENT_CHANGE\";\nBI.shortcut(\"bi.date_time_popup\", BI.DateTimePopup);\n","/**\n * Created by Urthur on 2017/7/14.\n */\nBI.DateTimeTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.DateTimeTrigger.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-date-time-trigger\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 24,\n width: 200\n });\n },\n _init: function () {\n BI.DateTimeTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n height: o.height,\n width: o.width,\n hgap: c.hgap\n });\n\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n el: this.text\n },{\n el: BI.createWidget(),\n width: o.height\n }]\n });\n this.setValue(o.value);\n },\n\n _printTime: function (v) {\n return v < 10 ? \"0\" + v : v;\n },\n\n setValue: function (v) {\n var self = this;\n var value = v, dateStr;\n if(BI.isNull(value)) {\n value = BI.getDate();\n dateStr = BI.print(value, \"%Y-%X-%d %H:%M:%S\");\n } else {\n var date = BI.getDate(value.year, value.month - 1, value.day, value.hour, value.minute, value.second);\n dateStr = BI.print(date, \"%Y-%X-%d %H:%M:%S\");\n\n }\n this.text.setText(dateStr);\n this.text.setTitle(dateStr);\n }\n\n});\nBI.shortcut(\"bi.date_time_trigger\", BI.DateTimeTrigger);\n","BI.StaticDateTimePaneCard = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.StaticDateTimePaneCard.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-date-time-pane\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n selectedTime: null\n });\n },\n _init: function () {\n BI.StaticDateTimePaneCard.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.today = BI.getDate();\n this._year = this.today.getFullYear();\n this._month = this.today.getMonth() + 1;\n\n this.selectedTime = o.selectedTime || {\n year: this._year,\n month: this._month\n };\n\n this.datePicker = BI.createWidget({\n type: \"bi.date_picker\",\n behaviors: o.behaviors,\n min: o.min,\n max: o.max\n });\n this.datePicker.on(BI.DatePicker.EVENT_CHANGE, function () {\n var value = self.datePicker.getValue();\n var monthDay = BI.getMonthDays(BI.getDate(value.year, value.month - 1, 1));\n var day = self.selectedTime.day || 0;\n if (day > monthDay) {\n day = monthDay;\n }\n self.selectedTime = BI.extend(self.selectedTime, {\n year: value.year,\n month: value.month\n });\n day !== 0 && (self.selectedTime.day = day);\n self.calendar.setSelect(BI.Calendar.getPageByDateJSON(self.selectedTime));\n self.calendar.setValue(self.selectedTime);\n day !== 0 && self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE);\n });\n\n this.calendar = BI.createWidget({\n direction: \"custom\",\n // logic: {\n // dynamic: false\n // },\n type: \"bi.navigation\",\n tab: this.datePicker,\n cardCreator: BI.bind(this._createNav, this)\n });\n this.calendar.on(BI.Navigation.EVENT_CHANGE, function () {\n self.selectedTime = BI.extend(self.calendar.getValue(), self.timeSelect.getValue());\n self.calendar.empty();\n self.setValue(self.selectedTime);\n self.fireEvent(BI.DateCalendarPopup.EVENT_CHANGE);\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n hgap: 10,\n items: [{\n el: this.datePicker,\n height: 40\n }, this.calendar, {\n el: {\n type: \"bi.dynamic_date_time_select\",\n cls: \"bi-split-top\",\n ref: function () {\n self.timeSelect = this;\n },\n listeners: [{\n eventName: BI.DynamicDateTimeSelect.EVENT_CONFIRM,\n action: function () {\n self.selectedTime = BI.extend(self.calendar.getValue(), self.timeSelect.getValue());\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n },\n height: 40\n }]\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.layout\",\n cls: \"bi-split-top\"\n },\n height: 1,\n top: 40,\n left: 0,\n right: 0\n }]\n });\n this.setValue(o.selectedTime);\n\n },\n\n _createNav: function (v) {\n var date = BI.Calendar.getDateJSONByPage(v);\n var calendar = BI.createWidget({\n type: \"bi.calendar\",\n logic: {\n dynamic: false\n },\n min: this.options.min,\n max: this.options.max,\n year: date.year,\n month: date.month,\n day: this.selectedTime.day\n });\n return calendar;\n },\n\n _getNewCurrentDate: function () {\n var today = BI.getDate();\n return {\n year: today.getFullYear(),\n month: today.getMonth() + 1\n };\n },\n\n _setCalenderValue: function (date) {\n this.calendar.setSelect(BI.Calendar.getPageByDateJSON(date));\n this.calendar.setValue(date);\n this.selectedTime = BI.extend({}, this.timeSelect.getValue(), date);\n },\n\n _setDatePicker: function (timeOb) {\n if (BI.isNull(timeOb) || BI.isNull(timeOb.year) || BI.isNull(timeOb.month)) {\n this.datePicker.setValue(this._getNewCurrentDate());\n } else {\n this.datePicker.setValue(timeOb);\n }\n },\n\n _setCalendar: function (timeOb) {\n if (BI.isNull(timeOb) || BI.isNull(timeOb.day)) {\n this.calendar.empty();\n this._setCalenderValue(this._getNewCurrentDate());\n } else {\n this._setCalenderValue(timeOb);\n }\n },\n\n setValue: function (timeOb) {\n timeOb = timeOb || {};\n this._setDatePicker(timeOb);\n this._setCalendar(timeOb);\n this.timeSelect.setValue({\n hour: timeOb.hour,\n minute: timeOb.minute,\n second: timeOb.second\n });\n },\n\n getValue: function () {\n return this.selectedTime;\n }\n\n});\nBI.shortcut(\"bi.static_date_time_pane_card\", BI.StaticDateTimePaneCard);","BI.DynamicDateTimePane = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-dynamic-date-pane\"\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.vtape\",\n items: [{\n el: {\n type: \"bi.linear_segment\",\n cls: \"bi-split-bottom\",\n height: 30,\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Multi_Date_YMD\"),\n value: BI.DynamicDateTimePane.Static\n }, {\n text: BI.i18nText(\"BI-Basic_Dynamic_Title\"),\n value: BI.DynamicDateTimePane.Dynamic\n }], {\n textAlign: \"center\"\n }),\n listeners: [{\n eventName: BI.ButtonGroup.EVENT_CHANGE,\n action: function () {\n var value = this.getValue()[0];\n self.dateTab.setSelect(value);\n switch (value) {\n case BI.DynamicDateTimePane.Static:\n var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());\n self.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n });\n break;\n case BI.DynamicDateTimePane.Dynamic:\n self.dynamicPane.setValue({\n year: 0\n });\n break;\n default:\n break;\n }\n }\n }],\n ref: function () {\n self.switcher = this;\n }\n },\n height: 30\n }, {\n type: \"bi.tab\",\n ref: function () {\n self.dateTab = this;\n },\n showIndex: BI.DynamicDateTimePane.Static,\n cardCreator: function (v) {\n switch (v) {\n case BI.DynamicDateTimePane.Static:\n return {\n type: \"bi.static_date_time_pane_card\",\n behaviors: o.behaviors,\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }],\n ref: function () {\n self.ymd = this;\n }\n };\n case BI.DynamicDateTimePane.Dynamic:\n default:\n return {\n type: \"bi.dynamic_date_card\",\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n if(self._checkValue(self.getValue())) {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }\n }],\n ref: function () {\n self.dynamicPane = this;\n }\n };\n }\n }\n }]\n };\n },\n\n mounted: function () {\n this.setValue(this.options.value);\n },\n\n _checkValueValid: function (value) {\n return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value);\n },\n\n _checkValue: function (v) {\n switch (v.type) {\n case BI.DynamicDateCombo.Dynamic:\n return BI.isNotEmptyObject(v.value);\n case BI.DynamicDateCombo.Static:\n default:\n return true;\n }\n },\n\n setValue: function (v) {\n v = v || {};\n var type = v.type || BI.DynamicDateTimePane.Static;\n var value = v.value || v;\n this.switcher.setValue(type);\n this.dateTab.setSelect(type);\n switch (type) {\n case BI.DynamicDateTimePane.Dynamic:\n this.dynamicPane.setValue(value);\n break;\n case BI.DynamicDateTimePane.Static:\n default:\n if (this._checkValueValid(value)) {\n var date = BI.getDate();\n this.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1\n });\n } else {\n this.ymd.setValue(value);\n }\n break;\n }\n },\n\n getValue: function () {\n return {\n type: this.dateTab.getSelect(),\n value: this.dateTab.getValue()\n };\n }\n});\nBI.shortcut(\"bi.dynamic_date_time_pane\", BI.DynamicDateTimePane);\n\nBI.extend(BI.DynamicDateTimePane, {\n Static: 1,\n Dynamic: 2\n});","/**\n * Created by roy on 15/8/14.\n */\nBI.DownListCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.DownListCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-down-list-combo\",\n height: 24,\n items: [],\n adjustLength: 0,\n direction: \"bottom\",\n trigger: \"click\",\n container: null,\n stopPropagation: false,\n el: {}\n });\n },\n\n _init: function () {\n BI.DownListCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.popupview = BI.createWidget({\n type: \"bi.down_list_popup\",\n items: o.items,\n chooseType: o.chooseType,\n value: o.value\n });\n\n this.popupview.on(BI.DownListPopup.EVENT_CHANGE, function (value) {\n self.fireEvent(BI.DownListCombo.EVENT_CHANGE, value);\n self.downlistcombo.hideView();\n });\n\n this.popupview.on(BI.DownListPopup.EVENT_SON_VALUE_CHANGE, function (value, fatherValue) {\n self.fireEvent(BI.DownListCombo.EVENT_SON_VALUE_CHANGE, value, fatherValue);\n self.downlistcombo.hideView();\n });\n\n\n this.downlistcombo = BI.createWidget({\n element: this,\n type: \"bi.combo\",\n trigger: o.trigger,\n isNeedAdjustWidth: false,\n container: o.container,\n adjustLength: o.adjustLength,\n direction: o.direction,\n stopPropagation: o.stopPropagation,\n el: BI.createWidget(o.el, {\n type: \"bi.icon_trigger\",\n extraCls: o.iconCls,\n width: o.width,\n height: o.height\n }),\n popup: {\n el: this.popupview,\n stopPropagation: o.stopPropagation,\n maxHeight: 1000,\n minWidth: 140\n }\n });\n\n this.downlistcombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.fireEvent(BI.DownListCombo.EVENT_BEFORE_POPUPVIEW);\n });\n },\n\n hideView: function () {\n this.downlistcombo.hideView();\n },\n\n showView: function (e) {\n this.downlistcombo.showView(e);\n },\n\n populate: function (items) {\n this.popupview.populate(items);\n },\n\n setValue: function (v) {\n this.popupview.setValue(v);\n },\n getValue: function () {\n return this.popupview.getValue();\n }\n});\nBI.DownListCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DownListCombo.EVENT_SON_VALUE_CHANGE = \"EVENT_SON_VALUE_CHANGE\";\nBI.DownListCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n\nBI.shortcut(\"bi.down_list_combo\", BI.DownListCombo);","/**\n * Created by roy on 15/9/6.\n */\nBI.DownListGroup = BI.inherit(BI.Widget, {\n constants: {\n iconCls: \"check-mark-ha-font\"\n },\n _defaultConfig: function () {\n return BI.extend(BI.DownListGroup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-down-list-group\",\n items: [\n {\n el: {}\n }\n ]\n });\n },\n _init: function () {\n BI.DownListGroup.superclass._init.apply(this, arguments);\n var o = this.options, self = this;\n\n this.downlistgroup = BI.createWidget({\n element: this,\n type: \"bi.button_tree\",\n items: o.items,\n chooseType: 0, // 0单选,1多选\n layouts: [{\n type: \"bi.vertical\",\n hgap: 0,\n vgap: 0\n }],\n value: o.value\n });\n this.downlistgroup.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if(type === BI.Events.CLICK) {\n self.fireEvent(BI.DownListGroup.EVENT_CHANGE, arguments);\n }\n });\n },\n getValue: function () {\n return this.downlistgroup.getValue();\n },\n setValue: function (v) {\n this.downlistgroup.setValue(v);\n }\n\n\n});\nBI.DownListGroup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.down_list_group\", BI.DownListGroup);","BI.DownListItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n var conf = BI.DownListItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-down-list-item bi-list-item-active\",\n cls: \"\",\n height: 24,\n logic: {\n dynamic: true\n },\n selected: false,\n iconHeight: null,\n iconWidth: null,\n textHgap: 0,\n textVgap: 0,\n textLgap: 0,\n textRgap: 0\n });\n },\n _init: function () {\n BI.DownListItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n hgap: o.textHgap,\n vgap: o.textVgap,\n lgap: o.textLgap,\n rgap: o.textRgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n height: o.height\n });\n this.icon = BI.createWidget({\n type: \"bi.center_adapt\",\n width: 36,\n height: o.height,\n items: [{\n el: {\n type: \"bi.icon\",\n width: o.iconWidth,\n height: o.iconHeight\n }\n }]\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left), BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, this.icon, this.text)\n }))));\n },\n\n setValue: function () {\n if (!this.isReadOnly()) {\n this.text.setValue.apply(this.text, arguments);\n }\n },\n\n getValue: function () {\n return this.text.getValue();\n },\n\n setText: function () {\n this.text.setText.apply(this.text, arguments);\n },\n\n getText: function () {\n return this.text.getText();\n },\n\n doClick: function () {\n BI.DownListItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.DownListItem.EVENT_CHANGE, this.getValue(), this);\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n }\n});\nBI.DownListItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.down_list_item\", BI.DownListItem);","BI.DownListGroupItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n var conf = BI.DownListGroupItem.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-down-list-group-item\",\n logic: {\n dynamic: false\n },\n // invalid: true,\n iconCls1: \"dot-e-font\",\n iconCls2: \"pull-right-e-font\"\n });\n },\n _init: function () {\n BI.DownListGroupItem.superclass._init.apply(this, arguments);\n var o = this.options;\n var self = this;\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-group-item-text\",\n textAlign: \"left\",\n text: o.text,\n value: o.value,\n height: o.height\n });\n\n this.icon1 = BI.createWidget({\n type: \"bi.icon_button\",\n cls: o.iconCls1,\n width: 36,\n disableSelected: true,\n selected: this._digest(o.value)\n });\n\n this.icon2 = BI.createWidget({\n type: \"bi.icon_button\",\n cls: o.iconCls2,\n width: 24,\n forceNotSelected: true\n });\n\n var blank = BI.createWidget({\n type: \"bi.layout\",\n width: 24\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.icon2,\n top: 0,\n bottom: 0,\n right: 0\n }]\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", this.icon1, this.text, blank)\n }))));\n\n this.element.hover(function () {\n if (self.isEnabled()) {\n self.hover();\n }\n }, function () {\n if (self.isEnabled()) {\n self.dishover();\n }\n });\n },\n\n _digest: function (v) {\n var self = this, o = this.options;\n v = BI.isArray(v) ? v : [v];\n return BI.any(v, function (idx, value) {\n return BI.contains(o.childValues, value);\n });\n },\n\n hover: function () {\n BI.DownListGroupItem.superclass.hover.apply(this, arguments);\n this.icon1.element.addClass(\"hover\");\n this.icon2.element.addClass(\"hover\");\n\n },\n\n dishover: function () {\n BI.DownListGroupItem.superclass.dishover.apply(this, arguments);\n this.icon1.element.removeClass(\"hover\");\n this.icon2.element.removeClass(\"hover\");\n },\n\n doClick: function () {\n BI.DownListGroupItem.superclass.doClick.apply(this, arguments);\n if (this.isValid()) {\n this.fireEvent(BI.DownListGroupItem.EVENT_CHANGE, this.getValue());\n }\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n setValue: function (v) {\n this.icon1.setSelected(this._digest(v));\n }\n});\nBI.DownListGroupItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.down_list_group_item\", BI.DownListGroupItem);","/**\n * Created by roy on 15/9/8.\n * 处理popup中的item分组样式\n * 一个item分组中的成员大于一时,该分组设置为单选,并且默认状态第一个成员设置为已选择项\n */\nBI.DownListPopup = BI.inherit(BI.Pane, {\n constants: {\n nextIcon: \"pull-right-e-font\",\n height: 24,\n iconHeight: 12,\n iconWidth: 12,\n hgap: 0,\n vgap: 0,\n border: 1\n },\n _defaultConfig: function () {\n var conf = BI.DownListPopup.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-down-list-popup\",\n items: [],\n chooseType: BI.Selection.Multi\n });\n },\n _init: function () {\n BI.DownListPopup.superclass._init.apply(this, arguments);\n this.singleValues = [];\n this.childValueMap = {};\n this.fatherValueMap = {};\n this.items = BI.deepClone(this.options.items);\n var self = this, o = this.options, children = this._createChildren(this.items);\n this.popup = BI.createWidget({\n type: \"bi.button_tree\",\n items: BI.createItems(children,\n {}, {\n adjustLength: -2\n }\n ),\n layouts: [{\n type: \"bi.vertical\",\n hgap: this.constants.hgap,\n vgap: this.constants.vgap\n }],\n value: this._digest(o.value),\n chooseType: o.chooseType\n });\n\n this.popup.on(BI.ButtonTree.EVENT_CHANGE, function (value, object) {\n var changedValue = value;\n if (BI.isNotNull(self.childValueMap[value])) {\n changedValue = self.childValueMap[value];\n self.fireEvent(BI.DownListPopup.EVENT_SON_VALUE_CHANGE, changedValue, self.fatherValueMap[value]);\n } else {\n self.fireEvent(BI.DownListPopup.EVENT_CHANGE, changedValue, object);\n }\n\n\n if (!BI.contains(self.singleValues, changedValue)) {\n var item = self.getValue();\n var result = [];\n BI.each(item, function (i, valueObject) {\n if (valueObject.value != changedValue) {\n result.push(valueObject);\n }\n });\n self.setValue(result);\n }\n\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n items: [this.popup],\n vgap: 5\n });\n\n },\n _createChildren: function (items) {\n var self = this, result = [];\n // 不能修改populate进来的item的引用\n BI.each(items, function (i, it) {\n var item_done = {\n type: \"bi.down_list_group\",\n items: []\n };\n\n BI.each(it, function (i, item) {\n if (BI.isNotEmptyArray(item.children) && !BI.isEmpty(item.el)) {\n item.type = \"bi.combo_group\";\n // popup未初始化返回的是options中的value, 在经过buttontree的getValue concat之后,无法区分值来自options\n // 还是item自身, 这边控制defaultInit为true来避免这个问题\n item.isDefaultInit = true;\n item.cls = \"down-list-group\";\n item.trigger = \"hover\";\n item.isNeedAdjustWidth = false;\n item.el.title = item.el.title || item.el.text;\n item.el.type = \"bi.down_list_group_item\";\n item.el.logic = {\n dynamic: true\n };\n item.el.height = self.constants.height;\n item.el.iconCls2 = self.constants.nextIcon;\n item.popup = {\n lgap: 1,\n el: {\n type: \"bi.button_tree\",\n chooseType: 0,\n layouts: [{\n type: \"bi.vertical\"\n }]\n\n },\n innerVGap: 5,\n maxHeight: 378\n };\n item.el.childValues = [];\n BI.each(item.children, function (i, child) {\n var fatherValue = BI.deepClone(item.el.value);\n var childValue = BI.deepClone(child.value);\n self.singleValues.push(child.value);\n child.type = \"bi.down_list_item\";\n child.extraCls = \" child-down-list-item\";\n child.title = child.title || child.text;\n child.textRgap = 10;\n child.isNeedAdjustWidth = false;\n child.logic = {\n dynamic: true\n };\n child.father = fatherValue;\n self.fatherValueMap[self._createChildValue(fatherValue, childValue)] = fatherValue;\n self.childValueMap[self._createChildValue(fatherValue, childValue)] = childValue;\n child.value = self._createChildValue(fatherValue, childValue);\n item.el.childValues.push(child.value);\n });\n } else {\n item.type = \"bi.down_list_item\";\n item.title = item.title || item.text;\n item.textRgap = 10;\n item.isNeedAdjustWidth = false;\n item.logic = {\n dynamic: true\n };\n }\n var el_done = {};\n el_done.el = item;\n item_done.items.push(el_done);\n });\n if (self._isGroup(item_done.items)) {\n BI.each(item_done.items, function (i, item) {\n self.singleValues.push(item.el.value);\n });\n }\n\n result.push(item_done);\n if (self._needSpliter(i, items.length)) {\n var spliter_container = BI.createWidget({\n type: \"bi.vertical\",\n items: [{\n el: {\n type: \"bi.layout\",\n cls: \"bi-down-list-spliter bi-split-top cursor-pointer\",\n height: 0\n }\n\n }],\n cls: \"bi-down-list-spliter-container cursor-pointer\",\n vgap: 5,\n lgap: 10,\n rgap: 0\n });\n result.push(spliter_container);\n }\n });\n return result;\n },\n\n _isGroup: function (i) {\n return i.length > 1;\n },\n\n _needSpliter: function (i, itemLength) {\n return i < itemLength - 1;\n },\n\n _createChildValue: function (fatherValue, childValue) {\n return fatherValue + \"_\" + childValue;\n },\n\n _digest: function (valueItem) {\n var self = this;\n var valueArray = [];\n BI.each(valueItem, function (i, item) {\n var value;\n if (BI.isNotNull(item.childValue)) {\n value = self._createChildValue(item.value, item.childValue);\n } else {\n value = item.value;\n }\n valueArray.push(value);\n }\n );\n return valueArray;\n },\n\n _checkValues: function (values) {\n var value = [];\n BI.each(this.items, function (idx, itemGroup) {\n BI.each(itemGroup, function (id, item) {\n if(BI.isNotNull(item.children)) {\n var childValues = BI.map(item.children, \"value\");\n var v = joinValue(childValues, values[idx]);\n if(BI.isNotEmptyString(v)) {\n value.push(v);\n }\n }else{\n if(item.value === values[idx][0]) {\n value.push(values[idx][0]);\n }\n }\n });\n });\n return value;\n\n function joinValue (sources, targets) {\n var value = \"\";\n BI.some(sources, function (idx, s) {\n return BI.some(targets, function (id, t) {\n if(s === t) {\n value = s;\n return true;\n }\n });\n });\n return value;\n }\n },\n\n populate: function (items) {\n BI.DownListPopup.superclass.populate.apply(this, arguments);\n this.items = BI.deepClone(items);\n this.childValueMap = {};\n this.fatherValueMap = {};\n this.singleValues = [];\n var children = this._createChildren(this.items);\n var popupItem = BI.createItems(children,\n {}, {\n adjustLength: -2\n }\n );\n this.popup.populate(popupItem);\n },\n\n setValue: function (valueItem) {\n this.popup.setValue(this._digest(valueItem));\n },\n\n _getValue: function () {\n var v = [];\n BI.each(this.popup.getAllButtons(), function (i, item) {\n i % 2 === 0 && v.push(item.getValue());\n });\n return v;\n },\n\n getValue: function () {\n var self = this, result = [];\n var values = this._checkValues(this._getValue());\n BI.each(values, function (i, value) {\n var valueItem = {};\n if (BI.isNotNull(self.childValueMap[value])) {\n var fartherValue = self.fatherValueMap[value];\n valueItem.childValue = self.childValueMap[value];\n valueItem.value = fartherValue;\n } else {\n valueItem.value = value;\n }\n result.push(valueItem);\n });\n return result;\n }\n\n\n});\n\nBI.DownListPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DownListPopup.EVENT_SON_VALUE_CHANGE = \"EVENT_SON_VALUE_CHANGE\";\nBI.shortcut(\"bi.down_list_popup\", BI.DownListPopup);","!(function () {\n BI.DynamicDateHelper = {};\n BI.extend(BI.DynamicDateHelper, {\n getCalculation: function (obj) {\n var date = BI.getDate();\n\n return this.getCalculationByDate(date, obj);\n },\n\n getCalculationByDate: function (date, obj) {\n if (BI.isNotNull(obj.year)) {\n date = BI.getDate((date.getFullYear() + BI.parseInt(obj.year)), date.getMonth(), date.getDate());\n }\n if (BI.isNotNull(obj.quarter)) {\n date = BI.getOffsetQuarter(date, BI.parseInt(obj.quarter));\n }\n if (BI.isNotNull(obj.month)) {\n date = BI.getOffsetMonth(date, BI.parseInt(obj.month));\n }\n if (BI.isNotNull(obj.week)) {\n date = BI.getOffsetDate(date, BI.parseInt(obj.week) * 7);\n }\n if (BI.isNotNull(obj.day)) {\n date = BI.getOffsetDate(date, BI.parseInt(obj.day));\n }\n if (BI.isNotNull(obj.workDay)) {\n // 配置了节假日就按照节假日计算工作日偏移,否则按正常的天去算\n if(BI.isNotNull(BI.holidays)) {\n var count = Math.abs(obj.workDay);\n for (var i = 0; i < count; i++) {\n date = BI.getOffsetDate(date, obj.workDay < 0 ? -1 : 1);\n if(BI.isNotNull(BI.holidays[BI.print(date, \"%Y-%X-%d\")])) {\n i--;\n }\n }\n } else {\n date = BI.getOffsetDate(date, BI.parseInt(obj.workDay));\n }\n }\n if (BI.isNotNull(obj.position) && obj.position !== BI.DynamicDateCard.OFFSET.CURRENT) {\n date = this.getBeginDate(date, obj);\n }\n\n return BI.getDate(date.getFullYear(), date.getMonth(), date.getDate());\n },\n\n getBeginDate: function (date, obj) {\n if (BI.isNotNull(obj.day)) {\n return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getDate(date.getFullYear(), date.getMonth(), 1) : BI.getDate(date.getFullYear(), date.getMonth(), (BI.getLastDateOfMonth(date)).getDate());\n }\n if (BI.isNotNull(obj.week)) {\n return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getWeekStartDate(date) : BI.getWeekEndDate(date);\n }\n if (BI.isNotNull(obj.month)) {\n return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getDate(date.getFullYear(), date.getMonth(), 1) : BI.getDate(date.getFullYear(), date.getMonth(), (BI.getLastDateOfMonth(date)).getDate());\n }\n if (BI.isNotNull(obj.quarter)) {\n return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getQuarterStartDate(date) : BI.getQuarterEndDate(date);\n }\n if (BI.isNotNull(obj.year)) {\n return obj.position === BI.DynamicDateCard.OFFSET.BEGIN ? BI.getDate(date.getFullYear(), 0, 1) : BI.getDate(date.getFullYear(), 11, 31);\n }\n return date;\n }\n });\n})();\n","BI.DynamicDateCard = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-dynamic-date-card\"\n },\n\n render: function () {\n var self = this;\n this.position = BI.DynamicDateCard.OFFSET.CURRENT;\n return {\n type: \"bi.vertical\",\n items: [{\n el: {\n type: \"bi.label\",\n text: BI.i18nText(\"BI-Multi_Date_Relative_Current_Time\"),\n textAlign: \"left\",\n height: 12,\n lgap: 10\n },\n tgap: 10,\n bgap: 5\n }, {\n type: \"bi.button_group\",\n ref: function () {\n self.checkgroup = this;\n },\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,\n lgap: 4,\n value: [BI.DynamicDateCard.TYPE.YEAR],\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Basic_Year\"),\n value: BI.DynamicDateCard.TYPE.YEAR\n }, {\n text: BI.i18nText(\"BI-Basic_Single_Quarter\"),\n value: BI.DynamicDateCard.TYPE.QUARTER\n }, {\n text: BI.i18nText(\"BI-Basic_Month\"),\n value: BI.DynamicDateCard.TYPE.MONTH\n }, {\n text: BI.i18nText(\"BI-Basic_Week\"),\n value: BI.DynamicDateCard.TYPE.WEEK\n }, {\n text: BI.i18nText(\"BI-Basic_Day\"),\n value: BI.DynamicDateCard.TYPE.DAY\n }], {\n type: \"bi.multi_select_item\",\n logic: {\n dynamic: true\n }\n }),\n layouts: [{\n type: \"bi.left\",\n rgap: 4\n }],\n listeners: [{\n eventName: BI.ButtonGroup.EVENT_CHANGE,\n action: function () {\n var value = self.checkgroup.getValue();\n if(value.length !== 0) {\n self.workDayBox.setSelected(false);\n }\n\n var plainValue = {};\n BI.each(self.resultPane.getAllButtons(), function (idx, button) {\n var value = button.getValue();\n if(BI.isNotNull(value.dateType)) {\n plainValue[value.dateType] = {\n value: value.value,\n offset: value.offset\n };\n }\n });\n self.resultPane.populate(self._getParamJson(BI.map(self.checkgroup.getValue(), function (idx, v) {\n var obj = {\n dateType: v\n };\n if(BI.has(plainValue, v)) {\n obj.value = plainValue[v].value;\n obj.offset = plainValue[v].offset;\n }\n return obj;\n })));\n self.position = BI.DynamicDateCard.OFFSET.CURRENT;\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n }, {\n type: \"bi.vertical_adapt\",\n lgap: 2,\n items: [{\n el: {\n type: \"bi.multi_select_item\",\n ref: function () {\n self.workDayBox = this;\n },\n logic: {\n dynamic: true\n },\n text: BI.i18nText(\"BI-Basic_Work_Day\"),\n value: BI.DynamicDateCard.TYPE.WORK_DAY,\n listeners: [{\n eventName: BI.MultiSelectItem.EVENT_CHANGE,\n action: function () {\n if(this.isSelected()) {\n self.checkgroup.setValue();\n }\n self.resultPane.populate(this.isSelected() ? self._getParamJson([{\n dateType: BI.DynamicDateCard.TYPE.WORK_DAY\n }]) : []);\n self.position = BI.DynamicDateCard.OFFSET.CURRENT;\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n }\n }],\n ref: function () {\n self.workDay = this;\n }\n }, {\n type: \"bi.button_group\",\n items: this._getParamJson([{\n dateType: BI.DynamicDateCard.TYPE.YEAR\n }]),\n ref: function () {\n self.resultPane = this;\n },\n layouts: [{\n type: \"bi.vertical\",\n bgap: 10,\n hgap: 10\n }]\n }]\n };\n },\n\n _getParamJson: function (values, positionValue) {\n var self = this;\n var items = BI.map(values, function (idx, value) {\n return {\n el: {\n type: \"bi.dynamic_date_param_item\",\n dateType: value.dateType,\n value: value.value,\n offset: value.offset,\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n },\n tgap: idx === 0 ? 5 : 0\n };\n });\n\n if(values.length === 1 && values[0].dateType === BI.DynamicDateCard.TYPE.DAY) {\n var comboItems = this._getText(BI.DynamicDateCard.TYPE.MONTH);\n comboItems[0].text = BI.i18nText(\"BI-Basic_Empty\");\n items.push({\n type: \"bi.text_value_combo\",\n height: 24,\n items: comboItems,\n container: null,\n value: positionValue || BI.DynamicDateCard.OFFSET.CURRENT,\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.position = this.getValue()[0];\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n });\n }else{\n if(values.length !== 0 && BI.last(values).dateType !== BI.DynamicDateCard.TYPE.DAY && BI.last(values).dateType !== BI.DynamicDateCard.TYPE.WORK_DAY) {\n items.push({\n type: \"bi.text_value_combo\",\n height: 24,\n container: null,\n items: this._getText(BI.last(values).dateType),\n value: positionValue || BI.DynamicDateCard.OFFSET.CURRENT,\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.position = this.getValue()[0];\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n });\n\n }\n }\n\n return items;\n },\n\n _getText: function (lastValue) {\n switch (lastValue) {\n case BI.DynamicDateCard.TYPE.YEAR:\n return [{\n text: BI.i18nText(\"BI-Basic_Current_Day\"),\n value: BI.DynamicDateCard.OFFSET.CURRENT\n }, {\n text: BI.i18nText(\"BI-Basic_Year_Begin\"),\n value: BI.DynamicDateCard.OFFSET.BEGIN\n }, {\n text: BI.i18nText(\"BI-Basic_Year_End\"),\n value: BI.DynamicDateCard.OFFSET.END\n }];\n case BI.DynamicDateCard.TYPE.QUARTER:\n return [{\n text: BI.i18nText(\"BI-Basic_Current_Day\"),\n value: BI.DynamicDateCard.OFFSET.CURRENT\n }, {\n text: BI.i18nText(\"BI-Basic_Quarter_Begin\"),\n value: BI.DynamicDateCard.OFFSET.BEGIN\n }, {\n text: BI.i18nText(\"BI-Basic_Quarter_End\"),\n value: BI.DynamicDateCard.OFFSET.END\n }];\n case BI.DynamicDateCard.TYPE.MONTH:\n return [{\n text: BI.i18nText(\"BI-Basic_Current_Day\"),\n value: BI.DynamicDateCard.OFFSET.CURRENT\n }, {\n text: BI.i18nText(\"BI-Basic_Month_Begin\"),\n value: BI.DynamicDateCard.OFFSET.BEGIN\n }, {\n text: BI.i18nText(\"BI-Basic_Month_End\"),\n value: BI.DynamicDateCard.OFFSET.END\n }];\n case BI.DynamicDateCard.TYPE.WEEK:\n default:\n return [{\n text: BI.i18nText(\"BI-Basic_Current_Day\"),\n value: BI.DynamicDateCard.OFFSET.CURRENT\n }, {\n text: BI.i18nText(\"BI-Basic_Week_Begin\"),\n value: BI.DynamicDateCard.OFFSET.BEGIN\n }, {\n text: BI.i18nText(\"BI-Basic_Week_End\"),\n value: BI.DynamicDateCard.OFFSET.END\n }];\n }\n },\n\n _createValue: function (type, v) {\n return {\n dateType: type,\n value: Math.abs(v),\n offset: v > 0 ? 1 : 0\n };\n },\n\n setValue: function (v) {\n v = v || {};\n this.position = v.position || BI.DynamicDateCard.OFFSET.CURRENT;\n var values = [];\n var valuesItems = [];\n if(BI.isNotNull(v.year)) {\n values.push(BI.DynamicDateCard.TYPE.YEAR);\n valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.YEAR, v.year));\n }\n if(BI.isNotNull(v.quarter)) {\n values.push(BI.DynamicDateCard.TYPE.QUARTER);\n valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.QUARTER, v.quarter));\n }\n if(BI.isNotNull(v.month)) {\n values.push(BI.DynamicDateCard.TYPE.MONTH);\n valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.MONTH, v.month));\n }\n if(BI.isNotNull(v.week)) {\n values.push(BI.DynamicDateCard.TYPE.WEEK);\n valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WEEK, v.week));\n }\n if(BI.isNotNull(v.day)) {\n values.push(BI.DynamicDateCard.TYPE.DAY);\n valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.DAY, v.day));\n }\n if(BI.isNotNull(v.workDay)) {\n values.push(BI.DynamicDateCard.TYPE.WORK_DAY);\n valuesItems.push(this._createValue(BI.DynamicDateCard.TYPE.WORK_DAY, v.workDay));\n }\n this.checkgroup.setValue(values);\n this.workDayBox.setSelected(BI.isNotNull(v.workDay));\n this.resultPane.populate(this._getParamJson(valuesItems, v.position));\n },\n\n getValue: function () {\n var self = this;\n var valueMap = {};\n var selectValues = this.checkgroup.getValue();\n var buttons = this.resultPane.getAllButtons();\n if(selectValues.length !== 0) {\n BI.each(buttons, function (idx, button) {\n var value = button.getValue();\n switch (value.dateType) {\n case BI.DynamicDateCard.TYPE.YEAR:\n valueMap.year = (value.offset === 0 ? -value.value : value.value);\n break;\n case BI.DynamicDateCard.TYPE.QUARTER:\n valueMap.quarter = (value.offset === 0 ? -value.value : value.value);\n break;\n case BI.DynamicDateCard.TYPE.MONTH:\n valueMap.month = (value.offset === 0 ? -value.value : value.value);\n break;\n case BI.DynamicDateCard.TYPE.WEEK:\n valueMap.week = (value.offset === 0 ? -value.value : value.value);\n break;\n case BI.DynamicDateCard.TYPE.DAY:\n valueMap.day = (value.offset === 0 ? -value.value : value.value);\n break;\n default:\n break;\n }\n if(BI.isNull(value.dateType)) {\n valueMap.position = self.position || BI.DynamicDateCard.OFFSET.CURRENT;\n }\n });\n }\n if(this.workDayBox.isSelected()) {\n var value = buttons[0].getValue();\n valueMap.workDay = (value.offset === 0 ? -value.value : value.value);\n }\n return valueMap;\n }\n\n});\nBI.shortcut(\"bi.dynamic_date_card\", BI.DynamicDateCard);\n\nBI.extend(BI.DynamicDateCard, {\n TYPE: {\n YEAR: 1,\n QUARTER: 2,\n MONTH: 3,\n WEEK: 4,\n DAY: 5,\n WORK_DAY: 6\n },\n OFFSET: {\n CURRENT: 1,\n BEGIN: 2,\n END: 3\n }\n\n});","BI.DynamicDateCombo = BI.inherit(BI.Single, {\n constants: {\n popupHeight: 259,\n popupWidth: 270,\n comboAdjustHeight: 1,\n border: 1\n },\n\n props: {\n baseCls: \"bi-dynamic-date-combo bi-border bi-focus-shadow bi-border-radius\",\n height: 22,\n minDate: \"1900-01-01\",\n maxDate: \"2099-12-31\",\n format: \"\",\n allowEdit: true\n },\n\n\n render: function () {\n var self = this, opts = this.options;\n this.storeTriggerValue = \"\";\n var date = BI.getDate();\n this.storeValue = opts.value;\n return {\n type: \"bi.htape\",\n items: [{\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-change-h-font\",\n width: opts.height,\n height: opts.height,\n ref: function () {\n self.changeIcon = this;\n }\n },\n width: opts.height\n }, {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.combo\",\n container: opts.container,\n ref: function () {\n self.combo = this;\n },\n toggle: false,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n destroyWhenHide: true,\n el: {\n type: \"bi.dynamic_date_trigger\",\n min: opts.minDate,\n max: opts.maxDate,\n format: opts.format,\n allowEdit: opts.allowEdit,\n watermark: opts.watermark,\n height: opts.height,\n value: opts.value,\n ref: function () {\n self.trigger = this;\n },\n listeners: [{\n eventName: BI.DynamicDateTrigger.EVENT_KEY_DOWN,\n action: function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n }\n self.fireEvent(BI.DynamicDateCombo.EVENT_KEY_DOWN, arguments);\n }\n }, {\n eventName: BI.DynamicDateTrigger.EVENT_STOP,\n action: function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n }\n }, {\n eventName: BI.DynamicDateTrigger.EVENT_FOCUS,\n action: function () {\n self.storeTriggerValue = self.trigger.getKey();\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n self.fireEvent(BI.DynamicDateCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.DynamicDateTrigger.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.DynamicDateCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.DynamicDateTrigger.EVENT_ERROR,\n action: function () {\n self.storeValue = {\n type: BI.DynamicDateCombo.Static,\n value: {\n year: date.getFullYear(),\n month: date.getMonth() + 1\n }\n };\n self.fireEvent(BI.DynamicDateCombo.EVENT_ERROR);\n }\n }, {\n eventName: BI.DynamicDateTrigger.EVENT_VALID,\n action: function () {\n self.fireEvent(BI.DynamicDateCombo.EVENT_VALID);\n }\n }, {\n eventName: BI.DynamicDateTrigger.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDateCombo.EVENT_CHANGE);\n }\n }, {\n eventName: BI.DynamicDateTrigger.EVENT_CONFIRM,\n action: function () {\n if (self.combo.isViewVisible()) {\n return;\n }\n var dateStore = self.storeTriggerValue;\n var dateObj = self.trigger.getKey();\n if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) {\n self.storeValue = self.trigger.getValue();\n self.setValue(self.trigger.getValue());\n } else if (BI.isEmptyString(dateObj)) {\n self.storeValue = null;\n self.trigger.setValue();\n }\n self._checkDynamicValue(self.storeValue);\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }]\n },\n adjustLength: this.constants.comboAdjustHeight,\n popup: {\n el: {\n type: \"bi.dynamic_date_popup\",\n behaviors: opts.behaviors,\n min: opts.minDate,\n max: opts.maxDate,\n ref: function () {\n self.popup = this;\n },\n listeners: [{\n eventName: BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE,\n action: function () {\n self.setValue();\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE,\n action: function () {\n var date = BI.getDate();\n self.setValue({\n type: BI.DynamicDateCombo.Static,\n value: {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n }\n });\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE,\n action: function () {\n var value = self.popup.getValue();\n if(self._checkValue(value)) {\n self.setValue(value);\n }\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicDatePopup.EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }]\n },\n stopPropagation: false\n },\n // DEC-4250 和复选下拉一样,点击triggerBtn不默认收起\n hideChecker: function (e) {\n return self.triggerBtn.element.find(e.target).length === 0;\n },\n listeners: [{\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.popup.setValue(self.storeValue);\n self.popup.setMinDate(opts.minDate);\n self.popup.setMaxDate(opts.maxDate);\n self.fireEvent(BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n },\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-font\",\n width: opts.height,\n height: opts.height,\n listeners: [{\n eventName: BI.IconButton.EVENT_CHANGE,\n action: function () {\n if (self.combo.isViewVisible()) {\n // self.combo.hideView();\n } else {\n self.combo.showView();\n }\n }\n }],\n ref: function () {\n self.triggerBtn = this;\n }\n },\n top: 0,\n right: 0\n }]\n }],\n ref: function (_ref) {\n self.comboWrapper = _ref;\n }\n };\n },\n\n mounted: function () {\n this._checkDynamicValue(this.storeValue);\n },\n\n _checkDynamicValue: function (v) {\n var o = this.options;\n var type = null;\n if (BI.isNotNull(v)) {\n type = v.type;\n }\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n this.changeIcon.setVisible(true);\n this.comboWrapper.attr(\"items\")[0].width = o.height;\n this.comboWrapper.resize();\n break;\n default:\n this.comboWrapper.attr(\"items\")[0].width = 0;\n this.comboWrapper.resize();\n this.changeIcon.setVisible(false);\n break;\n }\n },\n\n _checkValue: function (v) {\n switch (v.type) {\n case BI.DynamicDateCombo.Dynamic:\n return BI.isNotEmptyObject(v.value);\n case BI.DynamicDateCombo.Static:\n default:\n return true;\n }\n },\n\n _defaultState: function () {\n\n },\n\n setMinDate: function (minDate) {\n var o = this.options;\n o.minDate = minDate;\n this.trigger.setMinDate(minDate);\n this.popup && this.popup.setMinDate(minDate);\n },\n\n setMaxDate: function (maxDate) {\n var o = this.options;\n o.maxDate = maxDate;\n this.trigger.setMaxDate(maxDate);\n this.popup && this.popup.setMaxDate(maxDate);\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.trigger.setValue(v);\n this._checkDynamicValue(v);\n },\n getValue: function () {\n return this.storeValue;\n },\n getKey: function () {\n return this.trigger.getKey();\n },\n hidePopupView: function () {\n this.combo.hideView();\n }\n});\n\nBI.DynamicDateCombo.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.DynamicDateCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicDateCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicDateCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.DynamicDateCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DynamicDateCombo.EVENT_VALID = \"EVENT_VALID\";\nBI.DynamicDateCombo.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n\nBI.shortcut(\"bi.dynamic_date_combo\", BI.DynamicDateCombo);\n\nBI.extend(BI.DynamicDateCombo, {\n Static: 1,\n Dynamic: 2\n});","BI.DynamicDateParamItem = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-dynamic-date-param-item\",\n dateType: BI.DynamicDateCard.TYPE.YEAR,\n value: 0,\n offset: 0,\n height: 24\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.htape\",\n items: [{\n el: {\n type: \"bi.sign_editor\",\n cls: \"bi-border\",\n height: 22,\n validationChecker: function (v) {\n return BI.isNaturalNumber(v);\n },\n value: o.value,\n ref: function () {\n self.editor = this;\n },\n errorText: function (v) {\n if(BI.isEmptyString(v)) {\n return BI.i18nText(\"BI-Basic_Please_Input_Content\");\n }\n return BI.i18nText(\"BI-Please_Input_Natural_Number\");\n },\n allowBlank: false,\n listeners: [{\n eventName: BI.SignEditor.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE);\n }\n }]\n },\n width: 60\n }, {\n el: {\n type: \"bi.label\",\n height: 24,\n text: this._getText()\n },\n width: o.dateType === BI.DynamicDateCard.TYPE.WORK_DAY ? 60 : 20\n }, {\n type: \"bi.text_value_combo\",\n height: 24,\n items: [{\n text: BI.i18nText(\"BI-Basic_Front\"),\n value: 0\n }, {\n text: BI.i18nText(\"BI-Basic_Behind\"),\n value: 1\n }],\n ref: function () {\n self.offsetCombo = this;\n },\n container: null,\n value: o.offset,\n listeners: [{\n eventName: BI.TextValueCombo.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDateParamItem.EVENT_CHANGE);\n }\n }]\n }]\n };\n },\n\n _getText: function () {\n var text = \"\";\n switch (this.options.dateType) {\n case BI.DynamicDateCard.TYPE.YEAR:\n text = BI.i18nText(\"BI-Basic_Year\");\n break;\n case BI.DynamicDateCard.TYPE.QUARTER:\n text = BI.i18nText(\"BI-Basic_Single_Quarter\");\n break;\n case BI.DynamicDateCard.TYPE.MONTH:\n text = BI.i18nText(\"BI-Basic_Month\");\n break;\n case BI.DynamicDateCard.TYPE.WEEK:\n text = BI.i18nText(\"BI-Basic_Week\");\n break;\n case BI.DynamicDateCard.TYPE.DAY:\n text = BI.i18nText(\"BI-Basic_Day\");\n break;\n case BI.DynamicDateCard.TYPE.WORK_DAY:\n default:\n text = BI.i18nText(\"BI-Basic_Work_Day\");\n break;\n }\n return text;\n },\n\n setValue: function (v) {\n v = v || {};\n v.value = v.value || 0;\n v.offset = v.offset || 0;\n this.editor.setValue(v.value);\n this.offsetCombo.setValue(v.offset);\n },\n\n getValue: function () {\n return {\n dateType: this.options.dateType,\n value: this.editor.getValue(),\n offset: this.offsetCombo.getValue()[0]\n };\n }\n\n});\nBI.DynamicDateParamItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_date_param_item\", BI.DynamicDateParamItem);\n","BI.DynamicDatePopup = BI.inherit(BI.Widget, {\n constants: {\n tabHeight: 30,\n buttonHeight: 24\n },\n\n props: {\n baseCls: \"bi-dynamic-date-popup\",\n width: 248,\n height: 344\n },\n\n _init: function () {\n BI.DynamicDatePopup.superclass._init.apply(this, arguments);\n var self = this, opts = this.options, c = this.constants;\n this.storeValue = {type: BI.DynamicDateCombo.Static};\n BI.createWidget({\n element: this,\n type: \"bi.vtape\",\n items: [{\n el: this._getTabJson()\n }, {\n el: {\n type: \"bi.grid\",\n items: [[{\n type: \"bi.text_button\",\n cls: \"bi-high-light bi-split-top\",\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Clear\"),\n textHeight: c.buttonHeight - 1,\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-left bi-split-right bi-high-light bi-split-top\",\n shadow: true,\n textHeight: c.buttonHeight - 1,\n text: BI.i18nText(\"BI-Multi_Date_Today\"),\n ref: function () {\n self.textButton = this;\n },\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-high-light bi-split-top\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_OK\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE);\n }\n }]\n }]]\n },\n height: 24\n }]\n });\n this.setValue(opts.value);\n },\n\n _getTabJson: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.tab\",\n ref: function () {\n self.dateTab = this;\n },\n tab: {\n type: \"bi.linear_segment\",\n cls: \"bi-split-bottom\",\n height: this.constants.tabHeight,\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Multi_Date_YMD\"),\n value: BI.DynamicDateCombo.Static\n }, {\n text: BI.i18nText(\"BI-Basic_Dynamic_Title\"),\n value: BI.DynamicDateCombo.Dynamic\n }], {\n textAlign: \"center\"\n })\n },\n cardCreator: function (v) {\n switch (v) {\n case BI.DynamicDateCombo.Dynamic:\n return {\n type: \"bi.dynamic_date_card\",\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self._setInnerValue(self.year, v);\n }\n }],\n ref: function () {\n self.dynamicPane = this;\n }\n };\n case BI.DynamicDateCombo.Static:\n default:\n return {\n type: \"bi.date_calendar_popup\",\n behaviors: o.behaviors,\n min: self.options.min,\n max: self.options.max,\n listeners: [{\n eventName: BI.DateCalendarPopup.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDatePopup.EVENT_CHANGE);\n }\n }],\n ref: function () {\n self.ymd = this;\n }\n };\n }\n },\n listeners: [{\n eventName: BI.Tab.EVENT_CHANGE,\n action: function () {\n var v = self.dateTab.getSelect();\n switch (v) {\n case BI.DynamicDateCombo.Static:\n var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());\n self.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n });\n self._setInnerValue();\n break;\n case BI.DynamicDateCombo.Dynamic:\n default:\n if(self.storeValue && self.storeValue.type === BI.DynamicDateCombo.Dynamic) {\n self.dynamicPane.setValue(self.storeValue.value);\n }else{\n self.dynamicPane.setValue({\n year: 0\n });\n }\n self._setInnerValue();\n break;\n }\n }\n }]\n };\n },\n\n _setInnerValue: function () {\n if (this.dateTab.getSelect() === BI.DynamicDateCombo.Static) {\n this.textButton.setValue(BI.i18nText(\"BI-Multi_Date_Today\"));\n this.textButton.setEnable(true);\n } else {\n var date = BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());\n date = BI.print(date, \"%Y-%X-%d\");\n this.textButton.setValue(date);\n this.textButton.setEnable(false);\n }\n },\n\n _checkValueValid: function (value) {\n return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value);\n },\n\n setMinDate: function (minDate) {\n if (this.options.min !== minDate) {\n this.options.min = minDate;\n this.ymd.setMinDate(minDate);\n }\n },\n\n setMaxDate: function (maxDate) {\n if (this.options.max !== maxDate) {\n this.options.max = maxDate;\n this.ymd.setMaxDate(maxDate);\n }\n },\n\n setValue: function (v) {\n this.storeValue = v;\n var self = this;\n var type, value;\n v = v || {};\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n this.dateTab.setSelect(type);\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n this.dynamicPane.setValue(value);\n self._setInnerValue();\n break;\n case BI.DynamicDateCombo.Static:\n default:\n if (this._checkValueValid(value)) {\n var date = BI.getDate();\n this.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n });\n this.textButton.setValue(BI.i18nText(\"BI-Multi_Date_Today\"));\n } else {\n this.ymd.setValue(value);\n this.textButton.setValue(BI.i18nText(\"BI-Multi_Date_Today\"));\n }\n this.textButton.setEnable(true);\n break;\n }\n },\n\n getValue: function () {\n return {\n type: this.dateTab.getSelect(),\n value: this.dateTab.getValue()\n };\n }\n});\nBI.DynamicDatePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DynamicDatePopup.BUTTON_OK_EVENT_CHANGE = \"BUTTON_OK_EVENT_CHANGE\";\nBI.DynamicDatePopup.BUTTON_lABEL_EVENT_CHANGE = \"BUTTON_lABEL_EVENT_CHANGE\";\nBI.DynamicDatePopup.BUTTON_CLEAR_EVENT_CHANGE = \"BUTTON_CLEAR_EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_date_popup\", BI.DynamicDatePopup);","BI.DynamicDateTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4,\n vgap: 2,\n yearLength: 4,\n yearMonthLength: 6,\n yearFullMonthLength: 7,\n compareFormat: \"%Y-%X-%d\"\n },\n\n props: {\n extraCls: \"bi-date-trigger\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 24,\n format: \"\", // 显示的日期格式化方式\n allowEdit: true, // 是否允许编辑\n watermark: \"\"\n },\n\n _init: function () {\n BI.DynamicDateTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.storeTriggerValue = \"\";\n this.editor = BI.createWidget({\n type: \"bi.sign_editor\",\n height: o.height,\n validationChecker: function (v) {\n var formatStr = self._getStandardDateStr(v);\n var date = formatStr.match(/\\d+/g);\n !BI.isKey(o.format) && self._autoAppend(v, date);\n return self._dateCheck(formatStr) && BI.checkDateLegal(formatStr) && self._checkVoid({\n year: date[0] | 0,\n month: date[1] | 0,\n day: date[2] | 0\n });\n },\n quitChecker: function () {\n return false;\n },\n hgap: c.hgap,\n vgap: c.vgap,\n allowBlank: true,\n watermark: BI.isKey(o.watermark) ? o.watermark : BI.i18nText(\"BI-Basic_Unrestricted\"),\n errorText: function () {\n var str = \"\";\n if (!BI.isKey(o.format)) {\n str = self.editor.isEditing() ? BI.i18nText(\"BI-Date_Trigger_Error_Text\") : BI.i18nText(\"BI-Year_Trigger_Invalid_Text\");\n }\n return str;\n },\n title: BI.bind(this._getTitle, this)\n });\n this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () {\n self.fireEvent(BI.DynamicDateTrigger.EVENT_KEY_DOWN, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_FOCUS, function () {\n self.storeTriggerValue = self.getKey();\n self.fireEvent(BI.DynamicDateTrigger.EVENT_FOCUS);\n });\n this.editor.on(BI.SignEditor.EVENT_BLUR, function () {\n self.fireEvent(BI.DynamicDateTrigger.EVENT_BLUR);\n });\n this.editor.on(BI.SignEditor.EVENT_STOP, function () {\n self.fireEvent(BI.DynamicDateTrigger.EVENT_STOP);\n });\n this.editor.on(BI.SignEditor.EVENT_VALID, function () {\n self.fireEvent(BI.DynamicDateTrigger.EVENT_VALID);\n });\n this.editor.on(BI.SignEditor.EVENT_ERROR, function () {\n self.fireEvent(BI.DynamicDateTrigger.EVENT_ERROR);\n });\n this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () {\n var value = self.editor.getValue();\n if (BI.isNotNull(value)) {\n self.editor.setState(value);\n }\n\n if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) {\n var formatStr = self._getStandardDateStr(value);\n var date = formatStr.match(/\\d+/g);\n self.storeValue = {\n type: BI.DynamicDateCombo.Static,\n value: {\n year: date[0] | 0,\n month: date[1] | 0,\n day: date[2] | 0\n }\n };\n }\n self.fireEvent(BI.DynamicDateTrigger.EVENT_CONFIRM);\n });\n this.editor.on(BI.SignEditor.EVENT_SPACE, function () {\n if (self.editor.isValid()) {\n self.editor.blur();\n }\n });\n this.editor.on(BI.SignEditor.EVENT_START, function () {\n self.fireEvent(BI.DynamicDateTrigger.EVENT_START);\n });\n this.editor.on(BI.SignEditor.EVENT_CHANGE, function () {\n self.fireEvent(BI.DynamicDateTrigger.EVENT_CHANGE);\n });\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n el: this.editor\n }, {\n el: BI.createWidget(),\n width: 24\n }]\n });\n !o.allowEdit && BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.text\",\n title: BI.bind(this._getTitle, this)\n },\n left: 0,\n right: 24,\n top: 0,\n bottom: 0\n }]\n });\n this.setValue(o.value);\n },\n\n _getTitle: function () {\n var storeValue = this.storeValue || {};\n var type = storeValue.type || BI.DynamicDateCombo.Static;\n var value = storeValue.value;\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n var date = BI.getDate();\n date = BI.DynamicDateHelper.getCalculation(value);\n var dateStr = BI.print(date, this._getFormatString());\n return BI.isEmptyString(text) ? dateStr : (text + \":\" + dateStr);\n case BI.DynamicDateCombo.Static:\n default:\n if (BI.isNull(value) || BI.isNull(value.day)) {\n return \"\";\n }\n return BI.print(BI.getDate(value.year, (value.month - 1), value.day), this._getFormatString());\n }\n },\n\n _getStandardDateStr: function (v) {\n var c = this._const;\n var result = [0, 1, 2];\n var formatArray = this._getFormatString().match(/%./g);\n BI.each(formatArray, function (idx, v) {\n switch (v) {\n case \"%Y\":\n case \"%y\":\n result[0] = idx;\n break;\n case \"%X\":\n case \"%x\":\n result[1] = idx;\n break;\n case \"%d\":\n case \"%e\":\n default:\n result[2] = idx;\n break;\n }\n });\n // 这边不能直接用\\d+去切日期, 因为format格式可能是20190607这样的没有分割符的 = =\n // 先看一下是否是合法的, 如果合法就变成标准格式的走原来的流程, 不合法不关心\n var date = BI.parseDateTime(v, this._getFormatString());\n if(BI.print(date, this._getFormatString()) === v) {\n v = BI.print(date, c.compareFormat);\n result = [0, 1, 2];\n }\n var dateArray = v.match(/\\d+/g);\n var newArray = [];\n BI.each(dateArray, function (idx) {\n newArray[idx] = dateArray[result[idx]];\n });\n // 这边之所以不直接返回join结果是因为年的格式可能只有2位,所以需要format一下\n if(newArray.length === result.length && newArray[0].length === 2) {\n return BI.print(BI.parseDateTime(newArray.join(\"-\"), c.compareFormat), c.compareFormat);\n }\n // 这边format成-20-也没关系, 反正都是不合法的\n return newArray.join(\"-\");\n },\n\n _getFormatString: function () {\n return this.options.format || this._const.compareFormat;\n },\n\n _dateCheck: function (date) {\n return BI.print(BI.parseDateTime(date, \"%Y-%x-%d\"), \"%Y-%x-%d\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%d\"), \"%Y-%X-%d\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%x-%e\"), \"%Y-%x-%e\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%e\"), \"%Y-%X-%e\") === date;\n },\n _checkVoid: function (obj) {\n return !BI.checkDateVoid(obj.year, obj.month, obj.day, this.options.min, this.options.max)[0];\n },\n _autoAppend: function (v, dateObj) {\n if (BI.isNotNull(dateObj) && BI.checkDateLegal(v)) {\n switch (v.length) {\n case this._const.yearLength:\n if (this._yearCheck(v)) {\n this.editor.setValue(v + \"-\");\n }\n break;\n case this._const.yearMonthLength:\n case this._const.yearFullMonthLength:\n var splitMonth = v.split(\"-\")[1];\n if ((BI.isNotNull(splitMonth) && splitMonth.length === 2) || this._monthCheck(v)) {\n this.editor.setValue(v + \"-\");\n }\n break;\n }\n }\n },\n\n _yearCheck: function (v) {\n var date = BI.print(BI.parseDateTime(v, this._getFormatString()), this._const.compareFormat);\n return BI.print(BI.parseDateTime(v, \"%Y\"), \"%Y\") === v && date >= this.options.min && date <= this.options.max;\n },\n\n _monthCheck: function (v) {\n var date = BI.parseDateTime(v, this._getFormatString());\n var dateStr = BI.print(date, this._const.compareFormat);\n return (date.getMonth() >= 0 && (BI.print(BI.parseDateTime(v, \"%Y-%X\"), \"%Y-%X\") === v ||\n BI.print(BI.parseDateTime(v, \"%Y-%x\"), \"%Y-%x\") === v)) && dateStr >= this.options.min && dateStr <= this.options.max;\n },\n\n _setInnerValue: function (date) {\n var dateStr = BI.print(date, this._getFormatString());\n this.editor.setState(dateStr);\n this.editor.setValue(dateStr);\n },\n\n _getText: function (obj) {\n var value = \"\";\n var endText = \"\";\n if(BI.isNotNull(obj.year)) {\n if(BI.parseInt(obj.year) !== 0) {\n value += Math.abs(obj.year) + BI.i18nText(\"BI-Basic_Year\") + (obj.year < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Year\"), obj.position);\n }\n if(BI.isNotNull(obj.quarter)) {\n if(BI.parseInt(obj.quarter) !== 0) {\n value += Math.abs(obj.quarter) + BI.i18nText(\"BI-Basic_Single_Quarter\") + (obj.quarter < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Single_Quarter\"), obj.position);\n }\n if(BI.isNotNull(obj.month)) {\n if(BI.parseInt(obj.month) !== 0) {\n value += Math.abs(obj.month) + BI.i18nText(\"BI-Basic_Month\") + (obj.month < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Month\"), obj.position);\n }\n if(BI.isNotNull(obj.week)) {\n if(BI.parseInt(obj.week) !== 0) {\n value += Math.abs(obj.week) + BI.i18nText(\"BI-Basic_Week\") + (obj.week < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Week\"), obj.position);\n }\n if(BI.isNotNull(obj.day)) {\n if(BI.parseInt(obj.day) !== 0) {\n value += Math.abs(obj.day) + BI.i18nText(\"BI-Basic_Day\") + (obj.day < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = BI.size(obj) === 1 ? getPositionText(BI.i18nText(\"BI-Basic_Month\"), obj.position) : \"\";\n }\n if(BI.isNotNull(obj.workDay) && BI.parseInt(obj.workDay) !== 0) {\n value += Math.abs(obj.workDay) + BI.i18nText(\"BI-Basic_Work_Day\") + (obj.workDay < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n return value + endText;\n\n function getPositionText (baseText, position) {\n switch (position) {\n case BI.DynamicDateCard.OFFSET.BEGIN:\n return baseText + BI.i18nText(\"BI-Basic_Begin_Start\");\n case BI.DynamicDateCard.OFFSET.END:\n return baseText + BI.i18nText(\"BI-Basic_End_Stop\");\n case BI.DynamicDateCard.OFFSET.CURRENT:\n default:\n return BI.i18nText(\"BI-Basic_Current_Day\");\n }\n }\n },\n\n setValue: function (v) {\n var type, value, self = this;\n var date = BI.getDate();\n this.storeValue = v;\n if (BI.isNotNull(v)) {\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n }\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n date = BI.DynamicDateHelper.getCalculation(value);\n this._setInnerValue(date, text);\n break;\n case BI.DynamicDateCombo.Static:\n default:\n if (BI.isNull(value) || BI.isNull(value.day)) {\n this.editor.setState(\"\");\n this.editor.setValue(\"\");\n } else {\n var dateStr = BI.print(BI.getDate(value.year, (value.month - 1), value.day), this._getFormatString());\n this.editor.setState(dateStr);\n this.editor.setValue(dateStr);\n }\n break;\n }\n },\n\n setMinDate: function (minDate) {\n if (BI.isNotEmptyString(this.options.min)) {\n this.options.min = minDate;\n }\n },\n\n setMaxDate: function (maxDate) {\n if (BI.isNotEmptyString(this.options.max)) {\n this.options.max = maxDate;\n }\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n getValue: function () {\n return this.storeValue;\n }\n\n});\n\nBI.DynamicDateTrigger.EVENT_BLUR = \"EVENT_BLUR\";\nBI.DynamicDateTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicDateTrigger.EVENT_START = \"EVENT_START\";\nBI.DynamicDateTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.DynamicDateTrigger.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicDateTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DynamicDateTrigger.EVENT_VALID = \"EVENT_VALID\";\nBI.DynamicDateTrigger.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicDateTrigger.EVENT_TRIGGER_CLICK = \"EVENT_TRIGGER_CLICK\";\nBI.DynamicDateTrigger.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.shortcut(\"bi.dynamic_date_trigger\", BI.DynamicDateTrigger);\n","BI.DynamicDateTimeCombo = BI.inherit(BI.Single, {\n constants: {\n popupHeight: 259,\n popupWidth: 270,\n comboAdjustHeight: 1,\n border: 1\n },\n\n props: {\n baseCls: \"bi-dynamic-date-combo bi-border bi-focus-shadow bi-border-radius\",\n height: 22,\n minDate: \"1900-01-01\",\n maxDate: \"2099-12-31\",\n format: \"\",\n allowEdit: true\n },\n\n\n render: function () {\n var self = this, opts = this.options;\n this.storeTriggerValue = \"\";\n var date = BI.getDate();\n this.storeValue = opts.value;\n return {\n type: \"bi.htape\",\n items: [{\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-change-h-font\",\n width: opts.height,\n height: opts.height,\n ref: function () {\n self.changeIcon = this;\n }\n },\n width: opts.height\n }, {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.combo\",\n destroyWhenHide: true,\n container: opts.container,\n ref: function () {\n self.combo = this;\n },\n toggle: false,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: {\n type: \"bi.dynamic_date_time_trigger\",\n min: opts.minDate,\n max: opts.maxDate,\n allowEdit: opts.allowEdit,\n watermark: opts.watermark,\n format: opts.format,\n height: opts.height,\n value: opts.value,\n ref: function () {\n self.trigger = this;\n },\n listeners: [{\n eventName: BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN,\n action: function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n }\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_KEY_DOWN, arguments);\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_STOP,\n action: function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK,\n action: function () {\n self.combo.toggle();\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_FOCUS,\n action: function () {\n self.storeTriggerValue = self.trigger.getKey();\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_ERROR,\n action: function () {\n self.storeValue = {\n type: BI.DynamicDateTimeCombo.Static,\n value: {\n year: date.getFullYear(),\n month: date.getMonth() + 1\n }\n };\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_ERROR);\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_VALID,\n action: function () {\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_VALID);\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CHANGE);\n }\n }, {\n eventName: BI.DynamicDateTimeTrigger.EVENT_CONFIRM,\n action: function () {\n if (self.combo.isViewVisible()) {\n return;\n }\n var dateStore = self.storeTriggerValue;\n var dateObj = self.trigger.getKey();\n if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) {\n self.storeValue = self.trigger.getValue();\n self.setValue(self.trigger.getValue());\n } else if (BI.isEmptyString(dateObj)) {\n self.storeValue = null;\n self.trigger.setValue();\n }\n self._checkDynamicValue(self.storeValue);\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM);\n }\n }]\n },\n adjustLength: this.constants.comboAdjustHeight,\n popup: {\n el: {\n type: \"bi.dynamic_date_time_popup\",\n behaviors: opts.behaviors,\n min: opts.minDate,\n max: opts.maxDate,\n ref: function () {\n self.popup = this;\n },\n listeners: [{\n eventName: BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE,\n action: function () {\n self.setValue();\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE,\n action: function () {\n var date = BI.getDate();\n self.setValue({\n type: BI.DynamicDateTimeCombo.Static,\n value: {\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate(),\n hour: 0,\n minute: 0,\n second: 0\n }\n });\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE,\n action: function () {\n var value = self.popup.getValue();\n if(self._checkValue(value)) {\n self.setValue(value);\n }\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicDateTimePopup.EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_CONFIRM);\n }\n }]\n },\n stopPropagation: false\n },\n listeners: [{\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.popup.setValue(self.storeValue);\n self.popup.setMinDate(opts.minDate);\n self.popup.setMaxDate(opts.maxDate);\n self.fireEvent(BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }],\n // DEC-4250 和复选下拉一样,点击不收起\n hideChecker: function (e) {\n return self.triggerBtn.element.find(e.target).length === 0;\n }\n },\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-font\",\n width: opts.height,\n height: opts.height,\n listeners: [{\n eventName: BI.IconButton.EVENT_CHANGE,\n action: function () {\n if (self.combo.isViewVisible()) {\n // self.combo.hideView();\n } else {\n self.combo.showView();\n }\n }\n }],\n ref: function () {\n self.triggerBtn = this;\n }\n },\n top: 0,\n right: 0\n }]\n }],\n ref: function (_ref) {\n self.comboWrapper = _ref;\n }\n };\n },\n\n mounted: function () {\n this._checkDynamicValue(this.storeValue);\n },\n\n _checkDynamicValue: function (v) {\n var o = this.options;\n var type = null;\n if (BI.isNotNull(v)) {\n type = v.type;\n }\n switch (type) {\n case BI.DynamicDateTimeCombo.Dynamic:\n this.changeIcon.setVisible(true);\n this.comboWrapper.attr(\"items\")[0].width = o.height;\n this.comboWrapper.resize();\n break;\n default:\n this.comboWrapper.attr(\"items\")[0].width = 0;\n this.comboWrapper.resize();\n this.changeIcon.setVisible(false);\n break;\n }\n },\n\n _checkValue: function (v) {\n switch (v.type) {\n case BI.DynamicDateCombo.Dynamic:\n return BI.isNotEmptyObject(v.value);\n case BI.DynamicDateCombo.Static:\n default:\n return true;\n }\n },\n\n setMinDate: function (minDate) {\n var o = this.options;\n o.minDate = minDate;\n this.trigger.setMinDate(minDate);\n this.popup && this.popup.setMinDate(minDate);\n },\n\n setMaxDate: function (maxDate) {\n var o = this.options;\n o.maxDate = maxDate;\n this.trigger.setMaxDate(maxDate);\n this.popup && this.popup.setMaxDate(maxDate);\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.trigger.setValue(v);\n this._checkDynamicValue(v);\n },\n getValue: function () {\n return this.storeValue;\n },\n getKey: function () {\n return this.trigger.getKey();\n },\n hidePopupView: function () {\n this.combo.hideView();\n },\n\n isValid: function () {\n return this.trigger.isValid();\n }\n});\n\nBI.DynamicDateTimeCombo.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.DynamicDateTimeCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicDateTimeCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicDateTimeCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.DynamicDateTimeCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DynamicDateTimeCombo.EVENT_VALID = \"EVENT_VALID\";\nBI.DynamicDateTimeCombo.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n\nBI.shortcut(\"bi.dynamic_date_time_combo\", BI.DynamicDateTimeCombo);\n\nBI.extend(BI.DynamicDateTimeCombo, {\n Static: 1,\n Dynamic: 2\n});","BI.DynamicDateTimePopup = BI.inherit(BI.Widget, {\n constants: {\n tabHeight: 30,\n buttonHeight: 24\n },\n\n props: {\n baseCls: \"bi-dynamic-date-time-popup\",\n width: 248,\n height: 385\n },\n\n _init: function () {\n BI.DynamicDateTimePopup.superclass._init.apply(this, arguments);\n var self = this, opts = this.options, c = this.constants;\n this.storeValue = {type: BI.DynamicDateCombo.Static};\n BI.createWidget({\n element: this,\n type: \"bi.vtape\",\n items: [{\n el: this._getTabJson()\n }, {\n el: {\n type: \"bi.grid\",\n items: [[{\n type: \"bi.text_button\",\n cls: \"bi-high-light bi-split-top\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Clear\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-left bi-split-right bi-high-light bi-split-top\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Multi_Date_Today\"),\n ref: function () {\n self.textButton = this;\n },\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-high-light bi-split-top\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_OK\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE);\n }\n }]\n }]]\n },\n height: 24\n }]\n });\n this.setValue(opts.value);\n },\n\n _getTabJson: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.tab\",\n ref: function () {\n self.dateTab = this;\n },\n tab: {\n type: \"bi.linear_segment\",\n cls: \"bi-split-bottom\",\n height: this.constants.tabHeight,\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Multi_Date_YMD\"),\n value: BI.DynamicDateCombo.Static\n }, {\n text: BI.i18nText(\"BI-Basic_Dynamic_Title\"),\n value: BI.DynamicDateCombo.Dynamic\n }], {\n textAlign: \"center\"\n })\n },\n cardCreator: function (v) {\n switch (v) {\n case BI.DynamicDateCombo.Dynamic:\n return {\n type: \"bi.dynamic_date_card\",\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self._setInnerValue(self.year, v);\n }\n }],\n ref: function () {\n self.dynamicPane = this;\n }\n };\n case BI.DynamicDateCombo.Static:\n default:\n return {\n type: \"bi.vtape\",\n items: [{\n type: \"bi.date_calendar_popup\",\n behaviors: o.behaviors,\n min: self.options.min,\n max: self.options.max,\n ref: function () {\n self.ymd = this;\n }\n }, {\n el: {\n type: \"bi.dynamic_date_time_select\",\n cls: \"bi-split-top\",\n ref: function () {\n self.timeSelect = this;\n }\n },\n height: 40\n }]\n };\n }\n },\n listeners: [{\n eventName: BI.Tab.EVENT_CHANGE,\n action: function () {\n var v = self.dateTab.getSelect();\n switch (v) {\n case BI.DynamicDateCombo.Static:\n var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());\n self.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n });\n self.timeSelect.setValue();\n self._setInnerValue();\n break;\n case BI.DynamicDateCombo.Dynamic:\n default:\n if(self.storeValue && self.storeValue.type === BI.DynamicDateCombo.Dynamic) {\n self.dynamicPane.setValue(self.storeValue.value);\n }else{\n self.dynamicPane.setValue({\n year: 0\n });\n }\n self._setInnerValue();\n break;\n }\n }\n }]\n };\n },\n\n _setInnerValue: function () {\n if (this.dateTab.getSelect() === BI.DynamicDateCombo.Static) {\n this.textButton.setValue(BI.i18nText(\"BI-Multi_Date_Today\"));\n this.textButton.setEnable(true);\n } else {\n var date = BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());\n date = BI.print(date, \"%Y-%X-%d\");\n this.textButton.setValue(date);\n this.textButton.setEnable(false);\n }\n },\n\n _checkValueValid: function (value) {\n return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value);\n },\n\n setMinDate: function (minDate) {\n if (this.options.min !== minDate) {\n this.options.min = minDate;\n this.ymd.setMinDate(minDate);\n }\n },\n\n setMaxDate: function (maxDate) {\n if (this.options.max !== maxDate) {\n this.options.max = maxDate;\n this.ymd.setMaxDate(maxDate);\n }\n },\n\n setValue: function (v) {\n this.storeValue = v;\n var self = this;\n var type, value;\n v = v || {};\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n this.dateTab.setSelect(type);\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n this.dynamicPane.setValue(value);\n self._setInnerValue();\n break;\n case BI.DynamicDateCombo.Static:\n default:\n if (this._checkValueValid(value)) {\n var date = BI.getDate();\n this.ymd.setValue({\n year: date.getFullYear(),\n month: date.getMonth() + 1,\n day: date.getDate()\n });\n this.timeSelect.setValue();\n this.textButton.setValue(BI.i18nText(\"BI-Multi_Date_Today\"));\n } else {\n this.ymd.setValue(value);\n this.timeSelect.setValue({\n hour: value.hour,\n minute: value.minute,\n second: value.second\n });\n this.textButton.setValue(BI.i18nText(\"BI-Multi_Date_Today\"));\n }\n this.textButton.setEnable(true);\n break;\n }\n },\n\n getValue: function () {\n var type = this.dateTab.getSelect();\n return {\n type: type,\n value: type === BI.DynamicDateTimeCombo.Static ? BI.extend(this.ymd.getValue(), this.timeSelect.getValue()) : this.dynamicPane.getValue()\n };\n }\n});\nBI.DynamicDateTimePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DynamicDateTimePopup.BUTTON_OK_EVENT_CHANGE = \"BUTTON_OK_EVENT_CHANGE\";\nBI.DynamicDateTimePopup.BUTTON_lABEL_EVENT_CHANGE = \"BUTTON_lABEL_EVENT_CHANGE\";\nBI.DynamicDateTimePopup.BUTTON_CLEAR_EVENT_CHANGE = \"BUTTON_CLEAR_EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_date_time_popup\", BI.DynamicDateTimePopup);","BI.DynamicDateTimeSelect = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-date-time-select\"\n },\n\n render: function () {\n var self = this;\n return {\n type: \"bi.center_adapt\",\n items: [{\n type: \"bi.vertical_adapt\",\n items: [{\n el: {\n type: \"bi.number_editor\",\n ref: function () {\n self.hour = this;\n },\n validationChecker: function (v) {\n return BI.isNaturalNumber(v) && BI.parseInt(v) < 24;\n },\n errorText: function (v) {\n if(BI.isNumeric(v)) {\n return BI.i18nText(\"BI-Basic_Input_From_To_Number\", \"\\\"00-23\\\"\");\n }\n return BI.i18nText(\"BI-Numerical_Interval_Input_Data\");\n },\n listeners: [{\n eventName: BI.SignEditor.EVENT_CONFIRM,\n action: function () {\n var value = this.getValue();\n self._checkHour(value);\n this.setValue(self._formatValueToDoubleDigit(value));\n self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.SignEditor.EVENT_CHANGE,\n action: function () {\n var value = self._autoSwitch(this.getValue(), BI.DynamicDateTimeSelect.HOUR);\n this.setValue(value);\n }\n }],\n width: 60,\n height: 24\n }\n }, {\n type: \"bi.label\",\n text: \":\",\n width: 20\n }, {\n type: \"bi.number_editor\",\n ref: function () {\n self.minute = this;\n },\n validationChecker: function (v) {\n return BI.isNaturalNumber(v) && BI.parseInt(v) < 60;\n },\n errorText: function (v) {\n if(BI.isNumeric(v)) {\n return BI.i18nText(\"BI-Basic_Input_From_To_Number\", \"\\\"00-59\\\"\");\n }\n return BI.i18nText(\"BI-Numerical_Interval_Input_Data\");\n },\n listeners: [{\n eventName: BI.SignEditor.EVENT_CONFIRM,\n action: function () {\n var value = this.getValue();\n self._checkMinute(value);\n this.setValue(self._formatValueToDoubleDigit(value), BI.DynamicDateTimeSelect.MINUTE);\n self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.SignEditor.EVENT_CHANGE,\n action: function () {\n var value = self._autoSwitch(this.getValue(), BI.DynamicDateTimeSelect.MINUTE);\n this.setValue(value);\n }\n }],\n width: 60,\n height: 24\n }, {\n type: \"bi.label\",\n text: \":\",\n width: 20\n }, {\n type: \"bi.number_editor\",\n ref: function () {\n self.second = this;\n },\n validationChecker: function (v) {\n return BI.isNaturalNumber(v) && BI.parseInt(v) < 60;\n },\n errorText: function (v) {\n if(BI.isNumeric(v)) {\n return BI.i18nText(\"BI-Basic_Input_From_To_Number\", \"\\\"00-59\\\"\");\n }\n return BI.i18nText(\"BI-Numerical_Interval_Input_Data\");\n },\n listeners: [{\n eventName: BI.SignEditor.EVENT_CONFIRM,\n action: function () {\n var value = this.getValue();\n self._checkSecond(value);\n this.setValue(self._formatValueToDoubleDigit(value));\n self.fireEvent(BI.DynamicDateTimeSelect.EVENT_CONFIRM);\n }\n }],\n width: 60,\n height: 24\n }]\n }]\n };\n },\n\n _checkBorder: function (v) {\n v = v || {};\n this._checkHour(v.hour);\n this._checkMinute(v.minute);\n this._checkSecond(v.second);\n },\n\n _checkHour: function (value) {\n this.hour.setDownEnable(BI.parseInt(value) > 0);\n this.hour.setUpEnable(BI.parseInt(value) < 23);\n },\n\n _checkMinute: function (value) {\n this.minute.setDownEnable(BI.parseInt(value) > 0);\n this.minute.setUpEnable(BI.parseInt(value) < 59);\n },\n\n _checkSecond: function (value) {\n this.second.setDownEnable(BI.parseInt(value) > 0);\n this.second.setUpEnable(BI.parseInt(value) < 59);\n },\n\n _autoSwitch: function (v, type) {\n var limit = 0;\n var value = v + \"\";\n switch (type) {\n case BI.DynamicDateTimeSelect.HOUR:\n limit = 2;\n break;\n case BI.DynamicDateTimeSelect.MINUTE:\n limit = 5;\n break;\n default:\n break;\n }\n if(value.length === 1 && BI.parseInt(value) > limit) {\n value = \"0\" + value;\n }\n if (value.length === 2) {\n switch (type) {\n case BI.DynamicDateTimeSelect.HOUR:\n this.hour.isEditing() && this.minute.focus();\n break;\n case BI.DynamicDateTimeSelect.MINUTE:\n this.minute.isEditing() && this.second.focus();\n break;\n case BI.DynamicDateTimeSelect.SECOND:\n default:\n break;\n }\n }\n return value;\n },\n\n _formatValueToDoubleDigit: function (v) {\n if(BI.isNull(v) || BI.isEmptyString(v)) {\n v = 0;\n }\n var value = BI.parseInt(v);\n if(value < 10) {\n value = \"0\" + value;\n }\n return value;\n },\n\n _assertValue: function (v) {\n v = v || {};\n v.hour = this._formatValueToDoubleDigit(v.hour) || \"00\";\n v.minute = this._formatValueToDoubleDigit(v.minute) || \"00\";\n v.second = this._formatValueToDoubleDigit(v.second) || \"00\";\n return v;\n },\n\n getValue: function () {\n return {\n hour: BI.parseInt(this.hour.getValue()),\n minute: BI.parseInt(this.minute.getValue()),\n second: BI.parseInt(this.second.getValue())\n };\n },\n\n setValue: function (v) {\n v = this._assertValue(v);\n this.hour.setValue(v.hour);\n this.minute.setValue(v.minute);\n this.second.setValue(v.second);\n this._checkBorder(v);\n }\n\n});\nBI.DynamicDateTimeSelect.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.shortcut(\"bi.dynamic_date_time_select\", BI.DynamicDateTimeSelect);\n\nBI.extend(BI.DynamicDateTimeSelect, {\n HOUR: 1,\n MINUTE: 2,\n SECOND: 3\n});","BI.DynamicDateTimeTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4,\n vgap: 2,\n yearLength: 4,\n yearMonthLength: 6,\n yearFullMonthLength: 7,\n compareFormat: \"%Y-%X-%d %H:%M:%S\"\n },\n\n props: {\n extraCls: \"bi-date-time-trigger\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 24,\n format: \"\", // 显示的日期格式化方式\n allowEdit: true, // 是否允许编辑\n watermark: \"\"\n },\n\n _init: function () {\n BI.DynamicDateTimeTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.storeTriggerValue = \"\";\n this.editor = BI.createWidget({\n type: \"bi.sign_editor\",\n height: o.height,\n validationChecker: function (v) {\n var formatStr = self._getStandardDateStr(v);\n var date = formatStr.match(/\\d+/g);\n !BI.isKey(o.format) && self._autoAppend(v, date);\n return self._dateCheck(formatStr) && BI.checkDateLegal(formatStr) && self._checkVoid({\n year: date[0] | 0,\n month: date[1] | 0,\n day: date[2] | 0\n });\n },\n quitChecker: function () {\n return false;\n },\n hgap: c.hgap,\n vgap: c.vgap,\n allowBlank: true,\n watermark: BI.isKey(o.watermark) ? o.watermark : BI.i18nText(\"BI-Basic_Unrestricted\"),\n errorText: function () {\n var str = \"\";\n if (!BI.isKey(o.format)) {\n str = self.editor.isEditing() ? BI.i18nText(\"BI-Basic_Date_Time_Error_Text\") : BI.i18nText(\"BI-Year_Trigger_Invalid_Text\");\n }\n return str;\n },\n title: BI.bind(this._getTitle, this)\n });\n this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () {\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_KEY_DOWN, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_FOCUS, function () {\n self.storeTriggerValue = self.getKey();\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_FOCUS);\n });\n this.editor.on(BI.SignEditor.EVENT_BLUR, function () {\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_BLUR);\n });\n this.editor.on(BI.SignEditor.EVENT_STOP, function () {\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_STOP);\n });\n this.editor.on(BI.SignEditor.EVENT_VALID, function () {\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_VALID);\n });\n this.editor.on(BI.SignEditor.EVENT_ERROR, function () {\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_ERROR);\n });\n this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () {\n var value = self.editor.getValue();\n if (BI.isNotNull(value)) {\n self.editor.setState(value);\n }\n\n if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) {\n var formatStr = self._getStandardDateStr(value);\n var date = formatStr.match(/\\d+/g);\n self.storeValue = {\n type: BI.DynamicDateCombo.Static,\n value: {\n year: date[0] | 0,\n month: date[1] | 0,\n day: date[2] | 0,\n hour: date[3] | 0,\n minute: date[4] | 0,\n second: date[5] | 0\n }\n };\n }\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CONFIRM);\n });\n this.editor.on(BI.SignEditor.EVENT_START, function () {\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_START);\n });\n this.editor.on(BI.SignEditor.EVENT_CHANGE, function () {\n self.fireEvent(BI.DynamicDateTimeTrigger.EVENT_CHANGE);\n });\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [{\n el: this.editor\n }, {\n el: BI.createWidget(),\n width: 24\n }]\n });\n\n !o.allowEdit && BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.text\",\n title: BI.bind(this._getTitle, this)\n },\n left: 0,\n right: 24,\n top: 0,\n bottom: 0\n }]\n });\n this.setValue(o.value);\n },\n\n _getTitle: function () {\n var storeValue = this.storeValue || {};\n var type = storeValue.type || BI.DynamicDateCombo.Static;\n var value = storeValue.value;\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n var date = BI.DynamicDateHelper.getCalculation(value);\n var dateStr = BI.print(date, this._getFormatString());\n return BI.isEmptyString(text) ? dateStr : (text + \":\" + dateStr);\n case BI.DynamicDateCombo.Static:\n default:\n if (BI.isNull(value) || BI.isNull(value.day)) {\n return \"\";\n }\n return BI.print(BI.getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0,\n value.second || 0), this._getFormatString());\n }\n },\n\n _getStandardDateStr: function (v) {\n var c = this._const;\n var result = [];\n var hasSecond = false;\n var formatArray = this._getFormatString().match(/%./g);\n BI.each(formatArray, function (idx, v) {\n switch (v) {\n case \"%Y\":\n case \"%y\":\n result[0] = idx;\n break;\n case \"%X\":\n case \"%x\":\n result[1] = idx;\n break;\n case \"%d\":\n case \"%e\":\n result[2] = idx;\n break;\n case \"%S\":\n hasSecond = true;\n break;\n default:\n break;\n }\n });\n // 这边不能直接用\\d+去切日期, 因为format格式可能是20190607这样的没有分割符的 = =\n // 先看一下是否是合法的, 如果合法就变成标准格式的走原来的流程, 不合法不关心\n var date = BI.parseDateTime(v, this._getFormatString());\n if(BI.print(date, this._getFormatString()) === v) {\n v = BI.print(date, c.compareFormat);\n result = [0, 1, 2];\n }\n var dateArray = v.match(/\\d+/g) || [];\n var newArray = [];\n // 处理乱序的年月日\n BI.each(dateArray.slice(0, 3), function (idx) {\n newArray[idx] = dateArray[result[idx]];\n });\n // 拼接时分秒和pm\n var suffixArray = dateArray.slice(3);\n // 时分秒补0\n BI.each(suffixArray, function (idx, v) {\n BI.isNumeric(v) && v.length === 1 && (suffixArray[idx] = \"0\" + v);\n });\n // hh:mm\n if(suffixArray.length === 2 && !hasSecond) {\n suffixArray.push(\"00\");\n }\n var suffixString = suffixArray.join(\":\");\n var dateString = newArray.slice(0, 3).join(\"-\");\n if (BI.isNotEmptyString(suffixString)) {\n dateString += \" \" + suffixString;\n }\n return dateString;\n },\n\n _getFormatString: function () {\n return this.options.format || this._const.compareFormat;\n },\n\n _dateCheck: function (date) {\n return BI.print(BI.parseDateTime(date, \"%Y-%x-%d %H:%M:%S\"), \"%Y-%x-%d %H:%M:%S\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%d %H:%M:%S\"), \"%Y-%X-%d %H:%M:%S\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%x-%e %H:%M:%S\"), \"%Y-%x-%e %H:%M:%S\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%e %H:%M:%S\"), \"%Y-%X-%e %H:%M:%S\") === date ||\n\n BI.print(BI.parseDateTime(date, \"%Y-%x-%d\"), \"%Y-%x-%d\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%d\"), \"%Y-%X-%d\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%x-%e\"), \"%Y-%x-%e\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%e\"), \"%Y-%X-%e\") === date;\n },\n _checkVoid: function (obj) {\n return !BI.checkDateVoid(obj.year, obj.month, obj.day, this.options.min, this.options.max)[0];\n },\n _autoAppend: function (v, dateObj) {\n if (BI.isNotNull(dateObj) && BI.checkDateLegal(v)) {\n switch (v.length) {\n case this._const.yearLength:\n if (this._yearCheck(v)) {\n this.editor.setValue(v + \"-\");\n }\n break;\n case this._const.yearMonthLength:\n case this._const.yearFullMonthLength:\n var splitMonth = v.split(\"-\")[1];\n if ((BI.isNotNull(splitMonth) && splitMonth.length === 2) || this._monthCheck(v)) {\n this.editor.setValue(v + \"-\");\n }\n break;\n }\n }\n },\n\n _yearCheck: function (v) {\n var date = BI.print(BI.parseDateTime(v, \"%Y-%X-%d\"), \"%Y-%X-%d\");\n return BI.print(BI.parseDateTime(v, \"%Y\"), \"%Y\") === v && date >= this.options.min && date <= this.options.max;\n },\n\n _monthCheck: function (v) {\n var date = BI.parseDateTime(v, \"%Y-%X-%d\");\n var dateStr = BI.print(date, \"%Y-%X-%d\");\n return (date.getMonth() > 0 && (BI.print(BI.parseDateTime(v, \"%Y-%X\"), \"%Y-%X\") === v ||\n BI.print(BI.parseDateTime(v, \"%Y-%x\"), \"%Y-%x\") === v)) && dateStr >= this.options.min && dateStr <= this.options.max;\n },\n\n _setInnerValue: function (date) {\n var dateStr = BI.print(date, this._getFormatString());\n this.editor.setState(dateStr);\n this.editor.setValue(dateStr);\n },\n\n _getText: function (obj) {\n var value = \"\";\n var endText = \"\";\n if(BI.isNotNull(obj.year)) {\n if(BI.parseInt(obj.year) !== 0) {\n value += Math.abs(obj.year) + BI.i18nText(\"BI-Basic_Year\") + (obj.year < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Year\"), obj.position);\n }\n if(BI.isNotNull(obj.quarter)) {\n if(BI.parseInt(obj.quarter) !== 0) {\n value += Math.abs(obj.quarter) + BI.i18nText(\"BI-Basic_Single_Quarter\") + (obj.quarter < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Single_Quarter\"), obj.position);\n }\n if(BI.isNotNull(obj.month)) {\n if(BI.parseInt(obj.month) !== 0) {\n value += Math.abs(obj.month) + BI.i18nText(\"BI-Basic_Month\") + (obj.month < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Month\"), obj.position);\n }\n if(BI.isNotNull(obj.week)) {\n if(BI.parseInt(obj.week) !== 0) {\n value += Math.abs(obj.week) + BI.i18nText(\"BI-Basic_Week\") + (obj.week < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = getPositionText(BI.i18nText(\"BI-Basic_Week\"), obj.position);\n }\n if(BI.isNotNull(obj.day)) {\n if(BI.parseInt(obj.day) !== 0) {\n value += Math.abs(obj.day) + BI.i18nText(\"BI-Basic_Day\") + (obj.day < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n endText = BI.size(obj) === 1 ? getPositionText(BI.i18nText(\"BI-Basic_Month\"), obj.position) : \"\";\n }\n if(BI.isNotNull(obj.workDay) && BI.parseInt(obj.workDay) !== 0) {\n value += Math.abs(obj.workDay) + BI.i18nText(\"BI-Basic_Work_Day\") + (obj.workDay < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n return value + endText;\n\n function getPositionText (baseText, position) {\n switch (position) {\n case BI.DynamicDateCard.OFFSET.BEGIN:\n return baseText + BI.i18nText(\"BI-Basic_Begin_Start\");\n case BI.DynamicDateCard.OFFSET.END:\n return baseText + BI.i18nText(\"BI-Basic_End_Stop\");\n case BI.DynamicDateCard.OFFSET.CURRENT:\n default:\n return BI.i18nText(\"BI-Basic_Current_Day\");\n }\n }\n },\n\n setMinDate: function (minDate) {\n if (BI.isNotEmptyString(this.options.min)) {\n this.options.min = minDate;\n }\n },\n\n setMaxDate: function (maxDate) {\n if (BI.isNotEmptyString(this.options.max)) {\n this.options.max = maxDate;\n }\n },\n\n setValue: function (v) {\n var type, value, self = this;\n var date = BI.getDate();\n this.storeValue = v;\n if (BI.isNotNull(v)) {\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n }\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n date = BI.DynamicDateHelper.getCalculation(value);\n this._setInnerValue(date, text);\n break;\n case BI.DynamicDateCombo.Static:\n default:\n if (BI.isNull(value) || BI.isNull(value.day)) {\n this.editor.setState(\"\");\n this.editor.setValue(\"\");\n } else {\n var dateStr = BI.print(BI.getDate(value.year, (value.month - 1), value.day, value.hour || 0, value.minute || 0,\n value.second || 0), this._getFormatString());\n this.editor.setState(dateStr);\n this.editor.setValue(dateStr);\n }\n break;\n }\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n getValue: function () {\n return this.storeValue;\n },\n\n isValid: function () {\n return this.editor.isValid();\n }\n\n});\n\nBI.DynamicDateTimeTrigger.EVENT_BLUR = \"EVENT_BLUR\";\nBI.DynamicDateTimeTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicDateTimeTrigger.EVENT_START = \"EVENT_START\";\nBI.DynamicDateTimeTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.DynamicDateTimeTrigger.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicDateTimeTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DynamicDateTimeTrigger.EVENT_VALID = \"EVENT_VALID\";\nBI.DynamicDateTimeTrigger.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicDateTimeTrigger.EVENT_TRIGGER_CLICK = \"EVENT_TRIGGER_CLICK\";\nBI.DynamicDateTimeTrigger.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.shortcut(\"bi.dynamic_date_time_trigger\", BI.DynamicDateTimeTrigger);","/**\n * Created by roy on 15/9/14.\n */\nBI.SearchEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.SearchEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-search-editor bi-border bi-focus-shadow\",\n height: 24,\n errorText: \"\",\n watermark: BI.i18nText(\"BI-Basic_Search\"),\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn\n });\n },\n _init: function () {\n this.options.height -= 2;\n BI.SearchEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height,\n watermark: o.watermark,\n allowBlank: true,\n hgap: 1,\n errorText: o.errorText,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n value: o.value\n });\n this.clear = BI.createWidget({\n type: \"bi.icon_button\",\n stopEvent: true,\n cls: \"close-font\"\n });\n this.clear.on(BI.IconButton.EVENT_CHANGE, function () {\n self.setValue(\"\");\n self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.STOPEDIT);\n // 从有内容到无内容的清空也是一次change\n self.fireEvent(BI.SearchEditor.EVENT_CHANGE);\n self.fireEvent(BI.SearchEditor.EVENT_CLEAR);\n });\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [\n {\n el: {\n type: \"bi.icon_label\",\n cls: \"search-font\"\n },\n width: 24\n },\n {\n el: self.editor\n },\n {\n el: this.clear,\n width: 24\n }\n ]\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.editor.on(BI.Editor.EVENT_FOCUS, function () {\n self.fireEvent(BI.SearchEditor.EVENT_FOCUS);\n });\n this.editor.on(BI.Editor.EVENT_BLUR, function () {\n self.fireEvent(BI.SearchEditor.EVENT_BLUR);\n });\n this.editor.on(BI.Editor.EVENT_CLICK, function () {\n self.fireEvent(BI.SearchEditor.EVENT_CLICK);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE, function () {\n self._checkClear();\n self.fireEvent(BI.SearchEditor.EVENT_CHANGE);\n });\n this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.SearchEditor.EVENT_KEY_DOWN, v);\n });\n this.editor.on(BI.Editor.EVENT_SPACE, function () {\n self.fireEvent(BI.SearchEditor.EVENT_SPACE);\n });\n this.editor.on(BI.Editor.EVENT_BACKSPACE, function () {\n self.fireEvent(BI.SearchEditor.EVENT_BACKSPACE);\n });\n\n\n this.editor.on(BI.Editor.EVENT_VALID, function () {\n self.fireEvent(BI.SearchEditor.EVENT_VALID);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self.fireEvent(BI.SearchEditor.EVENT_ERROR);\n });\n this.editor.on(BI.Editor.EVENT_ENTER, function () {\n self.fireEvent(BI.SearchEditor.EVENT_ENTER);\n });\n this.editor.on(BI.Editor.EVENT_RESTRICT, function () {\n self.fireEvent(BI.SearchEditor.EVENT_RESTRICT);\n });\n this.editor.on(BI.Editor.EVENT_EMPTY, function () {\n self._checkClear();\n self.fireEvent(BI.SearchEditor.EVENT_EMPTY);\n });\n this.editor.on(BI.Editor.EVENT_REMOVE, function () {\n self.fireEvent(BI.SearchEditor.EVENT_REMOVE);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self.fireEvent(BI.SearchEditor.EVENT_CONFIRM);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self.fireEvent(BI.SearchEditor.EVENT_CHANGE_CONFIRM);\n });\n this.editor.on(BI.Editor.EVENT_START, function () {\n self.fireEvent(BI.SearchEditor.EVENT_START);\n });\n this.editor.on(BI.Editor.EVENT_PAUSE, function () {\n self.fireEvent(BI.SearchEditor.EVENT_PAUSE);\n });\n this.editor.on(BI.Editor.EVENT_STOP, function () {\n self.fireEvent(BI.SearchEditor.EVENT_STOP);\n });\n\n this.clear.invisible();\n },\n\n _checkClear: function () {\n if (!this.getValue()) {\n this.clear.invisible();\n } else {\n this.clear.visible();\n }\n },\n\n setWaterMark: function (v) {\n this.options.watermark = v;\n this.editor.setWaterMark(v);\n },\n\n focus: function () {\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n },\n\n getValue: function () {\n if (this.isValid()) {\n return this.editor.getValue();\n }\n },\n\n getKeywords: function () {\n var val = this.editor.getLastChangedValue();\n var keywords = val.match(/[\\S]+/g);\n if (BI.isEndWithBlank(val)) {\n return keywords.concat([\" \"]);\n }\n return keywords;\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n setValue: function (v) {\n this.editor.setValue(v);\n if (BI.isKey(v)) {\n this.clear.visible();\n }\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n isValid: function () {\n return this.editor.isValid();\n }\n});\nBI.SearchEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SearchEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SearchEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.SearchEditor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.SearchEditor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.SearchEditor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.SearchEditor.EVENT_BACKSPACE = \"EVENT_BACKSPACE\";\nBI.SearchEditor.EVENT_CLEAR = \"EVENT_CLEAR\";\n\nBI.SearchEditor.EVENT_START = \"EVENT_START\";\nBI.SearchEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.SearchEditor.EVENT_STOP = \"EVENT_STOP\";\nBI.SearchEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.SearchEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.SearchEditor.EVENT_VALID = \"EVENT_VALID\";\nBI.SearchEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.SearchEditor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.SearchEditor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.SearchEditor.EVENT_REMOVE = \"EVENT_REMOVE\";\nBI.SearchEditor.EVENT_EMPTY = \"EVENT_EMPTY\";\nBI.shortcut(\"bi.search_editor\", BI.SearchEditor);","/**\n * 小号搜索框\n * Created by GUY on 2015/9/29.\n * @class BI.SmallSearchEditor\n * @extends BI.SearchEditor\n */\nBI.SmallSearchEditor = BI.inherit(BI.SearchEditor, {\n _defaultConfig: function () {\n var conf = BI.SmallSearchEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-small-search-editor\",\n height: 20\n });\n },\n\n _init: function () {\n BI.SmallSearchEditor.superclass._init.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.small_search_editor\", BI.SmallSearchEditor);","/**\n * guy\n * @class BI.TextEditor\n * @extends BI.Single\n */\nBI.TextEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.TextEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-text-editor bi-border bi-focus-shadow\",\n hgap: 4,\n vgap: 2,\n lgap: 0,\n rgap: 0,\n tgap: 0,\n bgap: 0,\n validationChecker: BI.emptyFn,\n quitChecker: BI.emptyFn,\n allowBlank: false,\n watermark: \"\",\n errorText: \"\",\n height: 24\n });\n },\n\n _init: function () {\n BI.TextEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNumber(o.height)) {\n this.element.css({height: o.height - 2});\n }\n if (BI.isNumber(o.width)) {\n this.element.css({width: o.width - 2});\n }\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height - 2,\n hgap: o.hgap,\n vgap: o.vgap,\n lgap: o.lgap,\n rgap: o.rgap,\n tgap: o.tgap,\n bgap: o.bgap,\n value: o.value,\n title: o.title,\n tipType: o.tipType,\n validationChecker: o.validationChecker,\n quitChecker: o.quitChecker,\n allowBlank: o.allowBlank,\n watermark: o.watermark,\n errorText: o.errorText\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.editor.on(BI.Editor.EVENT_FOCUS, function () {\n self.fireEvent(BI.TextEditor.EVENT_FOCUS);\n });\n this.editor.on(BI.Editor.EVENT_BLUR, function () {\n self.fireEvent(BI.TextEditor.EVENT_BLUR);\n });\n this.editor.on(BI.Editor.EVENT_CLICK, function () {\n self.fireEvent(BI.TextEditor.EVENT_CLICK);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE, function () {\n self.fireEvent(BI.TextEditor.EVENT_CHANGE);\n });\n this.editor.on(BI.Editor.EVENT_KEY_DOWN, function (v) {\n self.fireEvent(BI.TextEditor.EVENT_KEY_DOWN);\n });\n this.editor.on(BI.Editor.EVENT_SPACE, function (v) {\n self.fireEvent(BI.TextEditor.EVENT_SPACE);\n });\n this.editor.on(BI.Editor.EVENT_BACKSPACE, function (v) {\n self.fireEvent(BI.TextEditor.EVENT_BACKSPACE);\n });\n\n\n this.editor.on(BI.Editor.EVENT_VALID, function () {\n self.fireEvent(BI.TextEditor.EVENT_VALID);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self.fireEvent(BI.TextEditor.EVENT_CONFIRM);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self.fireEvent(BI.TextEditor.EVENT_CHANGE_CONFIRM);\n });\n this.editor.on(BI.Editor.EVENT_REMOVE, function (v) {\n self.fireEvent(BI.TextEditor.EVENT_REMOVE);\n });\n this.editor.on(BI.Editor.EVENT_START, function () {\n self.fireEvent(BI.TextEditor.EVENT_START);\n });\n this.editor.on(BI.Editor.EVENT_PAUSE, function () {\n self.fireEvent(BI.TextEditor.EVENT_PAUSE);\n });\n this.editor.on(BI.Editor.EVENT_STOP, function () {\n self.fireEvent(BI.TextEditor.EVENT_STOP);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self.fireEvent(BI.TextEditor.EVENT_ERROR, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ENTER, function () {\n self.fireEvent(BI.TextEditor.EVENT_ENTER);\n });\n this.editor.on(BI.Editor.EVENT_RESTRICT, function () {\n self.fireEvent(BI.TextEditor.EVENT_RESTRICT);\n });\n this.editor.on(BI.Editor.EVENT_EMPTY, function () {\n self.fireEvent(BI.TextEditor.EVENT_EMPTY);\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [this.editor]\n });\n },\n\n setWaterMark: function (v) {\n this.options.watermark = v;\n this.editor.setWaterMark(v);\n },\n\n focus: function () {\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n },\n\n setErrorText: function (text) {\n this.editor.setErrorText(text);\n },\n\n getErrorText: function () {\n return this.editor.getErrorText();\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n setValue: function (v) {\n this.editor.setValue(v);\n },\n\n getValue: function () {\n return this.editor.getValue();\n }\n});\nBI.TextEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.TextEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.TextEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.TextEditor.EVENT_CLICK = \"EVENT_CLICK\";\nBI.TextEditor.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.TextEditor.EVENT_SPACE = \"EVENT_SPACE\";\nBI.TextEditor.EVENT_BACKSPACE = \"EVENT_BACKSPACE\";\n\nBI.TextEditor.EVENT_START = \"EVENT_START\";\nBI.TextEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.TextEditor.EVENT_STOP = \"EVENT_STOP\";\nBI.TextEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.TextEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.TextEditor.EVENT_VALID = \"EVENT_VALID\";\nBI.TextEditor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.TextEditor.EVENT_ENTER = \"EVENT_ENTER\";\nBI.TextEditor.EVENT_RESTRICT = \"EVENT_RESTRICT\";\nBI.TextEditor.EVENT_REMOVE = \"EVENT_REMOVE\";\nBI.TextEditor.EVENT_EMPTY = \"EVENT_EMPTY\";\n\nBI.shortcut(\"bi.text_editor\", BI.TextEditor);","/**\n * 小号搜索框\n * Created by GUY on 2015/9/29.\n * @class BI.SmallTextEditor\n * @extends BI.SearchEditor\n */\nBI.SmallTextEditor = BI.inherit(BI.TextEditor, {\n _defaultConfig: function () {\n var conf = BI.SmallTextEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-small-text-editor\",\n height: 20\n });\n },\n\n _init: function () {\n BI.SmallTextEditor.superclass._init.apply(this, arguments);\n }\n});\nBI.shortcut(\"bi.small_text_editor\", BI.SmallTextEditor);","/**\n * Created by zcf on 2016/9/26.\n */\nBI.IntervalSlider = BI.inherit(BI.Single, {\n _constant: {\n EDITOR_WIDTH: 58,\n EDITOR_R_GAP: 60,\n EDITOR_HEIGHT: 30,\n SLIDER_WIDTH_HALF: 15,\n SLIDER_WIDTH: 30,\n SLIDER_HEIGHT: 30,\n TRACK_HEIGHT: 24\n },\n\n props: {\n baseCls: \"bi-interval-slider bi-slider-track\",\n digit: false,\n unit: \"\"\n },\n\n render: function () {\n\n var self = this;\n var c = this._constant;\n this.enable = false;\n this.valueOne = \"\";\n this.valueTwo = \"\";\n this.calculation = new BI.AccurateCalculationModel();\n\n // this.backgroundTrack = BI.createWidget({\n // type: \"bi.layout\",\n // cls: \"background-track\",\n // height: c.TRACK_HEIGHT\n // });\n this.grayTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"gray-track\",\n height: 6\n });\n this.blueTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"blue-track bi-high-light-background\",\n height: 6\n });\n this.track = this._createTrackWrapper();\n\n this.labelOne = BI.createWidget({\n type: \"bi.sign_text_editor\",\n cls: \"slider-editor-button\",\n text: this.options.unit,\n allowBlank: false,\n width: c.EDITOR_WIDTH,\n validationChecker: function (v) {\n return self._checkValidation(v);\n }\n });\n this.labelOne.element.hover(function () {\n self.labelOne.element.removeClass(\"bi-border\").addClass(\"bi-border\");\n }, function () {\n self.labelOne.element.removeClass(\"bi-border\");\n });\n this.labelOne.on(BI.Editor.EVENT_CONFIRM, function () {\n var oldValueOne = self.valueOne;\n var v = BI.parseFloat(this.getValue());\n self.valueOne = v;\n var percent = self._getPercentByValue(v);\n var significantPercent = BI.parseFloat(percent.toFixed(1));// 分成1000份\n self._setSliderOnePosition(significantPercent);\n self._setBlueTrack();\n self._checkLabelPosition(oldValueOne, self.valueTwo, self.valueOne, self.valueTwo);\n self.fireEvent(BI.IntervalSlider.EVENT_CHANGE);\n });\n\n this.labelTwo = BI.createWidget({\n type: \"bi.sign_text_editor\",\n cls: \"slider-editor-button\",\n text: this.options.unit,\n allowBlank: false,\n width: c.EDITOR_WIDTH,\n validationChecker: function (v) {\n return self._checkValidation(v);\n }\n });\n this.labelTwo.element.hover(function () {\n self.labelTwo.element.removeClass(\"bi-border\").addClass(\"bi-border\");\n }, function () {\n self.labelTwo.element.removeClass(\"bi-border\");\n });\n this.labelTwo.on(BI.Editor.EVENT_CONFIRM, function () {\n var oldValueTwo = self.valueTwo;\n var v = BI.parseFloat(this.getValue());\n self.valueTwo = v;\n var percent = self._getPercentByValue(v);\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setSliderTwoPosition(significantPercent);\n self._setBlueTrack();\n self._checkLabelPosition(self.valueOne, oldValueTwo, self.valueOne, self.valueTwo);\n self.fireEvent(BI.IntervalSlider.EVENT_CHANGE);\n });\n\n this.sliderOne = BI.createWidget({\n type: \"bi.single_slider_button\"\n });\n this.sliderTwo = BI.createWidget({\n type: \"bi.single_slider_button\"\n });\n this._draggable(this.sliderOne, true);\n this._draggable(this.sliderTwo, false);\n this._setVisible(false);\n\n return {\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.track,\n width: \"100%\",\n height: c.TRACK_HEIGHT\n }]\n }],\n hgap: 7,\n height: c.TRACK_HEIGHT\n },\n top: 23,\n left: 0,\n width: \"100%\"\n },\n this._createLabelWrapper(),\n this._createSliderWrapper()\n ]\n };\n },\n\n _rePosBySizeAfterMove: function (size, isLeft) {\n var o = this.options;\n var percent = size * 100 / (this._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n var v = this._getValueByPercent(significantPercent);\n v = this._assertValue(v);\n v = o.digit === false ? v : v.toFixed(o.digit);\n var oldValueOne = this.valueOne, oldValueTwo = this.valueTwo;\n if(isLeft) {\n this._setSliderOnePosition(significantPercent);\n this.labelOne.setValue(v);\n this.valueOne = v;\n this._checkLabelPosition(oldValueOne, oldValueTwo, v, this.valueTwo);\n }else{\n this._setSliderTwoPosition(significantPercent);\n this.labelTwo.setValue(v);\n this.valueTwo = v;\n this._checkLabelPosition(oldValueOne, oldValueTwo, this.valueOne, v);\n }\n this._setBlueTrack();\n },\n\n _rePosBySizeAfterStop: function (size, isLeft) {\n var percent = size * 100 / (this._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n isLeft ? this._setSliderOnePosition(significantPercent) : this._setSliderTwoPosition(significantPercent);\n },\n\n _draggable: function (widget, isLeft) {\n var self = this, o = this.options;\n var startDrag = false;\n var size = 0, offset = 0, defaultSize = 0;\n var mouseMoveTracker = new BI.MouseMoveTracker(function (deltaX) {\n if (mouseMoveTracker.isDragging()) {\n startDrag = true;\n offset += deltaX;\n size = optimizeSize(defaultSize + offset);\n widget.element.addClass(\"dragging\");\n self._rePosBySizeAfterMove(size, isLeft);\n }\n }, function () {\n if (startDrag === true) {\n size = optimizeSize(size);\n self._rePosBySizeAfterStop(size, isLeft);\n size = 0;\n offset = 0;\n defaultSize = size;\n startDrag = false;\n }\n widget.element.removeClass(\"dragging\");\n mouseMoveTracker.releaseMouseMoves();\n self.fireEvent(BI.IntervalSlider.EVENT_CHANGE);\n }, window);\n widget.element.on(\"mousedown\", function (event) {\n if(!widget.isEnabled()) {\n return;\n }\n defaultSize = this.offsetLeft;\n optimizeSize(defaultSize);\n mouseMoveTracker.captureMouseMoves(event);\n });\n\n function optimizeSize (s) {\n return BI.clamp(s, 0, self._getGrayTrackLength());\n }\n },\n\n _createLabelWrapper: function () {\n var c = this._constant;\n return {\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.labelOne,\n top: 0,\n left: \"0%\"\n }]\n }, {\n type: \"bi.absolute\",\n items: [{\n el: this.labelTwo,\n top: 0,\n left: \"100%\"\n }]\n }],\n rgap: c.EDITOR_R_GAP,\n height: c.SLIDER_HEIGHT\n },\n top: 0,\n left: 0,\n width: \"100%\"\n };\n },\n\n _createSliderWrapper: function () {\n var c = this._constant;\n return {\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.sliderOne,\n top: 0,\n left: \"0%\"\n }]\n }, {\n type: \"bi.absolute\",\n items: [{\n el: this.sliderTwo,\n top: 0,\n left: \"100%\"\n }]\n }],\n hgap: c.SLIDER_WIDTH_HALF,\n height: c.SLIDER_HEIGHT\n },\n top: 20,\n left: 0,\n width: \"100%\"\n };\n },\n\n _createTrackWrapper: function () {\n return BI.createWidget({\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.grayTrack,\n top: 0,\n left: 0,\n width: \"100%\"\n }, {\n el: this.blueTrack,\n top: 0,\n left: 0,\n width: \"0%\"\n }]\n }],\n hgap: 8,\n height: 8\n },\n top: 8,\n left: 0,\n width: \"100%\"\n }]\n });\n },\n\n _checkValidation: function (v) {\n var o = this.options;\n var valid = false;\n // 像90.这样的既不属于整数又不属于小数,是不合法的值\n var dotText = (v + \"\").split(\".\")[1];\n if (BI.isEmptyString(dotText)) {\n }else{\n if (BI.isNumeric(v) && !(BI.isNull(v) || v < this.min || v > this.max)) {\n // 虽然规定了所填写的小数位数,但是我们认为所有的整数都是满足设置的小数位数的\n // 100等价于100.0 100.00 100.000\n if(o.digit === false || BI.isInteger(v)) {\n valid = true;\n }else{\n dotText = dotText || \"\";\n valid = (dotText.length === o.digit);\n }\n }\n }\n return valid;\n },\n\n _checkOverlap: function () {\n var labelOneLeft = this.labelOne.element[0].offsetLeft;\n var labelTwoLeft = this.labelTwo.element[0].offsetLeft;\n if (labelOneLeft <= labelTwoLeft) {\n if ((labelTwoLeft - labelOneLeft) < 90) {\n this.labelTwo.element.css({top: 40});\n } else {\n this.labelTwo.element.css({top: 0});\n }\n } else {\n if ((labelOneLeft - labelTwoLeft) < 90) {\n this.labelTwo.element.css({top: 40});\n } else {\n this.labelTwo.element.css({top: 0});\n }\n }\n },\n\n _checkLabelPosition: function (oldValueOne, oldValueTwo, valueOne, valueTwo, isLeft) {\n oldValueOne = BI.parseFloat(oldValueOne);\n oldValueTwo = BI.parseFloat(oldValueTwo);\n valueOne = BI.parseFloat(valueOne);\n valueTwo = BI.parseFloat(valueTwo);\n if((oldValueOne <= oldValueTwo && valueOne > valueTwo) || (oldValueOne >= oldValueTwo && valueOne < valueTwo)) {\n var isSliderOneLeft = BI.parseFloat(this.sliderOne.element[0].style.left) < BI.parseFloat(this.sliderTwo.element[0].style.left);\n this._resetLabelPosition(!isSliderOneLeft);\n }\n },\n\n _resetLabelPosition: function(needReverse) {\n this.labelOne.element.css({left: needReverse ? \"100%\" : \"0%\"});\n this.labelTwo.element.css({left: needReverse ? \"0%\" : \"100%\"});\n },\n\n _setSliderOnePosition: function (percent) {\n this.sliderOne.element.css({left: percent + \"%\"});\n },\n\n _setSliderTwoPosition: function (percent) {\n this.sliderTwo.element.css({left: percent + \"%\"});\n },\n\n _setBlueTrackLeft: function (percent) {\n this.blueTrack.element.css({left: percent + \"%\"});\n },\n\n _setBlueTrackWidth: function (percent) {\n this.blueTrack.element.css({width: percent + \"%\"});\n },\n\n _setBlueTrack: function () {\n var percentOne = this._getPercentByValue(this.labelOne.getValue());\n var percentTwo = this._getPercentByValue(this.labelTwo.getValue());\n if (percentOne <= percentTwo) {\n this._setBlueTrackLeft(percentOne);\n this._setBlueTrackWidth(percentTwo - percentOne);\n } else {\n this._setBlueTrackLeft(percentTwo);\n this._setBlueTrackWidth(percentOne - percentTwo);\n }\n },\n\n _setAllPosition: function (one, two) {\n this._setSliderOnePosition(one);\n this._setSliderTwoPosition(two);\n this._setBlueTrack();\n },\n\n _setVisible: function (visible) {\n this.sliderOne.setVisible(visible);\n this.sliderTwo.setVisible(visible);\n this.labelOne.setVisible(visible);\n this.labelTwo.setVisible(visible);\n },\n\n _setErrorText: function () {\n var errorText = BI.i18nText(\"BI-Basic_Please_Enter_Number_Between\", this.min, this.max);\n this.labelOne.setErrorText(errorText);\n this.labelTwo.setErrorText(errorText);\n },\n\n _getGrayTrackLength: function () {\n return this.grayTrack.element[0].scrollWidth;\n },\n\n // 其中取max-min后保留4为有效数字后的值的小数位数为最终value的精度\n // 端点处的值有可能因为min,max相差量级很大(precision很大)而丢失精度,此时直接返回端点值即可\n _getValueByPercent: function (percent) {// return (((max-min)*percent)/100+min)\n if (percent === 0) {\n return this.min;\n }\n if (percent === 100) {\n return this.max;\n }\n var sub = this.calculation.accurateSubtraction(this.max, this.min);\n var mul = this.calculation.accurateMultiplication(sub, percent);\n var div = this.calculation.accurateDivisionTenExponent(mul, 2);\n if(this.precision < 0) {\n var value = BI.parseFloat(this.calculation.accurateAddition(div, this.min));\n var reduceValue = Math.round(this.calculation.accurateDivisionTenExponent(value, -this.precision));\n return this.calculation.accurateMultiplication(reduceValue, Math.pow(10, -this.precision));\n }\n return BI.parseFloat(this.calculation.accurateAddition(div, this.min).toFixed(this.precision));\n\n },\n\n _getPercentByValue: function (v) {\n return (v - this.min) * 100 / (this.max - this.min);\n },\n\n _setDraggableEnable: function (enable) {\n this.sliderOne.setEnable(enable);\n this.sliderTwo.setEnable(enable);\n },\n\n _getPrecision: function () {\n // 计算每一份值的精度(最大值和最小值的差值保留4为有效数字后的精度)\n // 如果差值的整数位数大于4,toPrecision(4)得到的是科学计数法123456 => 1.235e+5\n // 返回非负值: 保留的小数位数\n // 返回负值: 保留的10^n精度中的n\n var sub = this.calculation.accurateSubtraction(this.max, this.min);\n var pre = sub.toPrecision(4);\n // 科学计数法\n var eIndex = pre.indexOf(\"e\");\n var arr = [];\n if(eIndex > -1) {\n arr = pre.split(\"e\");\n var decimalPartLength = BI.size(arr[0].split(\".\")[1]);\n var sciencePartLength = BI.parseInt(arr[1].substring(1));\n return decimalPartLength - sciencePartLength;\n }\n arr = pre.split(\".\");\n return arr.length > 1 ? arr[1].length : 0;\n\n },\n\n _assertValue: function (value) {\n if(value <= this.min) {\n return this.min;\n }\n if(value >= this.max) {\n return this.max;\n }\n return value;\n },\n\n _setEnable: function (b) {\n BI.IntervalSlider.superclass._setEnable.apply(this, [b]);\n if(b) {\n this.blueTrack.element.removeClass(\"disabled-blue-track\").addClass(\"blue-track\");\n } else {\n this.blueTrack.element.removeClass(\"blue-track\").addClass(\"disabled-blue-track\");\n }\n },\n\n getValue: function () {\n if (this.valueOne <= this.valueTwo) {\n return {min: this.valueOne, max: this.valueTwo};\n }\n return {min: this.valueTwo, max: this.valueOne};\n\n },\n\n setMinAndMax: function (v) {\n var minNumber = BI.parseFloat(v.min);\n var maxNumber = BI.parseFloat(v.max);\n if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber >= minNumber )) {\n this.min = minNumber;\n this.max = maxNumber;\n this.valueOne = minNumber;\n this.valueTwo = maxNumber;\n this.precision = this._getPrecision();\n this._setDraggableEnable(true);\n }\n if (maxNumber === minNumber) {\n this._setDraggableEnable(false);\n }\n },\n\n setValue: function (v) {\n var o = this.options;\n var valueOne = BI.parseFloat(v.min);\n var valueTwo = BI.parseFloat(v.max);\n valueOne = o.digit === false ? valueOne : BI.parseFloat(valueOne.toFixed(o.digit));\n valueTwo = o.digit === false ? valueTwo : BI.parseFloat(valueTwo.toFixed(o.digit));\n if (!isNaN(valueOne) && !isNaN(valueTwo)) {\n if (this._checkValidation(valueOne)) {\n this.valueOne = (this.valueOne <= this.valueTwo ? valueOne : valueTwo);\n }\n if (this._checkValidation(valueTwo)) {\n this.valueTwo = (this.valueOne <= this.valueTwo ? valueTwo : valueOne);\n }\n if (valueOne < this.min) {\n this.valueOne = this.min;\n }\n if (valueTwo > this.max) {\n this.valueTwo = this.max;\n }\n }\n },\n\n reset: function () {\n this._setVisible(false);\n this.enable = false;\n this.valueOne = \"\";\n this.valueTwo = \"\";\n this.min = NaN;\n this.max = NaN;\n this._setBlueTrackWidth(0);\n },\n\n populate: function () {\n var o = this.options;\n if (!isNaN(this.min) && !isNaN(this.max)) {\n this.enable = true;\n this._setVisible(true);\n this._setErrorText();\n if ((BI.isNumeric(this.valueOne) || BI.isNotEmptyString(this.valueOne)) && (BI.isNumeric(this.valueTwo) || BI.isNotEmptyString(this.valueTwo))) {\n this.labelOne.setValue(o.digit === false ? this.valueOne : BI.parseFloat(this.valueOne).toFixed(o.digit));\n this.labelTwo.setValue(o.digit === false ? this.valueTwo : BI.parseFloat(this.valueTwo).toFixed(o.digit));\n this._setAllPosition(this._getPercentByValue(this.valueOne), this._getPercentByValue(this.valueTwo));\n } else {\n this.labelOne.setValue(this.min);\n this.labelTwo.setValue(this.max);\n this._setAllPosition(0, 100);\n }\n this._resetLabelPosition(this.valueOne > this.valueTwo);\n }\n }\n});\nBI.IntervalSlider.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.interval_slider\", BI.IntervalSlider);","/**\n * Created by zcf on 2017/3/1.\n * 万恶的IEEE-754\n * 使用字符串精确计算含小数加法、减法、乘法和10的指数倍除法,支持负数\n */\nBI.AccurateCalculationModel = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.AccurateCalculationModel.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"\"\n });\n },\n\n _init: function () {\n BI.AccurateCalculationModel.superclass._init.apply(this, arguments);\n },\n\n _getMagnitude: function (n) {\n var magnitude = \"1\";\n for (var i = 0; i < n; i++) {\n magnitude += \"0\";\n }\n return BI.parseInt(magnitude);\n },\n\n _formatDecimal: function (stringNumber1, stringNumber2) {\n if (stringNumber1.numDecimalLength === stringNumber2.numDecimalLength) {\n return;\n }\n var magnitudeDiff = stringNumber1.numDecimalLength - stringNumber2.numDecimalLength;\n if (magnitudeDiff > 0) {\n var needAddZero = stringNumber2;\n } else {\n var needAddZero = stringNumber1;\n magnitudeDiff = (0 - magnitudeDiff);\n }\n for (var i = 0; i < magnitudeDiff; i++) {\n if (needAddZero.numDecimal === \"0\" && i === 0) {\n continue;\n }\n needAddZero.numDecimal += \"0\";\n }\n },\n\n _stringNumberFactory: function (num) {\n var strNum = num.toString();\n var numStrArray = strNum.split(\".\");\n var numInteger = numStrArray[0];\n if (numStrArray.length === 1) {\n var numDecimal = \"0\";\n var numDecimalLength = 0;\n } else {\n var numDecimal = numStrArray[1];\n var numDecimalLength = numStrArray[1].length;\n }\n return {\n numInteger: numInteger,\n numDecimal: numDecimal,\n numDecimalLength: numDecimalLength\n };\n },\n\n _accurateSubtraction: function (num1, num2) {// num1-num2 && num1>num2\n var stringNumber1 = this._stringNumberFactory(num1);\n var stringNumber2 = this._stringNumberFactory(num2);\n // 整数部分计算\n var integerResult = BI.parseInt(stringNumber1.numInteger) - BI.parseInt(stringNumber2.numInteger);\n // 小数部分\n this._formatDecimal(stringNumber1, stringNumber2);\n var decimalMaxLength = getDecimalMaxLength(stringNumber1, stringNumber2);\n\n if (BI.parseInt(stringNumber1.numDecimal) >= BI.parseInt(stringNumber2.numDecimal)) {\n var decimalResultTemp = (BI.parseInt(stringNumber1.numDecimal) - BI.parseInt(stringNumber2.numDecimal)).toString();\n var decimalResult = addZero(decimalResultTemp, decimalMaxLength);\n } else {// 否则借位\n integerResult--;\n var borrow = this._getMagnitude(decimalMaxLength);\n var decimalResultTemp = (borrow + BI.parseInt(stringNumber1.numDecimal) - BI.parseInt(stringNumber2.numDecimal)).toString();\n var decimalResult = addZero(decimalResultTemp, decimalMaxLength);\n }\n var result = integerResult + \".\" + decimalResult;\n return BI.parseFloat(result);\n\n function getDecimalMaxLength (num1, num2) {\n if (num1.numDecimal.length >= num2.numDecimal.length) {\n return num1.numDecimal.length;\n }\n return num2.numDecimal.length;\n }\n\n function addZero (resultTemp, length) {\n var diff = length - resultTemp.length;\n for (var i = 0; i < diff; i++) {\n resultTemp = \"0\" + resultTemp;\n }\n return resultTemp;\n }\n },\n\n _accurateAddition: function (num1, num2) {// 加法结合律\n var stringNumber1 = this._stringNumberFactory(num1);\n var stringNumber2 = this._stringNumberFactory(num2);\n // 整数部分计算\n var integerResult = BI.parseInt(stringNumber1.numInteger) + BI.parseInt(stringNumber2.numInteger);\n // 小数部分\n this._formatDecimal(stringNumber1, stringNumber2);\n\n var decimalResult = (BI.parseInt(stringNumber1.numDecimal) + BI.parseInt(stringNumber2.numDecimal)).toString();\n\n if (decimalResult !== \"0\") {\n if (decimalResult.length <= stringNumber1.numDecimal.length) {\n decimalResult = addZero(decimalResult, stringNumber1.numDecimal.length);\n } else {\n integerResult++;// 进一\n decimalResult = decimalResult.slice(1);\n }\n }\n var result = integerResult + \".\" + decimalResult;\n return BI.parseFloat(result);\n\n function addZero (resultTemp, length) {\n var diff = length - resultTemp.length;\n for (var i = 0; i < diff; i++) {\n resultTemp = \"0\" + resultTemp;\n }\n return resultTemp;\n }\n },\n\n _accurateMultiplication: function (num1, num2) {// 乘法分配律\n var stringNumber1 = this._stringNumberFactory(num1);\n var stringNumber2 = this._stringNumberFactory(num2);\n // 整数部分计算\n var integerResult = BI.parseInt(stringNumber1.numInteger) * BI.parseInt(stringNumber2.numInteger);\n // num1的小数和num2的整数\n var dec1Int2 = this._accurateDivisionTenExponent(BI.parseInt(stringNumber1.numDecimal) * BI.parseInt(stringNumber2.numInteger), stringNumber1.numDecimalLength);\n // num1的整数和num2的小数\n var int1dec2 = this._accurateDivisionTenExponent(BI.parseInt(stringNumber1.numInteger) * BI.parseInt(stringNumber2.numDecimal), stringNumber2.numDecimalLength);\n // 小数*小数\n var dec1dec2 = this._accurateDivisionTenExponent(BI.parseInt(stringNumber1.numDecimal) * BI.parseInt(stringNumber2.numDecimal), (stringNumber1.numDecimalLength + stringNumber2.numDecimalLength));\n\n return this._accurateAddition(this._accurateAddition(this._accurateAddition(integerResult, dec1Int2), int1dec2), dec1dec2);\n },\n\n _accurateDivisionTenExponent: function (num, n) {// num/10^n && n>0\n var stringNumber = this._stringNumberFactory(num);\n if (stringNumber.numInteger.length > n) {\n var integerResult = stringNumber.numInteger.slice(0, (stringNumber.numInteger.length - n));\n var partDecimalResult = stringNumber.numInteger.slice(-n);\n } else {\n var integerResult = \"0\";\n var partDecimalResult = addZero(stringNumber.numInteger, n);\n }\n var result = integerResult + \".\" + partDecimalResult + stringNumber.numDecimal;\n return BI.parseFloat(result);\n\n function addZero (resultTemp, length) {\n var diff = length - resultTemp.length;\n for (var i = 0; i < diff; i++) {\n resultTemp = \"0\" + resultTemp;\n }\n return resultTemp;\n }\n },\n\n accurateSubtraction: function (num1, num2) {\n if (num1 >= 0 && num2 >= 0) {\n if (num1 >= num2) {\n return this._accurateSubtraction(num1, num2);\n }\n return -this._accurateSubtraction(num2, num1);\n }\n if (num1 >= 0 && num2 < 0) {\n return this._accurateAddition(num1, -num2);\n }\n if (num1 < 0 && num2 >= 0) {\n return -this._accurateAddition(-num1, num2);\n }\n if (num1 < 0 && num2 < 0) {\n if (num1 >= num2) {\n return this._accurateSubtraction(-num2, -num1);\n }\n return this._accurateSubtraction(-num1, -num2);\n }\n },\n\n accurateAddition: function (num1, num2) {\n if (num1 >= 0 && num2 >= 0) {\n return this._accurateAddition(num1, num2);\n }\n if (num1 >= 0 && num2 < 0) {\n return this.accurateSubtraction(num1, -num2);\n }\n if (num1 < 0 && num2 >= 0) {\n return this.accurateSubtraction(num2, -num1);\n }\n if (num1 < 0 && num2 < 0) {\n return -this._accurateAddition(-num1, -num2);\n }\n },\n\n accurateMultiplication: function (num1, num2) {\n if (num1 >= 0 && num2 >= 0) {\n return this._accurateMultiplication(num1, num2);\n }\n if (num1 >= 0 && num2 < 0) {\n return -this._accurateMultiplication(num1, -num2);\n }\n if (num1 < 0 && num2 >= 0) {\n return -this._accurateMultiplication(-num1, num2);\n }\n if (num1 < 0 && num2 < 0) {\n return this._accurateMultiplication(-num1, -num2);\n }\n },\n\n accurateDivisionTenExponent: function (num1, n) {\n if (num1 >= 0) {\n return this._accurateDivisionTenExponent(num1, n);\n }\n return -this._accurateDivisionTenExponent(-num1, n);\n }\n});","/**\n * Created by roy on 15/8/14.\n */\nBI.DownListCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.DownListCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multilayer-down-list-combo\",\n height: 24,\n items: [],\n adjustLength: 0,\n direction: \"bottom\",\n trigger: \"click\",\n container: null,\n stopPropagation: false,\n el: {}\n });\n },\n\n _init: function () {\n BI.DownListCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.popupview = BI.createWidget({\n type: \"bi.multi_layer_down_list_popup\",\n items: o.items,\n chooseType: o.chooseType,\n value: o.value\n });\n\n this.popupview.on(BI.DownListPopup.EVENT_CHANGE, function (value) {\n self.fireEvent(BI.DownListCombo.EVENT_CHANGE, value);\n self.downlistcombo.hideView();\n });\n\n this.popupview.on(BI.DownListPopup.EVENT_SON_VALUE_CHANGE, function (value, fatherValue) {\n self.fireEvent(BI.DownListCombo.EVENT_SON_VALUE_CHANGE, value, fatherValue);\n self.downlistcombo.hideView();\n });\n\n\n this.downlistcombo = BI.createWidget({\n element: this,\n type: \"bi.combo\",\n trigger: o.trigger,\n isNeedAdjustWidth: false,\n container: o.container,\n adjustLength: o.adjustLength,\n direction: o.direction,\n stopPropagation: o.stopPropagation,\n el: BI.createWidget(o.el, {\n type: \"bi.icon_trigger\",\n extraCls: o.iconCls ? o.iconCls : \"pull-down-font\",\n width: o.width,\n height: o.height\n }),\n popup: {\n el: this.popupview,\n stopPropagation: o.stopPropagation,\n maxHeight: 1000\n }\n });\n\n this.downlistcombo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.fireEvent(BI.DownListCombo.EVENT_BEFORE_POPUPVIEW);\n });\n },\n\n hideView: function () {\n this.downlistcombo.hideView();\n },\n\n showView: function (e) {\n this.downlistcombo.showView(e);\n },\n\n populate: function (items) {\n this.popupview.populate(items);\n },\n\n setValue: function (v) {\n this.popupview.setValue(v);\n },\n getValue: function () {\n return this.popupview.getValue();\n }\n});\nBI.DownListCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.DownListCombo.EVENT_SON_VALUE_CHANGE = \"EVENT_SON_VALUE_CHANGE\";\nBI.DownListCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n\nBI.shortcut(\"bi.multi_layer_down_list_combo\", BI.DownListCombo);","/**\n * Created by roy on 15/9/8.\n * 处理popup中的item分组样式\n * 一个item分组中的成员大于一时,该分组设置为单选,并且默认状态第一个成员设置为已选择项\n */\nBI.MultiLayerDownListPopup = BI.inherit(BI.Pane, {\n constants: {\n nextIcon: \"pull-right-e-font\",\n height: 25,\n iconHeight: 12,\n iconWidth: 12,\n hgap: 0,\n vgap: 0,\n border: 1\n },\n _defaultConfig: function () {\n var conf = BI.MultiLayerDownListPopup.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: \"bi-down-list-popup\",\n items: [],\n chooseType: BI.Selection.Multi\n });\n },\n _init: function () {\n BI.MultiLayerDownListPopup.superclass._init.apply(this, arguments);\n this.singleValues = [];\n this.childValueMap = {};\n this.fatherValueMap = {};\n var self = this, o = this.options, children = this._createPopupItems(o.items);\n this.popup = BI.createWidget({\n type: \"bi.button_tree\",\n items: BI.createItems(children,\n {}, {\n adjustLength: -2\n }\n ),\n layouts: [{\n type: \"bi.vertical\",\n hgap: this.constants.hgap,\n vgap: this.constants.vgap\n }],\n value: this._digest(o.value),\n chooseType: o.chooseType\n });\n\n this.popup.on(BI.ButtonTree.EVENT_CHANGE, function (value, object) {\n var changedValue = value;\n if (BI.isNotNull(self.childValueMap[value])) {\n changedValue = self.childValueMap[value];\n var fatherValue = self.fatherValueMap[value];\n var fatherArrayValue = (fatherValue + \"\").split(\"_\");\n self.fireEvent(BI.MultiLayerDownListPopup.EVENT_SON_VALUE_CHANGE, changedValue, fatherArrayValue.length > 1 ? fatherArrayValue : fatherValue);\n } else {\n self.fireEvent(BI.MultiLayerDownListPopup.EVENT_CHANGE, changedValue, object);\n }\n\n\n if (!BI.contains(self.singleValues, changedValue)) {\n var item = self.getValue();\n var result = [];\n BI.each(item, function (i, valueObject) {\n if (valueObject.value != changedValue) {\n result.push(valueObject);\n }\n });\n self.setValue(result);\n }\n\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n items: [this.popup],\n vgap: 5\n });\n\n },\n _createPopupItems: function (items) {\n var self = this, result = [];\n BI.each(items, function (i, it) {\n var item_done = {\n type: \"bi.down_list_group\",\n items: []\n };\n\n BI.each(it, function (i, item) {\n if (BI.isNotEmptyArray(item.children) && !BI.isEmpty(item.el)) {\n item.type = \"bi.combo_group\";\n item.cls = \"down-list-group\";\n item.trigger = \"hover\";\n item.isNeedAdjustWidth = false;\n item.el.title = item.el.title || item.el.text;\n item.el.type = \"bi.down_list_group_item\";\n item.el.logic = {\n dynamic: true\n };\n item.el.height = self.constants.height;\n item.el.iconCls2 = self.constants.nextIcon;\n item.popup = {\n lgap: 1,\n el: {\n type: \"bi.button_tree\",\n chooseType: 0,\n layouts: [{\n type: \"bi.vertical\"\n }]\n\n },\n innerVGap: 5\n };\n item.el.childValues = [];\n BI.each(item.children, function (i, child) {\n child = child.el ? BI.extend(child.el, {children: child.children}) : child;\n var fatherValue = BI.deepClone(item.el.value);\n var childValue = BI.deepClone(child.value);\n self.singleValues.push(child.value);\n child.type = \"bi.down_list_item\";\n child.extraCls = \" child-down-list-item\";\n child.title = child.title || child.text;\n child.textRgap = 10;\n child.isNeedAdjustWidth = false;\n child.logic = {\n dynamic: true\n };\n child.father = fatherValue;\n self.fatherValueMap[self._createChildValue(fatherValue, childValue)] = fatherValue;\n self.childValueMap[self._createChildValue(fatherValue, childValue)] = childValue;\n child.value = self._createChildValue(fatherValue, childValue);\n item.el.childValues.push(child.value);\n if (BI.isNotEmptyArray(child.children)) {\n child.type = \"bi.down_list_group_item\";\n self._createChildren(child);\n child.height = self.constants.height;\n child.iconCls2 = self.constants.nextIcon;\n item.el.childValues = BI.concat(item.el.childValues, child.childValues);\n }\n });\n } else {\n item.type = \"bi.down_list_item\";\n item.title = item.title || item.text;\n item.textRgap = 10;\n item.isNeedAdjustWidth = false;\n item.logic = {\n dynamic: true\n };\n }\n var el_done = {};\n el_done.el = item;\n item_done.items.push(el_done);\n });\n if (self._isGroup(item_done.items)) {\n BI.each(item_done.items, function (i, item) {\n self.singleValues.push(item.el.value);\n });\n }\n\n result.push(item_done);\n if (self._needSpliter(i, items.length)) {\n var spliter_container = BI.createWidget({\n type: \"bi.vertical\",\n items: [{\n el: {\n type: \"bi.layout\",\n cls: \"bi-down-list-spliter bi-border-top cursor-pointer\",\n height: 0\n }\n\n }],\n cls: \"bi-down-list-spliter-container cursor-pointer\",\n vgap: 5,\n lgap: 10\n });\n result.push(spliter_container);\n }\n });\n return result;\n },\n\n _createChildren: function (child) {\n var self = this;\n child.childValues = [];\n BI.each(child.children, function (i, c) {\n var fatherValue = BI.deepClone(child.value);\n var childValue = BI.deepClone(c.value);\n c.type = \"bi.down_list_item\";\n c.title = c.title || c.text;\n c.textRgap = 10;\n c.isNeedAdjustWidth = false;\n c.logic = {\n dynamic: true\n };\n c.father = fatherValue;\n self.fatherValueMap[self._createChildValue(fatherValue, childValue)] = fatherValue;\n self.childValueMap[self._createChildValue(fatherValue, childValue)] = childValue;\n c.value = self._createChildValue(fatherValue, childValue);\n child.childValues.push(c.value);\n });\n },\n\n _isGroup: function (i) {\n return i.length > 1;\n },\n\n _needSpliter: function (i, itemLength) {\n return i < itemLength - 1;\n },\n\n _createChildValue: function (fatherValue, childValue) {\n var fValue = fatherValue;\n if(BI.isArray(fatherValue)) {\n fValue = fatherValue.join(\"_\");\n }\n return fValue + \"_\" + childValue;\n },\n\n _digest: function (valueItem) {\n var self = this;\n var valueArray = [];\n BI.each(valueItem, function (i, item) {\n var value;\n if (BI.isNotNull(item.childValue)) {\n value = self._createChildValue(item.value, item.childValue);\n } else {\n value = item.value;\n }\n valueArray.push(value);\n }\n );\n return valueArray;\n },\n\n _checkValues: function (values) {\n var self = this, o = this.options;\n var value = [];\n BI.each(o.items, function (idx, itemGroup) {\n BI.each(itemGroup, function (id, item) {\n if(BI.isNotNull(item.children)) {\n var childValues = getChildrenValue(item);\n var v = joinValue(childValues, values[idx]);\n if(BI.isNotEmptyString(v)) {\n value.push(v);\n }\n }else{\n if(item.value === values[idx][0]) {\n value.push(values[idx][0]);\n }\n }\n });\n });\n return value;\n\n function joinValue (sources, targets) {\n var value = \"\";\n BI.some(sources, function (idx, s) {\n return BI.some(targets, function (id, t) {\n if(s === t) {\n value = s;\n return true;\n }\n });\n });\n return value;\n }\n\n function getChildrenValue (item) {\n var children = [];\n if(BI.isNotNull(item.children)) {\n BI.each(item.children, function (idx, child) {\n children = BI.concat(children, getChildrenValue(child));\n });\n } else {\n children.push(item.value);\n }\n return children;\n }\n },\n\n populate: function (items) {\n BI.MultiLayerDownListPopup.superclass.populate.apply(this, arguments);\n var self = this;\n self.childValueMap = {};\n self.fatherValueMap = {};\n self.singleValues = [];\n var children = self._createPopupItems(items);\n var popupItem = BI.createItems(children,\n {}, {\n adjustLength: -2\n }\n );\n self.popup.populate(popupItem);\n },\n\n setValue: function (valueItem) {\n this.popup.setValue(this._digest(valueItem));\n },\n\n _getValue: function () {\n var v = [];\n BI.each(this.popup.getAllButtons(), function (i, item) {\n i % 2 === 0 && v.push(item.getValue());\n });\n return v;\n },\n\n getValue: function () {\n var self = this, result = [];\n var values = this._checkValues(this._getValue());\n BI.each(values, function (i, value) {\n var valueItem = {};\n if (BI.isNotNull(self.childValueMap[value])) {\n var fartherValue = self.fatherValueMap[value];\n valueItem.childValue = self.childValueMap[value];\n var fatherArrayValue = (fartherValue + \"\").split(\"_\");\n valueItem.value = fatherArrayValue.length > 1 ? fatherArrayValue : fartherValue;\n } else {\n valueItem.value = value;\n }\n result.push(valueItem);\n });\n return result;\n }\n\n\n});\n\nBI.MultiLayerDownListPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiLayerDownListPopup.EVENT_SON_VALUE_CHANGE = \"EVENT_SON_VALUE_CHANGE\";\nBI.shortcut(\"bi.multi_layer_down_list_popup\", BI.MultiLayerDownListPopup);","/**\n * @class BI.MultiLayerSelectTreeCombo\n * @extends BI.Widget\n */\nBI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSelectTreeCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multilayer-select-tree-combo\",\n isDefaultInit: false,\n height: 24,\n text: \"\",\n itemsCreator: BI.emptyFn,\n items: [],\n value: \"\",\n attributes: {\n tabIndex: 0\n },\n allowEdit: false,\n allowSearchValue: false,\n allowInsertValue: false\n });\n },\n\n render: function () {\n var self = this, o = this.options;\n\n var combo = (o.itemsCreator === BI.emptyFn) ? this._getSyncConfig() : this._getAsyncConfig();\n\n return (!o.allowEdit && o.itemsCreator === BI.emptyFn) ? combo : {\n type: \"bi.absolute\",\n items: [{\n el: combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.trigger_icon_button\",\n cls: \"trigger-icon-button\",\n ref: function (_ref) {\n self.triggerBtn = _ref;\n },\n width: o.height,\n height: o.height,\n handler: function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n }\n },\n right: 0,\n bottom: 0,\n top: 0\n }]\n };\n },\n\n _getBaseConfig: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.combo\",\n container: o.container,\n destroyWhenHide: o.destroyWhenHide,\n adjustLength: 2,\n ref: function (_ref) {\n self.combo = _ref;\n },\n popup: {\n el: {\n type: \"bi.multilayer_select_tree_popup\",\n isDefaultInit: o.isDefaultInit,\n itemsCreator: o.itemsCreator,\n items: o.items,\n ref: function (_ref) {\n self.trigger && self.trigger.getSearcher().setAdapter(_ref);\n },\n listeners: [{\n eventName: BI.MultiLayerSelectTreePopup.EVENT_CHANGE,\n action: function () {\n self.setValue(this.getValue());\n self.combo.hideView();\n self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_CHANGE);\n }\n }],\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n });\n }\n },\n value: o.value,\n maxHeight: 400,\n minHeight: 240\n },\n listeners: [{\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n };\n },\n\n _getSearchConfig: function() {\n var self = this, o = this.options;\n return {\n el: {\n type: \"bi.multilayer_select_tree_trigger\",\n container: o.container,\n allowInsertValue: o.allowInsertValue,\n allowSearchValue: o.allowSearchValue,\n allowEdit: o.allowEdit,\n cls: \"multilayer-select-tree-trigger\",\n ref: function (_ref) {\n self.trigger = _ref;\n },\n items: o.items,\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n watermark: o.watermark,\n height: o.height - 2,\n text: o.text,\n value: o.value,\n tipType: o.tipType,\n warningTitle: o.warningTitle,\n title: o.title,\n listeners: [{\n eventName: BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE,\n action: function () {\n self.setValue(this.getValue());\n self.combo.hideView();\n self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_CHANGE);\n }\n }, {\n eventName: BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiLayerSelectTreeTrigger.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_SEARCHING);\n }\n }, {\n eventName: BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM,\n action: function () {\n var value = self.trigger.getSearcher().getKeyword();\n self.combo.setValue([value]);\n self.combo.hideView();\n }\n }]\n },\n toggle: !o.allowEdit,\n hideChecker: function (e) {\n // 新增传配置container后对应hideChecker的修改\n // IE11下,popover(position: fixed)下放置下拉控件(position: fixed), 滚动的时候会异常卡顿\n // 通过container参数将popup放置于popover之外解决此问题, 其他下拉控件由于元素少或者有分页,所以\n // 卡顿不明显, 先在此做尝试, 并在FineUI特殊处理待解决文档中标记跟踪\n return (o.container && self.trigger.getSearcher().isSearching() && self.trigger.getSearcher().getView().element.find(e.target).length > 0) ? false : self.triggerBtn.element.find(e.target).length === 0;\n\n },\n listeners: [{\n eventName: BI.Combo.EVENT_AFTER_HIDEVIEW,\n action: function () {\n self.trigger.stopEditing();\n }\n }, {\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n }\n },\n\n _getSyncConfig: function () {\n var o = this.options;\n var baseConfig = this._getBaseConfig();\n return BI.extend(baseConfig, o.allowEdit ? this._getSearchConfig() : {\n el: {\n type: \"bi.single_tree_trigger\",\n text: o.text,\n height: o.height,\n items: o.items,\n value: o.value\n }\n });\n },\n\n _getAsyncConfig: function () {\n var config = this._getBaseConfig();\n return BI.extend(config, this._getSearchConfig());\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.combo.setValue(v);\n },\n\n getValue: function () {\n return this.combo.getValue();\n },\n\n populate: function (items) {\n this.combo.populate(items);\n }\n});\n\nBI.MultiLayerSelectTreeCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiLayerSelectTreeCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiLayerSelectTreeCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiLayerSelectTreeCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiLayerSelectTreeCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.multilayer_select_tree_combo\", BI.MultiLayerSelectTreeCombo);","/**\n * Created by GUY on 2016/1/26.\n *\n * @class BI.MultiLayerSelectTreeInsertSearchPane\n * @extends BI.Pane\n */\n\nBI.MultiLayerSelectTreeInsertSearchPane = BI.inherit(BI.Widget, {\n\n props: function() {\n return {\n baseCls: \"bi-multilayer-select-tree-popup\",\n tipText: BI.i18nText(\"BI-No_Selected_Item\"),\n isDefaultInit: false,\n itemsCreator: BI.emptyFn,\n items: [],\n value: \"\"\n };\n },\n\n render: function() {\n var self = this, o = this.options;\n this.tree = BI.createWidget({\n type: \"bi.multilayer_select_level_tree\",\n isDefaultInit: o.isDefaultInit,\n items: o.items,\n itemsCreator: o.itemsCreator === BI.emptyFn ? BI.emptyFn : function (op, callback) {\n o.itemsCreator(op, function (res) {\n callback(res);\n self.setKeyword(o.keywordGetter());\n });\n },\n keywordGetter: o.keywordGetter,\n value: o.value,\n scrollable: null,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }, {\n eventName: BI.MultiLayerSelectLevelTree.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeInsertSearchPane.EVENT_CHANGE);\n }\n }]\n });\n return {\n type: \"bi.vertical\",\n scrolly: false,\n scrollable: true,\n vgap: 5,\n items: [{\n type: \"bi.text_button\",\n invisible: true,\n text: BI.i18nText(\"BI-Basic_Click_To_Add_Text\", \"\"),\n height: 24,\n cls: \"bi-high-light\",\n hgap: 5,\n ref: function (_ref) {\n self.addNotMatchTip = _ref;\n },\n handler: function () {\n self.fireEvent(BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM, o.keywordGetter());\n }\n }, this.tree]\n };\n },\n\n setKeyword: function (keyword) {\n var showTip = BI.isEmptyArray(this.tree.getAllLeaves());\n this.addNotMatchTip.setVisible(showTip);\n showTip && this.addNotMatchTip.setText(BI.i18nText(\"BI-Basic_Click_To_Add_Text\", keyword));\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.tree.setValue(v);\n },\n\n populate: function (items) {\n this.tree.populate(items);\n }\n});\n\nBI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\nBI.MultiLayerSelectTreeInsertSearchPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multilayer_select_tree_insert_search_pane\", BI.MultiLayerSelectTreeInsertSearchPane);","/**\n * guy\n * 二级树\n * @class BI.MultiLayerSelectLevelTree\n * @extends BI.Pane\n */\nBI.MultiLayerSelectLevelTree = BI.inherit(BI.Pane, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSelectLevelTree.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multilayer-select-level-tree\",\n isDefaultInit: false,\n items: [],\n itemsCreator: BI.emptyFn,\n keywordGetter: BI.emptyFn,\n value: \"\",\n scrollable: true\n });\n },\n\n _init: function () {\n var o = this.options;\n BI.MultiLayerSelectLevelTree.superclass._init.apply(this, arguments);\n\n this.storeValue = o.value;\n\n this.initTree(this.options.items);\n\n this.check();\n },\n\n _formatItems: function (nodes, layer, pNode) {\n var self = this, o = this.options;\n var keyword = o.keywordGetter();\n BI.each(nodes, function (i, node) {\n var extend = {};\n node.layer = layer;\n if (!BI.isKey(node.id)) {\n node.id = BI.UUID();\n }\n node.keyword = node.keyword || keyword;\n extend.pNode = pNode;\n if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) {\n extend.type = \"bi.multilayer_select_tree_mid_plus_group_node\";\n if (i === nodes.length - 1) {\n extend.type = \"bi.multilayer_select_tree_last_plus_group_node\";\n extend.isLastNode = true;\n }\n if (i === 0 && !pNode) {\n extend.type = \"bi.multilayer_select_tree_first_plus_group_node\";\n }\n if (i === 0 && i === nodes.length - 1 && !pNode) { // 根\n extend.type = \"bi.multilayer_select_tree_plus_group_node\";\n }\n BI.defaults(node, extend);\n self._formatItems(node.children, layer + 1, node);\n } else {\n extend.type = \"bi.multilayer_single_tree_mid_tree_leaf_item\";\n if (i === 0 && !pNode) {\n extend.type = \"bi.multilayer_single_tree_first_tree_leaf_item\";\n }\n if (i === nodes.length - 1) {\n extend.type = \"bi.multilayer_single_tree_last_tree_leaf_item\";\n }\n BI.defaults(node, extend);\n }\n });\n return nodes;\n },\n\n _assertId: function (sNodes) {\n BI.each(sNodes, function (i, node) {\n node.id = node.id || BI.UUID();\n });\n },\n\n // 构造树结构,\n initTree: function (nodes) {\n var self = this, o = this.options;\n var hasNext = false;\n this.empty();\n this._assertId(nodes);\n this.tree = BI.createWidget({\n type: \"bi.custom_tree\",\n cls: \"tree-view display-table\",\n expander: {\n type: \"bi.select_tree_expander\",\n isDefaultInit: o.isDefaultInit,\n el: {},\n popup: {\n type: \"bi.custom_tree\"\n }\n },\n\n items: this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0),\n itemsCreator: function (op, callback) {\n (op.times === 1 && !op.node) && BI.nextTick(function () {\n self.loading();\n });\n o.itemsCreator(op, function (ob) {\n hasNext = ob.hasNext;\n (op.times === 1 && !op.node) && self._populate(ob.items);\n callback(self._formatItems(BI.Tree.transformToTreeFormat(ob.items), op.node ? op.node.layer + 1 : 0, op.node));\n self.setValue(self.storeValue);\n (op.times === 1 && !op.node) && BI.nextTick(function () {\n self.loaded();\n });\n });\n },\n value: o.value,\n\n el: {\n type: \"bi.loader\",\n isDefaultInit: o.itemsCreator !== BI.emptyFn,\n el: {\n type: \"bi.button_tree\",\n chooseType: o.chooseType,\n behaviors: o.behaviors,\n layouts: [{\n type: \"bi.vertical\"\n }]\n },\n hasNext: function () {\n return hasNext;\n }\n }\n });\n this.tree.on(BI.Controller.EVENT_CHANGE, function (type, value) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.setValue(value);\n self.fireEvent(BI.MultiLayerSelectLevelTree.EVENT_CHANGE, arguments);\n }\n });\n\n BI.createWidget({\n type: \"bi.adaptive\",\n element: this,\n scrollable: o.scrollable,\n items: [this.tree]\n });\n },\n\n _populate: function () {\n BI.MultiLayerSelectLevelTree.superclass.populate.apply(this, arguments);\n },\n\n populate: function (nodes) {\n this._populate(nodes);\n BI.isNull(nodes) ? this.tree.populate() : this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0));\n },\n\n setValue: function (v) {\n // getValue依赖于storeValue, 那么不选的时候就不要更新storeValue了\n if(this.options.chooseType === BI.Selection.None) {\n } else {\n this.storeValue = v;\n this.tree.setValue(v);\n }\n },\n\n getValue: function () {\n return BI.isArray(this.storeValue) ?\n this.storeValue : BI.isNull(this.storeValue) ?\n [] : [this.storeValue];\n },\n\n getAllLeaves: function () {\n return this.tree.getAllLeaves();\n },\n\n getNodeById: function (id) {\n return this.tree.getNodeById(id);\n },\n\n getNodeByValue: function (id) {\n return this.tree.getNodeByValue(id);\n }\n});\nBI.MultiLayerSelectLevelTree.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.multilayer_select_level_tree\", BI.MultiLayerSelectLevelTree);","/**\n * Created by GUY on 2016/1/26.\n *\n * @class BI.MultiLayerSelectTreePopup\n * @extends BI.Pane\n */\n\nBI.MultiLayerSelectTreePopup = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSelectTreePopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multilayer-select-tree-popup\",\n tipText: BI.i18nText(\"BI-No_Selected_Item\"),\n isDefaultInit: false,\n itemsCreator: BI.emptyFn,\n items: [],\n value: \"\",\n onLoaded: BI.emptyFn,\n minHeight: 240\n });\n },\n\n _init: function () {\n BI.MultiLayerSelectTreePopup.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n\n this.tree = BI.createWidget({\n type: \"bi.multilayer_select_level_tree\",\n isDefaultInit: o.isDefaultInit,\n items: o.items,\n itemsCreator: o.itemsCreator,\n keywordGetter: o.keywordGetter,\n value: o.value,\n scrollable: null,\n onLoaded: function () {\n self.tree.check();\n o.onLoaded();\n }\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n scrollable: true,\n element: this,\n vgap: 5,\n items: [this.tree]\n });\n\n this.tree.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.tree.on(BI.MultiLayerSelectLevelTree.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiLayerSelectTreePopup.EVENT_CHANGE);\n });\n\n this.tree.css(\"min-height\", o.minHeight - 10);\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.tree.setValue(v);\n },\n\n populate: function (items) {\n this.tree.populate(items);\n }\n});\n\nBI.MultiLayerSelectTreePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multilayer_select_tree_popup\", BI.MultiLayerSelectTreePopup);","/**\n * Created by Windy on 2018/2/2.\n */\nBI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, {\n\n props: function() {\n return {\n extraCls: \"bi-multi-layer-select-tree-trigger bi-border bi-focus-shadow bi-border-radius\",\n height: 24,\n valueFormatter: function (v) {\n return v;\n },\n itemsCreator: BI.emptyFn,\n watermark: BI.i18nText(\"BI-Basic_Search\"),\n allowSearchValue: false,\n title: BI.bind(this._getShowText, this)\n };\n },\n\n render: function () {\n var self = this, o = this.options;\n if(o.itemsCreator === BI.emptyFn) {\n this._initData();\n }\n var content = {\n type: \"bi.htape\",\n items: [\n {\n el: {\n type: \"bi.searcher\",\n ref: function () {\n self.searcher = this;\n },\n masker: BI.isNotNull(o.container) ? {\n offset: {},\n container: o.container\n } : {\n offset: {}\n },\n isAutoSearch: false,\n el: {\n type: \"bi.state_editor\",\n ref: function () {\n self.editor = this;\n },\n defaultText: o.text,\n text: this._digest(o.value),\n value: o.value,\n height: o.height,\n tipText: \"\",\n watermark: o.watermark,\n listeners: [{\n eventName: BI.StateEditor.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_FOCUS);\n }\n }, {\n eventName: BI.StateEditor.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_BLUR);\n }\n }, {\n eventName: BI.StateEditor.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING);\n }\n }]\n },\n popup: {\n type: o.allowInsertValue ? \"bi.multilayer_select_tree_insert_search_pane\" : \"bi.multilayer_select_tree_popup\",\n itemsCreator: o.itemsCreator === BI.emptyFn ? BI.emptyFn : function (op, callback) {\n op.keyword = self.editor.getValue();\n o.itemsCreator(op, callback);\n },\n keywordGetter: function () {\n return self.editor.getValue();\n },\n cls: \"bi-card\",\n listeners: [{\n eventName: BI.MultiLayerSelectTreeInsertSearchPane.EVENT_ADD_ITEM,\n action: function () {\n self.options.text = self.getSearcher().getKeyword();\n self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM);\n }\n }],\n ref: function (_ref) {\n self.popup = _ref;\n }\n },\n onSearch: function (obj, callback) {\n var keyword = obj.keyword;\n if(o.itemsCreator === BI.emptyFn) {\n callback(self._getSearchItems(keyword));\n o.allowInsertValue && self.popup.setKeyword(keyword);\n } else {\n callback();\n }\n },\n listeners: [{\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiLayerSelectTreeTrigger.EVENT_CHANGE);\n }\n }]\n }\n }, {\n el: {\n type: \"bi.layout\",\n width: 24\n },\n width: 24\n }\n ]\n };\n\n return o.allowEdit ? content : {\n type: \"bi.absolute\",\n items: [{\n el: content,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.layout\"\n },\n left: 0,\n right: 24,\n top: 0,\n bottom: 0\n }]\n };\n },\n\n _initData: function() {\n var o = this.options;\n this.tree = new BI.Tree();\n this.nodes = BI.Tree.treeFormat(BI.deepClone(o.items));\n this.tree.initTree(this.nodes);\n },\n\n _getSearchItems: function(keyword) {\n var self = this, o = this.options;\n // 把数组搜索换成用BI.tree搜索节点, 搜到了就不再往下搜索\n var items = [];\n this.tree.traverse(function (node) {\n var find = BI.Func.getSearchResult(self.tree.isRoot(node) ? [] : BI.concat([node.text], (o.allowSearchValue ? [node.value] : [])), keyword);\n if(find.find.length > 0 || find.match.length > 0) {\n items.push(node);\n return true;\n }\n });\n return this._fillTreeStructure4Search(items, \"id\");\n },\n\n _createJson: function(node, open) {\n return {\n id: node.id,\n pId: node.pId,\n text: node.text,\n value: node.value,\n isParent: BI.isNotEmptyArray(node.children),\n open: open\n }\n },\n\n _getChildren: function(node) {\n var self = this;\n node.children = node.children || [];\n var nodes = [];\n BI.each(node.children, function (idx, child) {\n var children = self._getChildren(child);\n nodes = nodes.concat(children);\n });\n return node.children.concat(nodes);\n },\n\n // 将搜索到的节点进行补充,构造成一棵完整的树\n _fillTreeStructure4Search: function (leaves) {\n var self = this;\n var result = [];\n var queue = [];\n BI.each(leaves, function (idx, node) {\n queue.push({pId: node.pId});\n result.push(node);\n result = result.concat(self._getChildren(node));\n });\n while (BI.isNotEmptyArray(queue)) {\n var node = queue.pop();\n var pNode = this.tree.search(this.tree.getRoot(), node.pId, \"id\");\n if (pNode != null) {\n pNode.open = true;\n queue.push({pId: pNode.pId});\n result.push(pNode);\n }\n }\n return BI.uniqBy(BI.map(result, function (idx, node) {\n return self._createJson(node, node.open);\n }), \"id\");\n },\n\n _digest: function (v) {\n var o = this.options;\n if(o.itemsCreator === BI.emptyFn) {\n var result = BI.find(o.items, function (i, item) {\n return item.value === v;\n });\n return BI.isNotNull(result) ? result.text : o.text;\n }\n return o.valueFormatter(v);\n },\n\n _getShowText: function () {\n return this.editor.getText();\n },\n\n stopEditing: function () {\n this.searcher.stopSearch();\n },\n\n getSearcher: function () {\n return this.searcher;\n },\n\n populate: function (items) {\n this.options.items = items;\n this._initData(items);\n },\n\n setValue: function (v) {\n this.editor.setState(this._digest(v[0]));\n },\n\n getValue: function () {\n return this.searcher.getValue();\n }\n});\n\nBI.MultiLayerSelectTreeTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiLayerSelectTreeTrigger.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiLayerSelectTreeTrigger.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiLayerSelectTreeTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiLayerSelectTreeTrigger.EVENT_START = \"EVENT_START\";\nBI.MultiLayerSelectTreeTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\nBI.shortcut(\"bi.multilayer_select_tree_trigger\", BI.MultiLayerSelectTreeTrigger);","/**\n * 加号表示的组节点\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSelectTreeFirstPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MultiLayerSelectTreeFirstPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-select-tree-first-plus-group-node bi-list-item-active\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = BI.createWidget({\n type: \"bi.select_tree_first_plus_group_node\",\n cls: \"bi-list-item-none\",\n stopPropagation: true,\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n keyword: o.keyword,\n open: o.open,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n this.node.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.setSelected(self.isSelected());\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n isOnce: function () {\n return true;\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n isSelected: function () {\n return this.node.isSelected();\n },\n\n setSelected: function (b) {\n BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setSelected.apply(this, arguments);\n this.node.setSelected(b);\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this, arguments);\n this.node.setOpened(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_select_tree_first_plus_group_node\", BI.MultiLayerSelectTreeFirstPlusGroupNode);","/**\n * 加号表示的组节点\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSelectTreeLastPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MultiLayerSelectTreeLastPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-select-tree-last-plus-group-node bi-list-item-active\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSelectTreeLastPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = BI.createWidget({\n type: \"bi.select_tree_last_plus_group_node\",\n cls: \"bi-list-item-none\",\n stopPropagation: true,\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n keyword: o.keyword,\n open: o.open,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n this.node.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.setSelected(self.isSelected());\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n isSelected: function () {\n return this.node.isSelected();\n },\n\n setSelected: function (b) {\n BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setSelected.apply(this, arguments);\n this.node.setSelected(b);\n },\n\n doClick: function () {\n BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSelectTreeLastPlusGroupNode.superclass.setOpened.apply(this, arguments);\n this.node.setOpened(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_select_tree_last_plus_group_node\", BI.MultiLayerSelectTreeLastPlusGroupNode);","/**\n * 加号表示的组节点\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSelectTreeMidPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MultiLayerSelectTreeMidPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-select-tree-mid-plus-group-node bi-list-item-active\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSelectTreeMidPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = BI.createWidget({\n type: \"bi.select_tree_mid_plus_group_node\",\n cls: \"bi-list-item-none\",\n stopPropagation: true,\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n keyword: o.keyword,\n open: o.open,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n this.node.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.setSelected(self.isSelected());\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n isSelected: function () {\n return this.node.isSelected();\n },\n\n setSelected: function (b) {\n BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setSelected.apply(this, arguments);\n this.node.setSelected(b);\n },\n\n doClick: function () {\n BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSelectTreeMidPlusGroupNode.superclass.setOpened.apply(this, arguments);\n this.node.setOpened(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_select_tree_mid_plus_group_node\", BI.MultiLayerSelectTreeMidPlusGroupNode);","/**\n * 加号表示的组节点\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSelectTreePlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MultiLayerSelectTreePlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSelectTreePlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-select-tree-first-plus-group-node bi-list-item-active\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSelectTreePlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = BI.createWidget({\n type: \"bi.select_tree_plus_group_node\",\n cls: \"bi-list-item-none\",\n stopPropagation: true,\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n keyword: o.keyword,\n open: o.open,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py\n });\n this.node.on(BI.Controller.EVENT_CHANGE, function (type) {\n self.setSelected(self.isSelected());\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n isOnce: function () {\n return true;\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n isSelected: function () {\n return this.node.isSelected();\n },\n\n setSelected: function (b) {\n BI.MultiLayerSelectTreePlusGroupNode.superclass.setSelected.apply(this, arguments);\n this.node.setSelected(b);\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSelectTreePlusGroupNode.superclass.setOpened.apply(this, arguments);\n this.node.setOpened(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_select_tree_plus_group_node\", BI.MultiLayerSelectTreePlusGroupNode);","/**\n * 多层级下拉单选树\n * Created by GUY on 2016/1/26.\n *\n * @class BI.MultiLayerSingleTreeCombo\n * @extends BI.Widget\n */\nBI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSingleTreeCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multilayer-single-tree-combo\",\n isDefaultInit: false,\n height: 24,\n text: \"\",\n itemsCreator: BI.emptyFn,\n items: [],\n value: \"\",\n attributes: {\n tabIndex: 0\n },\n allowEdit: false,\n allowSearchValue: false,\n allowInsertValue: false\n });\n },\n\n render: function () {\n var self = this, o = this.options;\n\n var combo = (o.itemsCreator === BI.emptyFn) ? this._getSyncConfig() : this._getAsyncConfig();\n\n return (!o.allowEdit && o.itemsCreator === BI.emptyFn) ? combo : {\n type: \"bi.absolute\",\n items: [{\n el: combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.trigger_icon_button\",\n cls: \"trigger-icon-button\",\n ref: function (_ref) {\n self.triggerBtn = _ref;\n },\n width: o.height,\n height: o.height,\n handler: function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n }\n },\n right: 0,\n bottom: 0,\n top: 0\n }]\n };\n },\n\n _getBaseConfig: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.combo\",\n container: o.container,\n destroyWhenHide: o.destroyWhenHide,\n adjustLength: 2,\n ref: function (_ref) {\n self.combo = _ref;\n },\n popup: {\n el: {\n type: \"bi.multilayer_single_tree_popup\",\n isDefaultInit: o.isDefaultInit,\n itemsCreator: o.itemsCreator,\n items: o.items,\n ref: function (_ref) {\n self.trigger && self.trigger.getSearcher().setAdapter(_ref);\n },\n listeners: [{\n eventName: BI.MultiLayerSingleTreePopup.EVENT_CHANGE,\n action: function () {\n self.setValue(this.getValue());\n self.combo.hideView();\n self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_CHANGE);\n }\n }],\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n });\n }\n },\n value: o.value,\n maxHeight: 400,\n minHeight: 240\n },\n listeners: [{\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n };\n },\n\n _getSearchConfig: function() {\n var self = this, o = this.options;\n return {\n el: {\n type: \"bi.multilayer_single_tree_trigger\",\n container: o.container,\n allowInsertValue: o.allowInsertValue,\n allowSearchValue: o.allowSearchValue,\n allowEdit: o.allowEdit,\n cls: \"multilayer-single-tree-trigger\",\n ref: function (_ref) {\n self.trigger = _ref;\n },\n watermark: o.watermark,\n items: o.items,\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n height: o.height - 2,\n text: o.text,\n value: o.value,\n tipType: o.tipType,\n warningTitle: o.warningTitle,\n title: o.title,\n listeners: [{\n eventName: BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE,\n action: function () {\n self.setValue(this.getValue());\n self.combo.hideView();\n self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_CHANGE);\n }\n }, {\n eventName: BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiLayerSingleTreeTrigger.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_SEARCHING);\n }\n }, {\n eventName: BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM,\n action: function () {\n var value = self.trigger.getSearcher().getKeyword();\n self.combo.setValue([value]);\n self.combo.hideView();\n }\n }]\n },\n toggle: !o.allowEdit,\n hideChecker: function (e) {\n // 新增传配置container后对应hideChecker的修改\n // IE11下,popover(position: fixed)下放置下拉控件(position: fixed), 滚动的时候会异常卡顿\n // 通过container参数将popup放置于popover之外解决此问题, 其他下拉控件由于元素少或者有分页,所以\n // 卡顿不明显, 先在此做尝试, 并在FineUI特殊处理待解决文档中标记跟踪\n return (o.container && self.trigger.getSearcher().isSearching() && self.trigger.getSearcher().getView().element.find(e.target).length > 0) ? false : self.triggerBtn.element.find(e.target).length === 0\n },\n listeners: [{\n eventName: BI.Combo.EVENT_AFTER_HIDEVIEW,\n action: function () {\n self.trigger.stopEditing();\n }\n }, {\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n }\n },\n\n _getSyncConfig: function () {\n var o = this.options;\n var baseConfig = this._getBaseConfig();\n return BI.extend(baseConfig, o.allowEdit ? this._getSearchConfig() : {\n el: {\n type: \"bi.single_tree_trigger\",\n text: o.text,\n height: o.height,\n items: o.items,\n value: o.value\n }\n });\n },\n\n _getAsyncConfig: function () {\n var config = this._getBaseConfig();\n return BI.extend(config, this._getSearchConfig());\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.combo.setValue(v);\n },\n\n getValue: function () {\n return this.combo.getValue();\n },\n\n populate: function (items) {\n this.combo.populate(items);\n }\n});\n\nBI.MultiLayerSingleTreeCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiLayerSingleTreeCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiLayerSingleTreeCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiLayerSingleTreeCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiLayerSingleTreeCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.multilayer_single_tree_combo\", BI.MultiLayerSingleTreeCombo);","/**\n * Created by GUY on 2016/1/26.\n *\n * @class BI.MultiLayerSingleTreeInsertSearchPane\n * @extends BI.Pane\n */\n\nBI.MultiLayerSingleTreeInsertSearchPane = BI.inherit(BI.Widget, {\n\n props: function() {\n return {\n baseCls: \"bi-multilayer-single-tree-popup\",\n tipText: BI.i18nText(\"BI-No_Selected_Item\"),\n isDefaultInit: false,\n itemsCreator: BI.emptyFn,\n items: [],\n value: \"\"\n };\n },\n\n render: function() {\n var self = this, o = this.options;\n this.tree = BI.createWidget({\n type: \"bi.multilayer_single_level_tree\",\n isDefaultInit: o.isDefaultInit,\n items: o.items,\n itemsCreator: o.itemsCreator === BI.emptyFn ? BI.emptyFn : function (op, callback) {\n o.itemsCreator(op, function (res) {\n callback(res);\n self.setKeyword(o.keywordGetter());\n });\n },\n keywordGetter: o.keywordGetter,\n value: o.value,\n scrollable: null,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }, {\n eventName: BI.MultiLayerSelectLevelTree.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeInsertSearchPane.EVENT_CHANGE);\n }\n }]\n });\n return {\n type: \"bi.vertical\",\n scrolly: false,\n scrollable: true,\n vgap: 5,\n items: [{\n type: \"bi.text_button\",\n invisible: true,\n text: BI.i18nText(\"BI-Basic_Click_To_Add_Text\", \"\"),\n height: 24,\n cls: \"bi-high-light\",\n hgap: 5,\n ref: function (_ref) {\n self.addNotMatchTip = _ref;\n },\n handler: function () {\n self.fireEvent(BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM, o.keywordGetter());\n }\n }, this.tree]\n };\n },\n\n setKeyword: function (keyword) {\n var showTip = BI.isEmptyArray(this.tree.getAllLeaves());\n this.addNotMatchTip.setVisible(showTip);\n showTip && this.addNotMatchTip.setText(BI.i18nText(\"BI-Basic_Click_To_Add_Text\", keyword));\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.tree.setValue(v);\n },\n\n populate: function (items) {\n this.tree.populate(items);\n }\n});\n\nBI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\nBI.MultiLayerSingleTreeInsertSearchPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multilayer_single_tree_insert_search_pane\", BI.MultiLayerSingleTreeInsertSearchPane);","/**\n * guy\n * 二级树\n * @class BI.MultiLayerSingleLevelTree\n * @extends BI.Single\n */\nBI.MultiLayerSingleLevelTree = BI.inherit(BI.Pane, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSingleLevelTree.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multilayer-single-level-tree\",\n isDefaultInit: false,\n items: [],\n itemsCreator: BI.emptyFn,\n keywordGetter: BI.emptyFn,\n chooseType: BI.Selection.Single,\n scrollable: true\n });\n },\n\n _init: function () {\n var o = this.options;\n BI.MultiLayerSingleLevelTree.superclass._init.apply(this, arguments);\n\n this.storeValue = o.value;\n\n this.initTree(this.options.items);\n\n this.check();\n },\n\n _formatItems: function (nodes, layer, pNode) {\n var self = this, o = this.options;\n var keyword = o.keywordGetter();\n BI.each(nodes, function (i, node) {\n var extend = {};\n node.layer = layer;\n if (!BI.isKey(node.id)) {\n node.id = BI.UUID();\n }\n node.keyword = node.keyword || keyword;\n extend.pNode = pNode;\n if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) {\n extend.type = \"bi.multilayer_single_tree_mid_plus_group_node\";\n if (i === nodes.length - 1) {\n extend.type = \"bi.multilayer_single_tree_last_plus_group_node\";\n extend.isLastNode = true;\n }\n if (i === 0 && !pNode) {\n extend.type = \"bi.multilayer_single_tree_first_plus_group_node\";\n }\n if (i === 0 && i === nodes.length - 1 && !pNode) { // 根\n extend.type = \"bi.multilayer_single_tree_plus_group_node\";\n }\n BI.defaults(node, extend);\n self._formatItems(node.children, layer + 1, node);\n } else {\n extend.type = \"bi.multilayer_single_tree_mid_tree_leaf_item\";\n if (i === 0 && !pNode) {\n extend.type = \"bi.multilayer_single_tree_first_tree_leaf_item\";\n }\n if (i === nodes.length - 1) {\n extend.type = \"bi.multilayer_single_tree_last_tree_leaf_item\";\n }\n BI.defaults(node, extend);\n }\n });\n return nodes;\n },\n\n _assertId: function (sNodes) {\n BI.each(sNodes, function (i, node) {\n node.id = node.id || BI.UUID();\n });\n },\n\n // 构造树结构,\n initTree: function (nodes) {\n var self = this, o = this.options;\n var hasNext = false;\n this.empty();\n this._assertId(nodes);\n this.tree = BI.createWidget({\n type: \"bi.custom_tree\",\n cls: \"tree-view display-table\",\n expander: {\n isDefaultInit: o.isDefaultInit,\n el: {},\n popup: {\n type: \"bi.custom_tree\"\n }\n },\n\n items: this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0),\n value: o.value,\n itemsCreator: function (op, callback) {\n (op.times === 1 && !op.node) && BI.nextTick(function () {\n self.loading();\n });\n o.itemsCreator(op, function (ob) {\n hasNext = ob.hasNext;\n (op.times === 1 && !op.node) && self._populate(ob.items);\n callback(self._formatItems(BI.Tree.transformToTreeFormat(ob.items), op.node ? op.node.layer + 1 : 0, op.node));\n self.setValue(self.storeValue);\n (op.times === 1 && !op.node) && BI.nextTick(function () {\n self.loaded();\n });\n });\n },\n\n el: {\n type: \"bi.loader\",\n isDefaultInit: o.itemsCreator !== BI.emptyFn,\n el: {\n type: \"bi.button_tree\",\n chooseType: o.chooseType,\n behaviors: o.behaviors,\n layouts: [{\n type: \"bi.vertical\"\n }]\n },\n hasNext: function () {\n return hasNext;\n }\n }\n });\n this.tree.on(BI.Controller.EVENT_CHANGE, function (type, v) {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n if (type === BI.Events.CLICK) {\n self.setValue(v);\n self.fireEvent(BI.MultiLayerSingleLevelTree.EVENT_CHANGE, v);\n }\n });\n\n BI.createWidget({\n type: \"bi.adaptive\",\n element: this,\n scrollable: o.scrollable,\n items: [this.tree]\n });\n },\n\n _populate: function () {\n BI.MultiLayerSelectLevelTree.superclass.populate.apply(this, arguments);\n },\n\n populate: function (nodes) {\n this._populate(nodes);\n BI.isNull(nodes) ? this.tree.populate() : this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0));\n },\n\n setValue: function (v) {\n // getValue依赖于storeValue, 那么不选的时候就不要更新storeValue了\n if(this.options.chooseType === BI.Selection.None) {\n } else {\n this.storeValue = v;\n this.tree.setValue(v);\n }\n },\n\n getValue: function () {\n return BI.isArray(this.storeValue) ?\n this.storeValue : BI.isNull(this.storeValue) ?\n [] : [this.storeValue];\n },\n\n getAllLeaves: function () {\n return this.tree.getAllLeaves();\n },\n\n getNodeById: function (id) {\n return this.tree.getNodeById(id);\n },\n\n getNodeByValue: function (id) {\n return this.tree.getNodeByValue(id);\n }\n});\nBI.MultiLayerSingleLevelTree.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.multilayer_single_level_tree\", BI.MultiLayerSingleLevelTree);\n","/**\n * Created by GUY on 2016/1/26.\n *\n * @class BI.MultiLayerSingleTreePopup\n * @extends BI.Pane\n */\n\nBI.MultiLayerSingleTreePopup = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSingleTreePopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multilayer-singletree-popup\",\n tipText: BI.i18nText(\"BI-No_Selected_Item\"),\n isDefaultInit: false,\n itemsCreator: BI.emptyFn,\n items: [],\n onLoaded: BI.emptyFn,\n minHeight: 240\n });\n },\n\n _init: function () {\n BI.MultiLayerSingleTreePopup.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n\n this.tree = BI.createWidget({\n type: \"bi.multilayer_single_level_tree\",\n isDefaultInit: o.isDefaultInit,\n items: o.items,\n itemsCreator: o.itemsCreator,\n keywordGetter: o.keywordGetter,\n value: o.value,\n scrollable: null,\n onLoaded: function () {\n self.tree.check();\n o.onLoaded();\n }\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n scrollable: true,\n element: this,\n vgap: 5,\n items: [this.tree]\n });\n\n this.tree.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.tree.on(BI.MultiLayerSingleLevelTree.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiLayerSingleTreePopup.EVENT_CHANGE);\n });\n\n this.tree.css(\"min-height\", o.minHeight - 10);\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.tree.setValue(v);\n },\n\n populate: function (items) {\n this.tree.populate(items);\n }\n});\n\nBI.MultiLayerSingleTreePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multilayer_single_tree_popup\", BI.MultiLayerSingleTreePopup);","/**\n * Created by Windy on 2018/2/2.\n */\nBI.MultiLayerSingleTreeTrigger = BI.inherit(BI.Trigger, {\n\n props: function() {\n return {\n extraCls: \"bi-multi-layer-single-tree-trigger bi-border bi-focus-shadow bi-border-radius\",\n height: 24,\n valueFormatter: function (v) {\n return v;\n },\n itemsCreator: BI.emptyFn,\n watermark: BI.i18nText(\"BI-Basic_Search\"),\n allowSearchValue: false,\n title: BI.bind(this._getShowText, this)\n };\n },\n\n render: function () {\n var self = this, o = this.options;\n if(o.itemsCreator === BI.emptyFn) {\n this._initData();\n }\n var content = {\n type: \"bi.htape\",\n items: [\n {\n el: {\n type: \"bi.searcher\",\n ref: function () {\n self.searcher = this;\n },\n masker: BI.isNotNull(o.container) ? {\n offset: {},\n container: o.container\n } : {\n offset: {}\n },\n isAutoSearch: false,\n el: {\n type: \"bi.state_editor\",\n ref: function () {\n self.editor = this;\n },\n defaultText: o.text,\n text: this._digest(o.value),\n value: o.value,\n height: o.height,\n tipText: \"\",\n watermark: o.watermark,\n listeners: [{\n eventName: BI.StateEditor.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_FOCUS);\n }\n }, {\n eventName: BI.StateEditor.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_BLUR);\n }\n }, {\n eventName: BI.StateEditor.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING);\n }\n }]\n },\n popup: {\n type: o.allowInsertValue ? \"bi.multilayer_single_tree_insert_search_pane\" : \"bi.multilayer_single_tree_popup\",\n itemsCreator: o.itemsCreator === BI.emptyFn ? BI.emptyFn : function (op, callback) {\n op.keyword = self.editor.getValue();\n o.itemsCreator(op, callback);\n },\n keywordGetter: function () {\n return self.editor.getValue();\n },\n cls: \"bi-card\",\n listeners: [{\n eventName: BI.MultiLayerSingleTreeInsertSearchPane.EVENT_ADD_ITEM,\n action: function () {\n self.options.text = self.getSearcher().getKeyword();\n self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM);\n }\n }],\n ref: function (_ref) {\n self.popup = _ref;\n }\n },\n onSearch: function (obj, callback) {\n var keyword = obj.keyword;\n if(o.itemsCreator === BI.emptyFn) {\n callback(self._getSearchItems(keyword));\n o.allowInsertValue && self.popup.setKeyword(keyword);\n } else {\n callback();\n }\n },\n listeners: [{\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiLayerSingleTreeTrigger.EVENT_CHANGE);\n }\n }]\n }\n }, {\n el: {\n type: \"bi.layout\",\n width: 24\n },\n width: 24\n }\n ]\n };\n\n return o.allowEdit ? content : {\n type: \"bi.absolute\",\n items: [{\n el: content,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.layout\"\n },\n left: 0,\n right: 24,\n top: 0,\n bottom: 0\n }]\n };\n },\n\n _initData: function() {\n var o = this.options;\n this.tree = new BI.Tree();\n this.nodes = BI.Tree.treeFormat(BI.deepClone(o.items));\n this.tree.initTree(this.nodes);\n },\n\n _getSearchItems: function(keyword) {\n var self = this, o = this.options;\n // 把数组搜索换成用BI.tree搜索节点, 搜到了就不再往下搜索\n var items = [];\n this.tree.traverse(function (node) {\n var find = BI.Func.getSearchResult(self.tree.isRoot(node) ? [] : BI.concat([node.text], (o.allowSearchValue ? [node.value] : [])), keyword);\n if(find.find.length > 0 || find.match.length > 0) {\n items.push(node);\n return true;\n }\n });\n return this._fillTreeStructure4Search(items, \"id\");\n },\n\n _createJson: function(node, open) {\n return {\n id: node.id,\n pId: node.pId,\n text: node.text,\n value: node.value,\n isParent: BI.isNotEmptyArray(node.children),\n open: open\n }\n },\n\n _getChildren: function(node) {\n var self = this;\n node.children = node.children || [];\n var nodes = [];\n BI.each(node.children, function (idx, child) {\n var children = self._getChildren(child);\n nodes = nodes.concat(children);\n });\n return node.children.concat(nodes);\n },\n\n // 将搜索到的节点进行补充,构造成一棵完整的树\n _fillTreeStructure4Search: function (leaves) {\n var self = this;\n var result = [];\n var queue = [];\n BI.each(leaves, function (idx, node) {\n queue.push({pId: node.pId});\n result.push(node);\n result = result.concat(self._getChildren(node));\n });\n while (BI.isNotEmptyArray(queue)) {\n var node = queue.pop();\n var pNode = this.tree.search(this.tree.getRoot(), node.pId, \"id\");\n if (pNode != null) {\n pNode.open = true;\n queue.push({pId: pNode.pId});\n result.push(pNode);\n }\n }\n return BI.uniqBy(BI.map(result, function (idx, node) {\n return self._createJson(node, node.open);\n }), \"id\");\n },\n\n _digest: function (v) {\n var o = this.options;\n if(o.itemsCreator === BI.emptyFn) {\n var result = BI.find(o.items, function (i, item) {\n return item.value === v;\n });\n return BI.isNotNull(result) ? result.text : o.text;\n }\n return o.valueFormatter(v);\n\n },\n\n _getShowText: function () {\n return this.editor.getText();\n },\n\n stopEditing: function () {\n this.searcher.stopSearch();\n },\n\n getSearcher: function () {\n return this.searcher;\n },\n\n populate: function (items) {\n this.options.items = items;\n this._initData();\n },\n\n setValue: function (v) {\n this.editor.setState(this._digest(v[0]));\n },\n\n getValue: function () {\n return this.searcher.getValue();\n }\n});\nBI.MultiLayerSingleTreeTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiLayerSingleTreeTrigger.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiLayerSingleTreeTrigger.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiLayerSingleTreeTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiLayerSingleTreeTrigger.EVENT_START = \"EVENT_START\";\nBI.MultiLayerSingleTreeTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\nBI.shortcut(\"bi.multilayer_single_tree_trigger\", BI.MultiLayerSingleTreeTrigger);","/**\n * 加号表示的组节点\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSingleTreeFirstPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MultiLayerSingleTreeFirstPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-single-tree-first-plus-group-node bi-list-item\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = this._createNode();\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n doClick: function () {\n BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSingleTreeFirstPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.node)) {\n this.node.setOpened(v);\n }\n },\n\n _createNode: function () {\n var self = this, o = this.options;\n\n return BI.createWidget({\n type: \"bi.first_plus_group_node\",\n cls: \"bi-list-item-none\",\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n open: o.open,\n isLastNode: o.isLastNode,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }]\n });\n }\n});\n\nBI.shortcut(\"bi.multilayer_single_tree_first_plus_group_node\", BI.MultiLayerSingleTreeFirstPlusGroupNode);","/**\n * 加号表示的组节点\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSingleTreeLastPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MultiLayerSingleTreeLastPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-single-tree-last-plus-group-node bi-list-item\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSingleTreeLastPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = this._createNode();\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n doClick: function () {\n BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSingleTreeLastPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.node)) {\n this.node.setOpened(v);\n }\n },\n\n _createNode: function () {\n var self = this, o = this.options;\n\n return BI.createWidget({\n type: \"bi.last_plus_group_node\",\n cls: \"bi-list-item-none\",\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n open: o.open,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }]\n });\n }\n});\n\nBI.shortcut(\"bi.multilayer_single_tree_last_plus_group_node\", BI.MultiLayerSingleTreeLastPlusGroupNode);","/**\n * 加号表示的组节点\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSingleTreeMidPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.MultiLayerSingleTreeMidPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-single-tree-mid-plus-group-node bi-list-item\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSingleTreeMidPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = this._createNode();\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n doClick: function () {\n BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSingleTreeMidPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.node)) {\n this.node.setOpened(v);\n }\n },\n\n _createNode: function () {\n var self = this, o = this.options;\n\n return BI.createWidget({\n type: \"bi.mid_plus_group_node\",\n cls: \"bi-list-item-none\",\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n open: o.open,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }]\n });\n }\n});\n\nBI.shortcut(\"bi.multilayer_single_tree_mid_plus_group_node\", BI.MultiLayerSingleTreeMidPlusGroupNode);","/**\n *@desc 根节点,既是第一个又是最后一个\n *@author dailer\n *@date 2018/09/16\n */\nBI.MultiLayerSingleTreePlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.MultiLayerSingleTreePlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-multilayer-single-tree-plus-group-node bi-list-item\",\n layer: 0, // 第几层级\n id: \"\",\n pId: \"\",\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSingleTreePlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.node = this._createNode();\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.node);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doRedMark: function () {\n this.node.doRedMark.apply(this.node, arguments);\n },\n\n unRedMark: function () {\n this.node.unRedMark.apply(this.node, arguments);\n },\n\n doClick: function () {\n BI.MultiLayerSingleTreePlusGroupNode.superclass.doClick.apply(this, arguments);\n this.node.setSelected(this.isSelected());\n },\n\n setOpened: function (v) {\n BI.MultiLayerSingleTreePlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.node)) {\n this.node.setOpened(v);\n }\n },\n\n _createNode: function () {\n var self = this, o = this.options;\n\n return BI.createWidget({\n type: \"bi.plus_group_node\",\n cls: \"bi-list-item-none\",\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n open: o.open,\n isLastNode: o.isLastNode,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }]\n });\n }\n});\n\nBI.shortcut(\"bi.multilayer_single_tree_plus_group_node\", BI.MultiLayerSingleTreePlusGroupNode);","/**\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSingleTreeFirstTreeLeafItem\n * @extends BI.BasicButton\n */\nBI.MultiLayerSingleTreeFirstTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-multilayer-single-tree-first-tree-leaf-item bi-list-item-active\",\n logic: {\n dynamic: false\n },\n layer: 0,\n id: \"\",\n pId: \"\",\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.item = BI.createWidget({\n type: \"bi.first_tree_leaf_item\",\n cls: \"bi-list-item-none\",\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n this.item.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.item);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doHighLight: function () {\n this.item.doHighLight.apply(this.item, arguments);\n },\n\n unHighLight: function () {\n this.item.unHighLight.apply(this.item, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n },\n\n doClick: function () {\n BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.doClick.apply(this, arguments);\n this.item.setSelected(this.isSelected());\n },\n\n setSelected: function (v) {\n BI.MultiLayerSingleTreeFirstTreeLeafItem.superclass.setSelected.apply(this, arguments);\n this.item.setSelected(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_single_tree_first_tree_leaf_item\", BI.MultiLayerSingleTreeFirstTreeLeafItem);","/**\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSingleTreeLastTreeLeafItem\n * @extends BI.BasicButton\n */\nBI.MultiLayerSingleTreeLastTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-multilayer-single-tree-last-tree-leaf-item bi-list-item-active\",\n logic: {\n dynamic: false\n },\n layer: 0,\n id: \"\",\n pId: \"\",\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSingleTreeLastTreeLeafItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.item = BI.createWidget({\n type: \"bi.last_tree_leaf_item\",\n cls: \"bi-list-item-none\",\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n this.item.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.item);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doHighLight: function () {\n this.item.doHighLight.apply(this.item, arguments);\n },\n\n unHighLight: function () {\n this.item.unHighLight.apply(this.item, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n },\n\n doClick: function () {\n BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.doClick.apply(this, arguments);\n this.item.setSelected(this.isSelected());\n },\n\n setSelected: function (v) {\n BI.MultiLayerSingleTreeLastTreeLeafItem.superclass.setSelected.apply(this, arguments);\n this.item.setSelected(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_single_tree_last_tree_leaf_item\", BI.MultiLayerSingleTreeLastTreeLeafItem);","/**\n *\n * Created by GUY on 2016/1/27.\n * @class BI.MultiLayerSingleTreeMidTreeLeafItem\n * @extends BI.BasicButton\n */\nBI.MultiLayerSingleTreeMidTreeLeafItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-multilayer-single-tree-mid-tree-leaf-item bi-list-item-active\",\n logic: {\n dynamic: false\n },\n layer: 0,\n id: \"\",\n pId: \"\",\n height: 24\n });\n },\n _init: function () {\n BI.MultiLayerSingleTreeMidTreeLeafItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.item = BI.createWidget({\n type: \"bi.mid_tree_leaf_item\",\n cls: \"bi-list-item-none\",\n logic: {\n dynamic: true\n },\n id: o.id,\n pId: o.pId,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n py: o.py,\n keyword: o.keyword\n });\n this.item.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {// 本身实现click功能\n return;\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n var needBlankLayers = [];\n var pNode = o.pNode;\n while (pNode) {\n if (pNode.isLastNode) {\n needBlankLayers.push(pNode.layer)\n }\n pNode = pNode.pNode;\n }\n\n var items = [];\n BI.count(0, o.layer, function (index) {\n items.push({\n type: \"bi.layout\",\n cls: BI.contains(needBlankLayers, index) ? \"\" : \"base-line-conn-background\",\n width: 12,\n height: o.height\n });\n });\n items.push(this.item);\n BI.createWidget({\n type: \"bi.td\",\n element: this,\n columnSize: BI.makeArray(o.layer, 12),\n items: [items]\n });\n },\n\n doHighLight: function () {\n this.item.doHighLight.apply(this.item, arguments);\n },\n\n unHighLight: function () {\n this.item.unHighLight.apply(this.item, arguments);\n },\n\n getId: function () {\n return this.options.id;\n },\n\n getPId: function () {\n return this.options.pId;\n },\n\n doClick: function () {\n BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.doClick.apply(this, arguments);\n this.item.setSelected(this.isSelected());\n },\n\n setSelected: function (v) {\n BI.MultiLayerSingleTreeMidTreeLeafItem.superclass.setSelected.apply(this, arguments);\n this.item.setSelected(v);\n }\n});\n\nBI.shortcut(\"bi.multilayer_single_tree_mid_tree_leaf_item\", BI.MultiLayerSingleTreeMidTreeLeafItem);","/**\n *\n * @class BI.MultiSelectCheckPane\n * @extends BI.Widget\n */\nBI.MultiSelectCheckPane = BI.inherit(BI.Widget, {\n\n constants: {\n height: 12,\n lgap: 10,\n tgap: 10,\n bgap: 5\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectCheckPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-check-pane bi-background\",\n items: [],\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n onClickContinueSelect: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectCheckPane.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n\n this.storeValue = opts.value || {};\n this.display = BI.createWidget({\n type: \"bi.display_selected_list\",\n items: opts.items,\n itemsCreator: function (op, callback) {\n op = BI.extend(op || {}, {\n selectedValues: self.storeValue.value\n });\n if (self.storeValue.type === BI.Selection.Multi) {\n callback({\n items: BI.map(self.storeValue.value, function (i, v) {\n var txt = opts.valueFormatter(v) || v;\n return {\n text: txt,\n value: v,\n title: txt\n };\n })\n });\n return;\n }\n opts.itemsCreator(op, callback);\n }\n });\n\n this.continueSelect = BI.createWidget({\n type: \"bi.text_button\",\n text: BI.i18nText(\"BI-Continue_Select\"),\n cls: \"multi-select-check-selected bi-high-light\"\n });\n\n this.continueSelect.on(BI.TextButton.EVENT_CHANGE, function () {\n opts.onClickContinueSelect();\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n height: this.constants.height,\n el: {\n type: \"bi.vertical_adapt\",\n cls: \"multi-select-continue-select\",\n items: [\n {\n el: {\n type: \"bi.label\",\n text: BI.i18nText(\"BI-Selected_Data\")\n },\n lgap: this.constants.lgap\n },\n {\n el: this.continueSelect,\n lgap: this.constants.lgap\n }]\n },\n tgap: this.constants.tgap\n }, {\n height: \"fill\",\n el: this.display,\n tgap: this.constants.bgap\n }]\n });\n },\n\n setValue: function (v) {\n this.storeValue = v || {};\n },\n\n empty: function () {\n this.display.empty();\n },\n\n populate: function () {\n this.display.populate.apply(this.display, arguments);\n }\n});\n\nBI.shortcut(\"bi.multi_select_check_pane\", BI.MultiSelectCheckPane);","/**\n *\n *\n * 查看已选弹出层的展示面板\n * @class BI.DisplaySelectedList\n * @extends BI.Widget\n */\nBI.DisplaySelectedList = BI.inherit(BI.Pane, {\n\n constants: {\n height: 24,\n lgap: 10\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.DisplaySelectedList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-display-list\",\n itemsCreator: BI.emptyFn,\n items: []\n });\n },\n\n _init: function () {\n BI.DisplaySelectedList.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n\n this.hasNext = false;\n\n this.button_group = BI.createWidget({\n type: \"bi.list_pane\",\n element: this,\n el: {\n type: \"bi.loader\",\n isDefaultInit: false,\n logic: {\n dynamic: true,\n scrolly: true\n },\n items: this._createItems(opts.items),\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,\n layouts: [{\n type: \"bi.vertical\",\n lgap: 10\n }]\n },\n itemsCreator: function (options, callback) {\n\n opts.itemsCreator(options, function (ob) {\n self.hasNext = !!ob.hasNext;\n callback(self._createItems(ob.items));\n });\n },\n hasNext: function () {\n return self.hasNext;\n }\n });\n },\n\n _createItems: function (items) {\n return BI.createItems(items, {\n type: \"bi.icon_text_item\",\n cls: \"cursor-default check-font icon-size-12 display-list-item bi-tips\",\n once: true,\n invalid: true,\n selected: true,\n height: this.constants.height,\n logic: {\n dynamic: true\n }\n });\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n populate: function (items) {\n if (arguments.length === 0) {\n this.button_group.populate();\n } else {\n this.button_group.populate(this._createItems(items));\n }\n }\n});\n\nBI.shortcut(\"bi.display_selected_list\", BI.DisplaySelectedList);","/**\n *\n * @class BI.MultiSelectCombo\n * @extends BI.Single\n */\nBI.MultiSelectCombo = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-combo\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n attributes: {\n tabIndex: 0\n },\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.MultiSelectCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n var assertShowValue = function () {\n if (BI.isKey(self._startValue)) {\n if (self.storeValue.type === BI.Selection.All) {\n BI.remove(self.storeValue.value, self._startValue);\n self.storeValue.assist = self.storeValue.assist || [];\n self.storeValue.assist.pushDistinct(self._startValue);\n } else {\n BI.pushDistinct(self.storeValue.value, self._startValue);\n BI.remove(self.storeValue.assist, self._startValue);\n }\n }\n\n self.trigger.getSearcher().setState(self.storeValue);\n self.numberCounter.setButtonChecked(self.storeValue);\n };\n this.storeValue = o.value || {};\n\n this._assertValue(this.storeValue);\n\n // 标记正在请求数据\n this.requesting = false;\n\n this.trigger = BI.createWidget({\n type: \"bi.multi_select_trigger\",\n allowEdit: o.allowEdit,\n height: o.height,\n text: o.text,\n // adapter: this.popup,\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: this.storeValue\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiSelectCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiSelectCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () {\n self._setStartValue(\"\");\n this.getSearcher().setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () {\n self._setStartValue(\"\");\n self.fireEvent(BI.MultiSelectCombo.EVENT_STOP);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE, function () {\n if (this.getSearcher().hasMatched()) {\n var keyword = this.getSearcher().getKeyword();\n self._join({\n type: BI.Selection.Multi,\n value: [keyword]\n }, function () {\n self.combo.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.populate();\n self._setStartValue(\"\");\n });\n }\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function (keywords) {\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n self.combo.populate();\n self._setStartValue(\"\");\n } else {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n self.fireEvent(BI.MultiSelectCombo.EVENT_SEARCHING);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n });\n }\n self.fireEvent(BI.MultiSelectCombo.EVENT_CLICK_ITEM);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () {\n // counter的值随点击项的改变而改变, 点击counter的时候不需要setValue(counter会请求刷新计数)\n // 只需要更新查看面板的selectedValue用以请求已选数据\n self.numberCounter.updateSelectedValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: !o.allowEdit,\n container: o.container,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.multi_select_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n self.numberCounter.setAdapter(this);\n },\n listeners: [{\n eventName: BI.MultiSelectPopupView.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n });\n self.fireEvent(BI.MultiSelectCombo.EVENT_CLICK_ITEM);\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,\n action: function () {\n self._defaultState();\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,\n action: function () {\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n self.numberCounter.adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: o.value,\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0 && self.numberCounter.element.find(e.target).length === 0;\n }\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n this.setValue(self.storeValue);\n BI.nextTick(function () {\n self._populate();\n });\n });\n // 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件\n this.wants2Quit = false;\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n // important:关闭弹出时又可能没有退出编辑状态\n self._stopEditing();\n if (self.requesting === true) {\n self.wants2Quit = true;\n } else {\n self.fireEvent(BI.MultiSelectCombo.EVENT_CONFIRM);\n }\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.numberCounter.hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n this.numberCounter = BI.createWidget({\n type: \"bi.multi_select_check_selected_switcher\",\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: this.storeValue\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n this.updateSelectedValue(self.storeValue);\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n self.trigger.refreshPlaceHolderWidth((b === true ? self.numberCounter.element.outerWidth() + 8 : 0));\n });\n });\n\n this.trigger.element.click(function (e) {\n if (self.trigger.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.vertical_adapt\",\n items: [this.numberCounter]\n },\n right: o.height,\n top: 0,\n height: o.height,\n }]\n });\n },\n\n _itemsCreator4Trigger: function(op, callback) {\n var self = this, o = this.options;\n o.itemsCreator(op, function (res) {\n if (op.times === 1 && BI.isNotNull(op.keywords)) {\n // 预防trigger内部把当前的storeValue改掉\n self.trigger.setValue(BI.deepClone(self.getValue()));\n }\n callback.apply(self, arguments);\n });\n },\n\n _stopEditing: function() {\n this.trigger.stopEditing();\n this.numberCounter.hideView();\n },\n\n _defaultState: function () {\n this._stopEditing();\n this.combo.hideView();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectCombo.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectCombo.REQ_GET_ALL_DATA,\n keywords: [this.trigger.getKey()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n self.storeValue.assist && self.storeValue.assist.push(selectedMap[items[i]]);\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n BI.remove(self.storeValue.assist, item);\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n self._adjust(callback);\n });\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n adjust();\n callback();\n function adjust () {\n if (self.wants2Quit === true) {\n self.fireEvent(BI.MultiSelectCombo.EVENT_CONFIRM);\n self.wants2Quit = false;\n }\n self.requesting = false;\n }\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n BI.remove(self.storeValue.assist, v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.popup.setStartValue(value);\n },\n\n _populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n },\n\n setValue: function (v) {\n this.storeValue = v || {};\n this._assertValue(this.storeValue);\n this.combo.setValue(this.storeValue);\n this.numberCounter.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue);\n },\n\n populate: function () {\n this._populate.apply(this, arguments);\n this.numberCounter.populateSwitcher.apply(this.numberCounter, arguments);\n }\n});\n\nBI.extend(BI.MultiSelectCombo, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.MultiSelectCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiSelectCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiSelectCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiSelectCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiSelectCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.MultiSelectCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n\nBI.shortcut(\"bi.multi_select_combo\", BI.MultiSelectCombo);","/**\n *\n * @class BI.MultiSelectNoBarCombo\n * @extends BI.Single\n */\nBI.MultiSelectNoBarCombo = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectNoBarCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-combo-no-bar\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.MultiSelectNoBarCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n var assertShowValue = function () {\n if (BI.isKey(self._startValue)) {\n if (self.storeValue.type === BI.Selection.All) {\n BI.remove(self.storeValue.value, self._startValue);\n self.storeValue.assist = self.storeValue.assist || [];\n self.storeValue.assist.pushDistinct(self._startValue);\n } else {\n BI.pushDistinct(self.storeValue.value, self._startValue);\n BI.remove(self.storeValue.assist, self._startValue);\n }\n }\n self.trigger.getSearcher().setState(self.storeValue);\n self.numberCounter.setButtonChecked(self.storeValue);\n };\n this.storeValue = {\n type: BI.Selection.Multi,\n value: o.value || []\n };\n // 标记正在请求数据\n this.requesting = false;\n\n this.trigger = BI.createWidget({\n type: \"bi.multi_select_trigger\",\n height: o.height,\n text: o.text,\n // adapter: this.popup,\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: {\n type: BI.Selection.Multi,\n value: o.value\n }\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiSelectNoBarCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiSelectNoBarCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () {\n self._setStartValue(\"\");\n this.getSearcher().setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () {\n self._setStartValue(\"\");\n self.fireEvent(BI.MultiSelectNoBarCombo.EVENT_STOP);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function (keywords) {\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n self.combo.populate();\n self._setStartValue(\"\");\n } else {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n });\n }\n self.fireEvent(BI.MultiSelectNoBarCombo.EVENT_CLICK_ITEM);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () {\n // counter的值随点击项的改变而改变, 点击counter的时候不需要setValue(counter会请求刷新计数)\n // 只需要更新查看面板的selectedValue用以请求已选数据\n self.numberCounter.updateSelectedValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: false,\n container: o.container,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.multi_select_no_bar_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n self.numberCounter.setAdapter(this);\n },\n listeners: [{\n eventName: BI.MultiSelectPopupView.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n });\n self.fireEvent(BI.MultiSelectNoBarCombo.EVENT_CLICK_ITEM);\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,\n action: function () {\n self._defaultState();\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,\n action: function () {\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n self.numberCounter.adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: {\n type: BI.Selection.Multi,\n value: o.value\n },\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0 &&\n self.numberCounter.element.find(e.target).length === 0;\n }\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n this.setValue(self.storeValue);\n BI.nextTick(function () {\n self._populate();\n });\n });\n // 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件\n this.wants2Quit = false;\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n // important:关闭弹出时又可能没有退出编辑状态\n self._stopEditing();\n if (self.requesting === true) {\n self.wants2Quit = true;\n } else {\n self.fireEvent(BI.MultiSelectNoBarCombo.EVENT_CONFIRM);\n }\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.numberCounter.hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n this.numberCounter = BI.createWidget({\n type: \"bi.multi_select_check_selected_switcher\",\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: {\n type: BI.Selection.Multi,\n value: o.value\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n this.updateSelectedValue(self.storeValue);\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n self.trigger.refreshPlaceHolderWidth((b === true ? self.numberCounter.element.outerWidth() + 8 : 0));\n });\n });\n\n this.trigger.element.click(function (e) {\n if (self.trigger.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.vertical_adapt\",\n items: [this.numberCounter]\n },\n right: o.height,\n top: 0,\n height: o.height\n }]\n });\n },\n\n _itemsCreator4Trigger: function (op, callback) {\n var self = this, o = this.options;\n o.itemsCreator(op, function (res) {\n if (op.times === 1 && BI.isNotNull(op.keywords)) {\n // 预防trigger内部把当前的storeValue改掉\n self.trigger.setValue(BI.deepClone(self.storeValue));\n }\n callback.apply(self, arguments);\n });\n },\n\n _stopEditing: function () {\n this.trigger.stopEditing();\n this.numberCounter.hideView();\n },\n\n _defaultState: function () {\n this._stopEditing();\n this.combo.hideView();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectNoBarCombo.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest(items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectNoBarCombo.REQ_GET_ALL_DATA,\n keywords: [this.trigger.getKey()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n self.storeValue.assist && self.storeValue.assist.push(selectedMap[items[i]]);\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n BI.remove(self.storeValue.assist, item);\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n self._adjust(callback);\n });\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n adjust();\n callback();\n\n function adjust() {\n if (self.wants2Quit === true) {\n self.fireEvent(BI.MultiSelectNoBarCombo.EVENT_CONFIRM);\n self.wants2Quit = false;\n }\n self.requesting = false;\n }\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n BI.remove(self.storeValue.assist, v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.popup.setStartValue(value);\n },\n\n _populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n },\n\n setValue: function (v) {\n this.storeValue = {\n type: BI.Selection.Multi,\n value: v || []\n };\n this.combo.setValue(this.storeValue);\n this.numberCounter.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue.value);\n },\n\n populate: function () {\n this._populate.apply(this, arguments);\n this.numberCounter.populateSwitcher.apply(this.numberCounter, arguments);\n }\n});\n\nBI.extend(BI.MultiSelectNoBarCombo, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.MultiSelectNoBarCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiSelectNoBarCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiSelectNoBarCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiSelectNoBarCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiSelectNoBarCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.MultiSelectNoBarCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n\nBI.shortcut(\"bi.multi_select_no_bar_combo\", BI.MultiSelectNoBarCombo);","/**\n *\n * @class BI.MultiSelectInsertCombo\n * @extends BI.Single\n */\nBI.MultiSelectInsertCombo = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectInsertCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-insert-combo\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n attributes: {\n tabIndex: 0\n },\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.MultiSelectInsertCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n var assertShowValue = function () {\n if (BI.isKey(self._startValue)) {\n if(self.storeValue.type === BI.Selection.All) {\n BI.remove(self.storeValue.value, self._startValue);\n self.storeValue.assist = self.storeValue.assist || [];\n self.storeValue.assist.pushDistinct(self._startValue);\n } else {\n BI.pushDistinct(self.storeValue.value, self._startValue);\n BI.remove(self.storeValue.assist, self._startValue);\n }\n }\n self.trigger.getSearcher().setState(self.storeValue);\n self.numberCounter.setButtonChecked(self.storeValue);\n };\n this.storeValue = o.value || {};\n // 标记正在请求数据\n this.requesting = false;\n\n this.trigger = BI.createWidget({\n type: \"bi.multi_select_insert_trigger\",\n allowEdit: o.allowEdit,\n height: o.height,\n text: o.text,\n watermark: o.watermark,\n // adapter: this.popup,\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: o.value\n });\n\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_START, function () {\n self._setStartValue(\"\");\n this.getSearcher().setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_STOP, function () {\n self._setStartValue(\"\");\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_STOP);\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_PAUSE, function () {\n if (this.getSearcher().hasMatched()) {\n self._addItem(assertShowValue);\n }\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM, function () {\n if (!this.getSearcher().hasMatched()) {\n self._addItem(assertShowValue);\n var addedValue = this.getSearcher().getKeyword();\n self._stopEditing();\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_ADD_ITEM, addedValue);\n }\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_SEARCHING, function (keywords) {\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n self.combo.populate();\n self._setStartValue(\"\");\n } else {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_SEARCHING);\n });\n\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_CHANGE, function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n });\n }\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM);\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () {\n // counter的值随点击项的改变而改变, 点击counter的时候不需要setValue(counter会请求刷新计数)\n // 只需要更新查看面板的selectedValue用以请求已选数据\n self.numberCounter.updateSelectedValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: !o.allowEdit,\n el: this.trigger,\n adjustLength: 1,\n container: o.container,\n popup: {\n type: \"bi.multi_select_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n self.numberCounter.setAdapter(this);\n },\n listeners: [{\n eventName: BI.MultiSelectPopupView.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n });\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CLICK_ITEM);\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,\n action: function () {\n self._defaultState();\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,\n action: function () {\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n self.numberCounter.adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: o.value,\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0 &&\n self.numberCounter.element.find(e.target).length === 0;\n }\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n this.setValue(self.storeValue);\n BI.nextTick(function () {\n self._populate();\n });\n });\n // 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件\n this.wants2Quit = false;\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n // important:关闭弹出时又可能没有退出编辑状态\n self._stopEditing();\n if (self.requesting === true) {\n self.wants2Quit = true;\n } else {\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CONFIRM);\n }\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.numberCounter.hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n\n this.numberCounter = BI.createWidget({\n type: \"bi.multi_select_check_selected_switcher\",\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: o.value\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n this.updateSelectedValue(self.storeValue);\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n self.trigger.refreshPlaceHolderWidth((b === true ? self.numberCounter.element.outerWidth() + 8 : 0));\n });\n });\n\n this.trigger.element.click(function (e) {\n if (self.trigger.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.vertical_adapt\",\n items: [this.numberCounter]\n },\n right: o.height,\n top: 0,\n height: o.height,\n }]\n });\n },\n\n _itemsCreator4Trigger: function(op, callback) {\n var self = this, o = this.options;\n o.itemsCreator(op, function (res) {\n if (op.times === 1 && BI.isNotNull(op.keywords)) {\n // 预防trigger内部把当前的storeValue改掉\n self.trigger.setValue(BI.deepClone(self.getValue()));\n }\n callback.apply(self, arguments);\n });\n },\n\n _addItem: function (assertShowValue) {\n var self = this;\n var keyword = this.trigger.getSearcher().getKeyword();\n this._join({\n type: BI.Selection.Multi,\n value: [keyword]\n }, function () {\n // 如果在不选的状态下直接把该值添加进来\n if (self.storeValue.type === BI.Selection.Multi) {\n BI.pushDistinct(self.storeValue.value, keyword);\n }\n self.combo.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.populate();\n self._setStartValue(\"\");\n });\n },\n\n _stopEditing: function() {\n this.trigger.stopEditing();\n this.numberCounter.hideView();\n },\n\n _defaultState: function () {\n this._stopEditing();\n this.combo.hideView();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectInsertCombo.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectInsertCombo.REQ_GET_ALL_DATA,\n keywords: [this.trigger.getKey()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n self.storeValue.assist && self.storeValue.assist.push(selectedMap[items[i]]);\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n BI.remove(self.storeValue.assist, item);\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n self._adjust(callback);\n });\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n adjust();\n callback();\n function adjust () {\n if (self.wants2Quit === true) {\n self.fireEvent(BI.MultiSelectInsertCombo.EVENT_CONFIRM);\n self.wants2Quit = false;\n }\n self.requesting = false;\n }\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n // value更新的时候assist也需要更新\n BI.remove(self.storeValue.assist, v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.popup.setStartValue(value);\n },\n\n _populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n },\n\n setValue: function (v) {\n this.storeValue = v || {};\n this._assertValue(this.storeValue);\n this.combo.setValue(this.storeValue);\n this.numberCounter.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue);\n },\n\n populate: function () {\n this._populate.apply(this, arguments);\n this.numberCounter.populateSwitcher.apply(this.numberCounter, arguments);\n }\n});\n\nBI.extend(BI.MultiSelectInsertCombo, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.MultiSelectInsertCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiSelectInsertCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiSelectInsertCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiSelectInsertCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiSelectInsertCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.MultiSelectInsertCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.MultiSelectInsertCombo.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\n\nBI.shortcut(\"bi.multi_select_insert_combo\", BI.MultiSelectInsertCombo);","/**\n *\n * @class BI.MultiSelectInsertCombo\n * @extends BI.Single\n */\nBI.MultiSelectInsertNoBarCombo = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectInsertNoBarCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-insert-combo-no-bar\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.MultiSelectInsertNoBarCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n var assertShowValue = function () {\n if (BI.isKey(self._startValue)) {\n if (self.storeValue.type === BI.Selection.All) {\n BI.remove(self.storeValue.value, self._startValue);\n self.storeValue.assist = self.storeValue.assist || [];\n self.storeValue.assist.pushDistinct(self._startValue);\n } else {\n BI.pushDistinct(self.storeValue.value, self._startValue);\n BI.remove(self.storeValue.assist, self._startValue);\n }\n }\n self.trigger.getSearcher().setState(self.storeValue);\n self.numberCounter.setButtonChecked(self.storeValue);\n };\n this.storeValue = {\n type: BI.Selection.Multi,\n value: o.value || []\n };\n // 标记正在请求数据\n this.requesting = false;\n\n this.trigger = BI.createWidget({\n type: \"bi.multi_select_insert_trigger\",\n height: o.height,\n text: o.text,\n // adapter: this.popup,\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: {\n type: BI.Selection.Multi,\n value: o.value\n }\n });\n\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_START, function () {\n self._setStartValue(\"\");\n this.getSearcher().setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_STOP, function () {\n self._setStartValue(\"\");\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_PAUSE, function () {\n if (this.getSearcher().hasMatched()) {\n self._addItem(assertShowValue);\n }\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM, function () {\n if (!this.getSearcher().hasMatched()) {\n self._addItem(assertShowValue);\n var addedValue = this.getSearcher().getKeyword();\n self._stopEditing();\n self.fireEvent(BI.MultiSelectInsertNoBarCombo.EVENT_ADD_ITEM, addedValue);\n }\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_SEARCHING, function (keywords) {\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n self.combo.populate();\n self._setStartValue(\"\");\n } else {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n });\n\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_CHANGE, function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n });\n }\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () {\n // counter的值随点击项的改变而改变, 点击counter的时候不需要setValue(counter会请求刷新计数)\n // 只需要更新查看面板的selectedValue用以请求已选数据\n self.numberCounter.updateSelectedValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: false,\n container: o.container,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.multi_select_no_bar_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n self.numberCounter.setAdapter(this);\n },\n listeners: [{\n eventName: BI.MultiSelectPopupView.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n });\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,\n action: function () {\n self._defaultState();\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,\n action: function () {\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n self.numberCounter.adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: {\n type: BI.Selection.Multi,\n value: o.value\n },\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0 &&\n self.numberCounter.element.find(e.target).length === 0;\n }\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n this.setValue(self.storeValue);\n BI.nextTick(function () {\n self._populate();\n });\n });\n // 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件\n this.wants2Quit = false;\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n // important:关闭弹出时又可能没有退出编辑状态\n self._stopEditing();\n if (self.requesting === true) {\n self.wants2Quit = true;\n } else {\n self.fireEvent(BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM);\n }\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.numberCounter.hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n this.numberCounter = BI.createWidget({\n type: \"bi.multi_select_check_selected_switcher\",\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: BI.bind(this._itemsCreator4Trigger, this),\n value: {\n type: BI.Selection.Multi,\n value: o.value\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n this.updateSelectedValue(self.storeValue);\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n self.trigger.refreshPlaceHolderWidth((b === true ? self.numberCounter.element.outerWidth() + 8 : 0));\n });\n });\n\n this.trigger.element.click(function (e) {\n if (self.trigger.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.vertical_adapt\",\n items: [this.numberCounter]\n },\n right: o.height,\n top: 0,\n height: o.height\n }]\n });\n },\n\n _itemsCreator4Trigger: function(op, callback) {\n var self = this, o = this.options;\n o.itemsCreator(op, function (res) {\n if (op.times === 1 && BI.isNotNull(op.keywords)) {\n // 预防trigger内部把当前的storeValue改掉\n self.trigger.setValue(BI.deepClone(self.storeValue));\n }\n callback.apply(self, arguments);\n });\n },\n\n _addItem: function (assertShowValue) {\n var self = this;\n var keyword = this.trigger.getSearcher().getKeyword();\n this._join({\n type: BI.Selection.Multi,\n value: [keyword]\n }, function () {\n // 如果在不选的状态下直接把该值添加进来\n if (self.storeValue.type === BI.Selection.Multi) {\n BI.pushDistinct(self.storeValue.value, keyword);\n }\n self.combo.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.populate();\n self._setStartValue(\"\");\n });\n },\n\n _stopEditing: function() {\n this.trigger.stopEditing();\n this.numberCounter.hideView();\n },\n\n _defaultState: function () {\n this._stopEditing();\n this.combo.hideView();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectInsertNoBarCombo.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this.requesting = true;\n o.itemsCreator({\n type: BI.MultiSelectInsertNoBarCombo.REQ_GET_ALL_DATA,\n keywords: [this.trigger.getKey()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n self.storeValue.assist && self.storeValue.assist.push(selectedMap[items[i]]);\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n BI.remove(self.storeValue.assist, item);\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n self._adjust(callback);\n });\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n adjust();\n callback();\n function adjust () {\n if (self.wants2Quit === true) {\n self.fireEvent(BI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM);\n self.wants2Quit = false;\n }\n self.requesting = false;\n }\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n BI.remove(self.storeValue.assist, v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.popup.setStartValue(value);\n },\n\n _populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n },\n\n setValue: function (v) {\n this.storeValue = {\n type: BI.Selection.Multi,\n value: v || []\n };\n this.combo.setValue(this.storeValue);\n this.numberCounter.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue.value);\n },\n\n populate: function () {\n this._populate.apply(this, arguments);\n this.numberCounter.populateSwitcher.apply(this.numberCounter, arguments);\n }\n});\n\nBI.extend(BI.MultiSelectInsertNoBarCombo, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.MultiSelectInsertNoBarCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.MultiSelectInsertNoBarCombo.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\n\nBI.shortcut(\"bi.multi_select_insert_no_bar_combo\", BI.MultiSelectInsertNoBarCombo);","/**\n *\n * 复选下拉框\n * @class BI.MultiSelectInsertTrigger\n * @extends BI.Trigger\n */\n\nBI.MultiSelectInsertTrigger = BI.inherit(BI.Trigger, {\n\n constants: {\n height: 14,\n rgap: 4,\n lgap: 4\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectInsertTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-trigger bi-border bi-border-radius\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n searcher: {},\n switcher: {},\n\n adapter: null,\n masker: {},\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.MultiSelectInsertTrigger.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n if (o.height) {\n this.setHeight(o.height - 2);\n }\n\n this.searcher = BI.createWidget(o.searcher, {\n type: \"bi.multi_select_insert_searcher\",\n height: o.height,\n text: o.text,\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n watermark: o.watermark,\n popup: {},\n adapter: o.adapter,\n masker: o.masker,\n value: o.value\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_START, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_START);\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_ADD_ITEM);\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_PAUSE, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_PAUSE);\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_SEARCHING, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_SEARCHING, arguments);\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_STOP, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_STOP);\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_BLUR);\n });\n this.searcher.on(BI.MultiSelectInsertSearcher.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiSelectInsertTrigger.EVENT_FOCUS);\n });\n\n this.wrapNumberCounter = BI.createWidget({\n type: \"bi.layout\"\n });\n\n this.wrapper = BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [\n {\n el: this.searcher,\n width: \"fill\"\n }, {\n el: this.wrapNumberCounter,\n width: 0\n }, {\n el: BI.createWidget(),\n width: 24\n }]\n });\n\n !o.allowEdit && BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.text\",\n title: function () {\n return self.searcher.getState();\n }\n },\n left: 0,\n right: 24,\n top: 0,\n bottom: 0\n }]\n });\n },\n\n /**\n * 重新调整numberCounter的空白占位符\n */\n refreshPlaceHolderWidth: function(width) {\n this.wrapper.attr(\"items\")[1].width = width;\n this.wrapper.resize();\n },\n\n getSearcher: function () {\n return this.searcher;\n },\n\n stopEditing: function () {\n this.searcher.stopSearch();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n setValue: function (ob) {\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.searcher.getKey();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n }\n});\n\nBI.MultiSelectInsertTrigger.EVENT_TRIGGER_CLICK = \"EVENT_TRIGGER_CLICK\";\nBI.MultiSelectInsertTrigger.EVENT_COUNTER_CLICK = \"EVENT_COUNTER_CLICK\";\nBI.MultiSelectInsertTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiSelectInsertTrigger.EVENT_START = \"EVENT_START\";\nBI.MultiSelectInsertTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiSelectInsertTrigger.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.MultiSelectInsertTrigger.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW = \"EVENT_BEFORE_COUNTER_POPUPVIEW\";\nBI.MultiSelectInsertTrigger.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\nBI.MultiSelectInsertTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiSelectInsertTrigger.EVENT_BLUR = \"EVENT_BLUR\";\n\nBI.shortcut(\"bi.multi_select_insert_trigger\", BI.MultiSelectInsertTrigger);","/**\n * 多选加载数据面板\n * Created by guy on 15/11/2.\n * @class BI.MultiSelectLoader\n * @extends Widget\n */\nBI.MultiSelectLoader = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-loader\",\n logic: {\n dynamic: true\n },\n el: {\n height: 400\n },\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectLoader.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n var hasNext = false;\n\n this.storeValue = opts.value || {};\n this._assertValue(this.storeValue);\n\n this.button_group = BI.createWidget({\n type: \"bi.select_list\",\n logic: opts.logic,\n toolbar: {\n type: \"bi.multi_select_bar\",\n cls: \"bi-list-item-active\",\n iconWrapperWidth: 36\n },\n el: BI.extend({\n onLoaded: opts.onLoaded,\n el: {\n type: \"bi.loader\",\n isDefaultInit: false,\n logic: {\n dynamic: true,\n scrolly: true\n },\n el: {\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n }\n }, opts.el),\n itemsCreator: function (op, callback) {\n var startValue = self._startValue;\n self.storeValue && (op = BI.extend(op || {}, {\n selectedValues: BI.isKey(startValue) && self.storeValue.type === BI.Selection.Multi\n ? self.storeValue.value.concat(startValue) : self.storeValue.value\n }));\n opts.itemsCreator(op, function (ob) {\n hasNext = ob.hasNext;\n var firstItems = [];\n if (op.times === 1 && self.storeValue) {\n var json = BI.map(self.storeValue.value, function (i, v) {\n var txt = opts.valueFormatter(v) || v;\n return {\n text: txt,\n value: v,\n title: txt,\n selected: self.storeValue.type === BI.Selection.Multi\n };\n });\n if (BI.isKey(self._startValue) && !BI.contains(self.storeValue.value, self._startValue)) {\n var txt = opts.valueFormatter(startValue) || startValue;\n json.unshift({\n text: txt,\n value: startValue,\n title: txt,\n selected: true\n });\n }\n firstItems = self._createItems(json);\n }\n callback(firstItems.concat(self._createItems(ob.items)), ob.keyword || \"\");\n if (op.times === 1 && self.storeValue) {\n BI.isKey(startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, startValue) : BI.pushDistinct(self.storeValue.value, startValue));\n self.setValue(self.storeValue);\n }\n (op.times === 1) && self._scrollToTop();\n });\n },\n hasNext: function () {\n return hasNext;\n },\n value: this.storeValue\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Top), BI.extend({\n scrolly: true,\n vgap: 5\n }, opts.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Top, this.button_group)\n }))));\n this.button_group.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.button_group.on(BI.SelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectLoader.EVENT_CHANGE, arguments);\n });\n },\n\n _createItems: function (items) {\n return BI.createItems(items, {\n type: \"bi.multi_select_item\",\n logic: this.options.logic,\n cls: \"bi-list-item-active\",\n height: 24,\n selected: this.isAllSelected(),\n iconWrapperWidth: 36\n });\n },\n\n _scrollToTop: function () {\n var self = this;\n BI.delay(function () {\n self.button_group.element.scrollTop(0);\n }, 30);\n },\n\n isAllSelected: function () {\n return this.button_group.isAllSelected();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n setStartValue: function (v) {\n this._startValue = v;\n },\n\n setValue: function (v) {\n this.storeValue = v || {};\n this._assertValue(this.storeValue);\n this.button_group.setValue(this.storeValue);\n },\n\n getValue: function () {\n return this.button_group.getValue();\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n populate: function (items) {\n arguments[0] = this._createItems(items);\n this.button_group.populate.apply(this.button_group, arguments);\n },\n\n resetHeight: function (h) {\n this.button_group.resetHeight(h - 10);\n },\n\n resetWidth: function (w) {\n this.button_group.resetWidth(w);\n }\n});\n\nBI.MultiSelectLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_loader\", BI.MultiSelectLoader);","/**\n * 多选加载数据面板\n * Created by guy on 15/11/2.\n * @class BI.MultiSelectNoBarLoader\n * @extends Widget\n */\nBI.MultiSelectNoBarLoader = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectNoBarLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-loader\",\n logic: {\n dynamic: true\n },\n el: {\n height: 400\n },\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectNoBarLoader.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n var hasNext = false;\n\n this.storeValue = opts.value || {};\n this._assertValue(this.storeValue);\n\n this.button_group = BI.createWidget(BI.extend({\n type: \"bi.list_pane\",\n onLoaded: opts.onLoaded,\n el: {\n type: \"bi.loader\",\n isDefaultInit: false,\n logic: {\n dynamic: true,\n scrolly: true\n },\n el: {\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n },\n itemsCreator: function (op, callback) {\n var startValue = self._startValue;\n self.storeValue && (op = BI.extend(op || {}, {\n selectedValues: BI.isKey(startValue) && self.storeValue.type === BI.Selection.Multi\n ? self.storeValue.value.concat(startValue) : self.storeValue.value\n }));\n opts.itemsCreator(op, function (ob) {\n hasNext = ob.hasNext;\n var firstItems = [];\n if (op.times === 1 && self.storeValue) {\n var json = BI.map(self.storeValue.value, function (i, v) {\n var txt = opts.valueFormatter(v) || v;\n return {\n text: txt,\n value: v,\n title: txt,\n selected: self.storeValue.type === BI.Selection.Multi\n };\n });\n if (BI.isKey(self._startValue) && !BI.contains(self.storeValue.value, self._startValue)) {\n var txt = opts.valueFormatter(startValue) || startValue;\n json.unshift({\n text: txt,\n value: startValue,\n title: txt,\n selected: true\n });\n }\n firstItems = self._createItems(json);\n }\n callback(firstItems.concat(self._createItems(ob.items)), ob.keyword || \"\");\n if (op.times === 1 && self.storeValue) {\n BI.isKey(startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, startValue) : BI.pushDistinct(self.storeValue.value, startValue));\n self.setValue(self.storeValue);\n }\n (op.times === 1) && self._scrollToTop();\n });\n },\n hasNext: function () {\n return hasNext;\n },\n value: this.storeValue\n }, opts.el));\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n items: [this.button_group],\n vgap: 5\n });\n\n this.button_group.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.button_group.on(BI.SelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectNoBarLoader.EVENT_CHANGE, arguments);\n });\n },\n\n _createItems: function (items) {\n return BI.createItems(items, {\n type: \"bi.multi_select_item\",\n cls: \"bi-list-item-active\",\n logic: this.options.logic,\n height: 24,\n iconWrapperWidth: 36\n });\n },\n\n _scrollToTop: function () {\n var self = this;\n BI.delay(function () {\n self.button_group.element.scrollTop(0);\n }, 30);\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n setStartValue: function (v) {\n this._startValue = v;\n },\n\n setValue: function (v) {\n this.storeValue = v || {};\n this._assertValue(this.storeValue);\n this.button_group.setValue(this.storeValue.value);\n },\n\n getValue: function () {\n return {\n type: BI.Selection.Multi,\n value: this.button_group.getValue()\n };\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n populate: function (items) {\n arguments[0] = this._createItems(items);\n this.button_group.populate.apply(this.button_group, arguments);\n },\n\n resetHeight: function (h) {\n this.button_group.element.css({\"max-height\": h + \"px\"});\n },\n\n resetWidth: function () {\n\n }\n});\n\nBI.MultiSelectNoBarLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_no_bar_loader\", BI.MultiSelectNoBarLoader);","/**\n * 带加载的多选下拉面板\n * @class BI.MultiSelectPopupView\n * @extends Widget\n */\nBI.MultiSelectPopupView = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectPopupView.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-popup-view\",\n maxWidth: \"auto\",\n minWidth: 135,\n maxHeight: 400,\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectPopupView.superclass._init.apply(this, arguments);\n var self = this, opts = this.options;\n\n this.loader = BI.createWidget({\n type: \"bi.multi_select_loader\",\n itemsCreator: opts.itemsCreator,\n valueFormatter: opts.valueFormatter,\n onLoaded: opts.onLoaded,\n value: opts.value\n });\n\n this.popupView = BI.createWidget({\n type: \"bi.multi_popup_view\",\n stopPropagation: false,\n maxWidth: opts.maxWidth,\n minWidth: opts.minWidth,\n maxHeight: opts.maxHeight,\n element: this,\n buttons: [BI.i18nText(\"BI-Basic_Clears\"), BI.i18nText(\"BI-Basic_Sure\")],\n el: this.loader,\n value: opts.value\n });\n\n this.popupView.on(BI.MultiPopupView.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectPopupView.EVENT_CHANGE);\n });\n this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (index) {\n switch (index) {\n case 0:\n self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CLEAR);\n break;\n case 1:\n self.fireEvent(BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM);\n break;\n }\n });\n },\n\n isAllSelected: function () {\n return this.loader.isAllSelected();\n },\n\n setStartValue: function (v) {\n this.loader.setStartValue(v);\n },\n\n setValue: function (v) {\n this.popupView.setValue(v);\n },\n\n getValue: function () {\n return this.popupView.getValue();\n },\n\n populate: function (items) {\n this.popupView.populate.apply(this.popupView, arguments);\n },\n\n resetHeight: function (h) {\n this.popupView.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.popupView.resetWidth(w);\n }\n});\n\nBI.MultiSelectPopupView.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiSelectPopupView.EVENT_CLICK_CONFIRM = \"EVENT_CLICK_CONFIRM\";\nBI.MultiSelectPopupView.EVENT_CLICK_CLEAR = \"EVENT_CLICK_CLEAR\";\n\n\nBI.shortcut(\"bi.multi_select_popup_view\", BI.MultiSelectPopupView);","/**\n * 带加载的多选下拉面板\n * @class BI.MultiSelectPopupView\n * @extends Widget\n */\nBI.MultiSelectNoBarPopupView = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectNoBarPopupView.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-popup-view\",\n maxWidth: \"auto\",\n minWidth: 135,\n maxHeight: 400,\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectNoBarPopupView.superclass._init.apply(this, arguments);\n var self = this, opts = this.options;\n\n this.loader = BI.createWidget({\n type: \"bi.multi_select_no_bar_loader\",\n itemsCreator: opts.itemsCreator,\n valueFormatter: opts.valueFormatter,\n onLoaded: opts.onLoaded,\n value: opts.value\n });\n\n this.popupView = BI.createWidget({\n type: \"bi.multi_popup_view\",\n stopPropagation: false,\n maxWidth: opts.maxWidth,\n minWidth: opts.minWidth,\n maxHeight: opts.maxHeight,\n element: this,\n buttons: [BI.i18nText(\"BI-Basic_Clears\"), BI.i18nText(\"BI-Basic_Sure\")],\n el: this.loader,\n value: opts.value\n });\n\n this.popupView.on(BI.MultiPopupView.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CHANGE);\n });\n this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (index) {\n switch (index) {\n case 0:\n self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CLICK_CLEAR);\n break;\n case 1:\n self.fireEvent(BI.MultiSelectNoBarPopupView.EVENT_CLICK_CONFIRM);\n break;\n }\n });\n },\n\n setStartValue: function (v) {\n this.loader.setStartValue(v);\n },\n\n setValue: function (v) {\n this.popupView.setValue(v);\n },\n\n getValue: function () {\n return this.popupView.getValue();\n },\n\n populate: function (items) {\n this.popupView.populate.apply(this.popupView, arguments);\n },\n\n resetHeight: function (h) {\n this.popupView.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.popupView.resetWidth(w);\n }\n});\n\nBI.MultiSelectNoBarPopupView.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiSelectNoBarPopupView.EVENT_CLICK_CONFIRM = \"EVENT_CLICK_CONFIRM\";\nBI.MultiSelectNoBarPopupView.EVENT_CLICK_CLEAR = \"EVENT_CLICK_CLEAR\";\n\n\nBI.shortcut(\"bi.multi_select_no_bar_popup_view\", BI.MultiSelectNoBarPopupView);","/**\n *\n * 复选下拉框\n * @class BI.MultiSelectTrigger\n * @extends BI.Trigger\n */\n\nBI.MultiSelectTrigger = BI.inherit(BI.Trigger, {\n\n constants: {\n height: 14,\n rgap: 4,\n lgap: 4\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-trigger bi-border bi-border-radius\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n searcher: {},\n switcher: {},\n\n adapter: null,\n masker: {},\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.MultiSelectTrigger.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n if (o.height) {\n this.setHeight(o.height - 2);\n }\n\n this.searcher = BI.createWidget(o.searcher, {\n type: \"bi.multi_select_searcher\",\n height: o.height,\n text: o.text,\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n watermark: o.watermark,\n popup: {},\n adapter: o.adapter,\n masker: o.masker,\n value: o.value\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_START, function () {\n self.fireEvent(BI.MultiSelectTrigger.EVENT_START);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_PAUSE, function () {\n self.fireEvent(BI.MultiSelectTrigger.EVENT_PAUSE);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_SEARCHING, function () {\n self.fireEvent(BI.MultiSelectTrigger.EVENT_SEARCHING, arguments);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_STOP, function () {\n self.fireEvent(BI.MultiSelectTrigger.EVENT_STOP);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectTrigger.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiSelectTrigger.EVENT_BLUR);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiSelectTrigger.EVENT_FOCUS);\n });\n\n this.wrapNumberCounter = BI.createWidget({\n type: \"bi.layout\"\n });\n\n this.wrapper = BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [\n {\n el: this.searcher,\n width: \"fill\"\n }, {\n el: this.wrapNumberCounter,\n width: 0\n }, {\n el: BI.createWidget(),\n width: 24\n }]\n });\n\n !o.allowEdit && BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.text\",\n title: function () {\n return self.searcher.getState();\n }\n },\n left: 0,\n right: 24,\n top: 0,\n bottom: 0\n }]\n });\n },\n\n /**\n * 重新调整numberCounter的空白占位符\n */\n refreshPlaceHolderWidth: function(width) {\n this.wrapper.attr(\"items\")[1].width = width;\n this.wrapper.resize();\n },\n\n getSearcher: function () {\n return this.searcher;\n },\n\n stopEditing: function () {\n this.searcher.stopSearch();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n setValue: function (ob) {\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.searcher.getKey();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n }\n});\n\nBI.MultiSelectTrigger.EVENT_TRIGGER_CLICK = \"EVENT_TRIGGER_CLICK\";\nBI.MultiSelectTrigger.EVENT_COUNTER_CLICK = \"EVENT_COUNTER_CLICK\";\nBI.MultiSelectTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiSelectTrigger.EVENT_START = \"EVENT_START\";\nBI.MultiSelectTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiSelectTrigger.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.MultiSelectTrigger.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW = \"EVENT_BEFORE_COUNTER_POPUPVIEW\";\nBI.MultiSelectTrigger.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiSelectTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\n\nBI.shortcut(\"bi.multi_select_trigger\", BI.MultiSelectTrigger);","/**\n *\n * 在搜索框中输入文本弹出的面板\n * @class BI.MultiSelectSearchInsertPane\n * @extends Widget\n */\n\nBI.MultiSelectSearchInsertPane = BI.inherit(BI.Widget, {\n\n constants: {\n height: 24,\n lgap: 10,\n tgap: 5\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectSearchInsertPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-search-pane bi-card\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n keywordGetter: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectSearchInsertPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.tooltipClick = BI.createWidget({\n type: \"bi.label\",\n invisible: true,\n text: BI.i18nText(\"BI-Click_Blank_To_Select\"),\n cls: \"multi-select-toolbar\",\n height: this.constants.height\n });\n\n this.addNotMatchTip = BI.createWidget({\n type: \"bi.text_button\",\n invisible: true,\n text: BI.i18nText(\"BI-Basic_Click_To_Add_Text\", \"\"),\n height: this.constants.height,\n cls: \"bi-high-light\",\n hgap: 5,\n handler: function () {\n self.fireEvent(BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM, o.keywordGetter());\n }\n });\n\n this.loader = BI.createWidget({\n type: \"bi.multi_select_search_loader\",\n keywordGetter: o.keywordGetter,\n valueFormatter: o.valueFormatter,\n itemsCreator: function (op, callback) {\n o.itemsCreator.apply(self, [op, function (res) {\n callback(res);\n self.setKeyword(o.keywordGetter());\n }]);\n },\n value: o.value\n });\n this.loader.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.resizer = BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n type: \"bi.vertical\",\n items: [this.tooltipClick, this.addNotMatchTip],\n height: this.constants.height\n }, {\n el: this.loader\n }]\n });\n },\n\n setKeyword: function (keyword) {\n var hasSameValue = BI.some(this.loader.getAllButtons(), function (idx, btn) {\n return keyword === btn.getValue();\n });\n var isMatchTipVisible = this.loader.getAllButtons().length > 0 && hasSameValue;\n this.tooltipClick.setVisible(isMatchTipVisible);\n this.addNotMatchTip.setVisible(!isMatchTipVisible);\n !isMatchTipVisible && this.addNotMatchTip.setText(BI.i18nText(\"BI-Basic_Click_To_Add_Text\", keyword));\n },\n\n isAllSelected: function () {\n return this.loader.isAllSelected();\n },\n\n hasMatched: function () {\n return this.tooltipClick.isVisible();\n },\n\n setValue: function (v) {\n this.loader.setValue(v);\n },\n\n getValue: function () {\n return this.loader.getValue();\n },\n\n empty: function () {\n this.loader.empty();\n },\n\n populate: function (items) {\n this.loader.populate.apply(this.loader, arguments);\n }\n});\n\nBI.MultiSelectSearchInsertPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\n\nBI.shortcut(\"bi.multi_select_search_insert_pane\", BI.MultiSelectSearchInsertPane);","/**\n * 多选加载数据搜索loader面板\n * Created by guy on 15/11/4.\n * @class BI.MultiSelectSearchLoader\n * @extends Widget\n */\nBI.MultiSelectSearchLoader = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectSearchLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-search-loader\",\n itemsCreator: BI.emptyFn,\n keywordGetter: BI.emptyFn,\n valueFormatter: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectSearchLoader.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n var hasNext = false;\n this.storeValue = BI.deepClone(opts.value);\n this.button_group = BI.createWidget({\n type: \"bi.select_list\",\n toolbar: {\n type: \"bi.multi_select_bar\",\n cls: \"bi-list-item-active\",\n iconWrapperWidth: 36\n },\n element: this,\n logic: {\n dynamic: false\n },\n value: opts.value,\n el: {\n tipText: BI.i18nText(\"BI-No_Select\"),\n el: {\n type: \"bi.loader\",\n isDefaultInit: false,\n logic: {\n dynamic: true,\n scrolly: true\n },\n el: {\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n }\n },\n itemsCreator: function (op, callback) {\n self.storeValue && (op = BI.extend(op || {}, {\n selectedValues: self.storeValue.value\n }));\n opts.itemsCreator(op, function (ob) {\n var keyword = ob.keyword = opts.keywordGetter();\n hasNext = ob.hasNext;\n var firstItems = [];\n if (op.times === 1 && self.storeValue) {\n var json = self._filterValues(self.storeValue);\n firstItems = self._createItems(json);\n }\n callback(firstItems.concat(self._createItems(ob.items)), keyword);\n if (op.times === 1 && self.storeValue) {\n self.setValue(self.storeValue);\n }\n });\n },\n hasNext: function () {\n return hasNext;\n }\n });\n this.button_group.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.button_group.on(BI.SelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectSearchLoader.EVENT_CHANGE, arguments);\n });\n },\n\n _createItems: function (items) {\n return BI.createItems(items, {\n type: \"bi.multi_select_item\",\n logic: {\n dynamic: false\n },\n height: 24,\n selected: this.isAllSelected(),\n cls: \"bi-list-item-active\",\n iconWrapperWidth: 36\n });\n },\n\n isAllSelected: function () {\n return this.button_group.isAllSelected();\n },\n\n _filterValues: function (src) {\n var o = this.options;\n var keyword = o.keywordGetter();\n var values = BI.deepClone(src.value) || [];\n var newValues = BI.map(values, function (i, v) {\n return {\n text: o.valueFormatter(v) || v,\n value: v\n };\n });\n if (BI.isKey(keyword)) {\n var search = BI.Func.getSearchResult(newValues, keyword);\n values = search.match.concat(search.find);\n }\n return BI.map(values, function (i, v) {\n return {\n text: v.text,\n title: v.text,\n value: v.value,\n selected: src.type === BI.Selection.All\n };\n });\n },\n\n setValue: function (v) {\n // 暂存的值一定是新的值,不然v改掉后,storeValue也跟着改了\n this.storeValue = BI.deepClone(v);\n this.button_group.setValue(v);\n },\n\n getValue: function () {\n return this.button_group.getValue();\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n populate: function (items) {\n this.button_group.populate.apply(this.button_group, arguments);\n },\n\n resetHeight: function (h) {\n this.button_group.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.button_group.resetWidth(w);\n }\n});\n\nBI.MultiSelectSearchLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_search_loader\", BI.MultiSelectSearchLoader);","/**\n *\n * 在搜索框中输入文本弹出的面板\n * @class BI.MultiSelectSearchPane\n * @extends Widget\n */\n\nBI.MultiSelectSearchPane = BI.inherit(BI.Widget, {\n\n constants: {\n height: 24,\n lgap: 10,\n tgap: 5\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectSearchPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-search-pane bi-card\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n keywordGetter: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectSearchPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.tooltipClick = BI.createWidget({\n type: \"bi.label\",\n invisible: true,\n text: BI.i18nText(\"BI-Click_Blank_To_Select\"),\n cls: \"multi-select-toolbar\",\n height: this.constants.height\n });\n\n this.loader = BI.createWidget({\n type: \"bi.multi_select_search_loader\",\n keywordGetter: o.keywordGetter,\n valueFormatter: o.valueFormatter,\n itemsCreator: function (op, callback) {\n o.itemsCreator.apply(self, [op, function (res) {\n callback(res);\n self.setKeyword(o.keywordGetter());\n }]);\n },\n value: o.value\n });\n this.loader.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.resizer = BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.tooltipClick,\n height: 0\n }, {\n el: this.loader\n }]\n });\n this.tooltipClick.setVisible(false);\n },\n\n setKeyword: function (keyword) {\n var btn;\n var isVisible = this.loader.getAllButtons().length > 0 && (btn = this.loader.getAllButtons()[0]) && (keyword === btn.getValue());\n if (isVisible !== this.tooltipClick.isVisible()) {\n this.tooltipClick.setVisible(isVisible);\n this.resizer.attr(\"items\")[0].height = (isVisible ? this.constants.height : 0);\n this.resizer.resize();\n }\n },\n\n isAllSelected: function () {\n return this.loader.isAllSelected();\n },\n\n hasMatched: function () {\n return this.tooltipClick.isVisible();\n },\n\n setValue: function (v) {\n this.loader.setValue(v);\n },\n\n getValue: function () {\n return this.loader.getValue();\n },\n\n empty: function () {\n this.loader.empty();\n },\n\n populate: function (items) {\n this.loader.populate.apply(this.loader, arguments);\n }\n});\n\nBI.MultiSelectSearchPane.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.multi_select_search_pane\", BI.MultiSelectSearchPane);","/**\n * 查看已选按钮\n * Created by guy on 15/11/3.\n * @class BI.MultiSelectCheckSelectedButton\n * @extends BI.Single\n */\nBI.MultiSelectCheckSelectedButton = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectCheckSelectedButton.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-check-selected-button\",\n itemsCreator: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectCheckSelectedButton.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.numberCounter = BI.createWidget({\n type: \"bi.text_button\",\n element: this,\n hgap: 4,\n text: \"0\",\n textAlign: \"center\",\n textHeight: 16,\n cls: \"bi-high-light-background count-tip\"\n });\n this.numberCounter.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.numberCounter.on(BI.TextButton.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE, arguments);\n });\n\n this.numberCounter.element.hover(function () {\n self.numberCounter.setTag(self.numberCounter.getText());\n self.numberCounter.setText(BI.i18nText(\"BI-Check_Selected\"));\n }, function () {\n self.numberCounter.setText(self.numberCounter.getTag());\n });\n this.setVisible(false);\n if(BI.isNotNull(o.value)){\n this.setValue(o.value);\n }\n },\n\n _populate: function (ob) {\n var self = this, o = this.options;\n if (ob.type === BI.Selection.All) {\n o.itemsCreator({\n type: BI.MultiSelectCombo.REQ_GET_DATA_LENGTH\n }, function (res) {\n var length = res.count - ob.value.length;\n BI.nextTick(function () {\n self.numberCounter.setText(length);\n self.setVisible(length > 0);\n });\n });\n return;\n }\n BI.nextTick(function () {\n self.numberCounter.setText(ob.value.length);\n self.setVisible(ob.value.length > 0);\n });\n },\n\n _assertValue: function (ob) {\n ob || (ob = {});\n ob.type || (ob.type = BI.Selection.Multi);\n ob.value || (ob.value = []);\n return ob;\n },\n\n setValue: function (ob) {\n ob = this._assertValue(ob);\n this.options.value = ob;\n this._populate(ob);\n },\n\n populate: function () {\n this._populate(this._assertValue(this.options.value));\n },\n\n getValue: function () {\n\n }\n});\n\nBI.MultiSelectCheckSelectedButton.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_check_selected_button\", BI.MultiSelectCheckSelectedButton);","/**\n * 多选输入框\n * Created by guy on 15/11/3.\n * @class BI.MultiSelectEditor\n * @extends Widget\n */\nBI.MultiSelectEditor = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectEditor.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-editor\",\n el: {},\n watermark: BI.i18nText(\"BI-Basic_Search\")\n });\n },\n\n _init: function () {\n BI.MultiSelectEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget(o.el, {\n type: \"bi.state_editor\",\n element: this,\n height: o.height,\n watermark: o.watermark,\n allowBlank: true,\n value: o.value,\n defaultText: o.text,\n text: o.text,\n tipType: o.tipType,\n warningTitle: o.warningTitle,\n });\n\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.editor.on(BI.StateEditor.EVENT_PAUSE, function () {\n self.fireEvent(BI.MultiSelectEditor.EVENT_PAUSE);\n });\n this.editor.on(BI.StateEditor.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiSelectEditor.EVENT_FOCUS);\n });\n this.editor.on(BI.StateEditor.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiSelectEditor.EVENT_BLUR);\n });\n },\n\n focus: function () {\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n },\n\n setState: function (state) {\n this.editor.setState(state);\n },\n\n setValue: function (v) {\n this.editor.setValue(v);\n },\n\n setTipType: function (v) {\n this.editor.setTipType(v);\n },\n\n getValue: function () {\n var v = this.editor.getState();\n if (BI.isArray(v) && v.length > 0) {\n return v[v.length - 1];\n }\n return \"\";\n\n },\n\n getState: function () {\n return this.editor.getText();\n },\n\n getKeywords: function () {\n var val = this.editor.getLastChangedValue();\n var keywords = val.match(/[\\S]+/g);\n if (BI.isEndWithBlank(val)) {\n return keywords.concat([\" \"]);\n }\n return keywords;\n },\n\n populate: function (items) {\n\n }\n});\n\nBI.MultiSelectEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiSelectEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiSelectEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.shortcut(\"bi.multi_select_editor\", BI.MultiSelectEditor);\n","/**\n * searcher\n * Created by guy on 15/11/3.\n * @class BI.MultiSelectInsertSearcher\n * @extends Widget\n */\nBI.MultiSelectInsertSearcher = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectInsertSearcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-searcher\",\n itemsCreator: BI.emptyFn,\n el: {},\n popup: {},\n valueFormatter: BI.emptyFn,\n adapter: null,\n masker: {},\n text: BI.i18nText(\"BI-Basic_Please_Select\")\n });\n },\n\n _init: function () {\n BI.MultiSelectInsertSearcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget(o.el, {\n type: \"bi.multi_select_editor\",\n watermark: o.watermark,\n height: o.height,\n text: o.text,\n listeners: [{\n eventName: BI.MultiSelectEditor.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiSelectEditor.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_BLUR);\n }\n }]\n });\n\n this.searcher = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n element: this,\n height: o.height,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n el: this.editor,\n\n popup: BI.extend({\n type: \"bi.multi_select_search_insert_pane\",\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.editor.getValue();\n },\n itemsCreator: function (op, callback) {\n var keyword = self.editor.getValue();\n op.keywords = [keyword];\n this.setKeyword(keyword);\n o.itemsCreator(op, callback);\n },\n value: o.value,\n listeners: [{\n eventName: BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,\n action: function () {\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_ADD_ITEM);\n }\n }]\n }, o.popup),\n\n adapter: o.adapter,\n masker: o.masker\n });\n this.searcher.on(BI.Searcher.EVENT_START, function () {\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_START);\n });\n this.searcher.on(BI.Searcher.EVENT_PAUSE, function () {\n if (this.hasMatched()) {\n\n }\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_PAUSE);\n });\n this.searcher.on(BI.Searcher.EVENT_STOP, function () {\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_STOP);\n });\n this.searcher.on(BI.Searcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.Searcher.EVENT_SEARCHING, function () {\n var keywords = this.getKeywords();\n self.fireEvent(BI.MultiSelectInsertSearcher.EVENT_SEARCHING, keywords);\n });\n if (BI.isNotNull(o.value)) {\n this.setState(o.value);\n }\n },\n\n adjustView: function () {\n this.searcher.adjustView();\n },\n\n isSearching: function () {\n return this.searcher.isSearching();\n },\n\n stopSearch: function () {\n this.searcher.stopSearch();\n },\n\n getKeyword: function () {\n return this.editor.getValue();\n },\n\n hasMatched: function () {\n return this.searcher.hasMatched();\n },\n\n hasChecked: function () {\n return this.searcher.getView() && this.searcher.getView().hasChecked();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n setState: function (ob) {\n var o = this.options;\n ob || (ob = {});\n ob.value || (ob.value = []);\n if (ob.type === BI.Selection.All) {\n if (ob.value.length === 0) {\n this.editor.setState(BI.Selection.All);\n } else if (BI.size(ob.assist) <= 20) {\n var state = \"\";\n BI.each(ob.assist, function (i, v) {\n if (i === 0) {\n state += \"\" + (o.valueFormatter(v + \"\") || v);\n } else {\n state += \",\" + (o.valueFormatter(v + \"\") || v);\n }\n });\n this.editor.setState(state);\n } else {\n this.editor.setState(BI.Selection.Multi);\n }\n } else {\n if (ob.value.length === 0) {\n this.editor.setState(BI.Selection.None);\n } else if (BI.size(ob.value) <= 20) {\n var state = \"\";\n BI.each(ob.value, function (i, v) {\n if (i === 0) {\n state += \"\" + (o.valueFormatter(v + \"\") || v);\n } else {\n state += \",\" + (o.valueFormatter(v + \"\") || v);\n }\n });\n this.editor.setState(state);\n } else {\n this.editor.setState(BI.Selection.Multi);\n }\n }\n },\n\n getState: function() {\n return this.editor.getState();\n },\n\n setValue: function (ob) {\n this.setState(ob);\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n },\n\n populate: function (items) {\n this.searcher.populate.apply(this.searcher, arguments);\n }\n});\n\nBI.MultiSelectInsertSearcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.MultiSelectInsertSearcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiSelectInsertSearcher.EVENT_START = \"EVENT_START\";\nBI.MultiSelectInsertSearcher.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiSelectInsertSearcher.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.MultiSelectInsertSearcher.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiSelectInsertSearcher.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\nBI.MultiSelectInsertSearcher.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiSelectInsertSearcher.EVENT_BLUR = \"EVENT_BLUR\";\nBI.shortcut(\"bi.multi_select_insert_searcher\", BI.MultiSelectInsertSearcher);","/**\n * searcher\n * Created by guy on 15/11/3.\n * @class BI.MultiSelectSearcher\n * @extends Widget\n */\nBI.MultiSelectSearcher = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectSearcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-searcher\",\n itemsCreator: BI.emptyFn,\n el: {},\n popup: {},\n valueFormatter: BI.emptyFn,\n adapter: null,\n masker: {},\n text: BI.i18nText(\"BI-Basic_Please_Select\")\n });\n },\n\n _init: function () {\n BI.MultiSelectSearcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget(o.el, {\n type: \"bi.multi_select_editor\",\n height: o.height,\n text: o.text,\n watermark: o.watermark,\n listeners: [{\n eventName: BI.MultiSelectEditor.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.MultiSelectSearcher.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiSelectEditor.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.MultiSelectSearcher.EVENT_BLUR);\n }\n }]\n });\n\n this.searcher = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n element: this,\n height: o.height,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n el: this.editor,\n\n popup: BI.extend({\n type: \"bi.multi_select_search_pane\",\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.editor.getValue();\n },\n itemsCreator: function (op, callback) {\n var keyword = self.editor.getValue();\n op.keywords = [keyword];\n this.setKeyword(keyword);\n o.itemsCreator(op, callback);\n },\n value: o.value\n }, o.popup),\n\n adapter: o.adapter,\n masker: o.masker\n });\n this.searcher.on(BI.Searcher.EVENT_START, function () {\n self.fireEvent(BI.MultiSelectSearcher.EVENT_START);\n });\n this.searcher.on(BI.Searcher.EVENT_PAUSE, function () {\n if (this.hasMatched()) {\n\n }\n self.fireEvent(BI.MultiSelectSearcher.EVENT_PAUSE);\n });\n this.searcher.on(BI.Searcher.EVENT_STOP, function () {\n self.fireEvent(BI.MultiSelectSearcher.EVENT_STOP);\n });\n this.searcher.on(BI.Searcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectSearcher.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.Searcher.EVENT_SEARCHING, function () {\n var keywords = this.getKeywords();\n self.fireEvent(BI.MultiSelectSearcher.EVENT_SEARCHING, keywords);\n });\n if (BI.isNotNull(o.value)) {\n this.setState(o.value);\n }\n },\n\n adjustView: function () {\n this.searcher.adjustView();\n },\n\n isSearching: function () {\n return this.searcher.isSearching();\n },\n\n stopSearch: function () {\n this.searcher.stopSearch();\n },\n\n getKeyword: function () {\n return this.editor.getValue();\n },\n\n hasMatched: function () {\n return this.searcher.hasMatched();\n },\n\n hasChecked: function () {\n return this.searcher.getView() && this.searcher.getView().hasChecked();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n setState: function (ob) {\n var o = this.options;\n ob || (ob = {});\n ob.value || (ob.value = []);\n if (ob.type === BI.Selection.All) {\n if (ob.value.length === 0) {\n this.editor.setState(BI.Selection.All);\n } else if (BI.size(ob.assist) <= 20) {\n var state = \"\";\n BI.each(ob.assist, function (i, v) {\n if (i === 0) {\n state += \"\" + (o.valueFormatter(v + \"\") || v);\n } else {\n state += \",\" + (o.valueFormatter(v + \"\") || v);\n }\n });\n this.editor.setState(state);\n } else {\n this.editor.setState(BI.Selection.Multi);\n }\n } else {\n if (ob.value.length === 0) {\n this.editor.setState(BI.Selection.None);\n } else if (BI.size(ob.value) <= 20) {\n var state = \"\";\n BI.each(ob.value, function (i, v) {\n if (i === 0) {\n state += \"\" + (o.valueFormatter(v + \"\") || v);\n } else {\n state += \",\" + (o.valueFormatter(v + \"\") || v);\n }\n });\n this.editor.setState(state);\n } else {\n this.editor.setState(BI.Selection.Multi);\n }\n }\n },\n\n getState: function() {\n return this.editor.getState();\n },\n\n setValue: function (ob) {\n this.setState(ob);\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n },\n\n populate: function (items) {\n this.searcher.populate.apply(this.searcher, arguments);\n }\n});\n\nBI.MultiSelectSearcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.MultiSelectSearcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiSelectSearcher.EVENT_START = \"EVENT_START\";\nBI.MultiSelectSearcher.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiSelectSearcher.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.MultiSelectSearcher.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiSelectSearcher.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiSelectSearcher.EVENT_BLUR = \"EVENT_BLUR\";\nBI.shortcut(\"bi.multi_select_searcher\", BI.MultiSelectSearcher);","/**\n * 查看已选switcher\n * Created by guy on 15/11/3.\n * @class BI.MultiSelectCheckSelectedSwitcher\n * @extends Widget\n */\nBI.MultiSelectCheckSelectedSwitcher = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectCheckSelectedSwitcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-check-selected-switcher\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n el: {},\n popup: {},\n adapter: null,\n masker: {}\n });\n },\n\n _init: function () {\n BI.MultiSelectCheckSelectedSwitcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.button = BI.createWidget(o.el, {\n type: \"bi.multi_select_check_selected_button\",\n itemsCreator: o.itemsCreator,\n value: o.value\n });\n this.button.on(BI.Events.VIEW, function () {\n self.fireEvent(BI.Events.VIEW, arguments);\n });\n this.switcher = BI.createWidget({\n type: \"bi.switcher\",\n toggle: false,\n element: this,\n el: this.button,\n popup: BI.extend({\n type: \"bi.multi_select_check_pane\",\n valueFormatter: o.valueFormatter,\n itemsCreator: o.itemsCreator,\n onClickContinueSelect: function () {\n self.switcher.hideView();\n },\n ref: function (_ref) {\n self.checkPane = _ref;\n },\n value: o.value\n }, o.popup),\n adapter: o.adapter,\n masker: o.masker\n });\n this.switcher.on(BI.Switcher.EVENT_TRIGGER_CHANGE, function () {\n self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE);\n });\n this.switcher.on(BI.Switcher.EVENT_BEFORE_POPUPVIEW, function () {\n self.fireEvent(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW);\n });\n this.switcher.on(BI.Switcher.EVENT_AFTER_POPUPVIEW, function () {\n var me = this;\n BI.nextTick(function () {\n me.populate();\n });\n });\n },\n\n adjustView: function () {\n this.switcher.adjustView();\n },\n\n hideView: function () {\n this.switcher.empty();\n this.switcher.hideView();\n },\n\n setAdapter: function (adapter) {\n this.switcher.setAdapter(adapter);\n },\n\n setValue: function (v) {\n this.switcher.setValue(v);\n },\n\n // 与setValue的区别是只更新查看已选面板的的selectedValue, 不会更新按钮的计数\n updateSelectedValue: function (v) {\n this.checkPane.setValue(v);\n },\n\n setButtonChecked: function (v) {\n this.button.setValue(v);\n },\n\n getValue: function () {\n\n },\n\n populate: function (items) {\n this.switcher.populate.apply(this.switcher, arguments);\n },\n\n populateSwitcher: function () {\n this.button.populate.apply(this.button, arguments);\n }\n});\n\nBI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE = \"EVENT_TRIGGER_CHANGE\";\nBI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.multi_select_check_selected_switcher\", BI.MultiSelectCheckSelectedSwitcher);","/**\n * Created by zcf_1 on 2017/5/2.\n */\nBI.MultiSelectInsertList = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectInsertList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-insert-list\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn\n });\n },\n _init: function () {\n BI.MultiSelectInsertList.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n this.storeValue = o.value || {};\n\n var assertShowValue = function () {\n BI.isKey(self._startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, self._startValue) : BI.pushDistinct(self.storeValue.value, self._startValue));\n // self.trigger.setValue(self.storeValue);\n };\n\n this.adapter = BI.createWidget({\n type: \"bi.multi_select_loader\",\n cls: \"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom\",\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n logic: {\n dynamic: true\n },\n // onLoaded: o.onLoaded,\n el: {},\n value: o.value\n });\n this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE, function () {\n self.storeValue = this.getValue();\n assertShowValue();\n self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE);\n });\n\n this.searcherPane = BI.createWidget({\n type: \"bi.multi_select_search_insert_pane\",\n cls: \"bi-border-left bi-border-right bi-border-bottom\",\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.trigger.getKeyword();\n },\n itemsCreator: function (op, callback) {\n var keyword = self.trigger.getKeyword();\n if (BI.isNotEmptyString(keyword)) {\n op.keywords = [keyword];\n this.setKeyword(op.keywords[0]);\n o.itemsCreator(op, callback);\n }\n },\n listeners: [{\n eventName: BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,\n action: function () {\n var keyword = self.trigger.getKeyword();\n if (!self.trigger.hasMatched()) {\n if (self.storeValue.type === BI.Selection.Multi) {\n BI.pushDistinct(self.storeValue.value, keyword);\n }\n self._showAdapter();\n self.adapter.setValue(self.storeValue);\n self.adapter.populate();\n if (self.storeValue.type === BI.Selection.Multi) {\n self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE);\n }\n }\n }\n }]\n });\n this.searcherPane.setVisible(false);\n\n this.trigger = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n adapter: this.adapter,\n popup: this.searcherPane,\n height: 200,\n masker: false,\n listeners: [{\n eventName: BI.Searcher.EVENT_START,\n action: function () {\n self._showSearcherPane();\n self._setStartValue(\"\");\n this.setValue(BI.deepClone(self.storeValue));\n }\n }, {\n eventName: BI.Searcher.EVENT_STOP,\n action: function () {\n self._showAdapter();\n self._setStartValue(\"\");\n self.adapter.setValue(self.storeValue);\n // 需要刷新回到初始界面,否则搜索的结果不能放在最前面\n self.adapter.populate();\n }\n }, {\n eventName: BI.Searcher.EVENT_PAUSE,\n action: function () {\n var keyword = this.getKeyword();\n if (this.hasMatched()) {\n self._join({\n type: BI.Selection.Multi,\n value: [keyword]\n }, function () {\n if (self.storeValue.type === BI.Selection.Multi) {\n BI.pushDistinct(self.storeValue.value, keyword);\n }\n self._showAdapter();\n self.adapter.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue(\"\");\n self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE);\n });\n }\n self._showAdapter();\n }\n }, {\n eventName: BI.Searcher.EVENT_SEARCHING,\n action: function () {\n var keywords = this.getKeywords();\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue(\"\");\n } else {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n }\n self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE);\n });\n }\n }\n }, {\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE);\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n self.fireEvent(BI.MultiSelectInsertList.EVENT_CHANGE);\n });\n }\n }\n }],\n value: o.value\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.trigger,\n height: 24\n }, {\n el: this.adapter,\n height: \"fill\"\n }]\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.searcherPane,\n top: 30,\n bottom: 0,\n left: 0,\n right: 0\n }]\n });\n },\n\n _showAdapter: function () {\n this.adapter.setVisible(true);\n this.searcherPane.setVisible(false);\n },\n\n _showSearcherPane: function () {\n this.searcherPane.setVisible(true);\n this.adapter.setVisible(false);\n },\n\n _defaultState: function () {\n this.trigger.stopEditing();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n // 和复选下拉框同步,allData做缓存是会爆炸的\n o.itemsCreator({\n type: BI.MultiSelectInsertList.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n callback();\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n o.itemsCreator({\n type: BI.MultiSelectInsertList.REQ_GET_ALL_DATA,\n keywords: [self.trigger.getKeyword()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n callback();\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n callback();\n });\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n callback();\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.adapter.setStartValue(value);\n },\n\n isAllSelected: function () {\n return this.adapter.isAllSelected();\n },\n\n resize: function () {\n // this.trigger.getCounter().adjustView();\n // this.trigger.adjustView();\n },\n setValue: function (v) {\n this.storeValue = v || {};\n this._assertValue(this.storeValue);\n this.adapter.setValue(this.storeValue);\n this.trigger.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue);\n },\n\n populate: function () {\n this.adapter.populate.apply(this.adapter, arguments);\n this.trigger.populate.apply(this.trigger, arguments);\n }\n});\n\nBI.extend(BI.MultiSelectInsertList, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.MultiSelectInsertList.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_insert_list\", BI.MultiSelectInsertList);","/**\n * Created by zcf_1 on 2017/5/2.\n */\nBI.MultiSelectInsertNoBarList = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectInsertNoBarList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-insert-list\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn\n });\n },\n _init: function () {\n BI.MultiSelectInsertNoBarList.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n this.storeValue = {\n type: BI.Selection.Multi,\n value: o.value || []\n };\n\n var assertShowValue = function () {\n BI.isKey(self._startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, self._startValue) : BI.pushDistinct(self.storeValue.value, self._startValue));\n // self.trigger.setValue(self.storeValue);\n };\n\n this.adapter = BI.createWidget({\n type: \"bi.multi_select_no_bar_loader\",\n cls: \"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom\",\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n logic: {\n dynamic: false\n },\n // onLoaded: o.onLoaded,\n el: {},\n value: {\n type: BI.Selection.Multi,\n value: o.value || []\n }\n });\n this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE, function () {\n self.storeValue = this.getValue();\n assertShowValue();\n self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE);\n });\n\n this.searcherPane = BI.createWidget({\n type: \"bi.multi_select_search_insert_pane\",\n cls: \"bi-border-left bi-border-right bi-border-bottom\",\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.trigger.getKeyword();\n },\n itemsCreator: function (op, callback) {\n var keyword = self.trigger.getKeyword();\n if (BI.isNotEmptyString(keyword)) {\n op.keywords = [keyword];\n this.setKeyword(op.keywords[0]);\n o.itemsCreator(op, callback);\n }\n },\n listeners: [{\n eventName: BI.MultiSelectSearchInsertPane.EVENT_ADD_ITEM,\n action: function () {\n var keyword = self.trigger.getKeyword();\n if (!self.trigger.hasMatched()) {\n if (self.storeValue.type === BI.Selection.Multi) {\n BI.pushDistinct(self.storeValue.value, keyword);\n }\n self._showAdapter();\n self.adapter.setValue(self.storeValue);\n self.adapter.populate();\n if (self.storeValue.type === BI.Selection.Multi) {\n self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE);\n }\n }\n }\n }]\n });\n this.searcherPane.setVisible(false);\n\n this.trigger = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n adapter: this.adapter,\n popup: this.searcherPane,\n height: 200,\n masker: false,\n listeners: [{\n eventName: BI.Searcher.EVENT_START,\n action: function () {\n self._showSearcherPane();\n self._setStartValue(\"\");\n this.setValue(BI.deepClone(self.storeValue));\n }\n }, {\n eventName: BI.Searcher.EVENT_STOP,\n action: function () {\n self._showAdapter();\n self._setStartValue(\"\");\n self.adapter.setValue(self.storeValue);\n // 需要刷新回到初始界面,否则搜索的结果不能放在最前面\n self.adapter.populate();\n }\n }, {\n eventName: BI.Searcher.EVENT_PAUSE,\n action: function () {\n var keyword = this.getKeyword();\n if (this.hasMatched()) {\n self._join({\n type: BI.Selection.Multi,\n value: [keyword]\n }, function () {\n if (self.storeValue.type === BI.Selection.Multi) {\n BI.pushDistinct(self.storeValue.value, keyword);\n }\n self._showAdapter();\n self.adapter.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue(\"\");\n self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE);\n });\n }\n }\n }, {\n eventName: BI.Searcher.EVENT_SEARCHING,\n action: function () {\n var keywords = this.getKeywords();\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue(\"\");\n } else {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n }\n self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE);\n });\n }\n }\n }, {\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE);\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n self.fireEvent(BI.MultiSelectInsertNoBarList.EVENT_CHANGE);\n });\n }\n }\n }],\n value: {\n type: BI.Selection.Multi,\n value: o.value || []\n }\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.trigger,\n height: 24\n }, {\n el: this.adapter,\n height: \"fill\"\n }]\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.searcherPane,\n top: 30,\n bottom: 0,\n left: 0,\n right: 0\n }]\n });\n },\n\n _showAdapter: function () {\n this.adapter.setVisible(true);\n this.searcherPane.setVisible(false);\n },\n\n _showSearcherPane: function () {\n this.searcherPane.setVisible(true);\n this.adapter.setVisible(false);\n },\n\n _defaultState: function () {\n this.trigger.stopEditing();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n // 和复选下拉框同步,allData做缓存是会爆炸的\n o.itemsCreator({\n type: BI.MultiSelectInsertNoBarList.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n callback();\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n o.itemsCreator({\n type: BI.MultiSelectInsertNoBarList.REQ_GET_ALL_DATA,\n keywords: [self.trigger.getKeyword()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n callback();\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n callback();\n });\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n callback();\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.adapter.setStartValue(value);\n },\n\n isAllSelected: function () {\n return this.adapter.isAllSelected();\n },\n\n resize: function () {\n // this.trigger.getCounter().adjustView();\n // this.trigger.adjustView();\n },\n setValue: function (v) {\n this.storeValue = {\n type: BI.Selection.Multi,\n value: v || []\n };\n this.adapter.setValue(this.storeValue);\n this.trigger.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue.value);\n },\n\n populate: function () {\n this.adapter.populate.apply(this.adapter, arguments);\n this.trigger.populate.apply(this.trigger, arguments);\n }\n});\n\nBI.extend(BI.MultiSelectInsertNoBarList, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.MultiSelectInsertNoBarList.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_insert_no_bar_list\", BI.MultiSelectInsertNoBarList);","/**\n * Created by zcf_1 on 2017/5/2.\n */\nBI.MultiSelectList = BI.inherit(BI.Widget, {\n _constant: {\n EDITOR_HEIGHT: 24\n },\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-list\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn\n });\n },\n _init: function () {\n BI.MultiSelectList.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n this.storeValue = {};\n\n var assertShowValue = function () {\n BI.isKey(self._startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, self._startValue) : BI.pushDistinct(self.storeValue.value, self._startValue));\n // self.trigger.setValue(self.storeValue);\n };\n\n this.adapter = BI.createWidget({\n type: \"bi.multi_select_loader\",\n cls: \"popup-multi-select-list bi-border-left bi-border-right bi-border-bottom\",\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n logic: {\n dynamic: false\n },\n // onLoaded: o.onLoaded,\n el: {}\n });\n this.adapter.on(BI.MultiSelectLoader.EVENT_CHANGE, function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n self.fireEvent(BI.MultiSelectList.EVENT_CHANGE);\n });\n });\n\n this.searcherPane = BI.createWidget({\n type: \"bi.multi_select_search_pane\",\n cls: \"bi-border-left bi-border-right bi-border-bottom\",\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.trigger.getKeyword();\n },\n itemsCreator: function (op, callback) {\n var keyword = self.trigger.getKeyword();\n if (BI.isNotEmptyString(keyword)) {\n op.keywords = [keyword];\n this.setKeyword(op.keywords[0]);\n o.itemsCreator(op, callback);\n }\n }\n });\n this.searcherPane.setVisible(false);\n\n this.trigger = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n adapter: this.adapter,\n popup: this.searcherPane,\n height: 200,\n masker: false,\n listeners: [{\n eventName: BI.Searcher.EVENT_START,\n action: function () {\n self._showSearcherPane();\n self._setStartValue(\"\");\n this.setValue(BI.deepClone(self.storeValue));\n }\n }, {\n eventName: BI.Searcher.EVENT_STOP,\n action: function () {\n self._showAdapter();\n self._setStartValue(\"\");\n self.adapter.setValue(self.storeValue);\n // 需要刷新回到初始界面,否则搜索的结果不能放在最前面\n self.adapter.populate();\n }\n }, {\n eventName: BI.Searcher.EVENT_PAUSE,\n action: function () {\n var keyword = this.getKeyword();\n if (this.hasMatched()) {\n self._join({\n type: BI.Selection.Multi,\n value: [keyword]\n }, function () {\n self._showAdapter();\n self.adapter.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue(\"\");\n self.fireEvent(BI.MultiSelectList.EVENT_CHANGE);\n });\n }\n }\n }, {\n eventName: BI.Searcher.EVENT_SEARCHING,\n action: function () {\n var keywords = this.getKeyword();\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue(\"\");\n } else {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n }\n self.fireEvent(BI.MultiSelectList.EVENT_CHANGE);\n });\n }\n }\n }, {\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n self.fireEvent(BI.MultiSelectList.EVENT_CHANGE);\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n self.fireEvent(BI.MultiSelectList.EVENT_CHANGE);\n });\n }\n }\n }]\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.trigger,\n height: this._constant.EDITOR_HEIGHT\n }, {\n el: this.adapter,\n height: \"fill\"\n }]\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.searcherPane,\n top: this._constant.EDITOR_HEIGHT,\n bottom: 0,\n left: 0,\n right: 0\n }]\n });\n },\n\n _showAdapter: function () {\n this.adapter.setVisible(true);\n this.searcherPane.setVisible(false);\n },\n\n _showSearcherPane: function () {\n this.searcherPane.setVisible(true);\n this.adapter.setVisible(false);\n },\n\n _defaultState: function () {\n this.trigger.stopEditing();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n // 和复选下拉框同步,allData做缓存是会爆炸的\n o.itemsCreator({\n type: BI.MultiSelectList.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n o.itemsCreator({\n type: BI.MultiSelectList.REQ_GET_ALL_DATA,\n keywords: [this.trigger.getKey()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n self._adjust(callback);\n });\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n if (!this._count) {\n o.itemsCreator({\n type: BI.MultiSelectList.REQ_GET_DATA_LENGTH\n }, function (res) {\n self._count = res.count;\n adjust();\n callback();\n });\n } else {\n adjust();\n callback();\n }\n\n function adjust () {\n if (self.storeValue.type === BI.Selection.All && self.storeValue.value.length >= self._count) {\n self.storeValue = {\n type: BI.Selection.Multi,\n value: []\n };\n } else if (self.storeValue.type === BI.Selection.Multi && self.storeValue.value.length >= self._count) {\n self.storeValue = {\n type: BI.Selection.All,\n value: []\n };\n }\n }\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.adapter.setStartValue(value);\n },\n\n isAllSelected: function () {\n return this.adapter.isAllSelected();\n },\n\n resize: function () {\n // this.trigger.getCounter().adjustView();\n // this.trigger.adjustView();\n },\n setValue: function (v) {\n this.storeValue = v || {};\n this._assertValue(this.storeValue);\n this.adapter.setValue(this.storeValue);\n this.trigger.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue);\n },\n\n populate: function () {\n this.adapter.populate.apply(this.adapter, arguments);\n this.trigger.populate.apply(this.trigger, arguments);\n }\n});\n\nBI.extend(BI.MultiSelectList, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.MultiSelectList.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_list\", BI.MultiSelectList);","/**\n * Created by zcf_1 on 2017/5/11.\n */\nBI.MultiSelectTree = BI.inherit(BI.Single, {\n _constant: {\n EDITOR_HEIGHT: 24\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectTree.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-tree\",\n itemsCreator: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiSelectTree.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.storeValue = {value: {}};\n\n this.adapter = BI.createWidget({\n type: \"bi.multi_select_tree_popup\",\n itemsCreator: o.itemsCreator\n });\n this.adapter.on(BI.MultiSelectTreePopup.EVENT_CHANGE, function () {\n if (self.searcher.isSearching()) {\n self.storeValue = {value: self.searcherPane.getValue()};\n } else {\n self.storeValue = {value: self.adapter.getValue()};\n }\n self.setSelectedValue(self.storeValue.value);\n self.fireEvent(BI.MultiSelectTree.EVENT_CHANGE);\n });\n\n // 搜索中的时候用的是parttree,同adapter中的synctree不一样\n this.searcherPane = BI.createWidget({\n type: \"bi.multi_tree_search_pane\",\n cls: \"bi-border-left bi-border-right bi-border-bottom\",\n keywordGetter: function () {\n return self.searcher.getKeyword();\n },\n itemsCreator: function (op, callback) {\n op.keyword = self.searcher.getKeyword();\n o.itemsCreator(op, callback);\n }\n });\n this.searcherPane.setVisible(false);\n\n this.searcher = BI.createWidget({\n type: \"bi.searcher\",\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback({\n keyword: self.searcher.getKeyword()\n });\n },\n adapter: this.adapter,\n popup: this.searcherPane,\n masker: false,\n listeners: [{\n eventName: BI.Searcher.EVENT_START,\n action: function () {\n self._showSearcherPane();\n // self.storeValue = {value: self.adapter.getValue()};\n // self.searcherPane.setSelectedValue(self.storeValue.value);\n }\n }, {\n eventName: BI.Searcher.EVENT_STOP,\n action: function () {\n self._showAdapter();\n // self.storeValue = {value: self.searcherPane.getValue()};\n // self.adapter.setSelectedValue(self.storeValue.value);\n BI.nextTick(function () {\n self.adapter.populate();\n });\n }\n }, {\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function () {\n if (self.searcher.isSearching()) {\n self.storeValue = {value: self.searcherPane.getValue()};\n } else {\n self.storeValue = {value: self.adapter.getValue()};\n }\n self.setSelectedValue(self.storeValue.value);\n self.fireEvent(BI.MultiSelectTree.EVENT_CHANGE);\n }\n }, {\n eventName: BI.Searcher.EVENT_PAUSE,\n action: function () {\n self._showAdapter();\n // BI-64732 pause 和stop一致, 都应该刷新adapter\n BI.nextTick(function () {\n self.adapter.populate();\n });\n }\n }]\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.searcher,\n height: this._constant.EDITOR_HEIGHT\n }, {\n el: this.adapter,\n height: \"fill\"\n }]\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.searcherPane,\n top: this._constant.EDITOR_HEIGHT,\n bottom: 0,\n left: 0,\n right: 0\n }]\n });\n\n },\n\n _showAdapter: function () {\n this.adapter.setVisible(true);\n this.searcherPane.setVisible(false);\n },\n\n _showSearcherPane: function () {\n this.searcherPane.setVisible(true);\n this.adapter.setVisible(false);\n },\n\n resize: function () {\n\n },\n\n setSelectedValue: function (v) {\n this.storeValue.value = v || {};\n this.adapter.setSelectedValue(v);\n this.searcherPane.setSelectedValue(v);\n this.searcher.setValue({\n value: v || {}\n });\n },\n\n setValue: function (v) {\n this.adapter.setValue(v);\n },\n\n stopSearch: function () {\n this.searcher.stopSearch();\n },\n\n updateValue: function (v) {\n this.adapter.updateValue(v);\n },\n\n getValue: function () {\n return this.storeValue.value;\n },\n\n populate: function () {\n this.searcher.populate.apply(this.searcher, arguments);\n this.adapter.populate.apply(this.adapter, arguments);\n }\n});\nBI.MultiSelectTree.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_tree\", BI.MultiSelectTree);","/**\n * Created by zcf on 2016/12/21.\n */\nBI.MultiSelectTreePopup = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.MultiSelectTreePopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-tree-popup bi-border-left bi-border-right bi-border-bottom\",\n itemsCreator: BI.emptyFn\n });\n },\n _init: function () {\n BI.MultiSelectTreePopup.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.popup = BI.createWidget({\n type: \"bi.async_tree\",\n element: this,\n itemsCreator: o.itemsCreator\n });\n this.popup.on(BI.TreeView.EVENT_AFTERINIT, function () {\n self.fireEvent(BI.MultiSelectTreePopup.EVENT_AFTER_INIT);\n });\n this.popup.on(BI.TreeView.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectTreePopup.EVENT_CHANGE);\n });\n },\n\n hasChecked: function () {\n return this.popup.hasChecked();\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n setValue: function (v) {\n v || (v = {});\n this.popup.setValue(v);\n },\n\n setSelectedValue: function (v) {\n v || (v = {});\n this.popup.setSelectedValue(v);\n },\n\n updateValue: function (v) {\n this.popup.updateValue(v);\n this.popup.refresh();\n },\n\n populate: function (config) {\n this.popup.stroke(config);\n }\n\n});\nBI.MultiSelectTreePopup.EVENT_AFTER_INIT = \"EVENT_AFTER_INIT\";\nBI.MultiSelectTreePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_select_tree_popup\", BI.MultiSelectTreePopup);","/**\n *\n * @class BI.MultiTreeCheckPane\n * @extends BI.Pane\n */\nBI.MultiTreeCheckPane = BI.inherit(BI.Pane, {\n\n constants: {\n height: 25,\n lgap: 10,\n tgap: 5\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiTreeCheckPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-check-pane bi-background\",\n onClickContinueSelect: BI.emptyFn,\n el: {\n type: \"bi.display_tree\"\n }\n });\n },\n\n _init: function () {\n BI.MultiTreeCheckPane.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n\n this.selectedValues = {};\n\n var continueSelect = BI.createWidget({\n type: \"bi.text_button\",\n text: BI.i18nText(\"BI-Continue_Select\"),\n cls: \"multi-tree-check-selected\"\n });\n continueSelect.on(BI.TextButton.EVENT_CHANGE, function () {\n opts.onClickContinueSelect();\n BI.nextTick(function () {\n self.empty();\n });\n });\n\n var backToPopup = BI.createWidget({\n type: \"bi.left\",\n cls: \"multi-tree-continue-select\",\n items: [\n {\n el: {\n type: \"bi.label\",\n text: BI.i18nText(\"BI-Selected_Data\")\n },\n lgap: this.constants.lgap,\n tgap: this.constants.tgap\n },\n {\n el: continueSelect,\n lgap: this.constants.lgap,\n tgap: this.constants.tgap\n }]\n });\n\n this.display = BI.createWidget(opts.el, {\n type: \"bi.display_tree\",\n cls: \"bi-multi-tree-display\",\n itemsCreator: function (op, callback) {\n op.type = BI.TreeView.REQ_TYPE_GET_SELECTED_DATA;\n opts.itemsCreator(op, callback);\n },\n value: (opts.value || {}).value\n });\n\n this.display.on(BI.Events.AFTERINIT, function () {\n self.fireEvent(BI.Events.AFTERINIT);\n });\n\n this.display.on(BI.TreeView.EVENT_INIT, function () {\n backToPopup.setVisible(false);\n });\n\n this.display.on(BI.TreeView.EVENT_AFTERINIT, function () {\n backToPopup.setVisible(true);\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n height: this.constants.height,\n el: backToPopup\n }, {\n height: \"fill\",\n el: this.display\n }]\n });\n\n },\n\n empty: function () {\n this.display.empty();\n },\n\n populate: function (configs) {\n this.display.stroke(configs);\n },\n\n setValue: function (v) {\n v || (v = {});\n this.display.setSelectedValue(v.value);\n },\n\n getValue: function () {\n\n }\n});\n\nBI.MultiTreeCheckPane.EVENT_CONTINUE_CLICK = \"EVENT_CONTINUE_CLICK\";\n\n\nBI.shortcut(\"bi.multi_tree_check_pane\", BI.MultiTreeCheckPane);","/**\n *\n * @class BI.MultiTreeCombo\n * @extends BI.Single\n */\n\nBI.MultiTreeCombo = BI.inherit(BI.Single, {\n\n constants: {\n offset: {\n top: 0,\n left: 0,\n right: 0,\n bottom: 25\n }\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiTreeCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-combo\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.MultiTreeCombo.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n\n var isInit = false;\n var want2showCounter = false;\n\n this.storeValue = {value: o.value || {}};\n\n this.trigger = BI.createWidget({\n type: \"bi.multi_select_trigger\",\n allowEdit: o.allowEdit,\n height: o.height,\n valueFormatter: o.valueFormatter,\n text: o.text,\n watermark: o.watermark,\n // adapter: this.popup,\n masker: {\n offset: this.constants.offset\n },\n searcher: {\n type: \"bi.multi_tree_searcher\",\n itemsCreator: o.itemsCreator\n },\n value: {value: o.value || {}}\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: !o.allowEdit,\n container: o.container,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.multi_tree_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n self.numberCounter.setAdapter(this);\n },\n listeners: [{\n eventName: BI.MultiTreePopup.EVENT_AFTERINIT,\n action: function () {\n self.numberCounter.adjustView();\n isInit = true;\n if (want2showCounter === true) {\n showCounter();\n }\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CHANGE,\n action: function () {\n change = true;\n var val = {\n type: BI.Selection.Multi,\n value: this.hasChecked() ? this.getValue() : {}\n };\n self.trigger.getSearcher().setState(val);\n self.numberCounter.setButtonChecked(val);\n self.fireEvent(BI.MultiTreeCombo.EVENT_CLICK_ITEM, self.combo.getValue());\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CLICK_CONFIRM,\n action: function () {\n self.combo.hideView();\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CLICK_CLEAR,\n action: function () {\n clear = true;\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: o.itemsCreator,\n onLoaded: function () {\n BI.nextTick(function () {\n self.numberCounter.adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: {value: o.value || {}},\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0 &&\n self.numberCounter.element.find(e.target).length === 0;\n }\n });\n\n var change = false;\n var clear = false; // 标识当前是否点击了清空\n\n var isSearching = function () {\n return self.trigger.getSearcher().isSearching();\n };\n\n var isPopupView = function () {\n return self.combo.isViewVisible();\n };\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiTreeCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiTreeCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () {\n self.storeValue = {value: self.combo.getValue()};\n this.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () {\n self.storeValue = {value: this.getValue()};\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n BI.nextTick(function () {\n if (isPopupView()) {\n self.combo.populate();\n }\n });\n self.fireEvent(BI.MultiTreeCombo.EVENT_STOP);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function () {\n self.fireEvent(BI.MultiTreeCombo.EVENT_SEARCHING);\n });\n\n function showCounter () {\n if (isSearching()) {\n self.storeValue = {value: self.trigger.getValue()};\n } else if (isPopupView()) {\n self.storeValue = {value: self.combo.getValue()};\n }\n self.trigger.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n }\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK, function () {\n self.combo.toggle();\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function () {\n var checked = this.getSearcher().hasChecked();\n var val = {\n type: BI.Selection.Multi,\n value: checked ? {1: 1} : {}\n };\n this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None);\n self.numberCounter.setButtonChecked(val);\n self.fireEvent(BI.MultiTreeCombo.EVENT_CLICK_ITEM, self.combo.getValue());\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n if (isSearching()) {\n return;\n }\n if (change === true) {\n self.storeValue = {value: self.combo.getValue()};\n change = false;\n }\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n self.populate();\n self.fireEvent(BI.MultiTreeCombo.EVENT_BEFORE_POPUPVIEW);\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () {\n if (isSearching()) {\n self._stopEditing();\n self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM);\n } else {\n if (isPopupView()) {\n self._stopEditing();\n self.storeValue = {value: self.combo.getValue()};\n if (clear === true) {\n self.storeValue = {value: {}};\n }\n self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM);\n }\n }\n clear = false;\n change = false;\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.numberCounter.hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n this.numberCounter = BI.createWidget({\n type: \"bi.multi_select_check_selected_switcher\",\n el: {\n type: \"bi.multi_tree_check_selected_button\"\n },\n popup: {\n type: \"bi.multi_tree_check_pane\"\n },\n masker: {\n offset: this.constants.offset\n },\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n value: {value: o.value || {}}\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n if (want2showCounter === false) {\n want2showCounter = true;\n }\n if (isInit === true) {\n want2showCounter = null;\n showCounter();\n }\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n self.trigger.refreshPlaceHolderWidth((b === true ? self.numberCounter.element.outerWidth() + 8 : 0));\n });\n });\n\n this.trigger.element.click(function (e) {\n if (self.trigger.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.vertical_adapt\",\n items: [this.numberCounter]\n },\n right: o.height,\n top: 0,\n height: o.height,\n }]\n });\n },\n\n _stopEditing: function() {\n this.trigger.stopEditing();\n this.numberCounter.hideView();\n },\n\n _defaultState: function () {\n this._stopEditing();\n this.combo.hideView();\n },\n\n setValue: function (v) {\n this.storeValue.value = v || {};\n this.combo.setValue({\n value: v || {}\n });\n this.numberCounter.setValue({\n value: v || {}\n });\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue.value);\n },\n\n populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.MultiTreeCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiTreeCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiTreeCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiTreeCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiTreeCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.MultiTreeCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.MultiTreeCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n\nBI.shortcut(\"bi.multi_tree_combo\", BI.MultiTreeCombo);","/**\n * 可以往当前选中节点下添加新值的下拉树\n * @class BI.MultiTreeInsertCombo\n * @extends BI.Single\n */\n\nBI.MultiTreeInsertCombo = BI.inherit(BI.Single, {\n\n constants: {\n offset: {\n top: 0,\n left: 0,\n right: 0,\n bottom: 25\n }\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiTreeInsertCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-insert-combo\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.MultiTreeInsertCombo.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n\n var isInit = false;\n var want2showCounter = false;\n\n this.storeValue = {value: o.value || {}};\n\n this.trigger = BI.createWidget({\n type: \"bi.multi_select_trigger\",\n allowEdit: o.allowEdit,\n height: o.height,\n valueFormatter: o.valueFormatter,\n // adapter: this.popup,\n masker: {\n offset: this.constants.offset\n },\n searcher: {\n type: \"bi.multi_tree_searcher\",\n text: o.text,\n watermark: o.watermark,\n itemsCreator: o.itemsCreator,\n popup: {\n type: \"bi.multi_tree_search_insert_pane\",\n listeners: [{\n eventName: BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,\n action: function () {\n self.storeValue.value[self.trigger.getSearcher().getKeyword()] = {};\n self._assertShowValue();\n // setValue以更新paras.value, 之后从search popup中拿到的就能有add的值了\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n self._stopEditing();\n }\n }]\n }\n },\n value: {value: o.value || {}}\n\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: !o.allowEdit,\n container: o.container,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.multi_tree_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n self.numberCounter.setAdapter(this);\n },\n listeners: [{\n eventName: BI.MultiTreePopup.EVENT_AFTERINIT,\n action: function () {\n self.numberCounter.adjustView();\n isInit = true;\n if (want2showCounter === true) {\n showCounter();\n }\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CHANGE,\n action: function () {\n change = true;\n var val = {\n type: BI.Selection.Multi,\n value: this.hasChecked() ? this.getValue() : {}\n };\n self.trigger.getSearcher().setState(val);\n self.numberCounter.setButtonChecked(val);\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM, self.combo.getValue());\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CLICK_CONFIRM,\n action: function () {\n self.combo.hideView();\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CLICK_CLEAR,\n action: function () {\n clear = true;\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: o.itemsCreator,\n onLoaded: function () {\n BI.nextTick(function () {\n self.numberCounter.adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: {value: o.value || {}},\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0 &&\n self.numberCounter.element.find(e.target).length === 0;\n }\n });\n\n var change = false;\n var clear = false; // 标识当前是否点击了清空\n\n var isSearching = function () {\n return self.trigger.getSearcher().isSearching();\n };\n\n var isPopupView = function () {\n return self.combo.isViewVisible();\n };\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () {\n self.storeValue = {value: self.combo.getValue()};\n this.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () {\n self.storeValue = {value: this.getValue()};\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n BI.nextTick(function () {\n if (isPopupView()) {\n self.combo.populate();\n }\n });\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_STOP);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function () {\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_SEARCHING);\n });\n\n function showCounter () {\n if (isSearching()) {\n self.storeValue = {value: self.trigger.getValue()};\n } else if (isPopupView()) {\n self.storeValue = {value: self.combo.getValue()};\n }\n self.trigger.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n }\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK, function () {\n self.combo.toggle();\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function () {\n var checked = this.getSearcher().hasChecked();\n var val = {\n type: BI.Selection.Multi,\n value: checked ? {1: 1} : {}\n };\n this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None);\n self.numberCounter.setButtonChecked(val);\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM, self.combo.getValue());\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n if (isSearching()) {\n return;\n }\n if (change === true) {\n self.storeValue = {value: self.combo.getValue()};\n change = false;\n }\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n self.populate();\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_BEFORE_POPUPVIEW);\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () {\n if (isSearching()) {\n self._stopEditing();\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM);\n } else {\n if (isPopupView()) {\n self._stopEditing();\n self.storeValue = {value: self.combo.getValue()};\n if (clear === true) {\n self.storeValue = {value: {}};\n }\n self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM);\n }\n }\n clear = false;\n change = false;\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.numberCounter.hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n this.numberCounter = BI.createWidget({\n type: \"bi.multi_select_check_selected_switcher\",\n el: {\n type: \"bi.multi_tree_check_selected_button\"\n },\n popup: {\n type: \"bi.multi_tree_check_pane\"\n },\n itemsCreator: o.itemsCreator,\n masker: {\n offset: this.constants.offset\n },\n valueFormatter: o.valueFormatter,\n value: o.value\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n if (want2showCounter === false) {\n want2showCounter = true;\n }\n if (isInit === true) {\n want2showCounter = null;\n showCounter();\n }\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n self.trigger.refreshPlaceHolderWidth((b === true ? self.numberCounter.element.outerWidth() + 8 : 0));\n });\n });\n\n this.trigger.element.click(function (e) {\n if (self.trigger.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.vertical_adapt\",\n items: [this.numberCounter]\n },\n right: o.height,\n top: 0,\n height: o.height,\n }]\n });\n },\n\n _assertShowValue: function () {\n this.trigger.getSearcher().setState(this.storeValue);\n this.numberCounter.setButtonChecked(this.storeValue);\n },\n\n _stopEditing: function() {\n this.trigger.stopEditing();\n this.numberCounter.hideView();\n },\n\n _defaultState: function () {\n this._stopEditing();\n this.combo.hideView();\n },\n\n setValue: function (v) {\n this.storeValue.value = v || {};\n this.combo.setValue({\n value: v || {}\n });\n this.numberCounter.setValue({\n value: v || {}\n });\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue.value);\n },\n\n populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.MultiTreeInsertCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiTreeInsertCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiTreeInsertCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiTreeInsertCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.MultiTreeInsertCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiTreeInsertCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.MultiTreeInsertCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n\nBI.shortcut(\"bi.multi_tree_insert_combo\", BI.MultiTreeInsertCombo);","/**\n * 选中节点不影响父子节点状态的下拉树\n * @class BI.MultiTreeListCombo\n * @extends BI.Single\n */\n\nBI.MultiTreeListCombo = BI.inherit(BI.Single, {\n\n constants: {\n offset: {\n top: 0,\n left: 0,\n right: 0,\n bottom: 25\n }\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiTreeListCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-list-combo\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n allowEdit: true,\n allowInsertValue: true\n });\n },\n\n _init: function () {\n BI.MultiTreeListCombo.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n\n var isInit = false;\n var want2showCounter = false;\n\n this.storeValue = {value: o.value || []};\n\n this.trigger = BI.createWidget({\n type: \"bi.multi_select_trigger\",\n allowEdit: o.allowEdit,\n text: o.text,\n watermark: o.watermark,\n height: o.height,\n valueFormatter: o.valueFormatter,\n // adapter: this.popup,\n masker: {\n offset: this.constants.offset\n },\n searcher: {\n type: \"bi.multi_list_tree_searcher\",\n itemsCreator: o.itemsCreator,\n popup: {\n type: o.allowInsertValue ? \"bi.multi_tree_search_insert_pane\" : \"bi.multi_tree_search_pane\",\n el: {\n type: \"bi.list_part_tree\"\n },\n listeners: [{\n eventName: BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM,\n action: function () {\n self.storeValue.value.unshift([self.trigger.getSearcher().getKeyword()]);\n self._assertShowValue();\n // setValue以更新paras.value, 之后从search popup中拿到的就能有add的值了\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n self._stopEditing();\n }\n }]\n }\n },\n switcher: {\n el: {\n type: \"bi.multi_tree_check_selected_button\"\n },\n popup: {\n type: \"bi.multi_tree_check_pane\",\n el: {\n type: \"bi.list_display_tree\"\n },\n itemsCreator: o.itemsCreator\n }\n },\n value: {value: o.value || {}}\n\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: !o.allowEdit,\n container: o.container,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.multi_tree_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n self.numberCounter.setAdapter(this);\n },\n el: {\n type: \"bi.list_async_tree\"\n },\n listeners: [{\n eventName: BI.MultiTreePopup.EVENT_AFTERINIT,\n action: function () {\n self.numberCounter.adjustView();\n isInit = true;\n if (want2showCounter === true) {\n showCounter();\n }\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CHANGE,\n action: function () {\n change = true;\n var val = {\n type: BI.Selection.Multi,\n value: this.hasChecked() ? this.getValue() : []\n };\n self.trigger.getSearcher().setState(val);\n self.numberCounter.setButtonChecked(val);\n self.fireEvent(BI.MultiTreeListCombo.EVENT_CLICK_ITEM, self.combo.getValue());\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CLICK_CONFIRM,\n action: function () {\n self.combo.hideView();\n }\n }, {\n eventName: BI.MultiTreePopup.EVENT_CLICK_CLEAR,\n action: function () {\n clear = true;\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: o.itemsCreator,\n onLoaded: function () {\n BI.nextTick(function () {\n self.numberCounter.adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: {value: o.value || {}},\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0 &&\n self.numberCounter.element.find(e.target).length === 0;\n }\n });\n\n var change = false;\n var clear = false; // 标识当前是否点击了清空\n\n var isSearching = function () {\n return self.trigger.getSearcher().isSearching();\n };\n\n var isPopupView = function () {\n return self.combo.isViewVisible();\n };\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.MultiTreeListCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.MultiTreeListCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () {\n self.storeValue = {value: self.combo.getValue()};\n this.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () {\n self.storeValue = {value: this.getValue()};\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n BI.nextTick(function () {\n if (isPopupView()) {\n self.combo.populate();\n }\n });\n self.fireEvent(BI.MultiTreeListCombo.EVENT_STOP);\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function () {\n self.fireEvent(BI.MultiTreeListCombo.EVENT_SEARCHING);\n });\n\n function showCounter () {\n if (isSearching()) {\n self.storeValue = {value: self.trigger.getValue()};\n } else if (isPopupView()) {\n self.storeValue = {value: self.combo.getValue()};\n }\n self.trigger.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n }\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_TRIGGER_CLICK, function () {\n self.combo.toggle();\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function () {\n var checked = this.getSearcher().hasChecked();\n var val = {\n type: BI.Selection.Multi,\n value: checked ? {1: 1} : {}\n };\n this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None);\n self.numberCounter.setButtonChecked(val);\n self.fireEvent(BI.MultiTreeListCombo.EVENT_CLICK_ITEM, self.combo.getValue());\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n if (isSearching()) {\n return;\n }\n if (change === true) {\n self.storeValue = {value: self.combo.getValue()};\n change = false;\n }\n self.combo.setValue(self.storeValue);\n self.numberCounter.setValue(self.storeValue);\n self.populate();\n self.fireEvent(BI.MultiTreeListCombo.EVENT_BEFORE_POPUPVIEW);\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_HIDEVIEW, function () {\n if (isSearching()) {\n self.trigger.stopEditing();\n self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM);\n } else {\n if (isPopupView()) {\n self._stopEditing();\n self.storeValue = {value: self.combo.getValue()};\n if (clear === true) {\n self.storeValue = {value: []};\n }\n self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM);\n }\n }\n clear = false;\n change = false;\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.numberCounter.hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n\n this.numberCounter = BI.createWidget({\n type: \"bi.multi_select_check_selected_switcher\",\n el: {\n type: \"bi.multi_tree_check_selected_button\"\n },\n popup: {\n type: \"bi.multi_tree_check_pane\"\n },\n itemsCreator: o.itemsCreator,\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n valueFormatter: o.valueFormatter,\n value: o.value\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n if (want2showCounter === false) {\n want2showCounter = true;\n }\n if (isInit === true) {\n want2showCounter = null;\n showCounter();\n }\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n self.trigger.refreshPlaceHolderWidth((b === true ? self.numberCounter.element.outerWidth() + 8 : 0));\n });\n });\n\n this.trigger.element.click(function (e) {\n if (self.trigger.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.vertical_adapt\",\n items: [this.numberCounter]\n },\n right: o.height,\n top: 0,\n height: o.height,\n }]\n });\n },\n\n _assertShowValue: function () {\n this.trigger.getSearcher().setState(this.storeValue);\n this.numberCounter.setButtonChecked(this.storeValue);\n },\n\n _stopEditing: function() {\n this.trigger.stopEditing();\n this.numberCounter.hideView();\n },\n\n _defaultState: function () {\n this._stopEditing();\n this.combo.hideView();\n },\n\n setValue: function (v) {\n this.storeValue.value = v || [];\n this.combo.setValue({\n value: v || []\n });\n this.numberCounter.setValue({\n value: v || []\n });\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue.value);\n },\n\n populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.MultiTreeListCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.MultiTreeListCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.MultiTreeListCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiTreeListCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.MultiTreeListCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiTreeListCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.MultiTreeListCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n\nBI.shortcut(\"bi.multi_tree_list_combo\", BI.MultiTreeListCombo);","/**\n * 带加载的多选下拉面板\n * @class BI.MultiTreePopup\n * @extends BI.Pane\n */\nBI.MultiTreePopup = BI.inherit(BI.Pane, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiTreePopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-popup\",\n maxWidth: \"auto\",\n minWidth: 140,\n maxHeight: 400,\n onLoaded: BI.emptyFn,\n el: {\n type: \"bi.async_tree\"\n }\n });\n },\n\n _init: function () {\n BI.MultiTreePopup.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options, v = opts.value;\n\n this.selectedValues = {};\n\n this.tree = BI.createWidget(opts.el, {\n type: \"bi.async_tree\",\n height: 400,\n cls: \"popup-view-tree\",\n itemsCreator: opts.itemsCreator,\n onLoaded: opts.onLoaded,\n value: v.value || {}\n });\n\n this.popupView = BI.createWidget({\n type: \"bi.multi_popup_view\",\n element: this,\n stopPropagation: false,\n maxWidth: opts.maxWidth,\n minWidth: opts.minWidth,\n maxHeight: opts.maxHeight,\n buttons: [BI.i18nText(\"BI-Basic_Clears\"), BI.i18nText(\"BI-Basic_Sure\")],\n el: this.tree\n });\n\n this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (index) {\n switch (index) {\n case 0:\n self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CLEAR);\n break;\n case 1:\n self.fireEvent(BI.MultiTreePopup.EVENT_CLICK_CONFIRM);\n break;\n }\n });\n\n this.tree.on(BI.TreeView.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiTreePopup.EVENT_CHANGE);\n });\n\n this.tree.on(BI.TreeView.EVENT_AFTERINIT, function () {\n self.fireEvent(BI.MultiTreePopup.EVENT_AFTERINIT);\n });\n\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n setValue: function (v) {\n v || (v = {});\n this.tree.setSelectedValue(v.value);\n },\n\n populate: function (config) {\n this.tree.stroke(config);\n },\n\n hasChecked: function () {\n return this.tree.hasChecked();\n },\n\n resetHeight: function (h) {\n this.popupView.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.popupView.resetWidth(w);\n }\n});\n\nBI.MultiTreePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiTreePopup.EVENT_CLICK_CONFIRM = \"EVENT_CLICK_CONFIRM\";\nBI.MultiTreePopup.EVENT_CLICK_CLEAR = \"EVENT_CLICK_CLEAR\";\nBI.MultiTreePopup.EVENT_AFTERINIT = \"EVENT_AFTERINIT\";\n\n\nBI.shortcut(\"bi.multi_tree_popup_view\", BI.MultiTreePopup);","/**\n * 查看已选按钮\n * Created by guy on 15/11/3.\n * @class BI.MultiTreeCheckSelectedButton\n * @extends BI.Single\n */\nBI.MultiTreeCheckSelectedButton = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiTreeCheckSelectedButton.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-check-selected-button\",\n itemsCreator: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.MultiTreeCheckSelectedButton.superclass._init.apply(this, arguments);\n var self = this;\n this.indicator = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"check-font trigger-check-selected icon-size-12\",\n width: 15,\n height: 15,\n stopPropagation: true\n });\n\n this.checkSelected = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"trigger-check-selected\",\n invisible: true,\n hgap: 4,\n text: BI.i18nText(\"BI-Check_Selected\"),\n textAlign: \"center\",\n textHeight: 15\n });\n this.checkSelected.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.checkSelected.on(BI.TextButton.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiSelectCheckSelectedButton.EVENT_CHANGE, arguments);\n });\n\n BI.createWidget({\n type: \"bi.horizontal\",\n element: this,\n items: [this.indicator, this.checkSelected]\n });\n\n this.element.hover(function () {\n self.indicator.setVisible(false);\n self.checkSelected.setVisible(true);\n }, function () {\n self.indicator.setVisible(true);\n self.checkSelected.setVisible(false);\n });\n this.setVisible(false);\n },\n\n setValue: function (v) {\n v || (v = {});\n var show = BI.size(v.value) > 0;\n this.setVisible(show);\n }\n});\n\nBI.MultiTreeCheckSelectedButton.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.multi_tree_check_selected_button\", BI.MultiTreeCheckSelectedButton);","/**\n *\n * 在搜索框中输入文本弹出的面板\n * @class BI.MultiTreeSearchInsertPane\n * @extends BI.Pane\n */\n\nBI.MultiTreeSearchInsertPane = BI.inherit(BI.Widget, {\n\n constants: {\n height: 24,\n },\n\n props: {\n baseCls: \"bi-multi-tree-search-insert-pane bi-card\",\n itemsCreator: BI.emptyFn,\n keywordGetter: BI.emptyFn,\n el: {\n type: \"bi.part_tree\"\n }\n },\n\n render: function () {\n var self = this, opts = this.options;\n\n return {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.text_button\",\n invisible: true,\n ref: function (_ref) {\n self.addTip = _ref;\n },\n text: BI.i18nText(\"BI-Basic_Click_To_Add_Text\", \"\"),\n height: this.constants.height,\n cls: \"bi-high-light\",\n handler: function () {\n self.fireEvent(BI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM, opts.keywordGetter());\n }\n },\n top: 5,\n left: 0,\n right: 0\n }, {\n el: BI.extend({\n type: \"bi.part_tree\",\n tipText: BI.i18nText(\"BI-No_Select\"),\n itemsCreator: function (op, callback) {\n op.keyword = opts.keywordGetter();\n opts.itemsCreator(op, function (res) {\n callback(res);\n self.setKeyword(opts.keywordGetter(), res.items);\n });\n },\n ref: function (_ref) {\n self.partTree = _ref;\n },\n value: opts.value,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }, {\n eventName: BI.TreeView.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiTreeSearchInsertPane.EVENT_CHANGE);\n }\n }]\n }, opts.el),\n left: 0,\n top: 0,\n bottom: 0,\n right: 0\n }]\n };\n },\n\n setKeyword: function (keyword, nodes) {\n var isAddTipVisible = BI.isEmptyArray(nodes);\n this.addTip.setVisible(isAddTipVisible);\n this.partTree.setVisible(!isAddTipVisible);\n isAddTipVisible && this.addTip.setText(BI.i18nText(\"BI-Basic_Click_To_Add_Text\", keyword));\n },\n\n hasChecked: function () {\n return this.partTree.hasChecked();\n },\n\n setValue: function (v) {\n this.setSelectedValue(v.value);\n },\n\n setSelectedValue: function (v) {\n v || (v = {});\n this.partTree.setSelectedValue(v);\n },\n\n getValue: function () {\n return this.partTree.getValue();\n },\n\n empty: function () {\n this.partTree.empty();\n },\n\n populate: function (op) {\n this.partTree.stroke.apply(this.partTree, arguments);\n }\n});\n\nBI.MultiTreeSearchInsertPane.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.MultiTreeSearchInsertPane.EVENT_CLICK_CONFIRM = \"EVENT_CLICK_CONFIRM\";\nBI.MultiTreeSearchInsertPane.EVENT_CLICK_CLEAR = \"EVENT_CLICK_CLEAR\";\nBI.MultiTreeSearchInsertPane.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\n\nBI.shortcut(\"bi.multi_tree_search_insert_pane\", BI.MultiTreeSearchInsertPane);","/**\n *\n * 在搜索框中输入文本弹出的面板\n * @class BI.MultiTreeSearchPane\n * @extends BI.Pane\n */\n\nBI.MultiTreeSearchPane = BI.inherit(BI.Pane, {\n\n props: {\n baseCls: \"bi-multi-tree-search-pane bi-card\",\n itemsCreator: BI.emptyFn,\n keywordGetter: BI.emptyFn\n },\n\n render: function () {\n var self = this, opts = this.options;\n\n return BI.extend({\n type: \"bi.part_tree\",\n element: this,\n tipText: BI.i18nText(\"BI-No_Select\"),\n itemsCreator: function (op, callback) {\n op.keyword = opts.keywordGetter();\n opts.itemsCreator(op, callback);\n },\n value: opts.value,\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }, {\n eventName: BI.TreeView.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.MultiTreeSearchPane.EVENT_CHANGE);\n }\n }],\n ref: function (_ref) {\n self.partTree = _ref;\n }\n }, opts.el);\n },\n\n hasChecked: function () {\n return this.partTree.hasChecked();\n },\n\n setValue: function (v) {\n this.setSelectedValue(v.value);\n },\n\n setSelectedValue: function (v) {\n v || (v = {});\n this.partTree.setSelectedValue(v);\n },\n\n getValue: function () {\n return this.partTree.getValue();\n },\n\n empty: function () {\n this.partTree.empty();\n },\n\n populate: function (op) {\n this.partTree.stroke.apply(this.partTree, arguments);\n }\n});\n\nBI.MultiTreeSearchPane.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.MultiTreeSearchPane.EVENT_CLICK_CONFIRM = \"EVENT_CLICK_CONFIRM\";\nBI.MultiTreeSearchPane.EVENT_CLICK_CLEAR = \"EVENT_CLICK_CLEAR\";\n\nBI.shortcut(\"bi.multi_tree_search_pane\", BI.MultiTreeSearchPane);","/**\n * searcher\n * Created by guy on 15/11/3.\n * @class BI.MultiListTreeSearcher\n * @extends Widget\n */\nBI.MultiListTreeSearcher = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiListTreeSearcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-searcher\",\n itemsCreator: BI.emptyFn,\n valueFormatter: function (v) {\n return v;\n },\n popup: {},\n\n adapter: null,\n masker: {}\n });\n },\n\n _init: function () {\n BI.MultiListTreeSearcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.multi_select_editor\",\n height: o.height,\n text: o.text,\n watermark: o.watermark,\n el: {\n type: \"bi.simple_state_editor\",\n height: o.height\n }\n });\n\n this.searcher = BI.createWidget({\n type: \"bi.searcher\",\n element: this,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback({\n keyword: self.editor.getValue()\n });\n },\n el: this.editor,\n\n popup: BI.extend({\n type: \"bi.multi_tree_search_pane\",\n keywordGetter: function () {\n return self.editor.getValue();\n },\n itemsCreator: function (op, callback) {\n op.keyword = self.editor.getValue();\n o.itemsCreator(op, callback);\n },\n value: o.value\n }, o.popup),\n\n adapter: o.adapter,\n masker: o.masker\n });\n this.searcher.on(BI.Searcher.EVENT_START, function () {\n self.fireEvent(BI.MultiListTreeSearcher.EVENT_START);\n });\n this.searcher.on(BI.Searcher.EVENT_PAUSE, function () {\n if (this.hasMatched()) {\n\n }\n self.fireEvent(BI.MultiListTreeSearcher.EVENT_PAUSE);\n });\n this.searcher.on(BI.Searcher.EVENT_STOP, function () {\n self.fireEvent(BI.MultiListTreeSearcher.EVENT_STOP);\n });\n this.searcher.on(BI.Searcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiListTreeSearcher.EVENT_CHANGE, arguments);\n });\n if (BI.isNotNull(o.value)) {\n this.setState(o.value);\n }\n },\n\n adjustView: function () {\n this.searcher.adjustView();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n isSearching: function () {\n return this.searcher.isSearching();\n },\n\n stopSearch: function () {\n this.searcher.stopSearch();\n },\n\n getKeyword: function () {\n return this.editor.getValue();\n },\n\n hasMatched: function () {\n return this.searcher.hasMatched();\n },\n\n hasChecked: function () {\n return this.searcher.getView() && this.searcher.getView().hasChecked();\n },\n\n setState: function (ob) {\n var o = this.options;\n ob || (ob = {});\n ob.value || (ob.value = []);\n var count = 0;\n if (BI.isNumber(ob)) {\n this.editor.setState(ob);\n } else if (BI.size(ob.value) === 0) {\n this.editor.setState(BI.Selection.None);\n } else {\n var text = \"\";\n BI.each(ob.value, function (idx, path) {\n var childValue = BI.last(path);\n text += (o.valueFormatter(childValue + \"\") || childValue) + \"; \";\n count++;\n });\n\n if (count > 20) {\n this.editor.setState(BI.Selection.Multi);\n } else {\n this.editor.setState(text);\n }\n }\n },\n\n getState: function() {\n return this.editor.getState();\n },\n\n setValue: function (ob) {\n this.setState(ob);\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n },\n\n populate: function (items) {\n this.searcher.populate.apply(this.searcher, arguments);\n }\n});\n\nBI.MultiListTreeSearcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.MultiListTreeSearcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiListTreeSearcher.EVENT_START = \"EVENT_START\";\nBI.MultiListTreeSearcher.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiListTreeSearcher.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.shortcut(\"bi.multi_list_tree_searcher\", BI.MultiListTreeSearcher);","/**\n * searcher\n * Created by guy on 15/11/3.\n * @class BI.MultiTreeSearcher\n * @extends Widget\n */\nBI.MultiTreeSearcher = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.MultiTreeSearcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-tree-searcher\",\n itemsCreator: BI.emptyFn,\n valueFormatter: function (v) {\n return v;\n },\n popup: {},\n\n adapter: null,\n masker: {},\n });\n },\n\n _init: function () {\n BI.MultiTreeSearcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.multi_select_editor\",\n watermark: o.watermark,\n height: o.height,\n el: {\n type: \"bi.simple_state_editor\",\n text: o.text,\n height: o.height\n },\n listeners: [{\n eventName: BI.MultiSelectEditor.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.MultiSelectSearcher.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiSelectEditor.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.MultiSelectSearcher.EVENT_BLUR);\n }\n }]\n });\n\n this.searcher = BI.createWidget({\n type: \"bi.searcher\",\n element: this,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback({\n keyword: self.editor.getValue()\n });\n },\n el: this.editor,\n\n popup: BI.extend({\n type: \"bi.multi_tree_search_pane\",\n keywordGetter: function () {\n return self.editor.getValue();\n },\n itemsCreator: function (op, callback) {\n op.keyword = self.editor.getValue();\n o.itemsCreator(op, callback);\n },\n value: o.value\n }, o.popup),\n\n adapter: o.adapter,\n masker: o.masker\n });\n this.searcher.on(BI.Searcher.EVENT_START, function () {\n self.fireEvent(BI.MultiTreeSearcher.EVENT_START);\n });\n this.searcher.on(BI.Searcher.EVENT_PAUSE, function () {\n self.fireEvent(BI.MultiTreeSearcher.EVENT_PAUSE);\n });\n this.searcher.on(BI.Searcher.EVENT_STOP, function () {\n self.fireEvent(BI.MultiTreeSearcher.EVENT_STOP);\n });\n this.searcher.on(BI.Searcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.MultiTreeSearcher.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.Searcher.EVENT_SEARCHING, function () {\n var keywords = this.getKeywords();\n self.fireEvent(BI.MultiTreeSearcher.EVENT_SEARCHING, keywords);\n });\n if (BI.isNotNull(o.value)) {\n this.setState(o.value);\n }\n },\n\n adjustView: function () {\n this.searcher.adjustView();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n isSearching: function () {\n return this.searcher.isSearching();\n },\n\n stopSearch: function () {\n this.searcher.stopSearch();\n },\n\n getKeyword: function () {\n return this.editor.getValue();\n },\n\n hasMatched: function () {\n return this.searcher.hasMatched();\n },\n\n hasChecked: function () {\n return this.searcher.getView() && this.searcher.getView().hasChecked();\n },\n\n setState: function (ob) {\n var o = this.options;\n ob || (ob = {});\n ob.value || (ob.value = {});\n var count = 0;\n if (BI.isNumber(ob)) {\n this.editor.setState(ob);\n } else if (BI.size(ob.value) === 0) {\n this.editor.setState(BI.Selection.None);\n } else {\n var text = \"\";\n BI.each(ob.value, function (name, children) {\n var childNodes = getChildrenNode(children);\n text += (o.valueFormatter(name + \"\") || name) + (childNodes === \"\" ? \"\" : (\":\" + childNodes)) + \"; \";\n if (childNodes === \"\") {\n count++;\n }\n });\n\n if (count > 20) {\n this.editor.setState(BI.Selection.Multi);\n } else {\n this.editor.setState(text);\n }\n }\n\n function getChildrenNode (ob) {\n var text = \"\";\n var index = 0, size = BI.size(ob);\n BI.each(ob, function (name, children) {\n index++;\n var childNodes = getChildrenNode(children);\n text += (o.valueFormatter(name + \"\") || name) + (childNodes === \"\" ? \"\" : (\":\" + childNodes)) + (index === size ? \"\" : \",\");\n if (childNodes === \"\") {\n count++;\n }\n });\n return text;\n }\n },\n\n getState: function() {\n return this.editor.getState();\n },\n\n setValue: function (ob) {\n this.setState(ob);\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n },\n\n populate: function (items) {\n this.searcher.populate.apply(this.searcher, arguments);\n }\n});\n\nBI.MultiTreeSearcher.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.MultiTreeSearcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.MultiTreeSearcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.MultiTreeSearcher.EVENT_START = \"EVENT_START\";\nBI.MultiTreeSearcher.EVENT_STOP = \"EVENT_STOP\";\nBI.MultiTreeSearcher.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.shortcut(\"bi.multi_tree_searcher\", BI.MultiTreeSearcher);","/**\n * Created by windy on 2017/3/13.\n * 数值微调器\n */\nBI.NumberEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.NumberEditor.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-number-editor bi-border bi-focus-shadow\",\n validationChecker: function () {\n return true;\n },\n valueFormatter: function (v) {\n return v;\n },\n value: 0,\n allowBlank: false,\n errorText: \"\",\n step: 1\n });\n },\n\n _init: function () {\n BI.NumberEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.sign_editor\",\n height: o.height - 2,\n allowBlank: o.allowBlank,\n value: o.valueFormatter(o.value),\n validationChecker: o.validationChecker,\n errorText: o.errorText\n });\n this.editor.on(BI.TextEditor.EVENT_CHANGE, function () {\n self.fireEvent(BI.NumberEditor.EVENT_CHANGE);\n });\n this.editor.on(BI.TextEditor.EVENT_ERROR, function () {\n o.value = BI.parseFloat(this.getLastValidValue());\n });\n this.editor.on(BI.TextEditor.EVENT_VALID, function () {\n o.value = BI.parseFloat(this.getValue());\n });\n this.editor.on(BI.TextEditor.EVENT_CONFIRM, function () {\n self.fireEvent(BI.NumberEditor.EVENT_CONFIRM);\n });\n this.topBtn = BI.createWidget({\n type: \"bi.icon_button\",\n forceNotSelected: true,\n trigger: \"lclick,\",\n cls: \"add-up-font top-button bi-border-left bi-list-item-active2 icon-size-12\"\n });\n this.topBtn.on(BI.IconButton.EVENT_CHANGE, function () {\n self._finetuning(o.step);\n self.fireEvent(BI.NumberEditor.EVENT_CHANGE);\n self.fireEvent(BI.NumberEditor.EVENT_CONFIRM);\n });\n this.bottomBtn = BI.createWidget({\n type: \"bi.icon_button\",\n trigger: \"lclick,\",\n forceNotSelected: true,\n cls: \"minus-down-font bottom-button bi-border-left bi-list-item-active2 icon-size-12\"\n });\n this.bottomBtn.on(BI.IconButton.EVENT_CHANGE, function () {\n self._finetuning(-o.step);\n self.fireEvent(BI.NumberEditor.EVENT_CHANGE);\n self.fireEvent(BI.NumberEditor.EVENT_CONFIRM);\n });\n BI.createWidget({\n type: \"bi.htape\",\n height: o.height - 2,\n element: this,\n items: [this.editor, {\n el: {\n type: \"bi.grid\",\n columns: 1,\n rows: 2,\n items: [{\n column: 0,\n row: 0,\n el: this.topBtn\n }, {\n column: 0,\n row: 1,\n el: this.bottomBtn\n }]\n },\n width: 23\n }]\n });\n },\n\n focus: function () {\n this.editor.focus();\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n // 微调\n _finetuning: function (add) {\n var v = BI.parseFloat(this.getValue());\n this.setValue(BI.add(v, add));\n },\n\n setUpEnable: function (v) {\n this.topBtn.setEnable(!!v);\n },\n\n setDownEnable: function (v) {\n this.bottomBtn.setEnable(!!v);\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n getValue: function () {\n return this.options.value;\n },\n\n setValue: function (v) {\n var o = this.options;\n o.value = v;\n this.editor.setValue(o.valueFormatter(v));\n }\n\n});\nBI.NumberEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.NumberEditor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.number_editor\", BI.NumberEditor);","// 小于号的值为:0,小于等于号的值为:1\n// closeMIn:最小值的符号,closeMax:最大值的符号\n/**\n * Created by roy on 15/9/17.\n *\n */\nBI.NumberInterval = BI.inherit(BI.Single, {\n constants: {\n typeError: \"typeBubble\",\n numberError: \"numberBubble\",\n signalError: \"signalBubble\",\n editorWidth: 114,\n columns: 5,\n width: 24,\n rows: 1,\n numberErrorCls: \"number-error\",\n border: 1,\n less: 0,\n less_equal: 1,\n numTip: \"\",\n adjustYOffset: 2\n },\n _defaultConfig: function () {\n var conf = BI.NumberInterval.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-number-interval\" + ((BI.isIE() && BI.getIEVersion() < 10) ? \" hack\" : \"\"),\n height: 24,\n validation: \"valid\",\n closeMin: true,\n allowBlank: true,\n watermark: BI.i18nText(\"BI-Basic_Unrestricted\")\n });\n },\n _init: function () {\n var self = this, c = this.constants, o = this.options;\n BI.NumberInterval.superclass._init.apply(this, arguments);\n this.smallEditor = BI.createWidget({\n type: \"bi.number_interval_single_editor\",\n height: o.height - 2,\n watermark: o.watermark,\n allowBlank: o.allowBlank,\n value: o.min,\n level: \"warning\",\n tipType: \"success\",\n title: function () {\n return self.smallEditor && self.smallEditor.getValue();\n },\n quitChecker: function () {\n return false;\n },\n validationChecker: function (v) {\n if (!BI.isNumeric(v)) {\n self.smallEditorBubbleType = c.typeError;\n return false;\n }\n return true;\n },\n cls: \"number-interval-small-editor bi-border\"\n });\n\n this.smallTip = BI.createWidget({\n type: \"bi.label\",\n text: o.numTip,\n height: o.height - 2,\n invisible: true\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this.smallEditor.element,\n items: [{\n el: this.smallTip,\n top: 0,\n right: 5\n }]\n });\n\n this.bigEditor = BI.createWidget({\n type: \"bi.number_interval_single_editor\",\n height: o.height - 2,\n watermark: o.watermark,\n allowBlank: o.allowBlank,\n value: o.max,\n title: function () {\n return self.bigEditor && self.bigEditor.getValue();\n },\n quitChecker: function () {\n return false;\n },\n validationChecker: function (v) {\n if (!BI.isNumeric(v)) {\n self.bigEditorBubbleType = c.typeError;\n return false;\n }\n return true;\n },\n cls: \"number-interval-big-editor bi-border\"\n });\n\n this.bigTip = BI.createWidget({\n type: \"bi.label\",\n text: o.numTip,\n height: o.height - 2,\n invisible: true\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this.bigEditor.element,\n items: [{\n el: this.bigTip,\n top: 0,\n right: 5\n }]\n });\n this.smallCombo = BI.createWidget({\n type: \"bi.icon_combo\",\n cls: \"number-interval-small-combo bi-border-top bi-border-bottom bi-border-right\",\n height: o.height - 2,\n items: [{\n text: \"(\" + BI.i18nText(\"BI-Less_Than\") + \")\",\n iconCls: \"less-font\",\n value: 0\n }, {\n text: \"(\" + BI.i18nText(\"BI-Less_And_Equal\") + \")\",\n value: 1,\n iconCls: \"less-equal-font\"\n }]\n });\n if (o.closeMin === true) {\n this.smallCombo.setValue(1);\n } else {\n this.smallCombo.setValue(0);\n }\n this.bigCombo = BI.createWidget({\n type: \"bi.icon_combo\",\n cls: \"number-interval-big-combo bi-border-top bi-border-bottom bi-border-left\",\n height: o.height - 2,\n items: [{\n text: \"(\" + BI.i18nText(\"BI-Less_Than\") + \")\",\n iconCls: \"less-font\",\n value: 0\n }, {\n text: \"(\" + BI.i18nText(\"BI-Less_And_Equal\") + \")\",\n value: 1,\n iconCls: \"less-equal-font\"\n }]\n });\n if (o.closeMax === true) {\n this.bigCombo.setValue(1);\n } else {\n this.bigCombo.setValue(0);\n }\n this.label = BI.createWidget({\n type: \"bi.label\",\n text: BI.i18nText(\"BI-Basic_Value\"),\n textHeight: o.height - c.border * 2,\n width: c.width - c.border * 2,\n height: o.height - c.border * 2,\n level: \"warning\",\n tipType: \"warning\"\n });\n this.left = BI.createWidget({\n type: \"bi.htape\",\n items: [{\n el: self.smallEditor\n }, {\n el: self.smallCombo,\n width: c.width - c.border\n }]\n\n });\n this.right = BI.createWidget({\n type: \"bi.htape\",\n items: [{\n el: self.bigCombo,\n width: c.width - c.border\n }, {\n el: self.bigEditor,\n // BI-23883 间距考虑边框\n lgap: 1\n }]\n });\n\n\n BI.createWidget({\n element: self,\n type: \"bi.center\",\n hgap: 15,\n height: o.height,\n items: [\n {\n type: \"bi.absolute\",\n items: [{\n el: self.left,\n left: -15,\n right: 0,\n top: 0,\n bottom: 0\n }]\n }, {\n type: \"bi.absolute\",\n items: [{\n el: self.right,\n left: 0,\n right: -15,\n top: 0,\n bottom: 0\n }]\n }\n ]\n });\n\n BI.createWidget({\n element: self,\n type: \"bi.horizontal_auto\",\n items: [\n self.label\n ]\n });\n\n\n self._setValidEvent(self.bigEditor, c.bigEditor);\n self._setValidEvent(self.smallEditor, c.smallEditor);\n self._setErrorEvent(self.bigEditor, c.bigEditor);\n self._setErrorEvent(self.smallEditor, c.smallEditor);\n self._setBlurEvent(self.bigEditor);\n self._setBlurEvent(self.smallEditor);\n self._setFocusEvent(self.bigEditor);\n self._setFocusEvent(self.smallEditor);\n self._setComboValueChangedEvent(self.bigCombo);\n self._setComboValueChangedEvent(self.smallCombo);\n self._setEditorValueChangedEvent(self.bigEditor);\n self._setEditorValueChangedEvent(self.smallEditor);\n\n self._checkValidation();\n },\n\n _checkValidation: function () {\n var self = this, c = this.constants, o = this.options;\n self._setTitle(\"\");\n BI.Bubbles.hide(c.typeError);\n BI.Bubbles.hide(c.numberError);\n BI.Bubbles.hide(c.signalError);\n if (!self.smallEditor.isValid() || !self.bigEditor.isValid()) {\n self.element.removeClass(\"number-error\");\n o.validation = \"invalid\";\n return c.typeError;\n }\n if (BI.isEmptyString(self.smallEditor.getValue()) || BI.isEmptyString(self.bigEditor.getValue())) {\n self.element.removeClass(\"number-error\");\n o.validation = \"valid\";\n return \"\";\n }\n var smallValue = parseFloat(self.smallEditor.getValue()), bigValue = parseFloat(self.bigEditor.getValue()),\n bigComboValue = self.bigCombo.getValue(), smallComboValue = self.smallCombo.getValue();\n if (bigComboValue[0] === c.less_equal && smallComboValue[0] === c.less_equal) {\n if (smallValue > bigValue) {\n self.element.addClass(\"number-error\");\n o.validation = \"invalid\";\n return c.numberError;\n }\n self.element.removeClass(\"number-error\");\n o.validation = \"valid\";\n return \"\";\n\n }\n if (smallValue > bigValue) {\n self.element.addClass(\"number-error\");\n o.validation = \"invalid\";\n return c.numberError;\n } else if (smallValue === bigValue) {\n self.element.addClass(\"number-error\");\n o.validation = \"invalid\";\n return c.signalError;\n }\n self.element.removeClass(\"number-error\");\n o.validation = \"valid\";\n return \"\";\n\n\n\n\n\n },\n\n _setTitle: function (v) {\n this.label.setTitle(v);\n },\n\n _setFocusEvent: function (w) {\n var self = this, c = this.constants;\n w.on(BI.NumberIntervalSingleEidtor.EVENT_FOCUS, function () {\n self._setTitle(\"\");\n switch (self._checkValidation()) {\n case c.typeError:\n BI.Bubbles.show(c.typeError, BI.i18nText(\"BI-Numerical_Interval_Input_Data\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n break;\n case c.numberError:\n BI.Bubbles.show(c.numberError, BI.i18nText(\"BI-Numerical_Interval_Number_Value\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n break;\n case c.signalError:\n BI.Bubbles.show(c.signalError, BI.i18nText(\"BI-Numerical_Interval_Signal_Value\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n break;\n default :\n return;\n }\n\n });\n },\n _setBlurEvent: function (w) {\n var c = this.constants, self = this;\n w.on(BI.NumberIntervalSingleEidtor.EVENT_BLUR, function () {\n BI.Bubbles.hide(c.typeError);\n BI.Bubbles.hide(c.numberError);\n BI.Bubbles.hide(c.signalError);\n switch (self._checkValidation()) {\n case c.typeError:\n self._setTitle(BI.i18nText(\"BI-Numerical_Interval_Input_Data\"));\n break;\n case c.numberError:\n self._setTitle(BI.i18nText(\"BI-Numerical_Interval_Number_Value\"));\n break;\n case c.signalError:\n self._setTitle(BI.i18nText(\"BI-Numerical_Interval_Signal_Value\"));\n break;\n default:\n self._setTitle(\"\");\n }\n });\n },\n\n _setErrorEvent: function (w) {\n var c = this.constants, self = this;\n w.on(BI.NumberIntervalSingleEidtor.EVENT_ERROR, function () {\n self._checkValidation();\n BI.Bubbles.show(c.typeError, BI.i18nText(\"BI-Numerical_Interval_Input_Data\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n self.fireEvent(BI.NumberInterval.EVENT_ERROR);\n });\n },\n\n\n _setValidEvent: function (w) {\n var self = this, c = this.constants;\n w.on(BI.NumberIntervalSingleEidtor.EVENT_VALID, function () {\n switch (self._checkValidation()) {\n case c.numberError:\n BI.Bubbles.show(c.numberError, BI.i18nText(\"BI-Numerical_Interval_Number_Value\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n self.fireEvent(BI.NumberInterval.EVENT_ERROR);\n break;\n case c.signalError:\n BI.Bubbles.show(c.signalError, BI.i18nText(\"BI-Numerical_Interval_Signal_Value\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n self.fireEvent(BI.NumberInterval.EVENT_ERROR);\n break;\n default:\n self.fireEvent(BI.NumberInterval.EVENT_VALID);\n }\n });\n },\n\n\n _setEditorValueChangedEvent: function (w) {\n var self = this, c = this.constants;\n w.on(BI.NumberIntervalSingleEidtor.EVENT_CHANGE, function () {\n switch (self._checkValidation()) {\n case c.typeError:\n BI.Bubbles.show(c.typeError, BI.i18nText(\"BI-Numerical_Interval_Input_Data\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n break;\n case c.numberError:\n BI.Bubbles.show(c.numberError, BI.i18nText(\"BI-Numerical_Interval_Number_Value\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n break;\n case c.signalError:\n BI.Bubbles.show(c.signalError, BI.i18nText(\"BI-Numerical_Interval_Signal_Value\"), self, {\n offsetStyle: \"left\",\n adjustYOffset: c.adjustYOffset\n });\n break;\n default :\n break;\n }\n self.fireEvent(BI.NumberInterval.EVENT_CHANGE);\n });\n w.on(BI.NumberIntervalSingleEidtor.EVENT_CONFIRM, function () {\n self.fireEvent(BI.NumberInterval.EVENT_CONFIRM);\n });\n },\n\n _setComboValueChangedEvent: function (w) {\n var self = this, c = this.constants;\n w.on(BI.IconCombo.EVENT_CHANGE, function () {\n switch (self._checkValidation()) {\n case c.typeError:\n self._setTitle(BI.i18nText(\"BI-Numerical_Interval_Input_Data\"));\n self.fireEvent(BI.NumberInterval.EVENT_ERROR);\n break;\n case c.numberError:\n self._setTitle(BI.i18nText(\"BI-Numerical_Interval_Number_Value\"));\n self.fireEvent(BI.NumberInterval.EVENT_ERROR);\n break;\n case c.signalError:\n self._setTitle(BI.i18nText(\"BI-Numerical_Interval_Signal_Value\"));\n self.fireEvent(BI.NumberInterval.EVENT_ERROR);\n break;\n default :\n self.fireEvent(BI.NumberInterval.EVENT_CHANGE);\n self.fireEvent(BI.NumberInterval.EVENT_CONFIRM);\n self.fireEvent(BI.NumberInterval.EVENT_VALID);\n }\n });\n },\n\n isStateValid: function () {\n return this.options.validation === \"valid\";\n },\n\n setMinEnable: function (b) {\n this.smallEditor.setEnable(b);\n },\n\n setCloseMinEnable: function (b) {\n this.smallCombo.setEnable(b);\n },\n\n setMaxEnable: function (b) {\n this.bigEditor.setEnable(b);\n },\n\n setCloseMaxEnable: function (b) {\n this.bigCombo.setEnable(b);\n },\n\n showNumTip: function () {\n this.smallTip.setVisible(true);\n this.bigTip.setVisible(true);\n },\n\n hideNumTip: function () {\n this.smallTip.setVisible(false);\n this.bigTip.setVisible(false);\n },\n\n setNumTip: function (numTip) {\n this.smallTip.setText(numTip);\n this.bigTip.setText(numTip);\n },\n\n getNumTip: function () {\n return this.smallTip.getText();\n },\n\n setValue: function (data) {\n data = data || {};\n var self = this, combo_value;\n if (BI.isNumeric(data.min) || BI.isEmptyString(data.min)) {\n self.smallEditor.setValue(data.min);\n }\n\n if (!BI.isNotNull(data.min)) {\n self.smallEditor.setValue(\"\");\n }\n\n if (BI.isNumeric(data.max) || BI.isEmptyString(data.max)) {\n self.bigEditor.setValue(data.max);\n }\n\n if (!BI.isNotNull(data.max)) {\n self.bigEditor.setValue(\"\");\n }\n\n if (!BI.isNull(data.closeMin)) {\n if (data.closeMin === true) {\n combo_value = 1;\n } else {\n combo_value = 0;\n }\n self.smallCombo.setValue(combo_value);\n }\n\n if (!BI.isNull(data.closeMax)) {\n if (data.closeMax === true) {\n combo_value = 1;\n } else {\n combo_value = 0;\n }\n self.bigCombo.setValue(combo_value);\n }\n\n this._checkValidation();\n },\n\n\n getValue: function () {\n var self = this, value = {}, minComboValue = self.smallCombo.getValue(), maxComboValue = self.bigCombo.getValue();\n value.min = self.smallEditor.getValue();\n value.max = self.bigEditor.getValue();\n if (minComboValue[0] === 0) {\n value.closeMin = false;\n } else {\n value.closeMin = true;\n }\n\n if (maxComboValue[0] === 0) {\n value.closeMax = false;\n } else {\n value.closeMax = true;\n }\n return value;\n },\n\n destroyed: function () {\n var c = this.constants;\n BI.Bubbles.remove(c.typeError);\n BI.Bubbles.remove(c.numberError);\n BI.Bubbles.remove(c.signalError);\n }\n});\nBI.NumberInterval.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.NumberInterval.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.NumberInterval.EVENT_VALID = \"EVENT_VALID\";\nBI.NumberInterval.EVENT_ERROR = \"EVENT_ERROR\";\nBI.shortcut(\"bi.number_interval\", BI.NumberInterval);","BI.NumberIntervalSingleEidtor = BI.inherit(BI.Single, {\n props: {\n baseCls: \"bi-number-interval-single-editor\",\n tipType: \"success\",\n title: \"\"\n },\n\n render: function () {\n var self = this, o = this.options;\n\n return {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.editor\",\n ref: function (_ref) {\n self.editor = _ref;\n },\n height: o.height - 2,\n watermark: o.watermark,\n allowBlank: o.allowBlank,\n value: o.value,\n quitChecker: o.quitChecker,\n validationChecker: o.validationChecker,\n listeners: [{\n eventName: BI.Editor.EVENT_ERROR,\n action: function () {\n self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_ERROR, arguments);\n }\n }, {\n eventName: BI.Editor.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_FOCUS, arguments);\n }\n }, {\n eventName: BI.Editor.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_BLUR, arguments);\n }\n }, {\n eventName: BI.Editor.EVENT_VALID,\n action: function () {\n self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_VALID, arguments);\n }\n }, {\n eventName: BI.Editor.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CHANGE, arguments);\n }\n }, {\n eventName: BI.Editor.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CONFIRM, arguments);\n }\n }, {\n eventName: BI.Editor.EVENT_CHANGE_CONFIRM,\n action: function () {\n self.fireEvent(BI.NumberIntervalSingleEidtor.EVENT_CHANGE_CONFIRM, arguments);\n }\n }]\n }]\n };\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n getValue: function () {\n return this.editor.getValue();\n },\n\n setValue: function (v) {\n return this.editor.setValue(v);\n }\n});\n\nBI.NumberIntervalSingleEidtor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.NumberIntervalSingleEidtor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.NumberIntervalSingleEidtor.EVENT_ERROR = \"EVENT_ERROR\";\nBI.NumberIntervalSingleEidtor.EVENT_VALID = \"EVENT_VALID\";\nBI.NumberIntervalSingleEidtor.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.NumberIntervalSingleEidtor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.NumberIntervalSingleEidtor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.shortcut(\"bi.number_interval_single_editor\", BI.NumberIntervalSingleEidtor);","/**\n *\n * @class BI.SearchMultiTextValueCombo\n * @extends BI.Single\n */\nBI.SearchMultiTextValueCombo = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SearchMultiTextValueCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-combo bi-search-multi-text-value-combo\",\n height: 24,\n items: []\n });\n },\n\n _init: function () {\n BI.SearchMultiTextValueCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n var assertShowValue = function () {\n BI.isKey(self._startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, self._startValue) : BI.pushDistinct(self.storeValue.value, self._startValue));\n self._updateAllValue();\n self._checkError();\n self.trigger.getSearcher().setState(self.storeValue);\n self.trigger.getCounter().setButtonChecked(self.storeValue);\n };\n this.storeValue = BI.deepClone(o.value || {});\n this._updateAllValue();\n\n this._assertValue(this.storeValue);\n this._checkError();\n\n // 标记正在请求数据\n this.requesting = false;\n\n this.trigger = BI.createWidget({\n type: \"bi.search_multi_select_trigger\",\n text: o.text,\n height: o.height,\n // adapter: this.popup,\n masker: {\n offset: {\n left: 0,\n top: 0,\n right: 0,\n bottom: 25\n }\n },\n allValueGetter: function () {\n return self.allValue;\n },\n valueFormatter: o.valueFormatter,\n itemsCreator: function (op, callback) {\n self._itemsCreator(op, function (res) {\n if (op.times === 1 && BI.isNotNull(op.keywords)) {\n // 预防trigger内部把当前的storeValue改掉\n self.trigger.setValue(BI.deepClone(self.getValue()));\n }\n callback.apply(self, arguments);\n });\n },\n value: this.storeValue,\n warningTitle: o.warningTitle\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () {\n self._setStartValue(\"\");\n this.getSearcher().setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () {\n self._setStartValue(\"\");\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_PAUSE, function () {\n if (this.getSearcher().hasMatched()) {\n var keyword = this.getSearcher().getKeyword();\n self._join({\n type: BI.Selection.Multi,\n value: [keyword]\n }, function () {\n self.combo.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self._populate();\n self._setStartValue(\"\");\n });\n }\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_SEARCHING, function (keywords) {\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n self.combo.populate();\n self._setStartValue(\"\");\n } else {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n });\n\n this.trigger.on(BI.MultiSelectTrigger.EVENT_CHANGE, function (value, obj) {\n if (obj instanceof BI.MultiSelectBar) {\n self._joinAll(this.getValue(), function () {\n assertShowValue();\n });\n } else {\n self._join(this.getValue(), function () {\n assertShowValue();\n });\n }\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW, function () {\n this.getCounter().setValue(self.storeValue);\n });\n this.trigger.on(BI.MultiSelectTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n toggle: false,\n container: o.container,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.search_multi_select_popup_view\",\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n },\n listeners: [{\n eventName: BI.MultiSelectPopupView.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n });\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CONFIRM,\n action: function () {\n self._defaultState();\n }\n }, {\n eventName: BI.MultiSelectPopupView.EVENT_CLICK_CLEAR,\n action: function () {\n self.setValue();\n self._defaultState();\n }\n }],\n itemsCreator: BI.bind(self._itemsCreator, this),\n valueFormatter: o.valueFormatter,\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n self.trigger.getCounter().adjustView();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n value: o.value,\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0;\n }\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n this.setValue(self.storeValue);\n BI.nextTick(function () {\n self._populate();\n });\n });\n // 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件\n this.wants2Quit = false;\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n // important:关闭弹出时又可能没有退出编辑状态\n self.trigger.stopEditing();\n if (self.requesting === true) {\n self.wants2Quit = true;\n } else {\n /**\n * 在存在标红的情况,如果popover没有发生改变就确认需要同步trigger的值,否则对外value值和trigger样式不统一\n */\n assertShowValue();\n self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM);\n }\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"multi-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n self.trigger.getCounter().hideView();\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n this._checkError();\n },\n\n _defaultState: function () {\n this.trigger.stopEditing();\n this.combo.hideView();\n },\n\n _assertValue: function (val) {\n var o = this.options;\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n BI.remove(val.value, function (idx, value) {\n return !BI.contains(BI.map(o.items, \"value\"), value);\n });\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n this.requesting = true;\n this._itemsCreator({\n type: BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Multi ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _joinAll: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this.requesting = true;\n this._itemsCreator({\n type: BI.SearchMultiTextValueCombo.REQ_GET_ALL_DATA,\n keywords: [this.trigger.getKey()]\n }, function (ob) {\n var items = BI.map(ob.items, \"value\");\n if (self.storeValue.type === res.type) {\n var change = false;\n var map = self._makeMap(self.storeValue.value);\n BI.each(items, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (self.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n var selectedMap = self._makeMap(self.storeValue.value);\n var notSelectedMap = self._makeMap(res.value);\n var newItems = [];\n BI.each(items, function (i, item) {\n if (BI.isNotNull(selectedMap[items[i]])) {\n self.storeValue.assist && self.storeValue.assist.push(selectedMap[items[i]]);\n delete selectedMap[items[i]];\n }\n if (BI.isNull(notSelectedMap[items[i]])) {\n BI.remove(self.storeValue.assist, item);\n newItems.push(item);\n }\n });\n self.storeValue.value = newItems.concat(BI.values(selectedMap));\n self._adjust(callback);\n });\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n if (!this._count) {\n this._itemsCreator({\n type: BI.SearchMultiTextValueCombo.REQ_GET_DATA_LENGTH\n }, function (res) {\n self._count = res.count;\n adjust();\n callback();\n });\n } else {\n adjust();\n callback();\n\n }\n\n function adjust () {\n if (self.storeValue.type === BI.Selection.All && self.storeValue.value.length >= self._count) {\n self.storeValue = {\n type: BI.Selection.Multi,\n value: []\n };\n } else if (self.storeValue.type === BI.Selection.Multi && self.storeValue.value.length >= self._count) {\n self.storeValue = {\n type: BI.Selection.All,\n value: []\n };\n }\n self._updateAllValue();\n self._checkError();\n if (self.wants2Quit === true) {\n self.fireEvent(BI.SearchMultiTextValueCombo.EVENT_CONFIRM);\n self.wants2Quit = false;\n }\n self.requesting = false;\n }\n },\n\n _join: function (res, callback) {\n var self = this, o = this.options;\n this._assertValue(res);\n this._assertValue(this.storeValue);\n if (this.storeValue.type === res.type) {\n var map = this._makeMap(this.storeValue.value);\n BI.each(res.value, function (i, v) {\n if (!map[v]) {\n self.storeValue.value.push(v);\n BI.remove(self.storeValue.assist, v);\n map[v] = v;\n }\n });\n var change = false;\n BI.each(res.assist, function (i, v) {\n if (BI.isNotNull(map[v])) {\n change = true;\n self.storeValue.assist && self.storeValue.assist.push(map[v]);\n delete map[v];\n }\n });\n change && (this.storeValue.value = BI.values(map));\n self._adjust(callback);\n return;\n }\n this._joinAll(res, callback);\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.popup.setStartValue(value);\n },\n\n _getItemsByTimes: function (items, times) {\n var res = [];\n for (var i = (times - 1) * 100; items[i] && i < times * 100; i++) {\n res.push(items[i]);\n }\n return res;\n },\n\n _hasNextByTimes: function (items, times) {\n return times * 100 < items.length;\n },\n\n _itemsCreator: function (options, callback) {\n var self = this, o = this.options;\n var items = o.items;\n var keywords = (options.keywords || []).slice();\n if (options.keyword) {\n keywords.push(options.keyword);\n }\n BI.each(keywords, function (i, kw) {\n var search = BI.Func.getSearchResult(items, kw);\n items = search.match.concat(search.find);\n });\n if (options.selectedValues) {// 过滤\n var filter = BI.makeObject(options.selectedValues, true);\n items = BI.filter(items, function (i, ob) {\n return !filter[ob.value];\n });\n }\n if (options.type == BI.MultiSelectCombo.REQ_GET_ALL_DATA) {\n callback({\n items: items\n });\n return;\n }\n if (options.type == BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {\n callback({count: items.length});\n return;\n }\n callback({\n items: self._getItemsByTimes(items, options.times),\n hasNext: self._hasNextByTimes(items, options.times)\n });\n },\n\n _checkError: function () {\n var v = this.storeValue.value || [];\n if(BI.isNotEmptyArray(v)) {\n v = BI.isArray(v) ? v : [v];\n var result = BI.find(this.allValue, function (idx, value) {\n return !BI.contains(v, value);\n });\n if (BI.isNull(result)) {\n BI.isNotNull(this.trigger) && (this.trigger.setTipType(\"success\"));\n this.element.removeClass(\"combo-error\");\n } else {\n BI.isNotNull(this.trigger) && (this.trigger.setTipType(\"warning\"));\n this.element.addClass(\"combo-error\");\n }\n } else {\n if(v.length === this.allValue.length){\n BI.isNotNull(this.trigger) && (this.trigger.setTipType(\"success\"));\n this.element.removeClass(\"combo-error\");\n }else {\n BI.isNotNull(this.trigger) && (this.trigger.setTipType(\"warning\"));\n this.element.addClass(\"combo-error\");\n }\n }\n },\n\n _updateAllValue: function () {\n this.storeValue = this.storeValue || {};\n this.allValue = BI.deepClone(this.storeValue.value || []);\n },\n\n setValue: function (v) {\n this.storeValue = BI.deepClone(v || {});\n this._updateAllValue();\n this._assertValue(this.storeValue);\n this.combo.setValue(this.storeValue);\n this._checkError();\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue);\n },\n\n _populate: function () {\n this._count = null;\n this.combo.populate();\n },\n\n populate: function (items) {\n this.options.items = items;\n this._populate();\n }\n});\n\nBI.extend(BI.SearchMultiTextValueCombo, {\n REQ_GET_DATA_LENGTH: 1,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.SearchMultiTextValueCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n\nBI.shortcut(\"bi.search_multi_text_value_combo\", BI.SearchMultiTextValueCombo);\n","BI.SearchMultiSelectTrigger = BI.inherit(BI.Trigger, {\n\n constants: {\n height: 14,\n rgap: 4,\n lgap: 4\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.SearchMultiSelectTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-trigger bi-border\",\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n searcher: {},\n switcher: {},\n\n adapter: null,\n masker: {}\n });\n },\n\n _init: function () {\n BI.SearchMultiSelectTrigger.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n if (o.height) {\n this.setHeight(o.height - 2);\n }\n\n this.searcher = BI.createWidget(o.searcher, {\n type: \"bi.search_multi_select_searcher\",\n height: o.height,\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n allValueGetter: o.allValueGetter,\n popup: {},\n adapter: o.adapter,\n masker: o.masker,\n value: o.value,\n text: o.text,\n tipType: o.tipType,\n warningTitle: o.warningTitle\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_START, function () {\n self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_START);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_PAUSE, function () {\n self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_PAUSE);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_SEARCHING, function () {\n self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_SEARCHING, arguments);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_STOP, function () {\n self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_STOP);\n });\n this.searcher.on(BI.MultiSelectSearcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_CHANGE, arguments);\n });\n this.numberCounter = BI.createWidget(o.switcher, {\n type: \"bi.multi_select_check_selected_switcher\",\n valueFormatter: o.valueFormatter,\n itemsCreator: o.itemsCreator,\n adapter: o.adapter,\n masker: o.masker,\n value: o.value\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () {\n self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_COUNTER_CLICK);\n });\n this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_BEFORE_POPUPVIEW, function () {\n self.fireEvent(BI.SearchMultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW);\n });\n\n var wrapNumberCounter = BI.createWidget({\n type: \"bi.right_vertical_adapt\",\n hgap: 4,\n items: [{\n el: this.numberCounter\n }]\n });\n\n var wrapper = BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [\n {\n el: this.searcher,\n width: \"fill\"\n }, {\n el: wrapNumberCounter,\n width: 0\n }, {\n el: BI.createWidget(),\n width: 24\n }]\n });\n\n this.numberCounter.on(BI.Events.VIEW, function (b) {\n BI.nextTick(function () {// 自动调整宽度\n wrapper.attr(\"items\")[1].width = (b === true ? self.numberCounter.element.outerWidth() + 8 : 0);\n wrapper.resize();\n });\n });\n\n this.element.click(function (e) {\n if (self.element.find(e.target).length > 0) {\n self.numberCounter.hideView();\n }\n });\n },\n\n getCounter: function () {\n return this.numberCounter;\n },\n\n getSearcher: function () {\n return this.searcher;\n },\n\n stopEditing: function () {\n this.searcher.stopSearch();\n this.numberCounter.hideView();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n this.numberCounter.setAdapter(adapter);\n },\n\n setValue: function (ob) {\n this.searcher.setValue(ob);\n this.numberCounter.setValue(ob);\n },\n\n setTipType: function (v) {\n this.searcher.setTipType(v);\n },\n\n getKey: function () {\n return this.searcher.getKey();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n }\n});\n\nBI.SearchMultiSelectTrigger.EVENT_TRIGGER_CLICK = \"EVENT_TRIGGER_CLICK\";\nBI.SearchMultiSelectTrigger.EVENT_COUNTER_CLICK = \"EVENT_COUNTER_CLICK\";\nBI.SearchMultiSelectTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SearchMultiSelectTrigger.EVENT_START = \"EVENT_START\";\nBI.SearchMultiSelectTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.SearchMultiSelectTrigger.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.SearchMultiSelectTrigger.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.SearchMultiSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW = \"EVENT_BEFORE_COUNTER_POPUPVIEW\";\n\nBI.shortcut(\"bi.search_multi_select_trigger\", BI.SearchMultiSelectTrigger);\n","/**\n * 多选加载数据面板\n * Created by guy on 15/11/2.\n * @class BI.SearchMultiSelectLoader\n * @extends Widget\n */\nBI.SearchMultiSelectLoader = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SearchMultiSelectLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-loader\",\n logic: {\n dynamic: true\n },\n el: {\n height: 400\n },\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.SearchMultiSelectLoader.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n var hasNext = false;\n\n this.storeValue = opts.value || {};\n this._assertValue(this.storeValue);\n\n this.button_group = BI.createWidget({\n type: \"bi.select_list\",\n element: this,\n logic: opts.logic,\n el: BI.extend({\n onLoaded: opts.onLoaded,\n el: {\n type: \"bi.loader\",\n isDefaultInit: false,\n logic: {\n dynamic: true,\n scrolly: true\n },\n el: {\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_MULTI,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n }\n }, opts.el),\n itemsCreator: function (op, callback) {\n var startValue = self._startValue;\n self.storeValue && (op = BI.extend(op || {}, {\n selectedValues: BI.isKey(startValue) && self.storeValue.type === BI.Selection.Multi\n ? self.storeValue.value.concat(startValue) : self.storeValue.value\n }));\n opts.itemsCreator(op, function (ob) {\n hasNext = ob.hasNext;\n var firstItems = [];\n if (op.times === 1 && self.storeValue) {\n var json = BI.map(self.storeValue.value, function (i, v) {\n var txt = opts.valueFormatter(v) || v;\n return {\n text: txt,\n value: v,\n title: txt,\n selected: self.storeValue.type === BI.Selection.Multi\n };\n });\n if (BI.isKey(self._startValue) && !BI.contains(self.storeValue.value, self._startValue)) {\n var txt = opts.valueFormatter(startValue) || startValue;\n json.unshift({\n text: txt,\n value: startValue,\n title: txt,\n selected: true\n });\n }\n firstItems = self._createItems(json);\n }\n callback(firstItems.concat(self._createItems(ob.items)), ob.keyword || \"\");\n if (op.times === 1 && self.storeValue) {\n BI.isKey(startValue) && (self.storeValue.type === BI.Selection.All ? BI.remove(self.storeValue.value, startValue) : BI.pushDistinct(self.storeValue.value, startValue));\n self.setValue(self.storeValue);\n }\n (op.times === 1) && self._scrollToTop();\n });\n },\n hasNext: function () {\n return hasNext;\n },\n value: this.storeValue\n });\n this.button_group.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.button_group.on(BI.SelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.SearchMultiSelectLoader.EVENT_CHANGE, arguments);\n });\n },\n\n _createItems: function (items) {\n return BI.createItems(items, {\n type: \"bi.multi_select_item\",\n logic: this.options.logic,\n cls: \"bi-list-item-active\",\n height: 24,\n selected: this.isAllSelected(),\n iconWrapperWidth: 36\n });\n },\n\n _scrollToTop: function () {\n var self = this;\n BI.delay(function () {\n self.button_group.element.scrollTop(0);\n }, 30);\n },\n\n isAllSelected: function () {\n return this.button_group.isAllSelected();\n },\n\n _assertValue: function (val) {\n val || (val = {});\n val.type || (val.type = BI.Selection.Multi);\n val.value || (val.value = []);\n },\n\n setStartValue: function (v) {\n this._startValue = v;\n },\n\n setValue: function (v) {\n this.storeValue = v || {};\n this._assertValue(this.storeValue);\n this.button_group.setValue(this.storeValue);\n },\n\n getValue: function () {\n return this.button_group.getValue();\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n populate: function (items) {\n arguments[0] = this._createItems(items);\n this.button_group.populate.apply(this.button_group, arguments);\n },\n\n resetHeight: function (h) {\n this.button_group.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.button_group.resetWidth(w);\n }\n});\n\nBI.SearchMultiSelectLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.search_multi_select_loader\", BI.SearchMultiSelectLoader);","BI.SearchMultiSelectPopupView = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SearchMultiSelectPopupView.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-popup-view\",\n maxWidth: \"auto\",\n minWidth: 135,\n maxHeight: 400,\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.SearchMultiSelectPopupView.superclass._init.apply(this, arguments);\n var self = this, opts = this.options;\n\n this.loader = BI.createWidget({\n type: \"bi.search_multi_select_loader\",\n itemsCreator: opts.itemsCreator,\n valueFormatter: opts.valueFormatter,\n onLoaded: opts.onLoaded,\n value: opts.value\n });\n\n this.popupView = BI.createWidget({\n type: \"bi.multi_popup_view\",\n stopPropagation: false,\n maxWidth: opts.maxWidth,\n minWidth: opts.minWidth,\n maxHeight: opts.maxHeight,\n element: this,\n buttons: [BI.i18nText(\"BI-Basic_Clears\"), BI.i18nText(\"BI-Basic_Sure\")],\n el: this.loader,\n value: opts.value\n });\n\n this.popupView.on(BI.MultiPopupView.EVENT_CHANGE, function () {\n self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CHANGE);\n });\n this.popupView.on(BI.MultiPopupView.EVENT_CLICK_TOOLBAR_BUTTON, function (index) {\n switch (index) {\n case 0:\n self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR);\n break;\n case 1:\n self.fireEvent(BI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM);\n break;\n }\n });\n },\n\n isAllSelected: function () {\n return this.loader.isAllSelected();\n },\n\n setStartValue: function (v) {\n this.loader.setStartValue(v);\n },\n\n setValue: function (v) {\n this.popupView.setValue(v);\n },\n\n getValue: function () {\n return this.popupView.getValue();\n },\n\n populate: function (items) {\n this.popupView.populate.apply(this.popupView, arguments);\n },\n\n resetHeight: function (h) {\n this.popupView.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.popupView.resetWidth(w);\n }\n});\n\nBI.SearchMultiSelectPopupView.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SearchMultiSelectPopupView.EVENT_CLICK_CONFIRM = \"EVENT_CLICK_CONFIRM\";\nBI.SearchMultiSelectPopupView.EVENT_CLICK_CLEAR = \"EVENT_CLICK_CLEAR\";\n\n\nBI.shortcut(\"bi.search_multi_select_popup_view\", BI.SearchMultiSelectPopupView);","BI.SearchMultiSelectSearcher = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SearchMultiSelectSearcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-searcher\",\n itemsCreator: BI.emptyFn,\n el: {},\n popup: {},\n valueFormatter: BI.emptyFn,\n adapter: null,\n masker: {}\n });\n },\n\n _init: function () {\n BI.SearchMultiSelectSearcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget(o.el, {\n type: \"bi.multi_select_editor\",\n height: o.height,\n text: o.text,\n tipType: o.tipType,\n warningTitle: o.warningTitle\n });\n\n this.searcher = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n element: this,\n height: o.height,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n el: this.editor,\n\n popup: BI.extend({\n type: \"bi.multi_select_search_pane\",\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.editor.getValue();\n },\n itemsCreator: function (op, callback) {\n var keyword = self.editor.getValue();\n op.keywords = [keyword];\n this.setKeyword(keyword);\n o.itemsCreator(op, callback);\n },\n value: o.value\n }, o.popup),\n\n adapter: o.adapter,\n masker: o.masker\n });\n this.searcher.on(BI.Searcher.EVENT_START, function () {\n self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_START);\n });\n this.searcher.on(BI.Searcher.EVENT_PAUSE, function () {\n if (this.hasMatched()) {\n\n }\n self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_PAUSE);\n });\n this.searcher.on(BI.Searcher.EVENT_STOP, function () {\n self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_STOP);\n });\n this.searcher.on(BI.Searcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.Searcher.EVENT_SEARCHING, function () {\n var keywords = this.getKeywords();\n self.fireEvent(BI.SearchMultiSelectSearcher.EVENT_SEARCHING, keywords);\n });\n if(BI.isNotNull(o.value)) {\n this.setState(o.value);\n }\n },\n\n adjustView: function () {\n this.searcher.adjustView();\n },\n\n isSearching: function () {\n return this.searcher.isSearching();\n },\n\n stopSearch: function () {\n this.searcher.stopSearch();\n },\n\n getKeyword: function () {\n return this.editor.getValue();\n },\n\n hasMatched: function () {\n return this.searcher.hasMatched();\n },\n\n hasChecked: function () {\n return this.searcher.getView() && this.searcher.getView().hasChecked();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n setState: function (obj) {\n var o = this.options;\n var ob = {};\n ob.type = obj.type;\n ob.value = o.allValueGetter() || [];\n ob.assist = obj.assist;\n if (ob.type === BI.Selection.All) {\n if (ob.value.length === 0) {\n this.editor.setState(BI.Selection.All);\n } else if (BI.size(ob.assist) <= 20) {\n var state = \"\";\n BI.each(ob.assist, function (i, v) {\n if (i === 0) {\n state += \"\" + (o.valueFormatter(v + \"\") || v);\n } else {\n state += \",\" + (o.valueFormatter(v + \"\") || v);\n }\n });\n this.editor.setState(state);\n } else {\n this.editor.setState(BI.Selection.Multi);\n }\n } else {\n if (ob.value.length === 0) {\n this.editor.setState(BI.Selection.None);\n } else if (BI.size(ob.value) <= 20) {\n var state = \"\";\n BI.each(ob.value, function (i, v) {\n if (i === 0) {\n state += \"\" + (o.valueFormatter(v + \"\") || v);\n } else {\n state += \",\" + (o.valueFormatter(v + \"\") || v);\n }\n });\n this.editor.setState(state);\n } else {\n this.editor.setState(BI.Selection.Multi);\n }\n }\n },\n\n setTipType: function (v) {\n this.editor.setTipType(v);\n },\n\n setValue: function (ob) {\n this.setState(ob);\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n },\n\n populate: function (items) {\n this.searcher.populate.apply(this.searcher, arguments);\n }\n});\n\nBI.SearchMultiSelectSearcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.SearchMultiSelectSearcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SearchMultiSelectSearcher.EVENT_START = \"EVENT_START\";\nBI.SearchMultiSelectSearcher.EVENT_STOP = \"EVENT_STOP\";\nBI.SearchMultiSelectSearcher.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.SearchMultiSelectSearcher.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.shortcut(\"bi.search_multi_select_searcher\", BI.SearchMultiSelectSearcher);\n","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.SelectTreeFirstPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.SelectTreeFirstPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.SelectTreeFirstPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-select-tree-first-plus-group-node bi-list-item-active\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.SelectTreeFirstPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.first_tree_node_checkbox\",\n stopPropagation: true\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n py: o.py\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n isOnce: function () {\n return true;\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n },\n\n setOpened: function (v) {\n BI.SelectTreeFirstPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.select_tree_first_plus_group_node\", BI.SelectTreeFirstPlusGroupNode);","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.SelectTreeLastPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.SelectTreeLastPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.SelectTreeLastPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-select-tree-last-plus-group-node bi-list-item-active\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.SelectTreeLastPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.last_tree_node_checkbox\",\n stopPropagation: true\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n py: o.py\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n isOnce: function () {\n return true;\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n },\n\n setOpened: function (v) {\n BI.SelectTreeLastPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.select_tree_last_plus_group_node\", BI.SelectTreeLastPlusGroupNode);","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.SelectTreeMidPlusGroupNode\n * @extends BI.NodeButton\n */\nBI.SelectTreeMidPlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.SelectTreeMidPlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-select-tree-mid-plus-group-node bi-list-item-active\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.SelectTreeMidPlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.mid_tree_node_checkbox\",\n stopPropagation: true\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n py: o.py\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n isOnce: function () {\n return true;\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n },\n\n setOpened: function (v) {\n BI.SelectTreeMidPlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.select_tree_mid_plus_group_node\", BI.SelectTreeMidPlusGroupNode);","/**\n * 加号表示的组节点\n * Created by GUY on 2015/9/6.\n * @class BI.SelectTreePlusGroupNode\n * @extends BI.NodeButton\n */\nBI.SelectTreePlusGroupNode = BI.inherit(BI.NodeButton, {\n _defaultConfig: function () {\n var conf = BI.SelectTreePlusGroupNode.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-select-tree-plus-group-node bi-list-item-active\",\n logic: {\n dynamic: false\n },\n id: \"\",\n pId: \"\",\n readonly: true,\n open: false,\n height: 24\n });\n },\n _init: function () {\n BI.SelectTreePlusGroupNode.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.checkbox = BI.createWidget({\n type: \"bi.tree_node_checkbox\",\n stopPropagation: true\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n value: o.value,\n keyword: o.keyword,\n py: o.py\n });\n this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.triggerExpand();\n } else {\n self.triggerCollapse();\n }\n }\n });\n var type = BI.LogicFactory.createLogicTypeByDirection(BI.Direction.Left);\n var items = BI.LogicFactory.createLogicItemsByDirection(BI.Direction.Left, {\n width: 24,\n el: this.checkbox\n }, this.text);\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(type, BI.extend(o.logic, {\n items: items\n }))));\n },\n\n isOnce: function () {\n return true;\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.NodeButton.superclass.doClick.apply(this, arguments);\n },\n\n setOpened: function (v) {\n BI.SelectTreePlusGroupNode.superclass.setOpened.apply(this, arguments);\n if (BI.isNotNull(this.checkbox)) {\n this.checkbox.setSelected(v);\n }\n }\n});\n\nBI.shortcut(\"bi.select_tree_plus_group_node\", BI.SelectTreePlusGroupNode);","/**\n * @class BI.SelectTreeCombo\n * @extends BI.Widget\n */\nBI.SelectTreeCombo = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SelectTreeCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-select-tree-combo\",\n height: 24,\n text: \"\",\n items: [],\n value: \"\",\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.SelectTreeCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.trigger = BI.createWidget({\n type: \"bi.single_tree_trigger\",\n text: o.text,\n height: o.height,\n items: o.items,\n value: o.value\n });\n\n this.popup = BI.createWidget({\n type: \"bi.select_level_tree\",\n items: o.items,\n value: o.value\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n element: this,\n adjustLength: 2,\n el: this.trigger,\n popup: {\n el: this.popup\n }\n });\n\n this.combo.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.popup.on(BI.SingleTreePopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n });\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.trigger.setValue(v);\n this.popup.setValue(v);\n },\n\n getValue: function () {\n return this.popup.getValue();\n },\n\n populate: function (items) {\n this.combo.populate(items);\n }\n});\n\n\nBI.shortcut(\"bi.select_tree_combo\", BI.SelectTreeCombo);","/**\n * @class BI.SelectTreeExpander\n * @extends BI.Widget\n */\nBI.SelectTreeExpander = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SelectTreeExpander.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-select-tree-expander\",\n trigger: \"\",\n toggle: true,\n direction: \"bottom\",\n isDefaultInit: true,\n el: {},\n popup: {}\n });\n },\n\n _init: function () {\n BI.SelectTreeExpander.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.trigger = BI.createWidget(o.el);\n this.trigger.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n if (this.isSelected()) {\n self.expander.setValue([]);\n }\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.expander = BI.createWidget({\n type: \"bi.expander\",\n element: this,\n trigger: o.trigger,\n toggle: o.toggle,\n direction: o.direction,\n isDefaultInit: o.isDefaultInit,\n el: this.trigger,\n popup: o.popup\n });\n this.expander.on(BI.Controller.EVENT_CHANGE, function (type) {\n if (type === BI.Events.CLICK) {\n self.trigger.setSelected(false);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n },\n\n getAllLeaves: function () {\n return this.expander.getAllLeaves();\n },\n\n setValue: function (v) {\n if (BI.contains(v, this.trigger.getValue())) {\n this.trigger.setSelected(true);\n this.expander.setValue([]);\n } else {\n this.trigger.setSelected(false);\n this.expander.setValue(v);\n }\n },\n\n getValue: function () {\n if (this.trigger.isSelected()) {\n return [this.trigger.getValue()];\n }\n return this.expander.getValue();\n },\n\n populate: function (items) {\n this.expander.populate(items);\n }\n});\n\nBI.shortcut(\"bi.select_tree_expander\", BI.SelectTreeExpander);","/**\n * @class BI.SelectTreePopup\n * @extends BI.Pane\n */\n\nBI.SelectTreePopup = BI.inherit(BI.Pane, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SelectTreePopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-select-level-tree\",\n tipText: BI.i18nText(\"BI-No_Selected_Item\"),\n items: [],\n value: \"\"\n });\n },\n\n _formatItems: function (nodes, layer, pNode) {\n var self = this;\n BI.each(nodes, function (i, node) {\n var extend = {layer: layer};\n node.id = node.id || BI.UUID();\n extend.pNode = pNode;\n if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) {\n extend.type = \"bi.select_tree_mid_plus_group_node\";\n if (i === nodes.length - 1) {\n extend.type = \"bi.select_tree_last_plus_group_node\";\n extend.isLastNode = true;\n }\n if (i === 0 && !pNode) {\n extend.type = \"bi.select_tree_first_plus_group_node\"\n }\n if (i === 0 && i === nodes.length - 1) { // 根\n extend.type = \"bi.select_tree_plus_group_node\";\n }\n BI.defaults(node, extend);\n self._formatItems(node.children, layer + 1, node);\n } else {\n extend.type = \"bi.mid_tree_leaf_item\";\n if (i === 0 && !pNode) {\n extend.type = \"bi.first_tree_leaf_item\"\n }\n if (i === nodes.length - 1) {\n extend.type = \"bi.last_tree_leaf_item\";\n }\n BI.defaults(node, extend);\n }\n });\n return nodes;\n },\n\n _init: function () {\n BI.SelectTreePopup.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n\n this.tree = BI.createWidget({\n type: \"bi.level_tree\",\n expander: {\n type: \"bi.select_tree_expander\",\n isDefaultInit: true\n },\n items: this._formatItems(BI.Tree.transformToTreeFormat(o.items), 0),\n value: o.value,\n chooseType: BI.Selection.Single\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n vgap: 5,\n items: [this.tree]\n });\n\n this.tree.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.tree.on(BI.LevelTree.EVENT_CHANGE, function () {\n self.fireEvent(BI.SelectTreePopup.EVENT_CHANGE);\n });\n\n this.check();\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.tree.setValue(v);\n },\n\n populate: function (items) {\n BI.SelectTreePopup.superclass.populate.apply(this, arguments);\n this.tree.populate(this._formatItems(BI.Tree.transformToTreeFormat(items)));\n }\n});\n\nBI.SelectTreePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.select_level_tree\", BI.SelectTreePopup);","/**\n * 单选加载数据搜索loader面板\n * Created by guy on 15/11/4.\n * @class BI.SingleSelectSearchLoader\n * @extends Widget\n */\nBI.SingleSelectSearchLoader = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectSearchLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-search-loader\",\n allowNoSelect: false,\n itemsCreator: BI.emptyFn,\n keywordGetter: BI.emptyFn,\n valueFormatter: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.SingleSelectSearchLoader.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n var hasNext = false;\n\n this.button_group = BI.createWidget({\n type: \"bi.single_select_list\",\n allowNoSelect: opts.allowNoSelect,\n element: this,\n logic: {\n dynamic: false\n },\n value: opts.value,\n el: {\n tipText: BI.i18nText(\"BI-No_Select\"),\n el: {\n type: \"bi.loader\",\n isDefaultInit: false,\n logic: {\n dynamic: true,\n scrolly: true\n },\n el: {\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n }\n },\n itemsCreator: function (op, callback) {\n self.storeValue && (op = BI.extend(op || {}, {\n selectedValues: [self.storeValue]\n }));\n opts.itemsCreator(op, function (ob) {\n var keyword = ob.keyword = opts.keywordGetter();\n hasNext = ob.hasNext;\n var firstItems = [];\n if (op.times === 1 && BI.isNotNull(self.storeValue)) {\n var json = self._filterValues(self.storeValue);\n firstItems = self._createItems(json);\n }\n callback(firstItems.concat(self._createItems(ob.items)), keyword || \"\");\n if (op.times === 1 && self.storeValue) {\n self.setValue(self.storeValue);\n }\n });\n },\n hasNext: function () {\n return hasNext;\n }\n });\n this.button_group.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.button_group.on(BI.SingleSelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.SingleSelectSearchLoader.EVENT_CHANGE, arguments);\n });\n },\n\n _createItems: function (items) {\n return BI.createItems(items, {\n type: this.options.allowNoSelect ? \"bi.single_select_item\" : \"bi.single_select_combo_item\",\n cls: \"bi-list-item-active\",\n logic: {\n dynamic: false\n },\n height: 25,\n selected: false\n });\n },\n\n _filterValues: function (src) {\n var o = this.options;\n var keyword = o.keywordGetter();\n var values = src || [];\n var newValues = BI.map(BI.isArray(values) ? values : [values], function (i, v) {\n return {\n text: o.valueFormatter(v) || v,\n value: v\n };\n });\n if (BI.isKey(keyword)) {\n var search = BI.Func.getSearchResult(newValues, keyword);\n values = search.match.concat(search.find);\n }\n return BI.map(values, function (i, v) {\n return {\n text: v.text,\n title: v.text,\n value: v.value,\n selected: false\n };\n });\n },\n\n setValue: function (v) {\n // 暂存的值一定是新的值,不然v改掉后,storeValue也跟着改了\n this.storeValue = v;\n this.button_group.setValue(v);\n },\n\n getValue: function () {\n return this.button_group.getValue();\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n populate: function (items) {\n this.button_group.populate.apply(this.button_group, arguments);\n },\n\n resetHeight: function (h) {\n this.button_group.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.button_group.resetWidth(w);\n }\n});\n\nBI.SingleSelectSearchLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_select_search_loader\", BI.SingleSelectSearchLoader);","/**\n *\n * 在搜索框中输入文本弹出的面板\n * @class BI.SingleSelectSearchInsertPane\n * @extends Widget\n */\n\nBI.SingleSelectSearchInsertPane = BI.inherit(BI.Widget, {\n\n constants: {\n height: 25,\n lgap: 10,\n tgap: 5\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectSearchInsertPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-search-pane bi-card\",\n allowNoSelect: false,\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n keywordGetter: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.SingleSelectSearchInsertPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.tooltipClick = BI.createWidget({\n type: \"bi.label\",\n invisible: true,\n text: BI.i18nText(\"BI-Click_Blank_To_Select\"),\n cls: \"single-select-toolbar\",\n height: this.constants.height\n });\n\n this.addNotMatchTip = BI.createWidget({\n type: \"bi.text_button\",\n invisible: true,\n text: BI.i18nText(\"BI-Basic_Click_To_Add_Text\", \"\"),\n height: this.constants.height,\n cls: \"bi-high-light\",\n hgap: 5,\n handler: function () {\n self.fireEvent(BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM, o.keywordGetter());\n }\n });\n\n this.loader = BI.createWidget({\n type: \"bi.single_select_search_loader\",\n allowNoSelect: o.allowNoSelect,\n keywordGetter: o.keywordGetter,\n valueFormatter: o.valueFormatter,\n itemsCreator: function (op, callback) {\n o.itemsCreator.apply(self, [op, function (res) {\n callback(res);\n self.setKeyword(o.keywordGetter());\n }]);\n },\n value: o.value\n });\n this.loader.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.resizer = BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n type: \"bi.vertical\",\n items: [this.tooltipClick, this.addNotMatchTip],\n height: this.constants.height\n }, {\n el: this.loader\n }]\n });\n },\n\n setKeyword: function (keyword) {\n var hasSameValue = BI.some(this.loader.getAllButtons(), function (idx, btn) {\n return keyword === btn.getValue();\n });\n var isMatchTipVisible = this.loader.getAllButtons().length > 0 && hasSameValue;\n this.tooltipClick.setVisible(isMatchTipVisible);\n this.addNotMatchTip.setVisible(!isMatchTipVisible);\n !isMatchTipVisible && this.addNotMatchTip.setText(BI.i18nText(\"BI-Basic_Click_To_Add_Text\", keyword));\n },\n\n hasMatched: function () {\n return this.tooltipClick.isVisible();\n },\n\n setValue: function (v) {\n this.loader.setValue(v);\n },\n\n getValue: function () {\n return this.loader.getValue();\n },\n\n empty: function () {\n this.loader.empty();\n },\n\n populate: function (items) {\n this.loader.populate.apply(this.loader, arguments);\n }\n});\n\nBI.SingleSelectSearchInsertPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM = \"EVENT_ADD_ITEM\";\n\nBI.shortcut(\"bi.single_select_search_insert_pane\", BI.SingleSelectSearchInsertPane);","/**\n *\n * 在搜索框中输入文本弹出的面板\n * @class BI.SingleSelectSearchPane\n * @extends Widget\n */\n\nBI.SingleSelectSearchPane = BI.inherit(BI.Widget, {\n\n constants: {\n height: 25,\n lgap: 10,\n tgap: 5\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectSearchPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-search-pane bi-card\",\n allowNoSelect: false,\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n keywordGetter: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.SingleSelectSearchPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.tooltipClick = BI.createWidget({\n type: \"bi.label\",\n invisible: true,\n text: BI.i18nText(\"BI-Click_Blank_To_Select\"),\n cls: \"single-select-toolbar\",\n height: this.constants.height\n });\n\n this.loader = BI.createWidget({\n type: \"bi.single_select_search_loader\",\n allowNoSelect: o.allowNoSelect,\n keywordGetter: o.keywordGetter,\n valueFormatter: o.valueFormatter,\n itemsCreator: function (op, callback) {\n o.itemsCreator.apply(self, [op, function (res) {\n callback(res);\n self.setKeyword(o.keywordGetter());\n }]);\n },\n value: o.value\n });\n this.loader.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.resizer = BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.tooltipClick,\n height: 0\n }, {\n el: this.loader\n }]\n });\n this.tooltipClick.setVisible(false);\n },\n\n setKeyword: function (keyword) {\n var btn;\n var isVisible = this.loader.getAllButtons().length > 0 && (btn = this.loader.getAllButtons()[0]) && (keyword === btn.getValue());\n if (isVisible !== this.tooltipClick.isVisible()) {\n this.tooltipClick.setVisible(isVisible);\n this.resizer.attr(\"items\")[0].height = (isVisible ? this.constants.height : 0);\n this.resizer.resize();\n }\n },\n\n hasMatched: function () {\n return this.tooltipClick.isVisible();\n },\n\n setValue: function (v) {\n this.loader.setValue(v);\n },\n\n getValue: function () {\n return this.loader.getValue();\n },\n\n empty: function () {\n this.loader.empty();\n },\n\n populate: function (items) {\n this.loader.populate.apply(this.loader, arguments);\n }\n});\n\nBI.SingleSelectSearchPane.EVENT_CHANGE = \"EVENT_CHANGE\";\n\nBI.shortcut(\"bi.single_select_search_pane\", BI.SingleSelectSearchPane);","/**\n *\n * @class BI.SingleSelectCombo\n * @extends BI.Single\n */\nBI.SingleSelectCombo = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-combo\",\n allowNoSelect: false,\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n attributes: {\n tabIndex: 0\n },\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.SingleSelectCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n var assertShowValue = function () {\n BI.isKey(self._startValue) && (self.storeValue = self._startValue);\n self.trigger.getSearcher().setState(self.storeValue);\n };\n this.storeValue = o.value;\n // 标记正在请求数据\n this.requesting = false;\n\n this.trigger = BI.createWidget({\n type: \"bi.single_select_trigger\",\n height: o.height,\n // adapter: this.popup,\n allowNoSelect: o.allowNoSelect,\n allowEdit: o.allowEdit,\n valueFormatter: o.valueFormatter,\n itemsCreator: function (op, callback) {\n o.itemsCreator(op, function (res) {\n if (op.times === 1 && BI.isNotNull(op.keywords)) {\n // 预防trigger内部把当前的storeValue改掉\n self.trigger.setValue(self.getValue());\n }\n callback.apply(self, arguments);\n });\n },\n text: o.text,\n value: this.storeValue\n });\n\n this.trigger.on(BI.SingleSelectTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.SingleSelectCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.SingleSelectCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.SingleSelectTrigger.EVENT_START, function () {\n self._setStartValue();\n this.getSearcher().setValue(self.storeValue);\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_STOP, function () {\n self._setStartValue();\n self.fireEvent(BI.SingleSelectCombo.EVENT_STOP);\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_PAUSE, function () {\n if (this.getSearcher().hasMatched()) {\n var keyword = this.getSearcher().getKeyword();\n self.combo.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.populate();\n self._setStartValue();\n }\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_SEARCHING, function (keywords) {\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n self.combo.populate();\n self._setStartValue();\n } else {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n self.fireEvent(BI.SingleSelectCombo.EVENT_SEARCHING);\n });\n\n this.trigger.on(BI.SingleSelectTrigger.EVENT_CHANGE, function (value, obj) {\n self.storeValue = this.getValue();\n assertShowValue();\n self._defaultState();\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n toggle: false,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.single_select_popup_view\",\n allowNoSelect: o.allowNoSelect,\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n },\n listeners: [{\n eventName: BI.SingleSelectPopupView.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n self._defaultState();\n });\n self.fireEvent(BI.SingleSelectCombo.EVENT_CLICK_ITEM);\n }\n }],\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0;\n },\n value: o.value\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n this.setValue(self.storeValue);\n BI.nextTick(function () {\n self.populate();\n });\n });\n // 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件\n this.wants2Quit = false;\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n // important:关闭弹出时又可能没有退出编辑状态\n self.trigger.stopEditing();\n if (self.requesting === true) {\n self.wants2Quit = true;\n } else {\n self.fireEvent(BI.SingleSelectCombo.EVENT_CONFIRM);\n }\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"single-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n },\n\n _defaultState: function () {\n this.trigger.stopEditing();\n this.combo.hideView();\n },\n\n _assertValue: function (val) {},\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n this.requesting = true;\n o.itemsCreator({\n type: BI.SingleSelectCombo.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n if (!this._count) {\n o.itemsCreator({\n type: BI.SingleSelectCombo.REQ_GET_DATA_LENGTH\n }, function (res) {\n self._count = res.count;\n adjust();\n callback();\n });\n } else {\n adjust();\n callback();\n\n }\n\n function adjust () {\n if (self.wants2Quit === true) {\n self.fireEvent(BI.SingleSelectCombo.EVENT_CONFIRM);\n self.wants2Quit = false;\n }\n self.requesting = false;\n }\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.popup.setStartValue(value);\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this._assertValue(this.storeValue);\n this.combo.setValue(this.storeValue);\n },\n\n getValue: function () {\n return this.storeValue;\n },\n\n populate: function () {\n this._count = null;\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.extend(BI.SingleSelectCombo, {\n REQ_GET_DATA_LENGTH: 0,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.SingleSelectCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.SingleSelectCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SingleSelectCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.SingleSelectCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.SingleSelectCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.SingleSelectCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n\nBI.shortcut(\"bi.single_select_combo\", BI.SingleSelectCombo);\n","/**\n *\n * @class BI.SingleSelectInsertCombo\n * @extends BI.Single\n */\nBI.SingleSelectInsertCombo = BI.inherit(BI.Single, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectInsertCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-combo\",\n allowNoSelect: false,\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n height: 24,\n attributes: {\n tabIndex: 0\n },\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.SingleSelectInsertCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n var assertShowValue = function () {\n BI.isKey(self._startValue) && (self.storeValue = self._startValue);\n self.trigger.getSearcher().setState(self.storeValue);\n };\n this.storeValue = o.value;\n // 标记正在请求数据\n this.requesting = false;\n\n this.trigger = BI.createWidget({\n type: \"bi.single_select_trigger\",\n height: o.height,\n allowNoSelect: o.allowNoSelect,\n allowEdit: o.allowEdit,\n // adapter: this.popup,\n valueFormatter: o.valueFormatter,\n itemsCreator: function (op, callback) {\n o.itemsCreator(op, function (res) {\n if (op.times === 1 && BI.isNotNull(op.keywords)) {\n // 预防trigger内部把当前的storeValue改掉\n self.trigger.setValue(self.getValue());\n }\n callback.apply(self, arguments);\n });\n },\n text: o.text,\n value: this.storeValue,\n searcher: {\n popup: {\n type: \"bi.single_select_search_insert_pane\",\n listeners: [{\n eventName: BI.SingleSelectSearchInsertPane.EVENT_ADD_ITEM,\n action: function () {\n if (!self.trigger.getSearcher().hasMatched()) {\n self.storeValue = self.trigger.getSearcher().getKeyword();\n assertShowValue();\n self._defaultState();\n }\n }\n }]\n }\n }\n });\n\n this.trigger.on(BI.SingleSelectTrigger.EVENT_FOCUS, function () {\n self.fireEvent(BI.SingleSelectInsertCombo.EVENT_FOCUS);\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_BLUR, function () {\n self.fireEvent(BI.SingleSelectInsertCombo.EVENT_BLUR);\n });\n\n this.trigger.on(BI.SingleSelectTrigger.EVENT_START, function () {\n self._setStartValue();\n this.getSearcher().setValue(self.storeValue);\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_STOP, function () {\n self._setStartValue();\n self.fireEvent(BI.SingleSelectInsertCombo.EVENT_STOP);\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_PAUSE, function () {\n if (this.getSearcher().hasMatched()) {\n var keyword = this.getSearcher().getKeyword();\n self.storeValue = keyword;\n self.combo.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.populate();\n self._setStartValue();\n }\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_SEARCHING, function (keywords) {\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n self.combo.populate();\n self._setStartValue();\n } else {\n self.combo.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n self.fireEvent(BI.SingleSelectInsertCombo.EVENT_SEARCHING);\n });\n\n this.trigger.on(BI.SingleSelectTrigger.EVENT_CHANGE, function (value, obj) {\n self.storeValue = this.getValue();\n assertShowValue();\n self._defaultState();\n });\n this.trigger.on(BI.SingleSelectTrigger.EVENT_COUNTER_CLICK, function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n toggle: false,\n el: this.trigger,\n adjustLength: 1,\n popup: {\n type: \"bi.single_select_popup_view\",\n allowNoSelect: o.allowNoSelect,\n ref: function () {\n self.popup = this;\n self.trigger.setAdapter(this);\n },\n listeners: [{\n eventName: BI.SingleSelectPopupView.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self._adjust(function () {\n assertShowValue();\n self._defaultState();\n });\n self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CLICK_ITEM);\n }\n }],\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n onLoaded: function () {\n BI.nextTick(function () {\n self.combo.adjustWidth();\n self.combo.adjustHeight();\n self.trigger.getSearcher().adjustView();\n });\n }\n },\n hideChecker: function (e) {\n return triggerBtn.element.find(e.target).length === 0;\n },\n value: o.value\n });\n\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n this.setValue(self.storeValue);\n BI.nextTick(function () {\n self.populate();\n });\n });\n // 当退出的时候如果还在处理请求,则等请求结束后再对外发确定事件\n this.wants2Quit = false;\n this.combo.on(BI.Combo.EVENT_AFTER_HIDEVIEW, function () {\n // important:关闭弹出时又可能没有退出编辑状态\n self.trigger.stopEditing();\n if (self.requesting === true) {\n self.wants2Quit = true;\n } else {\n self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CONFIRM);\n }\n });\n\n var triggerBtn = BI.createWidget({\n type: \"bi.trigger_icon_button\",\n width: o.height,\n height: o.height,\n cls: \"single-select-trigger-icon-button\"\n });\n triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n } else {\n self.combo.showView();\n }\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.combo,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: triggerBtn,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n },\n\n _defaultState: function () {\n this.trigger.stopEditing();\n this.combo.hideView();\n },\n\n _assertValue: function (val) {\n },\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n this.requesting = true;\n o.itemsCreator({\n type: BI.SingleSelectInsertCombo.REQ_GET_ALL_DATA,\n keywords: keywords\n }, function (ob) {\n var values = BI.map(ob.items, \"value\");\n digest(values);\n });\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n BI.remove(self.storeValue.value, val);\n }\n });\n self._adjust(callback);\n }\n },\n\n _adjust: function (callback) {\n var self = this, o = this.options;\n adjust();\n callback();\n\n function adjust () {\n if (self.wants2Quit === true) {\n self.fireEvent(BI.SingleSelectInsertCombo.EVENT_CONFIRM);\n self.wants2Quit = false;\n }\n self.requesting = false;\n }\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.popup.setStartValue(value);\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this._assertValue(this.storeValue);\n this.combo.setValue(this.storeValue);\n },\n\n getValue: function () {\n return this.storeValue;\n },\n\n populate: function () {\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.extend(BI.SingleSelectInsertCombo, {\n REQ_GET_DATA_LENGTH: 0,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.SingleSelectInsertCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SingleSelectInsertCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.SingleSelectInsertCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.SingleSelectInsertCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.SingleSelectInsertCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.SingleSelectInsertCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n\nBI.shortcut(\"bi.single_select_insert_combo\", BI.SingleSelectInsertCombo);","BI.SingleSelectComboItem = BI.inherit(BI.BasicButton, {\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectComboItem.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-single-select-radio-item\",\n logic: {\n dynamic: false\n },\n height: 24\n });\n },\n _init: function () {\n BI.SingleSelectComboItem.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.radio = BI.createWidget({\n type: \"bi.radio\"\n });\n this.text = BI.createWidget({\n type: \"bi.label\",\n cls: \"list-item-text\",\n textAlign: \"left\",\n whiteSpace: \"nowrap\",\n textHeight: o.height,\n height: o.height,\n hgap: o.hgap,\n text: o.text,\n keyword: o.keyword,\n value: o.value,\n py: o.py\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(\"horizontal\", BI.extend(o.logic, {\n items: BI.LogicFactory.createLogicItemsByDirection(\"left\", {\n type: \"bi.center_adapt\",\n items: [this.radio],\n width: 26\n }, this.text)\n }))));\n },\n\n doRedMark: function () {\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doClick: function () {\n BI.SingleSelectComboItem.superclass.doClick.apply(this, arguments);\n this.radio.setSelected(this.isSelected());\n if (this.isValid()) {\n this.fireEvent(BI.SingleSelectComboItem.EVENT_CHANGE, this.isSelected(), this);\n }\n },\n\n setSelected: function (v) {\n BI.SingleSelectComboItem.superclass.setSelected.apply(this, arguments);\n this.radio.setSelected(v);\n\n }\n});\nBI.SingleSelectComboItem.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_select_combo_item\", BI.SingleSelectComboItem);","/**\n * 选择列表\n *\n * Created by GUY on 2015/11/1.\n * @class BI.SingleSelectList\n * @extends BI.Widget\n */\nBI.SingleSelectList = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-select-list\",\n direction: BI.Direction.Top, // toolbar的位置\n logic: {\n dynamic: true\n },\n items: [],\n itemsCreator: BI.emptyFn,\n hasNext: BI.emptyFn,\n onLoaded: BI.emptyFn,\n el: {\n type: \"bi.list_pane\"\n },\n allowNoSelect: false\n });\n },\n _init: function () {\n BI.SingleSelectList.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.list = BI.createWidget(o.el, {\n type: \"bi.list_pane\",\n items: o.items,\n itemsCreator: function (op, callback) {\n op.times === 1 && self.toolbar && self.toolbar.setVisible(false);\n o.itemsCreator(op, function (items) {\n callback.apply(self, arguments);\n if (op.times === 1) {\n self.toolbar && self.toolbar.setVisible(items && items.length > 0);\n self.toolbar && self.toolbar.setEnable(items && items.length > 0);\n }\n });\n },\n onLoaded: o.onLoaded,\n hasNext: o.hasNext,\n value: o.value\n });\n\n this.list.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) {\n if (type === BI.Events.CLICK) {\n self.fireEvent(BI.SingleSelectList.EVENT_CHANGE, value, obj);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n BI.createWidget(BI.extend({\n element: this\n }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({\n scrolly: true\n }, o.logic, {\n items: o.allowNoSelect ? BI.LogicFactory.createLogicItemsByDirection(o.direction, {\n type: \"bi.single_select_item\",\n cls: \"bi-list-item-active\",\n height: 24,\n forceNotSelected: true,\n text: BI.i18nText(\"BI-Basic_No_Select\"),\n ref: function (_ref) {\n self.toolbar = _ref;\n },\n listeners: [{\n eventName: BI.Controller.EVENT_CHANGE,\n action: function (type) {\n if (type === BI.Events.CLICK) {\n self.list.setValue();\n self.fireEvent(BI.SingleSelectList.EVENT_CHANGE);\n }\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n }\n }]\n }, this.list) : BI.LogicFactory.createLogicItemsByDirection(o.direction, this.list)\n }))));\n\n },\n\n hasPrev: function () {\n return this.list.hasPrev();\n },\n\n hasNext: function () {\n return this.list.hasNext();\n },\n\n prependItems: function (items) {\n this.list.prependItems.apply(this.list, arguments);\n },\n\n addItems: function (items) {\n this.list.addItems.apply(this.list, arguments);\n },\n\n setValue: function (v) {\n this.list.setValue([v]);\n },\n\n getValue: function () {\n return this.list.getValue()[0];\n },\n\n empty: function () {\n this.list.empty();\n },\n\n populate: function (items) {\n this.list.populate.apply(this.list, arguments);\n },\n\n resetHeight: function (h) {\n this.list.resetHeight ? this.list.resetHeight(h) :\n this.list.element.css({\"max-height\": h + \"px\"});\n },\n\n setNotSelectedValue: function () {\n this.list.setNotSelectedValue.apply(this.list, arguments);\n },\n\n getNotSelectedValue: function () {\n return this.list.getNotSelectedValue();\n },\n\n getAllButtons: function () {\n return this.list.getAllButtons();\n },\n\n getAllLeaves: function () {\n return this.list.getAllLeaves();\n },\n\n getSelectedButtons: function () {\n return this.list.getSelectedButtons();\n },\n\n getNotSelectedButtons: function () {\n return this.list.getNotSelectedButtons();\n },\n\n getIndexByValue: function (value) {\n return this.list.getIndexByValue(value);\n },\n\n getNodeById: function (id) {\n return this.list.getNodeById(id);\n },\n\n getNodeByValue: function (value) {\n return this.list.getNodeByValue(value);\n }\n});\nBI.SingleSelectList.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_select_list\", BI.SingleSelectList);","/**\n * 单选加载数据面板\n * Created by guy on 15/11/2.\n * @class BI.SingleSelectLoader\n * @extends Widget\n */\nBI.SingleSelectLoader = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectLoader.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-loader\",\n logic: {\n dynamic: true\n },\n el: {\n height: 400\n },\n allowNoSelect: false,\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.SingleSelectLoader.superclass._init.apply(this, arguments);\n\n var self = this, opts = this.options;\n var hasNext = false;\n this.storeValue = opts.value;\n this.button_group = BI.createWidget({\n type: \"bi.single_select_list\",\n allowNoSelect: opts.allowNoSelect,\n logic: opts.logic,\n el: BI.extend({\n onLoaded: opts.onLoaded,\n el: {\n type: \"bi.loader\",\n isDefaultInit: false,\n logic: {\n dynamic: true,\n scrolly: true\n },\n el: {\n chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE,\n behaviors: {\n redmark: function () {\n return true;\n }\n },\n layouts: [{\n type: \"bi.vertical\"\n }]\n }\n }\n }, opts.el),\n itemsCreator: function (op, callback) {\n var startValue = self._startValue;\n BI.isNotNull(self.storeValue) && (op = BI.extend(op || {}, {\n selectedValues: [self.storeValue]\n }));\n opts.itemsCreator(op, function (ob) {\n hasNext = ob.hasNext;\n var firstItems = [];\n if (op.times === 1 && BI.isNotNull(self.storeValue)) {\n var json = BI.map([self.storeValue], function (i, v) {\n var txt = opts.valueFormatter(v) || v;\n return {\n text: txt,\n value: v,\n title: txt,\n selected: true\n };\n });\n firstItems = self._createItems(json);\n }\n callback(firstItems.concat(self._createItems(ob.items)), ob.keyword || \"\");\n if (op.times === 1 && self.storeValue) {\n BI.isKey(startValue) && (self.storeValue = startValue);\n self.setValue(self.storeValue);\n }\n (op.times === 1) && self._scrollToTop();\n });\n },\n hasNext: function () {\n return hasNext;\n },\n value: this.storeValue\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n items: [this.button_group],\n vgap: 5\n });\n\n this.button_group.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.button_group.on(BI.SingleSelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.SingleSelectLoader.EVENT_CHANGE, arguments);\n });\n },\n\n _createItems: function (items) {\n return BI.createItems(items, {\n type: this.options.allowNoSelect ? \"bi.single_select_item\" : \"bi.single_select_combo_item\",\n logic: this.options.logic,\n cls: \"bi-list-item-active\",\n height: 24,\n selected: false\n });\n },\n\n _scrollToTop: function () {\n var self = this;\n BI.delay(function () {\n self.button_group.element.scrollTop(0);\n }, 30);\n },\n\n _assertValue: function (val) {},\n\n setStartValue: function (v) {\n this._startValue = v;\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this._assertValue(this.storeValue);\n this.button_group.setValue(this.storeValue);\n },\n\n getValue: function () {\n return this.button_group.getValue();\n },\n\n getAllButtons: function () {\n return this.button_group.getAllButtons();\n },\n\n empty: function () {\n this.button_group.empty();\n },\n\n populate: function (items) {\n this.button_group.populate.apply(this.button_group, arguments);\n },\n\n resetHeight: function (h) {\n this.button_group.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.button_group.resetWidth(w);\n }\n});\n\nBI.SingleSelectLoader.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_select_loader\", BI.SingleSelectLoader);\n","/**\n * 带加载的单选下拉面板\n * @class BI.SingleSelectPopupView\n * @extends Widget\n */\nBI.SingleSelectPopupView = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectPopupView.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-popup-view\",\n allowNoSelect: false,\n maxWidth: \"auto\",\n minWidth: 135,\n maxHeight: 400,\n valueFormatter: BI.emptyFn,\n itemsCreator: BI.emptyFn,\n onLoaded: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.SingleSelectPopupView.superclass._init.apply(this, arguments);\n var self = this, opts = this.options;\n\n this.loader = BI.createWidget({\n type: \"bi.single_select_loader\",\n allowNoSelect: opts.allowNoSelect,\n itemsCreator: opts.itemsCreator,\n valueFormatter: opts.valueFormatter,\n onLoaded: opts.onLoaded,\n value: opts.value\n });\n\n this.popupView = BI.createWidget({\n type: \"bi.popup_view\",\n stopPropagation: false,\n maxWidth: opts.maxWidth,\n minWidth: opts.minWidth,\n maxHeight: opts.maxHeight,\n element: this,\n el: this.loader,\n value: opts.value\n });\n\n this.popupView.on(BI.MultiPopupView.EVENT_CHANGE, function () {\n self.fireEvent(BI.SingleSelectPopupView.EVENT_CHANGE);\n });\n },\n\n setStartValue: function (v) {\n this.loader.setStartValue(v);\n },\n\n setValue: function (v) {\n this.popupView.setValue(v);\n },\n\n getValue: function () {\n return this.popupView.getValue();\n },\n\n populate: function (items) {\n this.popupView.populate.apply(this.popupView, arguments);\n },\n\n resetHeight: function (h) {\n this.popupView.resetHeight(h);\n },\n\n resetWidth: function (w) {\n this.popupView.resetWidth(w);\n }\n});\n\nBI.SingleSelectPopupView.EVENT_CHANGE = \"EVENT_CHANGE\";\n\n\nBI.shortcut(\"bi.single_select_popup_view\", BI.SingleSelectPopupView);","/**\n *\n * 单选下拉框\n * @class BI.SingleSelectTrigger\n * @extends BI.Trigger\n */\n\nBI.SingleSelectTrigger = BI.inherit(BI.Trigger, {\n\n constants: {\n height: 14,\n rgap: 4,\n lgap: 4\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-trigger bi-border bi-border-radius\",\n allowNoSelect: false,\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn,\n searcher: {},\n switcher: {},\n\n adapter: null,\n masker: {},\n allowEdit: true\n });\n },\n\n _init: function () {\n BI.SingleSelectTrigger.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n if (o.height) {\n this.setHeight(o.height - 2);\n }\n\n this.searcher = BI.createWidget(o.searcher, {\n type: \"bi.single_select_searcher\",\n allowNoSelect: o.allowNoSelect,\n text: o.text,\n height: o.height,\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n popup: {},\n adapter: o.adapter,\n masker: o.masker,\n value: o.value\n });\n this.searcher.on(BI.SingleSelectSearcher.EVENT_START, function () {\n self.fireEvent(BI.SingleSelectTrigger.EVENT_START);\n });\n this.searcher.on(BI.SingleSelectSearcher.EVENT_PAUSE, function () {\n self.fireEvent(BI.SingleSelectTrigger.EVENT_PAUSE);\n });\n this.searcher.on(BI.SingleSelectSearcher.EVENT_SEARCHING, function () {\n self.fireEvent(BI.SingleSelectTrigger.EVENT_SEARCHING, arguments);\n });\n this.searcher.on(BI.SingleSelectSearcher.EVENT_STOP, function () {\n self.fireEvent(BI.SingleSelectTrigger.EVENT_STOP);\n });\n this.searcher.on(BI.SingleSelectSearcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.SingleSelectTrigger.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.SingleSelectSearcher.EVENT_FOCUS, function () {\n self.fireEvent(BI.SingleSelectTrigger.EVENT_FOCUS);\n });\n this.searcher.on(BI.SingleSelectSearcher.EVENT_BLUR, function () {\n self.fireEvent(BI.SingleSelectTrigger.EVENT_BLUR, arguments);\n });\n\n var wrapper = BI.createWidget({\n type: \"bi.htape\",\n element: this,\n items: [\n {\n el: this.searcher,\n width: \"fill\"\n }, {\n el: BI.createWidget(),\n width: 24\n }]\n });\n\n !o.allowEdit && BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.text\",\n title: function () {\n return self.searcher.getState();\n }\n },\n left: 0,\n right: 24,\n top: 0,\n bottom: 0\n }]\n });\n },\n\n getSearcher: function () {\n return this.searcher;\n },\n\n stopEditing: function () {\n this.searcher.stopSearch();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n setValue: function (v) {\n this.searcher.setValue(v);\n },\n\n getKey: function () {\n return this.searcher.getKey();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n }\n});\n\nBI.SingleSelectTrigger.EVENT_TRIGGER_CLICK = \"EVENT_TRIGGER_CLICK\";\nBI.SingleSelectTrigger.EVENT_COUNTER_CLICK = \"EVENT_COUNTER_CLICK\";\nBI.SingleSelectTrigger.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SingleSelectTrigger.EVENT_START = \"EVENT_START\";\nBI.SingleSelectTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.SingleSelectTrigger.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.SingleSelectTrigger.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.SingleSelectTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW = \"EVENT_BEFORE_COUNTER_POPUPVIEW\";\nBI.SingleSelectTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SingleSelectTrigger.EVENT_BLUR = \"EVENT_BLUR\";\n\nBI.shortcut(\"bi.single_select_trigger\", BI.SingleSelectTrigger);","/**\n * @author: Teller\n * @createdAt: 2018/3/28\n * @Description\n*/\nBI.SingleSelectInsertList = BI.inherit(BI.Single, {\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectInsertList.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-multi-select-insert-list\",\n allowNoSelect: false,\n itemsCreator: BI.emptyFn,\n valueFormatter: BI.emptyFn\n });\n },\n _init: function () {\n BI.SingleSelectInsertList.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n this.storeValue = o.value;\n\n var assertShowValue = function () {\n BI.isKey(self._startValue) && (self.storeValue = self._startValue);\n // self.trigger.setValue(self.storeValue);\n };\n\n this.adapter = BI.createWidget({\n type: \"bi.single_select_loader\",\n allowNoSelect: o.allowNoSelect,\n cls: \"popup-single-select-list bi-border-left bi-border-right bi-border-bottom\",\n itemsCreator: o.itemsCreator,\n valueFormatter: o.valueFormatter,\n logic: {\n dynamic: true\n },\n // onLoaded: o.onLoaded,\n el: {},\n value: o.value\n });\n this.adapter.on(BI.SingleSelectLoader.EVENT_CHANGE, function () {\n self.storeValue = this.getValue();\n assertShowValue();\n self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE);\n });\n\n this.searcherPane = BI.createWidget({\n type: \"bi.single_select_search_pane\",\n allowNoSelect: o.allowNoSelect,\n cls: \"bi-border-left bi-border-right bi-border-bottom\",\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.trigger.getKeyword();\n },\n itemsCreator: function (op, callback) {\n op.keywords = [self.trigger.getKeyword()];\n this.setKeyword(op.keywords[0]);\n o.itemsCreator(op, callback);\n }\n });\n this.searcherPane.setVisible(false);\n\n this.trigger = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n adapter: this.adapter,\n popup: this.searcherPane,\n height: 200,\n masker: false,\n value: o.value,\n listeners: [{\n eventName: BI.Searcher.EVENT_START,\n action: function () {\n self._showSearcherPane();\n self._setStartValue();\n this.setValue(BI.deepClone(self.storeValue));\n }\n }, {\n eventName: BI.Searcher.EVENT_STOP,\n action: function () {\n self._showAdapter();\n self._setStartValue();\n self.adapter.setValue(self.storeValue);\n // 需要刷新回到初始界面,否则搜索的结果不能放在最前面\n self.adapter.populate();\n }\n }, {\n eventName: BI.Searcher.EVENT_PAUSE,\n action: function () {\n var keyword = this.getKeyword();\n self.storeValue = keyword;\n self._showAdapter();\n self.adapter.setValue(self.storeValue);\n self._setStartValue(keyword);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue();\n self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE);\n }\n }, {\n eventName: BI.Searcher.EVENT_SEARCHING,\n action: function () {\n var keywords = this.getKeyword();\n var last = BI.last(keywords);\n keywords = BI.initial(keywords || []);\n if (keywords.length > 0) {\n self._joinKeywords(keywords, function () {\n if (BI.isEndWithBlank(last)) {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n self.adapter.populate();\n self._setStartValue();\n } else {\n self.adapter.setValue(self.storeValue);\n assertShowValue();\n }\n });\n }\n }\n }, {\n eventName: BI.Searcher.EVENT_CHANGE,\n action: function () {\n self.storeValue = this.getValue();\n self.fireEvent(BI.SingleSelectInsertList.EVENT_CHANGE);\n }\n }]\n });\n\n BI.createWidget({\n type: \"bi.vtape\",\n element: this,\n items: [{\n el: this.trigger,\n height: 24\n }, {\n el: this.adapter,\n height: \"fill\"\n }]\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.searcherPane,\n top: 24,\n bottom: 0,\n left: 0,\n right: 0\n }]\n });\n },\n\n _showAdapter: function () {\n this.adapter.setVisible(true);\n this.searcherPane.setVisible(false);\n },\n\n _showSearcherPane: function () {\n this.searcherPane.setVisible(true);\n this.adapter.setVisible(false);\n },\n\n _defaultState: function () {\n this.trigger.stopEditing();\n },\n\n _assertValue: function () {},\n\n _makeMap: function (values) {\n return BI.makeObject(values || []);\n },\n\n _joinKeywords: function (keywords, callback) {\n var self = this, o = this.options;\n this._assertValue(this.storeValue);\n if (!this._allData) {\n o.itemsCreator({\n type: BI.SingleSelectInsertList.REQ_GET_ALL_DATA\n }, function (ob) {\n self._allData = BI.map(ob.items, \"value\");\n digest(self._allData);\n });\n } else {\n digest(this._allData);\n }\n\n function digest (items) {\n var selectedMap = self._makeMap(items);\n BI.each(keywords, function (i, val) {\n if (BI.isNotNull(selectedMap[val])) {\n self.storeValue.type === BI.Selection.Single ? BI.pushDistinct(self.storeValue.value, val) : BI.remove(self.storeValue.value, val);\n }\n });\n callback();\n }\n },\n\n _setStartValue: function (value) {\n this._startValue = value;\n this.adapter.setStartValue(value);\n },\n\n isAllSelected: function () {\n return this.adapter.isAllSelected();\n },\n\n resize: function () {\n // this.trigger.getCounter().adjustView();\n // this.trigger.adjustView();\n },\n setValue: function (v) {\n this.storeValue = v;\n this.adapter.setValue(this.storeValue);\n this.trigger.setValue(this.storeValue);\n },\n\n getValue: function () {\n return BI.deepClone(this.storeValue);\n },\n\n populate: function () {\n this._count = null;\n this._allData = null;\n this.adapter.populate.apply(this.adapter, arguments);\n this.trigger.populate.apply(this.trigger, arguments);\n }\n});\n\nBI.extend(BI.SingleSelectInsertList, {\n REQ_GET_DATA_LENGTH: 0,\n REQ_GET_ALL_DATA: -1\n});\n\nBI.SingleSelectInsertList.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_select_insert_list\", BI.SingleSelectInsertList);\n","/**\n * 单选输入框\n * Created by guy on 15/11/3.\n * @class BI.SingleSelectEditor\n * @extends Widget\n */\nBI.SingleSelectEditor = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectEditor.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-editor\",\n el: {},\n text: BI.i18nText(\"BI-Basic_Please_Select\")\n });\n },\n\n _init: function () {\n BI.SingleSelectEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget(o.el, {\n type: \"bi.state_editor\",\n element: this,\n height: o.height,\n watermark: BI.i18nText(\"BI-Basic_Search\"),\n allowBlank: true,\n value: o.value,\n defaultText: o.text,\n text: o.text,\n });\n\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.editor.on(BI.StateEditor.EVENT_PAUSE, function () {\n self.fireEvent(BI.SingleSelectEditor.EVENT_PAUSE);\n });\n this.editor.on(BI.StateEditor.EVENT_FOCUS, function () {\n self.fireEvent(BI.SingleSelectEditor.EVENT_FOCUS);\n });\n this.editor.on(BI.StateEditor.EVENT_BLUR, function () {\n self.fireEvent(BI.SingleSelectEditor.EVENT_BLUR);\n });\n },\n\n focus: function () {\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n },\n\n setState: function (state) {\n this.editor.setState(state);\n },\n\n setValue: function (v) {\n this.editor.setValue(v);\n },\n\n getValue: function () {\n var v = this.editor.getState();\n if (BI.isArray(v) && v.length > 0) {\n return v[v.length - 1];\n }\n return \"\";\n\n },\n\n getKeywords: function () {\n var val = this.editor.getLastChangedValue();\n var keywords = val.match(/[\\S]+/g);\n if (BI.isEndWithBlank(val)) {\n return keywords.concat([\" \"]);\n }\n return keywords;\n },\n\n populate: function (items) {\n\n }\n});\n\nBI.SingleSelectEditor.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SingleSelectEditor.EVENT_BLUR = \"EVENT_BLUR\";\nBI.SingleSelectEditor.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.shortcut(\"bi.single_select_editor\", BI.SingleSelectEditor);","/**\n * searcher\n * Created by guy on 15/11/3.\n * @class BI.SingleSelectSearcher\n * @extends Widget\n */\nBI.SingleSelectSearcher = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleSelectSearcher.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-select-searcher\",\n itemsCreator: BI.emptyFn,\n el: {},\n popup: {},\n valueFormatter: BI.emptyFn,\n adapter: null,\n masker: {},\n allowNoSelect: false\n });\n },\n\n _init: function () {\n BI.SingleSelectSearcher.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget(o.el, {\n type: \"bi.single_select_editor\",\n height: o.height,\n text: o.text,\n listeners: [{\n eventName: BI.SingleSelectEditor.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.SingleSelectSearcher.EVENT_FOCUS);\n }\n }, {\n eventName: BI.SingleSelectEditor.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.SingleSelectSearcher.EVENT_BLUR);\n }\n }]\n });\n\n this.searcher = BI.createWidget({\n type: \"bi.searcher\",\n allowSearchBlank: false,\n element: this,\n height: o.height,\n isAutoSearch: false,\n isAutoSync: false,\n onSearch: function (op, callback) {\n callback();\n },\n el: this.editor,\n\n popup: BI.extend({\n type: \"bi.single_select_search_pane\",\n allowNoSelect: o.allowNoSelect,\n valueFormatter: o.valueFormatter,\n keywordGetter: function () {\n return self.editor.getValue();\n },\n itemsCreator: function (op, callback) {\n var keyword = self.editor.getValue();\n op.keywords = [keyword];\n this.setKeyword(keyword);\n o.itemsCreator(op, callback);\n },\n value: o.value\n }, o.popup),\n\n adapter: o.adapter,\n masker: o.masker\n });\n this.searcher.on(BI.Searcher.EVENT_START, function () {\n self.fireEvent(BI.SingleSelectSearcher.EVENT_START);\n });\n this.searcher.on(BI.Searcher.EVENT_PAUSE, function () {\n if (this.hasMatched()) {\n\n }\n self.fireEvent(BI.SingleSelectSearcher.EVENT_PAUSE);\n });\n this.searcher.on(BI.Searcher.EVENT_STOP, function () {\n self.fireEvent(BI.SingleSelectSearcher.EVENT_STOP);\n });\n this.searcher.on(BI.Searcher.EVENT_CHANGE, function () {\n self.fireEvent(BI.SingleSelectSearcher.EVENT_CHANGE, arguments);\n });\n this.searcher.on(BI.Searcher.EVENT_SEARCHING, function () {\n var keywords = this.getKeywords();\n self.fireEvent(BI.SingleSelectSearcher.EVENT_SEARCHING, keywords);\n });\n\n if(BI.isNotNull(o.value)){\n this.setState(o.value);\n }\n },\n\n adjustView: function () {\n this.searcher.adjustView();\n },\n\n isSearching: function () {\n return this.searcher.isSearching();\n },\n\n stopSearch: function () {\n this.searcher.stopSearch();\n },\n\n getKeyword: function () {\n return this.editor.getValue();\n },\n\n hasMatched: function () {\n return this.searcher.hasMatched();\n },\n\n hasChecked: function () {\n return this.searcher.getView() && this.searcher.getView().hasChecked();\n },\n\n setAdapter: function (adapter) {\n this.searcher.setAdapter(adapter);\n },\n\n setState: function (v) {\n var o = this.options;\n if (BI.isNull(v)) {\n this.editor.setState(BI.Selection.None);\n } else {\n this.editor.setState(o.valueFormatter(v + \"\") || (v + \"\"));\n }\n },\n\n setValue: function (ob) {\n this.setState(ob);\n this.searcher.setValue(ob);\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n\n getValue: function () {\n return this.searcher.getValue();\n },\n\n populate: function (items) {\n this.searcher.populate.apply(this.searcher, arguments);\n }\n});\n\nBI.SingleSelectSearcher.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.SingleSelectSearcher.EVENT_BLUR = \"EVENT_BLUR\";\nBI.SingleSelectSearcher.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.SingleSelectSearcher.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SingleSelectSearcher.EVENT_START = \"EVENT_START\";\nBI.SingleSelectSearcher.EVENT_STOP = \"EVENT_STOP\";\nBI.SingleSelectSearcher.EVENT_PAUSE = \"EVENT_PAUSE\";\nBI.SingleSelectSearcher.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.shortcut(\"bi.single_select_searcher\", BI.SingleSelectSearcher);\n","BI.SignTextEditor = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n var conf = BI.SignTextEditor.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n baseCls: (conf.baseCls || \"\") + \" bi-sign-initial-editor\",\n validationChecker: BI.emptyFn,\n text: \"\",\n height: 24\n });\n },\n\n _init: function () {\n BI.SignTextEditor.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.editor = BI.createWidget({\n type: \"bi.editor\",\n height: o.height,\n hgap: 4,\n vgap: 2,\n value: o.value,\n validationChecker: o.validationChecker,\n allowBlank: false\n });\n this.text = BI.createWidget({\n type: \"bi.text_button\",\n cls: \"sign-editor-text\",\n title: function () {\n return self.getValue();\n },\n textAlign: o.textAlign,\n height: o.height,\n hgap: 4,\n handler: function () {\n self._showInput();\n self.editor.focus();\n self.editor.selectAll();\n }\n });\n this.text.on(BI.TextButton.EVENT_CHANGE, function () {\n BI.nextTick(function () {\n self.fireEvent(BI.SignTextEditor.EVENT_CLICK_LABEL);\n });\n });\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: this.text,\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n });\n this.editor.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CONFIRM, function () {\n self._showHint();\n self._checkText();\n self.fireEvent(BI.SignTextEditor.EVENT_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_CHANGE_CONFIRM, function () {\n self._showHint();\n self._checkText();\n self.fireEvent(BI.SignTextEditor.EVENT_CHANGE_CONFIRM, arguments);\n });\n this.editor.on(BI.Editor.EVENT_ERROR, function () {\n self._checkText();\n });\n BI.createWidget({\n type: \"bi.vertical\",\n scrolly: false,\n element: this,\n items: [this.editor]\n });\n this._showHint();\n self._checkText();\n },\n\n _checkText: function () {\n var o = this.options;\n BI.nextTick(BI.bind(function () {\n if (this.editor.getValue() === \"\") {\n this.text.setValue(o.watermark || \"\");\n this.text.element.addClass(\"bi-water-mark\");\n } else {\n var v = this.editor.getValue();\n v = (BI.isEmpty(v) || v == o.text) ? o.text : v + o.text;\n this.text.setValue(v);\n this.text.element.removeClass(\"bi-water-mark\");\n }\n }, this));\n },\n\n _showInput: function () {\n this.editor.visible();\n this.text.invisible();\n },\n\n _showHint: function () {\n this.editor.invisible();\n this.text.visible();\n },\n\n setTitle: function (title) {\n this.text.setTitle(title);\n },\n\n setWarningTitle: function (title) {\n this.text.setWarningTitle(title);\n },\n\n focus: function () {\n this._showInput();\n this.editor.focus();\n },\n\n blur: function () {\n this.editor.blur();\n this._showHint();\n this._checkText();\n },\n\n doRedMark: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doRedMark.apply(this.text, arguments);\n },\n\n unRedMark: function () {\n this.text.unRedMark.apply(this.text, arguments);\n },\n\n doHighLight: function () {\n if (this.editor.getValue() === \"\" && BI.isKey(this.options.watermark)) {\n return;\n }\n this.text.doHighLight.apply(this.text, arguments);\n },\n\n unHighLight: function () {\n this.text.unHighLight.apply(this.text, arguments);\n },\n\n isValid: function () {\n return this.editor.isValid();\n },\n\n setErrorText: function (text) {\n this.editor.setErrorText(text);\n },\n\n getErrorText: function () {\n return this.editor.getErrorText();\n },\n\n isEditing: function () {\n return this.editor.isEditing();\n },\n\n getLastValidValue: function () {\n return this.editor.getLastValidValue();\n },\n\n getLastChangedValue: function () {\n return this.editor.getLastChangedValue();\n },\n\n setValue: function (v) {\n this.editor.setValue(v);\n this._checkText();\n },\n\n getValue: function () {\n return this.editor.getValue();\n },\n\n getState: function () {\n return this.text.getValue();\n },\n\n setState: function (v) {\n var o = this.options;\n this._showHint();\n v = (BI.isEmpty(v) || v == o.text) ? o.text : v + o.text;\n this.text.setValue(v);\n }\n});\nBI.SignTextEditor.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.SignTextEditor.EVENT_CHANGE_CONFIRM = \"EVENT_CHANGE_CONFIRM\";\nBI.SignTextEditor.EVENT_CLICK_LABEL = \"EVENT_CLICK_LABEL\";\n\nBI.shortcut(\"bi.sign_text_editor\", BI.SignTextEditor);","/**\n * Created by zcf on 2016/9/22.\n */\nBI.SliderIconButton = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-single-slider-button\"\n },\n\n constants: {\n LARGE_SIZE: 16,\n NORMAL_SIZE: 12,\n LARGE_OFFSET: 4,\n NORMAL_OFFSET: 6\n },\n\n render: function () {\n var self = this;\n return {\n type: \"bi.absolute\",\n ref: function () {\n self.wrapper = this;\n },\n items: [{\n el: {\n type: \"bi.text_button\",\n cls: \"slider-button bi-high-light-border\",\n ref: function () {\n self.slider = this;\n }\n }\n }]\n };\n }\n});\nBI.shortcut(\"bi.single_slider_button\", BI.SliderIconButton);","/**\n * Created by zcf on 2016/9/22.\n */\nBI.SingleSlider = BI.inherit(BI.Single, {\n _constant: {\n EDITOR_WIDTH: 90,\n EDITOR_HEIGHT: 30,\n SLIDER_WIDTH_HALF: 15,\n SLIDER_WIDTH: 30,\n SLIDER_HEIGHT: 30,\n TRACK_HEIGHT: 24,\n TRACK_GAP_HALF: 7,\n TRACK_GAP: 14\n },\n\n props: {\n baseCls: \"bi-single-slider bi-slider-track\",\n digit: false,\n unit: \"\"\n },\n\n render: function () {\n var self = this, o = this.options;\n var c = this._constant;\n this.enable = false;\n this.value = \"\";\n\n this.grayTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"gray-track\",\n height: 6\n });\n this.blueTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"blue-track bi-high-light-background\",\n height: 6\n });\n this.track = this._createTrackWrapper();\n\n this.slider = BI.createWidget({\n type: \"bi.single_slider_button\"\n });\n this._draggable(this.slider);\n var sliderVertical = BI.createWidget({\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [this.slider]\n }],\n hgap: c.SLIDER_WIDTH_HALF,\n height: c.SLIDER_HEIGHT\n });\n // 这边其实是有问题的,拖拽区域是个圆,在圆的边缘拖拽后放开,这边计算出来的蓝条宽度实际上会比放开时长一点或者短一点\n sliderVertical.element.click(function (e) {\n if (self.enable && self.isEnabled() && sliderVertical.element[0] === e.originalEvent.target) {\n var offset = e.clientX - self.element.offset().left - c.SLIDER_WIDTH_HALF;\n var trackLength = self.track.element[0].scrollWidth - c.TRACK_GAP;\n var percent = 0;\n if (offset < 0) {\n percent = 0;\n }\n if (offset > 0 && offset < trackLength) {\n percent = offset * 100 / self._getGrayTrackLength();\n }\n if (offset >= trackLength) {\n percent = 100;\n }\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setAllPosition(significantPercent);\n var v = self._getValueByPercent(significantPercent);\n v = o.digit === false ? v : v.toFixed(o.digit);\n self.label.setValue(v);\n self.value = v;\n self.fireEvent(BI.SingleSlider.EVENT_CHANGE);\n }\n });\n this.label = BI.createWidget({\n type: \"bi.sign_text_editor\",\n cls: \"slider-editor-button\",\n text: o.unit,\n width: c.EDITOR_WIDTH - 2,\n allowBlank: false,\n textAlign: \"center\",\n validationChecker: function (v) {\n return self._checkValidation(v);\n }\n });\n this.label.element.hover(function () {\n self.label.element.removeClass(\"bi-border\").addClass(\"bi-border\");\n }, function () {\n self.label.element.removeClass(\"bi-border\");\n });\n this.label.on(BI.SignEditor.EVENT_CONFIRM, function () {\n var v = BI.parseFloat(this.getValue());\n var percent = self._getPercentByValue(v);\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setAllPosition(significantPercent);\n this.setValue(v);\n self.value = v;\n self.fireEvent(BI.SingleSlider.EVENT_CHANGE);\n });\n this._setVisible(false);\n return {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.track,\n width: \"100%\",\n height: c.TRACK_HEIGHT\n }]\n }],\n hgap: c.TRACK_GAP_HALF,\n height: c.TRACK_HEIGHT\n },\n top: 23,\n left: 0,\n width: \"100%\"\n }, {\n el: sliderVertical,\n top: 20,\n left: 0,\n width: \"100%\"\n }, {\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.horizontal_auto\",\n items: [this.label]\n }],\n height: c.EDITOR_HEIGHT\n },\n top: 0,\n left: 0,\n width: \"100%\"\n }]\n };\n },\n\n _draggable: function (widget) {\n var self = this, o = this.options;\n var startDrag = false;\n var size = 0, offset = 0, defaultSize = 0;\n var mouseMoveTracker = new BI.MouseMoveTracker(function (deltaX) {\n if (mouseMoveTracker.isDragging()) {\n startDrag = true;\n offset += deltaX;\n size = optimizeSize(defaultSize + offset);\n widget.element.addClass(\"dragging\");\n var percent = size * 100 / (self._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));// 直接对计算出来的百分数保留到小数点后一位,相当于分成了1000份。\n self._setBlueTrack(significantPercent);\n self._setLabelPosition(significantPercent);\n self._setSliderPosition(significantPercent);\n var v = self._getValueByPercent(significantPercent);\n v = o.digit === false ? v : v.toFixed(o.digit);\n self.label.setValue(v);\n self.value = v;\n }\n }, function () {\n if (startDrag === true) {\n size = optimizeSize(size);\n var percent = size * 100 / (self._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setSliderPosition(significantPercent);\n size = 0;\n offset = 0;\n defaultSize = size;\n startDrag = false;\n }\n widget.element.removeClass(\"dragging\");\n mouseMoveTracker.releaseMouseMoves();\n self.fireEvent(BI.SingleSlider.EVENT_CHANGE);\n }, window);\n widget.element.on(\"mousedown\", function (event) {\n if(!widget.isEnabled()) {\n return;\n }\n defaultSize = this.offsetLeft;\n optimizeSize(defaultSize);\n mouseMoveTracker.captureMouseMoves(event);\n });\n\n function optimizeSize (s) {\n return BI.clamp(s, 0, self._getGrayTrackLength());\n }\n },\n\n _createTrackWrapper: function () {\n return BI.createWidget({\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.grayTrack,\n top: 0,\n left: 0,\n width: \"100%\"\n }, {\n el: this.blueTrack,\n top: 0,\n left: 0,\n width: \"0%\"\n }]\n }],\n hgap: 8,\n height: 8\n },\n top: 8,\n left: 0,\n width: \"100%\"\n }]\n });\n },\n\n _checkValidation: function (v) {\n var o = this.options;\n var valid = false;\n if (BI.isNumeric(v) && !(BI.isNull(v) || v < this.min || v > this.max)) {\n if(o.digit === false) {\n valid = true;\n }else{\n var dotText = (v + \"\").split(\".\")[1] || \"\";\n valid = (dotText.length === o.digit);\n }\n }\n return valid;\n },\n\n _setBlueTrack: function (percent) {\n this.blueTrack.element.css({width: percent + \"%\"});\n },\n\n _setLabelPosition: function (percent) {\n // this.label.element.css({left: percent + \"%\"});\n },\n\n _setSliderPosition: function (percent) {\n this.slider.element.css({left: percent + \"%\"});\n },\n\n _setAllPosition: function (percent) {\n this._setSliderPosition(percent);\n this._setLabelPosition(percent);\n this._setBlueTrack(percent);\n },\n\n _setVisible: function (visible) {\n this.slider.setVisible(visible);\n this.label.setVisible(visible);\n },\n\n _getGrayTrackLength: function () {\n return this.grayTrack.element[0].scrollWidth;\n },\n\n _getValueByPercent: function (percent) {\n var thousandth = BI.parseInt(percent * 10);\n return (((this.max - this.min) * thousandth) / 1000 + this.min);\n },\n\n _getPercentByValue: function (v) {\n return (v - this.min) * 100 / (this.max - this.min);\n },\n\n getValue: function () {\n return this.value;\n },\n\n setValue: function (v) {\n var o = this.options;\n v = BI.parseFloat(v);\n v = o.digit === false ? v : v.toFixed(o.digit);\n if ((!isNaN(v))) {\n if (this._checkValidation(v)) {\n this.value = v;\n }\n if (v > this.max) {\n this.value = this.max;\n }\n if (v < this.min) {\n this.value = this.min;\n }\n }\n },\n\n _setEnable: function (b) {\n BI.SingleSlider.superclass._setEnable.apply(this, [b]);\n if(b) {\n this.blueTrack.element.removeClass(\"disabled-blue-track\").addClass(\"blue-track\");\n } else {\n this.blueTrack.element.removeClass(\"blue-track\").addClass(\"disabled-blue-track\");\n }\n },\n\n setMinAndMax: function (v) {\n var minNumber = BI.parseFloat(v.min);\n var maxNumber = BI.parseFloat(v.max);\n if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber > minNumber )) {\n this.min = minNumber;\n this.max = maxNumber;\n }\n },\n\n reset: function () {\n this._setVisible(false);\n this.enable = false;\n this.value = \"\";\n this.min = 0;\n this.max = 0;\n this._setBlueTrack(0);\n\n },\n\n populate: function () {\n if (!isNaN(this.min) && !isNaN(this.max)) {\n this._setVisible(true);\n this.enable = true;\n this.label.setErrorText(BI.i18nText(\"BI-Basic_Please_Enter_Number_Between\", this.min, this.max));\n if (BI.isNumeric(this.value) || BI.isNotEmptyString(this.value)) {\n this.label.setValue(this.value);\n this._setAllPosition(this._getPercentByValue(this.value));\n } else {\n this.label.setValue(this.max);\n this._setAllPosition(100);\n }\n }\n }\n});\nBI.SingleSlider.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_slider\", BI.SingleSlider);","/**\n * Created by Urthur on 2017/9/12.\n */\nBI.SingleSliderLabel = BI.inherit(BI.Single, {\n _constant: {\n EDITOR_WIDTH: 90,\n EDITOR_HEIGHT: 20,\n HEIGHT: 20,\n SLIDER_WIDTH_HALF: 15,\n SLIDER_WIDTH: 30,\n SLIDER_HEIGHT: 30,\n TRACK_HEIGHT: 24,\n TRACK_GAP_HALF: 7,\n TRACK_GAP: 14\n },\n _defaultConfig: function () {\n return BI.extend(BI.SingleSliderLabel.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-slider-label bi-slider-track\",\n digit: false,\n unit: \"\"\n });\n },\n _init: function () {\n BI.SingleSliderLabel.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n var c = this._constant;\n this.enable = false;\n this.value = \"\";\n\n this.grayTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"gray-track\",\n height: 6\n });\n this.blueTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"blue-track bi-high-light-background\",\n height: 6\n });\n this.track = this._createTrackWrapper();\n\n this.slider = BI.createWidget({\n type: \"bi.single_slider_button\"\n });\n this._draggable(this.slider);\n var sliderVertical = BI.createWidget({\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [this.slider]\n }],\n hgap: c.SLIDER_WIDTH_HALF,\n height: c.SLIDER_HEIGHT\n });\n sliderVertical.element.click(function (e) {\n if (self.enable && self.isEnabled() && sliderVertical.element[0] === e.originalEvent.target) {\n var offset = e.clientX - self.element.offset().left - c.SLIDER_WIDTH_HALF;\n var trackLength = self.track.element[0].scrollWidth - c.TRACK_GAP;\n var percent = 0;\n if (offset < 0) {\n percent = 0;\n }\n if (offset > 0 && offset < trackLength) {\n percent = offset * 100 / self._getGrayTrackLength();\n }\n if (offset >= trackLength) {\n percent = 100;\n }\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setAllPosition(significantPercent);\n var v = self._getValueByPercent(significantPercent);\n v = o.digit === false ? v : v.toFixed(o.digit);\n self.label.setText(v + o.unit);\n self.value = v;\n self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE);\n }\n });\n this.label = BI.createWidget({\n type: \"bi.label\",\n height: c.HEIGHT,\n width: c.EDITOR_WIDTH - 2\n });\n\n this._setVisible(false);\n BI.createWidget({\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.track,\n width: \"100%\",\n height: c.TRACK_HEIGHT\n }]\n }],\n hgap: c.TRACK_GAP_HALF,\n height: c.TRACK_HEIGHT\n },\n top: 13,\n left: 0,\n width: \"100%\"\n }, {\n el: sliderVertical,\n top: 10,\n left: 0,\n width: \"100%\"\n }, {\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.horizontal_auto\",\n items: [this.label]\n }],\n height: c.EDITOR_HEIGHT\n },\n top: 0,\n left: 0,\n width: \"100%\"\n }]\n });\n },\n\n _draggable: function (widget) {\n var self = this, o = this.options;\n var startDrag = false;\n var size = 0, offset = 0, defaultSize = 0;\n var mouseMoveTracker = new BI.MouseMoveTracker(function (deltaX) {\n if (mouseMoveTracker.isDragging()) {\n startDrag = true;\n offset += deltaX;\n size = optimizeSize(defaultSize + offset);\n widget.element.addClass(\"dragging\");\n var percent = size * 100 / (self._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));// 直接对计算出来的百分数保留到小数点后一位,相当于分成了1000份。\n self._setBlueTrack(significantPercent);\n self._setLabelPosition(significantPercent);\n self._setSliderPosition(significantPercent);\n var v = self._getValueByPercent(significantPercent);\n v = o.digit === false ? v : v.toFixed(o.digit);\n self.label.setValue(v + o.unit);\n self.value = v;\n self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE);\n }\n }, function () {\n if (startDrag === true) {\n size = optimizeSize(size);\n var percent = size * 100 / (self._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setSliderPosition(significantPercent);\n size = 0;\n offset = 0;\n defaultSize = size;\n startDrag = false;\n }\n widget.element.removeClass(\"dragging\");\n mouseMoveTracker.releaseMouseMoves();\n self.fireEvent(BI.SingleSliderLabel.EVENT_CHANGE);\n }, window);\n widget.element.on(\"mousedown\", function (event) {\n if(!widget.isEnabled()) {\n return;\n }\n defaultSize = this.offsetLeft;\n optimizeSize(defaultSize);\n mouseMoveTracker.captureMouseMoves(event);\n });\n\n function optimizeSize (s) {\n return BI.clamp(s, 0, self._getGrayTrackLength());\n }\n },\n\n _createTrackWrapper: function () {\n return BI.createWidget({\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.grayTrack,\n top: 0,\n left: 0,\n width: \"100%\"\n }, {\n el: this.blueTrack,\n top: 0,\n left: 0,\n width: \"0%\"\n }]\n }],\n hgap: 8,\n height: 8\n },\n top: 8,\n left: 0,\n width: \"100%\"\n }]\n });\n },\n\n _checkValidation: function (v) {\n return BI.isNumeric(v) && !(BI.isNull(v) || v < this.min || v > this.max);\n },\n\n _setBlueTrack: function (percent) {\n this.blueTrack.element.css({width: percent + \"%\"});\n },\n\n _setLabelPosition: function (percent) {\n // this.label.element.css({left: percent + \"%\"});\n },\n\n _setSliderPosition: function (percent) {\n this.slider.element.css({left: percent + \"%\"});\n },\n\n _setAllPosition: function (percent) {\n this._setSliderPosition(percent);\n this._setLabelPosition(percent);\n this._setBlueTrack(percent);\n },\n\n _setVisible: function (visible) {\n this.slider.setVisible(visible);\n this.label.setVisible(visible);\n },\n\n _getGrayTrackLength: function () {\n return this.grayTrack.element[0].scrollWidth;\n },\n\n _getValueByPercent: function (percent) {\n var thousandth = BI.parseInt(percent * 10);\n return (((this.max - this.min) * thousandth) / 1000 + this.min);\n },\n\n _getPercentByValue: function (v) {\n return (v - this.min) * 100 / (this.max - this.min);\n },\n\n _setEnable: function (b) {\n BI.SingleSliderLabel.superclass._setEnable.apply(this, [b]);\n if(b) {\n this.blueTrack.element.removeClass(\"disabled-blue-track\").addClass(\"blue-track\");\n } else {\n this.blueTrack.element.removeClass(\"blue-track\").addClass(\"disabled-blue-track\");\n }\n },\n\n getValue: function () {\n return this.value;\n },\n\n setValue: function (v) {\n var o = this.options;\n v = BI.parseFloat(v);\n v = o.digit === false ? v : v.toFixed(o.digit);\n if ((!isNaN(v))) {\n if (this._checkValidation(v)) {\n this.value = v;\n }\n if (v > this.max) {\n this.value = this.max;\n }\n if (v < this.min) {\n this.value = this.min;\n }\n }\n },\n\n setMinAndMax: function (v) {\n var minNumber = BI.parseFloat(v.min);\n var maxNumber = BI.parseFloat(v.max);\n if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber > minNumber )) {\n this.min = minNumber;\n this.max = maxNumber;\n }\n },\n\n reset: function () {\n this._setVisible(false);\n this.enable = false;\n this.value = \"\";\n this.min = 0;\n this.max = 0;\n this._setBlueTrack(0);\n },\n\n populate: function () {\n var o = this.options;\n if (!isNaN(this.min) && !isNaN(this.max)) {\n this._setVisible(true);\n this.enable = true;\n if (BI.isNumeric(this.value) || BI.isNotEmptyString(this.value)) {\n this.label.setValue(this.value + o.unit);\n this._setAllPosition(this._getPercentByValue(this.value));\n } else {\n this.label.setValue(this.max + o.unit);\n this._setAllPosition(100);\n }\n }\n }\n});\nBI.SingleSliderLabel.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_slider_label\", BI.SingleSliderLabel);","/**\n * normal single slider\n * Created by Young on 2017/6/21.\n */\nBI.SingleSliderNormal = BI.inherit(BI.Single, {\n\n _constant: {\n HEIGHT: 28,\n SLIDER_WIDTH_HALF: 15,\n SLIDER_WIDTH: 30,\n SLIDER_HEIGHT: 30,\n TRACK_HEIGHT: 24,\n TRACK_GAP_HALF: 7,\n TRACK_GAP: 14\n },\n\n props: {\n baseCls: \"bi-single-slider-normal bi-slider-track\",\n minMax: {\n min: 0,\n max: 100\n }\n // color: \"#3f8ce8\"\n },\n\n render: function () {\n var self = this;\n var c = this._constant;\n var track = this._createTrack();\n this.slider = BI.createWidget({\n type: \"bi.single_slider_button\"\n });\n this._draggable(this.slider);\n\n var sliderVertical = BI.createWidget({\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [this.slider]\n }],\n hgap: c.SLIDER_WIDTH_HALF,\n height: c.SLIDER_HEIGHT\n });\n sliderVertical.element.click(function (e) {\n if (self.enable && self.isEnabled() && sliderVertical.element[0] === e.originalEvent.target) {\n var offset = e.clientX - self.element.offset().left - c.SLIDER_WIDTH_HALF;\n var trackLength = self.track.element[0].scrollWidth - c.TRACK_GAP;\n var percent = 0;\n if (offset < 0) {\n percent = 0;\n }\n if (offset > 0 && offset < trackLength) {\n percent = offset * 100 / self._getGrayTrackLength();\n }\n if (offset >= trackLength) {\n percent = 100;\n }\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setAllPosition(significantPercent);\n var v = self._getValueByPercent(significantPercent);\n self.value = v;\n self.fireEvent(BI.SingleSlider.EVENT_CHANGE);\n }\n });\n\n return {\n type: \"bi.absolute\",\n element: this,\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: track,\n width: \"100%\",\n height: c.TRACK_HEIGHT\n }]\n }],\n hgap: c.TRACK_GAP_HALF,\n height: c.TRACK_HEIGHT\n },\n top: 3,\n left: 0,\n width: \"100%\"\n }, {\n el: sliderVertical,\n top: 0,\n left: 0,\n width: \"100%\"\n }]\n };\n },\n\n _draggable: function (widget) {\n var self = this, o = this.options;\n var startDrag = false;\n var size = 0, offset = 0, defaultSize = 0;\n var mouseMoveTracker = new BI.MouseMoveTracker(function (deltaX) {\n if (mouseMoveTracker.isDragging()) {\n startDrag = true;\n offset += deltaX;\n size = optimizeSize(defaultSize + offset);\n widget.element.addClass(\"dragging\");\n var percent = size * 100 / (self._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));// 直接对计算出来的百分数保留到小数点后一位,相当于分成了1000份。\n self._setBlueTrack(significantPercent);\n self._setSliderPosition(significantPercent);\n var v = self._getValueByPercent(significantPercent);\n v = o.digit === false ? v : v.toFixed(o.digit);\n self.value = v;\n self.fireEvent(BI.SingleSliderNormal.EVENT_DRAG, v);\n }\n }, function () {\n if (startDrag === true) {\n size = optimizeSize(size);\n var percent = size * 100 / (self._getGrayTrackLength());\n var significantPercent = BI.parseFloat(percent.toFixed(1));\n self._setSliderPosition(significantPercent);\n size = 0;\n offset = 0;\n defaultSize = size;\n startDrag = false;\n }\n widget.element.removeClass(\"dragging\");\n mouseMoveTracker.releaseMouseMoves();\n self.fireEvent(BI.SingleSlider.EVENT_CHANGE);\n }, window);\n widget.element.on(\"mousedown\", function (event) {\n if(!widget.isEnabled()) {\n return;\n }\n defaultSize = this.offsetLeft;\n optimizeSize(defaultSize);\n mouseMoveTracker.captureMouseMoves(event);\n });\n\n function optimizeSize (s) {\n return BI.clamp(s, 0, self._getGrayTrackLength());\n }\n },\n\n _createTrack: function () {\n var self = this;\n var c = this._constant;\n this.grayTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"gray-track\",\n height: 6\n });\n this.blueTrack = BI.createWidget({\n type: \"bi.layout\",\n cls: \"blue-track bi-high-light-background\",\n height: 6\n });\n if (this.options.color) {\n this.blueTrack.element.css({\"background-color\": this.options.color});\n }\n\n return {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: this.grayTrack,\n top: 0,\n left: 0,\n width: \"100%\"\n }, {\n el: this.blueTrack,\n top: 0,\n left: 0,\n width: \"0%\"\n }]\n }],\n hgap: 8,\n height: 8\n },\n top: 8,\n left: 0,\n width: \"100%\"\n }],\n ref: function (ref) {\n self.track = ref;\n }\n };\n },\n\n _checkValidation: function (v) {\n return !(BI.isNull(v) || v < this.min || v > this.max);\n },\n\n _setBlueTrack: function (percent) {\n this.blueTrack.element.css({width: percent + \"%\"});\n },\n\n _setSliderPosition: function (percent) {\n this.slider.element.css({left: percent + \"%\"});\n },\n\n _setAllPosition: function (percent) {\n this._setSliderPosition(percent);\n this._setBlueTrack(percent);\n },\n\n _setVisible: function (visible) {\n this.slider.setVisible(visible);\n },\n\n _getGrayTrackLength: function () {\n return this.grayTrack.element[0].scrollWidth;\n },\n\n _getValueByPercent: function (percent) {\n var thousandth = BI.parseInt(percent * 10);\n return (((this.max - this.min) * thousandth) / 1000 + this.min);\n },\n\n _getPercentByValue: function (v) {\n return (v - this.min) * 100 / (this.max - this.min);\n },\n\n _setEnable: function (b) {\n BI.SingleSliderNormal.superclass._setEnable.apply(this, [b]);\n if(b) {\n this.blueTrack.element.removeClass(\"disabled-blue-track\").addClass(\"blue-track\");\n } else {\n this.blueTrack.element.removeClass(\"blue-track\").addClass(\"disabled-blue-track\");\n }\n },\n\n getValue: function () {\n return this.value;\n },\n\n setValue: function (v) {\n var value = BI.parseFloat(v);\n if ((!isNaN(value))) {\n if (this._checkValidation(value)) {\n this.value = value;\n }\n if (value > this.max) {\n this.value = this.max;\n }\n if (value < this.min) {\n this.value = this.min;\n }\n }\n },\n\n setMinAndMax: function (v) {\n var minNumber = BI.parseFloat(v.min);\n var maxNumber = BI.parseFloat(v.max);\n if ((!isNaN(minNumber)) && (!isNaN(maxNumber)) && (maxNumber > minNumber )) {\n this.min = minNumber;\n this.max = maxNumber;\n }\n },\n\n reset: function () {\n this._setVisible(false);\n this.enable = false;\n this.value = \"\";\n this.min = 0;\n this.max = 0;\n this._setBlueTrack(0);\n },\n\n populate: function () {\n if (!isNaN(this.min) && !isNaN(this.max)) {\n this._setVisible(true);\n this.enable = true;\n if (BI.isNumeric(this.value) || BI.isNotEmptyString(this.value)) {\n this._setAllPosition(this._getPercentByValue(this.value));\n } else {\n this._setAllPosition(100);\n }\n }\n }\n});\nBI.SingleSliderNormal.EVENT_DRAG = \"EVENT_DRAG\";\nBI.shortcut(\"bi.single_slider_normal\", BI.SingleSliderNormal);","/**\n * @class BI.SingleTreeCombo\n * @extends BI.Widget\n */\nBI.SingleTreeCombo = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleTreeCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-tree-combo\",\n trigger: {},\n height: 24,\n text: \"\",\n items: [],\n value: \"\",\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.SingleTreeCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.trigger = BI.createWidget(BI.extend({\n type: \"bi.single_tree_trigger\",\n text: o.text,\n height: o.height,\n items: o.items,\n value: o.value\n }, o.trigger));\n\n this.popup = BI.createWidget({\n type: \"bi.single_level_tree\",\n items: o.items,\n value: o.value\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n element: this,\n adjustLength: 2,\n el: this.trigger,\n popup: {\n el: this.popup\n }\n });\n\n this.combo.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.fireEvent(BI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW, arguments);\n });\n\n this.popup.on(BI.SingleTreePopup.EVENT_CHANGE, function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.SingleTreeCombo.EVENT_CHANGE);\n });\n },\n\n populate: function (items) {\n this.combo.populate(items);\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.trigger.setValue(v);\n this.popup.setValue(v);\n },\n\n getValue: function () {\n return this.popup.getValue();\n }\n});\n\nBI.SingleTreeCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.SingleTreeCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.single_tree_combo\", BI.SingleTreeCombo);","/**\n * @class BI.SingleTreePopup\n * @extends BI.Pane\n */\n\nBI.SingleTreePopup = BI.inherit(BI.Pane, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleTreePopup.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-level-tree\",\n tipText: BI.i18nText(\"BI-No_Selected_Item\"),\n items: [],\n value: \"\"\n });\n },\n\n _init: function () {\n BI.SingleTreePopup.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n \n this.tree = BI.createWidget({\n type: \"bi.level_tree\",\n expander: {\n isDefaultInit: true\n },\n items: o.items,\n value: o.value,\n chooseType: BI.Selection.Single\n });\n\n BI.createWidget({\n type: \"bi.vertical\",\n element: this,\n vgap: 5,\n items: [this.tree]\n });\n\n this.tree.on(BI.Controller.EVENT_CHANGE, function () {\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n });\n\n this.tree.on(BI.LevelTree.EVENT_CHANGE, function () {\n self.fireEvent(BI.SingleTreePopup.EVENT_CHANGE);\n });\n\n this.check();\n },\n\n getValue: function () {\n return this.tree.getValue();\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.tree.setValue(v);\n },\n\n populate: function (items) {\n BI.SingleTreePopup.superclass.populate.apply(this, arguments);\n this.tree.populate(items);\n }\n});\n\nBI.SingleTreePopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.single_level_tree\", BI.SingleTreePopup);","/**\n * @class BI.SingleTreeTrigger\n * @extends BI.Trigger\n */\n\nBI.SingleTreeTrigger = BI.inherit(BI.Trigger, {\n\n _defaultConfig: function () {\n return BI.extend(BI.SingleTreeTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-single-tree-trigger\",\n height: 24,\n text: \"\",\n items: [],\n value: \"\"\n });\n },\n\n _init: function () {\n BI.SingleTreeTrigger.superclass._init.apply(this, arguments);\n\n var self = this, o = this.options;\n\n this.trigger = BI.createWidget({\n type: \"bi.select_text_trigger\",\n element: this,\n text: o.text,\n items: o.items,\n height: o.height,\n value: o.value\n });\n },\n\n _checkTitle: function () {\n var self = this, val = this.getValue();\n BI.any(this.options.items, function (i, item) {\n if (BI.contains(val, item.value)) {\n self.trigger.setTitle(item.text || item.value);\n return true;\n }\n });\n },\n\n setValue: function (v) {\n v = BI.isArray(v) ? v : [v];\n this.options.value = v;\n this.trigger.setValue(v);\n this._checkTitle();\n },\n\n getValue: function () {\n return this.options.value || [];\n },\n\n populate: function (items) {\n BI.SingleTreeTrigger.superclass.populate.apply(this, arguments);\n this.trigger.populate(items);\n }\n\n});\n\nBI.shortcut(\"bi.single_tree_trigger\", BI.SingleTreeTrigger);","/**\n * @class BI.TextValueDownListCombo\n * @extend BI.Widget\n */\nBI.TextValueDownListCombo = BI.inherit(BI.Widget, {\n _defaultConfig: function () {\n return BI.extend(BI.TextValueDownListCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-text-value-down-list-combo\",\n height: 24,\n attributes: {\n tabIndex: 0\n }\n });\n },\n\n _init: function () {\n BI.TextValueDownListCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this._createValueMap();\n\n var value;\n if(BI.isNotNull(o.value)) {\n value = this._digest(o.value);\n }\n this.trigger = BI.createWidget({\n type: \"bi.down_list_select_text_trigger\",\n cls: \"text-value-down-list-trigger\",\n height: o.height,\n items: o.items,\n text: o.text,\n value: value\n });\n\n this.combo = BI.createWidget({\n type: \"bi.down_list_combo\",\n element: this,\n chooseType: BI.Selection.Single,\n adjustLength: 2,\n height: o.height,\n el: this.trigger,\n value: BI.isNull(value) ? [] : [value],\n items: BI.deepClone(o.items)\n });\n\n this.combo.on(BI.DownListCombo.EVENT_CHANGE, function () {\n var currentVal = self.combo.getValue()[0].value;\n if (currentVal !== self.value) {\n self.setValue(currentVal);\n self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE);\n }\n });\n\n this.combo.on(BI.DownListCombo.EVENT_SON_VALUE_CHANGE, function () {\n var currentVal = self.combo.getValue()[0].childValue;\n if (currentVal !== self.value) {\n self.setValue(currentVal);\n self.fireEvent(BI.TextValueDownListCombo.EVENT_CHANGE);\n }\n });\n },\n\n _createValueMap: function () {\n var self = this;\n this.valueMap = {};\n BI.each(BI.flatten(this.options.items), function (idx, item) {\n if (BI.has(item, \"el\")) {\n BI.each(item.children, function (id, it) {\n self.valueMap[it.value] = {value: item.el.value, childValue: it.value};\n });\n } else {\n self.valueMap[item.value] = {value: item.value};\n }\n });\n },\n\n _digest: function (v) {\n this.value = v;\n return this.valueMap[v];\n },\n\n setValue: function (v) {\n v = this._digest(v);\n this.combo.setValue([v]);\n this.trigger.setValue(v);\n },\n\n getValue: function () {\n var v = this.combo.getValue()[0];\n return [v.childValue || v.value];\n },\n\n populate: function (items) {\n this.options.items = BI.flatten(items);\n this.combo.populate(items);\n this._createValueMap();\n }\n});\nBI.TextValueDownListCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.text_value_down_list_combo\", BI.TextValueDownListCombo);","/**\n * 选择字段trigger, downlist专用\n * 显示形式为 父亲值(儿子值)\n *\n * @class BI.DownListSelectTextTrigger\n * @extends BI.Trigger\n */\nBI.DownListSelectTextTrigger = BI.inherit(BI.Trigger, {\n\n _defaultConfig: function () {\n return BI.extend(BI.DownListSelectTextTrigger.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-down-list-select-text-trigger\",\n height: 24,\n text: \"\"\n });\n },\n\n _init: function () {\n BI.DownListSelectTextTrigger.superclass._init.apply(this, arguments);\n var o = this.options;\n this.trigger = BI.createWidget({\n type: \"bi.select_text_trigger\",\n element: this,\n height: o.height,\n items: this._formatItemArray(o.items),\n text: o.text,\n value: BI.isNull(o.value) ? \"\" : o.value.childValue || o.value.value\n });\n },\n\n _formatItemArray: function () {\n var sourceArray = BI.flatten(BI.deepClone(this.options.items));\n var targetArray = [];\n BI.each(sourceArray, function (idx, item) {\n if(BI.has(item, \"el\")) {\n BI.each(item.children, function (id, it) {\n it.text = item.el.text + \"(\" + it.text + \")\";\n });\n targetArray = BI.concat(targetArray, item.children);\n }else{\n targetArray.push(item);\n }\n });\n return targetArray;\n },\n\n setValue: function (vals) {\n this.trigger.setValue(vals.childValue || vals.value);\n },\n\n populate: function (items) {\n this.trigger.populate(this._formatItemArray(items));\n }\n});\nBI.shortcut(\"bi.down_list_select_text_trigger\", BI.DownListSelectTextTrigger);","!(function () {\n BI.TimePopup = BI.inherit(BI.Widget, {\n props: {\n baseCls: \"bi-date-time-popup\",\n height: 68\n },\n render: function () {\n var self = this, o = this.options;\n\n return {\n type: \"bi.vtape\",\n items: [{\n el: {\n type: \"bi.center_adapt\",\n cls: \"bi-split-top\",\n items: [{\n type: \"bi.dynamic_date_time_select\",\n value: o.value,\n ref: function (_ref) {\n self.timeSelect = _ref;\n }\n }]\n },\n hgap: 10,\n height: 44\n }, {\n el: {\n type: \"bi.grid\",\n items: [[{\n type: \"bi.text_button\",\n cls: \"bi-high-light bi-split-top\",\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Clears\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-left bi-split-right bi-high-light bi-split-top\",\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Now\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.TimePopup.BUTTON_NOW_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-high-light bi-split-top\",\n shadow: true,\n text: BI.i18nText(\"BI-Basic_OK\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.TimePopup.BUTTON_OK_EVENT_CHANGE);\n }\n }]\n }]]\n },\n height: 24\n }]\n };\n },\n\n setValue: function (value) {\n if (this._checkValueValid(value)) {\n this.timeSelect.setValue();\n } else {\n this.timeSelect.setValue({\n hour: value.hour,\n minute: value.minute,\n second: value.second\n });\n }\n },\n\n getValue: function () {\n return this.timeSelect.getValue();\n },\n\n _checkValueValid: function (value) {\n return BI.isNull(value) || BI.isEmptyObject(value) || BI.isEmptyString(value);\n }\n });\n BI.TimePopup.BUTTON_OK_EVENT_CHANGE = \"BUTTON_OK_EVENT_CHANGE\";\n BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE = \"BUTTON_CLEAR_EVENT_CHANGE\";\n BI.TimePopup.BUTTON_NOW_EVENT_CHANGE = \"BUTTON_NOW_EVENT_CHANGE\";\n BI.TimePopup.CALENDAR_EVENT_CHANGE = \"CALENDAR_EVENT_CHANGE\";\n BI.shortcut(\"bi.time_popup\", BI.TimePopup);\n})();","/**\n * 时间选择\n * qcc\n * 2019/2/28\n */\n\n!(function () {\n BI.TimeCombo = BI.inherit(BI.Single, {\n constants: {\n popupHeight: 80,\n popupWidth: 240,\n comboAdjustHeight: 1,\n border: 1\n },\n props: {\n baseCls: \"bi-time-combo bi-border bi-border-radius bi-focus-shadow\",\n width: 78,\n height: 22,\n format: \"\",\n allowEdit: false\n },\n\n render: function () {\n var self = this, opts = this.options;\n this.storeTriggerValue = \"\";\n this.storeValue = opts.value;\n\n var popup = {\n type: \"bi.time_popup\",\n value: opts.value,\n listeners: [{\n eventName: BI.TimePopup.BUTTON_CLEAR_EVENT_CHANGE,\n action: function () {\n self.setValue();\n self.hidePopupView();\n self.fireEvent(BI.TimeCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.TimePopup.BUTTON_OK_EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.hidePopupView();\n self.fireEvent(BI.TimeCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.TimePopup.BUTTON_NOW_EVENT_CHANGE,\n action: function () {\n self._setNowTime();\n }\n }],\n ref: function (_ref) {\n self.popup = _ref;\n }\n };\n return {\n type: \"bi.htape\",\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.combo\",\n container: opts.container,\n toggle: false,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: {\n type: \"bi.time_trigger\",\n height: opts.height,\n allowEdit: opts.allowEdit,\n watermark: opts.watermark,\n format: opts.format,\n value: opts.value,\n ref: function (_ref) {\n self.trigger = _ref;\n },\n listeners: [{\n eventName: \"EVENT_KEY_DOWN\",\n action: function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n }\n self.fireEvent(BI.TimeCombo.EVENT_KEY_DOWN, arguments);\n }\n }, {\n eventName: \"EVENT_STOP\",\n action: function () {\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n }\n }, {\n eventName: \"EVENT_FOCUS\",\n action: function () {\n self.storeTriggerValue = self.trigger.getKey();\n if (!self.combo.isViewVisible()) {\n self.combo.showView();\n }\n self.fireEvent(\"EVENT_FOCUS\");\n }\n }, {\n eventName: \"EVENT_BLUR\",\n action: function () {\n self.fireEvent(\"EVENT_BLUR\");\n }\n }, {\n eventName: \"EVENT_ERROR\",\n action: function () {\n var date = BI.getDate();\n self.storeValue = {\n hour: date.getHours(),\n minute: date.getMinutes(),\n second: date.getSeconds()\n };\n self.fireEvent(\"EVENT_ERROR\");\n }\n }, {\n eventName: \"EVENT_VALID\",\n action: function () {\n self.fireEvent(\"EVENT_VALID\");\n }\n }, {\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }, {\n eventName: \"EVENT_CONFIRM\",\n action: function () {\n if (self.combo.isViewVisible()) {\n return;\n }\n var dateStore = self.storeTriggerValue;\n var dateObj = self.trigger.getKey();\n if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) {\n self.storeValue = self.trigger.getValue();\n self.setValue(self.trigger.getValue());\n } else if (BI.isEmptyString(dateObj)) {\n self.storeValue = null;\n self.trigger.setValue();\n }\n self.fireEvent(\"EVENT_CONFIRM\");\n }\n }]\n },\n adjustLength: this.constants.comboAdjustHeight,\n popup: {\n el: popup,\n width: this.constants.popupWidth,\n stopPropagation: false\n },\n hideChecker: function (e) {\n return self.triggerBtn.element.find(e.target).length === 0;\n },\n listeners: [{\n eventName: BI.Combo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.popup.setValue(self.storeValue);\n self.fireEvent(BI.TimeCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }],\n ref: function (_ref) {\n self.combo = _ref;\n }\n },\n top: 0,\n left: 0,\n right: 22,\n bottom: 0\n }, {\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button time-font icon-size-16\",\n width: 22,\n height: 22,\n listeners: [{\n eventName: BI.IconButton.EVENT_CHANGE,\n action: function () {\n if (self.combo.isViewVisible()) {\n // self.combo.hideView();\n } else {\n self.combo.showView();\n }\n }\n }],\n ref: function (_ref) {\n self.triggerBtn = _ref;\n }\n },\n top: 0,\n right: 0\n }]\n }]\n };\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.trigger.setValue(v);\n },\n getValue: function () {\n return this.storeValue;\n },\n\n hidePopupView: function () {\n this.combo.hideView();\n },\n\n _setNowTime: function () {\n var date = BI.getDate();\n var nowTome = {\n hour: date.getHours(),\n minute: date.getMinutes(),\n second: date.getSeconds()\n };\n this.setValue(nowTome);\n this.hidePopupView();\n this.fireEvent(BI.TimeCombo.EVENT_CONFIRM);\n }\n });\n\n BI.TimeCombo.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\n BI.TimeCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n BI.TimeCombo.EVENT_CHANGE = \"EVENT_CHANGE\";\n BI.TimeCombo.EVENT_VALID = \"EVENT_VALID\";\n BI.TimeCombo.EVENT_ERROR = \"EVENT_ERROR\";\n BI.TimeCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\n BI.shortcut(\"bi.time_combo\", BI.TimeCombo);\n})();","!(function () {\n BI.TimeTrigger = BI.inherit(BI.Trigger, {\n\n _const: {\n COMPARE_FORMAT: \"%H:%M:%S\",\n COMPLETE_COMPARE_FORMAT: \"%Y-%M-%d %H:%M:%S %P\",\n FORMAT_ARRAY: [\n \"%H:%M:%S\", // HH:mm:ss\n \"%I:%M:%S\", // hh:mm:ss\n \"%l:%M:%S\", // h:mm:ss\n \"%k:%M:%S\", // H:mm:ss\n \"%l:%M:%S %p\", // h:mm:ss a\n \"%l:%M:%S %P\", // h:mm:ss a\n \"%H:%M:%S %p\", // HH:mm:ss a\n \"%H:%M:%S %P\", // HH:mm:ss a\n \"%l:%M\", // h:mm\n \"%k:%M\", // H:mm\n \"%I:%M\", // hh:mm\n \"%H:%M\", // HH:mm\n \"%M:%S\" // mm:ss\n ],\n DEFAULT_DATE_STRING: \"2000-01-01\",\n DEFAULT_HOUR: \"00\"\n },\n\n props: {\n extraCls: \"bi-time-trigger\",\n value: {},\n format: \"\",\n allowEdit: false\n },\n\n render: function () {\n var self = this, o = this.options;\n this.storeTriggerValue = \"\";\n this.storeValue = o.value;\n return {\n type: \"bi.absolute\",\n items: [{\n el: {\n type: \"bi.sign_editor\",\n height: o.height,\n validationChecker: function (v) {\n return self._dateCheck(v);\n },\n quitChecker: function () {\n return false;\n },\n ref: function (_ref) {\n self.editor = _ref;\n },\n value: this._formatValue(o.value),\n hgap: 4,\n allowBlank: true,\n watermark: BI.isKey(o.watermark) ? o.watermark : BI.i18nText(\"BI-Basic_Unrestricted\"),\n title: BI.bind(this._getTitle, this),\n listeners: [{\n eventName: \"EVENT_KEY_DOWN\",\n action: function () {\n self.fireEvent(\"EVENT_KEY_DOWN\", arguments);\n }\n }, {\n eventName: \"EVENT_FOCUS\",\n action: function () {\n self.storeTriggerValue = self.getKey();\n self.fireEvent(\"EVENT_FOCUS\");\n }\n }, {\n eventName: \"EVENT_BLUR\",\n action: function () {\n self.fireEvent(\"EVENT_BLUR\");\n }\n }, {\n eventName: \"EVENT_STOP\",\n action: function () {\n self.fireEvent(\"EVENT_STOP\");\n }\n }, {\n eventName: \"EVENT_VALID\",\n action: function () {\n self.fireEvent(\"EVENT_VALID\");\n }\n }, {\n eventName: \"EVENT_ERROR\",\n action: function () {\n self.fireEvent(\"EVENT_ERROR\");\n }\n }, {\n eventName: \"EVENT_CONFIRM\",\n action: function () {\n var value = self.editor.getValue();\n if (BI.isNotNull(value)) {\n self.editor.setState(value);\n }\n if (BI.isNotEmptyString(value) && !BI.isEqual(self.storeTriggerValue, self.getKey())) {\n var date = value.match(/\\d+/g);\n self.storeValue = {\n hour: date[0] | 0,\n minute: date[1] | 0,\n second: date[2] | 0\n };\n }\n self.fireEvent(\"EVENT_CONFIRM\");\n }\n }, {\n eventName: \"EVENT_START\",\n action: function () {\n self.fireEvent(\"EVENT_START\");\n }\n }, {\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n },\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.text\",\n invisible: o.allowEdit,\n cls: \"show-text\",\n title: BI.bind(this._getTitle, this),\n hgap: 4\n },\n left: 0,\n right: 0,\n top: 0,\n bottom: 0\n }]\n };\n },\n\n _dateCheck: function (date) {\n var c = this._const;\n var self = this;\n return BI.any(c.FORMAT_ARRAY, function (idx, format) {\n return BI.print(BI.parseDateTime(c.DEFAULT_DATE_STRING + \" \" + self._getCompleteHMS(date, format), c.COMPLETE_COMPARE_FORMAT), format) === date;\n });\n },\n\n _getCompleteHMS: function (str, format) {\n var c = this._const;\n switch (format) {\n case \"%M:%S\":\n str = c.DEFAULT_HOUR + \":\" + str;\n break;\n default:\n break;\n }\n return str;\n },\n\n _getTitle: function () {\n var storeValue = this.storeValue || {};\n var date = BI.getDate();\n return BI.print(BI.getDate(date.getFullYear(), 0, 1, storeValue.hour, storeValue.minute, storeValue.second), this._getFormatString());\n },\n\n _getFormatString: function () {\n return this.options.format || this._const.COMPARE_FORMAT;\n },\n\n _formatValue: function (v) {\n var now = BI.getDate();\n return BI.isNotEmptyObject(v) ? BI.print(BI.getDate(now.getFullYear(), now.getMonth(), now.getDay(), v.hour, v.minute, v.second), this._getFormatString()) : \"\";\n },\n\n getKey: function () {\n return this.editor.getValue();\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.editor.setValue(this._formatValue(v));\n },\n\n getValue: function () {\n return this.storeValue;\n }\n\n });\n BI.shortcut(\"bi.time_trigger\", BI.TimeTrigger);\n})();","/**\n * Created by Baron on 2015/10/19.\n */\nBI.DateInterval = BI.inherit(BI.Single, {\n constants: {\n height: 24,\n width: 24,\n lgap: 15,\n offset: 0,\n timeErrorCls: \"time-error\"\n },\n _defaultConfig: function () {\n var conf = BI.DateInterval.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-date-interval\",\n minDate: \"1900-01-01\",\n maxDate: \"2099-12-31\"\n });\n },\n _init: function () {\n var self = this, o = this.options;\n BI.DateInterval.superclass._init.apply(this, arguments);\n\n o.value = o.value || {};\n this.left = this._createCombo(o.value.start);\n this.right = this._createCombo(o.value.end);\n this.label = BI.createWidget({\n type: \"bi.label\",\n height: this.constants.height,\n width: this.constants.width,\n text: \"-\"\n });\n BI.createWidget({\n element: self,\n type: \"bi.center\",\n height: this.constants.height,\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: self.left,\n left: this.constants.offset,\n right: this.constants.width / 2,\n top: 0,\n bottom: 0\n }]\n }, {\n type: \"bi.absolute\",\n items: [{\n el: self.right,\n left: this.constants.width / 2,\n right: this.constants.offset,\n top: 0,\n bottom: 0\n }]\n }]\n });\n BI.createWidget({\n type: \"bi.horizontal_auto\",\n element: this,\n items: [\n self.label\n ]\n });\n },\n\n _createCombo: function (v) {\n var self = this, o = this.options;\n var combo = BI.createWidget({\n type: \"bi.dynamic_date_combo\",\n behaviors: o.behaviors,\n value: v\n });\n combo.on(BI.DynamicDateCombo.EVENT_ERROR, function () {\n self._clearTitle();\n BI.Bubbles.hide(\"error\");\n self.element.removeClass(self.constants.timeErrorCls);\n self.fireEvent(BI.DateInterval.EVENT_ERROR);\n });\n\n combo.on(BI.DynamicDateCombo.EVENT_VALID, function () {\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n BI.Bubbles.show(\"error\", BI.i18nText(\"BI-Time_Interval_Error_Text\"), self, {\n offsetStyle: \"center\"\n });\n self.fireEvent(BI.DateInterval.EVENT_ERROR);\n } else {\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n }\n });\n\n combo.on(BI.DynamicDateCombo.EVENT_FOCUS, function () {\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n BI.Bubbles.show(\"error\", BI.i18nText(\"BI-Time_Interval_Error_Text\"), self, {\n offsetStyle: \"center\"\n });\n self.fireEvent(BI.DateInterval.EVENT_ERROR);\n } else {\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n }\n });\n\n // combo.on(BI.DynamicDateCombo.EVENT_BEFORE_POPUPVIEW, function () {\n // self.left.hidePopupView();\n // self.right.hidePopupView();\n // });\n\n combo.on(BI.DynamicDateCombo.EVENT_CONFIRM, function () {\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n self.fireEvent(BI.DateInterval.EVENT_ERROR);\n }else{\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n self.fireEvent(BI.DateInterval.EVENT_CHANGE);\n }\n });\n return combo;\n },\n _dateCheck: function (date) {\n return BI.print(BI.parseDateTime(date, \"%Y-%x-%d\"), \"%Y-%x-%d\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%d\"), \"%Y-%X-%d\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%x-%e\"), \"%Y-%x-%e\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%e\"), \"%Y-%X-%e\") === date;\n },\n _checkVoid: function (obj) {\n var o = this.options;\n return !BI.checkDateVoid(obj.year, obj.month, obj.day, o.minDate, o.maxDate)[0];\n },\n _check: function (smallDate, bigDate) {\n var smallObj = smallDate.match(/\\d+/g), bigObj = bigDate.match(/\\d+/g);\n return this._dateCheck(smallDate) && BI.checkDateLegal(smallDate) && this._checkVoid({\n year: smallObj[0],\n month: smallObj[1],\n day: smallObj[2]\n }) && this._dateCheck(bigDate) && BI.checkDateLegal(bigDate) && this._checkVoid({\n year: bigObj[0],\n month: bigObj[1],\n day: bigObj[2]\n });\n },\n _compare: function (smallDate, bigDate) {\n smallDate = BI.print(BI.parseDateTime(smallDate, \"%Y-%X-%d\"), \"%Y-%X-%d\");\n bigDate = BI.print(BI.parseDateTime(bigDate, \"%Y-%X-%d\"), \"%Y-%X-%d\");\n return BI.isNotNull(smallDate) && BI.isNotNull(bigDate) && smallDate > bigDate;\n },\n _setTitle: function (v) {\n this.left.setTitle(v);\n this.right.setTitle(v);\n this.label.setTitle(v);\n },\n _clearTitle: function () {\n this.left.setTitle(\"\");\n this.right.setTitle(\"\");\n this.label.setTitle(\"\");\n },\n setValue: function (date) {\n date = date || {};\n this.left.setValue(date.start);\n this.right.setValue(date.end);\n },\n getValue: function () {\n return {start: this.left.getValue(), end: this.right.getValue()};\n }\n});\nBI.DateInterval.EVENT_VALID = \"EVENT_VALID\";\nBI.DateInterval.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DateInterval.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.date_interval\", BI.DateInterval);","/**\n * Created by Baron on 2015/10/19.\n */\nBI.TimeInterval = BI.inherit(BI.Single, {\n constants: {\n height: 24,\n width: 24,\n lgap: 15,\n offset: 0,\n timeErrorCls: \"time-error\"\n },\n _defaultConfig: function () {\n var conf = BI.TimeInterval.superclass._defaultConfig.apply(this, arguments);\n return BI.extend(conf, {\n extraCls: \"bi-time-interval\",\n minDate: \"1900-01-01\",\n maxDate: \"2099-12-31\"\n });\n },\n _init: function () {\n var self = this, o = this.options;\n BI.TimeInterval.superclass._init.apply(this, arguments);\n\n o.value = o.value || {};\n this.left = this._createCombo(o.value.start);\n this.right = this._createCombo(o.value.end);\n this.label = BI.createWidget({\n type: \"bi.label\",\n height: this.constants.height,\n width: this.constants.width,\n text: \"-\"\n });\n BI.createWidget({\n element: self,\n type: \"bi.center\",\n height: this.constants.height,\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: self.left,\n left: this.constants.offset,\n right: this.constants.width / 2,\n top: 0,\n bottom: 0\n }]\n }, {\n type: \"bi.absolute\",\n items: [{\n el: self.right,\n left: this.constants.width / 2,\n right: this.constants.offset,\n top: 0,\n bottom: 0\n }]\n }]\n });\n BI.createWidget({\n type: \"bi.horizontal_auto\",\n element: this,\n items: [\n self.label\n ]\n });\n },\n\n _createCombo: function (v) {\n var self = this, o = this.options;\n var combo = BI.createWidget({\n type: \"bi.dynamic_date_time_combo\",\n behaviors: o.behaviors,\n value: v\n });\n combo.on(BI.DynamicDateTimeCombo.EVENT_ERROR, function () {\n self._clearTitle();\n BI.Bubbles.hide(\"error\");\n self.element.removeClass(self.constants.timeErrorCls);\n self.fireEvent(BI.TimeInterval.EVENT_ERROR);\n });\n\n combo.on(BI.DynamicDateTimeCombo.EVENT_VALID, function () {\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self.left.isValid() && self.right.isValid() && self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n BI.Bubbles.show(\"error\", BI.i18nText(\"BI-Time_Interval_Error_Text\"), self, {\n offsetStyle: \"center\"\n });\n self.fireEvent(BI.TimeInterval.EVENT_ERROR);\n } else {\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n }\n });\n\n combo.on(BI.DynamicDateTimeCombo.EVENT_FOCUS, function () {\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self.left.isValid() && self.right.isValid() && self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n BI.Bubbles.show(\"error\", BI.i18nText(\"BI-Time_Interval_Error_Text\"), self, {\n offsetStyle: \"center\"\n });\n self.fireEvent(BI.TimeInterval.EVENT_ERROR);\n } else {\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n }\n });\n\n // 不知道干啥的,先注释掉\n // combo.on(BI.DynamicDateTimeCombo.EVENT_BEFORE_POPUPVIEW, function () {\n // self.left.hidePopupView();\n // self.right.hidePopupView();\n // });\n\n combo.on(BI.DynamicDateTimeCombo.EVENT_CONFIRM, function () {\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self.left.isValid() && self.right.isValid() && self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n self.fireEvent(BI.TimeInterval.EVENT_ERROR);\n }else{\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n self.fireEvent(BI.TimeInterval.EVENT_CHANGE);\n }\n });\n return combo;\n },\n _dateCheck: function (date) {\n return BI.print(BI.parseDateTime(date, \"%Y-%x-%d %H:%M:%S\"), \"%Y-%x-%d %H:%M:%S\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%d %H:%M:%S\"), \"%Y-%X-%d %H:%M:%S\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%x-%e %H:%M:%S\"), \"%Y-%x-%e %H:%M:%S\") === date ||\n BI.print(BI.parseDateTime(date, \"%Y-%X-%e %H:%M:%S\"), \"%Y-%X-%e %H:%M:%S\") === date;\n },\n _checkVoid: function (obj) {\n var o = this.options;\n return !BI.checkDateVoid(obj.year, obj.month, obj.day, o.minDate, o.maxDate)[0];\n },\n _check: function (smallDate, bigDate) {\n var smallObj = smallDate.match(/\\d+/g), bigObj = bigDate.match(/\\d+/g);\n return this._dateCheck(smallDate) && BI.checkDateLegal(smallDate) && this._checkVoid({\n year: smallObj[0],\n month: smallObj[1],\n day: smallObj[2]\n }) && this._dateCheck(bigDate) && BI.checkDateLegal(bigDate) && this._checkVoid({\n year: bigObj[0],\n month: bigObj[1],\n day: bigObj[2]\n });\n },\n _compare: function (smallDate, bigDate) {\n smallDate = BI.print(BI.parseDateTime(smallDate, \"%Y-%X-%d %H:%M:%S\"), \"%Y-%X-%d %H:%M:%S\");\n bigDate = BI.print(BI.parseDateTime(bigDate, \"%Y-%X-%d %H:%M:%S\"), \"%Y-%X-%d %H:%M:%S\");\n return BI.isNotNull(smallDate) && BI.isNotNull(bigDate) && smallDate > bigDate;\n },\n _setTitle: function (v) {\n this.left.setTitle(v);\n this.right.setTitle(v);\n this.label.setTitle(v);\n },\n _clearTitle: function () {\n this.left.setTitle(\"\");\n this.right.setTitle(\"\");\n this.label.setTitle(\"\");\n },\n setValue: function (date) {\n date = date || {};\n this.left.setValue(date.start);\n this.right.setValue(date.end);\n },\n getValue: function () {\n return {start: this.left.getValue(), end: this.right.getValue()};\n }\n});\nBI.TimeInterval.EVENT_VALID = \"EVENT_VALID\";\nBI.TimeInterval.EVENT_ERROR = \"EVENT_ERROR\";\nBI.TimeInterval.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.time_interval\", BI.TimeInterval);","/**\n * 时间区间\n * qcc\n * 2019/2/28\n */\n\n!(function () {\n BI.TimePeriods = BI.inherit(BI.Single, {\n constants: {\n height: 24,\n width: 24,\n lgap: 15,\n offset: 0\n },\n props: {\n extraCls: \"bi-time-interval\",\n value: {}\n },\n render: function () {\n var self = this, o = this.options;\n\n return {\n type: \"bi.absolute\",\n height: this.constants.height,\n items: [{\n el: {\n type: \"bi.horizontal_auto\",\n items: [{\n type: \"bi.label\",\n height: this.constants.height,\n width: this.constants.width,\n text: \"-\",\n ref: function (_ref) {\n self.label = _ref;\n }\n }]\n },\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }, {\n el: {\n type: \"bi.center\",\n height: this.constants.height,\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: BI.extend({\n ref: function (_ref) {\n self.left = _ref;\n }\n }, this._createCombo(o.value.start)),\n left: this.constants.offset,\n right: this.constants.width / 2,\n top: 0,\n bottom: 0\n }]\n }, {\n type: \"bi.absolute\",\n items: [{\n el: BI.extend({\n ref: function (_ref) {\n self.right = _ref;\n }\n }, this._createCombo(o.value.end)),\n left: this.constants.width / 2,\n right: this.constants.offset,\n top: 0,\n bottom: 0\n }]\n }]\n },\n top: 0,\n left: 0,\n right: 0,\n bottom: 0\n }]\n };\n },\n\n _createCombo: function (v) {\n var self = this;\n return {\n type: \"bi.time_combo\",\n value: v,\n listeners: [{\n eventName: BI.TimeCombo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.left.hidePopupView();\n self.right.hidePopupView();\n }\n }, {\n eventName: BI.TimeCombo.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.TimePeriods.EVENT_CHANGE);\n }\n }, {\n eventName: BI.TimeCombo.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.TimePeriods.EVENT_CONFIRM);\n }\n }]\n };\n },\n\n setValue: function (date) {\n date = date || {};\n this.left.setValue(date.start);\n this.right.setValue(date.end);\n },\n getValue: function () {\n return {start: this.left.getValue(), end: this.right.getValue()};\n }\n });\n BI.TimePeriods.EVENT_CONFIRM = \"EVENT_CONFIRM\";\n BI.TimePeriods.EVENT_CHANGE = \"EVENT_CHANGE\";\n BI.shortcut(\"bi.time_periods\", BI.TimePeriods);\n})();","/**\n * 年份展示面板\n *\n * Created by GUY on 2015/9/2.\n * @class BI.YearCard\n * @extends BI.Trigger\n */\nBI.DynamicYearCard = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-year-card\"\n },\n\n render: function () {\n var self = this;\n return {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.label\",\n text: BI.i18nText(\"BI-Multi_Date_Relative_Current_Time\"),\n textAlign: \"left\",\n height: 24\n }, {\n type: \"bi.dynamic_date_param_item\",\n ref: function () {\n self.item = this;\n },\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n }],\n vgap: 10,\n hgap: 10\n };\n },\n\n _createValue: function (type, v) {\n return {\n dateType: type,\n value: Math.abs(v),\n offset: v > 0 ? 1 : 0\n };\n },\n\n setValue: function (v) {\n v = v || {year: 0};\n this.item.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR, v.year));\n },\n\n getValue: function () {\n var value = this.item.getValue();\n return {\n year: (value.offset === 0 ? -value.value : value.value)\n };\n }\n});\nBI.DynamicYearCard.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_year_card\", BI.DynamicYearCard);","/**\n * 年份展示面板\n *\n * Created by GUY on 2015/9/2.\n * @class BI.StaticYearCard\n * @extends BI.Trigger\n */\nBI.StaticYearCard = BI.inherit(BI.Widget, {\n\n _defaultConfig: function () {\n return BI.extend(BI.StaticYearCard.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-year-card\",\n behaviors: {},\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\" // 最大日期\n });\n },\n\n _createYearCalendar: function (v) {\n var o = this.options, y = this._year;\n\n var calendar = BI.createWidget({\n type: \"bi.year_calendar\",\n behaviors: o.behaviors,\n min: o.min,\n max: o.max,\n logic: {\n dynamic: true\n },\n year: y + v * 12\n });\n calendar.setValue(this._year);\n return calendar;\n },\n\n _init: function () {\n BI.StaticYearCard.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n\n this.selectedYear = this._year = BI.getDate().getFullYear();\n\n this.backBtn = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"pre-page-h-font\",\n width: 25,\n height: 25,\n value: -1,\n listeners: [{\n eventName: BI.IconButton.EVENT_CHANGE,\n action: function () {\n self.navigation.setSelect(self.navigation.getSelect() - 1);\n self._checkLeftValid();\n self._checkRightValid();\n }\n }]\n });\n\n this.preBtn = BI.createWidget({\n type: \"bi.icon_button\",\n cls: \"next-page-h-font\",\n width: 25,\n height: 25,\n value: 1,\n listeners: [{\n eventName: BI.IconButton.EVENT_CHANGE,\n action: function () {\n self.navigation.setSelect(self.navigation.getSelect() + 1);\n self._checkLeftValid();\n self._checkRightValid();\n }\n }]\n });\n\n this.navigation = BI.createWidget({\n type: \"bi.navigation\",\n direction: \"top\",\n element: this,\n single: true,\n logic: {\n dynamic: true\n },\n tab: {\n type: \"bi.htape\",\n cls: \"bi-split-top bi-split-bottom\",\n height: 30,\n items: [{\n el: {\n type: \"bi.center_adapt\",\n items: [self.backBtn]\n },\n width: 25\n }, {\n type: \"bi.layout\"\n }, {\n el: {\n type: \"bi.center_adapt\",\n items: [self.preBtn]\n },\n width: 25\n }]\n },\n cardCreator: BI.bind(this._createYearCalendar, this),\n\n afterCardShow: function () {\n this.setValue(self.selectedYear);\n var calendar = this.getSelectedCard();\n self.backBtn.setEnable(!calendar.isFrontYear());\n self.preBtn.setEnable(!calendar.isFinalYear());\n }\n });\n\n this.navigation.on(BI.Navigation.EVENT_CHANGE, function () {\n self.selectedYear = this.getValue();\n self.fireEvent(BI.Controller.EVENT_CHANGE, arguments);\n self.fireEvent(BI.StaticYearCard.EVENT_CHANGE, self.selectedYear);\n });\n\n if(BI.isKey(o.value)){\n this.setValue(o.value);\n }\n },\n\n _checkLeftValid: function () {\n var o = this.options;\n var valid = true;\n this.backBtn.setEnable(valid);\n return valid;\n },\n\n _checkRightValid: function () {\n var o = this.options;\n var valid = true;\n this.preBtn.setEnable(valid);\n return valid;\n },\n\n getValue: function () {\n return {\n year: this.selectedYear\n };\n },\n\n setValue: function (obj) {\n var o = this.options;\n obj = obj || {};\n var v = obj.year;\n if (BI.checkDateVoid(v, 1, 1, o.min, o.max)[0]) {\n v = BI.getDate().getFullYear();\n this.selectedYear = \"\";\n this.navigation.setSelect(BI.YearCalendar.getPageByYear(v));\n this.navigation.setValue(\"\");\n } else {\n this.selectedYear = BI.parseInt(v);\n this.navigation.setSelect(BI.YearCalendar.getPageByYear(v));\n this.navigation.setValue(this.selectedYear);\n }\n this._checkLeftValid();\n this._checkRightValid();\n }\n});\nBI.StaticYearCard.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.static_year_card\", BI.StaticYearCard);","BI.DynamicYearCombo = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-year-combo bi-border bi-focus-shadow\",\n behaviors: {},\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 22\n },\n\n _init: function () {\n BI.DynamicYearCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.storeValue = o.value;\n this.trigger = BI.createWidget({\n type: \"bi.dynamic_year_trigger\",\n min: o.min,\n max: o.max,\n height: o.height,\n value: o.value || \"\"\n });\n this.trigger.on(BI.DynamicYearTrigger.EVENT_KEY_DOWN, function () {\n if (self.combo.isViewVisible()) {\n self.combo.hideView();\n }\n });\n this.trigger.on(BI.DynamicYearTrigger.EVENT_FOCUS, function () {\n self.storeTriggerValue = this.getKey();\n });\n this.trigger.on(BI.DynamicYearTrigger.EVENT_START, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n });\n this.trigger.on(BI.DynamicYearTrigger.EVENT_STOP, function () {\n self.combo.showView();\n });\n this.trigger.on(BI.DynamicYearTrigger.EVENT_ERROR, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n });\n this.trigger.on(BI.DynamicYearTrigger.EVENT_CONFIRM, function () {\n if (self.combo.isViewVisible()) {\n return;\n }\n if (this.getKey() && this.getKey() !== self.storeTriggerValue) {\n self.storeValue = self.trigger.getValue();\n self.setValue(self.storeValue);\n } else if (!this.getKey()) {\n self.storeValue = null;\n self.setValue();\n }\n self._checkDynamicValue(self.storeValue);\n self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM);\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: this.trigger,\n popup: {\n minWidth: 85,\n stopPropagation: false,\n el: {\n type: \"bi.dynamic_year_popup\",\n ref: function () {\n self.popup = this;\n },\n listeners: [{\n eventName: BI.DynamicYearPopup.EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE,\n action: function () {\n self.setValue();\n self.combo.hideView();\n self.fireEvent(BI.DynamicYearCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE,\n action: function () {\n var date = BI.getDate();\n self.setValue({type: BI.DynamicYearCombo.Static, value: {year: date.getFullYear()}});\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }],\n behaviors: o.behaviors,\n min: o.min,\n max: o.max\n },\n value: o.value || \"\"\n }\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.popup.setValue(self.storeValue);\n self.fireEvent(BI.DynamicYearCombo.EVENT_BEFORE_POPUPVIEW);\n });\n\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n ref: function () {\n self.comboWrapper = this;\n },\n items: [{\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-change-h-font\",\n width: 24,\n height: 24,\n ref: function () {\n self.changeIcon = this;\n }\n },\n width: 24\n }, this.combo]\n });\n this._checkDynamicValue(o.value);\n },\n\n _checkDynamicValue: function (v) {\n var type = null;\n if (BI.isNotNull(v)) {\n type = v.type;\n }\n switch (type) {\n case BI.DynamicYearCombo.Dynamic:\n this.changeIcon.setVisible(true);\n this.comboWrapper.attr(\"items\")[0].width = 24;\n this.comboWrapper.resize();\n break;\n default:\n this.comboWrapper.attr(\"items\")[0].width = 0;\n this.comboWrapper.resize();\n this.changeIcon.setVisible(false);\n break;\n }\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.trigger.setValue(v);\n this._checkDynamicValue(v);\n },\n\n getValue: function () {\n return this.storeValue;\n }\n\n});\nBI.DynamicYearCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicYearCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.dynamic_year_combo\", BI.DynamicYearCombo);\n\nBI.extend(BI.DynamicYearCombo, {\n Static: 1,\n Dynamic: 2\n});","/**\n * 年份展示面板\n *\n * Created by GUY on 2015/9/2.\n * @class BI.DynamicYearPopup\n * @extends BI.Trigger\n */\nBI.DynamicYearPopup = BI.inherit(BI.Widget, {\n constants: {\n tabHeight: 30,\n buttonHeight: 24\n },\n\n props: {\n baseCls: \"bi-year-popup\",\n behaviors: {},\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期,\n width: 180,\n height: 240\n },\n\n render: function () {\n var self = this, opts = this.options, c = this.constants;\n this.storeValue = {type: BI.DynamicYearCombo.Static};\n return {\n type: \"bi.vtape\",\n items: [{\n el: this._getTabJson()\n }, {\n el: {\n type: \"bi.grid\",\n items: [[{\n type: \"bi.text_button\",\n cls: \"bi-split-top bi-high-light\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Clear\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n textHeight: c.buttonHeight - 1,\n cls: \"bi-split-left bi-split-right bi-high-light bi-split-top\",\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Current_Year\"),\n ref: function () {\n self.textButton = this;\n },\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-top bi-high-light\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_OK\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE);\n }\n }]\n }]]\n },\n height: 24\n }]\n };\n },\n\n _setInnerValue: function () {\n if (this.dateTab.getSelect() === BI.DynamicDateCombo.Static) {\n this.textButton.setValue(BI.i18nText(\"BI-Basic_Current_Year\"));\n this.textButton.setEnable(true);\n } else {\n var date = BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());\n date = BI.print(date, \"%Y\");\n this.textButton.setValue(date);\n this.textButton.setEnable(false);\n }\n },\n\n _getTabJson: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.tab\",\n ref: function () {\n self.dateTab = this;\n },\n tab: {\n type: \"bi.linear_segment\",\n cls: \"bi-split-bottom\",\n height: this.constants.tabHeight,\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Basic_Year_Fen\"),\n value: BI.DynamicYearCombo.Static\n }, {\n text: BI.i18nText(\"BI-Basic_Dynamic_Title\"),\n value: BI.DynamicYearCombo.Dynamic\n }], {\n textAlign: \"center\"\n })\n },\n cardCreator: function (v) {\n switch (v) {\n case BI.DynamicYearCombo.Dynamic:\n return {\n type: \"bi.dynamic_year_card\",\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self._setInnerValue(self.year, v);\n }\n }],\n ref: function () {\n self.dynamicPane = this;\n }\n };\n case BI.DynamicYearCombo.Static:\n default:\n return {\n type: \"bi.static_year_card\",\n behaviors: o.behaviors,\n min: self.options.min,\n max: self.options.max,\n listeners: [{\n eventName: BI.StaticYearCard.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearPopup.EVENT_CHANGE);\n }\n }],\n ref: function () {\n self.year = this;\n }\n };\n }\n },\n listeners: [{\n eventName: BI.Tab.EVENT_CHANGE,\n action: function () {\n var v = self.dateTab.getSelect();\n switch (v) {\n case BI.DynamicYearCombo.Static:\n var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());\n self.year.setValue({year: date.getFullYear()});\n self._setInnerValue();\n break;\n case BI.DynamicYearCombo.Dynamic:\n default:\n if(self.storeValue && self.storeValue.type === BI.DynamicYearCombo.Dynamic) {\n self.dynamicPane.setValue(self.storeValue.value);\n }else{\n self.dynamicPane.setValue({\n year: 0\n });\n }\n self._setInnerValue();\n break;\n }\n }\n }]\n };\n },\n\n setValue: function (v) {\n this.storeValue = v;\n var self = this;\n var type, value;\n v = v || {};\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n this.dateTab.setSelect(type);\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n this.dynamicPane.setValue(value);\n self._setInnerValue();\n break;\n case BI.DynamicDateCombo.Static:\n default:\n this.year.setValue(value);\n this.textButton.setValue(BI.i18nText(\"BI-Basic_Current_Year\"));\n this.textButton.setEnable(true);\n break;\n }\n },\n\n getValue: function () {\n return {\n type: this.dateTab.getSelect(),\n value: this.dateTab.getValue()\n };\n }\n\n});\nBI.DynamicYearPopup.BUTTON_CLEAR_EVENT_CHANGE = \"BUTTON_CLEAR_EVENT_CHANGE\";\nBI.DynamicYearPopup.BUTTON_lABEL_EVENT_CHANGE = \"BUTTON_lABEL_EVENT_CHANGE\";\nBI.DynamicYearPopup.BUTTON_OK_EVENT_CHANGE = \"BUTTON_OK_EVENT_CHANGE\";\nBI.DynamicYearPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_year_popup\", BI.DynamicYearPopup);","BI.DynamicYearTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4,\n vgap: 2\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.DynamicYearTrigger.superclass._defaultConfig.apply(this, arguments), {\n extraCls: \"bi-year-trigger\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 24\n });\n },\n\n beforeInit: function (callback) {\n var o = this.options;\n o.title = BI.bind(this._titleCreator, this);\n callback();\n },\n\n _init: function () {\n BI.DynamicYearTrigger.superclass._init.apply(this, arguments);\n var self = this, o = this.options, c = this._const;\n this.editor = BI.createWidget({\n type: \"bi.sign_editor\",\n height: o.height,\n validationChecker: function (v) {\n return v === \"\" || (BI.isPositiveInteger(v) && !BI.checkDateVoid(v, 1, 1, o.min, o.max)[0]);\n },\n quitChecker: function (v) {\n return false;\n },\n hgap: c.hgap,\n vgap: c.vgap,\n watermark: BI.i18nText(\"BI-Basic_Unrestricted\"),\n allowBlank: true,\n errorText: function () {\n return BI.i18nText(\"BI-Year_Trigger_Invalid_Text\");\n }\n });\n this.editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () {\n self.fireEvent(BI.DynamicYearTrigger.EVENT_KEY_DOWN, arguments);\n });\n this.editor.on(BI.SignEditor.EVENT_FOCUS, function () {\n self.fireEvent(BI.DynamicYearTrigger.EVENT_FOCUS);\n });\n this.editor.on(BI.SignEditor.EVENT_STOP, function () {\n self.fireEvent(BI.DynamicYearTrigger.EVENT_STOP);\n });\n this.editor.on(BI.SignEditor.EVENT_CONFIRM, function () {\n var value = self.editor.getValue();\n if (BI.isNotNull(value)) {\n self.editor.setValue(value);\n }\n if (BI.isNotEmptyString(value)) {\n self.storeValue = {\n type: BI.DynamicDateCombo.Static,\n value: {\n year: value\n }\n };\n }\n\n self.fireEvent(BI.DynamicYearTrigger.EVENT_CONFIRM);\n });\n this.editor.on(BI.SignEditor.EVENT_SPACE, function () {\n if (self.editor.isValid()) {\n self.editor.blur();\n }\n });\n this.editor.on(BI.SignEditor.EVENT_START, function () {\n self.fireEvent(BI.DynamicYearTrigger.EVENT_START);\n });\n this.editor.on(BI.SignEditor.EVENT_ERROR, function () {\n self.fireEvent(BI.DynamicYearTrigger.EVENT_ERROR);\n });\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [{\n el: this.editor\n }, {\n el: {\n type: \"bi.text_button\",\n baseCls: \"bi-trigger-year-text\",\n text: BI.i18nText(\"BI-Multi_Date_Year\"),\n width: o.height\n },\n width: o.height\n }, {\n el: {\n type: \"bi.trigger_icon_button\",\n width: o.height\n },\n width: o.height\n }]\n });\n this.setValue(o.value);\n },\n\n _getText: function (obj) {\n var value = \"\";\n if(BI.isNotNull(obj.year) && BI.parseInt(obj.year) !== 0) {\n value += Math.abs(obj.year) + BI.i18nText(\"BI-Basic_Year\") + (obj.year < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n return value;\n },\n\n _setInnerValue: function (date, text) {\n var dateStr = BI.print(date, \"%Y\");\n this.editor.setState(dateStr);\n this.editor.setValue(dateStr);\n },\n\n _titleCreator: function () {\n var storeValue = this.storeValue || {};\n var type = storeValue.type || BI.DynamicDateCombo.Static;\n var value = storeValue.value;\n if(!this.editor.isValid()) {\n return \"\";\n }\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n var date = BI.getDate();\n date = BI.DynamicDateHelper.getCalculation(value);\n var dateStr = BI.print(date, \"%Y\");\n return BI.isEmptyString(text) ? dateStr : (text + \":\" + dateStr);\n case BI.DynamicDateCombo.Static:\n default:\n value = value || {};\n return value.year;\n }\n },\n\n setValue: function (v) {\n var type, value;\n var date = BI.getDate();\n this.storeValue = v;\n if (BI.isNotNull(v)) {\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n }\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n date = BI.DynamicDateHelper.getCalculation(value);\n this._setInnerValue(date, text);\n break;\n case BI.DynamicDateCombo.Static:\n default:\n value = value || {};\n this.editor.setState(value.year);\n this.editor.setValue(value.year);\n break;\n }\n },\n\n getValue: function () {\n return this.storeValue;\n },\n\n getKey: function () {\n return this.editor.getValue() | 0;\n }\n});\nBI.DynamicYearTrigger.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.DynamicYearTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicYearTrigger.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicYearTrigger.EVENT_START = \"EVENT_START\";\nBI.DynamicYearTrigger.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicYearTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.shortcut(\"bi.dynamic_year_trigger\", BI.DynamicYearTrigger);","/**\n * 年月展示面板\n *\n * Created by GUY on 2015/9/2.\n * @class BI.YearCard\n * @extends BI.Trigger\n */\nBI.DynamicYearMonthCard = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-year-month-card\"\n },\n\n render: function () {\n var self = this;\n return {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.label\",\n text: BI.i18nText(\"BI-Multi_Date_Relative_Current_Time\"),\n textAlign: \"left\",\n height: 24\n }, {\n type: \"bi.dynamic_date_param_item\",\n ref: function () {\n self.year = this;\n },\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n }, {\n type: \"bi.dynamic_date_param_item\",\n dateType: BI.DynamicDateCard.TYPE.MONTH,\n ref: function () {\n self.month = this;\n },\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n }],\n vgap: 10,\n hgap: 10\n };\n },\n\n _createValue: function (type, v) {\n return {\n dateType: type,\n value: Math.abs(v),\n offset: v > 0 ? 1 : 0\n };\n },\n\n setValue: function (v) {\n v = v || {year: 0, month: 0};\n this.year.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR, v.year));\n this.month.setValue(this._createValue(BI.DynamicDateCard.TYPE.MONTH, v.month));\n },\n\n getValue: function () {\n var year = this.year.getValue();\n var month = this.month.getValue();\n return {\n year: (year.offset === 0 ? -year.value : year.value),\n month: (month.offset === 0 ? -month.value : month.value)\n };\n }\n});\nBI.DynamicYearMonthCard.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_year_month_card\", BI.DynamicYearMonthCard);","BI.StaticYearMonthCard = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-static-year-month-card\",\n behaviors: {}\n },\n\n _createMonths: function () {\n var self = this;\n // 纵向排列月\n var month = [1, 7, 2, 8, 3, 9, 4, 10, 5, 11, 6, 12];\n var items = [];\n items.push(month.slice(0, 2));\n items.push(month.slice(2, 4));\n items.push(month.slice(4, 6));\n items.push(month.slice(6, 8));\n items.push(month.slice(8, 10));\n items.push(month.slice(10, 12));\n return BI.map(items, function (i, item) {\n return BI.map(item, function (j, td) {\n return {\n type: \"bi.text_item\",\n cls: \"bi-list-item-select\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n once: false,\n forceSelected: true,\n height: 23,\n width: 38,\n value: td,\n text: td,\n ref: function (_ref) {\n self.monthMap[j === 0 ? i : i + 6] = _ref;\n }\n };\n });\n });\n },\n\n render: function () {\n var self = this, o = this.options;\n this.monthMap = {};\n return {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.year_picker\",\n min: o.min,\n max: o.max,\n ref: function () {\n self.yearPicker = this;\n },\n behaviors: o.behaviors,\n height: 30,\n listeners: [{\n eventName: BI.YearPicker.EVENT_CHANGE,\n action: function () {\n var value = this.getValue();\n self._checkMonthStatus(value);\n self.setValue({\n year: value,\n month: self.selectedMonth\n });\n }\n }]\n }, {\n type: \"bi.button_group\",\n cls: \"bi-split-top\",\n behaviors: o.behaviors,\n ref: function () {\n self.month = this;\n },\n items: this._createMonths(),\n layouts: [BI.LogicFactory.createLogic(\"table\", BI.extend({\n dynamic: true\n }, {\n columns: 2,\n rows: 6,\n columnSize: [1 / 2, 1 / 2],\n rowSize: 25\n })), {\n type: \"bi.center_adapt\",\n vgap: 1,\n hgap: 2\n }],\n value: o.value,\n listeners: [{\n eventName: BI.ButtonGroup.EVENT_CHANGE,\n action: function () {\n self.selectedYear = self.yearPicker.getValue();\n self.selectedMonth = this.getValue()[0];\n self.fireEvent(BI.StaticYearMonthCard.EVENT_CHANGE);\n }\n }]\n }]\n };\n },\n\n mounted: function() {\n this._checkMonthStatus(this.selectedYear);\n },\n\n _checkMonthStatus: function (year) {\n var o = this.options;\n var minDate = BI.parseDateTime(o.min, \"%Y-%X-%d\"), maxDate = BI.parseDateTime(o.max, \"%Y-%X-%d\");\n var minYear = minDate.getFullYear(), maxYear = maxDate.getFullYear();\n var minMonth = 0; var maxMonth = 11;\n minYear === year && (minMonth = minDate.getMonth());\n maxYear === year && (maxMonth = maxDate.getMonth());\n var yearInvalid = year < minYear || year > maxYear;\n BI.each(this.monthMap, function (month, obj) {\n var monthInvalid = month < minMonth || month > maxMonth;\n obj.setEnable(!yearInvalid && !monthInvalid);\n });\n },\n\n setMinDate: function (minDate) {\n if (this.options.min !== minDate) {\n this.options.min = minDate;\n this.yearPicker.setMinDate(minDate);\n this._checkMonthStatus(this.selectedYear);\n }\n },\n\n setMaxDate: function (maxDate) {\n if (this.options.max !== maxDate) {\n this.options.max = maxDate;\n this.yearPicker.setMaxDate(maxDate);\n this._checkMonthStatus(this.selectedYear);\n }\n },\n\n getValue: function () {\n return {\n year: this.selectedYear,\n month: this.selectedMonth\n };\n },\n\n setValue: function (obj) {\n var o = this.options;\n var newObj = {};\n newObj.year = obj.year || 0;\n newObj.month = obj.month || 0;\n if (newObj.year === 0 || newObj.month === 0 || BI.checkDateVoid(newObj.year, newObj.month, 1, o.min, o.max)[0]) {\n var year = newObj.year || BI.getDate().getFullYear();\n this.selectedYear = year;\n this.selectedMonth = \"\";\n this.yearPicker.setValue(year);\n this.month.setValue();\n } else {\n this.selectedYear = BI.parseInt(newObj.year);\n this.selectedMonth = BI.parseInt(newObj.month);\n this.yearPicker.setValue(this.selectedYear);\n this.month.setValue(this.selectedMonth);\n }\n }\n});\nBI.StaticYearMonthCard.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.static_year_month_card\", BI.StaticYearMonthCard);\n","BI.DynamicYearMonthCombo = BI.inherit(BI.Single, {\n\n props: {\n baseCls: \"bi-year-month-combo bi-border bi-focus-shadow\",\n behaviors: {},\n minDate: \"1900-01-01\", // 最小日期\n maxDate: \"2099-12-31\", // 最大日期\n height: 22\n },\n\n _init: function () {\n BI.DynamicYearMonthCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.storeValue = o.value;\n this.storeTriggerValue = \"\";\n this.trigger = BI.createWidget({\n type: \"bi.dynamic_year_month_trigger\",\n min: o.minDate,\n max: o.maxDate,\n height: o.height,\n value: o.value || \"\"\n });\n this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n });\n this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_START, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n });\n this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_STOP, function () {\n self.combo.showView();\n });\n this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_ERROR, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n self.fireEvent(BI.DynamicYearMonthCombo.EVENT_ERROR);\n });\n this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_VALID, function () {\n self.fireEvent(BI.DynamicYearMonthCombo.EVENT_VALID);\n });\n this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_CONFIRM, function () {\n // 没看出来干啥的,先去掉\n // if (self.combo.isViewVisible()) {\n // return;\n // }\n var dateStore = self.storeTriggerValue;\n var dateObj = self.trigger.getKey();\n if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) {\n self.storeValue = self.trigger.getValue();\n self.setValue(self.trigger.getValue());\n }\n self._checkDynamicValue(self.storeValue);\n self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM);\n });\n this.trigger.on(BI.DynamicYearMonthTrigger.EVENT_FOCUS, function () {\n self.storeTriggerValue = self.trigger.getKey();\n self.fireEvent(BI.DynamicYearMonthCombo.EVENT_FOCUS);\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: this.trigger,\n popup: {\n minWidth: 100,\n stopPropagation: false,\n el: {\n type: \"bi.dynamic_year_month_popup\",\n ref: function () {\n self.popup = this;\n },\n listeners: [{\n eventName: BI.DynamicYearMonthPopup.EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE,\n action: function () {\n self.setValue();\n self.combo.hideView();\n self.fireEvent(BI.DynamicYearMonthCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE,\n action: function () {\n var date = BI.getDate();\n self.setValue({type: BI.DynamicYearMonthCombo.Static, value: {year: date.getFullYear(), month: date.getMonth() + 1}});\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }],\n behaviors: o.behaviors,\n min: o.minDate,\n max: o.maxDate\n },\n value: o.value || \"\"\n }\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.popup.setValue(self.storeValue);\n self.fireEvent(BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW);\n });\n\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n ref: function () {\n self.comboWrapper = this;\n },\n items: [{\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-change-h-font\",\n width: 24,\n height: 24,\n ref: function () {\n self.changeIcon = this;\n }\n },\n width: 24\n }, this.combo]\n });\n this._checkDynamicValue(o.value);\n },\n\n _checkDynamicValue: function (v) {\n var type = null;\n if (BI.isNotNull(v)) {\n type = v.type;\n }\n switch (type) {\n case BI.DynamicYearMonthCombo.Dynamic:\n this.changeIcon.setVisible(true);\n this.comboWrapper.attr(\"items\")[0].width = 24;\n this.comboWrapper.resize();\n break;\n default:\n this.comboWrapper.attr(\"items\")[0].width = 0;\n this.comboWrapper.resize();\n this.changeIcon.setVisible(false);\n break;\n }\n },\n\n hideView: function () {\n this.combo.hideView();\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.trigger.setValue(v);\n this._checkDynamicValue(v);\n },\n\n getValue: function () {\n return this.storeValue;\n },\n\n getKey: function () {\n return this.trigger.getKey();\n },\n\n isValid: function () {\n return this.trigger.isValid();\n }\n\n});\nBI.DynamicYearMonthCombo.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicYearMonthCombo.EVENT_VALID = \"EVENT_VALID\";\nBI.DynamicYearMonthCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicYearMonthCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.dynamic_year_month_combo\", BI.DynamicYearMonthCombo);\n\nBI.extend(BI.DynamicYearMonthCombo, {\n Static: 1,\n Dynamic: 2\n});","/**\n * 年月\n *\n * Created by GUY on 2015/9/2.\n * @class BI.DynamicYearMonthPopup\n * @extends BI.Trigger\n */\nBI.DynamicYearMonthPopup = BI.inherit(BI.Widget, {\n constants: {\n tabHeight: 30,\n buttonHeight: 24\n },\n\n props: {\n baseCls: \"bi-year-month-popup\",\n behaviors: {},\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期,\n width: 180,\n height: 240\n },\n\n render: function () {\n var self = this, opts = this.options, c = this.constants;\n this.storeValue = {type: BI.DynamicYearMonthCombo.Static};\n return {\n type: \"bi.vtape\",\n items: [{\n el: this._getTabJson()\n }, {\n el: {\n type: \"bi.grid\",\n items: [[{\n type: \"bi.text_button\",\n cls: \"bi-split-top bi-high-light\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Clear\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-left bi-split-right bi-high-light bi-split-top\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Current_Month\"),\n ref: function () {\n self.textButton = this;\n },\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-top bi-high-light\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_OK\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE);\n }\n }]\n }]]\n },\n height: 24\n }]\n };\n },\n\n _setInnerValue: function () {\n if (this.dateTab.getSelect() === BI.DynamicDateCombo.Static) {\n this.textButton.setValue(BI.i18nText(\"BI-Basic_Current_Month\"));\n this.textButton.setEnable(true);\n } else {\n var date = BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());\n date = BI.print(date, \"%Y-%x\");\n this.textButton.setValue(date);\n this.textButton.setEnable(false);\n }\n },\n\n _getTabJson: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.tab\",\n ref: function () {\n self.dateTab = this;\n },\n tab: {\n type: \"bi.linear_segment\",\n cls: \"bi-split-bottom\",\n height: this.constants.tabHeight,\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Basic_Year_Month\"),\n value: BI.DynamicYearCombo.Static\n }, {\n text: BI.i18nText(\"BI-Basic_Dynamic_Title\"),\n value: BI.DynamicYearCombo.Dynamic\n }], {\n textAlign: \"center\"\n })\n },\n cardCreator: function (v) {\n switch (v) {\n case BI.DynamicYearCombo.Dynamic:\n return {\n type: \"bi.dynamic_year_month_card\",\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self._setInnerValue(self.year, v);\n }\n }],\n ref: function () {\n self.dynamicPane = this;\n }\n };\n case BI.DynamicYearCombo.Static:\n default:\n return {\n type: \"bi.static_year_month_card\",\n behaviors: o.behaviors,\n min: self.options.min,\n max: self.options.max,\n listeners: [{\n eventName: BI.StaticYearMonthCard.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearMonthPopup.EVENT_CHANGE);\n }\n }],\n ref: function () {\n self.year = this;\n }\n };\n }\n },\n listeners: [{\n eventName: BI.Tab.EVENT_CHANGE,\n action: function () {\n var v = self.dateTab.getSelect();\n switch (v) {\n case BI.DynamicYearCombo.Static:\n var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());\n self.year.setValue({year: date.getFullYear(), month: date.getMonth() + 1});\n self._setInnerValue();\n break;\n case BI.DynamicYearCombo.Dynamic:\n default:\n if(self.storeValue && self.storeValue.type === BI.DynamicYearCombo.Dynamic) {\n self.dynamicPane.setValue(self.storeValue.value);\n }else{\n self.dynamicPane.setValue({\n year: 0\n });\n }\n self._setInnerValue();\n break;\n }\n }\n }]\n };\n },\n\n setMinDate: function (minDate) {\n if (this.options.min !== minDate) {\n this.options.min = minDate;\n this.year.setMinDate(minDate);\n }\n },\n\n setMaxDate: function (maxDate) {\n if (this.options.max !== maxDate) {\n this.options.max = maxDate;\n this.year.setMaxDate(maxDate);\n }\n },\n\n setValue: function (v) {\n this.storeValue = v;\n var self = this;\n var type, value;\n v = v || {};\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n this.dateTab.setSelect(type);\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n this.dynamicPane.setValue(value);\n self._setInnerValue();\n break;\n case BI.DynamicDateCombo.Static:\n default:\n this.year.setValue(value);\n this.textButton.setValue(BI.i18nText(\"BI-Basic_Current_Month\"));\n this.textButton.setEnable(true);\n break;\n }\n },\n\n getValue: function () {\n return {\n type: this.dateTab.getSelect(),\n value: this.dateTab.getValue()\n };\n }\n\n});\nBI.DynamicYearMonthPopup.BUTTON_CLEAR_EVENT_CHANGE = \"BUTTON_CLEAR_EVENT_CHANGE\";\nBI.DynamicYearMonthPopup.BUTTON_lABEL_EVENT_CHANGE = \"BUTTON_lABEL_EVENT_CHANGE\";\nBI.DynamicYearMonthPopup.BUTTON_OK_EVENT_CHANGE = \"BUTTON_OK_EVENT_CHANGE\";\nBI.DynamicYearMonthPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_year_month_popup\", BI.DynamicYearMonthPopup);","BI.DynamicYearMonthTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4,\n vgap: 2\n },\n\n props: {\n extraCls: \"bi-year-month-trigger\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 22\n },\n\n beforeInit: function (callback) {\n var o = this.options;\n o.title = BI.bind(this._titleCreator, this);\n callback();\n },\n\n _init: function () {\n BI.DynamicYearMonthTrigger.superclass._init.apply(this, arguments);\n var o = this.options;\n\n this.yearEditor = this._createEditor(true);\n this.monthEditor = this._createEditor(false);\n\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [{\n type: \"bi.center\",\n items: [{\n type: \"bi.htape\",\n items: [this.yearEditor, {\n el: {\n type: \"bi.text_button\",\n text: BI.i18nText(\"BI-Multi_Date_Year\"),\n width: o.height\n },\n width: o.height\n }]\n }, {\n type: \"bi.htape\",\n items: [this.monthEditor, {\n el: {\n type: \"bi.text_button\",\n text: BI.i18nText(\"BI-Multi_Date_Month\"),\n width: o.height\n },\n width: o.height}]\n }]\n }, {\n el: {\n type: \"bi.trigger_icon_button\",\n width: o.height\n },\n width: o.height\n }]\n });\n this.setValue(o.value);\n },\n\n _createEditor: function (isYear) {\n var self = this, o = this.options, c = this._const;\n var minDate = BI.parseDateTime(o.min, \"%Y-%X-%d\");\n var editor = BI.createWidget({\n type: \"bi.sign_editor\",\n height: o.height,\n validationChecker: function (v) {\n if(isYear) {\n return v === \"\" || (BI.isPositiveInteger(v) && !BI.checkDateVoid(v, v === minDate.getFullYear() ? minDate.getMonth() + 1 : 1, 1, o.min, o.max)[0]);\n }\n return v === \"\" || ((BI.isPositiveInteger(v) && v >= 1 && v <= 12) && !BI.checkDateVoid(BI.getDate().getFullYear(), v, 1, o.min, o.max)[0]);\n },\n quitChecker: function () {\n return false;\n },\n watermark: BI.i18nText(\"BI-Basic_Unrestricted\"),\n errorText: function (v) {\n return BI.i18nText(\"BI-Year_Trigger_Invalid_Text\");\n },\n hgap: c.hgap,\n vgap: c.vgap,\n allowBlank: true\n });\n editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () {\n self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_KEY_DOWN);\n });\n editor.on(BI.SignEditor.EVENT_FOCUS, function () {\n self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_FOCUS);\n });\n editor.on(BI.SignEditor.EVENT_STOP, function () {\n self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_STOP);\n });\n editor.on(BI.SignEditor.EVENT_CONFIRM, function () {\n self._doEditorConfirm(editor);\n self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_CONFIRM);\n });\n editor.on(BI.SignEditor.EVENT_SPACE, function () {\n if (editor.isValid()) {\n editor.blur();\n }\n });\n editor.on(BI.SignEditor.EVENT_START, function () {\n self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_START);\n });\n editor.on(BI.SignEditor.EVENT_ERROR, function () {\n self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_ERROR);\n });\n editor.on(BI.SignEditor.EVENT_VALID, function () {\n var year = self.yearEditor.getValue();\n var month = self.monthEditor.getValue();\n if(BI.isNotEmptyString(year) && BI.isNotEmptyString(month)) {\n if(BI.isPositiveInteger(year) && month >= 1 && month <= 12 && !BI.checkDateVoid(year, month, 1, o.min, o.max)[0]) {\n self.fireEvent(BI.DynamicYearMonthTrigger.EVENT_VALID);\n }\n }\n });\n editor.on(BI.SignEditor.EVENT_CHANGE, function () {\n if(isYear) {\n self._autoSwitch(editor);\n }\n });\n\n return editor;\n },\n\n _titleCreator: function () {\n var storeValue = this.storeValue || {};\n var type = storeValue.type || BI.DynamicDateCombo.Static;\n var value = storeValue.value;\n if(!this.monthEditor.isValid() || !this.yearEditor.isValid()) {\n return \"\";\n }\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n var date = BI.getDate();\n date = BI.DynamicDateHelper.getCalculation(value);\n var dateStr = BI.print(date, \"%Y-%x\");\n return BI.isEmptyString(text) ? dateStr : (text + \":\" + dateStr);\n case BI.DynamicDateCombo.Static:\n default:\n value = value || {};\n return this._getStaticTitle(value);\n }\n },\n\n _doEditorConfirm: function (editor) {\n var value = editor.getValue();\n if (BI.isNotNull(value)) {\n editor.setValue(value);\n }\n var monthValue = this.monthEditor.getValue();\n this.storeValue = {\n type: BI.DynamicDateCombo.Static,\n value: {\n year: this.yearEditor.getValue(),\n month: BI.isEmptyString(this.monthEditor.getValue()) ? \"\" : monthValue\n }\n };\n },\n\n _yearCheck: function (v) {\n var date = BI.print(BI.parseDateTime(v, \"%Y-%X-%d\"), \"%Y-%X-%d\");\n return BI.print(BI.parseDateTime(v, \"%Y\"), \"%Y\") === v && date >= this.options.min && date <= this.options.max;\n },\n\n _autoSwitch: function (editor) {\n var v = editor.getValue();\n if (BI.isNotEmptyString(v) && BI.checkDateLegal(v)) {\n if (v.length === 4 && this._yearCheck(v)) {\n this._doEditorConfirm(editor);\n this.fireEvent(BI.DynamicYearMonthTrigger.EVENT_CONFIRM);\n this.monthEditor.focus();\n }\n }\n },\n\n _getText: function (obj) {\n var value = \"\";\n if(BI.isNotNull(obj.year) && BI.parseInt(obj.year) !== 0) {\n value += Math.abs(obj.year) + BI.i18nText(\"BI-Basic_Year\") + (obj.year < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n if(BI.isNotNull(obj.month) && BI.parseInt(obj.month) !== 0) {\n value += Math.abs(obj.month) + BI.i18nText(\"BI-Basic_Month\") + (obj.month < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n return value;\n },\n\n _setInnerValue: function (date, text) {\n this.yearEditor.setValue(date.getFullYear());\n this.monthEditor.setValue(date.getMonth() + 1);\n },\n\n _getStaticTitle: function (value) {\n value = value || {};\n var hasYear = !(BI.isNull(value.year) || BI.isEmptyString(value.year));\n var hasMonth = !(BI.isNull(value.month) || BI.isEmptyString(value.month));\n switch ((hasYear << 1) | hasMonth) {\n // !hasYear && !hasMonth\n case 0:\n return \"\";\n // !hasYear && hasMonth\n case 1:\n return value.month;\n // hasYear && !hasMonth\n case 2:\n return value.year;\n // hasYear && hasMonth\n case 3:\n default:\n return value.year + \"-\" + value.month;\n }\n },\n\n setValue: function (v) {\n var type, value;\n var date = BI.getDate();\n this.storeValue = v;\n if (BI.isNotNull(v)) {\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n }\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n var text = this._getText(value);\n date = BI.DynamicDateHelper.getCalculation(value);\n this._setInnerValue(date, text);\n break;\n case BI.DynamicDateCombo.Static:\n default:\n value = value || {};\n var month = BI.isNull(value.month) ? null : value.month;\n this.yearEditor.setValue(value.year);\n this.monthEditor.setValue(month);\n break;\n }\n },\n\n getValue: function () {\n return this.storeValue;\n },\n\n getKey: function () {\n return this.yearEditor.getValue() + \"-\" + this.monthEditor.getValue();\n },\n\n isValid: function () {\n return this.yearEditor.isValid() && this.monthEditor.isValid();\n }\n});\nBI.DynamicYearMonthTrigger.EVENT_VALID = \"EVENT_VALID\";\nBI.DynamicYearMonthTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicYearMonthTrigger.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicYearMonthTrigger.EVENT_START = \"EVENT_START\";\nBI.DynamicYearMonthTrigger.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicYearMonthTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.DynamicYearMonthTrigger.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.shortcut(\"bi.dynamic_year_month_trigger\", BI.DynamicYearMonthTrigger);","BI.YearMonthInterval = BI.inherit(BI.Single, {\n constants: {\n height: 24,\n width: 25,\n lgap: 15,\n offset: -15,\n timeErrorCls: \"time-error\"\n },\n\n props: {\n extraCls: \"bi-year-month-interval\",\n minDate: \"1900-01-01\",\n maxDate: \"2099-12-31\"\n },\n\n _init: function () {\n var self = this, o = this.options;\n BI.YearMonthInterval.superclass._init.apply(this, arguments);\n\n o.value = o.value || {};\n this.left = this._createCombo(o.value.start);\n this.right = this._createCombo(o.value.end);\n this.label = BI.createWidget({\n type: \"bi.label\",\n height: this.constants.height,\n width: this.constants.width,\n text: \"-\"\n });\n BI.createWidget({\n element: self,\n type: \"bi.center\",\n hgap: 15,\n height: this.constants.height,\n items: [{\n type: \"bi.absolute\",\n items: [{\n el: self.left,\n left: this.constants.offset,\n right: 0,\n top: 0,\n bottom: 0\n }]\n }, {\n type: \"bi.absolute\",\n items: [{\n el: self.right,\n left: 0,\n right: this.constants.offset,\n top: 0,\n bottom: 0\n }]\n }]\n });\n BI.createWidget({\n type: \"bi.horizontal_auto\",\n element: this,\n items: [\n self.label\n ]\n });\n },\n\n _createCombo: function (v) {\n var self = this, o = this.options;\n var combo = BI.createWidget({\n type: \"bi.dynamic_year_month_combo\",\n behaviors: o.behaviors,\n value: v,\n listeners: [{\n eventName: BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.YearMonthInterval.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n });\n combo.on(BI.DynamicYearMonthCombo.EVENT_ERROR, function () {\n self._clearTitle();\n BI.Bubbles.hide(\"error\");\n self.element.removeClass(self.constants.timeErrorCls);\n self.fireEvent(BI.YearMonthInterval.EVENT_ERROR);\n });\n\n combo.on(BI.DynamicYearMonthCombo.EVENT_VALID, function () {\n self._checkValid();\n });\n\n combo.on(BI.DynamicYearMonthCombo.EVENT_FOCUS, function () {\n self._checkValid();\n });\n\n combo.on(BI.DynamicYearMonthCombo.EVENT_BEFORE_POPUPVIEW, function () {\n self.left.hideView();\n self.right.hideView();\n });\n\n combo.on(BI.DynamicYearMonthCombo.EVENT_CONFIRM, function () {\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self.left.isValid() && self.right.isValid() && self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n self.fireEvent(BI.YearMonthInterval.EVENT_ERROR);\n }else{\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n self.fireEvent(BI.YearMonthInterval.EVENT_CHANGE);\n }\n });\n return combo;\n },\n\n\n _dateCheck: function (date) {\n return BI.print(BI.parseDateTime(date, \"%Y-%x\"), \"%Y-%x\") === date || BI.print(BI.parseDateTime(date, \"%Y-%X\"), \"%Y-%X\") === date;\n },\n\n\n // 判是否在最大最小之间\n _checkVoid: function (obj) {\n var o = this.options;\n return !BI.checkDateVoid(obj.year, obj.month, 1, o.minDate, o.maxDate)[0];\n },\n\n // 判格式合法\n _check: function (smallDate, bigDate) {\n var smallObj = smallDate.match(/\\d+/g), bigObj = bigDate.match(/\\d+/g);\n\n var smallDate4Check = \"\";\n if (BI.isNotNull(smallObj)) {\n smallDate4Check = (smallObj[0] || \"\") + \"-\" + (smallObj[1] || 1);\n }\n\n var bigDate4Check = \"\";\n if (BI.isNotNull(bigObj)) {\n bigDate4Check = (bigObj[0] || \"\") + \"-\" + (bigObj[1] || 1);\n }\n\n return this._dateCheck(smallDate4Check) && BI.checkDateLegal(smallDate4Check) && this._checkVoid({\n year: smallObj[0],\n month: smallObj[1] || 1,\n day: 1\n }) && this._dateCheck(bigDate4Check) && BI.checkDateLegal(bigDate4Check) && this._checkVoid({\n year: bigObj[0],\n month: bigObj[1] || 1,\n day: 1\n });\n },\n\n _compare: function (smallDate, bigDate) {\n smallDate = BI.print(BI.parseDateTime(smallDate, \"%Y-%X\"), \"%Y-%X\");\n bigDate = BI.print(BI.parseDateTime(bigDate, \"%Y-%X\"), \"%Y-%X\");\n return BI.isNotNull(smallDate) && BI.isNotNull(bigDate) && smallDate > bigDate;\n },\n _setTitle: function (v) {\n this.setTitle(v);\n },\n _clearTitle: function () {\n this.setTitle(\"\");\n },\n _checkValid: function () {\n var self = this;\n\n BI.Bubbles.hide(\"error\");\n var smallDate = self.left.getKey(), bigDate = self.right.getKey();\n if (self.left.isValid() && self.right.isValid() && self._check(smallDate, bigDate) && self._compare(smallDate, bigDate)) {\n self._setTitle(BI.i18nText(\"BI-Time_Interval_Error_Text\"));\n self.element.addClass(self.constants.timeErrorCls);\n BI.Bubbles.show(\"error\", BI.i18nText(\"BI-Time_Interval_Error_Text\"), self, {\n offsetStyle: \"center\"\n });\n self.fireEvent(BI.YearMonthInterval.EVENT_ERROR);\n } else {\n self._clearTitle();\n self.element.removeClass(self.constants.timeErrorCls);\n }\n },\n setValue: function (date) {\n date = date || {};\n this.left.setValue(date.start);\n this.right.setValue(date.end);\n\n this._checkValid();\n },\n getValue: function () {\n return {start: this.left.getValue(), end: this.right.getValue()};\n }\n});\nBI.YearMonthInterval.EVENT_VALID = \"EVENT_VALID\";\nBI.YearMonthInterval.EVENT_ERROR = \"EVENT_ERROR\";\nBI.YearMonthInterval.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.YearMonthInterval.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.year_month_interval\", BI.YearMonthInterval);\n","/**\n * 年季度展示面板\n *\n * Created by GUY on 2015/9/2.\n * @class BI.YearCard\n * @extends BI.Trigger\n */\nBI.DynamicYearQuarterCard = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-year-month-card\"\n },\n\n render: function () {\n var self = this;\n return {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.label\",\n text: BI.i18nText(\"BI-Multi_Date_Relative_Current_Time\"),\n textAlign: \"left\",\n height: 24\n }, {\n type: \"bi.dynamic_date_param_item\",\n ref: function () {\n self.year = this;\n },\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n }, {\n type: \"bi.dynamic_date_param_item\",\n dateType: BI.DynamicDateCard.TYPE.QUARTER,\n ref: function () {\n self.quarter = this;\n },\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self.fireEvent(\"EVENT_CHANGE\");\n }\n }]\n }],\n vgap: 10,\n hgap: 10\n };\n },\n\n _createValue: function (type, v) {\n return {\n dateType: type,\n value: Math.abs(v),\n offset: v > 0 ? 1 : 0\n };\n },\n\n setValue: function (v) {\n v = v || {year: 0, month: 0};\n this.year.setValue(this._createValue(BI.DynamicDateCard.TYPE.YEAR, v.year));\n this.quarter.setValue(this._createValue(BI.DynamicDateCard.TYPE.QUARTER, v.quarter));\n },\n\n getValue: function () {\n var year = this.year.getValue();\n var quarter = this.quarter.getValue();\n return {\n year: (year.offset === 0 ? -year.value : year.value),\n quarter: (quarter.offset === 0 ? -quarter.value : quarter.value)\n };\n }\n});\nBI.DynamicYearQuarterCard.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_year_quarter_card\", BI.DynamicYearQuarterCard);","BI.StaticYearQuarterCard = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-static-year-quarter-card\",\n behaviors: {}\n },\n\n _createQuarter: function () {\n\n var items = [{\n text: BI.Date._QN[1],\n value: 1\n }, {\n text: BI.Date._QN[2],\n value: 2\n }, {\n text: BI.Date._QN[3],\n value: 3\n }, {\n text: BI.Date._QN[4],\n value: 4\n }];\n return BI.map(items, function (j, item) {\n return BI.extend(item, {\n type: \"bi.text_item\",\n cls: \"bi-list-item-select\",\n textAlign: \"center\",\n whiteSpace: \"nowrap\",\n once: false,\n forceSelected: true,\n height: 24\n });\n });\n },\n\n render: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.vertical\",\n items: [{\n type: \"bi.year_picker\",\n ref: function () {\n self.yearPicker = this;\n },\n behaviors: o.behaviors,\n height: 30,\n listeners: [{\n eventName: BI.YearPicker.EVENT_CHANGE,\n action: function () {\n var value = this.getValue();\n self.setValue({\n year: value,\n quarter: self.selectedQuarter\n });\n }\n }]\n }, {\n type: \"bi.button_group\",\n behaviors: o.behaviors,\n ref: function () {\n self.quarter = this;\n },\n items: this._createQuarter(),\n layouts: [{\n type: \"bi.vertical\",\n vgap: 10\n }],\n value: o.value,\n listeners: [{\n eventName: BI.ButtonGroup.EVENT_CHANGE,\n action: function () {\n self.selectedYear = self.yearPicker.getValue();\n self.selectedQuarter = this.getValue()[0];\n self.fireEvent(BI.StaticYearQuarterCard.EVENT_CHANGE);\n }\n }]\n }]\n };\n },\n\n\n getValue: function () {\n return {\n year: this.selectedYear,\n quarter: this.selectedQuarter\n };\n },\n\n setValue: function (obj) {\n var o = this.options;\n var newObj = {};\n newObj.year = obj.year || 0;\n newObj.quarter = obj.quarter || 0;\n if (newObj.quarter === 0 || newObj.year === 0 || BI.checkDateVoid(newObj.year, newObj.quarter, 1, o.min, o.max)[0]) {\n var year = newObj.year || BI.getDate().getFullYear();\n this.selectedYear = year;\n this.selectedQuarter = \"\";\n this.yearPicker.setValue(year);\n this.quarter.setValue();\n } else {\n this.selectedYear = BI.parseInt(newObj.year);\n this.selectedQuarter = BI.parseInt(newObj.quarter);\n this.yearPicker.setValue(this.selectedYear);\n this.quarter.setValue(this.selectedQuarter);\n }\n }\n});\nBI.StaticYearQuarterCard.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.static_year_quarter_card\", BI.StaticYearQuarterCard);\n","BI.DynamicYearQuarterCombo = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-year-quarter-combo bi-border bi-focus-shadow\",\n behaviors: {},\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 22\n },\n\n _init: function () {\n BI.DynamicYearQuarterCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.storeValue = o.value;\n self.storeTriggerValue = \"\";\n this.trigger = BI.createWidget({\n type: \"bi.dynamic_year_quarter_trigger\",\n min: o.min,\n max: o.max,\n height: o.height,\n value: o.value || \"\"\n });\n this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n });\n this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_START, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n });\n this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_STOP, function () {\n self.combo.showView();\n });\n this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_ERROR, function () {\n self.combo.isViewVisible() && self.combo.hideView();\n });\n this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM, function () {\n // 没看出来干啥的,先去掉\n // if (self.combo.isViewVisible()) {\n // return;\n // }\n var dateStore = self.storeTriggerValue;\n var dateObj = self.trigger.getKey();\n if (BI.isNotEmptyString(dateObj) && !BI.isEqual(dateObj, dateStore)) {\n self.storeValue = self.trigger.getValue();\n self.setValue(self.trigger.getValue());\n }\n self._checkDynamicValue(self.storeValue);\n self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM);\n });\n this.trigger.on(BI.DynamicYearQuarterTrigger.EVENT_FOCUS, function () {\n self.storeTriggerValue = self.trigger.getKey();\n });\n\n this.combo = BI.createWidget({\n type: \"bi.combo\",\n container: o.container,\n isNeedAdjustHeight: false,\n isNeedAdjustWidth: false,\n el: this.trigger,\n popup: {\n minWidth: 85,\n stopPropagation: false,\n el: {\n type: \"bi.dynamic_year_quarter_popup\",\n ref: function () {\n self.popup = this;\n },\n listeners: [{\n eventName: BI.DynamicYearQuarterPopup.EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE,\n action: function () {\n self.setValue();\n self.combo.hideView();\n self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE,\n action: function () {\n var date = BI.getDate();\n self.setValue({type: BI.DynamicYearMonthCombo.Static, value: {year: date.getFullYear(), quarter: BI.getQuarter(date)}});\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE,\n action: function () {\n self.setValue(self.popup.getValue());\n self.combo.hideView();\n self.fireEvent(BI.DynamicDateCombo.EVENT_CONFIRM);\n }\n }],\n behaviors: o.behaviors,\n min: o.min,\n max: o.max\n },\n value: o.value || \"\"\n }\n });\n this.combo.on(BI.Combo.EVENT_BEFORE_POPUPVIEW, function () {\n self.popup.setValue(self.storeValue);\n self.fireEvent(BI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW);\n });\n\n BI.createWidget({\n type: \"bi.htape\",\n element: this,\n ref: function () {\n self.comboWrapper = this;\n },\n items: [{\n el: {\n type: \"bi.icon_button\",\n cls: \"bi-trigger-icon-button date-change-h-font\",\n width: 24,\n height: 24,\n ref: function () {\n self.changeIcon = this;\n }\n },\n width: 24\n }, this.combo]\n });\n this._checkDynamicValue(o.value);\n },\n\n _checkDynamicValue: function (v) {\n var type = null;\n if (BI.isNotNull(v)) {\n type = v.type;\n }\n switch (type) {\n case BI.DynamicYearQuarterCombo.Dynamic:\n this.changeIcon.setVisible(true);\n this.comboWrapper.attr(\"items\")[0].width = 24;\n this.comboWrapper.resize();\n break;\n default:\n this.comboWrapper.attr(\"items\")[0].width = 0;\n this.comboWrapper.resize();\n this.changeIcon.setVisible(false);\n break;\n }\n },\n\n setValue: function (v) {\n this.storeValue = v;\n this.trigger.setValue(v);\n this._checkDynamicValue(v);\n },\n\n getValue: function () {\n return this.storeValue;\n }\n\n});\nBI.DynamicYearQuarterCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicYearQuarterCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.dynamic_year_quarter_combo\", BI.DynamicYearQuarterCombo);\n\nBI.extend(BI.DynamicYearQuarterCombo, {\n Static: 1,\n Dynamic: 2\n});","BI.DynamicYearQuarterPopup = BI.inherit(BI.Widget, {\n constants: {\n tabHeight: 30,\n buttonHeight: 24\n },\n\n props: {\n baseCls: \"bi-year-quarter-popup\",\n behaviors: {},\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期,\n width: 180,\n height: 240\n },\n\n render: function () {\n var self = this, opts = this.options, c = this.constants;\n this.storeValue = {type: BI.DynamicYearQuarterCombo.Static};\n return {\n type: \"bi.vtape\",\n items: [{\n el: this._getTabJson()\n }, {\n el: {\n type: \"bi.grid\",\n items: [[{\n type: \"bi.text_button\",\n cls: \"bi-split-top bi-high-light\",\n shadow: true,\n textHeight: c.buttonHeight - 1,\n text: BI.i18nText(\"BI-Basic_Clear\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-left bi-split-right bi-high-light bi-split-top\",\n textHeight: c.buttonHeight - 1,\n shadow: true,\n text: BI.i18nText(\"BI-Basic_Current_Quarter\"),\n ref: function () {\n self.textButton = this;\n },\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE);\n }\n }]\n }, {\n type: \"bi.text_button\",\n cls: \"bi-split-top bi-high-light\",\n shadow: true,\n textHeight: c.buttonHeight - 1,\n text: BI.i18nText(\"BI-Basic_OK\"),\n listeners: [{\n eventName: BI.TextButton.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE);\n }\n }]\n }]]\n },\n height: 24\n }]\n };\n },\n\n _setInnerValue: function () {\n if (this.dateTab.getSelect() === BI.DynamicYearQuarterCombo.Static) {\n this.textButton.setValue(BI.i18nText(\"BI-Basic_Current_Quarter\"));\n this.textButton.setEnable(true);\n } else {\n var date = BI.DynamicDateHelper.getCalculation(this.dynamicPane.getValue());\n date = BI.print(date, \"%Y-%Q\");\n this.textButton.setValue(date);\n this.textButton.setEnable(false);\n }\n },\n\n _getTabJson: function () {\n var self = this, o = this.options;\n return {\n type: \"bi.tab\",\n ref: function () {\n self.dateTab = this;\n },\n tab: {\n type: \"bi.linear_segment\",\n cls: \"bi-split-bottom\",\n height: this.constants.tabHeight,\n items: BI.createItems([{\n text: BI.i18nText(\"BI-Basic_Year_Quarter\"),\n value: BI.DynamicYearQuarterCombo.Static\n }, {\n text: BI.i18nText(\"BI-Basic_Dynamic_Title\"),\n value: BI.DynamicYearQuarterCombo.Dynamic\n }], {\n textAlign: \"center\"\n })\n },\n cardCreator: function (v) {\n switch (v) {\n case BI.DynamicYearQuarterCombo.Dynamic:\n return {\n type: \"bi.dynamic_year_quarter_card\",\n listeners: [{\n eventName: \"EVENT_CHANGE\",\n action: function () {\n self._setInnerValue(self.year, v);\n }\n }],\n ref: function () {\n self.dynamicPane = this;\n }\n };\n case BI.DynamicYearQuarterCombo.Static:\n default:\n return {\n type: \"bi.static_year_quarter_card\",\n behaviors: o.behaviors,\n min: self.options.min,\n max: self.options.max,\n listeners: [{\n eventName: BI.DynamicYearCard.EVENT_CHANGE,\n action: function () {\n self.fireEvent(BI.DynamicYearQuarterPopup.EVENT_CHANGE);\n }\n }],\n ref: function () {\n self.year = this;\n }\n };\n }\n },\n listeners: [{\n eventName: BI.Tab.EVENT_CHANGE,\n action: function () {\n var v = self.dateTab.getSelect();\n switch (v) {\n case BI.DynamicYearQuarterCombo.Static:\n var date = BI.DynamicDateHelper.getCalculation(self.dynamicPane.getValue());\n self.year.setValue({year: date.getFullYear(), quarter: BI.getQuarter(date)});\n self._setInnerValue();\n break;\n case BI.DynamicYearQuarterCombo.Dynamic:\n default:\n if(self.storeValue && self.storeValue.type === BI.DynamicYearQuarterCombo.Dynamic) {\n self.dynamicPane.setValue(self.storeValue.value);\n }else{\n self.dynamicPane.setValue({\n year: 0\n });\n }\n self._setInnerValue();\n break;\n }\n }\n }]\n };\n },\n\n setValue: function (v) {\n this.storeValue = v;\n var self = this;\n var type, value;\n v = v || {};\n type = v.type || BI.DynamicDateCombo.Static;\n value = v.value || v;\n this.dateTab.setSelect(type);\n switch (type) {\n case BI.DynamicDateCombo.Dynamic:\n this.dynamicPane.setValue(value);\n self._setInnerValue();\n break;\n case BI.DynamicDateCombo.Static:\n default:\n this.year.setValue(value);\n this.textButton.setValue(BI.i18nText(\"BI-Basic_Current_Quarter\"));\n this.textButton.setEnable(true);\n break;\n }\n },\n\n getValue: function () {\n return {\n type: this.dateTab.getSelect(),\n value: this.dateTab.getValue()\n };\n }\n\n});\nBI.DynamicYearQuarterPopup.BUTTON_CLEAR_EVENT_CHANGE = \"BUTTON_CLEAR_EVENT_CHANGE\";\nBI.DynamicYearQuarterPopup.BUTTON_lABEL_EVENT_CHANGE = \"BUTTON_lABEL_EVENT_CHANGE\";\nBI.DynamicYearQuarterPopup.BUTTON_OK_EVENT_CHANGE = \"BUTTON_OK_EVENT_CHANGE\";\nBI.DynamicYearQuarterPopup.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.dynamic_year_quarter_popup\", BI.DynamicYearQuarterPopup);","BI.DynamicYearQuarterTrigger = BI.inherit(BI.Trigger, {\n _const: {\n hgap: 4,\n vgap: 2\n },\n\n props: {\n extraCls: \"bi-year-quarter-trigger\",\n min: \"1900-01-01\", // 最小日期\n max: \"2099-12-31\", // 最大日期\n height: 22\n },\n\n _init: function () {\n BI.DynamicYearQuarterTrigger.superclass._init.apply(this, arguments);\n var o = this.options;\n\n this.yearEditor = this._createEditor(true);\n this.quarterEditor = this._createEditor(false);\n\n BI.createWidget({\n element: this,\n type: \"bi.htape\",\n items: [{\n type: \"bi.center\",\n items: [{\n type: \"bi.htape\",\n items: [this.yearEditor, {\n el: {\n type: \"bi.text_button\",\n text: BI.i18nText(\"BI-Multi_Date_Year\"),\n width: o.height\n },\n width: o.height\n }]\n }, {\n type: \"bi.htape\",\n items: [this.quarterEditor, {\n el: {\n type: \"bi.text_button\",\n text: BI.i18nText(\"BI-Multi_Date_Quarter\"),\n width: 24\n },\n width: 24}]\n }]\n }, {\n el: {\n type: \"bi.trigger_icon_button\",\n width: o.height\n },\n width: o.height\n }]\n });\n this.setValue(o.value);\n },\n\n _createEditor: function (isYear) {\n var self = this, o = this.options, c = this._const;\n var editor = BI.createWidget({\n type: \"bi.sign_editor\",\n height: o.height,\n validationChecker: function (v) {\n if(isYear) {\n return v === \"\" || (BI.isPositiveInteger(v) && !BI.checkDateVoid(v, 1, 1, o.min, o.max)[0]);\n }\n return v === \"\" || ((BI.isPositiveInteger(v) && v >= 1 && v <= 4) && !BI.checkDateVoid(BI.getDate().getFullYear(), v, 1, o.min, o.max)[0]);\n },\n quitChecker: function () {\n return false;\n },\n errorText: function (v) {\n return BI.i18nText(\"BI-Year_Trigger_Invalid_Text\");\n },\n watermark: BI.i18nText(\"BI-Basic_Unrestricted\"),\n hgap: c.hgap,\n vgap: c.vgap,\n title: \"\",\n allowBlank: true\n });\n editor.on(BI.SignEditor.EVENT_KEY_DOWN, function () {\n self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN);\n });\n editor.on(BI.SignEditor.EVENT_FOCUS, function () {\n self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_FOCUS);\n });\n editor.on(BI.SignEditor.EVENT_STOP, function () {\n self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_STOP);\n });\n editor.on(BI.SignEditor.EVENT_CONFIRM, function () {\n self._doEditorConfirm(editor);\n self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM);\n });\n editor.on(BI.SignEditor.EVENT_SPACE, function () {\n if (editor.isValid()) {\n editor.blur();\n }\n });\n editor.on(BI.SignEditor.EVENT_START, function () {\n self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_START);\n });\n editor.on(BI.SignEditor.EVENT_ERROR, function () {\n self.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_ERROR);\n });\n editor.on(BI.SignEditor.EVENT_CHANGE, function () {\n if(isYear) {\n self._autoSwitch(editor);\n }\n });\n\n return editor;\n },\n\n _doEditorConfirm: function (editor) {\n var value = editor.getValue();\n if (BI.isNotNull(value)) {\n editor.setValue(value);\n }\n var quarterValue = this.quarterEditor.getValue();\n this.storeValue = {\n type: BI.DynamicYearQuarterCombo.Static,\n value: {\n year: this.yearEditor.getValue(),\n quarter: BI.isEmptyString(this.quarterEditor.getValue()) ? \"\" : quarterValue\n }\n };\n this.setTitle(this._getStaticTitle(this.storeValue.value));\n },\n\n _yearCheck: function (v) {\n var date = BI.print(BI.parseDateTime(v, \"%Y-%X-%d\"), \"%Y-%X-%d\");\n return BI.print(BI.parseDateTime(v, \"%Y\"), \"%Y\") === v && date >= this.options.min && date <= this.options.max;\n },\n\n _autoSwitch: function (editor) {\n var v = editor.getValue();\n if (BI.isNotEmptyString(v) && BI.checkDateLegal(v)) {\n if (v.length === 4 && this._yearCheck(v)) {\n this._doEditorConfirm(editor);\n this.fireEvent(BI.DynamicYearQuarterTrigger.EVENT_CONFIRM);\n this.quarterEditor.focus();\n }\n }\n },\n\n _getStaticTitle: function (value) {\n value = value || {};\n var hasYear = !(BI.isNull(value.year) || BI.isEmptyString(value.year));\n var hasMonth = !(BI.isNull(value.quarter) || BI.isEmptyString(value.quarter));\n switch ((hasYear << 1) | hasMonth) {\n // !hasYear && !hasMonth\n case 0:\n return \"\";\n // !hasYear && hasMonth\n case 1:\n return value.quarter;\n // hasYear && !hasMonth\n case 2:\n return value.year;\n // hasYear && hasMonth\n case 3:\n default:\n return value.year + \"-\" + value.quarter;\n }\n },\n\n _getText: function (obj) {\n var value = \"\";\n if(BI.isNotNull(obj.year) && BI.parseInt(obj.year) !== 0) {\n value += Math.abs(obj.year) + BI.i18nText(\"BI-Basic_Year\") + (obj.year < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n if(BI.isNotNull(obj.quarter) && BI.parseInt(obj.quarter) !== 0) {\n value += Math.abs(obj.quarter) + BI.i18nText(\"BI-Basic_Single_Quarter\") + (obj.quarter < 0 ? BI.i18nText(\"BI-Basic_Front\") : BI.i18nText(\"BI-Basic_Behind\"));\n }\n return value;\n },\n\n _setInnerValue: function (date, text) {\n var dateStr = BI.print(date, \"%Y-%Q\");\n this.yearEditor.setValue(date.getFullYear());\n this.quarterEditor.setValue(BI.getQuarter(date));\n this.setTitle(BI.isEmptyString(text) ? dateStr : (text + \":\" + dateStr));\n },\n\n setValue: function (v) {\n var type, value;\n var date = BI.getDate();\n this.storeValue = v;\n if (BI.isNotNull(v)) {\n type = v.type || BI.DynamicYearQuarterCombo.Static;\n value = v.value || v;\n }\n switch (type) {\n case BI.DynamicYearQuarterCombo.Dynamic:\n var text = this._getText(value);\n date = BI.DynamicDateHelper.getCalculation(value);\n this._setInnerValue(date, text);\n break;\n case BI.DynamicYearQuarterCombo.Static:\n default:\n value = value || {};\n var quarter = BI.isNull(value.quarter) ? null : value.quarter;\n this.yearEditor.setValue(value.year);\n this.yearEditor.setTitle(value.year);\n this.quarterEditor.setValue(quarter);\n this.quarterEditor.setTitle(quarter);\n this.setTitle(this._getStaticTitle(value));\n break;\n }\n },\n\n getValue: function () {\n return this.storeValue;\n },\n\n getKey: function () {\n return this.yearEditor.getValue() + \"-\" + this.quarterEditor.getValue();\n }\n});\nBI.DynamicYearQuarterTrigger.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.DynamicYearQuarterTrigger.EVENT_ERROR = \"EVENT_ERROR\";\nBI.DynamicYearQuarterTrigger.EVENT_START = \"EVENT_START\";\nBI.DynamicYearQuarterTrigger.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.DynamicYearQuarterTrigger.EVENT_STOP = \"EVENT_STOP\";\nBI.DynamicYearQuarterTrigger.EVENT_KEY_DOWN = \"EVENT_KEY_DOWN\";\nBI.shortcut(\"bi.dynamic_year_quarter_trigger\", BI.DynamicYearQuarterTrigger);","/**\n * 简单的复选下拉框控件, 适用于数据量少的情况, 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值\n * 封装了字段处理逻辑\n *\n * Created by GUY on 2015/10/29.\n * @class BI.AbstractAllValueChooser\n * @extends BI.Widget\n */\nBI.AbstractAllValueChooser = BI.inherit(BI.Widget, {\n\n _const: {\n perPage: 100\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.AbstractAllValueChooser.superclass._defaultConfig.apply(this, arguments), {\n width: 200,\n height: 30,\n items: null,\n itemsCreator: BI.emptyFn,\n cache: true\n });\n },\n\n _valueFormatter: function (v) {\n var text = v;\n if (BI.isNotNull(this.items)) {\n BI.some(this.items, function (i, item) {\n // 把value都换成字符串\n // 需要考虑到value也可能是数字\n if (item.value === v || item.value + \"\" === v) {\n text = item.text;\n return true;\n }\n });\n }\n return text;\n },\n\n _itemsCreator: function (options, callback) {\n var self = this, o = this.options;\n if (!o.cache || !this.items) {\n o.itemsCreator({}, function (items) {\n self.items = items;\n call(items);\n });\n } else {\n call(this.items);\n }\n function call (items) {\n var keywords = (options.keywords || []).slice();\n if (options.keyword) {\n keywords.push(options.keyword);\n }\n var resultItems = items;\n if(BI.isNotEmptyArray(keywords)) {\n resultItems = [];\n BI.each(keywords, function (i, kw) {\n var search = BI.Func.getSearchResult(items, kw);\n resultItems = resultItems.concat(search.match).concat(search.find);\n });\n resultItems = BI.uniq(resultItems);\n }\n if (options.selectedValues) {// 过滤\n var filter = BI.makeObject(options.selectedValues, true);\n resultItems = BI.filter(resultItems, function (i, ob) {\n return !filter[ob.value];\n });\n }\n if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) {\n callback({\n items: resultItems\n });\n return;\n }\n if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {\n callback({count: resultItems.length});\n return;\n }\n callback({\n items: resultItems,\n hasNext: false\n });\n }\n }\n});","/**\n * 简单的复选下拉框控件, 适用于数据量少的情况, 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值\n * 封装了字段处理逻辑\n *\n * Created by GUY on 2015/10/29.\n * @class BI.AllValueChooserCombo\n * @extends BI.AbstractAllValueChooser\n */\nBI.AllValueChooserCombo = BI.inherit(BI.AbstractAllValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.AllValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-all-value-chooser-combo\",\n width: 200,\n height: 24,\n items: null,\n itemsCreator: BI.emptyFn,\n cache: true\n });\n },\n\n _init: function () {\n BI.AllValueChooserCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNotNull(o.items)) {\n this.items = o.items;\n }\n this.combo = BI.createWidget({\n type: \"bi.multi_select_combo\",\n text: o.text,\n element: this,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this),\n width: o.width,\n height: o.height,\n value: {\n type: BI.Selection.Multi,\n value: o.value || []\n }\n });\n\n this.combo.on(BI.MultiSelectCombo.EVENT_CONFIRM, function () {\n self.fireEvent(BI.AllValueChooserCombo.EVENT_CONFIRM);\n });\n },\n\n setValue: function (v) {\n this.combo.setValue({\n type: BI.Selection.Multi,\n value: v || []\n });\n },\n\n getValue: function () {\n var val = this.combo.getValue() || {};\n if (val.type === BI.Selection.All) {\n return val.assist;\n }\n return val.value || [];\n },\n\n populate: function (items) {\n // 直接用combo的populate不会作用到AbstractValueChooser上\n this.items = items;\n this.combo.populate.apply(this, arguments);\n }\n});\nBI.AllValueChooserCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.shortcut(\"bi.all_value_chooser_combo\", BI.AllValueChooserCombo);","/**\n * 简单的复选面板, 适用于数据量少的情况, 与valuechooser的区别是allvaluechooser setValue和getValue返回的是所有值\n * 封装了字段处理逻辑\n *\n * Created by GUY on 2015/10/29.\n * @class BI.AllValueChooserPane\n * @extends BI.AbstractAllValueChooser\n */\nBI.AllValueChooserPane = BI.inherit(BI.AbstractAllValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.AllValueChooserPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-all-value-chooser-pane\",\n width: 200,\n height: 30,\n items: null,\n itemsCreator: BI.emptyFn,\n cache: true\n });\n },\n\n _init: function () {\n BI.AllValueChooserPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNotNull(o.items)) {\n this.items = o.items;\n }\n this.list = BI.createWidget({\n type: \"bi.multi_select_list\",\n element: this,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this),\n width: o.width,\n height: o.height\n });\n\n this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.AllValueChooserPane.EVENT_CHANGE);\n });\n },\n\n setValue: function (v) {\n this.list.setValue({\n type: BI.Selection.Multi,\n value: v || []\n });\n },\n\n getValue: function () {\n var val = this.list.getValue() || {};\n if (val.type === BI.Selection.All) {\n return val.assist;\n }\n return val.value || [];\n },\n\n populate: function (items) {\n // 直接用combo的populate不会作用到AbstractValueChooser上\n this.items = items;\n this.list.populate.apply(this.list, arguments);\n }\n});\nBI.AllValueChooserPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.all_value_chooser_pane\", BI.AllValueChooserPane);","BI.AllValueMultiTextValueCombo = BI.inherit(BI.Widget, {\n\n props: {\n baseCls: \"bi-all-value-multi-text-value-combo\",\n width: 200,\n height: 24,\n items: []\n },\n\n render: function () {\n var self = this, o = this.options;\n var value = this._digestValue(o.value);\n return {\n type: \"bi.search_multi_text_value_combo\",\n text: o.text,\n height: o.height,\n items: o.items,\n value: value,\n numOfPage: 100,\n valueFormatter: o.valueFormatter,\n warningTitle: o.warningTitle,\n listeners: [{\n eventName: BI.SearchMultiTextValueCombo.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.AllValueMultiTextValueCombo.EVENT_CONFIRM);\n }\n }],\n ref: function () {\n self.combo = this;\n }\n };\n },\n\n setValue: function (v) {\n var value = this._digestValue(v);\n this.combo.setValue(value);\n },\n\n getValue: function () {\n var obj = this.combo.getValue() || {};\n obj.value = obj.value || [];\n if(obj.type === BI.Selection.All) {\n var values = [];\n BI.each(this.options.items, function (idx, item) {\n !BI.contains(obj.value, item.value) && values.push(item.value);\n });\n return values;\n }\n return obj.value || [];\n },\n\n populate: function (items) {\n this.options.items = items;\n this.combo.populate.apply(this, arguments);\n },\n\n _digestValue: function (v) {\n return {\n type: BI.Selection.Multi,\n value: v || []\n };\n }\n});\nBI.AllValueMultiTextValueCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.shortcut(\"bi.all_value_multi_text_value_combo\", BI.AllValueMultiTextValueCombo);\n","BI.AbstractTreeValueChooser = BI.inherit(BI.Widget, {\n\n _const: {\n perPage: 100\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.AbstractTreeValueChooser.superclass._defaultConfig.apply(this, arguments), {\n items: null,\n itemsCreator: BI.emptyFn,\n open: false\n });\n },\n\n _valueFormatter: function (v) {\n var text = v;\n if (BI.isNotNull(this.items)) {\n BI.some(this.items, function (i, item) {\n if (item.value === v || item.value + \"\" === v) {\n text = item.text;\n return true;\n }\n });\n }\n return text;\n },\n\n _initData: function (items) {\n this.items = items;\n var nodes = BI.Tree.treeFormat(items);\n this.tree = new BI.Tree();\n this.tree.initTree(nodes);\n },\n\n _itemsCreator: function (options, callback) {\n var self = this, o = this.options;\n if (!this.items) {\n o.itemsCreator({}, function (items) {\n self._initData(items);\n call();\n });\n } else {\n call();\n }\n\n function call() {\n switch (options.type) {\n case BI.TreeView.REQ_TYPE_INIT_DATA:\n self._reqInitTreeNode(options, callback);\n break;\n case BI.TreeView.REQ_TYPE_ADJUST_DATA:\n self._reqAdjustTreeNode(options, callback);\n break;\n case BI.TreeView.REQ_TYPE_SELECT_DATA:\n self._reqSelectedTreeNode(options, callback);\n break;\n case BI.TreeView.REQ_TYPE_GET_SELECTED_DATA:\n self._reqDisplayTreeNode(options, callback);\n break;\n default :\n self._reqTreeNode(options, callback);\n break;\n }\n }\n },\n\n _reqDisplayTreeNode: function (op, callback) {\n var self = this;\n var result = [];\n var selectedValues = op.selectedValues;\n\n if (selectedValues == null || BI.isEmpty(selectedValues)) {\n callback({});\n return;\n }\n\n doCheck([], this.tree.getRoot(), selectedValues);\n\n callback({\n items: result\n });\n\n function doCheck(parentValues, node, selected) {\n if (selected == null || BI.isEmpty(selected)) {\n BI.each(node.getChildren(), function (i, child) {\n var newParents = BI.clone(parentValues);\n newParents.push(child.value);\n var llen = self._getChildCount(newParents);\n createOneJson(child, node.id, llen);\n doCheck(newParents, child, {});\n });\n return;\n }\n BI.each(selected, function (k) {\n var node = self._getTreeNode(parentValues, k);\n // 找不到就是新增值\n if(BI.isNull(node)) {\n createOneJson({\n id: BI.UUID(),\n text: k,\n value: k\n }, BI.UUID(), 0);\n } else {\n var newParents = BI.clone(parentValues);\n newParents.push(node.value);\n createOneJson(node, node.parent && node.parent.id, getCount(selected[k], newParents));\n doCheck(newParents, node, selected[k]);\n }\n });\n }\n\n function getCount(jo, parentValues) {\n if (jo == null) {\n return 0;\n }\n if (BI.isEmpty(jo)) {\n return self._getChildCount(parentValues);\n }\n\n return BI.size(jo);\n }\n\n function createOneJson(node, pId, llen) {\n result.push({\n id: node.id,\n pId: pId,\n text: node.text + (llen > 0 ? (\"(\" + BI.i18nText(\"BI-Basic_Altogether\") + llen + BI.i18nText(\"BI-Basic_Count\") + \")\") : \"\"),\n value: node.value,\n open: true\n });\n }\n },\n\n _reqSelectedTreeNode: function (op, callback) {\n var self = this;\n var selectedValues = BI.deepClone(op.selectedValues);\n var notSelectedValue = op.notSelectedValue || {};\n var keyword = op.keyword || \"\";\n var parentValues = op.parentValues || [];\n\n if (selectedValues == null || BI.isEmpty(selectedValues)) {\n callback({});\n return;\n }\n\n dealWithSelectedValues(selectedValues);\n callback(selectedValues);\n\n\n function dealWithSelectedValues(selectedValues) {\n var p = parentValues.concat(notSelectedValue);\n // 存储的值中存在这个值就把它删掉\n // 例如选中了中国-江苏-南京, 取消中国或江苏或南京\n // p长度不大于selectedValues的情况才可能找到,这样可以直接删除selectedValues的节点\n if (canFindKey(selectedValues, p)) {\n // 如果搜索的值在父亲链中\n if (isSearchValueInParent(p)) {\n // 例如选中了 中国-江苏, 搜索江苏, 取消江苏(干掉了江苏)\n self._deleteNode(selectedValues, p);\n } else {\n var searched = [];\n // 要找到所有以notSelectedValue为叶子节点的链路\n var find = search(parentValues, notSelectedValue, [], searched);\n if (find && BI.isNotEmptyArray(searched)) {\n BI.each(searched, function (i, arr) {\n var node = self._getNode(selectedValues, arr);\n if (node) {\n // 例如选中了 中国-江苏, 搜索江苏, 取消中国(实际上只想删除中国-江苏,因为搜的是江苏)\n // 例如选中了 中国-江苏-南京,搜索南京,取消中国(实际上只想删除中国-江苏-南京,因为搜的是南京)\n self._deleteNode(selectedValues, arr);\n } else {\n // 例如选中了 中国-江苏,搜索南京,取消中国(实际上只想删除中国-江苏-南京,因为搜的是南京)\n expandSelectedValue(selectedValues, arr, BI.last(arr));\n }\n });\n }\n }\n }\n\n // 存储的值中不存在这个值,但父亲节点是全选的情况\n // 例如选中了中国-江苏,取消南京\n // important 选中了中国-江苏,取消了江苏,但是搜索的是南京\n if (isChild(selectedValues, p)) {\n var result = [], find = false;\n // 如果parentValues中有匹配的值,说明搜索结果不在当前值下\n if (isSearchValueInParent(p)) {\n find = true;\n } else {\n // 从当前值开始搜\n find = search(parentValues, notSelectedValue, result);\n p = parentValues;\n }\n\n if (find === true) {\n // 去掉点击的节点之后的结果集\n expandSelectedValue(selectedValues, p, notSelectedValue);\n // 添加去掉搜索的结果集\n if (result.length > 0) {\n BI.each(result, function (i, strs) {\n self._buildTree(selectedValues, strs);\n });\n }\n }\n }\n\n }\n\n function expandSelectedValue(selectedValues, parents, notSelectedValue) {\n var next = selectedValues;\n var childrenCount = [];\n var path = [];\n // 去掉点击的节点之后的结果集\n BI.some(parents, function (i, v) {\n var t = next[v];\n if (t == null) {\n if (i === 0) {\n return true;\n }\n if (BI.isEmpty(next)) {\n var split = parents.slice(0, i);\n var expanded = self._getChildren(split);\n path.push(split);\n childrenCount.push(expanded.length);\n // 如果只有一个值且取消的就是这个值\n if (i === parents.length - 1 && expanded.length === 1 && expanded[0].value === notSelectedValue) {\n for (var j = childrenCount.length - 1; j >= 0; j--) {\n if (childrenCount[j] === 1) {\n self._deleteNode(selectedValues, path[j]);\n } else {\n break;\n }\n }\n } else {\n BI.each(expanded, function (m, child) {\n if (i === parents.length - 1 && child.value === notSelectedValue) {\n return true;\n }\n next[child.value] = {};\n });\n }\n next = next[v];\n } else {\n return true;\n // next = {};\n // next[v] = {};\n }\n } else {\n next = t;\n }\n });\n }\n\n function search(parents, current, result, searched) {\n var newParents = BI.clone(parents);\n newParents.push(current);\n if (self._isMatch(parents, current, keyword)) {\n searched && searched.push(newParents);\n return true;\n }\n\n var children = self._getChildren(newParents);\n\n var notSearch = [];\n var can = false;\n\n BI.each(children, function (i, child) {\n if (search(newParents, child.value, result, searched)) {\n can = true;\n } else {\n notSearch.push(child.value);\n }\n });\n if (can === true) {\n BI.each(notSearch, function (i, v) {\n var next = BI.clone(newParents);\n next.push(v);\n result.push(next);\n });\n }\n return can;\n }\n\n function isSearchValueInParent(parentValues) {\n for (var i = 0, len = parentValues.length; i < len; i++) {\n if (self._isMatch(parentValues.slice(0, i), parentValues[i], keyword)) {\n return true;\n }\n }\n return false;\n }\n\n function canFindKey(selectedValues, parents) {\n var t = selectedValues;\n for (var i = 0; i < parents.length; i++) {\n var v = parents[i];\n t = t[v];\n if (t == null) {\n return false;\n }\n }\n return true;\n }\n\n function isChild(selectedValues, parents) {\n var t = selectedValues;\n for (var i = 0; i < parents.length; i++) {\n var v = parents[i];\n if (!BI.has(t, v)) {\n return false;\n }\n t = t[v];\n if (BI.isEmpty(t)) {\n return true;\n }\n }\n return false;\n }\n },\n\n _reqAdjustTreeNode: function (op, callback) {\n var self = this;\n var result = [];\n var selectedValues = op.selectedValues;\n if (selectedValues == null || BI.isEmpty(selectedValues)) {\n callback({});\n return;\n }\n BI.each(selectedValues, function (k, v) {\n result.push([k]);\n });\n\n dealWithSelectedValues(selectedValues, []);\n\n var jo = {};\n BI.each(result, function (i, strs) {\n self._buildTree(jo, strs);\n });\n callback(jo);\n\n function dealWithSelectedValues(selected, parents) {\n if (selected == null || BI.isEmpty(selected)) {\n return true;\n }\n var can = true;\n BI.each(selected, function (k, v) {\n var p = BI.clone(parents);\n p.push(k);\n if (!dealWithSelectedValues(selected[k], p)) {\n BI.each(selected[k], function (nk, nv) {\n var t = BI.clone(p);\n t.push(nk);\n result.push(t);\n });\n can = false;\n }\n });\n return can && isAllSelected(selected, parents);\n }\n\n function isAllSelected(selected, parents) {\n return BI.isEmpty(selected) || self._getChildCount(parents) === BI.size(selected);\n }\n },\n\n _reqInitTreeNode: function (op, callback) {\n var self = this;\n var result = [];\n var keyword = op.keyword || \"\";\n var selectedValues = op.selectedValues;\n var lastSearchValue = op.lastSearchValue || \"\"; // 一次请求100个,但是搜索是拿全部的,lastSearchValue是上一次遍历到的节点索引\n var output = search();\n BI.nextTick(function () {\n callback({\n hasNext: output.length > self._const.perPage,\n items: result,\n lastSearchValue: BI.last(output)\n });\n });\n\n function search() {\n var children = self._getChildren([]);\n var start = children.length;\n if (lastSearchValue !== \"\") {\n for (var j = 0, len = start; j < len; j++) {\n if (children[j].value === lastSearchValue) {\n start = j + 1;\n break;\n }\n }\n } else {\n start = 0;\n }\n var output = [];\n for (var i = start, len = children.length; i < len; i++) {\n if (output.length < self._const.perPage) {\n var find = nodeSearch(1, [], children[i].value, false, result);\n } else if (output.length === self._const.perPage) {\n var find = nodeSearch(1, [], children[i].value, false, []);\n }\n if (find[0] === true) {\n output.push(children[i].value);\n }\n if (output.length > self._const.perPage) {\n break;\n }\n }\n\n // 深层嵌套的比较麻烦,这边先实现的是在根节点添加\n if (op.times === 1) {\n var nodes = self._getAddedValueNode([], selectedValues);\n result = BI.concat(BI.filter(nodes, function (idx, node) {\n var find = BI.Func.getSearchResult([node.text || node.value], keyword);\n return find.find.length > 0 || find.match.length > 0;\n }), result);\n }\n return output;\n }\n\n function nodeSearch(deep, parentValues, current, isAllSelect, result) {\n if (self._isMatch(parentValues, current, keyword)) {\n var checked = isAllSelect || isSelected(parentValues, current);\n createOneJson(parentValues, current, false, checked, !isAllSelect && isHalf(parentValues, current), true, result);\n return [true, checked];\n }\n var newParents = BI.clone(parentValues);\n newParents.push(current);\n var children = self._getChildren(newParents);\n\n var can = false, checked = false;\n\n var isCurAllSelected = isAllSelect || isAllSelected(parentValues, current);\n BI.each(children, function (i, child) {\n var state = nodeSearch(deep + 1, newParents, child.value, isCurAllSelected, result);\n // 当前节点的子节点是否选中,并不确定全选还是半选\n if (state[1] === true) {\n checked = true;\n }\n // 当前节点的子节点要不要加入到结果集中\n if (state[0] === true) {\n can = true;\n }\n });\n // 子节点匹配, 补充父节点\n if (can === true) {\n checked = isCurAllSelected || (isSelected(parentValues, current) && checked);\n createOneJson(parentValues, current, true, checked, false, false, result);\n }\n return [can, checked];\n }\n\n function createOneJson(parentValues, value, isOpen, checked, half, flag, result) {\n var node = self._getTreeNode(parentValues, value);\n result.push({\n id: node.id,\n pId: node.pId,\n text: node.text,\n value: node.value,\n title: node.title,\n isParent: node.getChildrenLength() > 0,\n open: isOpen,\n checked: checked,\n halfCheck: half,\n flag: flag\n });\n }\n\n function isHalf(parentValues, value) {\n var find = findSelectedObj(parentValues);\n if (find == null) {\n return null;\n }\n return BI.any(find, function (v, ob) {\n if (v === value) {\n if (ob != null && !BI.isEmpty(ob)) {\n return true;\n }\n }\n });\n }\n\n function isAllSelected(parentValues, value) {\n var find = findSelectedObj(parentValues);\n if (find == null) {\n return null;\n }\n return BI.any(find, function (v, ob) {\n if (v === value) {\n if (ob != null && BI.isEmpty(ob)) {\n return true;\n }\n }\n });\n }\n\n function isSelected(parentValues, value) {\n var find = findSelectedObj(parentValues);\n if (find == null) {\n return false;\n }\n return BI.any(find, function (v) {\n if (v === value) {\n return true;\n }\n });\n }\n\n function findSelectedObj(parentValues) {\n var find = selectedValues;\n if (find == null) {\n return null;\n }\n BI.every(parentValues, function (i, v) {\n find = find[v];\n if (find == null) {\n return false;\n }\n return true;\n });\n return find;\n }\n },\n\n _reqTreeNode: function (op, callback) {\n var self = this, o = this.options;\n var result = [];\n var times = op.times;\n var checkState = op.checkState || {};\n var parentValues = op.parentValues || [];\n var selectedValues = op.selectedValues || {};\n var valueMap = {};\n // if (judgeState(parentValues, selectedValues, checkState)) {\n valueMap = dealWithSelectedValue(parentValues, selectedValues);\n // }\n var nodes = this._getChildren(parentValues);\n for (var i = (times - 1) * this._const.perPage; nodes[i] && i < times * this._const.perPage; i++) {\n var state = getCheckState(nodes[i].value, parentValues, valueMap, checkState);\n result.push({\n id: nodes[i].id,\n pId: nodes[i].pId,\n value: nodes[i].value,\n text: nodes[i].text,\n times: 1,\n isParent: nodes[i].getChildrenLength() > 0,\n checked: state[0],\n halfCheck: state[1],\n open: o.open\n });\n }\n // 如果指定节点全部打开\n if (o.open) {\n var allNodes = [];\n // 获取所有节点\n BI.each(nodes, function (idx, node) {\n allNodes = BI.concat(allNodes, self._getAllChildren(parentValues.concat([node.value])));\n });\n BI.each(allNodes, function (idx, node) {\n var valueMap = dealWithSelectedValue(node.parentValues, selectedValues);\n // REPORT-24409 fix: 设置节点全部展开,添加的节点没有给状态\n var parentCheckState = {};\n var find = BI.find(result, function (idx, pNode) {\n return pNode.id === node.pId;\n });\n if (find) {\n parentCheckState.checked = find.halfCheck ? false : find.checked;\n parentCheckState.half = find.halfCheck;\n }\n var state = getCheckState(node.value, node.parentValues, valueMap, parentCheckState);\n result.push({\n id: node.id,\n pId: node.pId,\n value: node.value,\n text: node.text,\n times: 1,\n isParent: node.getChildrenLength() > 0,\n checked: state[0],\n halfCheck: state[1],\n open: self.options.open\n });\n });\n }\n // 深层嵌套的比较麻烦,这边先实现的是在根节点添加\n if (parentValues.length === 0 && times === 1) {\n result = BI.concat(self._getAddedValueNode(parentValues, selectedValues), result);\n }\n BI.nextTick(function () {\n callback({\n items: result,\n hasNext: nodes.length > times * self._const.perPage\n });\n });\n\n function judgeState(parentValues, selected_value, checkState) {\n var checked = checkState.checked, half = checkState.half;\n if (parentValues.length > 0 && !checked) {\n return false;\n }\n return (parentValues.length === 0 || (checked && half) && !BI.isEmpty(selected_value));\n }\n\n function dealWithSelectedValue(parentValues, selectedValues) {\n var valueMap = {};\n BI.each(parentValues, function (i, v) {\n selectedValues = selectedValues[v] || {};\n });\n BI.each(selectedValues, function (value, obj) {\n if (BI.isNull(obj)) {\n valueMap[value] = [0, 0];\n return;\n }\n if (BI.isEmpty(obj)) {\n valueMap[value] = [2, 0];\n return;\n }\n var nextNames = {};\n BI.each(obj, function (t, o) {\n if (BI.isNull(o) || BI.isEmpty(o)) {\n nextNames[t] = true;\n }\n });\n // valueMap的数组第一个参数为不选: 0, 半选: 1, 全选:2, 第二个参数为改节点下选中的子节点个数(子节点全选或者不存在)\n valueMap[value] = [1, BI.size(nextNames)];\n });\n return valueMap;\n }\n\n function getCheckState(current, parentValues, valueMap, checkState) {\n // 节点本身的checked和half优先级最高\n var checked = checkState.checked, half = checkState.half;\n var tempCheck = false, halfCheck = false;\n if (BI.has(valueMap, current)) {\n // 可能是半选\n if (valueMap[current][0] === 1) {\n var values = BI.clone(parentValues);\n values.push(current);\n var childCount = self._getChildCount(values);\n if (childCount > 0 && childCount !== valueMap[current][1]) {\n halfCheck = true;\n }\n } else if (valueMap[current][0] === 2) {\n tempCheck = true;\n }\n }\n var check;\n // 展开的节点checked为false 且没有明确得出当前子节点是半选或者全选, 则check状态取决于valueMap\n if (!checked && !halfCheck && !tempCheck) {\n check = BI.has(valueMap, current);\n } else {\n // 不是上面那种情况就先看在节点没有带有明确半选的时候,通过节点自身的checked和valueMap的状态能都得到选中信息\n check = ((tempCheck || checked) && !half) || BI.has(valueMap, current);\n }\n return [check, halfCheck];\n }\n },\n\n _getAddedValueNode: function (parentValues, selectedValues) {\n var nodes = this._getChildren(parentValues);\n return BI.map(BI.difference(BI.keys(selectedValues), BI.map(nodes, \"value\")), function (idx, v) {\n return {\n id: BI.UUID(),\n pId: nodes.length > 0 ? nodes[0].pId : BI.UUID(),\n value: v,\n text: v,\n times: 1,\n isParent: false,\n checked: true,\n halfCheck: false\n };\n });\n },\n\n _getNode: function (selectedValues, parentValues) {\n var pNode = selectedValues;\n for (var i = 0, len = parentValues.length; i < len; i++) {\n if (pNode == null) {\n return null;\n }\n pNode = pNode[parentValues[i]];\n }\n return pNode;\n },\n\n _deleteNode: function (selectedValues, values) {\n var name = values[values.length - 1];\n var p = values.slice(0, values.length - 1);\n var pNode = this._getNode(selectedValues, p);\n if (pNode != null && pNode[name]) {\n delete pNode[name];\n // 递归删掉空父节点\n while (p.length > 0 && BI.isEmpty(pNode)) {\n name = p[p.length - 1];\n p = p.slice(0, p.length - 1);\n pNode = this._getNode(selectedValues, p);\n if (pNode != null) {\n delete pNode[name];\n }\n }\n }\n },\n\n _buildTree: function (jo, values) {\n var t = jo;\n BI.each(values, function (i, v) {\n if (!BI.has(t, v)) {\n t[v] = {};\n }\n t = t[v];\n });\n },\n\n _isMatch: function (parentValues, value, keyword) {\n var o = this.options;\n var node = this._getTreeNode(parentValues, value);\n if (!node) {\n return false;\n }\n var find = BI.Func.getSearchResult([node.text || node.value], keyword);\n if(o.allowSearchValue && node.value) {\n var valueFind = BI.Func.getSearchResult([node.value], keyword);\n return valueFind.find.length > 0 || valueFind.match.length > 0 ||\n find.find.length > 0 || find.match.length > 0;\n }\n return find.find.length > 0 || find.match.length > 0;\n },\n\n _getTreeNode: function (parentValues, v) {\n var self = this;\n var findParentNode;\n var index = 0;\n this.tree.traverse(function (node) {\n if (self.tree.isRoot(node)) {\n return;\n }\n if (index > parentValues.length) {\n return false;\n }\n if (index === parentValues.length && node.value === v) {\n findParentNode = node;\n return false;\n }\n if (node.value === parentValues[index]) {\n index++;\n return;\n }\n return true;\n });\n return findParentNode;\n },\n\n _getChildren: function (parentValues) {\n if (parentValues.length > 0) {\n var value = BI.last(parentValues);\n var parent = this._getTreeNode(parentValues.slice(0, parentValues.length - 1), value);\n } else {\n var parent = this.tree.getRoot();\n }\n return parent.getChildren();\n },\n\n _getAllChildren: function(parentValues) {\n var children = this._getChildren(parentValues);\n var nodes = [].concat(children);\n BI.each(nodes, function (idx, node) {\n node.parentValues = parentValues;\n });\n var queue = BI.map(children, function (idx, node) {\n return {\n parentValues: parentValues,\n value: node.value\n };\n });\n while (BI.isNotEmptyArray(queue)) {\n var node = queue.shift();\n var pValues = (node.parentValues).concat(node.value);\n var childNodes = this._getChildren(pValues);\n BI.each(childNodes, function (idx, node) {\n node.parentValues = pValues;\n });\n queue = queue.concat(childNodes);\n nodes = nodes.concat(childNodes);\n }\n return nodes;\n },\n\n _getChildCount: function (parentValues) {\n return this._getChildren(parentValues).length;\n }\n});","BI.AbstractListTreeValueChooser = BI.inherit(BI.AbstractTreeValueChooser, {\n\n _reqDisplayTreeNode: function (op, callback) {\n var self = this;\n var result = {};\n var selectedValues = op.selectedValues;\n\n if (selectedValues == null || BI.isEmpty(selectedValues)) {\n callback({});\n return;\n }\n\n doCheck([], this.tree.getRoot(), selectedValues);\n\n callback({\n items: BI.values(result)\n });\n\n function doCheck(parentValues, node, selected) {\n BI.each(selected, function (idx, path) {\n BI.each(path, function (id, value) {\n var nodeValue = value;\n var node = self._getTreeNode(path.slice(0, id), nodeValue);\n // 找不到就是新增值\n if (BI.isNull(node)) {\n createOneJson({\n id: BI.UUID(),\n text: nodeValue,\n value: nodeValue,\n isLeaf: true\n }, BI.UUID());\n } else {\n if(!BI.has(result, node.id)) {\n createOneJson(node, node.parent && node.parent.id);\n }\n result[node.id].isLeaf !== true && (result[node.id].isLeaf = id === path.length - 1);\n }\n });\n });\n }\n\n function createOneJson(node, pId) {\n result[node.id] = {\n id: node.id,\n pId: pId,\n text: node.text,\n value: node.value,\n open: true,\n isLeaf: node.isLeaf\n };\n }\n },\n\n _reqInitTreeNode: function (op, callback) {\n var self = this;\n var result = [];\n var keyword = op.keyword || \"\";\n var selectedValues = op.selectedValues;\n var lastSearchValue = op.lastSearchValue || \"\"; // 一次请求100个,但是搜索是拿全部的,lastSearchValue是上一次遍历到的节点索引\n var output = search();\n BI.nextTick(function () {\n callback({\n hasNext: output.length > self._const.perPage,\n items: result,\n lastSearchValue: BI.last(output)\n });\n });\n\n function search() {\n var children = self._getChildren([]);\n var start = children.length;\n if (lastSearchValue !== \"\") {\n for (var j = 0, len = start; j < len; j++) {\n if (children[j].value === lastSearchValue) {\n start = j + 1;\n break;\n }\n }\n } else {\n start = 0;\n }\n var output = [];\n for (var i = start, len = children.length; i < len; i++) {\n if (output.length < self._const.perPage) {\n var find = nodeSearch(1, [], children[i].value, result);\n } else if (output.length === self._const.perPage) {\n var find = nodeSearch(1, [], children[i].value, []);\n }\n if (find[0] === true) {\n output.push(children[i].value);\n }\n if (output.length > self._const.perPage) {\n break;\n }\n }\n\n // 深层嵌套的比较麻烦,这边先实现的是在根节点添加\n if (op.times === 1) {\n var nodes = self._getAddedValueNode([], selectedValues);\n result = BI.concat(BI.filter(nodes, function (idx, node) {\n var find = BI.Func.getSearchResult([node.text || node.value], keyword);\n return find.find.length > 0 || find.match.length > 0;\n }), result);\n }\n return output;\n }\n\n function nodeSearch(deep, parentValues, current, result) {\n if (self._isMatch(parentValues, current, keyword)) {\n var checked = isSelected(parentValues, current);\n createOneJson(parentValues, current, false, checked, true, result);\n return [true, checked];\n }\n var newParents = BI.clone(parentValues);\n newParents.push(current);\n var children = self._getChildren(newParents);\n\n var can = false, checked = false;\n\n BI.each(children, function (i, child) {\n var state = nodeSearch(deep + 1, newParents, child.value, result);\n if (state[1] === true) {\n checked = true;\n }\n if (state[0] === true) {\n can = true;\n }\n });\n if (can === true) {\n checked = isSelected(parentValues, current);\n createOneJson(parentValues, current, true, checked, false, result);\n }\n return [can, checked];\n }\n\n function createOneJson(parentValues, value, isOpen, checked, flag, result) {\n var node = self._getTreeNode(parentValues, value);\n result.push({\n id: node.id,\n pId: node.pId,\n text: node.text,\n value: node.value,\n title: node.title,\n isParent: node.getChildrenLength() > 0,\n open: isOpen,\n checked: checked,\n halfCheck: false,\n flag: flag\n });\n }\n\n function isHalf(parentValues, value) {\n var find = findSelectedObj(parentValues);\n if (find == null) {\n return null;\n }\n return BI.any(find, function (v, ob) {\n if (v === value) {\n if (ob != null && !BI.isEmpty(ob)) {\n return true;\n }\n }\n });\n }\n\n function isAllSelected(parentValues, value) {\n var find = findSelectedObj(parentValues);\n if (find == null) {\n return null;\n }\n return BI.any(find, function (v, ob) {\n if (v === value) {\n if (ob != null && BI.isEmpty(ob)) {\n return true;\n }\n }\n });\n }\n\n function isSelected(parentValues, value) {\n return BI.any(selectedValues, function (idx, array) {\n return BI.isEqual(parentValues, array.slice(0, parentValues.length)) && BI.last(array) === value;\n });\n }\n\n function findSelectedObj(parentValues) {\n var find = selectedValues;\n if (find == null) {\n return null;\n }\n BI.every(parentValues, function (i, v) {\n find = find[v];\n if (find == null) {\n return false;\n }\n return true;\n });\n return find;\n }\n },\n\n _reqTreeNode: function (op, callback) {\n var self = this, o = this.options;\n var result = [];\n var times = op.times;\n var parentValues = op.parentValues || [];\n var selectedValues = op.selectedValues || [];\n var valueMap = dealWithSelectedValue(parentValues, selectedValues);\n var nodes = this._getChildren(parentValues);\n for (var i = (times - 1) * this._const.perPage; nodes[i] && i < times * this._const.perPage; i++) {\n var checked = BI.has(valueMap, nodes[i].value);\n result.push({\n id: nodes[i].id,\n pId: nodes[i].pId,\n value: nodes[i].value,\n text: nodes[i].text,\n times: 1,\n isParent: nodes[i].getChildrenLength() > 0,\n checked: checked,\n halfCheck: false,\n open: o.open\n });\n }\n // 如果指定节点全部打开\n if (o.open) {\n var allNodes = [];\n // 获取所有节点\n BI.each(nodes, function (idx, node) {\n allNodes = BI.concat(allNodes, self._getAllChildren(parentValues.concat([node.value])));\n });\n BI.each(allNodes, function (idx, node) {\n var valueMap = dealWithSelectedValue(node.parentValues, selectedValues);\n var checked = BI.has(valueMap, node.value);\n result.push({\n id: node.id,\n pId: node.pId,\n value: node.value,\n text: node.text,\n times: 1,\n isParent: node.getChildrenLength() > 0,\n checked: checked,\n halfCheck: false,\n open: o.open\n });\n });\n }\n // 深层嵌套的比较麻烦,这边先实现的是在根节点添加\n if (parentValues.length === 0 && times === 1) {\n result = BI.concat(self._getAddedValueNode(parentValues, selectedValues), result);\n }\n BI.nextTick(function () {\n callback({\n items: result,\n hasNext: nodes.length > times * self._const.perPage\n });\n });\n\n function dealWithSelectedValue(parentValues, selectedValues) {\n var valueMap = {};\n BI.each(selectedValues, function (idx, v) {\n if (BI.isEqual(parentValues, v.slice(0, parentValues.length))) {\n valueMap[BI.last(v)] = [2, 0];\n }\n });\n return valueMap;\n }\n },\n\n _getAddedValueNode: function (parentValues, selectedValues) {\n var nodes = this._getChildren(parentValues);\n var values = BI.flatten(BI.filter(selectedValues, function (idx, array) {\n return array.length === 1;\n }));\n return BI.map(BI.difference(values, BI.map(nodes, \"value\")), function (idx, v) {\n return {\n id: BI.UUID(),\n pId: nodes.length > 0 ? nodes[0].pId : BI.UUID(),\n value: v,\n text: v,\n times: 1,\n isParent: false,\n checked: true,\n halfCheck: false\n };\n });\n }\n});","/**\n * 简单的复选下拉树控件, 适用于数据量少的情况, 可以自增值\n *\n * Created by GUY on 2015/10/29.\n * @class BI.ListTreeValueChooserInsertCombo\n * @extends BI.Widget\n */\nBI.ListTreeValueChooserInsertCombo = BI.inherit(BI.AbstractListTreeValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.ListTreeValueChooserInsertCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-list-tree-value-chooser-insert-combo\",\n width: 200,\n height: 24,\n items: null,\n itemsCreator: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.ListTreeValueChooserInsertCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNotNull(o.items)) {\n this._initData(o.items);\n }\n this.combo = BI.createWidget({\n type: \"bi.multi_tree_list_combo\",\n element: this,\n text: o.text,\n value: o.value,\n watermark: o.watermark,\n allowInsertValue: o.allowInsertValue,\n allowEdit: o.allowEdit,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this),\n width: o.width,\n height: o.height,\n listeners: [{\n eventName: BI.MultiTreeListCombo.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiTreeListCombo.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.MultiTreeListCombo.EVENT_STOP,\n action: function () {\n self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_STOP);\n }\n }, {\n eventName: BI.MultiTreeListCombo.EVENT_CLICK_ITEM,\n action: function (v) {\n self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_CLICK_ITEM, v);\n }\n }, {\n eventName: BI.MultiTreeListCombo.EVENT_SEARCHING,\n action: function () {\n self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_SEARCHING);\n }\n }, {\n eventName: BI.MultiTreeListCombo.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.ListTreeValueChooserInsertCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n });\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n },\n\n getValue: function () {\n return this.combo.getValue();\n },\n\n populate: function (items) {\n this._initData(items);\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.ListTreeValueChooserInsertCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.ListTreeValueChooserInsertCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.ListTreeValueChooserInsertCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.ListTreeValueChooserInsertCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.ListTreeValueChooserInsertCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.ListTreeValueChooserInsertCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.ListTreeValueChooserInsertCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.list_tree_value_chooser_insert_combo\", BI.ListTreeValueChooserInsertCombo);","/**\n * 简单的复选下拉树控件, 适用于数据量少的情况, 可以自增值\n *\n * Created by GUY on 2015/10/29.\n * @class BI.TreeValueChooserInsertCombo\n * @extends BI.Widget\n */\nBI.TreeValueChooserInsertCombo = BI.inherit(BI.AbstractTreeValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.TreeValueChooserInsertCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-tree-value-chooser-insert-combo\",\n width: 200,\n height: 24,\n items: null,\n itemsCreator: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.TreeValueChooserInsertCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNotNull(o.items)) {\n this._initData(o.items);\n }\n this.combo = BI.createWidget({\n type: \"bi.multi_tree_insert_combo\",\n allowEdit: o.allowEdit,\n text: o.text,\n value: o.value,\n watermark: o.watermark,\n element: this,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this),\n width: o.width,\n height: o.height,\n listeners: [{\n eventName: BI.MultiTreeInsertCombo.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiTreeInsertCombo.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.MultiTreeInsertCombo.EVENT_STOP,\n action: function () {\n self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_STOP);\n }\n }, {\n eventName: BI.MultiTreeInsertCombo.EVENT_CLICK_ITEM,\n action: function (v) {\n self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_CLICK_ITEM, v);\n }\n }, {\n eventName: BI.MultiTreeInsertCombo.EVENT_SEARCHING,\n action: function () {\n self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_SEARCHING);\n }\n }, {\n eventName: BI.MultiTreeInsertCombo.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.TreeValueChooserInsertCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n });\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n },\n\n getValue: function () {\n return this.combo.getValue();\n },\n\n populate: function (items) {\n this._initData(items);\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.TreeValueChooserInsertCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.TreeValueChooserInsertCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.TreeValueChooserInsertCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.TreeValueChooserInsertCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.TreeValueChooserInsertCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.TreeValueChooserInsertCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.TreeValueChooserInsertCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.shortcut(\"bi.tree_value_chooser_insert_combo\", BI.TreeValueChooserInsertCombo);","/**\n * 简单的复选下拉树控件, 适用于数据量少的情况\n *\n * Created by GUY on 2015/10/29.\n * @class BI.TreeValueChooserCombo\n * @extends BI.Widget\n */\nBI.TreeValueChooserCombo = BI.inherit(BI.AbstractTreeValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.TreeValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-tree-value-chooser-combo\",\n width: 200,\n height: 24,\n items: null,\n itemsCreator: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.TreeValueChooserCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNotNull(o.items)) {\n this._initData(o.items);\n }\n this.combo = BI.createWidget({\n type: \"bi.multi_tree_combo\",\n text: o.text,\n allowEdit: o.allowEdit,\n value: o.value,\n watermark: o.watermark,\n element: this,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this),\n width: o.width,\n height: o.height,\n listeners: [{\n eventName: BI.MultiTreeCombo.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_STOP,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_STOP);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_CLICK_ITEM,\n action: function (v) {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_CLICK_ITEM, v);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_SEARCHING,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_SEARCHING);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_CONFIRM);\n }\n }, {\n eventName: BI.MultiTreeCombo.EVENT_BEFORE_POPUPVIEW,\n action: function () {\n self.fireEvent(BI.TreeValueChooserCombo.EVENT_BEFORE_POPUPVIEW);\n }\n }]\n });\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n },\n\n getValue: function () {\n return this.combo.getValue();\n },\n\n populate: function (items) {\n this._initData(items);\n this.combo.populate.apply(this.combo, arguments);\n }\n});\n\nBI.TreeValueChooserCombo.EVENT_BEFORE_POPUPVIEW = \"EVENT_BEFORE_POPUPVIEW\";\nBI.TreeValueChooserCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.TreeValueChooserCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.TreeValueChooserCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.TreeValueChooserCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.TreeValueChooserCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.TreeValueChooserCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.shortcut(\"bi.tree_value_chooser_combo\", BI.TreeValueChooserCombo);","/**\n * 简单的树面板, 适用于数据量少的情况\n *\n * Created by GUY on 2015/10/29.\n * @class BI.TreeValueChooserPane\n * @extends BI.AbstractTreeValueChooser\n */\nBI.TreeValueChooserPane = BI.inherit(BI.AbstractTreeValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.TreeValueChooserPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-tree-value-chooser-pane\",\n items: null,\n itemsCreator: BI.emptyFn\n });\n },\n\n _init: function () {\n BI.TreeValueChooserPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.pane = BI.createWidget({\n type: \"bi.multi_select_tree\",\n element: this,\n itemsCreator: BI.bind(this._itemsCreator, this)\n });\n\n this.pane.on(BI.MultiSelectTree.EVENT_CHANGE, function () {\n self.fireEvent(BI.TreeValueChooserPane.EVENT_CHANGE);\n });\n if (BI.isNotNull(o.items)) {\n this._initData(o.items);\n this.populate();\n }\n },\n\n setSelectedValue: function (v) {\n this.pane.setSelectedValue(v);\n },\n\n setValue: function (v) {\n this.pane.setValue(v);\n },\n\n getValue: function () {\n return this.pane.getValue();\n },\n\n populate: function () {\n this.pane.populate.apply(this.pane, arguments);\n }\n});\nBI.TreeValueChooserPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.tree_value_chooser_pane\", BI.TreeValueChooserPane);","/**\n * 简单的复选下拉框控件, 适用于数据量少的情况\n * 封装了字段处理逻辑\n *\n * Created by GUY on 2015/10/29.\n * @class BI.AbstractValueChooser\n * @extends BI.Widget\n */\nBI.AbstractValueChooser = BI.inherit(BI.Widget, {\n\n _const: {\n perPage: 100\n },\n\n _defaultConfig: function () {\n return BI.extend(BI.AbstractValueChooser.superclass._defaultConfig.apply(this, arguments), {\n items: null,\n itemsCreator: BI.emptyFn,\n cache: true\n });\n },\n\n _valueFormatter: function (v) {\n var text = v;\n if (BI.isNotNull(this.items)) {\n BI.some(this.items, function (i, item) {\n // 把value都换成字符串\n if (item.value === v || item.value + \"\" === v) {\n text = item.text;\n return true;\n }\n });\n }\n return text;\n },\n\n _getItemsByTimes: function (items, times) {\n var res = [];\n for (var i = (times - 1) * this._const.perPage; items[i] && i < times * this._const.perPage; i++) {\n res.push(items[i]);\n }\n return res;\n },\n\n _hasNextByTimes: function (items, times) {\n return times * this._const.perPage < items.length;\n },\n\n _itemsCreator: function (options, callback) {\n var self = this, o = this.options;\n if (!o.cache || !this.items) {\n o.itemsCreator({}, function (items) {\n self.items = items;\n call(items);\n });\n } else {\n call(this.items);\n }\n function call (items) {\n var keywords = (options.keywords || []).slice();\n var resultItems = items;\n if(BI.isNotEmptyArray(keywords)) {\n resultItems = [];\n BI.each(keywords, function (i, kw) {\n var search = BI.Func.getSearchResult(items, kw);\n resultItems = resultItems.concat(search.match).concat(search.find);\n });\n resultItems = BI.uniq(resultItems);\n }\n if (options.selectedValues) {// 过滤\n var filter = BI.makeObject(options.selectedValues, true);\n resultItems = BI.filter(resultItems, function (i, ob) {\n return !filter[ob.value];\n });\n }\n if (options.type === BI.MultiSelectCombo.REQ_GET_ALL_DATA) {\n callback({\n items: resultItems\n });\n return;\n }\n if (options.type === BI.MultiSelectCombo.REQ_GET_DATA_LENGTH) {\n callback({count: resultItems.length});\n return;\n }\n callback({\n items: self._getItemsByTimes(resultItems, options.times),\n hasNext: self._hasNextByTimes(resultItems, options.times)\n });\n }\n }\n});","/**\n * 简单的复选下拉框控件, 适用于数据量少的情况\n * 封装了字段处理逻辑\n */\nBI.ValueChooserInsertCombo = BI.inherit(BI.AbstractValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.ValueChooserInsertCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-value-chooser-insert-combo\",\n width: 200,\n height: 24,\n items: null,\n itemsCreator: BI.emptyFn,\n cache: true\n });\n },\n\n _init: function () {\n BI.ValueChooserInsertCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNotNull(o.items)) {\n this.items = o.items;\n }\n this.combo = BI.createWidget({\n type: \"bi.multi_select_insert_combo\",\n element: this,\n allowEdit: o.allowEdit,\n text: o.text,\n value: o.value,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this),\n width: o.width,\n height: o.height,\n listeners: [{\n eventName: BI.MultiSelectCombo.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.ValueChooserInsertCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.ValueChooserInsertCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_STOP,\n action: function () {\n self.fireEvent(BI.ValueChooserInsertCombo.EVENT_STOP);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_CLICK_ITEM,\n action: function () {\n self.fireEvent(BI.ValueChooserInsertCombo.EVENT_CLICK_ITEM);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_SEARCHING,\n action: function () {\n self.fireEvent(BI.ValueChooserInsertCombo.EVENT_SEARCHING);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.ValueChooserInsertCombo.EVENT_CONFIRM);\n }\n }]\n });\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n },\n\n getValue: function () {\n var val = this.combo.getValue() || {};\n return {\n type: val.type,\n value: val.value\n };\n },\n\n populate: function (items) {\n // 直接用combo的populate不会作用到AbstractValueChooser上\n this.items = items;\n this.combo.populate.apply(this, arguments);\n }\n});\n\nBI.ValueChooserInsertCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.ValueChooserInsertCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.ValueChooserInsertCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.ValueChooserInsertCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.ValueChooserInsertCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.ValueChooserInsertCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.shortcut(\"bi.value_chooser_insert_combo\", BI.ValueChooserInsertCombo);","/**\n * 简单的复选下拉框控件, 适用于数据量少的情况\n * 封装了字段处理逻辑\n *\n * Created by GUY on 2015/10/29.\n * @class BI.ValueChooserCombo\n * @extends BI.Widget\n */\nBI.ValueChooserCombo = BI.inherit(BI.AbstractValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.ValueChooserCombo.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-value-chooser-combo\",\n width: 200,\n height: 24,\n items: null,\n itemsCreator: BI.emptyFn,\n cache: true\n });\n },\n\n _init: function () {\n BI.ValueChooserCombo.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n if (BI.isNotNull(o.items)) {\n this.items = o.items;\n }\n this.combo = BI.createWidget({\n type: \"bi.multi_select_combo\",\n element: this,\n allowEdit: o.allowEdit,\n text: o.text,\n value: o.value,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this),\n width: o.width,\n height: o.height,\n listeners: [{\n eventName: BI.MultiSelectCombo.EVENT_FOCUS,\n action: function () {\n self.fireEvent(BI.ValueChooserCombo.EVENT_FOCUS);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_BLUR,\n action: function () {\n self.fireEvent(BI.ValueChooserCombo.EVENT_BLUR);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_STOP,\n action: function () {\n self.fireEvent(BI.ValueChooserCombo.EVENT_STOP);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_CLICK_ITEM,\n action: function () {\n self.fireEvent(BI.ValueChooserCombo.EVENT_CLICK_ITEM);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_SEARCHING,\n action: function () {\n self.fireEvent(BI.ValueChooserCombo.EVENT_SEARCHING);\n }\n }, {\n eventName: BI.MultiSelectCombo.EVENT_CONFIRM,\n action: function () {\n self.fireEvent(BI.ValueChooserCombo.EVENT_CONFIRM);\n }\n }]\n });\n },\n\n setValue: function (v) {\n this.combo.setValue(v);\n },\n\n getValue: function () {\n var val = this.combo.getValue() || {};\n return {\n type: val.type,\n value: val.value\n };\n },\n\n populate: function (items) {\n // 直接用combo的populate不会作用到AbstractValueChooser上\n this.items = items;\n this.combo.populate.apply(this, arguments);\n }\n});\n\nBI.ValueChooserCombo.EVENT_BLUR = \"EVENT_BLUR\";\nBI.ValueChooserCombo.EVENT_FOCUS = \"EVENT_FOCUS\";\nBI.ValueChooserCombo.EVENT_STOP = \"EVENT_STOP\";\nBI.ValueChooserCombo.EVENT_SEARCHING = \"EVENT_SEARCHING\";\nBI.ValueChooserCombo.EVENT_CLICK_ITEM = \"EVENT_CLICK_ITEM\";\nBI.ValueChooserCombo.EVENT_CONFIRM = \"EVENT_CONFIRM\";\nBI.shortcut(\"bi.value_chooser_combo\", BI.ValueChooserCombo);","/**\n * 简单的复选面板, 适用于数据量少的情况\n * 封装了字段处理逻辑\n *\n * Created by GUY on 2015/10/29.\n * @class BI.ValueChooserPane\n * @extends BI.Widget\n */\nBI.ValueChooserPane = BI.inherit(BI.AbstractValueChooser, {\n\n _defaultConfig: function () {\n return BI.extend(BI.ValueChooserPane.superclass._defaultConfig.apply(this, arguments), {\n baseCls: \"bi-value-chooser-pane\",\n items: null,\n itemsCreator: BI.emptyFn,\n cache: true\n });\n },\n\n _init: function () {\n BI.ValueChooserPane.superclass._init.apply(this, arguments);\n var self = this, o = this.options;\n this.list = BI.createWidget({\n type: \"bi.multi_select_list\",\n element: this,\n value: o.value,\n itemsCreator: BI.bind(this._itemsCreator, this),\n valueFormatter: BI.bind(this._valueFormatter, this)\n });\n\n this.list.on(BI.MultiSelectList.EVENT_CHANGE, function () {\n self.fireEvent(BI.ValueChooserPane.EVENT_CHANGE);\n });\n if (BI.isNotNull(o.items)) {\n this.items = o.items;\n this.list.populate();\n }\n },\n\n setValue: function (v) {\n this.list.setValue(v);\n },\n\n getValue: function () {\n var val = this.list.getValue() || {};\n return {\n type: val.type,\n value: val.value\n };\n },\n\n populate: function (items) {\n // 直接用combo的populate不会作用到AbstractValueChooser上\n items && (this.items = items);\n this.list.populate.apply(this.list, arguments);\n }\n});\nBI.ValueChooserPane.EVENT_CHANGE = \"EVENT_CHANGE\";\nBI.shortcut(\"bi.value_chooser_pane\", BI.ValueChooserPane);","import fineui from \"./index\";\n\nBI.extend(BI, fineui);\n","import { _Combo, _ComboStatic } from \"./base/combination/combo\";\nimport { _ButtonGroup, _ButtonGroupChooseType, _ButtonGroupStatic } from \"./base/combination/group.button\";\nimport { _Tab, _TabStatic } from \"./base/combination/tab\";\nimport { _Pane, _PaneStatic } from \"./base/pane\";\nimport { _BasicButton, _BasicButtonStatic } from \"./base/single/button/button.basic\";\nimport { _NodeButton } from \"./base/single/button/button.node\";\nimport { _Button, _ButtonStatic } from \"./base/single/button/buttons/button\";\nimport { _TextButton, _TextButtonStatic } from \"./base/single/button/buttons/button.text\";\nimport { _IconTextItem, _IconTextItemStatic } from \"./base/single/button/listitem/icontextitem\";\nimport { _Editor, _EditorStatic } from \"./base/single/editor/editor\";\nimport { _Iframe } from \"./base/single/iframe/iframe\";\nimport { _Checkbox, _CheckboxStatic } from \"./base/single/input/checkbox\";\nimport { _AbstractLabel } from \"./base/single/label/abstract.label\";\nimport { _Label } from \"./base/single/label/label\";\nimport { _Single } from \"./base/single/single\";\nimport { _Text } from \"./base/single/text\";\nimport { _Trigger } from \"./base/single/trigger/trigger\";\nimport { _IconChangeButton, _IconChangeButtonStatic } from \"./case/button/icon/icon.change\";\nimport { _MultiSelectItem, _MultiSelectItemStatic } from \"./case/button/item.multiselect\";\nimport { _BubbleCombo, _BubbleComboStatic } from \"./case/combo/bubblecombo/combo.bubble\";\nimport { _TextValueCombo, _TextValueComboStatic } from \"./case/combo/combo.textvalue\";\nimport { _SignEditor, _SignEditorStatic } from \"./case/editor/editor.sign\";\nimport { _LoadingPane } from \"./case/loading/loading_pane\";\nimport { _AllValueMultiTextValueCombo, _AllValueMultiTextValueComboStatic } from \"./component/allvaluemultitextvaluecombo/allvalue.multitextvalue.combo\";\nimport { _AbstractTreeValueChooser } from \"./component/treevaluechooser/abstract.treevaluechooser\";\nimport { _AbstractListTreeValueChooser } from \"./component/treevaluechooser/abstract.treevaluechooser.list\";\nimport { _Action, _ActionFactory } from \"./core/action/action\";\nimport { _ShowAction } from \"./core/action/action.show\";\nimport { _base } from \"./core/base\";\nimport { _Behavior, _BehaviorFactory } from \"./core/behavior/behavior\";\nimport { _HighlightBehavior } from \"./core/behavior/behavior.highlight\";\nimport { _RedMarkBehavior } from \"./core/behavior/behavior.redmark\";\nimport * as decorator from \"./core/decorator/decorator\";\nimport { _func } from \"./core/func\";\nimport { _i18n } from \"./core/i18n\";\nimport { _OB } from \"./core/ob\";\nimport { _Widget, _WidgetStatic } from \"./core/widget\";\nimport { _Layout } from \"./core/wrapper/layout\";\nimport { _AbsoluteLayout } from \"./core/wrapper/layout/layout.absolute\";\nimport { _HTapeLayout, _VTapeLayout } from \"./core/wrapper/layout/layout.tape\";\nimport { _VerticalLayout } from \"./core/wrapper/layout/layout.vertical\";\nimport { _DownListCombo, _DownListComboStatic } from \"./widget/downlist/combo.downlist\";\n\n\ntype ClassConstructor<T extends {}> = T & {\n new(config: any): T;\n (config: any): T;\n readonly prototype: T;\n}\n\nexport interface BI extends _func, _i18n, _base {\n OB: ClassConstructor<_OB>;\n Widget: ClassConstructor<_Widget> & _WidgetStatic;\n Single: ClassConstructor<_Single>;\n BasicButton: ClassConstructor<_BasicButton> & _BasicButtonStatic;\n NodeButton: ClassConstructor<_NodeButton>;\n Checkbox: ClassConstructor<_Checkbox> & _CheckboxStatic;\n Button: ClassConstructor<_Button> & _ButtonStatic;\n TextButton: ClassConstructor<_TextButton> & _TextButtonStatic;\n IconChangeButton: ClassConstructor<_IconChangeButton> & _IconChangeButtonStatic;\n Trigger: ClassConstructor<_Trigger>;\n Action: ClassConstructor<_Action>;\n ActionFactory: ClassConstructor<_ActionFactory>;\n ShowAction: ClassConstructor<_ShowAction>;\n Behavior: ClassConstructor<_Behavior>;\n BehaviorFactory: ClassConstructor<_BehaviorFactory>;\n HighlightBehavior: ClassConstructor<_HighlightBehavior>;\n RedMarkBehavior: ClassConstructor<_RedMarkBehavior>;\n Pane: ClassConstructor<_Pane> & _PaneStatic;\n LoadingPane: ClassConstructor<_LoadingPane>;\n Tab: ClassConstructor<_Tab> & _TabStatic;\n ButtonGroup: ClassConstructor<_ButtonGroup> & _ButtonGroupChooseType & _ButtonGroupStatic;\n Combo: ClassConstructor<_Combo> & _ComboStatic;\n TextValueCombo: ClassConstructor<_TextValueCombo> & _TextValueComboStatic;\n BubbleCombo: ClassConstructor<_BubbleCombo> & _BubbleComboStatic;\n AllValueMultiTextValueCombo: ClassConstructor<_AllValueMultiTextValueCombo> & _AllValueMultiTextValueComboStatic;\n IconTextItem: ClassConstructor<_IconTextItem> & _IconTextItemStatic;\n MultiSelectItem: ClassConstructor<_MultiSelectItem> & _MultiSelectItemStatic;\n AbstractLabel: ClassConstructor<_AbstractLabel>;\n Label: ClassConstructor<_Label>;\n Text: ClassConstructor<_Text>;\n Editor: ClassConstructor<_Editor> & _EditorStatic;\n SignEditor: ClassConstructor<_SignEditor> & _SignEditorStatic;\n Layout: ClassConstructor<_Layout>;\n HTapeLayout: ClassConstructor<_HTapeLayout>;\n VTapeLayout: ClassConstructor<_VTapeLayout>;\n AbstractTreeValueChooser: ClassConstructor<_AbstractTreeValueChooser>;\n AbstractListTreeValueChooser: ClassConstructor<_AbstractListTreeValueChooser>;\n Decorators: typeof decorator;\n DownListCombo: ClassConstructor<_DownListCombo> & _DownListComboStatic;\n Iframe: ClassConstructor<_Iframe>;\n AbsoluteLayout: ClassConstructor<_AbsoluteLayout>;\n VerticalLayout: ClassConstructor<_VerticalLayout>;\n}\n\nexport default {\n Decorators: decorator,\n};\n","export type Constructor<T> = new(...args: any[]) => T;\n\n/**\n * 注册widget\n */\nexport function shortcut() {\n return function decorator<U>(Target: Constructor<U> & {xtype: string}): void {\n BI.shortcut(Target.xtype, Target);\n };\n}\n\n/**\n * 注册model\n */\nexport function model() {\n return function decorator<U extends {new(...args:any[]):{}} & {xtype: string, context?: ReadonlyArray<string>}>(Target: U): void {\n BI.model(Target.xtype, Target);\n };\n}\n\n/**\n * 类注册_store属性\n * @param Model model类\n * @param opts 额外条件\n */\nexport function store<T>(Model: Constructor<T> & {xtype: string}, opts: { props?(this: unknown): { [key: string]: unknown } } = {}) {\n return function classDecorator<U extends {new(...args:any[]):{}}>(constructor:U) {\n return class extends constructor {\n _store() {\n const props = opts.props ? opts.props.apply(this) : undefined;\n\n return BI.Models.getModel(Model.xtype, props);\n }\n };\n };\n}\n\n/**\n * Model基类\n */\nexport class Model<U extends {types?: {[key: string]: unknown} | {}, context?: ReadonlyArray<string>} = {}> extends Fix.Model {\n // @ts-ignore this[\"computed\"][key]为空\n model: Pick<{[key in keyof U[\"types\"]]: U[\"types\"][key]}, U[\"context\"][number]> & {[key in keyof ReturnType<this[\"state\"]>]: ReturnType<this[\"state\"]>[key]} & {[key in keyof this[\"computed\"]]: ReturnType<this[\"computed\"][key]>};\n\n store: this[\"actions\"];\n\n state(): {[key: string]: unknown} | {} {\n return {};\n }\n\n context: U[\"context\"];\n\n actions:{[key: string]: (...args: any[]) => any};\n\n childContext: ReadonlyArray<keyof (this[\"computed\"] & ReturnType<this[\"state\"]>)>;\n\n // @ts-ignore this[\"computed\"][key]为空\n TYPE: Pick<{[key in keyof this[\"computed\"]]: ReturnType<this[\"computed\"][key]>} & {[key in keyof ReturnType<this[\"state\"]>]: ReturnType<this[\"state\"]>[key]}, this[\"childContext\"][number]>;\n\n computed: {[key: string]: () => unknown} | {};\n}\n\n/* 分享一段很好看的代码\n// union to intersection of functions\ntype UnionToIoF<U> =\n (U extends any ? (k: (x: U) => void) => void : never) extends\n ((k: infer I) => void) ? I : never\n\n// return last element from Union\ntype UnionPop<U> = UnionToIoF<U> extends { (a: infer A): void; } ? A : never;\n\n// prepend an element to a tuple.\ntype Prepend<U, T extends ReadonlyArray<any>> =\n ((a: U, ...r: T) => void) extends (...r: infer R) => void ? R : never;\n\ntype UnionToTupleRecursively<Union, Result extends ReadonlyArray<any>> = {\n 1: Result;\n 0: UnionToTupleRecursively_<Union, UnionPop<Union>, Result>;\n // 0: UnionToTupleRecursively<Exclude<Union, UnionPop<Union>>, Prepend<UnionPop<Union>, Result>>\n}[[Union] extends [never] ? 1 : 0];\n\ntype UnionToTupleRecursively_<Union, Element, Result extends ReadonlyArray<any>> =\n UnionToTupleRecursively<Exclude<Union, Element>, Prepend<Element, Result>>;\n\ntype UnionToTuple<U> = UnionToTupleRecursively<U, []>;\n*/\n","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : typeof define === 'function' && define.amd ? define(['exports'], factory) : factory(global.Fix = global.Fix || {});\n})(this, function (exports) {\n 'use strict';\n\n function noop(a, b, c) {}\n\n function isNative(Ctor) {\n return typeof Ctor === 'function' && /native code/.test(Ctor.toString());\n }\n\n var rhashcode = /\\d\\.\\d{4}/;\n\n //生成UUID http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript\n function makeHashCode(prefix) {\n /* istanbul ignore next*/\n prefix = prefix || 'bi';\n /* istanbul ignore next*/\n return String(Math.random() + Math.random()).replace(rhashcode, prefix);\n }\n\n var hasProto = '__proto__' in {};\n\n var isIE = function isIE() {\n if (typeof navigator === \"undefined\") {\n return false;\n }\n return (/(msie|trident)/i.test(navigator.userAgent.toLowerCase())\n );\n };\n\n var getIEVersion = function getIEVersion() {\n var version = 0;\n if (typeof navigator === \"undefined\") {\n return false;\n }\n var agent = navigator.userAgent.toLowerCase();\n var v1 = agent.match(/(?:msie\\s([\\w.]+))/);\n var v2 = agent.match(/(?:trident.*rv:([\\w.]+))/);\n if (v1 && v2 && v1[1] && v2[1]) {\n version = Math.max(v1[1] * 1, v2[1] * 1);\n } else if (v1 && v1[1]) {\n version = v1[1] * 1;\n } else if (v2 && v2[1]) {\n version = v2[1] * 1;\n } else {\n version = 0;\n }\n return version;\n };\n var isIE9Below = isIE() && getIEVersion() < 9;\n\n var _toString = Object.prototype.toString;\n\n function isPlainObject(obj) {\n return _toString.call(obj) === '[object Object]';\n }\n\n function isConfigurable(obj, key) {\n var configurable = true;\n var property = Object.getOwnPropertyDescriptor && Object.getOwnPropertyDescriptor(obj, key);\n if (property && property.configurable === false) {\n configurable = false;\n }\n return configurable;\n }\n\n function isExtensible(obj) {\n if (Object.isExtensible) {\n return Object.isExtensible(obj);\n }\n var name = '';\n while (obj.hasOwnProperty(name)) {\n name += '?';\n }\n obj[name] = true;\n var returnValue = obj.hasOwnProperty(name);\n delete obj[name];\n return returnValue;\n }\n\n function remove(arr, item) {\n if (arr && arr.length) {\n var _index = arr.indexOf(item);\n if (_index > -1) {\n return arr.splice(_index, 1);\n }\n }\n }\n\n var bailRE = /[^\\w.$]/;\n\n function parsePath(path) {\n if (bailRE.test(path)) {\n return;\n }\n var segments = path.split('.');\n return function (obj) {\n for (var i = 0; i < segments.length; i++) {\n if (!obj) return;\n obj = obj[segments[i]];\n }\n return obj;\n };\n }\n\n var nextTick = function () {\n var callbacks = [];\n var pending = false;\n var timerFunc = void 0;\n\n function nextTickHandler() {\n pending = false;\n var copies = callbacks.slice(0);\n callbacks.length = 0;\n for (var i = 0; i < copies.length; i++) {\n copies[i]();\n }\n }\n\n // An asynchronous deferring mechanism.\n // In pre 2.4, we used to use microtasks (Promise/MutationObserver)\n // but microtasks actually has too high a priority and fires in between\n // supposedly sequential events (e.g. #4521, #6690) or even between\n // bubbling of the same event (#6566). Technically setImmediate should be\n // the ideal choice, but it's not available everywhere; and the only polyfill\n // that consistently queues the callback after all DOM events triggered in the\n // same loop is by using MessageChannel.\n /* istanbul ignore if */\n if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) {\n timerFunc = function timerFunc() {\n setImmediate(nextTickHandler);\n };\n } else if (typeof MessageChannel !== 'undefined' && (isNative(MessageChannel) ||\n // PhantomJS\n MessageChannel.toString() === '[object MessageChannelConstructor]')) {\n var channel = new MessageChannel();\n var port = channel.port2;\n channel.port1.onmessage = nextTickHandler;\n timerFunc = function timerFunc() {\n port.postMessage(1);\n };\n } else\n /* istanbul ignore next */\n if (typeof Promise !== 'undefined' && isNative(Promise)) {\n // use microtask in non-DOM environments, e.g. Weex\n var p = Promise.resolve();\n timerFunc = function timerFunc() {\n p.then(nextTickHandler);\n };\n } else {\n // fallback to setTimeout\n timerFunc = function timerFunc() {\n setTimeout(nextTickHandler, 0);\n };\n }\n\n return function queueNextTick(cb, ctx) {\n var _resolve = void 0;\n callbacks.push(function () {\n if (cb) {\n try {\n cb.call(ctx);\n } catch (e) {\n console.error(e);\n }\n } else if (_resolve) {\n _resolve(ctx);\n }\n });\n if (!pending) {\n pending = true;\n timerFunc();\n }\n // $flow-disable-line\n if (!cb && typeof Promise !== 'undefined') {\n return new Promise(function (resolve, reject) {\n _resolve = resolve;\n });\n }\n };\n }();\n\n var falsy;\n var $$skipArray = {\n __ob__: falsy,\n $accessors: falsy,\n $vbthis: falsy,\n $vbsetter: falsy\n };\n\n var uid = 0;\n\n /**\n * A dep is an observable that can have multiple\n * directives subscribing to it.\n */\n\n var Dep = function () {\n function Dep() {\n _classCallCheck(this, Dep);\n\n this.id = uid++;\n this.subs = [];\n }\n\n Dep.prototype.addSub = function addSub(sub) {\n this.subs.push(sub);\n };\n\n Dep.prototype.removeSub = function removeSub(sub) {\n remove(this.subs, sub);\n };\n\n Dep.prototype.depend = function depend() {\n if (Dep.target) {\n Dep.target.addDep(this);\n }\n };\n\n Dep.prototype.notify = function notify(options) {\n // stabilize the subscriber list first\n var subs = this.subs.slice();\n for (var i = 0, l = subs.length; i < l; i++) {\n subs[i].update(options);\n }\n };\n\n return Dep;\n }();\n\n // the current target watcher being evaluated.\n // this is globally unique because there could be only one\n // watcher being evaluated at any time.\n\n\n Dep.target = null;\n var targetStack = [];\n\n function pushTarget(_target) {\n if (Dep.target) targetStack.push(Dep.target);\n Dep.target = _target;\n }\n\n function popTarget() {\n Dep.target = targetStack.pop();\n }\n\n var arrayProto = Array.prototype;\n var arrayMethods = [];\n _.each(['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'], function (method) {\n var original = arrayProto[method];\n arrayMethods[method] = function mutator() {\n for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var ob = this.__ob__;\n var inserted = void 0;\n switch (method) {\n case 'push':\n case 'unshift':\n inserted = args;\n break;\n case 'splice':\n inserted = args.slice(2);\n break;\n }\n if (inserted) inserted = ob.observeArray(inserted);\n switch (method) {\n case 'push':\n case 'unshift':\n args = inserted;\n break;\n case 'splice':\n args = [args[0], args[1]].concat(inserted ? inserted : []);\n break;\n }\n var result = original.apply(this, args);\n notify(ob.parent, ob.parentKey, ob.dep, true);\n return result;\n };\n });\n\n //如果浏览器不支持ecma262v5的Object.defineProperties或者存在BUG,比如IE8\n //标准浏览器使用__defineGetter__, __defineSetter__实现\n var canHideProperty = true;\n try {\n Object.defineProperty({}, '_', {\n value: 'x'\n });\n delete $$skipArray.$vbsetter;\n delete $$skipArray.$vbthis;\n } catch (e) {\n /* istanbul ignore next*/\n canHideProperty = false;\n }\n\n var createViewModel = Object.defineProperties;\n var defineProperty = void 0;\n\n var timeBucket = new Date() - 0;\n /* istanbul ignore if*/\n if (!canHideProperty) {\n if ('__defineGetter__' in {}) {\n defineProperty = function defineProperty(obj, prop, desc) {\n if ('value' in desc) {\n obj[prop] = desc.value;\n }\n if ('get' in desc) {\n obj.__defineGetter__(prop, desc.get);\n }\n if ('set' in desc) {\n obj.__defineSetter__(prop, desc.set);\n }\n return obj;\n };\n createViewModel = function createViewModel(obj, descs) {\n for (var prop in descs) {\n if (descs.hasOwnProperty(prop)) {\n defineProperty(obj, prop, descs[prop]);\n }\n }\n return obj;\n };\n }\n /* istanbul ignore if*/\n if (isIE9Below) {\n var VBClassPool = {};\n window.execScript([// jshint ignore:line\n 'Function parseVB(code)', '\\tExecuteGlobal(code)', 'End Function' //转换一段文本为VB代码\n ].join('\\n'), 'VBScript');\n\n var VBMediator = function VBMediator(instance, accessors, name, value) {\n // jshint ignore:line\n var accessor = accessors[name];\n if (arguments.length === 4) {\n accessor.set.call(instance, value);\n } else {\n return accessor.get.call(instance);\n }\n };\n createViewModel = function createViewModel(name, accessors, properties) {\n // jshint ignore:line\n var buffer = [];\n buffer.push('\\tPrivate [$vbsetter]', '\\tPublic [$accessors]', '\\tPublic Default Function [$vbthis](ac' + timeBucket + ', s' + timeBucket + ')', '\\t\\tSet [$accessors] = ac' + timeBucket + ': set [$vbsetter] = s' + timeBucket, '\\t\\tSet [$vbthis] = Me', //链式调用\n '\\tEnd Function');\n //添加普通属性,因为VBScript对象不能像JS那样随意增删属性,必须在这里预先定义好\n var uniq = {\n $vbthis: true,\n $vbsetter: true,\n $accessors: true\n };\n for (name in $$skipArray) {\n if (!uniq[name]) {\n buffer.push('\\tPublic [' + name + ']');\n uniq[name] = true;\n }\n }\n //添加访问器属性\n for (name in accessors) {\n if (uniq[name]) {\n continue;\n }\n uniq[name] = true;\n buffer.push(\n //由于不知对方会传入什么,因此set, let都用上\n '\\tPublic Property Let [' + name + '](val' + timeBucket + ')', //setter\n '\\t\\tCall [$vbsetter](Me, [$accessors], \"' + name + '\", val' + timeBucket + ')', '\\tEnd Property', '\\tPublic Property Set [' + name + '](val' + timeBucket + ')', //setter\n '\\t\\tCall [$vbsetter](Me, [$accessors], \"' + name + '\", val' + timeBucket + ')', '\\tEnd Property', '\\tPublic Property Get [' + name + ']', //getter\n '\\tOn Error Resume Next', //必须优先使用set语句,否则它会误将数组当字符串返回\n '\\t\\tSet[' + name + '] = [$vbsetter](Me, [$accessors],\"' + name + '\")', '\\tIf Err.Number <> 0 Then', '\\t\\t[' + name + '] = [$vbsetter](Me, [$accessors],\"' + name + '\")', '\\tEnd If', '\\tOn Error Goto 0', '\\tEnd Property');\n }\n\n for (name in properties) {\n if (!uniq[name]) {\n uniq[name] = true;\n buffer.push('\\tPublic [' + name + ']');\n }\n }\n\n buffer.push('\\tPublic [hasOwnProperty]');\n buffer.push('End Class');\n var body = buffer.join('\\r\\n');\n var className = VBClassPool[body];\n if (!className) {\n className = makeHashCode('VBClass');\n window.parseVB('Class ' + className + body);\n window.parseVB(['Function ' + className + 'Factory(acc, vbm)', //创建实例并传入两个关键的参数\n '\\tDim o', '\\tSet o = (New ' + className + ')(acc, vbm)', '\\tSet ' + className + 'Factory = o', 'End Function'].join('\\r\\n'));\n VBClassPool[body] = className;\n }\n var ret = window[className + 'Factory'](accessors, VBMediator); //得到其产品\n return ret; //得到其产品\n };\n }\n }\n\n var createViewModel$1 = createViewModel;\n\n var arrayKeys = _.keys(arrayMethods);\n\n var observerState = {\n shouldConvert: true\n };\n\n function def(obj, key, val, enumerable) {\n Object.defineProperty(obj, key, {\n value: val,\n enumerable: !!enumerable,\n writable: true,\n configurable: true\n });\n }\n\n /**\n * Observer class that are attached to each observed\n * object. Once attached, the observer converts target\n * object's property keys into getter/setters that\n * collect dependencies and dispatches updates.\n */\n\n var Observer = function () {\n function Observer(value) {\n _classCallCheck(this, Observer);\n\n this.value = value;\n this.dep = new Dep();\n this.vmCount = 0;\n if (_.isArray(value)) {\n var augment = hasProto ? protoAugment : copyAugment;\n augment(value, arrayMethods, arrayKeys);\n this.model = this.observeArray(value);\n } else {\n this.model = this.walk(value);\n }\n if (isIE9Below) {\n this.model['__ob__'] = this;\n } else {\n def(this.model, \"__ob__\", this);\n }\n }\n\n Observer.prototype.walk = function walk(obj) {\n return defineReactive(obj, this);\n };\n\n Observer.prototype.observeArray = function observeArray(items) {\n for (var i = 0, l = items.length; i < l; i++) {\n var ob = observe(items[i], this, i);\n items[i] = ob ? ob.model : items[i];\n }\n return items;\n };\n\n return Observer;\n }();\n\n function protoAugment(target, src, keys) {\n /* eslint-disable no-proto */\n target.__proto__ = src;\n /* eslint-enable no-proto */\n }\n\n /* istanbul ignore next */\n function copyAugment(target, src, keys) {\n for (var i = 0, l = keys.length; i < l; i++) {\n var key = keys[i];\n target[key] = src[key];\n }\n }\n\n function observe(value, parentObserver, parentKey) {\n if (!_.isObject(value)) {\n return;\n }\n var ob = void 0;\n if (value.__ob__ instanceof Observer) {\n ob = value.__ob__;\n } else if (observerState.shouldConvert && isExtensible(value) && (_.isArray(value) || isPlainObject(value))) {\n ob = new Observer(value);\n }\n if (ob) {\n ob.parent = parentObserver || ob.parent;\n ob.parentKey = parentKey;\n }\n return ob;\n }\n\n function notify(observer, key, dep, refresh) {\n dep.notify({ observer: observer, key: key, refresh: refresh });\n if (observer) {\n //触发a.*绑定的依赖\n _.each(observer._deps, function (dep) {\n dep.notify({ observer: observer, key: key });\n });\n //触发a.**绑定的依赖\n var parent = observer,\n root = observer,\n route = key || \"\";\n while (parent) {\n _.each(parent._scopeDeps, function (dep) {\n dep.notify({ observer: observer, key: key });\n });\n if (parent.parentKey != null) {\n route = parent.parentKey + '.' + route;\n }\n root = parent;\n parent = parent.parent;\n }\n for (var _key2 in root._globalDeps) {\n var reg = new RegExp(_key2);\n if (reg.test(route)) {\n root._globalDeps[_key2].notify({ observer: observer, key: _key2 });\n }\n }\n }\n }\n\n function defineReactive(obj, observer, shallow) {\n var props = {};\n var model = void 0;\n // if (typeof Proxy === 'function') {\n // const deps = {}, childObs = {}, cache = {}\n // _.each(obj, function (val, key) {\n // if (key in $$skipArray) {\n // return\n // }\n // cache[key] = val\n // const dep = deps[key] = (observer && observer['__dep' + key]) || new Dep()\n // observer && (observer['__dep' + key] = dep)\n // childObs[key] = !shallow && observe(val, observer, key)\n // })\n // return model = new Proxy(props, {\n // has: function (target, key) {\n // return key in obj;\n // },\n // get: function (target, key) {\n // if (key in $$skipArray) {\n // return target[key]\n // }\n // const value = cache[key]\n // if (Dep.target) {\n // deps[key].depend()\n // if (childObs[key]) {\n // childObs[key].dep.depend()\n // if (_.isArray(value)) {\n // dependArray(value)\n // }\n // }\n // }\n // return value\n // },\n // set: function (target, key, newVal) {\n // if (key in $$skipArray) {\n // return target[key] = newVal\n // }\n // const value = cache[key], dep = deps[key]\n // if (newVal === value || (newVal !== newVal && value !== value)) {\n // return newVal\n // }\n // cache[key] = newVal\n // childObs[key] = !shallow && observe(newVal, observer, key)\n // obj[key] = childObs[key] ? childObs[key].model : newVal\n // notify(model, key, dep)\n // return obj[key]\n // }\n // })\n // }\n _.each(obj, function (val, key) {\n if (key in $$skipArray) {\n return;\n }\n var configurable = isConfigurable(obj, key);\n var dep = observer && observer['__dep' + key] || new Dep();\n observer && (observer['__dep' + key] = dep);\n var childOb = configurable && !shallow && observe(val, observer, key);\n props[key] = {\n enumerable: true,\n configurable: true,\n get: function reactiveGetter() {\n var value = childOb ? childOb.model : val;\n if (Dep.target) {\n dep.depend();\n if (childOb) {\n childOb.dep.depend();\n if (_.isArray(value)) {\n dependArray(value);\n }\n }\n }\n return value;\n },\n set: function reactiveSetter(newVal) {\n var value = childOb ? childOb.model : val;\n if (newVal === value || newVal !== newVal && value !== value) {\n return;\n }\n val = newVal;\n childOb = configurable && !shallow && observe(newVal, observer, key);\n if (childOb && value && value.__ob__) {\n childOb._scopeDeps = value.__ob__._scopeDeps;\n childOb._deps = value.__ob__._deps;\n }\n obj[key] = childOb ? childOb.model : newVal;\n notify(model.__ob__, key, dep);\n }\n };\n });\n return model = createViewModel$1(obj, props);\n }\n\n /**\n * Set a property on an object. Adds the new property and\n * triggers change notification if the property doesn't\n * already exist.\n */\n function set(target, key, val) {\n if (_.isArray(target)) {\n target.length = Math.max(target.length, key);\n target.splice(key, 1, val);\n return val;\n }\n if (_.has(target, key)) {\n target[key] = val;\n return val;\n }\n var ob = target.__ob__;\n if (!ob) {\n target[key] = val;\n return val;\n }\n ob.value[key] = val;\n target = defineReactive(ob.value, ob);\n notify(ob, key, ob.dep);\n return target;\n }\n\n /**\n * Delete a property and trigger change if necessary.\n */\n function del(target, key) {\n if (_.isArray(target)) {\n target.splice(key, 1);\n return;\n }\n var ob = target.__ob__;\n if (!_.has(target, key)) {\n return;\n }\n if (!ob) {\n delete target[key];\n return target;\n }\n delete ob.value[key];\n target = defineReactive(ob.value, ob);\n notify(ob, key, ob.dep);\n return target;\n }\n\n /**\n * Collect dependencies on array elements when the array is touched, since\n * we cannot intercept array element access like property getters.\n */\n function dependArray(value) {\n for (var e, i = 0, l = value.length; i < l; i++) {\n e = value[i];\n e && e.__ob__ && e.__ob__.dep.depend();\n if (_.isArray(e)) {\n dependArray(e);\n }\n }\n }\n\n var queue = [];\n var activatedChildren = [];\n var has = {};\n var waiting = false;\n var flushing = false;\n var index = 0;\n\n function resetSchedulerState() {\n index = queue.length = activatedChildren.length = 0;\n has = {};\n waiting = flushing = false;\n }\n\n function flushSchedulerQueue() {\n flushing = true;\n var watcher = void 0,\n id = void 0,\n options = void 0;\n\n // Sort queue before flush.\n // This ensures that:\n // 1. Components are updated from parent to child. (because parent is always\n // created before the child)\n // 2. A component's user watchers are run before its render watcher (because\n // user watchers are created before the render watcher)\n // 3. If a component is destroyed during a parent component's watcher run,\n // its watchers can be skipped.\n queue.sort(function (a, b) {\n return a.id - b.id;\n });\n\n // do not cache length because more watchers might be pushed\n // as we run existing watchers\n for (index = 0; index < queue.length; index++) {\n watcher = queue[index].watcher;\n options = queue[index].options;\n id = watcher.id;\n has[id] = null;\n watcher.run(options);\n }\n\n resetSchedulerState();\n }\n\n function queueWatcher(watcher, options) {\n var id = watcher.id;\n if (has[id] == null) {\n has[id] = true;\n if (!flushing) {\n queue.push({ watcher: watcher, options: options });\n } else {\n // if already flushing, splice the watcher based on its id\n // if already past its id, it will be run next immediately.\n var i = queue.length - 1;\n while (i > index && queue[i].watcher.id > watcher.id) {\n i--;\n }\n queue.splice(i + 1, 0, { watcher: watcher, options: options });\n }\n // queue the flush\n if (!waiting) {\n waiting = true;\n nextTick(flushSchedulerQueue);\n }\n }\n }\n\n var uid$1 = 0;\n\n var Watcher = function () {\n function Watcher(vm, expOrFn, cb, options) {\n _classCallCheck(this, Watcher);\n\n this.vm = vm;\n // vm._watchers || (vm._watchers = [])\n // vm._watchers.push(this)\n // options\n if (options) {\n this.deep = !!options.deep;\n this.user = !!options.user;\n this.lazy = !!options.lazy;\n this.sync = !!options.sync;\n } else {\n this.deep = this.user = this.lazy = this.sync = false;\n }\n this.cb = cb;\n this.id = ++uid$1; // uid for batching\n this.active = true;\n this.dirty = this.lazy; // for lazy watchers\n this.deps = [];\n this.newDeps = [];\n this.depIds = new Set();\n this.newDepIds = new Set();\n this.expression = '';\n // parse expression for getter\n if (typeof expOrFn === 'function') {\n this.getter = expOrFn;\n } else {\n this.getter = parsePath(expOrFn);\n if (!this.getter) {\n this.getter = function () {};\n }\n }\n this.value = this.lazy ? undefined : this.get();\n }\n\n Watcher.prototype.get = function get() {\n pushTarget(this);\n var value = void 0;\n var vm = this.vm;\n try {\n value = this.getter.call(vm, vm);\n } catch (e) {\n // if (this.user) {\n // } else {\n // console.error(e)\n // }\n } finally {\n // \"touch\" every property so they are all tracked as\n // dependencies for deep watching\n if (this.deep) {\n traverse(value);\n }\n popTarget();\n this.cleanupDeps();\n }\n return value;\n };\n\n Watcher.prototype.addDep = function addDep(dep) {\n var id = dep.id;\n if (!this.newDepIds.has(id)) {\n this.newDepIds.add(id);\n this.newDeps.push(dep);\n if (!this.depIds.has(id)) {\n dep.addSub(this);\n }\n }\n };\n\n Watcher.prototype.cleanupDeps = function cleanupDeps() {\n var i = this.deps.length;\n while (i--) {\n var dep = this.deps[i];\n if (!this.newDepIds.has(dep.id)) {\n dep.removeSub(this);\n }\n }\n var tmp = this.depIds;\n this.depIds = this.newDepIds;\n this.newDepIds = tmp;\n this.newDepIds.clear();\n tmp = this.deps;\n this.deps = this.newDeps;\n this.newDeps = tmp;\n this.newDeps.length = 0;\n };\n\n Watcher.prototype.update = function update(options) {\n /* istanbul ignore else */\n if (this.lazy) {\n this.dirty = true;\n } else if (this.sync) {\n this.run(options);\n } else {\n queueWatcher(this, options);\n }\n };\n\n Watcher.prototype.run = function run(options) {\n if (this.active) {\n var value = this.get();\n if (value !== this.value ||\n // Deep watchers and watchers on Object/Arrays should fire even\n // when the value is the same, because the value may\n // have mutated.\n options && options.refresh || this.deep) {\n // set new value\n var oldValue = this.value;\n this.value = value;\n if (this.user) {\n try {\n this.cb.call(this.vm, value, oldValue, options);\n } catch (e) {\n console.error(e);\n }\n } else {\n try {\n this.cb.call(this.vm, value, oldValue, options);\n } catch (e) {\n console.error(e);\n }\n }\n }\n }\n };\n\n Watcher.prototype.evaluate = function evaluate() {\n this.value = this.get();\n this.dirty = false;\n };\n\n Watcher.prototype.depend = function depend() {\n var i = this.deps.length;\n while (i--) {\n this.deps[i].depend();\n }\n };\n\n Watcher.prototype.teardown = function teardown() {\n if (this.active) {\n // remove self from vm's watcher list\n // this is a somewhat expensive operation so we skip it\n // if the vm is being destroyed.\n remove(this.vm._watchers, this);\n var i = this.deps.length;\n while (i--) {\n this.deps[i].removeSub(this);\n }\n this.active = false;\n }\n };\n\n return Watcher;\n }();\n\n var seenObjects = new Set();\n\n function traverse(val) {\n seenObjects.clear();\n _traverse(val, seenObjects);\n }\n\n function _traverse(val, seen) {\n var i = void 0,\n keys = void 0;\n var isA = _.isArray(val);\n if (!isA && !_.isObject(val)) {\n return;\n }\n if (val.__ob__) {\n var depId = val.__ob__.dep.id;\n if (seen.has(depId)) {\n return;\n }\n seen.add(depId);\n }\n if (isA) {\n i = val.length;\n while (i--) {\n _traverse(val[i], seen);\n }\n } else {\n keys = _.keys(val);\n i = keys.length;\n while (i--) {\n _traverse(val[keys[i]], seen);\n }\n }\n }\n\n var falsy$1;\n var operators = {\n '||': falsy$1,\n '&&': falsy$1,\n '(': falsy$1,\n ')': falsy$1\n };\n\n function runBinaryFunction(binarys) {\n var expr = '';\n for (var i = 0, len = binarys.length; i < len; i++) {\n if (_.isBoolean(binarys[i]) || _.has(operators, binarys[i])) {\n expr += binarys[i];\n } else {\n expr += 'false';\n }\n }\n return new Function('return ' + expr)();\n }\n\n function routeToRegExp(route) {\n route = route.replace(/\\*./g, '[a-zA-Z0-9_]+.');\n return '^' + route + '$';\n }\n\n function watch(model, expOrFn, cb, options) {\n if (isPlainObject(cb)) {\n options = cb;\n cb = cb.handler;\n }\n if (typeof cb === 'string') {\n cb = model[cb];\n }\n options = options || {};\n options.user = true;\n var exps = void 0;\n if (_.isFunction(expOrFn) || !(exps = expOrFn.match(/[a-zA-Z0-9_.*]+|[|][|]|[&][&]|[(]|[)]/g)) || exps.length === 1 && !/\\*/.test(expOrFn)) {\n var watcher = new Watcher(model, expOrFn, cb, options);\n if (options.immediate) {\n cb(watcher.value);\n }\n return function unwatchFn() {\n watcher.teardown();\n };\n }\n var watchers = [];\n var fns = exps.slice();\n var complete = false,\n running = false;\n var callback = function callback(index, newValue, oldValue, attrs) {\n if (complete === true) {\n return;\n }\n fns[index] = true;\n if (runBinaryFunction(fns)) {\n complete = true;\n cb(newValue, oldValue, attrs);\n }\n if (options && options.sync) {\n complete = false;\n running = false;\n fns = exps.slice();\n } else {\n if (!running) {\n running = true;\n nextTick(function () {\n complete = false;\n running = false;\n fns = exps.slice();\n });\n }\n }\n };\n _.each(exps, function (exp, i) {\n if (_.has(operators, exp)) {\n return;\n }\n //a.**或a.*形式\n if (/^[1-9a-zA-Z.]+(\\*\\*$|\\*$)/.test(exp) || exp === \"**\") {\n var isGlobal = /\\*\\*$/.test(exp);\n if (isGlobal) {\n //a.**的形式\n exp = exp.replace(\".**\", \"\");\n } else {\n //a.*的形式\n exp = exp.replace(\".*\", \"\");\n }\n var getter = exp === \"**\" ? function (m) {\n return m;\n } : parsePath(exp);\n var v = getter.call(model, model);\n var dep = new Dep();\n if (isGlobal) {\n (v.__ob__._scopeDeps || (v.__ob__._scopeDeps = [])).push(dep);\n } else {\n (v.__ob__._deps || (v.__ob__._deps = [])).push(dep);\n }\n var w = new Watcher(model, function () {\n dep.depend();\n return NaN;\n }, function (newValue, oldValue, attrs) {\n callback(i, newValue, oldValue, _.extend({ index: i }, attrs));\n }, options);\n watchers.push(function unwatchFn() {\n w.teardown();\n v.__ob__._scopeDeps && remove(v.__ob__._scopeDeps, dep);\n v.__ob__._deps && remove(v.__ob__._deps, dep);\n });\n return;\n }\n if (/\\*\\*$|\\*$/.test(exp)) {\n throw new Error('not support');\n }\n //其他含有*的情况,如*.a,*.*.a,a.*.a\n if (/\\*/.test(exp)) {\n var currentModel = model;\n //先获取到能获取到的对象\n var paths = exp.split(\".\");\n for (var _i = 0, len = paths.length; _i < len; _i++) {\n if (paths[_i] === \"*\") {\n break;\n }\n currentModel = model[paths[_i]];\n }\n exp = exp.substr(exp.indexOf(\"*\"));\n //补全路径\n var parent = currentModel.__ob__.parent,\n root = currentModel.__ob__;\n while (parent) {\n exp = '*.' + exp;\n root = parent;\n parent = parent.parent;\n }\n var regStr = routeToRegExp(exp);\n var _dep = new Dep();\n root._globalDeps || (root._globalDeps = {});\n root._globalDeps[regStr] = _dep;\n\n var _w = new Watcher(currentModel, function () {\n _dep.depend();\n return NaN;\n }, function (newValue, oldValue, attrs) {\n callback(i, newValue, oldValue, _.extend({ index: i }, attrs));\n }, options);\n watchers.push(function unwatchFn() {\n _w.teardown();\n root._globalDeps && delete root._globalDeps[regStr];\n });\n return;\n }\n var watcher = new Watcher(model, exp, function (newValue, oldValue, attrs) {\n callback(i, newValue, oldValue, _.extend({ index: i }, attrs));\n }, options);\n watchers.push(function unwatchFn() {\n watcher.teardown();\n });\n });\n return watchers;\n }\n\n var mixinInjection = {};\n\n function getMixins(type) {\n return mixinInjection[type];\n }\n\n function mixin(xtype, cls) {\n mixinInjection[xtype] = _.cloneDeep(cls);\n }\n\n var computedWatcherOptions = { lazy: true };\n\n function initState(vm, state) {\n if (state) {\n vm.$$state = observe(state).model;\n }\n }\n\n function initComputed(vm, computed) {\n var watchers = vm._computedWatchers = {};\n\n defineComputed(vm, computed);\n\n for (var key in computed) {\n var userDef = computed[key],\n context = vm.$$model ? vm.model : vm;\n var getter = typeof userDef === \"function\" ? _.bind(userDef, context) : _.bind(userDef.get, context);\n\n watchers[key] = new Watcher(vm.$$computed, getter || noop, noop, computedWatcherOptions);\n }\n }\n\n function defineComputed(vm, computed) {\n var props = {};\n // if (typeof Proxy === 'function') {\n // return vm.$$computed = new Proxy(props, {\n // has: function (target, key) {\n // return computed && key in computed\n // },\n // get: function (target, key) {\n // return createComputedGetter(vm, key)()\n // }\n // })\n // }\n var shouldCache = true;\n for (var key in computed) {\n if (!(key in vm)) {\n var sharedPropertyDefinition = {\n enumerable: true,\n configurable: true,\n get: noop,\n set: noop\n };\n var userDef = computed[key];\n if (typeof userDef === \"function\") {\n sharedPropertyDefinition.get = createComputedGetter(vm, key);\n sharedPropertyDefinition.set = noop;\n } else {\n sharedPropertyDefinition.get = userDef.get ? shouldCache && userDef.cache !== false ? createComputedGetter(key) : userDef.get : noop;\n sharedPropertyDefinition.set = userDef.set ? userDef.set : noop;\n }\n\n props[key] = sharedPropertyDefinition;\n }\n }\n vm.$$computed = createViewModel$1({}, props);\n }\n\n function createComputedGetter(vm, key) {\n return function computedGetter() {\n var watcher = vm._computedWatchers && vm._computedWatchers[key];\n if (watcher) {\n if (watcher.dirty) {\n watcher.evaluate();\n }\n if (Dep.target) {\n watcher.depend();\n }\n return watcher.value;\n }\n };\n }\n\n function initWatch(vm, watch$$1) {\n vm._watchers || (vm._watchers = []);\n for (var key in watch$$1) {\n var handler = watch$$1[key];\n if (_.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n vm._watchers.push(createWatcher(vm, key, handler[i]));\n }\n } else {\n vm._watchers.push(createWatcher(vm, key, handler));\n }\n }\n }\n\n function createWatcher(vm, keyOrFn, cb, options) {\n if (isPlainObject(cb)) {\n options = cb;\n cb = cb.handler;\n }\n if (typeof cb === 'string') {\n cb = vm[cb];\n }\n return watch(vm.model, keyOrFn, _.bind(cb, vm.$$model ? vm.model : vm), options);\n }\n\n function initMethods(vm, methods) {\n for (var key in methods) {\n vm[key] = methods[key] == null ? noop : _.bind(methods[key], vm.$$model ? vm.model : vm);\n }\n }\n\n function initMixins(vm, mixins) {\n mixins = mixins || [];\n\n _.each(mixins.reverse(), function (mixinType) {\n var mixin$$1 = getMixins(mixinType);\n\n for (var key in mixin$$1) {\n if (typeof mixin$$1[key] !== \"function\") continue;\n\n if (_.has(vm, key)) continue;\n\n vm[key] = _.bind(mixin$$1[key], vm.$$model ? vm.model : vm);\n }\n });\n }\n\n function defineProps(vm, keys) {\n var props = {};\n // if (typeof Proxy === 'function') {\n // return vm.model = new Proxy(props, {\n // has: function (target, key) {\n // return keys.indexOf(key) > -1;\n // },\n // get: function (target, key) {\n // if (key in $$skipArray) {\n // return props[key]\n // }\n // if (vm.$$computed && key in vm.$$computed) {\n // return vm.$$computed[key]\n // }\n // if (vm.$$state && key in vm.$$state) {\n // return vm.$$state[key]\n // }\n // return vm.$$model[key]\n // },\n // set: function (target, key, val) {\n // if (key in $$skipArray) {\n // return props[key] = val\n // }\n // if (vm.$$state && key in vm.$$state) {\n // return vm.$$state[key] = val\n // }\n // if (vm.$$model && key in vm.$$model) {\n // return vm.$$model[key] = val\n // }\n // }\n // })\n // }\n\n var _loop = function _loop(i, len) {\n var key = keys[i];\n if (!(key in $$skipArray)) {\n props[key] = {\n enumerable: true,\n configurable: true,\n get: function get() {\n if (vm.$$computed && key in vm.$$computed) {\n return vm.$$computed[key];\n }\n if (vm.$$state && key in vm.$$state) {\n return vm.$$state[key];\n }\n if (vm.$$model && key in vm.$$model) {\n return vm.$$model[key];\n }\n var p = vm._parent;\n while (p) {\n if (p.$$context && key in p.$$context) {\n return p.$$context[key];\n }\n p = p._parent;\n }\n },\n set: function set(val) {\n if (vm.$$state && key in vm.$$state) {\n return vm.$$state[key] = val;\n }\n if (vm.$$model && key in vm.$$model) {\n return vm.$$model[key] = val;\n }\n var p = vm._parent;\n while (p) {\n if (p.$$context && key in p.$$context) {\n return p.$$context[key] = val;\n }\n p = p._parent;\n }\n }\n };\n }\n };\n\n for (var i = 0, len = keys.length; i < len; i++) {\n _loop(i, len);\n }\n vm.model = createViewModel$1({}, props);\n }\n\n function defineContext(vm, keys) {\n var props = {};\n\n var _loop2 = function _loop2(i, len) {\n var key = keys[i];\n if (!(key in $$skipArray)) {\n props[key] = {\n enumerable: true,\n configurable: true,\n get: function get() {\n return vm.model[key];\n },\n set: function set(val) {\n return vm.model[key] = val;\n }\n };\n }\n };\n\n for (var i = 0, len = keys.length; i < len; i++) {\n _loop2(i, len);\n }\n vm.$$context = createViewModel$1({}, props);\n }\n\n var Model = function () {\n function Model() {\n _classCallCheck(this, Model);\n }\n\n Model.prototype._constructor = function _constructor(model) {\n if (model instanceof Observer || model instanceof Model) {\n model = model.model;\n }\n if (model && model.__ob__) {\n this.$$model = model;\n } else {\n this.options = model || {};\n }\n this._parent = Model.target;\n var state = _.isFunction(this.state) ? this.state() : this.state;\n var computed = this.computed;\n var context = this.context;\n var childContext = this.childContext;\n var watch$$1 = this.watch;\n var actions = this.actions;\n var keys = _.keys(this.$$model).concat(_.keys(state)).concat(_.keys(computed)).concat(context || []);\n var mixins = this.mixins;\n defineProps(this, keys);\n childContext && defineContext(this, childContext);\n this.$$model && (this.model.__ob__ = this.$$model.__ob__);\n initMixins(this, mixins);\n this.init();\n initState(this, state);\n initComputed(this, computed);\n initWatch(this, watch$$1);\n initMethods(this, actions);\n this.created && this.created();\n if (this.$$model) {\n return this.model;\n }\n };\n\n Model.prototype._init = function _init() {};\n\n Model.prototype.init = function init() {\n this._init();\n };\n\n Model.prototype.destroy = function destroy() {\n for (var _key3 in this._computedWatchers) {\n this._computedWatchers[_key3].teardown();\n }\n _.each(this._watchers, function (unwatches) {\n unwatches = _.isArray(unwatches) ? unwatches : [unwatches];\n _.each(unwatches, function (unwatch) {\n unwatch();\n });\n });\n this._watchers && (this._watchers = []);\n this.destroyed && this.destroyed();\n this.$$model = null;\n this.$$computed = null;\n this.$$state = null;\n };\n\n return Model;\n }();\n\n function toJSON(model) {\n var result = void 0;\n if (_.isArray(model)) {\n result = [];\n for (var i = 0, len = model.length; i < len; i++) {\n result[i] = toJSON(model[i]);\n }\n } else if (model && isPlainObject(model)) {\n result = {};\n for (var _key4 in model) {\n if (!_.has($$skipArray, _key4)) {\n result[_key4] = toJSON(model[_key4]);\n }\n }\n } else {\n result = model;\n }\n return result;\n }\n\n function define(model) {\n return new Observer(model).model;\n }\n var version = '2.0';\n\n exports.define = define;\n exports.version = version;\n exports.$$skipArray = $$skipArray;\n exports.mixin = mixin;\n exports.Model = Model;\n exports.observerState = observerState;\n exports.Observer = Observer;\n exports.observe = observe;\n exports.notify = notify;\n exports.defineReactive = defineReactive;\n exports.set = set;\n exports.del = del;\n exports.Watcher = Watcher;\n exports.pushTarget = pushTarget;\n exports.popTarget = popTarget;\n exports.watch = watch;\n exports.toJSON = toJSON;\n\n exports.__esModule = true;\n});",";(function () {\n function initWatch (vm, watch) {\n vm._watchers || (vm._watchers = []);\n for (var key in watch) {\n var handler = watch[key];\n if (BI.isArray(handler)) {\n for (var i = 0; i < handler.length; i++) {\n vm._watchers.push(createWatcher(vm, key, handler[i]));\n }\n } else {\n vm._watchers.push(createWatcher(vm, key, handler));\n }\n }\n }\n\n function createWatcher(vm, keyOrFn, cb, options) {\n if (BI.isPlainObject(cb)) {\n options = cb;\n cb = cb.handler;\n }\n options = options || {};\n return Fix.watch(vm.model, keyOrFn, _.bind(cb, vm), BI.extend(options, {\n store: vm.store\n }));\n }\n\n var target = null;\n var targetStack = [];\n\n function pushTarget (_target) {\n if (target) targetStack.push(target);\n Fix.Model.target = target = _target;\n }\n\n function popTarget () {\n Fix.Model.target = target = targetStack.pop();\n }\n\n var context = null;\n var contextStack = [];\n\n function pushContext (_context) {\n if (context) contextStack.push(context);\n Fix.Model.context = context = _context;\n }\n\n function popContext () {\n Fix.Model.context = context = contextStack.pop();\n }\n\n var oldWatch = Fix.watch;\n Fix.watch = function (model, expOrFn, cb, options) {\n if (BI.isPlainObject(cb)) {\n options = cb;\n cb = cb.handler;\n }\n if (typeof cb === \"string\") {\n cb = model[cb];\n }\n return oldWatch.call(this, model, expOrFn, function () {\n options && options.store && pushTarget(options.store);\n try {\n var res = cb.apply(this, arguments);\n } catch (e) {\n console.error(e);\n }\n options && options.store && popTarget();\n return res;\n }, options);\n };\n\n function findStore (widget) {\n if (target != null) {\n return target;\n }\n widget = widget || context;\n var p = widget;\n while (p) {\n if (p instanceof Fix.Model || p.store || p.__cacheStore) {\n break;\n }\n p = p._parent || (p.options && p.options.element);\n }\n if (p) {\n if (p instanceof Fix.Model) {\n return widget.__cacheStore = p;\n }\n widget.__cacheStore = p.store || p.__cacheStore;\n return p.__cacheStore || p.store;\n }\n }\n\n var _create = BI.createWidget;\n BI.createWidget = function (item, options, context) {\n var pushed = false;\n if (BI.isWidget(options)) {\n pushContext(options);\n pushed = true;\n } else if (context != null) {\n pushContext(context);\n pushed = true;\n }\n var result = _create.apply(this, arguments);\n // try {\n // var result = _create.apply(this, arguments);\n // } catch (e) {\n // console.error(e);\n // }\n pushed && popContext();\n return result;\n };\n\n _.each([\"populate\", \"addItems\", \"prependItems\"], function (name) {\n var old = BI.Loader.prototype[name];\n BI.Loader.prototype[name] = function () {\n pushContext(this);\n try {\n var result = old.apply(this, arguments);\n } catch (e) {\n console.error(e);\n }\n popContext();\n return result;\n };\n });\n\n function createStore () {\n var needPop = false;\n if (_global.Fix && this._store) {\n var store = findStore(this.options.context || this.options.element);\n if (store) {\n pushTarget(store);\n needPop = true;\n }\n this.store = this._store();\n this.store && (this.store._widget = this);\n needPop && popTarget();\n needPop = false;\n pushTarget(this.store);\n if (this.store instanceof Fix.Model) {\n this.model = this.store.model;\n } else {\n this.model = this.store;\n }\n needPop = true;\n }\n return needPop;\n }\n\n var _init = BI.Widget.prototype._init;\n BI.Widget.prototype._init = function () {\n var self = this;\n var needPop = createStore.call(this);\n try {\n _init.apply(this, arguments);\n } catch (e) {\n console.error(e);\n }\n needPop && popTarget();\n };\n\n var _render = BI.Widget.prototype._render;\n BI.Widget.prototype._render = function () {\n var needPop = false;\n if (_global.Fix && this._store) {\n needPop = true;\n pushTarget(this.store);\n initWatch(this, this.watch);\n }\n _render.apply(this, arguments);\n // try {\n // _render.apply(this, arguments);\n // } catch (e) {\n // console.error(e);\n // }\n needPop && popTarget();\n };\n\n var unMount = BI.Widget.prototype.__d;\n BI.Widget.prototype.__d = function () {\n try {\n unMount.apply(this, arguments);\n } catch (e) {\n console.error(e);\n }\n this.store && BI.isFunction(this.store.destroy) && this.store.destroy();\n BI.each(this._watchers, function (i, unwatches) {\n unwatches = BI.isArray(unwatches) ? unwatches : [unwatches];\n BI.each(unwatches, function (j, unwatch) {\n unwatch();\n });\n });\n this._watchers && (this._watchers = []);\n if (this.store) {\n this.store._parent && (this.store._parent = null);\n this.store._widget && (this.store._widget = null);\n this.store = null;\n }\n delete this.__cacheStore;\n };\n\n _.each([\"_mount\"], function (name) {\n var old = BI.Widget.prototype[name];\n old && (BI.Widget.prototype[name] = function () {\n this.store && pushTarget(this.store);\n try {\n var res = old.apply(this, arguments);\n } catch (e) {\n console.error(e);\n }\n this.store && popTarget();\n return res;\n });\n });\n\n if (BI.isIE9Below && BI.isIE9Below()) {\n _.each([\"each\", \"map\", \"reduce\", \"reduceRight\", \"find\", \"filter\", \"reject\", \"every\", \"all\", \"some\", \"any\", \"max\", \"min\",\n \"sortBy\", \"groupBy\", \"indexBy\", \"countBy\", \"partition\",\n \"keys\", \"allKeys\", \"values\", \"pairs\", \"invert\",\n \"mapObject\", \"findKey\", \"pick\", \"omit\", \"tap\"], function (name) {\n var old = BI[name];\n BI[name] = function (obj, fn, context) {\n return typeof fn === \"function\" ? old(obj, function (key, value) {\n if (!(key in Fix.$$skipArray)) {\n return fn.apply(this, arguments);\n }\n }, context) : old.apply(this, arguments);\n };\n });\n BI.isEmpty = function (ob) {\n if (BI.isPlainObject(ob) && ob.__ob__) {\n return BI.keys(ob).length === 0;\n }\n return _.isEmpty(ob);\n };\n BI.keys = function (ob) {\n var keys = _.keys(ob);\n var nKeys = [];\n for (var i = 0; i < keys.length; i++) {\n if (!(keys[i] in Fix.$$skipArray)) {\n nKeys.push(keys[i]);\n }\n }\n return nKeys;\n };\n BI.values = function (ob) {\n var keys = BI.keys(obj);\n var length = keys.length;\n var values = [];\n for (var i = 0; i < length; i++) {\n values[i] = obj[keys[i]];\n }\n return values;\n };\n BI.extend = function () {\n var args = Array.prototype.slice.call(arguments);\n if (args.length < 1) {\n return {};\n }\n var object = args[0];\n var i = 1;\n while (i < args.length) {\n BI.each(args[i], function (key, v) {\n object[key] = v;\n });\n i++;\n }\n return object;\n };\n BI.size = function (ob) {\n if (BI.isPlainObject(ob) && ob.__ob__) {\n return BI.keys(ob).length;\n }\n return _.size(ob);\n };\n BI.isEmptyObject = function (ob) {\n return BI.size(ob) === 0;\n };\n BI.deepClone = function (ob) {\n return Fix.toJSON(ob);\n };\n }\n BI.watch = Fix.watch;\n}());\n"],"sourceRoot":""}