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","runClearTimeout","marker","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","basePropertyOf","hasUnicode","string","test","mapToArray","map","size","forEach","overArg","transform","arg","replaceHolders","placeholder","safeGet","setToArray","set","stringSize","unicodeSize","lastIndex","stringToArray","unicodeToArray","match","asciiToArray","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","initCloneArray","constructor","input","copyArray","tag","getTag","isFunc","cloneBuffer","initCloneObject","copySymbolsIn","getSymbolsIn","baseAssignIn","keysIn","copySymbols","getSymbols","initCloneByTag","Ctor","cloneArrayBuffer","cloneDataView","dataView","buffer","byteOffset","byteLength","cloneTypedArray","cloneRegExp","regexp","cloneSymbol","symbol","stacked","subValue","props","getAllKeysIn","getAllKeys","baseDelay","wait","TypeError","baseDifference","includes","isCommon","valuesLength","outer","computed","valuesIndex","hashClear","hashDelete","hashGet","hashHas","hashSet","listCacheClear","listCacheDelete","pop","listCacheGet","listCacheHas","listCacheSet","mapCacheClear","mapCacheDelete","getMapData","mapCacheGet","mapCacheHas","mapCacheSet","setCacheAdd","setCacheHas","stackClear","stackDelete","stackGet","stackHas","stackSet","pairs","createBaseEach","isArrayLike","iterable","baseForOwn","baseEvery","baseExtremum","current","isSymbol","baseFilter","baseFlatten","depth","isStrict","isFlattenable","baseFor","createBaseFor","baseForRight","baseForOwnRight","baseFunctions","isFunction","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","getRawTag","isOwn","unmasked","objectToString","baseGt","other","baseHas","baseHasIn","baseIsArguments","baseIsEqual","baseIsEqualDeep","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","equalByTag","message","convert","isPartial","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","equalObjects","objProps","objLength","othLength","skipCtor","othValue","compared","objCtor","othCtor","baseIsNative","isMasked","baseIteratee","identity","baseMatchesProperty","srcValue","isKey","isStrictComparable","matchesStrictComparable","hasIn","baseMatches","basePropertyDeep","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","matchData","getMatchData","baseIsMatch","noCustomizer","baseMerge","srcIndex","baseMergeDeep","mergeFunc","newValue","isTyped","isArrayLikeObject","isPlainObject","toPlainObject","baseOrderBy","iteratees","orders","baseSortBy","comparer","sort","compareMultiple","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","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","valIsDefined","valIsNull","valIsReflexive","valIsSymbol","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","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","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","wrapper","getHolder","holdersCount","countHolders","newHolders","createRecurry","fn","reorder","indexes","arrLength","oldArray","createInverter","toIteratee","baseInverter","wrapFunc","isCurry","newData","isLaziable","funcName","getFuncName","otherFunc","getData","setData","setWrapToString","createWrap","toInteger","mergeData","srcBitmask","newBitmask","isCombo","createCurry","createPartial","createBind","customDefaultsMerge","customOmitClone","arrValue","othIndex","flatRest","flatten","isKeyable","type","getValue","stubArray","hasPath","hasFunc","isLength","otherArgs","parent","ArrayBuffer","resolve","ctorString","shortOut","reference","insertWrapDetails","details","updateWrapDetails","pair","getWrapDetails","count","lastCalled","stamp","remaining","memoizeCapped","memoize","charCodeAt","number","quote","subString","clone","difference","findIndex","head","intersection","arrays","mapped","baseIntersection","caches","maxLength","Infinity","last","union","unzip","group","without","zip","chain","thru","interceptor","baseAt","skip","countBy","find","createFind","findIndexFunc","groupBy","sortBy","before","debounce","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","time","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","remainingWait","timeWaiting","debounced","isInvoking","leadingEdge","toNumber","cancel","flush","defer","delay","resolver","memoized","Cache","negate","stubFalse","baseIsDate","baseIsMap","isNumber","baseIsRegExp","baseIsSet","isString","baseIsTypedArray","toArray","iteratorToArray","next","done","toFinite","remainder","isBinary","assignIn","defaults","propsIndex","propsLength","defaultsDeep","mergeWith","defaultValue","invert","invertBy","merge","omit","pick","basePick","baseValues","mixin","methodNames","methodName","range","createRange","step","baseRange","after","compact","properties","drop","filter","flattenDeep","initial","matches","omitBy","pickBy","prop","reject","rest","take","takeRight","tap","throttle","uniq","uniqBy","zipObject","baseZipObject","assignFunc","valsLength","extend","clamp","lower","upper","baseClamp","cloneDeep","escape","every","findKey","findLastIndex","findLastKey","indexOf","isBoolean","isEmpty","isEqual","isNaN","isNull","isUndefined","noConflict","floating","temp","rand","baseRandom","reduce","some","trim","chars","strSymbols","chrSymbols","castSlice","charsStartIndex","charsEndIndex","uniqueId","prefix","each","first","VERSION","isFilter","getIteratee","takeName","dropName","findLast","invokeMap","baseInvoke","dropRight","takeRightWhile","takeWhile","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","lazyClone","lazyReverse","lazyValue","isRight","view","getView","transforms","iterLength","takeCount","iterIndex","wrapperToIterator","traverse","context","obj","_apply","_applyFunc","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","callbacks","pending","timerFunc","nextTickHandler","copies","then","MutationObserver","counter","observer","textNode","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","registerImmediate","nextHandle","tasksByHandle","currentlyRunningATask","doc","attachTo","installNextTickImplementation","handle","runIfPresent","canUsePostMessage","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","MessageChannel","installMessageChannelImplementation","channel","port1","event","port2","createElement","installReadyStateChangeImplementation","html","documentElement","script","onreadystatechange","removeChild","appendChild","installSetTimeoutImplementation","installPostMessageImplementation","messagePrefix","onGlobalMessage","addEventListener","attachEvent","callback","task","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","base64StrLength","paddingIndex","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","II","HH","GG","FF","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","cookieString","date","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","leftChildIndex","rightChildIndex","swapIndex","leftChild","rightChild","LinkHashMap","LRU","limit","tail","_keymap","put","removed","newer","older","returnEntry","node","Int32Array","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","eFormat","neg","magnitudeNeg","magnitude","log","pow","integerLen","getInteger","formatLeft","valueLeftLen","precision","getPrecision","isValueCarry","isValueCarried","roundNum","toFixed","formatExponential","isAllZero","_dealNumberPrecision","fright","_numberFormat","numMod","fp","fleft","tp","tleft","tright","paddingZero","_dealWithRight","leftPlus","_dealWithLeft","rll","numReg","orilen","newnum","combo","com","tll","newstr","lres","cjkEncode","newText","code","cjkDecode","rightIdx","subText","eval","SPECIAL_TAGS","\"","htmlEncode","replaceAll","htmlDecode","cjkEncodeDO","jsonEncode","useHasOwn","encodeArray","__time__","jsonDecode","jo","$","parseJSON","JSON","_hasDateInJson","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","accAdd","arg1","arg2","r1","r2","cm","sub","accSub","mul","accMul","div","accDivide","num1","num2","others","_i","num1Changed","float2Fixed","num2Changed","times","digitLength","eSplit","dLen","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","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","changed","normalizedEvent","normalizeWheel","sX","sY","pX","pY","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","oldStartIdx","newStartIdx","oldEndIdx","oldStartVnode","oldEndVnode","newEndIdx","newStartVnode","newEndVnode","sameVnode","insertBefore","sameOldVnode","findOldVnode","vnode1","vnode2","oldIndex","newIndex","opt","insert","isNext","insertKey","beforeKey","vnodes","vNode","beginIdx","endIdx","found","addVnodes","startIdx","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","cardName","isCardExisted","card","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","row","col","widths","heights","firstElement","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","getTitle","getWarningTitle","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","hand","triggerArr","mouseDown","mousedown","clk","isExist","_trigger","dblclick","isOnce","doClick","onClick","_doClick","popup","destroyWhenHide","getBubble","BubblePopupBarView","EVENT_CLICK_TOOLBAR_BUTTON","hideView","BubbleCombo","EVENT_BEFORE_POPUPVIEW","isViewVisible","showView","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","assertMinBorder","MAX_VALUE","assertMaxBorder","leftMap","topMap","leftBorder","rightBorder","topBorder","bottomBorder","_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","st","evs","enterPopup","EVENT_AFTER_INIT","_rendered","_hideIf","closest","directions","adjustWidth","adjustHeight","EVENT_BEFORE_HIDEVIEW","EVENT_AFTER_HIDEVIEW","EVENT_AFTER_POPUPVIEW","resetListWidth","maxW","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","getElementHeight","minContentHeight","cnt","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","_defaultState","_start","lastValidValue","_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","item_done","childValue","father","_createChildValue","el_done","_isGroup","_needSpliter","spliter_container","itemLength","valueItem","valueArray","_checkValues","itemGroup","joinValue","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","magnitudeDiff","needAddZero","numDecimal","_stringNumberFactory","numStrArray","numInteger","_accurateSubtraction","integerResult","decimalMaxLength","getDecimalMaxLength","decimalResult","addZero","resultTemp","diff","_accurateAddition","_accurateMultiplication","dec1Int2","_accurateDivisionTenExponent","int1dec2","dec1dec2","stringNumber","partDecimalResult","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","digest","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","_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","dealWithSelectedValues","canFindKey","_getNode","isChild","strs","_buildTree","nk","nv","lastSearchValue","nodeSearch","_getAddedValueNode","isAllSelect","findSelectedObj","isCurAllSelected","isOpen","halfCheck","checkState","dealWithSelectedValue","getCheckState","allNodes","_getAllChildren","parentCheckState","nextNames","tempCheck","childCount","valueFind","findParentNode","pValues","AbstractListTreeValueChooser","nodeValue","ListTreeValueChooserInsertCombo","TreeValueChooserInsertCombo","TreeValueChooserCombo","TreeValueChooserPane","pane","AbstractValueChooser","ValueChooserInsertCombo","ValueChooserCombo","ValueChooserPane","fineui","Decorators","Target","Model","_store","Fix","Constructor","isNative","rhashcode","hasProto","agent","v1","v2","_toString","bailRE","parsePath","segments","falsy","port","ctx","$$skipArray","__ob__","$accessors","$vbthis","$vbsetter","Dep","_classCallCheck","subs","addSub","removeSub","depend","addDep","notify","targetStack","pushTarget","_target","popTarget","arrayMethods","original","_len","inserted","observeArray","parentKey","dep","canHideProperty","createViewModel","defineProperties","timeBucket","desc","__defineGetter__","__defineSetter__","descs","VBClassPool","execScript","VBMediator","accessors","accessor","makeHashCode","parseVB","createViewModel$1","arrayKeys","observerState","shouldConvert","Observer","vmCount","augment","protoAugment","copyAugment","walk","def","writable","configurable","defineReactive","__proto__","parentObserver","isExtensible","_deps","_scopeDeps","_key2","_globalDeps","shallow","isConfigurable","getOwnPropertyDescriptor","childOb","dependArray","newVal","activatedChildren","waiting","flushing","flushSchedulerQueue","watcher","resetSchedulerState","falsy$1","uid$1","Watcher","vm","expOrFn","user","lazy","sync","dirty","deps","newDeps","depIds","newDepIds","expression","seenObjects","isA","depId","cleanupDeps","queueWatcher","oldValue","evaluate","teardown","_watchers","operators","watch","exps","immediate","watchers","complete","running","runBinaryFunction","binarys","expr","isGlobal","currentModel","regStr","routeToRegExp","_dep","_w","mixinInjection","computedWatcherOptions","initComputed","_computedWatchers","defineComputed","sharedPropertyDefinition","userDef","createComputedGetter","$$computed","$$model","createWatcher","keyOrFn","initMixins","mixinType","mixin$$1","getMixins","childContext","watch$$1","defineProps","_loop","$$state","$$context","defineContext","_loop2","initState","initWatch","initMethods","methods","_key3","unwatches","unwatch","define","_key4","factory","contextStack","pushContext","_context","popContext","oldWatch","_create","createStore","needPop","findStore","__cacheStore","_widget","pushed","old","unMount","nKeys"],"mappings":";aACE,IAAIA,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUC,QAGnC,IAAIC,EAASJ,EAAiBE,GAAY,CACzCG,EAAGH,EACHI,GAAG,EACHH,QAAS,IAUV,OANAI,EAAQL,GAAUM,KAAKJ,EAAOD,QAASC,EAAQA,EAAOD,QAASF,GAG/DG,EAAOE,GAAI,EAGJF,EAAOD,QAKfF,EAAoBQ,EAAIF,EAGxBN,EAAoBS,EAAIV,EAGxBC,EAAoBU,EAAI,SAASR,EAASS,EAAMC,GAC3CZ,EAAoBa,EAAEX,EAASS,IAClCG,OAAOC,eAAeb,EAASS,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEZ,EAAoBkB,EAAI,SAAShB,GACX,oBAAXiB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAeb,EAASiB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAeb,EAAS,aAAc,CAAEmB,OAAO,KAQvDrB,EAAoBsB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQrB,EAAoBqB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFA1B,EAAoBkB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOrB,EAAoBU,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRzB,EAAoB6B,EAAI,SAAS1B,GAChC,IAAIS,EAAST,GAAUA,EAAOqB,WAC7B,WAAwB,OAAOrB,EAAgB,YAC/C,WAA8B,OAAOA,GAEtC,OADAH,EAAoBU,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRZ,EAAoBa,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG/B,EAAoBkC,EAAI,GAIjBlC,EAAoBA,EAAoBmC,EAAI,M,0QClFrD,IAAIC,EAGJA,EAAK,WACJ,OAAOC,KADH,GAIL,IAECD,EAAIA,GAAK,IAAIE,SAAS,cAAb,GACR,MAAOC,GAEc,YAAlB,oBAAOC,OAAP,cAAOA,WAAqBJ,EAAII,QAOrCrC,EAAOD,QAAUkC,G,4ECnBjB,IAAIK,OAA2B,IAAXC,GAA0BA,GACjB,oBAATC,MAAwBA,MAChCH,OACRI,EAAQN,SAASN,UAAUY,MAiB/B,SAASC,EAAQC,EAAIC,GACnBV,KAAKW,IAAMF,EACXT,KAAKY,SAAWF,EAflB7C,EAAQgD,WAAa,WACnB,OAAO,IAAIL,EAAQD,EAAMrC,KAAK2C,WAAYT,EAAOU,WAAYC,eAE/DlD,EAAQmD,YAAc,WACpB,OAAO,IAAIR,EAAQD,EAAMrC,KAAK8C,YAAaZ,EAAOU,WAAYG,gBAEhEpD,EAAQkD,aACRlD,EAAQoD,cAAgB,SAASC,GAC3BA,GACFA,EAAQC,SAQZX,EAAQb,UAAUyB,MAAQZ,EAAQb,UAAU0B,IAAM,aAClDb,EAAQb,UAAUwB,MAAQ,WACxBnB,KAAKY,SAAS1C,KAAKkC,EAAOJ,KAAKW,MAIjC9C,EAAQyD,OAAS,SAASC,EAAMC,GAC9BT,aAAaQ,EAAKE,gBAClBF,EAAKG,aAAeF,GAGtB3D,EAAQ8D,SAAW,SAASJ,GAC1BR,aAAaQ,EAAKE,gBAClBF,EAAKG,cAAgB,GAGvB7D,EAAQ+D,aAAe/D,EAAQgE,OAAS,SAASN,GAC/CR,aAAaQ,EAAKE,gBAElB,IAAID,EAAQD,EAAKG,aACJ,GAATF,IACFD,EAAKE,eAAiBZ,WAAW,WAC3BU,EAAKO,YACPP,EAAKO,cACNN,KAKPO,EAAQ,IAIRlE,EAAQmE,aAAgC,oBAAT1B,MAAwBA,KAAK0B,mBAClB,IAAX3B,GAA0BA,EAAO2B,mBACxC,EACxBnE,EAAQoE,eAAkC,oBAAT3B,MAAwBA,KAAK2B,qBAClB,IAAX5B,GAA0BA,EAAO4B,qBACxC,I,iEC9D1BnE,EAAOD,QAAU,SAASC,GAoBzB,OAnBKA,EAAOoE,kBACXpE,EAAOqE,UAAY,aACnBrE,EAAOsE,MAAQ,GAEVtE,EAAOuE,WAAUvE,EAAOuE,SAAW,IACxC5D,OAAOC,eAAeZ,EAAQ,SAAU,CACvCa,YAAY,EACZC,IAAK,WACJ,OAAOd,EAAOE,KAGhBS,OAAOC,eAAeZ,EAAQ,KAAM,CACnCa,YAAY,EACZC,IAAK,WACJ,OAAOd,EAAOC,KAGhBD,EAAOoE,gBAAkB,GAEnBpE,I,6BCnBR,IAOIwE,EACAC,EARAC,EAAU1E,EAAOD,QAAU,GAU/B,SAAS4E,IACL,MAAM,IAAIC,MAAM,mCAEpB,SAASC,IACL,MAAM,IAAID,MAAM,qCAsBpB,SAASE,EAAWC,GAChB,GAAIP,IAAqBzB,WAErB,OAAOA,WAAWgC,EAAK,GAG3B,IAAKP,IAAqBG,IAAqBH,IAAqBzB,WAEhE,OADAyB,EAAmBzB,WACZA,WAAWgC,EAAK,GAE3B,IAEI,OAAOP,EAAiBO,EAAK,GAC/B,MAAM3C,GACJ,IAEI,OAAOoC,EAAiBpE,KAAK,KAAM2E,EAAK,GAC1C,MAAM3C,GAEJ,OAAOoC,EAAiBpE,KAAK8B,KAAM6C,EAAK,MAvCnD,WACG,IAEQP,EADsB,mBAAfzB,WACYA,WAEA4B,EAEzB,MAAOvC,GACLoC,EAAmBG,EAEvB,IAEQF,EADwB,mBAAjBxB,aACcA,aAEA4B,EAE3B,MAAOzC,GACLqC,EAAqBI,GAjB5B,GAwED,IAEIG,EAFAC,EAAQ,GACRC,GAAW,EAEXC,GAAc,EAElB,SAASC,IACAF,GAAaF,IAGlBE,GAAW,EACPF,EAAaK,OACbJ,EAAQD,EAAaM,OAAOL,GAE5BE,GAAc,EAEdF,EAAMI,QACNE,KAIR,SAASA,IACL,IAAIL,EAAJ,CAGA,IAAI9B,EAAU0B,EAAWM,GACzBF,GAAW,EAGX,IADA,IAAIM,EAAMP,EAAMI,OACVG,GAAK,CAGP,IAFAR,EAAeC,EACfA,EAAQ,KACCE,EAAaK,GACdR,GACAA,EAAaG,GAAYM,MAGjCN,GAAc,EACdK,EAAMP,EAAMI,OAEhBL,EAAe,KACfE,GAAW,EAnEf,SAASQ,EAAgBC,GACrB,GAAIlB,IAAuBxB,aAEvB,OAAOA,aAAa0C,GAGxB,IAAKlB,IAAuBI,IAAwBJ,IAAuBxB,aAEvE,OADAwB,EAAqBxB,aACdA,aAAa0C,GAExB,IAEI,OAAOlB,EAAmBkB,GAC5B,MAAOvD,GACL,IAEI,OAAOqC,EAAmBrE,KAAK,KAAMuF,GACvC,MAAOvD,GAGL,OAAOqC,EAAmBrE,KAAK8B,KAAMyD,KAgD7CD,CAAgBtC,IAiBpB,SAASwC,EAAKb,EAAKc,GACf3D,KAAK6C,IAAMA,EACX7C,KAAK2D,MAAQA,EAYjB,SAASC,KA5BTpB,EAAQqB,SAAW,SAAUhB,GACzB,IAAIiB,EAAO,IAAIC,MAAMjD,UAAUqC,OAAS,GACxC,GAAuB,EAAnBrC,UAAUqC,OACV,IAAK,IAAIpF,EAAI,EAAGA,EAAI+C,UAAUqC,OAAQpF,IAClC+F,EAAK/F,EAAI,GAAK+C,UAAU/C,GAGhCgF,EAAMiB,KAAK,IAAIN,EAAKb,EAAKiB,IACJ,IAAjBf,EAAMI,QAAiBH,GACvBJ,EAAWS,IASnBK,EAAK/D,UAAU4D,IAAM,WACjBvD,KAAK6C,IAAItC,MAAM,KAAMP,KAAK2D,QAE9BnB,EAAQyB,MAAQ,UAChBzB,EAAQ0B,SAAU,EAClB1B,EAAQ2B,IAAM,GACd3B,EAAQ4B,KAAO,GACf5B,EAAQ6B,QAAU,GAClB7B,EAAQ8B,SAAW,GAInB9B,EAAQ+B,GAAKX,EACbpB,EAAQgC,YAAcZ,EACtBpB,EAAQiC,KAAOb,EACfpB,EAAQkC,IAAMd,EACdpB,EAAQmC,eAAiBf,EACzBpB,EAAQoC,mBAAqBhB,EAC7BpB,EAAQqC,KAAOjB,EACfpB,EAAQsC,gBAAkBlB,EAC1BpB,EAAQuC,oBAAsBnB,EAE9BpB,EAAQwC,UAAY,SAAU1G,GAAQ,MAAO,IAE7CkE,EAAQyC,QAAU,SAAU3G,GACxB,MAAM,IAAIoE,MAAM,qCAGpBF,EAAQ0C,IAAM,WAAc,MAAO,KACnC1C,EAAQ2C,MAAQ,SAAUC,GACtB,MAAM,IAAI1C,MAAM,mCAEpBF,EAAQ6C,MAAQ,WAAa,OAAO,I,uBCvLpC,YAMAC,QAAUC,UACY,oBAAXpF,OACPmF,QAAUnF,YACe,IAAXE,EACdiF,QAAUjF,EACa,oBAATC,KACdgF,QAAUhF,KAEVgF,QAAUtF,KAEI,MAAdsF,QAAQE,KACRF,QAAQE,GAAK,CAACC,SAAU,KAEF,MAAvBH,QAAQE,GAAGC,WACVH,QAAQE,GAAGC,SAAW,M,wCCpB1B,wBASE,WAGA,IAAIF,EAMAG,EAAmB,IAGnBC,EAAkB,sBAGlBC,EAAiB,4BAMjBC,EAAc,yBAGdC,EAAkB,EAClBC,EAAkB,EAClBC,EAAqB,EAGrBC,EAAuB,EACvBC,EAAyB,EAGzBC,EAAiB,EACjBC,EAAqB,EACrBC,EAAwB,EACxBC,EAAkB,EAClBC,EAAwB,GACxBC,EAAoB,GACpBC,EAA0B,GAC1BC,EAAgB,IAChBC,EAAkB,IAClBC,EAAiB,IAYjBC,EAAW,IACXC,EAAmB,iBACnBC,EAAc,sBACdC,EAAM,IAGNC,EAAmB,WAGnBC,EAAY,CACd,CAAC,MAAOR,GACR,CAAC,OAAQP,GACT,CAAC,UAAWC,GACZ,CAAC,QAASE,GACV,CAAC,aAAcC,GACf,CAAC,OAAQK,GACT,CAAC,UAAWJ,GACZ,CAAC,eAAgBC,GACjB,CAAC,QAASE,IAIRQ,EAAU,qBACVC,EAAW,iBACXC,EAAW,yBACXC,EAAU,mBACVC,EAAU,gBACVC,EAAW,iBACXC,EAAU,oBACVC,EAAS,6BACTC,EAAS,eACTC,EAAY,kBACZC,EAAU,gBACVC,EAAY,kBACZC,EAAa,mBACbC,EAAW,iBACXC,EAAY,kBACZC,EAAS,eACTC,EAAY,kBACZC,EAAY,kBACZC,EAAe,qBACfC,EAAa,mBAEbC,EAAiB,uBACjBC,EAAc,oBACdC,EAAa,wBACbC,EAAa,wBACbC,GAAU,qBACVC,GAAW,sBACXC,GAAW,sBACXC,GAAW,sBACXC,GAAkB,6BAClBC,GAAY,uBACZC,GAAY,uBAGZC,EAAkB,WAClBC,EAAqBC,OAAOF,EAAgBG,QAG5CC,EAAe,mDACfC,EAAgB,QAChBC,GAAa,mGASbC,GAAS,aAGTC,GAAgB,4CAChBC,GAAgB,oCAChBC,GAAiB,QAGjBC,GAAe,WAGfC,GAAU,OAGVC,GAAa,qBAGbC,GAAa,aAGbC,GAAe,8BAGfC,GAAY,cAGZC,GAAW,mBAGXC,GAAgB,kBAIhBC,GAAeC,gDACfC,GAAa,iBAGbC,GAAW,IAAMJ,GAAgB,IACjCK,GAAU,IAAMJ,GAAe,IAC/BK,GAAS,2BAETC,GAAc,KAAOP,GAAgB,IACrCQ,GAAa,kCACbC,GAAa,qCACbC,GAAQ,UAGRC,GAPa,MAAQN,GAAU,IAAMC,GAAS,IAOtB,IACxBM,GAAW,IAAMT,GAAa,KAE9BU,GAAQD,GAAWD,IADP,MAAQD,GAAQ,MAAQ,CAACH,GAAaC,GAAYC,IAAYK,KAAK,KAAO,IAAMF,GAAWD,GAAW,MAElHI,GAAW,MAAQ,CAACR,GAAcF,GAAU,IAAKA,GAASG,GAAYC,GAAYL,IAAUU,KAAK,KAAO,IAGxGE,GAAYhC,OAAOsB,GAAS,MAAQA,GAAS,KAAOS,GAAWF,GAAO,KAGtEI,GAAejC,OAAO,IAAM0B,GAAQV,GAAiBC,GAAeE,GAAa,KAGjFe,GAAiB,GACrBA,GAAe7C,GAAc6C,GAAe5C,GACxC4C,GAAe3C,IAAW2C,GAAe1C,IACrC0C,GAAezC,IAAYyC,GAAexC,IACtCwC,GAAevC,IAAmBuC,GAAetC,IAC7CsC,GAAerC,KAAa,EAC5CqC,GAAenE,GAAWmE,GAAelE,GACrCkE,GAAe/C,GAAkB+C,GAAehE,GAC5CgE,GAAe9C,GAAe8C,GAAe/D,GACzC+D,GAAe9D,GAAY8D,GAAe7D,GACtC6D,GAAe3D,GAAU2D,GAAe1D,GACpC0D,GAAexD,GAAawD,GAAerD,GACvCqD,GAAepD,GAAUoD,GAAenD,GACpCmD,GAAehD,IAAc,EAGzD,IAAIiD,GAAgB,GACpBA,GAAcpE,GAAWoE,GAAcnE,GACnCmE,GAAchD,GAAkBgD,GAAc/C,GAC1C+C,GAAcjE,GAAWiE,GAAchE,GACnCgE,GAAc9C,GAAc8C,GAAc7C,GACtC6C,GAAc5C,IAAW4C,GAAc3C,IACnC2C,GAAc1C,IAAY0C,GAAc5D,GACpC4D,GAAc3D,GAAa2D,GAAczD,GACrCyD,GAActD,GAAasD,GAAcrD,GACrCqD,GAAcpD,GAAaoD,GAAcnD,GACrCmD,GAAczC,IAAYyC,GAAcxC,IACpCwC,GAAcvC,IAAauC,GAActC,KAAa,EAC9FsC,GAAc/D,GAAY+D,GAAc9D,GACpC8D,GAAcjD,IAAc,EAGhC,IASIkD,GAAiBC,WACjBC,GAAeC,SAGfC,GAA8B,iBAAVvL,IAAsBA,IAAUA,GAAO5B,SAAWA,QAAU4B,GAGhFwL,GAA0B,iBAARvL,MAAoBA,MAAQA,KAAK7B,SAAWA,QAAU6B,KAGxEwL,GAAOF,IAAcC,IAAY5L,SAAS,cAATA,GAGjC8L,GAA4ClO,KAAYA,GAAQmO,UAAYnO,GAG5EoO,GAAaF,IAAgC,iBAAVjO,IAAsBA,KAAWA,GAAOkO,UAAYlO,GAGvFoO,GAAgBD,IAAcA,GAAWpO,UAAYkO,GAGrDI,GAAcD,IAAiBN,GAAWpJ,QAG1C4J,GAAY,WACd,IACE,OAAOD,IAAeA,GAAYlH,SAAWkH,GAAYlH,QAAQ,QACjE,MAAO/E,KAHI,GAOXmM,GAAaD,IAAYA,GAASE,OAClCC,GAAYH,IAAYA,GAASI,MACjCC,GAAeL,IAAYA,GAASM,SACpCC,GAAYP,IAAYA,GAASQ,MACjCC,GAAmBT,IAAYA,GAASU,aAc5C,SAASvM,GAAMwM,EAAMC,EAASlJ,GAC5B,OAAQA,EAAKX,QACX,KAAK,EAAG,OAAO4J,EAAK7O,KAAK8O,GACzB,KAAK,EAAG,OAAOD,EAAK7O,KAAK8O,EAASlJ,EAAK,IACvC,KAAK,EAAG,OAAOiJ,EAAK7O,KAAK8O,EAASlJ,EAAK,GAAIA,EAAK,IAChD,KAAK,EAAG,OAAOiJ,EAAK7O,KAAK8O,EAASlJ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE3D,OAAOiJ,EAAKxM,MAAMyM,EAASlJ,GAa7B,SAASmJ,GAAgBtJ,EAAOuJ,EAAQC,EAAUC,GAIhD,IAHA,IAAIC,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,SAE9BkK,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GAClBH,EAAOE,EAAapO,EAAOmO,EAASnO,GAAQ2E,GAE9C,OAAOyJ,EAYT,SAASE,GAAU3J,EAAOwJ,GAIxB,IAHA,IAAIE,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,SAE9BkK,EAAQlK,IAC8B,IAAzCgK,EAASxJ,EAAM0J,GAAQA,EAAO1J,KAIpC,OAAOA,EAaT,SAAS4J,GAAW5J,EAAO6J,GAIzB,IAHA,IAAIH,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,SAE9BkK,EAAQlK,GACf,IAAKqK,EAAU7J,EAAM0J,GAAQA,EAAO1J,GAClC,OAAO,EAGX,OAAO,EAYT,SAAS8J,GAAY9J,EAAO6J,GAM1B,IALA,IAAIH,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACnCuK,EAAW,EACXC,EAAS,KAEJN,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GACdG,EAAUxO,EAAOqO,EAAO1J,KAC1BgK,EAAOD,KAAc1O,GAGzB,OAAO2O,EAYT,SAASC,GAAcjK,EAAO3E,GAE5B,SADsB,MAAT2E,EAAgB,EAAIA,EAAMR,UACY,EAAhC0K,GAAYlK,EAAO3E,EAAO,GAY/C,SAAS8O,GAAkBnK,EAAO3E,EAAO+O,GAIvC,IAHA,IAAIV,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,SAE9BkK,EAAQlK,GACf,GAAI4K,EAAW/O,EAAO2E,EAAM0J,IAC1B,OAAO,EAGX,OAAO,EAYT,SAASW,GAASrK,EAAOwJ,GAKvB,IAJA,IAAIE,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACnCwK,EAAS5J,MAAMZ,KAEVkK,EAAQlK,GACfwK,EAAON,GAASF,EAASxJ,EAAM0J,GAAQA,EAAO1J,GAEhD,OAAOgK,EAWT,SAASM,GAAUtK,EAAOuK,GAKxB,IAJA,IAAIb,GAAS,EACTlK,EAAS+K,EAAO/K,OAChBgL,EAASxK,EAAMR,SAEVkK,EAAQlK,GACfQ,EAAMwK,EAASd,GAASa,EAAOb,GAEjC,OAAO1J,EAeT,SAASyK,GAAYzK,EAAOwJ,EAAUC,EAAaiB,GACjD,IAAIhB,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OAKvC,IAHIkL,GAAalL,IACfiK,EAAczJ,IAAQ0J,MAEfA,EAAQlK,GACfiK,EAAcD,EAASC,EAAazJ,EAAM0J,GAAQA,EAAO1J,GAE3D,OAAOyJ,EAaT,SAASkB,GAAU3K,EAAO6J,GAIxB,IAHA,IAAIH,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,SAE9BkK,EAAQlK,GACf,GAAIqK,EAAU7J,EAAM0J,GAAQA,EAAO1J,GACjC,OAAO,EAGX,OAAO,EAUT,IAAI4K,GAAYC,GAAa,UAwB7B,SAASC,GAAYC,EAAYlB,EAAWmB,GAC1C,IAAIhB,EAOJ,OANAgB,EAASD,EAAY,SAAS1P,EAAOM,EAAKoP,GACxC,GAAIlB,EAAUxO,EAAOM,EAAKoP,GAExB,OADAf,EAASrO,GACF,IAGJqO,EAcT,SAASiB,GAAcjL,EAAO6J,EAAWqB,EAAWC,GAIlD,IAHA,IAAI3L,EAASQ,EAAMR,OACfkK,EAAQwB,GAAaC,EAAY,GAAK,GAElCA,EAAYzB,MAAYA,EAAQlK,GACtC,GAAIqK,EAAU7J,EAAM0J,GAAQA,EAAO1J,GACjC,OAAO0J,EAGX,OAAQ,EAYV,SAASQ,GAAYlK,EAAO3E,EAAO6P,GACjC,OAAO7P,GAAUA,EAuVnB,SAAS+P,EAAcpL,EAAO3E,EAAO6P,GACnC,IAAIxB,EAAQwB,EAAY,EACpB1L,EAASQ,EAAMR,OAEnB,OAASkK,EAAQlK,GACf,GAAIQ,EAAM0J,KAAWrO,EACnB,OAAOqO,EAGX,OAAQ,EA/VF0B,CAAcpL,EAAO3E,EAAO6P,GAC5BD,GAAcjL,EAAOqL,GAAWH,GAUxC,SAASG,GAAUhQ,GACjB,OAAOA,GAAUA,EAUnB,SAASwP,GAAalP,GACpB,OAAO,SAASG,GACd,OAAiB,MAAVA,EAAiB8F,EAAY9F,EAAOH,IA8B/C,SAAS2P,GAAWP,EAAYvB,EAAUC,EAAaiB,EAAWM,GAMhE,OALAA,EAASD,EAAY,SAAS1P,EAAOqO,EAAOqB,GAC1CtB,EAAciB,GACPA,GAAY,EAAOrP,GACpBmO,EAASC,EAAapO,EAAOqO,EAAOqB,KAErCtB,EAgCT,SAAS8B,GAAU1P,EAAG2N,GAIpB,IAHA,IAAIE,GAAS,EACTM,EAAS5J,MAAMvE,KAEV6N,EAAQ7N,GACfmO,EAAON,GAASF,EAASE,GAE3B,OAAOM,EAUT,SAASwB,GAAUpC,GACjB,OAAO,SAAS/N,GACd,OAAO+N,EAAK/N,IA4BhB,SAASoQ,GAASC,EAAO/P,GACvB,OAAO+P,EAAMC,IAAIhQ,GA+DnB,IAAIiQ,GAxKJ,SAASC,GAAe/P,GACtB,OAAO,SAASH,GACd,OAAiB,MAAVG,EAAiB8F,EAAY9F,EAAOH,IAsK1BkQ,CA7iBH,CAChB,IAAK,QACL,IAAK,OACL,IAAK,OACL,IAAK,SACL,IAAK,UA6jBP,SAASC,GAAWC,GAClB,OAAOrE,GAAasE,KAAKD,GA2B3B,SAASE,GAAWC,GAClB,IAAIxC,GAAS,EACTM,EAAS5J,MAAM8L,EAAIC,MAKvB,OAHAD,EAAIE,QAAQ,SAAS/Q,EAAOM,GAC1BqO,IAASN,GAAS,CAAC/N,EAAKN,KAEnB2O,EAWT,SAASqC,GAAQjD,EAAMkD,GACrB,OAAO,SAASC,GACd,OAAOnD,EAAKkD,EAAUC,KAa1B,SAASC,GAAexM,EAAOyM,GAM7B,IALA,IAAI/C,GAAS,EACTlK,EAASQ,EAAMR,OACfuK,EAAW,EACXC,EAAS,KAEJN,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GACdrO,IAAUoR,GAAepR,IAAU6G,IACrClC,EAAM0J,GAASxH,EACf8H,EAAOD,KAAcL,GAGzB,OAAOM,EAWT,SAAS0C,GAAQ5Q,EAAQH,GACvB,MAAc,aAAPA,EACDiG,EACA9F,EAAOH,GAUf,SAASgR,GAAWC,GAClB,IAAIlD,GAAS,EACTM,EAAS5J,MAAMwM,EAAIT,MAKvB,OAHAS,EAAIR,QAAQ,SAAS/Q,GACnB2O,IAASN,GAASrO,IAEb2O,EAgCT,SAAS6C,GAAWd,GAClB,OAAOD,GAAWC,GAyBpB,SAASe,EAAYf,GACnB,IAAI/B,EAASvC,GAAUsF,UAAY,EACnC,KAAOtF,GAAUuE,KAAKD,MAClB/B,EAEJ,OAAOA,EA7BD8C,CAAYf,GACZnB,GAAUmB,GAUlB,SAASiB,GAAcjB,GACrB,OAAOD,GAAWC,GA2BpB,SAASkB,EAAelB,GACtB,OAAOA,EAAOmB,MAAMzF,KAAc,GA3B5BwF,CAAelB,GApbvB,SAASoB,EAAapB,GACpB,OAAOA,EAAOqB,MAAM,IAobdD,CAAapB,GAgCrB,IAkBMsB,GAlBFC,GAAalN,MAAMpE,UACnBuR,GAAYjR,SAASN,UACrBwR,GAAc1S,OAAOkB,UAGrByR,GAAatF,GAAK,sBAGlBuF,GAAeH,GAAUI,SAGzB1R,GAAiBuR,GAAYvR,eAG7B2R,GAAY,EAGZC,IACER,GAAM,SAASS,KAAKL,IAAcA,GAAWM,MAAQN,GAAWM,KAAKC,UAAY,KACvE,iBAAmBX,GAAO,GAQtCY,GAAuBT,GAAYG,SAGnCO,GAAmBR,GAAanT,KAAKO,QAGrCqT,GAAUhG,GAAKiG,EAGfC,GAAa5I,OAAO,IACpBiI,GAAanT,KAAK0B,IAAgBqS,QA/3BnB,sBA+3ByC,QACnDA,QAAQ,yDAA0D,SAAW,KAIlFC,GAAShG,GAAgBJ,GAAKoG,OAAS3M,EACvCzG,GAASgN,GAAKhN,OACdqT,GAAarG,GAAKqG,WAClBC,GAAcF,GAASA,GAAOE,YAAc7M,EAC5C8M,GAAerC,GAAQvR,OAAO6T,eAAgB7T,QAC9C8T,GAAe9T,OAAOY,OACtBmT,GAAuBrB,GAAYqB,qBACnCC,GAASxB,GAAWwB,OACpBC,GAAmB5T,GAASA,GAAO6T,mBAAqBpN,EACxDqN,GAAc9T,GAASA,GAAO+T,SAAWtN,EACzCuN,GAAiBhU,GAASA,GAAOC,YAAcwG,EAE/C7G,GAAkB,WACpB,IACE,IAAIqO,EAAOgG,GAAUtU,OAAQ,kBAE7B,OADAsO,EAAK,GAAI,GAAI,IACNA,EACP,MAAO7M,KALU,GASjB8S,GAAaC,KAAKC,KAClBC,GAAcF,KAAKG,MACnBC,GAAmB5U,OAAO6U,sBAC1BC,GAAiBrB,GAASA,GAAOsB,SAAWjO,EAC5CkO,GAAiB3H,GAAK4H,SACtBC,GAAa3D,GAAQvR,OAAOiT,KAAMjT,QAClCmV,GAAYX,KAAKY,IACjBC,GAAYb,KAAKc,IACjBC,GAAYC,KAAKC,IACjBC,GAAelB,KAAKmB,OAIpBC,IAHgBpD,GAAWqD,QAGhBvB,GAAUjH,GAAM,aAC3ByI,GAAMxB,GAAUjH,GAAM,OACtB0I,GAAUzB,GAAUjH,GAAM,WAC1B2I,GAAM1B,GAAUjH,GAAM,OACtB4I,GAAU3B,GAAUjH,GAAM,WAC1B6I,GAAe5B,GAAUtU,OAAQ,UAGjCmW,GAAUF,IAAW,IAAIA,GAGzBG,GAAY,GAGZC,GAAqBC,GAASV,IAC9BW,GAAgBD,GAASR,IACzBU,GAAoBF,GAASP,IAC7BU,GAAgBH,GAASN,IACzBU,GAAoBJ,GAASL,IAG7BU,GAActW,GAASA,GAAOa,UAAY4F,EAC1C8P,GAAgBD,GAAcA,GAAYE,QAAU/P,EACpDgQ,GAAiBH,GAAcA,GAAY9D,SAAW/L,EAyH1D,SAASiQ,GAAOxW,GACd,GAAIyW,GAAazW,KAAW0W,GAAQ1W,MAAYA,aAAiB2W,IAAc,CAC7E,GAAI3W,aAAiB4W,GACnB,OAAO5W,EAET,GAAIY,GAAe1B,KAAKc,EAAO,eAC7B,OAAO6W,GAAa7W,GAGxB,OAAO,IAAI4W,GAAc5W,GAW3B,IAAI8W,GAEK,SAASC,GACd,IAAKC,GAASD,GACZ,MAAO,GAET,GAAIxD,GACF,OAAOA,GAAawD,GAEtBtW,GAAOE,UAAYoW,EACnB,IAAIpI,EAAS,IAAIlO,GAEjB,OADAA,GAAOE,UAAY4F,EACZoI,GAXT,SAASlO,MAoBX,SAASwW,MAWT,SAASL,GAAc5W,EAAOkX,GAC5BlW,KAAKmW,YAAcnX,EACnBgB,KAAKoW,YAAc,GACnBpW,KAAKqW,YAAcH,EACnBlW,KAAKsW,UAAY,EACjBtW,KAAKuW,WAAahR,EAmBpB,SAASoQ,GAAY3W,GACnBgB,KAAKmW,YAAcnX,EACnBgB,KAAKoW,YAAc,GACnBpW,KAAKwW,QAAU,EACfxW,KAAKyW,cAAe,EACpBzW,KAAK0W,cAAgB,GACrB1W,KAAK2W,cAAgB1P,EACrBjH,KAAK4W,UAAY,GAgHnB,SAASC,GAAKC,GACZ,IAAIzJ,GAAS,EACTlK,EAAoB,MAAX2T,EAAkB,EAAIA,EAAQ3T,OAG3C,IADAnD,KAAK+W,UACI1J,EAAQlK,GAAQ,CACvB,IAAI6T,EAAQF,EAAQzJ,GACpBrN,KAAKuQ,IAAIyG,EAAM,GAAIA,EAAM,KAiG7B,SAASC,GAAUH,GACjB,IAAIzJ,GAAS,EACTlK,EAAoB,MAAX2T,EAAkB,EAAIA,EAAQ3T,OAG3C,IADAnD,KAAK+W,UACI1J,EAAQlK,GAAQ,CACvB,IAAI6T,EAAQF,EAAQzJ,GACpBrN,KAAKuQ,IAAIyG,EAAM,GAAIA,EAAM,KA8G7B,SAASE,GAASJ,GAChB,IAAIzJ,GAAS,EACTlK,EAAoB,MAAX2T,EAAkB,EAAIA,EAAQ3T,OAG3C,IADAnD,KAAK+W,UACI1J,EAAQlK,GAAQ,CACvB,IAAI6T,EAAQF,EAAQzJ,GACpBrN,KAAKuQ,IAAIyG,EAAM,GAAIA,EAAM,KAiG7B,SAASG,GAASjJ,GAChB,IAAIb,GAAS,EACTlK,EAAmB,MAAV+K,EAAiB,EAAIA,EAAO/K,OAGzC,IADAnD,KAAKoX,SAAW,IAAIF,KACX7J,EAAQlK,GACfnD,KAAKqX,IAAInJ,EAAOb,IA6CpB,SAASiK,GAAMR,GACb,IAAIS,EAAOvX,KAAKoX,SAAW,IAAIH,GAAUH,GACzC9W,KAAK8P,KAAOyH,EAAKzH,KAqGnB,SAAS0H,GAAcxY,EAAOyY,GAC5B,IAAIC,EAAQhC,GAAQ1W,GAChB2Y,GAASD,GAASE,GAAY5Y,GAC9B6Y,GAAUH,IAAUC,GAASnE,GAASxU,GACtC8Y,GAAUJ,IAAUC,IAAUE,GAAU/K,GAAa9N,GACrD+Y,EAAcL,GAASC,GAASE,GAAUC,EAC1CnK,EAASoK,EAAc7I,GAAUlQ,EAAMmE,OAAQ6U,QAAU,GACzD7U,EAASwK,EAAOxK,OAEpB,IAAK,IAAI7D,KAAON,GACTyY,IAAa7X,GAAe1B,KAAKc,EAAOM,IACvCyY,IAES,UAAPzY,GAECuY,IAAkB,UAAPvY,GAA0B,UAAPA,IAE9BwY,IAAkB,UAAPxY,GAA0B,cAAPA,GAA8B,cAAPA,IAEtD2Y,GAAQ3Y,EAAK6D,KAEnBwK,EAAO3J,KAAK1E,GAGhB,OAAOqO,EAYT,SAASuK,GAAiBzY,EAAQH,EAAKN,IAChCA,IAAUuG,GAAc4S,GAAG1Y,EAAOH,GAAMN,MACxCA,IAAUuG,GAAejG,KAAOG,IACnC2Y,GAAgB3Y,EAAQH,EAAKN,GAcjC,SAASqZ,GAAY5Y,EAAQH,EAAKN,GAChC,IAAIsZ,EAAW7Y,EAAOH,GAChBM,GAAe1B,KAAKuB,EAAQH,IAAQ6Y,GAAGG,EAAUtZ,KAClDA,IAAUuG,GAAejG,KAAOG,IACnC2Y,GAAgB3Y,EAAQH,EAAKN,GAYjC,SAASuZ,GAAa5U,EAAOrE,GAE3B,IADA,IAAI6D,EAASQ,EAAMR,OACZA,KACL,GAAIgV,GAAGxU,EAAMR,GAAQ,GAAI7D,GACvB,OAAO6D,EAGX,OAAQ,EAcV,SAASqV,GAAe9J,EAAYxB,EAAQC,EAAUC,GAIpD,OAHAqL,GAAS/J,EAAY,SAAS1P,EAAOM,EAAKoP,GACxCxB,EAAOE,EAAapO,EAAOmO,EAASnO,GAAQ0P,KAEvCtB,EAYT,SAASsL,GAAWjZ,EAAQ4J,GAC1B,OAAO5J,GAAUkZ,GAAWtP,EAAQqI,GAAKrI,GAAS5J,GAyBpD,SAAS2Y,GAAgB3Y,EAAQH,EAAKN,GACzB,aAAPM,GAAsBZ,GACxBA,GAAee,EAAQH,EAAK,CAC1B,cAAgB,EAChB,YAAc,EACd,MAASN,EACT,UAAY,IAGdS,EAAOH,GAAON,EA6DlB,SAAS4Z,GAAU5Z,EAAO6Z,EAASC,EAAYxZ,EAAKG,EAAQsZ,GAC1D,IAAIpL,EACAqL,EAASH,EAAU/S,EACnBmT,EAASJ,EAAU9S,EACnBmT,EAASL,EAAU7S,EAKvB,GAHI8S,IACFnL,EAASlO,EAASqZ,EAAW9Z,EAAOM,EAAKG,EAAQsZ,GAASD,EAAW9Z,IAEnE2O,IAAWpI,EACb,OAAOoI,EAET,IAAKqI,GAAShX,GACZ,OAAOA,EAET,IAAI0Y,EAAQhC,GAAQ1W,GACpB,GAAI0Y,GAEF,GADA/J,EA4sFJ,SAASwL,EAAexV,GACtB,IAAIR,EAASQ,EAAMR,OACfwK,EAAS,IAAIhK,EAAMyV,YAAYjW,GAG/BA,GAA6B,iBAAZQ,EAAM,IAAkB/D,GAAe1B,KAAKyF,EAAO,WACtEgK,EAAON,MAAQ1J,EAAM0J,MACrBM,EAAO0L,MAAQ1V,EAAM0V,OAEvB,OAAO1L,EArtFIwL,CAAena,IACnBga,EACH,OAAOM,GAAUta,EAAO2O,OAErB,CACL,IAAI4L,EAAMC,GAAOxa,GACbya,EAASF,GAAO9R,GAAW8R,GAAO7R,EAEtC,GAAI8L,GAASxU,GACX,OAAO0a,GAAY1a,EAAOga,GAE5B,GAAIO,GAAOzR,GAAayR,GAAOpS,GAAYsS,IAAWha,GAEpD,GADAkO,EAAUsL,GAAUQ,EAAU,GAAKE,GAAgB3a,IAC9Cga,EACH,OAAOC,EAmpDf,SAASW,EAAcvQ,EAAQ5J,GAC7B,OAAOkZ,GAAWtP,EAAQwQ,GAAaxQ,GAAS5J,GAnpDpCma,CAAc5a,EAnH5B,SAAS8a,EAAara,EAAQ4J,GAC5B,OAAO5J,GAAUkZ,GAAWtP,EAAQ0Q,GAAO1Q,GAAS5J,GAkHnBqa,CAAanM,EAAQ3O,IAsoDxD,SAASgb,EAAY3Q,EAAQ5J,GAC3B,OAAOkZ,GAAWtP,EAAQ4Q,GAAW5Q,GAAS5J,GAtoDlCua,CAAYhb,EAAO0Z,GAAW/K,EAAQ3O,QAEzC,CACL,IAAKuM,GAAcgO,GACjB,OAAO9Z,EAAST,EAAQ,GAE1B2O,EA2tFN,SAASuM,EAAeza,EAAQ8Z,EAAKP,GACnC,IAAImB,EAAO1a,EAAO2Z,YAClB,OAAQG,GACN,KAAKhR,EACH,OAAO6R,GAAiB3a,GAE1B,KAAK6H,EACL,KAAKC,EACH,OAAO,IAAI4S,GAAM1a,GAEnB,KAAK+I,EACH,OAv2CN,SAAS6R,EAAcC,EAAUtB,GAC/B,IAAIuB,EAASvB,EAASoB,GAAiBE,EAASC,QAAUD,EAASC,OACnE,OAAO,IAAID,EAASlB,YAAYmB,EAAQD,EAASE,WAAYF,EAASG,YAq2C3DJ,CAAc5a,EAAQuZ,GAE/B,KAAKvQ,EAAY,KAAKC,EACtB,KAAKC,GAAS,KAAKC,GAAU,KAAKC,GAClC,KAAKC,GAAU,KAAKC,GAAiB,KAAKC,GAAW,KAAKC,GACxD,OAAOyR,GAAgBjb,EAAQuZ,GAEjC,KAAKrR,EACH,OAAO,IAAIwS,EAEb,KAAKvS,EACL,KAAKO,EACH,OAAO,IAAIgS,EAAK1a,GAElB,KAAKwI,EACH,OA12CN,SAAS0S,EAAYC,GACnB,IAAIjN,EAAS,IAAIiN,EAAOxB,YAAYwB,EAAOvR,OAAQS,GAAQ2H,KAAKmJ,IAEhE,OADAjN,EAAO+C,UAAYkK,EAAOlK,UACnB/C,EAu2CIgN,CAAYlb,GAErB,KAAKyI,EACH,OAAO,IAAIiS,EAEb,KAAK/R,EACH,OAn2CN,SAASyS,EAAYC,GACnB,OAAOzF,GAAgB5W,OAAO4W,GAAcnX,KAAK4c,IAAW,GAk2CjDD,CAAYpb,IA3vFVya,CAAelb,EAAOua,EAAKP,IAKxC,IAAI+B,GADMhC,EAAVA,GAAkB,IAAIzB,IACF1Y,IAAII,GACxB,GAAI+b,EACF,OAAOA,EAIT,GAFAhC,EAAMxI,IAAIvR,EAAO2O,GAEbf,GAAM5N,GAKR,OAJAA,EAAM+Q,QAAQ,SAASiL,GACrBrN,EAAO0J,IAAIuB,GAAUoC,EAAUnC,EAASC,EAAYkC,EAAUhc,EAAO+Z,MAGhEpL,EAGT,GAAInB,GAAMxN,GAKR,OAJAA,EAAM+Q,QAAQ,SAASiL,EAAU1b,GAC/BqO,EAAO4C,IAAIjR,EAAKsZ,GAAUoC,EAAUnC,EAASC,EAAYxZ,EAAKN,EAAO+Z,MAGhEpL,EAGT,IAIIsN,EAAQvD,EAAQnS,GAJL2T,EACRD,EAASiC,GAAeC,GACxBlC,EAASc,GAASrI,IAEgB1S,GASzC,OARAsO,GAAU2N,GAASjc,EAAO,SAASgc,EAAU1b,GACvC2b,IAEFD,EAAWhc,EADXM,EAAM0b,IAIR3C,GAAY1K,EAAQrO,EAAKsZ,GAAUoC,EAAUnC,EAASC,EAAYxZ,EAAKN,EAAO+Z,MAEzEpL,EAaT,SAASyN,GAAUrO,EAAMsO,EAAMvX,GAC7B,GAAmB,mBAARiJ,EACT,MAAM,IAAIuO,UAAU3V,GAEtB,OAAO9E,WAAW,WAAakM,EAAKxM,MAAMgF,EAAWzB,IAAUuX,GAcjE,SAASE,GAAe5X,EAAOuK,EAAQf,EAAUY,GAC/C,IAAIV,GAAS,EACTmO,EAAW5N,GACX6N,GAAW,EACXtY,EAASQ,EAAMR,OACfwK,EAAS,GACT+N,EAAexN,EAAO/K,OAE1B,IAAKA,EACH,OAAOwK,EAELR,IACFe,EAASF,GAASE,EAAQiB,GAAUhC,KAElCY,GACFyN,EAAW1N,GACX2N,GAAW,GAEJvN,EAAO/K,QAAUuC,IACxB8V,EAAWpM,GACXqM,GAAW,EACXvN,EAAS,IAAIiJ,GAASjJ,IAExByN,EACI,OAAStO,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GACduO,EAAuB,MAAZzO,EAAmBnO,EAAQmO,EAASnO,GAGnD,GADAA,EAAS+O,GAAwB,IAAV/O,EAAeA,EAAQ,EAC1Cyc,GAAYG,GAAaA,EAAU,CAErC,IADA,IAAIC,EAAcH,EACXG,KACL,GAAI3N,EAAO2N,KAAiBD,EAC1B,SAASD,EAGbhO,EAAO3J,KAAKhF,QAEJwc,EAAStN,EAAQ0N,EAAU7N,IACnCJ,EAAO3J,KAAKhF,GAGpB,OAAO2O,GAv8BT6H,GAAO7V,UAAYsW,GAAWtW,WACbyZ,YAAc5D,IAE/BI,GAAcjW,UAAYmW,GAAWG,GAAWtW,YACxByZ,YAAcxD,IAsHtCD,GAAYhW,UAAYmW,GAAWG,GAAWtW,YACxByZ,YAAczD,GAoGpCkB,GAAKlX,UAAUoX,MAvEf,SAAS+E,KACP9b,KAAKoX,SAAWzC,GAAeA,GAAa,MAAQ,GACpD3U,KAAK8P,KAAO,GAsEd+G,GAAKlX,UAAkB,UAzDvB,SAASoc,GAAWzc,GAClB,IAAIqO,EAAS3N,KAAKsP,IAAIhQ,WAAeU,KAAKoX,SAAS9X,GAEnD,OADAU,KAAK8P,MAAQnC,EAAS,EAAI,EACnBA,GAuDTkJ,GAAKlX,UAAUf,IA3Cf,SAASod,GAAQ1c,GACf,IAAIiY,EAAOvX,KAAKoX,SAChB,GAAIzC,GAAc,CAChB,IAAIhH,EAAS4J,EAAKjY,GAClB,OAAOqO,IAAW/H,EAAiBL,EAAYoI,EAEjD,OAAO/N,GAAe1B,KAAKqZ,EAAMjY,GAAOiY,EAAKjY,GAAOiG,GAsCtDsR,GAAKlX,UAAU2P,IA1Bf,SAAS2M,GAAQ3c,GACf,IAAIiY,EAAOvX,KAAKoX,SAChB,OAAOzC,GAAgB4C,EAAKjY,KAASiG,EAAa3F,GAAe1B,KAAKqZ,EAAMjY,IAyB9EuX,GAAKlX,UAAU4Q,IAZf,SAAS2L,GAAQ5c,EAAKN,GACpB,IAAIuY,EAAOvX,KAAKoX,SAGhB,OAFApX,KAAK8P,MAAQ9P,KAAKsP,IAAIhQ,GAAO,EAAI,EACjCiY,EAAKjY,GAAQqV,IAAgB3V,IAAUuG,EAAaK,EAAiB5G,EAC9DgB,MAyHTiX,GAAUtX,UAAUoX,MApFpB,SAASoF,KACPnc,KAAKoX,SAAW,GAChBpX,KAAK8P,KAAO,GAmFdmH,GAAUtX,UAAkB,UAvE5B,SAASyc,GAAgB9c,GACvB,IAAIiY,EAAOvX,KAAKoX,SACZ/J,EAAQkL,GAAahB,EAAMjY,GAE/B,QAAI+N,EAAQ,KAIRA,GADYkK,EAAKpU,OAAS,EAE5BoU,EAAK8E,MAEL5J,GAAOvU,KAAKqZ,EAAMlK,EAAO,KAEzBrN,KAAK8P,MACA,IA0DTmH,GAAUtX,UAAUf,IA9CpB,SAAS0d,GAAahd,GACpB,IAAIiY,EAAOvX,KAAKoX,SACZ/J,EAAQkL,GAAahB,EAAMjY,GAE/B,OAAO+N,EAAQ,EAAI9H,EAAYgS,EAAKlK,GAAO,IA2C7C4J,GAAUtX,UAAU2P,IA/BpB,SAASiN,GAAajd,GACpB,OAA2C,EAApCiZ,GAAavY,KAAKoX,SAAU9X,IA+BrC2X,GAAUtX,UAAU4Q,IAlBpB,SAASiM,GAAald,EAAKN,GACzB,IAAIuY,EAAOvX,KAAKoX,SACZ/J,EAAQkL,GAAahB,EAAMjY,GAQ/B,OANI+N,EAAQ,KACRrN,KAAK8P,KACPyH,EAAKvT,KAAK,CAAC1E,EAAKN,KAEhBuY,EAAKlK,GAAO,GAAKrO,EAEZgB,MA2GTkX,GAASvX,UAAUoX,MAtEnB,SAAS0F,KACPzc,KAAK8P,KAAO,EACZ9P,KAAKoX,SAAW,CACd,KAAQ,IAAIP,GACZ,IAAO,IAAKtC,IAAO0C,IACnB,OAAU,IAAIJ,KAkElBK,GAASvX,UAAkB,UArD3B,SAAS+c,GAAepd,GACtB,IAAIqO,EAASgP,GAAW3c,KAAMV,GAAa,UAAEA,GAE7C,OADAU,KAAK8P,MAAQnC,EAAS,EAAI,EACnBA,GAmDTuJ,GAASvX,UAAUf,IAvCnB,SAASge,GAAYtd,GACnB,OAAOqd,GAAW3c,KAAMV,GAAKV,IAAIU,IAuCnC4X,GAASvX,UAAU2P,IA3BnB,SAASuN,GAAYvd,GACnB,OAAOqd,GAAW3c,KAAMV,GAAKgQ,IAAIhQ,IA2BnC4X,GAASvX,UAAU4Q,IAdnB,SAASuM,GAAYxd,EAAKN,GACxB,IAAIuY,EAAOoF,GAAW3c,KAAMV,GACxBwQ,EAAOyH,EAAKzH,KAIhB,OAFAyH,EAAKhH,IAAIjR,EAAKN,GACdgB,KAAK8P,MAAQyH,EAAKzH,MAAQA,EAAO,EAAI,EAC9B9P,MA2DTmX,GAASxX,UAAU0X,IAAMF,GAASxX,UAAUqE,KAnB5C,SAAS+Y,GAAY/d,GAEnB,OADAgB,KAAKoX,SAAS7G,IAAIvR,EAAO4G,GAClB5F,MAkBTmX,GAASxX,UAAU2P,IANnB,SAAS0N,GAAYhe,GACnB,OAAOgB,KAAKoX,SAAS9H,IAAItQ,IAuG3BsY,GAAM3X,UAAUoX,MA3EhB,SAASkG,KACPjd,KAAKoX,SAAW,IAAIH,GACpBjX,KAAK8P,KAAO,GA0EdwH,GAAM3X,UAAkB,UA9DxB,SAASud,GAAY5d,GACnB,IAAIiY,EAAOvX,KAAKoX,SACZzJ,EAAS4J,EAAa,UAAEjY,GAG5B,OADAU,KAAK8P,KAAOyH,EAAKzH,KACVnC,GA0DT2J,GAAM3X,UAAUf,IA9ChB,SAASue,GAAS7d,GAChB,OAAOU,KAAKoX,SAASxY,IAAIU,IA8C3BgY,GAAM3X,UAAU2P,IAlChB,SAAS8N,GAAS9d,GAChB,OAAOU,KAAKoX,SAAS9H,IAAIhQ,IAkC3BgY,GAAM3X,UAAU4Q,IArBhB,SAAS8M,GAAS/d,EAAKN,GACrB,IAAIuY,EAAOvX,KAAKoX,SAChB,GAAIG,aAAgBN,GAAW,CAC7B,IAAIqG,EAAQ/F,EAAKH,SACjB,IAAK7C,IAAQ+I,EAAMna,OAASuC,EAAmB,EAG7C,OAFA4X,EAAMtZ,KAAK,CAAC1E,EAAKN,IACjBgB,KAAK8P,OAASyH,EAAKzH,KACZ9P,KAETuX,EAAOvX,KAAKoX,SAAW,IAAIF,GAASoG,GAItC,OAFA/F,EAAKhH,IAAIjR,EAAKN,GACdgB,KAAK8P,KAAOyH,EAAKzH,KACV9P,MAiYT,IAAIyY,GA6kDJ,SAAS8E,GAAe5O,EAAUG,GAChC,OAAO,SAASJ,EAAYvB,GAC1B,GAAkB,MAAduB,EACF,OAAOA,EAET,IAAK8O,GAAY9O,GACf,OAAOC,EAASD,EAAYvB,GAM9B,IAJA,IAAIhK,EAASuL,EAAWvL,OACpBkK,EAAQyB,EAAY3L,GAAU,EAC9Bsa,EAAWhf,OAAOiQ,IAEdI,EAAYzB,MAAYA,EAAQlK,KACa,IAA/CgK,EAASsQ,EAASpQ,GAAQA,EAAOoQ,KAIvC,OAAO/O,GA9lDI6O,CAAeG,IAW9B,SAASC,GAAUjP,EAAYlB,GAC7B,IAAIG,GAAS,EAKb,OAJA8K,GAAS/J,EAAY,SAAS1P,EAAOqO,EAAOqB,GAE1C,OADAf,IAAWH,EAAUxO,EAAOqO,EAAOqB,KAG9Bf,EAaT,SAASiQ,GAAaja,EAAOwJ,EAAUY,GAIrC,IAHA,IAAIV,GAAS,EACTlK,EAASQ,EAAMR,SAEVkK,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GACdwQ,EAAU1Q,EAASnO,GAEvB,GAAe,MAAX6e,IAAoBjC,IAAarW,EAC1BsY,GAAYA,IAAYC,GAASD,GAClC9P,EAAW8P,EAASjC,IAE5B,IAAIA,EAAWiC,EACXlQ,EAAS3O,EAGjB,OAAO2O,EAWT,SAASoQ,GAAWrP,EAAYlB,GAC9B,IAAIG,EAAS,GAMb,OALA8K,GAAS/J,EAAY,SAAS1P,EAAOqO,EAAOqB,GACtClB,EAAUxO,EAAOqO,EAAOqB,IAC1Bf,EAAO3J,KAAKhF,KAGT2O,EAcT,SAASqQ,GAAYra,EAAOsa,EAAOzQ,EAAW0Q,EAAUvQ,GACtD,IAAIN,GAAS,EACTlK,EAASQ,EAAMR,OAKnB,IAHcqK,EAAdA,GAA0B2Q,GACfxQ,EAAXA,GAAoB,KAEXN,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GACN,EAAR4Q,GAAazQ,EAAUxO,GACb,EAARif,EAEFD,GAAYhf,EAAOif,EAAQ,EAAGzQ,EAAW0Q,EAAUvQ,GAEnDM,GAAUN,EAAQ3O,GAEVkf,IACVvQ,EAAOA,EAAOxK,QAAUnE,GAG5B,OAAO2O,EAcT,IAAIyQ,GAAUC,KAYVC,GAAeD,IAAc,GAUjC,SAASX,GAAWje,EAAQ0N,GAC1B,OAAO1N,GAAU2e,GAAQ3e,EAAQ0N,EAAUuE,IAW7C,SAAS6M,GAAgB9e,EAAQ0N,GAC/B,OAAO1N,GAAU6e,GAAa7e,EAAQ0N,EAAUuE,IAYlD,SAAS8M,GAAc/e,EAAQwb,GAC7B,OAAOxN,GAAYwN,EAAO,SAAS3b,GACjC,OAAOmf,GAAWhf,EAAOH,MAY7B,SAASof,GAAQjf,EAAQkf,GAMvB,IAHA,IAAItR,EAAQ,EACRlK,GAHJwb,EAAOC,GAASD,EAAMlf,IAGJ0D,OAED,MAAV1D,GAAkB4N,EAAQlK,GAC/B1D,EAASA,EAAOof,GAAMF,EAAKtR,OAE7B,OAAQA,GAASA,GAASlK,EAAU1D,EAAS8F,EAc/C,SAASuZ,GAAerf,EAAQsf,EAAUC,GACxC,IAAIrR,EAASoR,EAAStf,GACtB,OAAOiW,GAAQjW,GAAUkO,EAASM,GAAUN,EAAQqR,EAAYvf,IAUlE,SAASwf,GAAWjgB,GAClB,OAAa,MAATA,EACKA,IAAUuG,EAAY8C,EAAeR,EAEtCiL,IAAkBA,MAAkBrU,OAAOO,GAksErD,SAASkgB,EAAUlgB,GACjB,IAAImgB,EAAQvf,GAAe1B,KAAKc,EAAO8T,IACnCyG,EAAMva,EAAM8T,IAEhB,IACE9T,EAAM8T,IAAkBvN,EACxB,IAAI6Z,GAAW,EACf,MAAOlf,IAET,IAAIyN,EAASiE,GAAqB1T,KAAKc,GACnCogB,IACED,EACFngB,EAAM8T,IAAkByG,SAEjBva,EAAM8T,KAGjB,OAAOnF,EAltEDuR,CAAUlgB,GA6tFlB,SAASqgB,EAAergB,GACtB,OAAO4S,GAAqB1T,KAAKc,GA7tF3BqgB,CAAergB,GAYvB,SAASsgB,GAAOtgB,EAAOugB,GACrB,OAAeA,EAARvgB,EAWT,SAASwgB,GAAQ/f,EAAQH,GACvB,OAAiB,MAAVG,GAAkBG,GAAe1B,KAAKuB,EAAQH,GAWvD,SAASmgB,GAAUhgB,EAAQH,GACzB,OAAiB,MAAVG,GAAkBH,KAAOb,OAAOgB,GA4GzC,SAASigB,GAAgB1gB,GACvB,OAAOyW,GAAazW,IAAUigB,GAAWjgB,IAAUmI,EA4BrD,SAASwY,GAAY3gB,EAAOugB,EAAO1G,EAASC,EAAYC,GACtD,OAAI/Z,IAAUugB,IAGD,MAATvgB,GAA0B,MAATugB,IAAmB9J,GAAazW,KAAWyW,GAAa8J,GACpEvgB,GAAUA,GAASugB,GAAUA,EAmBxC,SAASK,EAAgBngB,EAAQ8f,EAAO1G,EAASC,EAAY+G,EAAW9G,GACtE,IAAI+G,EAAWpK,GAAQjW,GACnBsgB,EAAWrK,GAAQ6J,GACnBS,EAASF,EAAW1Y,EAAWoS,GAAO/Z,GACtCwgB,EAASF,EAAW3Y,EAAWoS,GAAO+F,GAKtCW,GAHJF,EAASA,GAAU7Y,EAAUW,EAAYkY,IAGhBlY,EACrBqY,GAHJF,EAASA,GAAU9Y,EAAUW,EAAYmY,IAGhBnY,EACrBsY,EAAYJ,GAAUC,EAE1B,GAAIG,GAAa5M,GAAS/T,GAAS,CACjC,IAAK+T,GAAS+L,GACZ,OAAO,EAGTW,IADAJ,GAAW,GAGb,GAAIM,IAAcF,EAEhB,OADUnH,EAAVA,GAAkB,IAAIzB,GACdwI,GAAYhT,GAAarN,GAC3B4gB,GAAY5gB,EAAQ8f,EAAO1G,EAASC,EAAY+G,EAAW9G,GA+sDrE,SAASuH,EAAW7gB,EAAQ8f,EAAOhG,EAAKV,EAASC,EAAY+G,EAAW9G,GACtE,OAAQQ,GACN,KAAK/Q,EACH,GAAK/I,EAAOgb,YAAc8E,EAAM9E,YAC3Bhb,EAAO+a,YAAc+E,EAAM/E,WAC9B,OAAO,EAET/a,EAASA,EAAO8a,OAChBgF,EAAQA,EAAMhF,OAEhB,KAAKhS,EACH,QAAK9I,EAAOgb,YAAc8E,EAAM9E,aAC3BoF,EAAU,IAAI1N,GAAW1S,GAAS,IAAI0S,GAAWoN,KAKxD,KAAKjY,EACL,KAAKC,EACL,KAAKK,EAGH,OAAOuQ,IAAI1Y,GAAS8f,GAEtB,KAAK/X,EACH,OAAO/H,EAAOnB,MAAQihB,EAAMjhB,MAAQmB,EAAO8gB,SAAWhB,EAAMgB,QAE9D,KAAKtY,EACL,KAAKE,EAIH,OAAO1I,GAAW8f,EAAQ,GAE5B,KAAK5X,EACH,IAAI6Y,EAAU5Q,GAEhB,KAAK1H,EACH,IAAIuY,EAAY5H,EAAU5S,EAG1B,GAFYua,EAAZA,GAAsBlQ,GAElB7Q,EAAOqQ,MAAQyP,EAAMzP,OAAS2Q,EAChC,OAAO,EAGT,IAAI1F,EAAUhC,EAAMna,IAAIa,GACxB,GAAIsb,EACF,OAAOA,GAAWwE,EAEpB1G,GAAW3S,EAGX6S,EAAMxI,IAAI9Q,EAAQ8f,GAClB,IAAI5R,EAAS0S,GAAYG,EAAQ/gB,GAAS+gB,EAAQjB,GAAQ1G,EAASC,EAAY+G,EAAW9G,GAE1F,OADAA,EAAc,UAAEtZ,GACTkO,EAET,KAAKvF,EACH,GAAIiN,GACF,OAAOA,GAAcnX,KAAKuB,IAAW4V,GAAcnX,KAAKqhB,GAG9D,OAAO,EA5wDCe,CAAW7gB,EAAQ8f,EAAOS,EAAQnH,EAASC,EAAY+G,EAAW9G,GAE1E,KAAMF,EAAU5S,GAAuB,CACrC,IAAIya,EAAeR,GAAYtgB,GAAe1B,KAAKuB,EAAQ,eACvDkhB,EAAeR,GAAYvgB,GAAe1B,KAAKqhB,EAAO,eAE1D,GAAImB,GAAgBC,EAAc,CAChC,IAAIC,EAAeF,EAAejhB,EAAOT,QAAUS,EAC/CohB,EAAeF,EAAepB,EAAMvgB,QAAUugB,EAGlD,OADUxG,EAAVA,GAAkB,IAAIzB,GACfuI,EAAUe,EAAcC,EAAchI,EAASC,EAAYC,IAGtE,OAAKqH,IAGKrH,EAAVA,GAAkB,IAAIzB,GA2wDxB,SAASwJ,EAAarhB,EAAQ8f,EAAO1G,EAASC,EAAY+G,EAAW9G,GACnE,IAAI0H,EAAY5H,EAAU5S,EACtB8a,EAAW5F,GAAW1b,GACtBuhB,EAAYD,EAAS5d,OAErB8d,EADW9F,GAAWoE,GACDpc,OAEzB,GAAI6d,GAAaC,IAAcR,EAC7B,OAAO,EAET,IAAIpT,EAAQ2T,EACZ,KAAO3T,KAAS,CACd,IAAI/N,EAAMyhB,EAAS1T,GACnB,KAAMoT,EAAYnhB,KAAOigB,EAAQ3f,GAAe1B,KAAKqhB,EAAOjgB,IAC1D,OAAO,EAIX,IAAIyb,EAAUhC,EAAMna,IAAIa,GACxB,GAAIsb,GAAWhC,EAAMna,IAAI2gB,GACvB,OAAOxE,GAAWwE,EAEpB,IAAI5R,GAAS,EACboL,EAAMxI,IAAI9Q,EAAQ8f,GAClBxG,EAAMxI,IAAIgP,EAAO9f,GAEjB,IAAIyhB,EAAWT,EACf,OAASpT,EAAQ2T,GAAW,CAC1B1hB,EAAMyhB,EAAS1T,GACf,IAAIiL,EAAW7Y,EAAOH,GAClB6hB,EAAW5B,EAAMjgB,GAErB,GAAIwZ,EACF,IAAIsI,EAAWX,EACT3H,EAAWqI,EAAU7I,EAAUhZ,EAAKigB,EAAO9f,EAAQsZ,GACnDD,EAAWR,EAAU6I,EAAU7hB,EAAKG,EAAQ8f,EAAOxG,GAG3D,KAAMqI,IAAa7b,EACR+S,IAAa6I,GAAYtB,EAAUvH,EAAU6I,EAAUtI,EAASC,EAAYC,GAC7EqI,GACP,CACDzT,GAAS,EACT,MAEWuT,EAAbA,GAA+B,eAAP5hB,EAE1B,GAAIqO,IAAWuT,EAAU,CACvB,IAAIG,EAAU5hB,EAAO2Z,YACjBkI,EAAU/B,EAAMnG,YAGhBiI,GAAWC,GACV,gBAAiB7hB,GAAU,gBAAiB8f,KACzB,mBAAX8B,GAAyBA,aAAmBA,GAC/B,mBAAXC,GAAyBA,aAAmBA,KACzD3T,GAAS,GAKb,OAFAoL,EAAc,UAAEtZ,GAChBsZ,EAAc,UAAEwG,GACT5R,EAv0DAmT,CAAarhB,EAAQ8f,EAAO1G,EAASC,EAAY+G,EAAW9G,IA3D5D6G,CAAgB5gB,EAAOugB,EAAO1G,EAASC,EAAY6G,GAAa5G,IAuIzE,SAASwI,GAAaviB,GACpB,SAAKgX,GAAShX,IAyvEhB,SAASwiB,EAASzU,GAChB,QAASyE,IAAeA,MAAczE,EA1vEdyU,CAASxiB,MAGnByf,GAAWzf,GAASgT,GAAa/H,IAChC0F,KAAKoF,GAAS/V,IA4C/B,SAASyiB,GAAaziB,GAGpB,MAAoB,mBAATA,EACFA,EAEI,MAATA,EACK0iB,GAEW,iBAAT1iB,EACF0W,GAAQ1W,GAyGnB,SAAS2iB,EAAoBhD,EAAMiD,GACjC,GAAIC,GAAMlD,IAASmD,GAAmBF,GACpC,OAAOG,GAAwBlD,GAAMF,GAAOiD,GAE9C,OAAO,SAASniB,GACd,IAAI6Y,EAAW1Z,GAAIa,EAAQkf,GAC3B,OAAQrG,IAAa/S,GAAa+S,IAAasJ,EACzCI,GAAMviB,EAAQkf,GACdgB,GAAYiC,EAAUtJ,EAAUrS,EAAuBC,IAhHvDyb,CAAoB3iB,EAAM,GAAIA,EAAM,IACpCijB,GAAYjjB,GA8sNtB,SAASU,EAASif,GAChB,OAAOkD,GAAMlD,GAAQnQ,GAAaqQ,GAAMF,IAt6M1C,SAASuD,EAAiBvD,GACxB,OAAO,SAASlf,GACd,OAAOif,GAAQjf,EAAQkf,IAo6MwBuD,CAAiBvD,GA7sN3Djf,CAASV,GAUlB,SAASmjB,GAAS1iB,GAChB,IAAK2iB,GAAY3iB,GACf,OAAOkU,GAAWlU,GAEpB,IAAIkO,EAAS,GACb,IAAK,IAAIrO,KAAOb,OAAOgB,GACjBG,GAAe1B,KAAKuB,EAAQH,IAAe,eAAPA,GACtCqO,EAAO3J,KAAK1E,GAGhB,OAAOqO,EAUT,SAAS0U,GAAW5iB,GAClB,IAAKuW,GAASvW,GACZ,OAgzEJ,SAAS6iB,EAAa7iB,GACpB,IAAIkO,EAAS,GACb,GAAc,MAAVlO,EACF,IAAK,IAAIH,KAAOb,OAAOgB,GACrBkO,EAAO3J,KAAK1E,GAGhB,OAAOqO,EAvzEE2U,CAAa7iB,GAEtB,IAAI8iB,EAAUH,GAAY3iB,GACtBkO,EAAS,GAEb,IAAK,IAAIrO,KAAOG,GACD,eAAPH,IAAyBijB,GAAY3iB,GAAe1B,KAAKuB,EAAQH,KACrEqO,EAAO3J,KAAK1E,GAGhB,OAAOqO,EAYT,SAAS6U,GAAOxjB,EAAOugB,GACrB,OAAOvgB,EAAQugB,EAWjB,SAASkD,GAAQ/T,EAAYvB,GAC3B,IAAIE,GAAS,EACTM,EAAS6P,GAAY9O,GAAc3K,MAAM2K,EAAWvL,QAAU,GAKlE,OAHAsV,GAAS/J,EAAY,SAAS1P,EAAOM,EAAKoP,GACxCf,IAASN,GAASF,EAASnO,EAAOM,EAAKoP,KAElCf,EAUT,SAASsU,GAAY5Y,GACnB,IAAIqZ,EAgtDN,SAASC,EAAaljB,GACpB,IAAIkO,EAAS+D,GAAKjS,GACd0D,EAASwK,EAAOxK,OAEpB,KAAOA,KAAU,CACf,IAAI7D,EAAMqO,EAAOxK,GACbnE,EAAQS,EAAOH,GAEnBqO,EAAOxK,GAAU,CAAC7D,EAAKN,EAAO8iB,GAAmB9iB,IAEnD,OAAO2O,EA1tDSgV,CAAatZ,GAC7B,OAAwB,GAApBqZ,EAAUvf,QAAeuf,EAAU,GAAG,GACjCX,GAAwBW,EAAU,GAAG,GAAIA,EAAU,GAAG,IAExD,SAASjjB,GACd,OAAOA,IAAW4J,GA5MtB,SAASuZ,EAAYnjB,EAAQ4J,EAAQqZ,EAAW5J,GAC9C,IAAIzL,EAAQqV,EAAUvf,OAClBA,EAASkK,EACTwV,GAAgB/J,EAEpB,GAAc,MAAVrZ,EACF,OAAQ0D,EAGV,IADA1D,EAAShB,OAAOgB,GACT4N,KAAS,CACd,IAAIkK,EAAOmL,EAAUrV,GACrB,GAAKwV,GAAgBtL,EAAK,GACpBA,EAAK,KAAO9X,EAAO8X,EAAK,MACtBA,EAAK,KAAM9X,GAEjB,OAAO,EAGX,OAAS4N,EAAQlK,GAAQ,CAEvB,IAAI7D,GADJiY,EAAOmL,EAAUrV,IACF,GACXiL,EAAW7Y,EAAOH,GAClBsiB,EAAWrK,EAAK,GAEpB,GAAIsL,GAAgBtL,EAAK,IACvB,GAAIe,IAAa/S,KAAejG,KAAOG,GACrC,OAAO,MAEJ,CACL,IAAIsZ,EAAQ,IAAIzB,GAChB,GAAIwB,EACF,IAAInL,EAASmL,EAAWR,EAAUsJ,EAAUtiB,EAAKG,EAAQ4J,EAAQ0P,GAEnE,KAAMpL,IAAWpI,EACPoa,GAAYiC,EAAUtJ,EAAUrS,EAAuBC,EAAwB4S,EAAYC,GAC3FpL,GAER,OAAO,GAIb,OAAO,EAmKuBiV,CAAYnjB,EAAQ4J,EAAQqZ,IAmC5D,SAASI,GAAUrjB,EAAQ4J,EAAQ0Z,EAAUjK,EAAYC,GACnDtZ,IAAW4J,GAGf+U,GAAQ/U,EAAQ,SAASuY,EAAUtiB,GACjC,GAAI0W,GAAS4L,GACD7I,EAAVA,GAAkB,IAAIzB,GA+B5B,SAAS0L,EAAcvjB,EAAQ4J,EAAQ/J,EAAKyjB,EAAUE,EAAWnK,EAAYC,GAC3E,IAAIT,EAAWjI,GAAQ5Q,EAAQH,GAC3BsiB,EAAWvR,GAAQhH,EAAQ/J,GAC3Byb,EAAUhC,EAAMna,IAAIgjB,GAExB,GAAI7G,EAEF,YADA7C,GAAiBzY,EAAQH,EAAKyb,GAGhC,IAAImI,EAAWpK,EACTA,EAAWR,EAAUsJ,EAAWtiB,EAAM,GAAKG,EAAQ4J,EAAQ0P,GAC3DxT,EAEFkW,EAAWyH,IAAa3d,EAE5B,GAAIkW,EAAU,CACZ,IAAI/D,EAAQhC,GAAQkM,GAChB/J,GAAUH,GAASlE,GAASoO,GAC5BuB,GAAWzL,IAAUG,GAAU/K,GAAa8U,GAEhDsB,EAAWtB,EACPlK,GAASG,GAAUsL,EAEnBD,EADExN,GAAQ4C,GACCA,EAEJ8K,GAAkB9K,GACdgB,GAAUhB,GAEdT,EAEI6B,GAAYkI,IADvBnG,GAAW,IAGJ0H,EAEIzI,GAAgBkH,IAD3BnG,GAAW,IAIA,GAGN4H,GAAczB,IAAahK,GAAYgK,GAE1ChK,GADJsL,EAAW5K,GAET4K,EAm0KR,SAASI,EAActkB,GACrB,OAAO2Z,GAAW3Z,EAAO+a,GAAO/a,IAp0KfskB,CAAchL,KAEjBtC,GAASsC,IAAcyK,GAAYtE,GAAWnG,MACtD4K,EAAWvJ,GAAgBiI,IAI7BnG,GAAW,EAGXA,IAEF1C,EAAMxI,IAAIqR,EAAUsB,GACpBD,EAAUC,EAAUtB,EAAUmB,EAAUjK,EAAYC,GACpDA,EAAc,UAAE6I,IAElB1J,GAAiBzY,EAAQH,EAAK4jB,GAzF1BF,CAAcvjB,EAAQ4J,EAAQ/J,EAAKyjB,EAAUD,GAAWhK,EAAYC,OAEjE,CACH,IAAImK,EAAWpK,EACTA,EAAWzI,GAAQ5Q,EAAQH,GAAMsiB,EAAWtiB,EAAM,GAAKG,EAAQ4J,EAAQ0P,GACvExT,EAEF2d,IAAa3d,IACf2d,EAAWtB,GAEb1J,GAAiBzY,EAAQH,EAAK4jB,KAE/BnJ,IAyFL,SAASwJ,GAAY7U,EAAY8U,EAAWC,GAC1C,IAAIpW,GAAS,EAUb,OATAmW,EAAYxV,GAASwV,EAAUrgB,OAASqgB,EAAY,CAAC9B,IAAWvS,GAAUsS,KAt3E5E,SAASiC,EAAW/f,EAAOggB,GACzB,IAAIxgB,EAASQ,EAAMR,OAGnB,IADAQ,EAAMigB,KAAKD,GACJxgB,KACLQ,EAAMR,GAAUQ,EAAMR,GAAQnE,MAEhC,OAAO2E,EAw3EA+f,CAPMjB,GAAQ/T,EAAY,SAAS1P,EAAOM,EAAKoP,GAIpD,MAAO,CAAE,SAHMV,GAASwV,EAAW,SAASrW,GAC1C,OAAOA,EAASnO,KAEa,QAAWqO,EAAO,MAASrO,KAGlC,SAASS,EAAQ8f,GACzC,OA4hBJ,SAASsE,EAAgBpkB,EAAQ8f,EAAOkE,GACtC,IAAIpW,GAAS,EACTyW,EAAcrkB,EAAOskB,SACrBC,EAAczE,EAAMwE,SACpB5gB,EAAS2gB,EAAY3gB,OACrB8gB,EAAeR,EAAOtgB,OAE1B,OAASkK,EAAQlK,GAAQ,CACvB,IAAIwK,EAASuW,GAAiBJ,EAAYzW,GAAQ2W,EAAY3W,IAC9D,GAAIM,EAAQ,CACV,GAAasW,GAAT5W,EACF,OAAOM,EAET,IAAIwW,EAAQV,EAAOpW,GACnB,OAAOM,GAAmB,QAATwW,GAAmB,EAAI,IAU5C,OAAO1kB,EAAO4N,MAAQkS,EAAMlS,MApjBnBwW,CAAgBpkB,EAAQ8f,EAAOkE,KA4B1C,SAASW,GAAW3kB,EAAQ2C,EAAOoL,GAKjC,IAJA,IAAIH,GAAS,EACTlK,EAASf,EAAMe,OACfwK,EAAS,KAEJN,EAAQlK,GAAQ,CACvB,IAAIwb,EAAOvc,EAAMiL,GACbrO,EAAQ0f,GAAQjf,EAAQkf,GAExBnR,EAAUxO,EAAO2f,IACnB0F,GAAQ1W,EAAQiR,GAASD,EAAMlf,GAAST,GAG5C,OAAO2O,EA4DT,SAAS2W,GAASvX,EAAMwX,GACtB,OAAOC,GAAYC,GAAS1X,EAAMwX,EAAO7C,IAAW3U,EAAO,IAa7D,SAASsX,GAAQ5kB,EAAQkf,EAAM3f,EAAO8Z,GACpC,IAAK9C,GAASvW,GACZ,OAAOA,EAST,IALA,IAAI4N,GAAS,EACTlK,GAHJwb,EAAOC,GAASD,EAAMlf,IAGJ0D,OACduN,EAAYvN,EAAS,EACrBuhB,EAASjlB,EAEI,MAAVilB,KAAoBrX,EAAQlK,GAAQ,CACzC,IAAI7D,EAAMuf,GAAMF,EAAKtR,IACjB6V,EAAWlkB,EAEf,GAAIqO,GAASqD,EAAW,CACtB,IAAI4H,EAAWoM,EAAOplB,IACtB4jB,EAAWpK,EAAaA,EAAWR,EAAUhZ,EAAKolB,GAAUnf,KAC3CA,IACf2d,EAAWlN,GAASsC,GACdA,EACCL,GAAQ0G,EAAKtR,EAAQ,IAAM,GAAK,IAG3CgL,GAAYqM,EAAQplB,EAAK4jB,GACzBwB,EAASA,EAAOplB,GAElB,OAAOG,EAWT,IAAIklB,GAAe/P,GAAqB,SAAS7H,EAAMwK,GAErD,OADA3C,GAAQrE,IAAIxD,EAAMwK,GACXxK,GAFoB2U,GAazBkD,GAAmBlmB,GAA4B,SAASqO,EAAM2C,GAChE,OAAOhR,GAAeqO,EAAM,WAAY,CACtC,cAAgB,EAChB,YAAc,EACd,MAAS8X,GAASnV,GAClB,UAAY,KALwBgS,GAkBxC,SAASoD,GAAUnhB,EAAO4gB,EAAOQ,GAC/B,IAAI1X,GAAS,EACTlK,EAASQ,EAAMR,OAEfohB,EAAQ,IACVA,EAAiBphB,GAARohB,EAAiB,EAAKphB,EAASohB,IAE1CQ,EAAY5hB,EAAN4hB,EAAe5hB,EAAS4hB,GACpB,IACRA,GAAO5hB,GAETA,EAAiB4hB,EAARR,EAAc,EAAMQ,EAAMR,IAAW,EAC9CA,KAAW,EAGX,IADA,IAAI5W,EAAS5J,MAAMZ,KACVkK,EAAQlK,GACfwK,EAAON,GAAS1J,EAAM0J,EAAQkX,GAEhC,OAAO5W,EAYT,SAASqX,GAAStW,EAAYlB,GAC5B,IAAIG,EAMJ,OAJA8K,GAAS/J,EAAY,SAAS1P,EAAOqO,EAAOqB,GAE1C,QADAf,EAASH,EAAUxO,EAAOqO,EAAOqB,QAG1Bf,EAWX,SAASsX,GAAajmB,GAEpB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI0W,GAAQ1W,GAEV,OAAOgP,GAAShP,EAAOimB,IAAgB,GAEzC,GAAInH,GAAS9e,GACX,OAAOuW,GAAiBA,GAAerX,KAAKc,GAAS,GAEvD,IAAI2O,EAAU3O,EAAQ,GACtB,MAAkB,KAAV2O,GAAkB,EAAI3O,IAAW6H,EAAY,KAAO8G,EAY9D,SAASuX,GAASvhB,EAAOwJ,EAAUY,GACjC,IAAIV,GAAS,EACTmO,EAAW5N,GACXzK,EAASQ,EAAMR,OACfsY,GAAW,EACX9N,EAAS,GACTwX,EAAOxX,EAEX,GAAII,EACF0N,GAAW,EACXD,EAAW1N,QAER,GAAcpI,GAAVvC,EAA4B,CACnC,IAAIoN,EAAMpD,EAAW,KAAOiY,GAAUzhB,GACtC,GAAI4M,EACF,OAAOD,GAAWC,GAEpBkL,GAAW,EACXD,EAAWpM,GACX+V,EAAO,IAAIhO,QAGXgO,EAAOhY,EAAW,GAAKQ,EAEzBgO,EACI,OAAStO,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GACduO,EAAWzO,EAAWA,EAASnO,GAASA,EAG5C,GADAA,EAAS+O,GAAwB,IAAV/O,EAAeA,EAAQ,EAC1Cyc,GAAYG,GAAaA,EAAU,CAErC,IADA,IAAIyJ,EAAYF,EAAKhiB,OACdkiB,KACL,GAAIF,EAAKE,KAAezJ,EACtB,SAASD,EAGTxO,GACFgY,EAAKnhB,KAAK4X,GAEZjO,EAAO3J,KAAKhF,QAEJwc,EAAS2J,EAAMvJ,EAAU7N,KAC7BoX,IAASxX,GACXwX,EAAKnhB,KAAK4X,GAEZjO,EAAO3J,KAAKhF,IAGpB,OAAO2O,EA2BT,SAAS2X,GAAiBtmB,EAAOumB,GAC/B,IAAI5X,EAAS3O,EAIb,OAHI2O,aAAkBgI,KACpBhI,EAASA,EAAO3O,SAEXoP,GAAYmX,EAAS,SAAS5X,EAAQ6X,GAC3C,OAAOA,EAAOzY,KAAKxM,MAAMilB,EAAOxY,QAASiB,GAAU,CAACN,GAAS6X,EAAO1hB,QACnE6J,GAgCL,SAAS8X,GAAoBzmB,GAC3B,OAAOokB,GAAkBpkB,GAASA,EAAQ,GAW5C,SAAS4f,GAAS5f,EAAOS,GACvB,OAAIiW,GAAQ1W,GACHA,EAEF6iB,GAAM7iB,EAAOS,GAAU,CAACT,GAAS0mB,GAAapU,GAAStS,IA0BhE,SAAS0a,GAAYa,EAAQvB,GAC3B,GAAIA,EACF,OAAOuB,EAAOoL,QAEhB,IAAIxiB,EAASoX,EAAOpX,OAChBwK,EAASyE,GAAcA,GAAYjP,GAAU,IAAIoX,EAAOnB,YAAYjW,GAGxE,OADAoX,EAAOqL,KAAKjY,GACLA,EAUT,SAASyM,GAAiByL,GACxB,IAAIlY,EAAS,IAAIkY,EAAYzM,YAAYyM,EAAYpL,YAErD,OADA,IAAItI,GAAWxE,GAAQ4C,IAAI,IAAI4B,GAAW0T,IACnClY,EAgDT,SAAS+M,GAAgBoL,EAAY9M,GACnC,IAAIuB,EAASvB,EAASoB,GAAiB0L,EAAWvL,QAAUuL,EAAWvL,OACvE,OAAO,IAAIuL,EAAW1M,YAAYmB,EAAQuL,EAAWtL,WAAYsL,EAAW3iB,QAW9E,SAAS+gB,GAAiBllB,EAAOugB,GAC/B,GAAIvgB,IAAUugB,EAAO,CACnB,IAAIwG,EAAe/mB,IAAUuG,EACzBygB,EAAsB,OAAVhnB,EACZinB,EAAiBjnB,GAAUA,EAC3BknB,EAAcpI,GAAS9e,GAEvBmnB,EAAe5G,IAAUha,EACzB6gB,EAAsB,OAAV7G,EACZ8G,EAAiB9G,GAAUA,EAC3B+G,EAAcxI,GAASyB,GAE3B,IAAM6G,IAAcE,IAAgBJ,GAAuB3G,EAARvgB,GAC9CknB,GAAeC,GAAgBE,IAAmBD,IAAcE,GAChEN,GAAaG,GAAgBE,IAC5BN,GAAgBM,IACjBJ,EACH,OAAO,EAET,IAAMD,IAAcE,IAAgBI,GAAetnB,EAAQugB,GACtD+G,GAAeP,GAAgBE,IAAmBD,IAAcE,GAChEE,GAAaL,GAAgBE,IAC5BE,GAAgBF,IACjBI,EACH,OAAQ,EAGZ,OAAO,EAuDT,SAASE,GAAYziB,EAAM0iB,EAAUC,EAASC,GAU5C,IATA,IAAIC,GAAa,EACbC,EAAa9iB,EAAKX,OAClB0jB,EAAgBJ,EAAQtjB,OACxB2jB,GAAa,EACbC,EAAaP,EAASrjB,OACtB6jB,EAAcpT,GAAUgT,EAAaC,EAAe,GACpDlZ,EAAS5J,MAAMgjB,EAAaC,GAC5BC,GAAeP,IAEVI,EAAYC,GACnBpZ,EAAOmZ,GAAaN,EAASM,GAE/B,OAASH,EAAYE,IACfI,GAAeN,EAAYC,KAC7BjZ,EAAO8Y,EAAQE,IAAc7iB,EAAK6iB,IAGtC,KAAOK,KACLrZ,EAAOmZ,KAAehjB,EAAK6iB,KAE7B,OAAOhZ,EAcT,SAASuZ,GAAiBpjB,EAAM0iB,EAAUC,EAASC,GAWjD,IAVA,IAAIC,GAAa,EACbC,EAAa9iB,EAAKX,OAClBgkB,GAAgB,EAChBN,EAAgBJ,EAAQtjB,OACxBikB,GAAc,EACdC,EAAcb,EAASrjB,OACvB6jB,EAAcpT,GAAUgT,EAAaC,EAAe,GACpDlZ,EAAS5J,MAAMijB,EAAcK,GAC7BJ,GAAeP,IAEVC,EAAYK,GACnBrZ,EAAOgZ,GAAa7iB,EAAK6iB,GAG3B,IADA,IAAIxY,EAASwY,IACJS,EAAaC,GACpB1Z,EAAOQ,EAASiZ,GAAcZ,EAASY,GAEzC,OAASD,EAAeN,IAClBI,GAAeN,EAAYC,KAC7BjZ,EAAOQ,EAASsY,EAAQU,IAAiBrjB,EAAK6iB,MAGlD,OAAOhZ,EAWT,SAAS2L,GAAUjQ,EAAQ1F,GACzB,IAAI0J,GAAS,EACTlK,EAASkG,EAAOlG,OAGpB,IADUQ,EAAVA,GAAkBI,MAAMZ,KACfkK,EAAQlK,GACfQ,EAAM0J,GAAShE,EAAOgE,GAExB,OAAO1J,EAaT,SAASgV,GAAWtP,EAAQ4R,EAAOxb,EAAQqZ,GACzC,IAAIwO,GAAS7nB,EACFA,EAAXA,GAAoB,GAKpB,IAHA,IAAI4N,GAAS,EACTlK,EAAS8X,EAAM9X,SAEVkK,EAAQlK,GAAQ,CACvB,IAAI7D,EAAM2b,EAAM5N,GAEZ6V,EAAWpK,EACTA,EAAWrZ,EAAOH,GAAM+J,EAAO/J,GAAMA,EAAKG,EAAQ4J,GAClD9D,EAEF2d,IAAa3d,IACf2d,EAAW7Z,EAAO/J,IAEhBgoB,EACFlP,GAAgB3Y,EAAQH,EAAK4jB,GAE7B7K,GAAY5Y,EAAQH,EAAK4jB,GAG7B,OAAOzjB,EAmCT,SAAS8nB,GAAiBra,EAAQsa,GAChC,OAAO,SAAS9Y,EAAYvB,GAC1B,IAAIJ,EAAO2I,GAAQhH,GAAczB,GAAkBuL,GAC/CpL,EAAcoa,EAAcA,IAAgB,GAEhD,OAAOza,EAAK2B,EAAYxB,EAAQuU,GAAatU,GAAcC,IAW/D,SAASqa,GAAeC,GACtB,OAAOpD,GAAS,SAAS7kB,EAAQkoB,GAC/B,IAAIta,GAAS,EACTlK,EAASwkB,EAAQxkB,OACjB2V,EAAsB,EAAT3V,EAAawkB,EAAQxkB,EAAS,GAAKoC,EAChDqiB,EAAiB,EAATzkB,EAAawkB,EAAQ,GAAKpiB,EAWtC,IATAuT,EAAgC,EAAlB4O,EAASvkB,QAAmC,mBAAd2V,GACrC3V,IAAU2V,GACXvT,EAEFqiB,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClD9O,EAAa3V,EAAS,EAAIoC,EAAYuT,EACtC3V,EAAS,GAEX1D,EAAShB,OAAOgB,KACP4N,EAAQlK,GAAQ,CACvB,IAAIkG,EAASse,EAAQta,GACjBhE,GACFqe,EAASjoB,EAAQ4J,EAAQgE,EAAOyL,GAGpC,OAAOrZ,IAwCX,SAAS4e,GAAcvP,GACrB,OAAO,SAASrP,EAAQ0N,EAAU4R,GAMhC,IALA,IAAI1R,GAAS,EACToQ,EAAWhf,OAAOgB,GAClBwb,EAAQ8D,EAAStf,GACjB0D,EAAS8X,EAAM9X,OAEZA,KAAU,CACf,IAAI7D,EAAM2b,EAAMnM,EAAY3L,IAAWkK,GACvC,IAA+C,IAA3CF,EAASsQ,EAASne,GAAMA,EAAKme,GAC/B,MAGJ,OAAOhe,GAiCX,SAASqoB,GAAW3N,GAClB,OAAO,WAIL,IAAIrW,EAAOhD,UACX,OAAQgD,EAAKX,QACX,KAAK,EAAG,OAAO,IAAIgX,EACnB,KAAK,EAAG,OAAO,IAAIA,EAAKrW,EAAK,IAC7B,KAAK,EAAG,OAAO,IAAIqW,EAAKrW,EAAK,GAAIA,EAAK,IACtC,KAAK,EAAG,OAAO,IAAIqW,EAAKrW,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC/C,KAAK,EAAG,OAAO,IAAIqW,EAAKrW,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACxD,KAAK,EAAG,OAAO,IAAIqW,EAAKrW,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACjE,KAAK,EAAG,OAAO,IAAIqW,EAAKrW,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1E,KAAK,EAAG,OAAO,IAAIqW,EAAKrW,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAErF,IAAIikB,EAAcjS,GAAWqE,EAAKxa,WAC9BgO,EAASwM,EAAK5Z,MAAMwnB,EAAajkB,GAIrC,OAAOkS,GAASrI,GAAUA,EAASoa,GAgFvC,SAASC,GAAajb,EAAM8L,EAAS7L,EAASwZ,EAAUC,EAASwB,EAAeC,EAAcC,EAAQC,EAAKC,GACzG,IAAIC,EAAQzP,EAAUnS,EAClB6hB,EAAS1P,EAAU1S,EACnBqiB,EAAY3P,EAAUzS,EACtBsgB,EAAY7N,GAAWvS,EAAkBC,GACzCkiB,EAAS5P,EAAUjS,EACnBuT,EAAOqO,EAAYjjB,EAAYuiB,GAAW/a,GA6C9C,OA3CA,SAAS2b,IAKP,IAJA,IAAIvlB,EAASrC,UAAUqC,OACnBW,EAAOC,MAAMZ,GACbkK,EAAQlK,EAELkK,KACLvJ,EAAKuJ,GAASvM,UAAUuM,GAE1B,GAAIqZ,EACF,IAAItW,EAAcuY,GAAUD,GACxBE,EA1tGV,SAASC,EAAallB,EAAOyM,GAI3B,IAHA,IAAIjN,EAASQ,EAAMR,OACfwK,EAAS,EAENxK,KACDQ,EAAMR,KAAYiN,KAClBzC,EAGN,OAAOA,EAitGgBkb,CAAa/kB,EAAMsM,GASxC,GAPIoW,IACF1iB,EAAOyiB,GAAYziB,EAAM0iB,EAAUC,EAASC,IAE1CuB,IACFnkB,EAAOojB,GAAiBpjB,EAAMmkB,EAAeC,EAAcxB,IAE7DvjB,GAAUylB,EACNlC,GAAavjB,EAASklB,EAAO,CAC/B,IAAIS,EAAa3Y,GAAerM,EAAMsM,GACtC,OAAO2Y,GACHhc,EAAM8L,EAASmP,GAAcU,EAAQtY,YAAapD,EAClDlJ,EAAMglB,EAAYX,EAAQC,EAAKC,EAAQllB,GAG7C,IAAI4kB,EAAcQ,EAASvb,EAAUhN,KACjCgpB,EAAKR,EAAYT,EAAYhb,GAAQA,EAczC,OAZA5J,EAASW,EAAKX,OACVglB,EACFrkB,EAusCN,SAASmlB,EAAQtlB,EAAOulB,GAKtB,IAJA,IAAIC,EAAYxlB,EAAMR,OAClBA,EAAS2Q,GAAUoV,EAAQ/lB,OAAQgmB,GACnCC,EAAW9P,GAAU3V,GAElBR,KAAU,CACf,IAAIkK,EAAQ6b,EAAQ/lB,GACpBQ,EAAMR,GAAU8U,GAAQ5K,EAAO8b,GAAaC,EAAS/b,GAAS9H,EAEhE,OAAO5B,EAhtCIslB,CAAQnlB,EAAMqkB,GACZM,GAAmB,EAATtlB,GACnBW,EAAKwQ,UAEHgU,GAASF,EAAMjlB,IACjBW,EAAKX,OAASilB,GAEZpoB,MAAQA,OAAS8L,IAAQ9L,gBAAgB0oB,IAC3CM,EAAK7O,GAAQ2N,GAAWkB,IAEnBA,EAAGzoB,MAAMwnB,EAAajkB,IAajC,SAASulB,GAAenc,EAAQoc,GAC9B,OAAO,SAAS7pB,EAAQ0N,GACtB,OAp/CJ,SAASoc,EAAa9pB,EAAQyN,EAAQC,EAAUC,GAI9C,OAHAsQ,GAAWje,EAAQ,SAAST,EAAOM,EAAKG,GACtCyN,EAAOE,EAAaD,EAASnO,GAAQM,EAAKG,KAErC2N,EAg/CEmc,CAAa9pB,EAAQyN,EAAQoc,EAAWnc,GAAW,KAiF9D,SAAS4b,GAAchc,EAAM8L,EAAS2Q,EAAUpZ,EAAapD,EAASwZ,EAAUC,EAAS0B,EAAQC,EAAKC,GACpG,IAAIoB,EAAU5Q,EAAUvS,EAMxBuS,GAAY4Q,EAAUjjB,EAAoBC,GAC1CoS,KAAa4Q,EAAUhjB,EAA0BD,IAEjCH,IACdwS,KAAa1S,EAAiBC,IAEhC,IAAIsjB,EAAU,CACZ3c,EAAM8L,EAAS7L,EAVCyc,EAAUjD,EAAWjhB,EAFtBkkB,EAAUhD,EAAUlhB,EAGdkkB,EAAUlkB,EAAYihB,EAFvBiD,EAAUlkB,EAAYkhB,EAYzB0B,EAAQC,EAAKC,GAG5B1a,EAAS6b,EAASjpB,MAAMgF,EAAWmkB,GAKvC,OAm1BF,SAASC,EAAW5c,GAClB,IAAI6c,EApbN,SAASC,EAAY9c,GACnB,IAAIY,EAAUZ,EAAKzO,KAAO,GACtBqF,EAAQkR,GAAUlH,GAClBxK,EAASvD,GAAe1B,KAAK2W,GAAWlH,GAAUhK,EAAMR,OAAS,EAErE,KAAOA,KAAU,CACf,IAAIoU,EAAO5T,EAAMR,GACb2mB,EAAYvS,EAAKxK,KACrB,GAAiB,MAAb+c,GAAqBA,GAAa/c,EACpC,OAAOwK,EAAKjZ,KAGhB,OAAOqP,EAwaQkc,CAAY9c,GACvBwS,EAAQ/J,GAAOoU,GAEnB,GAAoB,mBAATrK,KAAyBqK,KAAYjU,GAAYhW,WAC1D,OAAO,EAET,GAAIoN,IAASwS,EACX,OAAO,EAET,IAAIhI,EAAOwS,GAAQxK,GACnB,QAAShI,GAAQxK,IAASwK,EAAK,GAl2B3BoS,CAAW5c,IACbid,GAAQrc,EAAQ+b,GAElB/b,EAAOyC,YAAcA,EACd6Z,GAAgBtc,EAAQZ,EAAM8L,GAUvC,IAAIuM,GAAc3Q,IAAQ,EAAInE,GAAW,IAAImE,GAAI,CAAC,EAAE,KAAK,IAAO5N,EAAmB,SAASqH,GAC1F,OAAO,IAAIuG,GAAIvG,IAD2DtK,GA6B5E,SAASsmB,GAAWnd,EAAM8L,EAAS7L,EAASwZ,EAAUC,EAAS0B,EAAQC,EAAKC,GAC1E,IAAIG,EAAY3P,EAAUzS,EAC1B,IAAKoiB,GAA4B,mBAARzb,EACvB,MAAM,IAAIuO,UAAU3V,GAEtB,IAAIxC,EAASqjB,EAAWA,EAASrjB,OAAS,EAS1C,GARKA,IACH0V,KAAarS,EAAoBC,GACjC+f,EAAWC,EAAUlhB,GAEvB6iB,EAAMA,IAAQ7iB,EAAY6iB,EAAMxU,GAAUuW,GAAU/B,GAAM,GAC1DC,EAAQA,IAAU9iB,EAAY8iB,EAAQ8B,GAAU9B,GAChDllB,GAAUsjB,EAAUA,EAAQtjB,OAAS,EAEjC0V,EAAUpS,EAAyB,CACrC,IAAIwhB,EAAgBzB,EAChB0B,EAAezB,EAEnBD,EAAWC,EAAUlhB,EAEvB,IAAIgS,EAAOiR,EAAYjjB,EAAYwkB,GAAQhd,GAEvC2c,EAAU,CACZ3c,EAAM8L,EAAS7L,EAASwZ,EAAUC,EAASwB,EAAeC,EAC1DC,EAAQC,EAAKC,GAkBf,GAfI9Q,GA23BN,SAAS6S,EAAU7S,EAAMlO,GACvB,IAAIwP,EAAUtB,EAAK,GACf8S,EAAahhB,EAAO,GACpBihB,EAAazR,EAAUwR,EACvB5O,EAAW6O,GAAcnkB,EAAiBC,EAAqBM,GAE/D6jB,EACEF,GAAc3jB,GAAmBmS,GAAWvS,GAC5C+jB,GAAc3jB,GAAmBmS,GAAWlS,GAAqB4Q,EAAK,GAAGpU,QAAUkG,EAAO,IAC1FghB,IAAe3jB,EAAgBC,IAAsB0C,EAAO,GAAGlG,QAAUkG,EAAO,IAAQwP,GAAWvS,EAGzG,IAAMmV,IAAY8O,EAChB,OAAOhT,EAGL8S,EAAalkB,IACfoR,EAAK,GAAKlO,EAAO,GAEjBihB,GAAczR,EAAU1S,EAAiB,EAAIE,GAG/C,IAAIrH,EAAQqK,EAAO,GACnB,GAAIrK,EAAO,CACT,IAAIwnB,EAAWjP,EAAK,GACpBA,EAAK,GAAKiP,EAAWD,GAAYC,EAAUxnB,EAAOqK,EAAO,IAAMrK,EAC/DuY,EAAK,GAAKiP,EAAWrW,GAAeoH,EAAK,GAAI1R,GAAewD,EAAO,IAGrErK,EAAQqK,EAAO,MAEbmd,EAAWjP,EAAK,GAChBA,EAAK,GAAKiP,EAAWU,GAAiBV,EAAUxnB,EAAOqK,EAAO,IAAMrK,EACpEuY,EAAK,GAAKiP,EAAWrW,GAAeoH,EAAK,GAAI1R,GAAewD,EAAO,KAGrErK,EAAQqK,EAAO,MAEbkO,EAAK,GAAKvY,GAGRqrB,EAAa3jB,IACf6Q,EAAK,GAAgB,MAAXA,EAAK,GAAalO,EAAO,GAAKyK,GAAUyD,EAAK,GAAIlO,EAAO,KAGrD,MAAXkO,EAAK,KACPA,EAAK,GAAKlO,EAAO,IAMnB,OAHAkO,EAAK,GAAKlO,EAAO,GACjBkO,EAAK,GAAK+S,EAEH/S,EA96BL6S,CAAUV,EAASnS,GAErBxK,EAAO2c,EAAQ,GACf7Q,EAAU6Q,EAAQ,GAClB1c,EAAU0c,EAAQ,GAClBlD,EAAWkD,EAAQ,GACnBjD,EAAUiD,EAAQ,KAClBrB,EAAQqB,EAAQ,GAAKA,EAAQ,KAAOnkB,EAC7BijB,EAAY,EAAIzb,EAAK5J,OACtByQ,GAAU8V,EAAQ,GAAKvmB,EAAQ,KAEvB0V,GAAWvS,EAAkBC,KACzCsS,KAAavS,EAAkBC,IAE5BsS,GAAWA,GAAW1S,EAGzBwH,EADSkL,GAAWvS,GAAmBuS,GAAWtS,EA9TtD,SAASikB,EAAYzd,EAAM8L,EAASwP,GAClC,IAAIlO,EAAO2N,GAAW/a,GAwBtB,OAtBA,SAAS2b,IAMP,IALA,IAAIvlB,EAASrC,UAAUqC,OACnBW,EAAOC,MAAMZ,GACbkK,EAAQlK,EACRiN,EAAcuY,GAAUD,GAErBrb,KACLvJ,EAAKuJ,GAASvM,UAAUuM,GAE1B,IAAIoZ,EAAWtjB,EAAS,GAAKW,EAAK,KAAOsM,GAAetM,EAAKX,EAAS,KAAOiN,EACvE,GACAD,GAAerM,EAAMsM,GAG3B,OADAjN,GAAUsjB,EAAQtjB,QACLklB,EACJU,GACHhc,EAAM8L,EAASmP,GAAcU,EAAQtY,YAAa7K,EAClDzB,EAAM2iB,EAASlhB,EAAWA,EAAW8iB,EAAQllB,GAG5C5C,GADGP,MAAQA,OAAS8L,IAAQ9L,gBAAgB0oB,EAAWvO,EAAOpN,EACpD/M,KAAM8D,IAwSd0mB,CAAYzd,EAAM8L,EAASwP,GAC1BxP,GAAWrS,GAAqBqS,IAAY1S,EAAiBK,IAAwBigB,EAAQtjB,OAG9F6kB,GAAaznB,MAAMgF,EAAWmkB,GAhL3C,SAASe,EAAc1d,EAAM8L,EAAS7L,EAASwZ,GAC7C,IAAI+B,EAAS1P,EAAU1S,EACnBgU,EAAO2N,GAAW/a,GAkBtB,OAhBA,SAAS2b,IAQP,IAPA,IAAI/B,GAAa,EACbC,EAAa9lB,UAAUqC,OACvB2jB,GAAa,EACbC,EAAaP,EAASrjB,OACtBW,EAAOC,MAAMgjB,EAAaH,GAC1BoC,EAAMhpB,MAAQA,OAAS8L,IAAQ9L,gBAAgB0oB,EAAWvO,EAAOpN,IAE5D+Z,EAAYC,GACnBjjB,EAAKgjB,GAAaN,EAASM,GAE7B,KAAOF,KACL9iB,EAAKgjB,KAAehmB,YAAY6lB,GAElC,OAAOpmB,GAAMyoB,EAAIT,EAASvb,EAAUhN,KAAM8D,IA4JjC2mB,CAAc1d,EAAM8L,EAAS7L,EAASwZ,QAJ/C,IAAI7Y,EAlXR,SAAS+c,EAAW3d,EAAM8L,EAAS7L,GACjC,IAAIub,EAAS1P,EAAU1S,EACnBgU,EAAO2N,GAAW/a,GAMtB,OAJA,SAAS2b,IAEP,OADU1oB,MAAQA,OAAS8L,IAAQ9L,gBAAgB0oB,EAAWvO,EAAOpN,GAC3DxM,MAAMgoB,EAASvb,EAAUhN,KAAMc,YA4W5B4pB,CAAW3d,EAAM8L,EAAS7L,GASzC,OAAOid,IADM1S,EAAOoN,GAAcqF,IACJrc,EAAQ+b,GAAU3c,EAAM8L,GAiBxD,SAAS8R,GAAoBrS,EAAUsJ,EAAUtiB,EAAKG,EAAQ4J,EAAQ0P,GAOpE,OANI/C,GAASsC,IAAatC,GAAS4L,KAEjC7I,EAAMxI,IAAIqR,EAAUtJ,GACpBwK,GAAUxK,EAAUsJ,EAAUrc,EAAWolB,GAAqB5R,GAC9DA,EAAc,UAAE6I,IAEXtJ,EAYT,SAASsS,GAAgB5rB,GACvB,OAAOqkB,GAAcrkB,GAASuG,EAAYvG,EAgB5C,SAASqhB,GAAY1c,EAAO4b,EAAO1G,EAASC,EAAY+G,EAAW9G,GACjE,IAAI0H,EAAY5H,EAAU5S,EACtBkjB,EAAYxlB,EAAMR,OAClB8d,EAAY1B,EAAMpc,OAEtB,GAAIgmB,GAAalI,KAAeR,GAAyB0I,EAAZlI,GAC3C,OAAO,EAGT,IAAIlG,EAAUhC,EAAMna,IAAI+E,GACxB,GAAIoX,GAAWhC,EAAMna,IAAI2gB,GACvB,OAAOxE,GAAWwE,EAEpB,IAAIlS,GAAS,EACTM,GAAS,EACTwX,EAAQtM,EAAU3S,EAA0B,IAAIiR,GAAW5R,EAM/D,IAJAwT,EAAMxI,IAAI5M,EAAO4b,GACjBxG,EAAMxI,IAAIgP,EAAO5b,KAGR0J,EAAQ8b,GAAW,CAC1B,IAAI0B,EAAWlnB,EAAM0J,GACjB8T,EAAW5B,EAAMlS,GAErB,GAAIyL,EACF,IAAIsI,EAAWX,EACT3H,EAAWqI,EAAU0J,EAAUxd,EAAOkS,EAAO5b,EAAOoV,GACpDD,EAAW+R,EAAU1J,EAAU9T,EAAO1J,EAAO4b,EAAOxG,GAE5D,GAAIqI,IAAa7b,EAAW,CAC1B,GAAI6b,EACF,SAEFzT,GAAS,EACT,MAGF,GAAIwX,GACF,IAAK7W,GAAUiR,EAAO,SAAS4B,EAAU2J,GACvC,IAAK1b,GAAS+V,EAAM2F,KACfD,IAAa1J,GAAYtB,EAAUgL,EAAU1J,EAAUtI,EAASC,EAAYC,IAC/E,OAAOoM,EAAKnhB,KAAK8mB,KAEjB,CACFnd,GAAS,EACT,YAEG,GACHkd,IAAa1J,IACbtB,EAAUgL,EAAU1J,EAAUtI,EAASC,EAAYC,GACpD,CACDpL,GAAS,EACT,OAKJ,OAFAoL,EAAc,UAAEpV,GAChBoV,EAAc,UAAEwG,GACT5R,EAyKT,SAASod,GAAShe,GAChB,OAAOyX,GAAYC,GAAS1X,EAAMxH,EAAWylB,IAAUje,EAAO,IAUhE,SAASoO,GAAW1b,GAClB,OAAOqf,GAAerf,EAAQiS,GAAMuI,IAWtC,SAASiB,GAAazb,GACpB,OAAOqf,GAAerf,EAAQsa,GAAQF,IAUxC,IAAIkQ,GAAWnV,GAAiB,SAAS7H,GACvC,OAAO6H,GAAQhW,IAAImO,IADInJ,GAiCzB,SAAS+kB,GAAU5b,GAEjB,OADanN,GAAe1B,KAAKsX,GAAQ,eAAiBA,GAASzI,GACrDqD,YAWhB,SAASuM,GAAW9M,EAAKvQ,GACvB,IAAIiY,EAAO1H,EAAIuH,SACf,OA+XF,SAAS6T,EAAUjsB,GACjB,IAAIksB,SAAclsB,EAClB,MAAgB,UAARksB,GAA4B,UAARA,GAA4B,UAARA,GAA4B,WAARA,EACnD,cAAVlsB,EACU,OAAVA,EAnYAisB,CAAU3rB,GACXiY,EAAmB,iBAAPjY,EAAkB,SAAW,QACzCiY,EAAK1H,IA+Bb,SAASkD,GAAUtT,EAAQH,GACzB,IAAIN,EA1zHN,SAASmsB,EAAS1rB,EAAQH,GACxB,OAAiB,MAAVG,EAAiB8F,EAAY9F,EAAOH,GAyzH/B6rB,CAAS1rB,EAAQH,GAC7B,OAAOiiB,GAAaviB,GAASA,EAAQuG,EAqCvC,IAAI0U,GAAc5G,GAA+B,SAAS5T,GACxD,OAAc,MAAVA,EACK,IAETA,EAAShB,OAAOgB,GACTgO,GAAY4F,GAAiB5T,GAAS,SAASqb,GACpD,OAAOtI,GAAqBtU,KAAKuB,EAAQqb,OANRsQ,GAiBjCvR,GAAgBxG,GAA+B,SAAS5T,GAE1D,IADA,IAAIkO,EAAS,GACNlO,GACLwO,GAAUN,EAAQsM,GAAWxa,IAC7BA,EAAS4S,GAAa5S,GAExB,OAAOkO,GAN8Byd,GAgBnC5R,GAASyF,GA2Eb,SAASoM,GAAQ5rB,EAAQkf,EAAM2M,GAO7B,IAJA,IAAIje,GAAS,EACTlK,GAHJwb,EAAOC,GAASD,EAAMlf,IAGJ0D,OACdwK,GAAS,IAEJN,EAAQlK,GAAQ,CACvB,IAAI7D,EAAMuf,GAAMF,EAAKtR,IACrB,KAAMM,EAAmB,MAAVlO,GAAkB6rB,EAAQ7rB,EAAQH,IAC/C,MAEFG,EAASA,EAAOH,GAElB,OAAIqO,KAAYN,GAASlK,EAChBwK,KAETxK,EAAmB,MAAV1D,EAAiB,EAAIA,EAAO0D,SAClBooB,GAASpoB,IAAW8U,GAAQ3Y,EAAK6D,KAC/CuS,GAAQjW,IAAWmY,GAAYnY,IA6BtC,SAASka,GAAgBla,GACvB,MAAqC,mBAAtBA,EAAO2Z,aAA8BgJ,GAAY3iB,GAE1D,GADAqW,GAAWzD,GAAa5S,IA8EhC,SAAS0e,GAAcnf,GACrB,OAAO0W,GAAQ1W,IAAU4Y,GAAY5Y,OAC9B0T,IAAoB1T,GAASA,EAAM0T,KAW5C,SAASuF,GAAQjZ,EAAOmE,GACtB,IAAI+nB,SAAclsB,EAGlB,SAFAmE,EAAmB,MAAVA,EAAiB2D,EAAmB3D,KAGhC,UAAR+nB,GACY,UAARA,GAAoB/gB,GAASwF,KAAK3Q,MAC7B,EAATA,GAAcA,EAAQ,GAAK,GAAKA,EAAQmE,EAa/C,SAAS0kB,GAAe7oB,EAAOqO,EAAO5N,GACpC,IAAKuW,GAASvW,GACZ,OAAO,EAET,IAAIyrB,SAAc7d,EAClB,SAAY,UAAR6d,EACG1N,GAAY/d,IAAWwY,GAAQ5K,EAAO5N,EAAO0D,QACrC,UAAR+nB,GAAoB7d,KAAS5N,IAE3B0Y,GAAG1Y,EAAO4N,GAAQrO,GAa7B,SAAS6iB,GAAM7iB,EAAOS,GACpB,GAAIiW,GAAQ1W,GACV,OAAO,EAET,IAAIksB,SAAclsB,EAClB,QAAY,UAARksB,GAA4B,UAARA,GAA4B,WAARA,GAC/B,MAATlsB,IAAiB8e,GAAS9e,MAGvBuK,EAAcoG,KAAK3Q,KAAWsK,EAAaqG,KAAK3Q,IACxC,MAAVS,GAAkBT,KAASP,OAAOgB,IAyDzC,SAAS2iB,GAAYpjB,GACnB,IAAImb,EAAOnb,GAASA,EAAMoa,YAG1B,OAAOpa,KAFqB,mBAARmb,GAAsBA,EAAKxa,WAAcwR,IAa/D,SAAS2Q,GAAmB9iB,GAC1B,OAAOA,GAAUA,IAAUgX,GAAShX,GAYtC,SAAS+iB,GAAwBziB,EAAKsiB,GACpC,OAAO,SAASniB,GACd,OAAc,MAAVA,IAGGA,EAAOH,KAASsiB,IAClBA,IAAarc,GAAcjG,KAAOb,OAAOgB,MAsIlD,SAASglB,GAAS1X,EAAMwX,EAAOtU,GAE7B,OADAsU,EAAQ3Q,GAAU2Q,IAAUhf,EAAawH,EAAK5J,OAAS,EAAKohB,EAAO,GAC5D,WAML,IALA,IAAIzgB,EAAOhD,UACPuM,GAAS,EACTlK,EAASyQ,GAAU9P,EAAKX,OAASohB,EAAO,GACxC5gB,EAAQI,MAAMZ,KAETkK,EAAQlK,GACfQ,EAAM0J,GAASvJ,EAAKygB,EAAQlX,GAE9BA,GAAS,EAET,IADA,IAAIme,EAAYznB,MAAMwgB,EAAQ,KACrBlX,EAAQkX,GACfiH,EAAUne,GAASvJ,EAAKuJ,GAG1B,OADAme,EAAUjH,GAAStU,EAAUtM,GACtBpD,GAAMwM,EAAM/M,KAAMwrB,IAY7B,SAASC,GAAOhsB,EAAQkf,GACtB,OAAOA,EAAKxb,OAAS,EAAI1D,EAASif,GAAQjf,EAAQqlB,GAAUnG,EAAM,GAAI,KAxgBnEtK,IAAYmF,GAAO,IAAInF,GAAS,IAAIqX,YAAY,MAAQljB,GACxD+L,IAAOiF,GAAO,IAAIjF,KAAQ5M,GAC1B6M,IAAWgF,GAAOhF,GAAQmX,YAAc5jB,GACxC0M,IAAO+E,GAAO,IAAI/E,KAAQvM,GAC1BwM,IAAW8E,GAAO,IAAI9E,KAAYpM,KACrCkR,GAAS,SAASxa,GAChB,IAAI2O,EAASsR,GAAWjgB,GACpBmb,EAAOxM,GAAU7F,EAAY9I,EAAMoa,YAAc7T,EACjDqmB,EAAazR,EAAOpF,GAASoF,GAAQ,GAEzC,GAAIyR,EACF,OAAQA,GACN,KAAK9W,GAAoB,OAAOtM,EAChC,KAAKwM,GAAe,OAAOrN,EAC3B,KAAKsN,GAAmB,OAAOlN,EAC/B,KAAKmN,GAAe,OAAOhN,EAC3B,KAAKiN,GAAmB,OAAO7M,EAGnC,OAAOqF,IA4hBX,IAAIqc,GAAU6B,GAASlH,IAUnBH,GAAcqH,GAASjH,IAY3B,SAASqF,GAAgBvB,EAASoD,EAAWjT,GAC3C,IAAIxP,EAAUyiB,EAAY,GAC1B,OAAOtH,GAAYkE,EAjZrB,SAASqD,EAAkB1iB,EAAQ2iB,GACjC,IAAI7oB,EAAS6oB,EAAQ7oB,OACrB,IAAKA,EACH,OAAOkG,EAET,IAAIqH,EAAYvN,EAAS,EAGzB,OAFA6oB,EAAQtb,IAAuB,EAATvN,EAAa,KAAO,IAAM6oB,EAAQtb,GACxDsb,EAAUA,EAAQ9gB,KAAc,EAAT/H,EAAa,KAAO,KACpCkG,EAAO4I,QAAQvI,GAAe,uBAAyBsiB,EAAU,UAyY5CD,CAAkB1iB,EA4FhD,SAAS4iB,EAAkBD,EAASnT,GAOlC,OANAvL,GAAUpG,EAAW,SAASglB,GAC5B,IAAIltB,EAAQ,KAAOktB,EAAK,GACnBrT,EAAUqT,EAAK,KAAQte,GAAcoe,EAAShtB,IACjDgtB,EAAQhoB,KAAKhF,KAGVgtB,EAAQpI,OAnGuCqI,CA7gBxD,SAASE,EAAe9iB,GACtB,IAAIwH,EAAQxH,EAAOwH,MAAMlH,IACzB,OAAOkH,EAAQA,EAAM,GAAGE,MAAMnH,IAAkB,GA2gBwBuiB,CAAe9iB,GAASwP,KAYlG,SAASgT,GAAS9e,GAChB,IAAIqf,EAAQ,EACRC,EAAa,EAEjB,OAAO,WACL,IAAIC,EAAQtY,KACRuY,EA/rKO,IA+rKiBD,EAAQD,GAGpC,GADAA,EAAaC,EACG,EAAZC,GACF,GApsKU,OAosKJH,EACJ,OAAOtrB,UAAU,QAGnBsrB,EAAQ,EAEV,OAAOrf,EAAKxM,MAAMgF,EAAWzE,YAWjC,IAAI4kB,GA9PJ,SAAS8G,GAAczf,GACrB,IAAIY,EAAS8e,GAAQ1f,EAAM,SAASzN,GAIlC,OAv/JmB,MAo/Jf+P,EAAMS,MACRT,EAAM0H,QAEDzX,IAGL+P,EAAQ1B,EAAO0B,MACnB,OAAO1B,EAqPU6e,CAAc,SAAS9c,GACxC,IAAI/B,EAAS,GAOb,OAN6B,KAAzB+B,EAAOgd,WAAW,IACpB/e,EAAO3J,KAAK,IAEd0L,EAAOuC,QAAQzI,GAAY,SAASqH,EAAO8b,EAAQC,EAAOC,GACxDlf,EAAO3J,KAAK4oB,EAAQC,EAAU5a,QAAQpI,GAAc,MAAS8iB,GAAU9b,KAElElD,IAUT,SAASkR,GAAM7f,GACb,GAAoB,iBAATA,GAAqB8e,GAAS9e,GACvC,OAAOA,EAET,IAAI2O,EAAU3O,EAAQ,GACtB,MAAkB,KAAV2O,GAAkB,EAAI3O,IAAW6H,EAAY,KAAO8G,EAU9D,SAASoH,GAAShI,GAChB,GAAY,MAARA,EAAc,CAChB,IACE,OAAOsE,GAAanT,KAAK6O,GACzB,MAAO7M,IACT,IACE,OAAQ6M,EAAO,GACf,MAAO7M,KAEX,MAAO,GA4BT,SAAS2V,GAAa6S,GACpB,GAAIA,aAAmB/S,GACrB,OAAO+S,EAAQoE,QAEjB,IAAInf,EAAS,IAAIiI,GAAc8S,EAAQvS,YAAauS,EAAQrS,WAI5D,OAHA1I,EAAOyI,YAAckD,GAAUoP,EAAQtS,aACvCzI,EAAO2I,UAAaoS,EAAQpS,UAC5B3I,EAAO4I,WAAamS,EAAQnS,WACrB5I,EA6FT,IAAIof,GAAazI,GAAS,SAAS3gB,EAAOuK,GACxC,OAAOkV,GAAkBzf,GACnB4X,GAAe5X,EAAOqa,GAAY9P,EAAQ,EAAGkV,IAAmB,IAChE,KAwER,SAAS4J,GAAUrpB,EAAO6J,EAAWqB,GACnC,IAAI1L,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIkK,EAAqB,MAAbwB,EAAoB,EAAIsb,GAAUtb,GAI9C,OAHIxB,EAAQ,IACVA,EAAQuG,GAAUzQ,EAASkK,EAAO,IAE7BuB,GAAcjL,EAAO8d,GAAajU,GAAeH,GAmE1D,SAAS2d,GAAQrnB,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAMR,QACvB6a,GAAYra,EAAO,GAAK,GAwC1C,SAASspB,GAAKtpB,GACZ,OAAQA,GAASA,EAAMR,OAAUQ,EAAM,GAAK4B,EA0E9C,IAAI2nB,GAAe5I,GAAS,SAAS6I,GACnC,IAAIC,EAASpf,GAASmf,EAAQ1H,IAC9B,OAAQ2H,EAAOjqB,QAAUiqB,EAAO,KAAOD,EAAO,GApvGhD,SAASE,EAAiBF,EAAQhgB,EAAUY,GAS1C,IARA,IAAIyN,EAAWzN,EAAaD,GAAoBF,GAC5CzK,EAASgqB,EAAO,GAAGhqB,OACnB8d,EAAYkM,EAAOhqB,OACnB2nB,EAAW7J,EACXqM,EAASvpB,MAAMkd,GACfsM,EAAYC,SACZ7f,EAAS,GAENmd,KAAY,CACjB,IAAInnB,EAAQwpB,EAAOrC,GACfA,GAAY3d,IACdxJ,EAAQqK,GAASrK,EAAOwL,GAAUhC,KAEpCogB,EAAYzZ,GAAUnQ,EAAMR,OAAQoqB,GACpCD,EAAOxC,IAAa/c,IAAeZ,GAAuB,KAAVhK,GAAiC,KAAhBQ,EAAMR,QACjE,IAAIgU,GAAS2T,GAAYnnB,GACzB4B,EAER5B,EAAQwpB,EAAO,GAEf,IAAI9f,GAAS,EACT8X,EAAOmI,EAAO,GAElB3R,EACI,OAAStO,EAAQlK,GAAUwK,EAAOxK,OAASoqB,GAAW,CACpD,IAAIvuB,EAAQ2E,EAAM0J,GACduO,EAAWzO,EAAWA,EAASnO,GAASA,EAG5C,GADAA,EAAS+O,GAAwB,IAAV/O,EAAeA,EAAQ,IACxCmmB,EACI/V,GAAS+V,EAAMvJ,GACfJ,EAAS7N,EAAQiO,EAAU7N,IAClC,CAED,IADA+c,EAAW7J,IACF6J,GAAU,CACjB,IAAIzb,EAAQie,EAAOxC,GACnB,KAAMzb,EACAD,GAASC,EAAOuM,GAChBJ,EAAS2R,EAAOrC,GAAWlP,EAAU7N,IAEzC,SAAS4N,EAGTwJ,GACFA,EAAKnhB,KAAK4X,GAEZjO,EAAO3J,KAAKhF,IAGpB,OAAO2O,EAmsGD0f,CAAiBD,GACjB,KAiBR,SAASK,GAAK9pB,GACZ,IAAIR,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACvC,OAAOA,EAASQ,EAAMR,EAAS,GAAKoC,EAkJtC,IAAImoB,GAAQpJ,GAAS,SAAS6I,GAC5B,OAAOjI,GAASlH,GAAYmP,EAAQ,EAAG/J,IAAmB,MAuE5D,SAASuK,GAAMhqB,GACb,IAAMA,IAASA,EAAMR,OACnB,MAAO,GAET,IAAIA,EAAS,EAOb,OANAQ,EAAQ8J,GAAY9J,EAAO,SAASiqB,GAClC,GAAIxK,GAAkBwK,GAEpB,OADAzqB,EAASyQ,GAAUga,EAAMzqB,OAAQA,IAC1B,IAGJ+L,GAAU/L,EAAQ,SAASkK,GAChC,OAAOW,GAASrK,EAAO6K,GAAanB,MAwBxC,IAAIwgB,GAAUvJ,GAAS,SAAS3gB,EAAOuK,GACrC,OAAOkV,GAAkBzf,GACnB4X,GAAe5X,EAAOuK,GACtB,KAmBJ4f,GAAMxJ,GAASqJ,IAqDnB,SAASI,GAAM/uB,GACb,IAAI2O,EAAS6H,GAAOxW,GAEpB,OADA2O,EAAO0I,WAAY,EACZ1I,EAsDT,SAASqgB,GAAKhvB,EAAOivB,GACnB,OAAOA,EAAYjvB,GAmBL+rB,GAAS,SAAS3oB,GAId,SAAd6rB,EAAuBxuB,GAAU,OA/nIvC,SAASyuB,EAAOzuB,EAAQ2C,GAMtB,IALA,IAAIiL,GAAS,EACTlK,EAASf,EAAMe,OACfwK,EAAS5J,MAAMZ,GACfgrB,EAAiB,MAAV1uB,IAEF4N,EAAQlK,GACfwK,EAAON,GAAS8gB,EAAO5oB,EAAY3G,GAAIa,EAAQ2C,EAAMiL,IAEvD,OAAOM,EAsnIqCugB,CAAOzuB,EAAQ2C,GAH3D,IAAIe,EAASf,EAAMe,OACfohB,EAAQphB,EAASf,EAAM,GAAK,EAC5BpD,EAAQgB,KAAKmW,YAGjB,QAAa,EAAThT,GAAcnD,KAAKoW,YAAYjT,SAC7BnE,aAAiB2W,IAAiBsC,GAAQsM,KAGhDvlB,EAAQA,EAAM2mB,MAAMpB,GAAQA,GAASphB,EAAS,EAAI,KAC5CiT,YAAYpS,KAAK,CACrB,KAAQgqB,GACR,KAAQ,CAACC,GACT,QAAW1oB,IAEN,IAAIqQ,GAAc5W,EAAOgB,KAAKqW,WAAW2X,KAAK,SAASrqB,GAI5D,OAHIR,IAAWQ,EAAMR,QACnBQ,EAAMK,KAAKuB,GAEN5B,KAZA3D,KAAKguB,KAAKC,KA+PrB,IAAIG,GAAU7G,GAAiB,SAAS5Z,EAAQ3O,EAAOM,GACjDM,GAAe1B,KAAKyP,EAAQrO,KAC5BqO,EAAOrO,GAET8Y,GAAgBzK,EAAQrO,EAAK,KAmIjC,IAAI+uB,GAzlFJ,SAASC,GAAWC,GAClB,OAAO,SAAS7f,EAAYlB,EAAWqB,GACrC,IAAI4O,EAAWhf,OAAOiQ,GACtB,IAAK8O,GAAY9O,GAAa,CAC5B,IAAIvB,EAAWsU,GAAajU,GAC5BkB,EAAagD,GAAKhD,GAClBlB,EAAY,SAASlO,GAAO,OAAO6N,EAASsQ,EAASne,GAAMA,EAAKme,IAElE,IAAIpQ,EAAQkhB,EAAc7f,EAAYlB,EAAWqB,GACjD,OAAgB,EAATxB,EAAaoQ,EAAStQ,EAAWuB,EAAWrB,GAASA,GAAS9H,GAglF9D+oB,CAAWtB,IAgCtB,SAASjd,GAAQrB,EAAYvB,GAE3B,OADWuI,GAAQhH,GAAcpB,GAAYmL,IACjC/J,EAAY+S,GAAatU,IA0BvC,IAAIqhB,GAAUjH,GAAiB,SAAS5Z,EAAQ3O,EAAOM,GACjDM,GAAe1B,KAAKyP,EAAQrO,GAC9BqO,EAAOrO,GAAK0E,KAAKhF,GAEjBoZ,GAAgBzK,EAAQrO,EAAK,CAACN,MAkPlC,IAAIyvB,GAASnK,GAAS,SAAS5V,EAAY8U,GACzC,GAAkB,MAAd9U,EACF,MAAO,GAET,IAAIvL,EAASqgB,EAAUrgB,OAMvB,OALa,EAATA,GAAc0kB,GAAenZ,EAAY8U,EAAU,GAAIA,EAAU,IACnEA,EAAY,GACM,EAATrgB,GAAc0kB,GAAerE,EAAU,GAAIA,EAAU,GAAIA,EAAU,MAC5EA,EAAY,CAACA,EAAU,KAElBD,GAAY7U,EAAYsP,GAAYwF,EAAW,GAAI,MAqBxDtP,GAAM,WACR,OAAOpI,GAAKmI,KAAKC,OA0DnB,SAASwa,GAAOlvB,EAAGuN,GACjB,IAAIY,EACJ,GAAmB,mBAARZ,EACT,MAAM,IAAIuO,UAAU3V,GAGtB,OADAnG,EAAI2qB,GAAU3qB,GACP,WAOL,OANU,IAAJA,IACJmO,EAASZ,EAAKxM,MAAMP,KAAMc,YAExBtB,GAAK,IACPuN,EAAOxH,GAEFoI,GAuCX,IAAIpO,GAAO+kB,GAAS,SAASvX,EAAMC,EAASwZ,GAC1C,IAAI3N,EAAU1S,EACd,GAAIqgB,EAASrjB,OAAQ,CACnB,IAAIsjB,EAAUtW,GAAeqW,EAAUmC,GAAUppB,KACjDsZ,GAAWrS,EAEb,OAAO0jB,GAAWnd,EAAM8L,EAAS7L,EAASwZ,EAAUC,KAyDtD,SAASkI,GAAS5hB,EAAMsO,EAAMuT,GAC5B,IAAIC,EACAC,EACAC,EACAphB,EACAqhB,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARtiB,EACT,MAAM,IAAIuO,UAAU3V,GAUtB,SAAS2pB,EAAWC,GAClB,IAAIzrB,EAAO+qB,EACP7hB,EAAU8hB,EAKd,OAHAD,EAAWC,EAAWvpB,EACtB2pB,EAAiBK,EACjB5hB,EAASZ,EAAKxM,MAAMyM,EAASlJ,GAuB/B,SAAS0rB,EAAaD,GACpB,IAAIE,EAAoBF,EAAON,EAM/B,OAAQA,IAAiB1pB,GAAmC8V,GAArBoU,GAClCA,EAAoB,GAAOL,GAAiCL,GANvCQ,EAAOL,EASnC,SAASQ,IACP,IAAIH,EAAOrb,KACX,GAAIsb,EAAaD,GACf,OAAOI,EAAaJ,GAGtBP,EAAUnuB,WAAW6uB,EA3BvB,SAASE,EAAcL,GACrB,IAEIM,EAAcxU,GAFMkU,EAAON,GAI/B,OAAOG,EACDtb,GAAU+b,EAAad,GAJHQ,EAAOL,IAK3BW,EAoB6BD,CAAcL,IAGnD,SAASI,EAAaJ,GAKpB,OAJAP,EAAUzpB,EAIN8pB,GAAYR,EACPS,EAAWC,IAEpBV,EAAWC,EAAWvpB,EACfoI,GAeT,SAASmiB,IACP,IAAIP,EAAOrb,KACP6b,EAAaP,EAAaD,GAM9B,GAJAV,EAAW/tB,UACXguB,EAAW9uB,KACXivB,EAAeM,EAEXQ,EAAY,CACd,GAAIf,IAAYzpB,EACd,OAzEN,SAASyqB,EAAYT,GAMnB,OAJAL,EAAiBK,EAEjBP,EAAUnuB,WAAW6uB,EAAcrU,GAE5B8T,EAAUG,EAAWC,GAAQ5hB,EAmEzBqiB,CAAYf,GAErB,GAAIG,EAGF,OADAJ,EAAUnuB,WAAW6uB,EAAcrU,GAC5BiU,EAAWL,GAMtB,OAHID,IAAYzpB,IACdypB,EAAUnuB,WAAW6uB,EAAcrU,IAE9B1N,EAIT,OA1GA0N,EAAO4U,GAAS5U,IAAS,EACrBrF,GAAS4Y,KACXO,IAAYP,EAAQO,QAEpBJ,GADAK,EAAS,YAAaR,GACHhb,GAAUqc,GAASrB,EAAQG,UAAY,EAAG1T,GAAQ0T,EACrEM,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAmG1DS,EAAUI,OAnCV,SAASA,IACHlB,IAAYzpB,GACdxE,aAAaiuB,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,EAAUzpB,GA+BjDuqB,EAAUK,MA5BV,SAASA,IACP,OAAOnB,IAAYzpB,EAAYoI,EAASgiB,EAAazb,OA4BhD4b,EAqBT,IAAIM,GAAQ9L,GAAS,SAASvX,EAAMjJ,GAClC,OAAOsX,GAAUrO,EAAM,EAAGjJ,KAsBxBusB,GAAQ/L,GAAS,SAASvX,EAAMsO,EAAMvX,GACxC,OAAOsX,GAAUrO,EAAMkjB,GAAS5U,IAAS,EAAGvX,KA+C9C,SAAS2oB,GAAQ1f,EAAMujB,GACrB,GAAmB,mBAARvjB,GAAmC,MAAZujB,GAAuC,mBAAZA,EAC3D,MAAM,IAAIhV,UAAU3V,GAEtB,IAAI4qB,EAAW,WACb,IAAIzsB,EAAOhD,UACPxB,EAAMgxB,EAAWA,EAAS/vB,MAAMP,KAAM8D,GAAQA,EAAK,GACnDuL,EAAQkhB,EAASlhB,MAErB,GAAIA,EAAMC,IAAIhQ,GACZ,OAAO+P,EAAMzQ,IAAIU,GAEnB,IAAIqO,EAASZ,EAAKxM,MAAMP,KAAM8D,GAE9B,OADAysB,EAASlhB,MAAQA,EAAMkB,IAAIjR,EAAKqO,IAAW0B,EACpC1B,GAGT,OADA4iB,EAASlhB,MAAQ,IAAKod,GAAQ+D,OAAStZ,IAChCqZ,EA0BT,SAASE,GAAOjjB,GACd,GAAwB,mBAAbA,EACT,MAAM,IAAI8N,UAAU3V,GAEtB,OAAO,WACL,IAAI7B,EAAOhD,UACX,OAAQgD,EAAKX,QACX,KAAK,EAAG,OAAQqK,EAAUtP,KAAK8B,MAC/B,KAAK,EAAG,OAAQwN,EAAUtP,KAAK8B,KAAM8D,EAAK,IAC1C,KAAK,EAAG,OAAQ0J,EAAUtP,KAAK8B,KAAM8D,EAAK,GAAIA,EAAK,IACnD,KAAK,EAAG,OAAQ0J,EAAUtP,KAAK8B,KAAM8D,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAE9D,OAAQ0J,EAAUjN,MAAMP,KAAM8D,IA+MlC,SAASqU,GAAGnZ,EAAOugB,GACjB,OAAOvgB,IAAUugB,GAAUvgB,GAAUA,GAASugB,GAAUA,EAlP1DkN,GAAQ+D,MAAQtZ,GAuQhB,IAAIU,GAAc8H,GAAgB,WAAa,OAAO5e,UAApB,IAAsC4e,GAAkB,SAAS1gB,GACjG,OAAOyW,GAAazW,IAAUY,GAAe1B,KAAKc,EAAO,YACpDwT,GAAqBtU,KAAKc,EAAO,WA0BpC0W,GAAU3R,MAAM2R,QA2BpB,SAAS8H,GAAYxe,GACnB,OAAgB,MAATA,GAAiBusB,GAASvsB,EAAMmE,UAAYsb,GAAWzf,GA4BhE,SAASokB,GAAkBpkB,GACzB,OAAOyW,GAAazW,IAAUwe,GAAYxe,GA0C5C,IAAIwU,GAAWD,IA28Df,SAASmd,KACP,OAAO,GAz7DLpkB,GAASD,GAAa8C,GAAU9C,IArkKpC,SAASskB,GAAW3xB,GAClB,OAAOyW,GAAazW,IAAUigB,GAAWjgB,IAAUuI,GA8sKrD,SAASkX,GAAWzf,GAClB,IAAKgX,GAAShX,GACZ,OAAO,EAIT,IAAIua,EAAM0F,GAAWjgB,GACrB,OAAOua,GAAO9R,GAAW8R,GAAO7R,GAAU6R,GAAOlS,GAAYkS,GAAOvR,EA6BtE,SAASujB,GAASvsB,GAChB,MAAuB,iBAATA,IACD,EAATA,GAAcA,EAAQ,GAAK,GAAKA,GAAS8H,EA4B/C,SAASkP,GAAShX,GAChB,IAAIksB,SAAclsB,EAClB,OAAgB,MAATA,IAA0B,UAARksB,GAA4B,YAARA,GA2B/C,SAASzV,GAAazW,GACpB,OAAgB,MAATA,GAAiC,iBAATA,EAoBjC,IAAIwN,GAAQD,GAAY4C,GAAU5C,IAruKlC,SAASqkB,GAAU5xB,GACjB,OAAOyW,GAAazW,IAAUwa,GAAOxa,IAAU2I,GAwzKjD,SAASkpB,GAAS7xB,GAChB,MAAuB,iBAATA,GACTyW,GAAazW,IAAUigB,GAAWjgB,IAAU4I,EA+BnD,SAASyb,GAAcrkB,GACrB,IAAKyW,GAAazW,IAAUigB,GAAWjgB,IAAU8I,EAC/C,OAAO,EAET,IAAIiO,EAAQ1D,GAAarT,GACzB,GAAc,OAAV+W,EACF,OAAO,EAET,IAAIoE,EAAOva,GAAe1B,KAAK6X,EAAO,gBAAkBA,EAAMqD,YAC9D,MAAsB,mBAARe,GAAsBA,aAAgBA,GAChD9I,GAAanT,KAAKic,IAAStI,GAoBjC,IAAInF,GAAWD,GAAe0C,GAAU1C,IAvyKxC,SAASqkB,GAAa9xB,GACpB,OAAOyW,GAAazW,IAAUigB,GAAWjgB,IAAUiJ,GAyzKjD2E,GAAQD,GAAYwC,GAAUxC,IA/yKlC,SAASokB,GAAU/xB,GACjB,OAAOyW,GAAazW,IAAUwa,GAAOxa,IAAUkJ,GAi0KjD,SAAS8oB,GAAShyB,GAChB,MAAuB,iBAATA,IACR0W,GAAQ1W,IAAUyW,GAAazW,IAAUigB,GAAWjgB,IAAUmJ,EAoBtE,SAAS2V,GAAS9e,GAChB,MAAuB,iBAATA,GACTyW,GAAazW,IAAUigB,GAAWjgB,IAAUoJ,EAoBnD,IAAI0E,GAAeD,GAAmBsC,GAAUtC,IAn2KhD,SAASokB,GAAiBjyB,GACxB,OAAOyW,GAAazW,IAChBusB,GAASvsB,EAAMmE,WAAamI,GAAe2T,GAAWjgB,KA+4K5D,SAASkyB,GAAQlyB,GACf,IAAKA,EACH,MAAO,GAET,GAAIwe,GAAYxe,GACd,OAAOgyB,GAAShyB,GAAS2R,GAAc3R,GAASsa,GAAUta,GAE5D,GAAI4T,IAAe5T,EAAM4T,IACvB,OAz2OJ,SAASue,EAAgBte,GAIvB,IAHA,IAAI0E,EACA5J,EAAS,KAEJ4J,EAAO1E,EAASue,QAAQC,MAC/B1jB,EAAO3J,KAAKuT,EAAKvY,OAEnB,OAAO2O,EAk2OEwjB,CAAgBnyB,EAAM4T,OAE/B,IAAI2G,EAAMC,GAAOxa,GAGjB,OAFWua,GAAO5R,EAASiI,GAAc2J,GAAOrR,EAASoI,GAAapC,IAE1DlP,GA0Bd,SAASsyB,GAAStyB,GAChB,OAAKA,GAGLA,EAAQixB,GAASjxB,MACH6H,GAAY7H,KAAW6H,EAI9B7H,GAAUA,EAAQA,EAAQ,GAHnBA,EAAQ,GAAK,EAAI,GACf+H,EALG,IAAV/H,EAAcA,EAAQ,EAoCjC,SAASmrB,GAAUnrB,GACjB,IAAI2O,EAAS2jB,GAAStyB,GAClBuyB,EAAY5jB,EAAS,EAEzB,OAAOA,GAAWA,EAAU4jB,EAAY5jB,EAAS4jB,EAAY5jB,EAAU,EA0BzE,SAASsiB,GAASjxB,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAI8e,GAAS9e,GACX,OAAOgI,EAET,GAAIgP,GAAShX,GAAQ,CACnB,IAAIugB,EAAgC,mBAAjBvgB,EAAMsW,QAAwBtW,EAAMsW,UAAYtW,EACnEA,EAAQgX,GAASuJ,GAAUA,EAAQ,GAAMA,EAE3C,GAAoB,iBAATvgB,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQA,EAAMiT,QAAQxI,GAAQ,IAC9B,IAAI+nB,EAAWxnB,GAAW2F,KAAK3Q,GAC/B,OAAQwyB,GAAYtnB,GAAUyF,KAAK3Q,GAC7B0M,GAAa1M,EAAM2mB,MAAM,GAAI6L,EAAW,EAAI,GAC3CznB,GAAW4F,KAAK3Q,GAASgI,GAAOhI,EAoDzC,SAASsS,GAAStS,GAChB,OAAgB,MAATA,EAAgB,GAAKimB,GAAajmB,GAoC3C,IAAIyyB,GAAWhK,GAAe,SAAShoB,EAAQ4J,GAC7CsP,GAAWtP,EAAQ0Q,GAAO1Q,GAAS5J,KA+DrC,IAAIiyB,GAAWpN,GAAS,SAAS7kB,EAAQkoB,GACvCloB,EAAShB,OAAOgB,GAEhB,IAAI4N,GAAS,EACTlK,EAASwkB,EAAQxkB,OACjBykB,EAAiB,EAATzkB,EAAawkB,EAAQ,GAAKpiB,EAMtC,IAJIqiB,GAASC,GAAeF,EAAQ,GAAIA,EAAQ,GAAIC,KAClDzkB,EAAS,KAGFkK,EAAQlK,GAMf,IALA,IAAIkG,EAASse,EAAQta,GACjB4N,EAAQlB,GAAO1Q,GACfsoB,GAAc,EACdC,EAAc3W,EAAM9X,SAEfwuB,EAAaC,GAAa,CACjC,IAAItyB,EAAM2b,EAAM0W,GACZ3yB,EAAQS,EAAOH,IAEfN,IAAUuG,GACT4S,GAAGnZ,EAAOmS,GAAY7R,MAAUM,GAAe1B,KAAKuB,EAAQH,MAC/DG,EAAOH,GAAO+J,EAAO/J,IAK3B,OAAOG,IAsBLoyB,GAAevN,GAAS,SAASxgB,GAEnC,OADAA,EAAKE,KAAKuB,EAAWolB,IACdpqB,GAAMuxB,GAAWvsB,EAAWzB,KA0GrC,SAASlF,GAAIa,EAAQkf,EAAMoT,GACzB,IAAIpkB,EAAmB,MAAVlO,EAAiB8F,EAAYmZ,GAAQjf,EAAQkf,GAC1D,OAAOhR,IAAWpI,EAAYwsB,EAAepkB,EA4D/C,SAASqU,GAAMviB,EAAQkf,GACrB,OAAiB,MAAVlf,GAAkB4rB,GAAQ5rB,EAAQkf,EAAMc,IAqBjD,IAAIuS,GAAS3I,GAAe,SAAS1b,EAAQ3O,EAAOM,GACrC,MAATN,GACyB,mBAAlBA,EAAMsS,WACftS,EAAQ4S,GAAqB1T,KAAKc,IAGpC2O,EAAO3O,GAASM,GACfulB,GAASnD,KA4BRuQ,GAAW5I,GAAe,SAAS1b,EAAQ3O,EAAOM,GACvC,MAATN,GACyB,mBAAlBA,EAAMsS,WACftS,EAAQ4S,GAAqB1T,KAAKc,IAGhCY,GAAe1B,KAAKyP,EAAQ3O,GAC9B2O,EAAO3O,GAAOgF,KAAK1E,GAEnBqO,EAAO3O,GAAS,CAACM,IAElBmiB,IA8BH,SAAS/P,GAAKjS,GACZ,OAAO+d,GAAY/d,GAAU+X,GAAc/X,GAAU0iB,GAAS1iB,GA0BhE,SAASsa,GAAOta,GACd,OAAO+d,GAAY/d,GAAU+X,GAAc/X,GAAQ,GAAQ4iB,GAAW5iB,GAkCxE,IAAIyyB,GAAQzK,GAAe,SAAShoB,EAAQ4J,EAAQ0Z,GAClDD,GAAUrjB,EAAQ4J,EAAQ0Z,KAkCxB+O,GAAYrK,GAAe,SAAShoB,EAAQ4J,EAAQ0Z,EAAUjK,GAChEgK,GAAUrjB,EAAQ4J,EAAQ0Z,EAAUjK,KAuBlCqZ,GAAOpH,GAAS,SAAStrB,EAAQ2C,GACnC,IAAIuL,EAAS,GACb,GAAc,MAAVlO,EACF,OAAOkO,EAET,IAAIqL,GAAS,EACb5W,EAAQ4L,GAAS5L,EAAO,SAASuc,GAG/B,OAFAA,EAAOC,GAASD,EAAMlf,GACXuZ,EAAXA,GAAkC,EAAd2F,EAAKxb,OAClBwb,IAEThG,GAAWlZ,EAAQyb,GAAazb,GAASkO,GACrCqL,IACFrL,EAASiL,GAAUjL,EAAQ7H,EAAkBC,EAAkBC,EAAoB4kB,KAGrF,IADA,IAliLiBnrB,EAAQkf,EAkiLrBxb,EAASf,EAAMe,OACZA,KAniLU1D,EAoiLLkO,EApiLagR,EAoiLLvc,EAAMe,GAjiLT,OADjB1D,EAASgsB,GAAOhsB,EADhBkf,EAAOC,GAASD,EAAMlf,aAEUA,EAAOof,GAAM4O,GAAK9O,KAmiLlD,OAAOhR,IA4CT,IAAIykB,GAAOrH,GAAS,SAAStrB,EAAQ2C,GACnC,OAAiB,MAAV3C,EAAiB,GAn4L1B,SAAS4yB,EAAS5yB,EAAQ2C,GACxB,OAAOgiB,GAAW3kB,EAAQ2C,EAAO,SAASpD,EAAO2f,GAC/C,OAAOqD,GAAMviB,EAAQkf,KAi4LM0T,CAAS5yB,EAAQ2C,KA+IhD,SAAS8L,GAAOzO,GACd,OAAiB,MAAVA,EAAiB,GA52Q1B,SAAS6yB,EAAW7yB,EAAQwb,GAC1B,OAAOjN,GAASiN,EAAO,SAAS3b,GAC9B,OAAOG,EAAOH,KA02QagzB,CAAW7yB,EAAQiS,GAAKjS,IA8MvD,SAASolB,GAAS7lB,GAChB,OAAO,WACL,OAAOA,GAoBX,SAAS0iB,GAAS1iB,GAChB,OAAOA,EAqHT,SAASuzB,GAAM9yB,EAAQ4J,EAAQulB,GAC7B,IAAI3T,EAAQvJ,GAAKrI,GACbmpB,EAAchU,GAAcnV,EAAQ4R,GAEzB,MAAX2T,GACE5Y,GAAS3M,KAAYmpB,EAAYrvB,SAAW8X,EAAM9X,UACtDyrB,EAAUvlB,EACVA,EAAS5J,EACTA,EAASO,KACTwyB,EAAchU,GAAcnV,EAAQqI,GAAKrI,KAE3C,IAAI0kB,IAAU/X,GAAS4Y,IAAY,UAAWA,IAAcA,EAAQb,OAChEtU,EAASgF,GAAWhf,GAqBxB,OAnBA6N,GAAUklB,EAAa,SAASC,GAC9B,IAAI1lB,EAAO1D,EAAOopB,GAClBhzB,EAAOgzB,GAAc1lB,EACjB0M,IACFha,EAAOE,UAAU8yB,GAAc,WAC7B,IAAIvc,EAAWlW,KAAKqW,UACpB,GAAI0X,GAAS7X,EAAU,CACrB,IAAIvI,EAASlO,EAAOO,KAAKmW,aAKzB,OAJcxI,EAAOyI,YAAckD,GAAUtZ,KAAKoW,cAE1CpS,KAAK,CAAE,KAAQ+I,EAAM,KAAQjM,UAAW,QAAWrB,IAC3DkO,EAAO0I,UAAYH,EACZvI,EAET,OAAOZ,EAAKxM,MAAMd,EAAQwO,GAAU,CAACjO,KAAKhB,SAAU8B,gBAKnDrB,EAmCT,SAASmE,MAuET,IAwOMyF,GAxOFqpB,GAh+KJ,SAASC,GAAY7jB,GACnB,OAAO,SAASyV,EAAOQ,EAAK6N,GAa1B,OAZIA,GAAuB,iBAARA,GAAoB/K,GAAetD,EAAOQ,EAAK6N,KAChE7N,EAAM6N,EAAOrtB,GAGfgf,EAAQ+M,GAAS/M,GACbQ,IAAQxf,GACVwf,EAAMR,EACNA,EAAQ,GAERQ,EAAMuM,GAASvM,GA/9BrB,SAAS8N,EAAUtO,EAAOQ,EAAK6N,EAAM9jB,GAKnC,IAJA,IAAIzB,GAAS,EACTlK,EAASyQ,GAAUZ,IAAY+R,EAAMR,IAAUqO,GAAQ,IAAK,GAC5DjlB,EAAS5J,MAAMZ,GAEZA,KACLwK,EAAOmB,EAAY3L,IAAWkK,GAASkX,EACvCA,GAASqO,EAEX,OAAOjlB,EAy9BEklB,CAAUtO,EAAOQ,EADxB6N,EAAOA,IAASrtB,EAAagf,EAAQQ,EAAM,GAAK,EAAKuM,GAASsB,GAC3B9jB,IAk9K3B6jB,GAoBZ,SAASvH,KACP,MAAO,GA+FT5V,GAAOsd,MA1xFP,SAASA,GAAMtzB,EAAGuN,GAChB,GAAmB,mBAARA,EACT,MAAM,IAAIuO,UAAU3V,GAGtB,OADAnG,EAAI2qB,GAAU3qB,GACP,WACL,KAAMA,EAAI,EACR,OAAOuN,EAAKxM,MAAMP,KAAMc,aAoxF9B0U,GAAOic,SAAWA,GAClBjc,GAAOkZ,OAASA,GAChBlZ,GAAOjW,KAAOA,GACdiW,GAAOuY,MAAQA,GACfvY,GAAOud,QA9xIP,SAASA,GAAQpvB,GAMf,IALA,IAAI0J,GAAS,EACTlK,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACnCuK,EAAW,EACXC,EAAS,KAEJN,EAAQlK,GAAQ,CACvB,IAAInE,EAAQ2E,EAAM0J,GACdrO,IACF2O,EAAOD,KAAc1O,GAGzB,OAAO2O,GAmxIT6H,GAAOpS,OA1vIP,SAASA,KACP,IAAID,EAASrC,UAAUqC,OACvB,IAAKA,EACH,MAAO,GAMT,IAJA,IAAIW,EAAOC,MAAMZ,EAAS,GACtBQ,EAAQ7C,UAAU,GAClBuM,EAAQlK,EAELkK,KACLvJ,EAAKuJ,EAAQ,GAAKvM,UAAUuM,GAE9B,OAAOY,GAAUyH,GAAQ/R,GAAS2V,GAAU3V,GAAS,CAACA,GAAQqa,GAAYla,EAAM,KA+uIlF0R,GAAO4Y,QAAUA,GACjB5Y,GAAOnW,OAlwCP,SAASA,GAAOM,EAAWqzB,GACzB,IAAIrlB,EAASmI,GAAWnW,GACxB,OAAqB,MAAdqzB,EAAqBrlB,EAAS+K,GAAW/K,EAAQqlB,IAiwC1Dxd,GAAOmZ,SAAWA,GAClBnZ,GAAOkc,SAAWA,GAClBlc,GAAOqc,aAAeA,GACtBrc,GAAO4a,MAAQA,GACf5a,GAAO6a,MAAQA,GACf7a,GAAOuX,WAAaA,GACpBvX,GAAOyd,KAhsIP,SAASA,GAAKtvB,EAAOnE,EAAGooB,GACtB,IAAIzkB,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACvC,OAAKA,EAIE2hB,GAAUnhB,GADjBnE,EAAKooB,GAASpoB,IAAM+F,EAAa,EAAI4kB,GAAU3qB,IACnB,EAAI,EAAIA,EAAG2D,GAH9B,IA8rIXqS,GAAO0d,OAlsGP,SAASA,GAAOxkB,EAAYlB,GAE1B,OADWkI,GAAQhH,GAAcjB,GAAcsQ,IACnCrP,EAAY+S,GAAajU,KAisGvCgI,GAAOwV,QAAUA,GACjBxV,GAAO2d,YAxjIP,SAASA,GAAYxvB,GAEnB,OADsB,MAATA,EAAgB,EAAIA,EAAMR,QACvB6a,GAAYra,EAAOkD,GAAY,IAujIjD2O,GAAOgZ,QAAUA,GACjBhZ,GAAO4d,QA9+HP,SAASA,GAAQzvB,GAEf,OADsB,MAATA,EAAgB,EAAIA,EAAMR,QACvB2hB,GAAUnhB,EAAO,GAAI,GAAK,IA6+H5C6R,GAAO0X,aAAeA,GACtB1X,GAAOwc,OAASA,GAChBxc,GAAOyc,SAAWA,GAClBzc,GAAOrI,SA/VP,SAASA,GAASJ,GAChB,OAAO0U,GAA4B,mBAAR1U,EAAqBA,EAAO6L,GAAU7L,EAAMjH,KA+VzE0P,GAAO9D,KAAOA,GACd8D,GAAO3F,IArjGP,SAASA,GAAInB,EAAYvB,GAEvB,OADWuI,GAAQhH,GAAcV,GAAWyU,IAChC/T,EAAY+S,GAAatU,KAojGvCqI,GAAO6d,QAlUP,SAASA,GAAQhqB,GACf,OAAO4Y,GAAYrJ,GAAUvP,EAAQvD,KAkUvC0P,GAAO0c,MAAQA,GACf1c,GAAO+c,MAAQA,GACf/c,GAAOib,OAASA,GAChBjb,GAAO2c,KAAOA,GACd3c,GAAO8d,OA/xBP,SAASA,GAAO7zB,EAAQ+N,GACtB,OA0CF,SAAS+lB,EAAO9zB,EAAQ+N,GACtB,GAAc,MAAV/N,EACF,MAAO,GAET,IAAIwb,EAAQjN,GAASkN,GAAazb,GAAS,SAAS+zB,GAClD,MAAO,CAACA,KAGV,OADAhmB,EAAYiU,GAAajU,GAClB4W,GAAW3kB,EAAQwb,EAAO,SAASjc,EAAO2f,GAC/C,OAAOnR,EAAUxO,EAAO2f,EAAK,MAnDxB4U,CAAO9zB,EAAQgxB,GAAOhP,GAAajU,MA+xB5CgI,GAAO/Q,KAz4EP,SAASA,GAAKsI,GACZ,OAAO2hB,GAAO,EAAG3hB,IAy4EnByI,GAAO4c,KAAOA,GACd5c,GAAOkd,MAAQA,GACfld,GAAOie,OA5+FP,SAASA,GAAO/kB,EAAYlB,GAE1B,OADWkI,GAAQhH,GAAcjB,GAAcsQ,IACnCrP,EAAY+hB,GAAOhP,GAAajU,MA2+F9CgI,GAAOke,KAh3EP,SAASA,GAAK3mB,EAAMwX,GAClB,GAAmB,mBAARxX,EACT,MAAM,IAAIuO,UAAU3V,GAGtB,OAAO2e,GAASvX,EADhBwX,EAAQA,IAAUhf,EAAYgf,EAAQ4F,GAAU5F,KA62ElD/O,GAAOjF,IA9pBP,SAASA,GAAI9Q,EAAQkf,EAAM3f,GACzB,OAAiB,MAAVS,EAAiBA,EAAS4kB,GAAQ5kB,EAAQkf,EAAM3f,IA8pBzDwW,GAAOmQ,MAt6HP,SAASA,GAAMhiB,EAAO4gB,EAAOQ,GAC3B,IAAI5hB,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACvC,OAAKA,GAKH4hB,EAFEA,GAAqB,iBAAPA,GAAmB8C,GAAelkB,EAAO4gB,EAAOQ,IAChER,EAAQ,EACFphB,IAGNohB,EAAiB,MAATA,EAAgB,EAAI4F,GAAU5F,GAChCQ,IAAQxf,EAAYpC,EAASgnB,GAAUpF,IAExCD,GAAUnhB,EAAO4gB,EAAOQ,IAVtB,IAo6HXvP,GAAOiZ,OAASA,GAChBjZ,GAAOme,KA/3HP,SAASA,GAAKhwB,EAAOnE,EAAGooB,GACtB,OAAMjkB,GAASA,EAAMR,OAId2hB,GAAUnhB,EAAO,GADxBnE,EAAKooB,GAASpoB,IAAM+F,EAAa,EAAI4kB,GAAU3qB,IAChB,EAAI,EAAIA,GAH9B,IA83HXgW,GAAOoe,UA/1HP,SAASA,GAAUjwB,EAAOnE,EAAGooB,GAC3B,IAAIzkB,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACvC,OAAKA,EAKE2hB,GAAUnhB,GADjBnE,EAAI2D,GADJ3D,EAAKooB,GAASpoB,IAAM+F,EAAa,EAAI4kB,GAAU3qB,KAEnB,EAAI,EAAIA,EAAG2D,GAJ9B,IA61HXqS,GAAOqe,IAlnHP,SAASA,GAAI70B,EAAOivB,GAElB,OADAA,EAAYjvB,GACLA,GAinHTwW,GAAOse,SAn0EP,SAASA,GAAS/mB,EAAMsO,EAAMuT,GAC5B,IAAIO,GAAU,EACVE,GAAW,EAEf,GAAmB,mBAARtiB,EACT,MAAM,IAAIuO,UAAU3V,GAMtB,OAJIqQ,GAAS4Y,KACXO,EAAU,YAAaP,IAAYA,EAAQO,QAAUA,EACrDE,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAEnDV,GAAS5hB,EAAMsO,EAAM,CAC1B,QAAW8T,EACX,QAAW9T,EACX,SAAYgU,KAszEhB7Z,GAAOwY,KAAOA,GACdxY,GAAO0b,QAAUA,GACjB1b,GAAOkY,MAAQA,GACflY,GAAOue,KArzHP,SAASA,GAAKpwB,GACZ,OAAQA,GAASA,EAAMR,OAAU+hB,GAASvhB,GAAS,IAqzHrD6R,GAAOwe,OA3xHP,SAASA,GAAOrwB,EAAOwJ,GACrB,OAAQxJ,GAASA,EAAMR,OAAU+hB,GAASvhB,EAAO8d,GAAatU,IAAgB,IA2xHhFqI,GAAOmY,MAAQA,GACfnY,GAAOtH,OAASA,GAChBsH,GAAOqY,QAAUA,GACjBrY,GAAOsY,IAAMA,GACbtY,GAAOye,UA7rHP,SAASA,GAAUhZ,EAAO/M,GACxB,OAnpFF,SAASgmB,EAAcjZ,EAAO/M,EAAQimB,GAMpC,IALA,IAAI9mB,GAAS,EACTlK,EAAS8X,EAAM9X,OACfixB,EAAalmB,EAAO/K,OACpBwK,EAAS,KAEJN,EAAQlK,GAAQ,CACvB,IAAInE,EAAQqO,EAAQ+mB,EAAalmB,EAAOb,GAAS9H,EACjD4uB,EAAWxmB,EAAQsN,EAAM5N,GAAQrO,GAEnC,OAAO2O,EAyoFAumB,CAAcjZ,GAAS,GAAI/M,GAAU,GAAImK,KA+rHlD7C,GAAO6e,OAAS5C,GAGhBc,GAAM/c,GAAQA,IAKdA,GAAO8e,MAloBP,SAASA,GAAM3H,EAAQ4H,EAAOC,GAa5B,OAZIA,IAAUjvB,IACZivB,EAAQD,EACRA,EAAQhvB,GAENivB,IAAUjvB,IAEZivB,GADAA,EAAQvE,GAASuE,KACCA,EAAQA,EAAQ,GAEhCD,IAAUhvB,IAEZgvB,GADAA,EAAQtE,GAASsE,KACCA,EAAQA,EAAQ,GAvkOtC,SAASE,EAAU9H,EAAQ4H,EAAOC,GAShC,OARI7H,GAAWA,IACT6H,IAAUjvB,IACZonB,EAASA,GAAU6H,EAAQ7H,EAAS6H,GAElCD,IAAUhvB,IACZonB,EAAmB4H,GAAV5H,EAAkBA,EAAS4H,IAGjC5H,EAgkOA8H,CAAUxE,GAAStD,GAAS4H,EAAOC,IAsnB5Chf,GAAOsX,MA3yEP,SAASA,GAAM9tB,GACb,OAAO4Z,GAAU5Z,EAAOgH,IA2yE1BwP,GAAOkf,UAtxEP,SAASA,GAAU11B,GACjB,OAAO4Z,GAAU5Z,EAAO8G,EAAkBE,IAsxE5CwP,GAAOmf,OAjhBP,SAASA,GAAOjlB,GAEd,OADAA,EAAS4B,GAAS5B,KACAvG,EAAmBwG,KAAKD,GACpCA,EAAOuC,QAAQ/I,EAAiBqG,IAChCG,GA8gBR8F,GAAOof,MApyGP,SAASA,GAAMlmB,EAAYlB,EAAWoa,GACpC,IAAI7a,EAAO2I,GAAQhH,GAAcnB,GAAaoQ,GAI9C,OAHIiK,GAASC,GAAenZ,EAAYlB,EAAWoa,KACjDpa,EAAYjI,GAEPwH,EAAK2B,EAAY+S,GAAajU,KAgyGvCgI,GAAO6Y,KAAOA,GACd7Y,GAAOwX,UAAYA,GACnBxX,GAAOqf,QA9sCP,SAASA,GAAQp1B,EAAQ+N,GACvB,OAAOiB,GAAYhP,EAAQgiB,GAAajU,GAAekQ,KA8sCzDlI,GAAOsf,cA/pIP,SAASA,GAAcnxB,EAAO6J,EAAWqB,GACvC,IAAI1L,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIkK,EAAQlK,EAAS,EAOrB,OANI0L,IAActJ,IAChB8H,EAAQ8c,GAAUtb,GAClBxB,EAAQwB,EAAY,EACd+E,GAAUzQ,EAASkK,EAAO,GAC1ByG,GAAUzG,EAAOlK,EAAS,IAE3ByL,GAAcjL,EAAO8d,GAAajU,GAAeH,GAAO,IAopIjEmI,GAAOuf,YAzqCP,SAASA,GAAYt1B,EAAQ+N,GAC3B,OAAOiB,GAAYhP,EAAQgiB,GAAajU,GAAe+Q,KAyqCzD/I,GAAOzF,QAAUA,GACjByF,GAAO5W,IAAMA,GACb4W,GAAOlG,IA/mCP,SAASA,GAAI7P,EAAQkf,GACnB,OAAiB,MAAVlf,GAAkB4rB,GAAQ5rB,EAAQkf,EAAMa,KA+mCjDhK,GAAOyX,KAAOA,GACdzX,GAAOkM,SAAWA,GAClBlM,GAAOwf,QApkIP,SAASA,GAAQrxB,EAAO3E,EAAO6P,GAC7B,IAAI1L,EAAkB,MAATQ,EAAgB,EAAIA,EAAMR,OACvC,IAAKA,EACH,OAAQ,EAEV,IAAIkK,EAAqB,MAAbwB,EAAoB,EAAIsb,GAAUtb,GAI9C,OAHIxB,EAAQ,IACVA,EAAQuG,GAAUzQ,EAASkK,EAAO,IAE7BQ,GAAYlK,EAAO3E,EAAOqO,IA4jInCmI,GAAOoC,YAAcA,GACrBpC,GAAOE,QAAUA,GACjBF,GAAOgI,YAAcA,GACrBhI,GAAOyf,UApoEP,SAASA,GAAUj2B,GACjB,OAAiB,IAAVA,IAA4B,IAAVA,GACpByW,GAAazW,IAAUigB,GAAWjgB,IAAUsI,GAmoEnDkO,GAAOlJ,OAASA,GAChBkJ,GAAO0f,QA1jEP,SAASA,GAAQl2B,GACf,GAAa,MAATA,EACF,OAAO,EAET,GAAIwe,GAAYxe,KACX0W,GAAQ1W,IAA0B,iBAATA,GAA4C,mBAAhBA,EAAMyT,QACxDe,GAASxU,IAAU8N,GAAa9N,IAAU4Y,GAAY5Y,IAC5D,OAAQA,EAAMmE,OAEhB,IAAIoW,EAAMC,GAAOxa,GACjB,GAAIua,GAAO5R,GAAU4R,GAAOrR,EAC1B,OAAQlJ,EAAM8Q,KAEhB,GAAIsS,GAAYpjB,GACd,OAAQmjB,GAASnjB,GAAOmE,OAE1B,IAAK,IAAI7D,KAAON,EACd,GAAIY,GAAe1B,KAAKc,EAAOM,GAC7B,OAAO,EAGX,OAAO,GAsiETkW,GAAO2f,QAvgEP,SAASA,GAAQn2B,EAAOugB,GACtB,OAAOI,GAAY3gB,EAAOugB,IAugE5B/J,GAAO9B,SA1+DP,SAASA,GAAS1U,GAChB,MAAuB,iBAATA,GAAqByU,GAAezU,IA0+DpDwW,GAAOiJ,WAAaA,GACpBjJ,GAAO4f,MAr0DP,SAASA,GAAMp2B,GAIb,OAAO6xB,GAAS7xB,IAAUA,IAAUA,GAk0DtCwW,GAAO6f,OA9yDP,SAASA,GAAOr2B,GACd,OAAiB,OAAVA,GA8yDTwW,GAAOqb,SAAWA,GAClBrb,GAAOQ,SAAWA,GAClBR,GAAO6N,cAAgBA,GACvB7N,GAAO9I,SAAWA,GAClB8I,GAAOwb,SAAWA,GAClBxb,GAAO8f,YAlnDP,SAASA,GAAYt2B,GACnB,OAAOA,IAAUuG,GAknDnBiQ,GAAOiY,KAAOA,GACdjY,GAAO3B,IApIP,SAASA,GAAIlQ,GACX,OAAQA,GAASA,EAAMR,OACjBya,GAAaja,EAAO+d,GAAUpC,IAC9B/Z,GAkIRiQ,GAAOzB,IA7GP,SAASA,GAAIpQ,GACX,OAAQA,GAASA,EAAMR,OACjBya,GAAaja,EAAO+d,GAAUc,IAC9Bjd,GA2GRiQ,GAAO+f,WAnTP,SAASA,KAIP,OAHIzpB,GAAKiG,IAAM/R,OACb8L,GAAKiG,EAAID,IAEJ9R,MAgTTwV,GAAO5R,KAAOA,GACd4R,GAAOpB,OAznBP,SAASA,GAAOmgB,EAAOC,EAAOgB,GA2B5B,GA1BIA,GAA+B,kBAAZA,GAAyB3N,GAAe0M,EAAOC,EAAOgB,KAC3EhB,EAAQgB,EAAWjwB,GAEjBiwB,IAAajwB,IACK,kBAATivB,GACTgB,EAAWhB,EACXA,EAAQjvB,GAEe,kBAATgvB,IACdiB,EAAWjB,EACXA,EAAQhvB,IAGRgvB,IAAUhvB,GAAaivB,IAAUjvB,GACnCgvB,EAAQ,EACRC,EAAQ,IAGRD,EAAQjD,GAASiD,GACbC,IAAUjvB,GACZivB,EAAQD,EACRA,EAAQ,GAERC,EAAQlD,GAASkD,IAGTA,EAARD,EAAe,CACjB,IAAIkB,EAAOlB,EACXA,EAAQC,EACRA,EAAQiB,EAEV,GAAID,GAAYjB,EAAQ,GAAKC,EAAQ,EAAG,CACtC,IAAIkB,EAAOvhB,KACX,OAAOL,GAAUygB,EAASmB,GAAQlB,EAAQD,EAAQ/oB,GAAe,QAAUkqB,EAAO,IAAIvyB,OAAS,KAAOqxB,GAExG,OAzkMF,SAASmB,EAAWpB,EAAOC,GACzB,OAAOD,EAAQphB,GAAYgB,MAAkBqgB,EAAQD,EAAQ,IAwkMtDoB,CAAWpB,EAAOC,IAslB3Bhf,GAAOogB,OAzlGP,SAASA,GAAOlnB,EAAYvB,EAAUC,GACpC,IAAIL,EAAO2I,GAAQhH,GAAcN,GAAca,GAC3CZ,EAAYvN,UAAUqC,OAAS,EAEnC,OAAO4J,EAAK2B,EAAY+S,GAAatU,GAAcC,EAAaiB,EAAWoK,KAslG7EjD,GAAO7H,OAnxBP,SAASA,GAAOlO,EAAQkf,EAAMoT,GAG5B,IAAI1kB,GAAS,EACTlK,GAHJwb,EAAOC,GAASD,EAAMlf,IAGJ0D,OAOlB,IAJKA,IACHA,EAAS,EACT1D,EAAS8F,KAEF8H,EAAQlK,GAAQ,CACvB,IAAInE,EAAkB,MAAVS,EAAiB8F,EAAY9F,EAAOof,GAAMF,EAAKtR,KACvDrO,IAAUuG,IACZ8H,EAAQlK,EACRnE,EAAQ+yB,GAEVtyB,EAASgf,GAAWzf,GAASA,EAAMd,KAAKuB,GAAUT,EAEpD,OAAOS,GAiwBT+V,GAAO1F,KAxhGP,SAASA,GAAKpB,GACZ,GAAkB,MAAdA,EACF,OAAO,EAET,GAAI8O,GAAY9O,GACd,OAAOsiB,GAAStiB,GAAc8B,GAAW9B,GAAcA,EAAWvL,OAEpE,IAAIoW,EAAMC,GAAO9K,GACjB,OAAI6K,GAAO5R,GAAU4R,GAAOrR,EACnBwG,EAAWoB,KAEbqS,GAASzT,GAAYvL,QA8gG9BqS,GAAOqgB,KAv+FP,SAASA,GAAKnnB,EAAYlB,EAAWoa,GACnC,IAAI7a,EAAO2I,GAAQhH,GAAcJ,GAAY0W,GAI7C,OAHI4C,GAASC,GAAenZ,EAAYlB,EAAWoa,KACjDpa,EAAYjI,GAEPwH,EAAK2B,EAAY+S,GAAajU,KAm+FvCgI,GAAOsgB,KA5hBP,SAASA,GAAKpmB,EAAQqmB,EAAOnO,GAE3B,IADAlY,EAAS4B,GAAS5B,MACHkY,GAASmO,IAAUxwB,GAChC,OAAOmK,EAAOuC,QAAQxI,GAAQ,IAEhC,IAAKiG,KAAYqmB,EAAQ9Q,GAAa8Q,IACpC,OAAOrmB,EAET,IAAIsmB,EAAarlB,GAAcjB,GAC3BumB,EAAatlB,GAAcolB,GAI/B,OAt0LF,SAASG,EAAUvyB,EAAO4gB,EAAOQ,GAC/B,IAAI5hB,EAASQ,EAAMR,OAEnB,OADA4hB,EAAMA,IAAQxf,EAAYpC,EAAS4hB,GAC1BR,GAAgBphB,GAAP4hB,EAAiBphB,EAAQmhB,GAAUnhB,EAAO4gB,EAAOQ,GAm0L5DmR,CAAUF,EAvgRnB,SAASG,EAAgBH,EAAYC,GAInC,IAHA,IAAI5oB,GAAS,EACTlK,EAAS6yB,EAAW7yB,SAEfkK,EAAQlK,IAA2D,EAAjD0K,GAAYooB,EAAYD,EAAW3oB,GAAQ,KACtE,OAAOA,EA+/QK8oB,CAAgBH,EAAYC,GAn/Q1C,SAASG,EAAcJ,EAAYC,GAGjC,IAFA,IAAI5oB,EAAQ2oB,EAAW7yB,OAEhBkK,MAA4D,EAAjDQ,GAAYooB,EAAYD,EAAW3oB,GAAQ,KAC7D,OAAOA,EAg/QG+oB,CAAcJ,EAAYC,GAAc,GAET/qB,KAAK,KAghBhDsK,GAAO6gB,SAvKP,SAASA,GAASC,GAChB,IAAI71B,IAAO8Q,GACX,OAAOD,GAASglB,GAAU71B,GAwK5B+U,GAAO+gB,KAAOxmB,GACdyF,GAAOghB,MAAQvJ,GAEfsF,GAAM/c,IACAnM,GAAS,GACbqU,GAAWlI,GAAQ,SAASzI,EAAM0lB,GAC3B7yB,GAAe1B,KAAKsX,GAAO7V,UAAW8yB,KACzCppB,GAAOopB,GAAc1lB,KAGlB1D,IACH,CAAE,OAAS,IAWjBmM,GAAOihB,QA7vTO,SAgwTdnpB,GAAU,CAAC,OAAQ,QAAS,SAASmlB,EAAYplB,GAC/CsI,GAAYhW,UAAU8yB,GAAc,SAASjzB,GAC3CA,EAAIA,IAAM+F,EAAY,EAAIqO,GAAUuW,GAAU3qB,GAAI,GAElD,IAAImO,EAAU3N,KAAKyW,eAAiBpJ,EAC9B,IAAIsI,GAAY3V,MAChBA,KAAK8sB,QAUX,OARInf,EAAO8I,aACT9I,EAAOgJ,cAAgB7C,GAAUtU,EAAGmO,EAAOgJ,eAE3ChJ,EAAOiJ,UAAU5S,KAAK,CACpB,KAAQ8P,GAAUtU,EAAGyH,GACrB,KAAQwrB,GAAc9kB,EAAO6I,QAAU,EAAI,QAAU,MAGlD7I,GAGTgI,GAAYhW,UAAU8yB,EAAa,SAAW,SAASjzB,GACrD,OAAOQ,KAAKsU,UAAUme,GAAYjzB,GAAG8U,aAKzChH,GAAU,CAAC,SAAU,MAAO,aAAc,SAASmlB,EAAYplB,GAC7D,IAAI6d,EAAO7d,EAAQ,EACfqpB,EAhvTiB,GAgvTNxL,GA9uTK,GA8uTuBA,EAE3CvV,GAAYhW,UAAU8yB,GAAc,SAAStlB,GAC3C,IAAIQ,EAAS3N,KAAK8sB,QAMlB,OALAnf,EAAO+I,cAAc1S,KAAK,CACxB,SAAY2yB,YAAYxpB,EAAU,GAClC,KAAQ+d,IAEVvd,EAAO8I,aAAe9I,EAAO8I,cAAgBigB,EACtC/oB,KAKXL,GAAU,CAAC,OAAQ,QAAS,SAASmlB,EAAYplB,GAC/C,IAAIupB,EAAW,QAAUvpB,EAAQ,QAAU,IAE3CsI,GAAYhW,UAAU8yB,GAAc,WAClC,OAAOzyB,KAAK42B,GAAU,GAAG53B,QAAQ,MAKrCsO,GAAU,CAAC,UAAW,QAAS,SAASmlB,EAAYplB,GAClD,IAAIwpB,EAAW,QAAUxpB,EAAQ,GAAK,SAEtCsI,GAAYhW,UAAU8yB,GAAc,WAClC,OAAOzyB,KAAKyW,aAAe,IAAId,GAAY3V,MAAQA,KAAK62B,GAAU,MAItElhB,GAAYhW,UAAUozB,QAAU,WAC9B,OAAO/yB,KAAKkzB,OAAOxR,KAGrB/L,GAAYhW,UAAU0uB,KAAO,SAAS7gB,GACpC,OAAOxN,KAAKkzB,OAAO1lB,GAAWyf,QAGhCtX,GAAYhW,UAAUm3B,SAAW,SAAStpB,GACxC,OAAOxN,KAAKsU,UAAU+Z,KAAK7gB,IAG7BmI,GAAYhW,UAAUo3B,UAAYzS,GAAS,SAAS3F,EAAM7a,GACxD,MAAmB,mBAAR6a,EACF,IAAIhJ,GAAY3V,MAElBA,KAAK6P,IAAI,SAAS7Q,GACvB,OAzzOJ,SAASg4B,EAAWv3B,EAAQkf,EAAM7a,GAGhC,IAAIiJ,EAAiB,OADrBtN,EAASgsB,GAAOhsB,EADhBkf,EAAOC,GAASD,EAAMlf,KAEMA,EAASA,EAAOof,GAAM4O,GAAK9O,KACvD,OAAe,MAAR5R,EAAexH,EAAYhF,GAAMwM,EAAMtN,EAAQqE,GAqzO7CkzB,CAAWh4B,EAAO2f,EAAM7a,OAInC6R,GAAYhW,UAAU8zB,OAAS,SAASjmB,GACtC,OAAOxN,KAAKkzB,OAAOzC,GAAOkG,YAAYnpB,MAGxCmI,GAAYhW,UAAUgmB,MAAQ,SAASpB,EAAOQ,GAC5CR,EAAQ4F,GAAU5F,GAElB,IAAI5W,EAAS3N,KACb,OAAI2N,EAAO8I,eAAyB,EAAR8N,GAAaQ,EAAM,GACtC,IAAIpP,GAAYhI,IAErB4W,EAAQ,EACV5W,EAASA,EAAOimB,WAAWrP,GAClBA,IACT5W,EAASA,EAAOslB,KAAK1O,IAEnBQ,IAAQxf,IAEVoI,GADAoX,EAAMoF,GAAUpF,IACD,EAAIpX,EAAOspB,WAAWlS,GAAOpX,EAAOgmB,KAAK5O,EAAMR,IAEzD5W,IAGTgI,GAAYhW,UAAUu3B,eAAiB,SAAS1pB,GAC9C,OAAOxN,KAAKsU,UAAU6iB,UAAU3pB,GAAW8G,WAG7CqB,GAAYhW,UAAUuxB,QAAU,WAC9B,OAAOlxB,KAAK2zB,KAAK1sB,IAInByW,GAAW/H,GAAYhW,UAAW,SAASoN,EAAM0lB,GAC/C,IAAI2E,EAAgB,qCAAqCznB,KAAK8iB,GAC1D4E,EAAU,kBAAkB1nB,KAAK8iB,GACjC6E,EAAa9hB,GAAO6hB,EAAW,QAAwB,QAAd5E,EAAuB,QAAU,IAAOA,GACjF8E,EAAeF,GAAW,QAAQ1nB,KAAK8iB,GAEtC6E,IAGL9hB,GAAO7V,UAAU8yB,GAAc,WAOX,SAAdxE,EAAuBjvB,GACzB,IAAI2O,EAAS2pB,EAAW/2B,MAAMiV,GAAQvH,GAAU,CAACjP,GAAQ8E,IACzD,OAAQuzB,GAAWnhB,EAAYvI,EAAO,GAAKA,EAR7C,IAAI3O,EAAQgB,KAAKmW,YACbrS,EAAOuzB,EAAU,CAAC,GAAKv2B,UACvB02B,EAASx4B,aAAiB2W,GAC1BxI,EAAWrJ,EAAK,GAChB2zB,EAAUD,GAAU9hB,GAAQ1W,GAO5By4B,GAAWL,GAAoC,mBAAZjqB,GAA6C,GAAnBA,EAAShK,SAExEq0B,EAASC,GAAU,GAErB,IAAIvhB,EAAWlW,KAAKqW,UAChBqhB,IAAa13B,KAAKoW,YAAYjT,OAC9Bw0B,EAAcJ,IAAiBrhB,EAC/B0hB,EAAWJ,IAAWE,EAE1B,GAAKH,IAAgBE,EAMrB,OAAIE,GAAeC,EACV7qB,EAAKxM,MAAMP,KAAM8D,IAE1B6J,EAAS3N,KAAKguB,KAAKC,GACZ0J,EAAeN,EAAU1pB,EAAO3O,QAAQ,GAAK2O,EAAO3O,QAAW2O,GATpE3O,EAAQ44B,EAAW54B,EAAQ,IAAI2W,GAAY3V,MAC3C,IAAI2N,EAASZ,EAAKxM,MAAMvB,EAAO8E,GAE/B,OADA6J,EAAOyI,YAAYpS,KAAK,CAAE,KAAQgqB,GAAM,KAAQ,CAACC,GAAc,QAAW1oB,IACnE,IAAIqQ,GAAcjI,EAAQuI,OAWvC5I,GAAU,CAAC,MAAO,OAAQ,QAAS,OAAQ,SAAU,WAAY,SAASmlB,GACxE,IAAI1lB,EAAOkE,GAAWwhB,GAClBoF,EAAY,0BAA0BloB,KAAK8iB,GAAc,MAAQ,OACjE8E,EAAe,kBAAkB5nB,KAAK8iB,GAE1Cjd,GAAO7V,UAAU8yB,GAAc,WAC7B,IAAI3uB,EAAOhD,UACX,IAAIy2B,GAAiBv3B,KAAKqW,UAI1B,OAAOrW,KAAK63B,GAAW,SAAS74B,GAC9B,OAAO+N,EAAKxM,MAAMmV,GAAQ1W,GAASA,EAAQ,GAAI8E,KAJ/C,IAAI9E,EAAQgB,KAAKhB,QACjB,OAAO+N,EAAKxM,MAAMmV,GAAQ1W,GAASA,EAAQ,GAAI8E,MASrD4Z,GAAW/H,GAAYhW,UAAW,SAASoN,EAAM0lB,GAC/C,IAAI6E,EAAa9hB,GAAOid,GACxB,GAAI6E,EAAY,CACd,IAAIh4B,EAAOg4B,EAAWh5B,KAAO,IACjBuW,GAAUvV,KAASuV,GAAUvV,GAAO,KAE1C0E,KAAK,CAAE,KAAQyuB,EAAY,KAAQ6E,OAI7CziB,GAAUmT,GAAaziB,EAAWa,GAAoB9H,MAAQ,CAAC,CAC7D,KAAQ,UACR,KAAQiH,IAIVoQ,GAAYhW,UAAUmtB,MAtrRtB,SAASgL,KACP,IAAInqB,EAAS,IAAIgI,GAAY3V,KAAKmW,aAOlC,OANAxI,EAAOyI,YAAckD,GAAUtZ,KAAKoW,aACpCzI,EAAO6I,QAAUxW,KAAKwW,QACtB7I,EAAO8I,aAAezW,KAAKyW,aAC3B9I,EAAO+I,cAAgB4C,GAAUtZ,KAAK0W,eACtC/I,EAAOgJ,cAAgB3W,KAAK2W,cAC5BhJ,EAAOiJ,UAAY0C,GAAUtZ,KAAK4W,WAC3BjJ,GA+qRTgI,GAAYhW,UAAU2U,QApqRtB,SAASyjB,KACP,GAAI/3B,KAAKyW,aAAc,CACrB,IAAI9I,EAAS,IAAIgI,GAAY3V,MAC7B2N,EAAO6I,SAAW,EAClB7I,EAAO8I,cAAe,OAEtB9I,EAAS3N,KAAK8sB,SACPtW,UAAY,EAErB,OAAO7I,GA4pRTgI,GAAYhW,UAAUX,MAjpRtB,SAASg5B,KACP,IAAIr0B,EAAQ3D,KAAKmW,YAAYnX,QACzBoG,EAAMpF,KAAKwW,QACXkB,EAAQhC,GAAQ/R,GAChBs0B,EAAU7yB,EAAM,EAChB+jB,EAAYzR,EAAQ/T,EAAMR,OAAS,EACnC+0B,EA03GN,SAASC,EAAQ5T,EAAOQ,EAAKqT,GAC3B,IAAI/qB,GAAS,EACTlK,EAASi1B,EAAWj1B,OAExB,OAASkK,EAAQlK,GAAQ,CACvB,IAAIoU,EAAO6gB,EAAW/qB,GAClByC,EAAOyH,EAAKzH,KAEhB,OAAQyH,EAAK2T,MACX,IAAK,OAAa3G,GAASzU,EAAM,MACjC,IAAK,YAAaiV,GAAOjV,EAAM,MAC/B,IAAK,OAAaiV,EAAMjR,GAAUiR,EAAKR,EAAQzU,GAAO,MACtD,IAAK,YAAayU,EAAQ3Q,GAAU2Q,EAAOQ,EAAMjV,IAGrD,MAAO,CAAE,MAASyU,EAAO,IAAOQ,GAz4GrBoT,CAAQ,EAAGhP,EAAWnpB,KAAK4W,WAClC2N,EAAQ2T,EAAK3T,MACbQ,EAAMmT,EAAKnT,IACX5hB,EAAS4hB,EAAMR,EACflX,EAAQ4qB,EAAUlT,EAAOR,EAAQ,EACjCf,EAAYxjB,KAAK0W,cACjB2hB,EAAa7U,EAAUrgB,OACvBuK,EAAW,EACX4qB,EAAYxkB,GAAU3Q,EAAQnD,KAAK2W,eAEvC,IAAKe,IAAWugB,GAAW9O,GAAahmB,GAAUm1B,GAAan1B,EAC7D,OAAOmiB,GAAiB3hB,EAAO3D,KAAKoW,aAEtC,IAAIzI,EAAS,GAEbgO,EACI,KAAOxY,KAAYuK,EAAW4qB,GAAW,CAMvC,IAHA,IAAIC,GAAa,EACbv5B,EAAQ2E,EAHZ0J,GAASjI,KAKAmzB,EAAYF,GAAY,CAC/B,IAAI9gB,EAAOiM,EAAU+U,GACjBprB,EAAWoK,EAAKpK,SAChB+d,EAAO3T,EAAK2T,KACZtP,EAAWzO,EAASnO,GAExB,GAryCU,GAqyCNksB,EACFlsB,EAAQ4c,OACH,IAAKA,EAAU,CACpB,GAzyCW,GAyyCPsP,EACF,SAASvP,EAET,MAAMA,GAIZhO,EAAOD,KAAc1O,EAE3B,OAAO2O,GAsmRT6H,GAAO7V,UAAU62B,MAAQhhB,GAAO7V,UAAUstB,KAEtCra,KACF4C,GAAO7V,UAAUiT,IA/tHnB,SAAS4lB,KACP,OAAOx4B,OAyuHP8L,GAAKiG,EAAIyD,IAIT,cACE,OAAOA,IACR,0CAaHtX,KAAK8B,Q,6CCn/TP,cAoBmB,SAAXy4B,EAAqB1rB,EAAM2rB,GAC3B,OAAO,SAAU15B,EAAOM,EAAKq5B,GACzB,OAAO5rB,EAAK7O,KAAKw6B,EAASp5B,EAAKN,EAAO25B,IAGjC,SAATC,EAAmBt6B,GACnB,OAAO,WACH,OAAOyT,EAAEzT,GAAMiC,MAAMwR,EAAGjR,YAGf,SAAb+3B,EAAuBv6B,GACvB,OAAO,WACH,IAAIwF,EAAOC,MAAMpE,UAAUgmB,MAAMznB,KAAK4C,UAAW,GAEjD,OADAgD,EAAK,GAAKiO,EAAE0M,WAAW3a,EAAK,IAAM20B,EAAS30B,EAAK,GAAIA,EAAK,IAAMA,EAAK,GAC7DiO,EAAEzT,GAAMiC,MAAMwR,EAAGjO,IAfnC,IAAWyB,EAdZD,QAAUC,UACY,oBAAXpF,OACPmF,QAAUnF,YACe,IAAXE,EACdiF,QAAUjF,EACa,oBAATC,KACdgF,QAAUhF,KAEVgF,QAAUtF,KAETsF,QAAQE,KACTF,QAAQE,GAAK,IAuBbuM,EAAEsiB,OAAO7uB,GAAI,CACTszB,OAAQ,SAAUC,EAAGC,GACjB,GAAIh5B,KAAKye,WAAWua,GAAK,CACrB,GAAKA,EAAGD,GAGJ,OAAO,EAFP,MAAM,IAAIr2B,MAAMq2B,EAAI,UAQ5B,GAHK/4B,KAAK0V,QAAQsjB,KACdA,EAAK,CAACA,KAELh5B,KAAKi5B,aAAaD,EAAID,GACvB,MAAM,IAAIr2B,MAAMq2B,EAAI,UAExB,OAAO,GAGXG,KAAM,SAAU3Y,GACZ4Y,QAAQD,KAAK3Y,IAGjB6Y,KAAM,WAGF,IAFA,IAAIC,EAAI,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAChFC,EAAM,GACDv7B,EAAI,EAAGA,EAAI,GAAIA,IAEpBu7B,GAAOD,EADC1tB,SAAS0tB,EAAEl2B,OAAS8P,KAAKmB,SAAU,KAG/C,OAAOklB,GAGXC,SAAU,SAAUC,GAChB,OAAOA,aAAkBh0B,GAAGi0B,QAAWj0B,GAAGk0B,MAAQF,aAAkBh0B,GAAGk0B,MAG3EC,cAAe,SAAUC,EAAOhL,EAAS8J,GACrC,IAAKlzB,GAAGkQ,QAAQkkB,GACZ,MAAM,IAAIl3B,MAAM,yBAQpB,OAJIksB,EAFAppB,GAAG+zB,SAAS3K,GAEF,GAEVA,GAAsB,GAEnBppB,GAAGqK,IAAIrK,GAAGwlB,QAAQ4O,GAAQ,SAAU77B,EAAGwD,GAC1C,OAAOiE,GAAGq0B,aAAat4B,EAAMiE,GAAGs0B,UAAUlL,OAIlDmL,YAAa,SAAUxiB,EAAMyiB,EAAWC,GAGpC,OAFAD,EAAYx0B,GAAGkQ,QAAQskB,GAAaA,EAAYx0B,GAAG00B,UAAU10B,GAAGwlB,QAAQzT,GAAMpU,OAAQ62B,GAAa,IACnGC,EAAYz0B,GAAGkQ,QAAQukB,GAAaA,EAAYz0B,GAAG00B,UAAU10B,GAAGwlB,QAAQzT,GAAMpU,OAAQ82B,GAAa,IAC5Fz0B,GAAGqK,IAAI0H,EAAM,SAAUxZ,EAAGwD,GAC7B,OAAIiE,GAAGkQ,QAAQnU,GACJiE,GAAGu0B,YAAYx4B,EAAMy4B,EAAWC,GAEvC14B,aAAgBiE,GAAGi0B,OACZj0B,GAAG6uB,OAAO,GAAI2F,EAAUG,QAASF,EAAUE,QAAS,CACvDjP,KAAM,KACNkP,GAAI74B,IAGRy4B,EAAU,aAAcx0B,GAAGi0B,QAC3BQ,EAAUE,QACH30B,GAAG6uB,OAAO,GAAI9yB,EAAM,CACvB64B,GAAIJ,EAAUG,WAGlB54B,EAAK64B,cAAc50B,GAAGi0B,QAAWj0B,GAAGk0B,MAAQn4B,EAAK64B,cAAc50B,GAAGk0B,MAClEM,EAAUG,QACH30B,GAAG6uB,OAAO,GAAI4F,EAAUE,QAAS,CAAEjP,KAAM,MAAQ3pB,IAExDA,EAAK64B,GACE50B,GAAG6uB,OAAO,GAAI4F,EAAUE,QAAS54B,EAAM,CAC1C64B,GAAI50B,GAAG6uB,OAAO,GAAI2F,EAAUG,QAAS54B,EAAK64B,MAG3C50B,GAAG6uB,OAAO,GAAI4F,EAAUE,QAAS,CACpCC,GAAI50B,GAAG6uB,OAAO,GAAI2F,EAAUG,QAAS54B,QAMjD84B,aAAc,SAAUT,EAAOU,GAC3B,IAAK,IAAIv8B,EAAIu8B,EAAQn3B,OAAS,EAAQ,GAALpF,EAAQA,IACrC67B,EAAQp0B,GAAGqK,IAAI+pB,EAAO,SAAUW,EAAGC,GAC/B,OAAOh1B,GAAG6uB,OAAO,GAAIiG,EAAQv8B,GAAI,CAC7B67B,MAAO,CACHp0B,GAAG6uB,OAAO,GAAIiG,EAAQv8B,GAAGq8B,GAAI,CACzBA,GAAII,SAMxB,OAAOZ,GAGXa,SAAU,SAAU9B,GAChB,OAAIA,IAAQA,EAAIzN,MAAQyN,EAAIyB,GACjBzB,EAEJ,CACHyB,GAAIzB,IAKZ+B,QAAS,SAAU/B,GACf,OAAOA,EAAIzN,MAAQyN,GAAOA,EAAIyB,IAAMzB,GAGxCgC,cAAe,SAAUC,GACrB,OAAOp1B,GAAGqK,IAAI+qB,EAAS,SAAU78B,EAAG88B,GAChC,OAAOA,EAAGC,aAMtB/oB,EAAEwkB,KAAK,CAAC,QAAS,YAAa,SAAU,QAAS,UAAW,SAAU,UAAW,QAAS,SAAUj4B,GAChGkH,GAAGlH,GAAQs6B,EAAOt6B,KAEtByT,EAAEwkB,KAAK,CAAC,MAAO,MAAO,OAAQ,MAAO,SAAU,cAAe,OAAQ,SAAU,SAAU,QAAS,MAAO,OAAQ,MAAO,MAAO,MAC5H,SAAU,UAAW,UAAW,UAAW,YAAa,SAAU,SAAUj4B,GAExEkH,GAAGlH,GAAQu6B,EADF,QAATv6B,EACsB,OAEAA,KAG9ByT,EAAEsiB,OAAO7uB,GAAI,CAET4mB,MAAO,SAAU2O,EAAMC,EAAIxtB,GACvB,IAAIvO,EACJ,GAAIuO,EACA,IAAKvO,EAAI87B,EAAM97B,EAAI+7B,EAAI/7B,IACnBuO,EAAUvO,GAGlB,OAAO+7B,EAAKD,GAIhBE,QAAS,SAAUF,EAAMC,EAAIxtB,GACzB,OAAOhI,GAAG4mB,MAAM4O,EAAID,EAAMvtB,IAG9B0tB,SAAU,SAAUvC,GAChB,IAAIwC,EAAM51B,EAKV,OAJAC,GAAG41B,IAAIzC,EAAK,SAAUr5B,EAAKN,GAEvB,OADAm8B,EAAM77B,GACC,IAEJ67B,GAGXE,QAAS,SAAU1C,GACf,IAAIwC,EAAM51B,EAKV,OAJAC,GAAG+wB,KAAKoC,EAAK,SAAUr5B,EAAKN,GAExB,OADAm8B,EAAM77B,GACC,IAEJ67B,GAGXG,YAAa,SAAU3C,GACnB,IAAIwC,EAAM51B,EAKV,OAJAC,GAAG41B,IAAIzC,EAAK,SAAUr5B,EAAKN,GAEvB,OADAm8B,EAAMn8B,GACC,IAEJm8B,GAGXI,WAAY,SAAU5C,GAClB,IAAIwC,EAAM51B,EAKV,OAJAC,GAAG+wB,KAAKoC,EAAK,SAAUr5B,EAAKN,GAExB,OADAm8B,EAAMn8B,GACC,IAEJm8B,GAGX/3B,OAAQ,SAAUo4B,EAAMC,GACpB,OAAIj2B,GAAGqc,MAAM2Z,GACFh2B,GAAGqK,IAAI,GAAG8V,MAAMplB,MAAMO,WAAY,SAAU46B,EAAK3C,GACpD,OAAOA,IACR7tB,KAAK,IAER1F,GAAGkQ,QAAQ8lB,GACJzpB,EAAE3O,OAAO7C,MAAM,GAAIO,WAE1B0E,GAAGwQ,SAASwlB,GACLzpB,EAAEsiB,OAAO9zB,MAAM,GAAIO,gBAD9B,GAKJ66B,SAAU,SAAUhD,EAAKnrB,EAAWkrB,GAChClrB,EAAYhI,GAAG2H,SAASK,EAAWkrB,GACnC,IAAK,IAAIrrB,EAAQsrB,EAAIx1B,OAAS,EAAY,GAATkK,EAAYA,IACzCG,EAAUH,EAAOsrB,EAAItrB,GAAQsrB,GAEjC,OAAO,GAGXiD,QAAS,SAAUjD,EAAKnrB,EAAWkrB,GAC/BlrB,EAAYhI,GAAG2H,SAASK,EAAWkrB,GACnC,IAAK,IAAIrrB,EAAQsrB,EAAIx1B,OAAS,EAAY,GAATkK,EAAYA,IACzC,GAAIG,EAAUH,EAAOsrB,EAAItrB,GAAQsrB,GAC7B,OAAO,EAGf,OAAO,GAGXkD,UAAW,SAAUlD,EAAKnrB,EAAWkrB,GACjClrB,EAAYhI,GAAG2H,SAASK,EAAWkrB,GACnC,IAAK,IAAIrrB,EAAQsrB,EAAIx1B,OAAS,EAAY,GAATkK,EAAYA,IACzC,IAAKG,EAAUH,EAAOsrB,EAAItrB,GAAQsrB,GAC9B,OAAO,EAGf,OAAO,GAGXmD,YAAa,SAAUnD,EAAKnrB,EAAWkrB,GACnClrB,EAAYhI,GAAG2H,SAASK,EAAWkrB,GAEnC,IADA,IAAwBp5B,EAApBoS,EAAOK,EAAEL,KAAKinB,GACT56B,EAAI2T,EAAKvO,OAAS,EAAQ,GAALpF,EAAQA,IAElC,GAAIyP,EAAUmrB,EADdr5B,EAAMoS,EAAK3T,IACauB,EAAKq5B,GACzB,OAAOr5B,GAKnBy8B,SAAU,SAAUpD,EAAKnrB,EAAWkrB,GAChC,IAAIp5B,EAMJ,QAAY,KAJRA,EADAkG,GAAGkQ,QAAQijB,GACLnzB,GAAGsvB,cAAc6D,EAAKnrB,EAAWkrB,GAEjClzB,GAAGs2B,YAAYnD,EAAKnrB,EAAWkrB,MAEV,IAATp5B,EAClB,OAAOq5B,EAAIr5B,IAInB08B,OAAQ,SAAUrD,EAAKsD,EAAQvD,GAC3B,IAEI36B,EAFA0gB,EAAajZ,GAAGiZ,WAAWwd,GAG/B,GAFAA,EAASxd,GAAcjZ,GAAGkQ,QAAQumB,GAAUA,EAAS,CAACA,GAElDz2B,GAAGkQ,QAAQijB,GACX,IAAK56B,EAAI,EAAGA,EAAI46B,EAAIx1B,OAAQpF,KACnB0gB,IAAqD,IAAvCwd,EAAO17B,MAAMm4B,EAAS,CAAC36B,EAAG46B,EAAI56B,OAAoB0gB,GAAcjZ,GAAG02B,SAASD,EAAQtD,EAAI56B,MACvG46B,EAAIlmB,OAAO1U,IAAK,QAIxByH,GAAG+wB,KAAKoC,EAAK,SAAU56B,EAAGg7B,IACjBta,IAAqD,IAAvCwd,EAAO17B,MAAMm4B,EAAS,CAAC36B,EAAG46B,EAAI56B,OAAoB0gB,GAAcjZ,GAAG02B,SAASD,EAAQtD,EAAI56B,aAChG46B,EAAI56B,MAM3Bo+B,SAAU,SAAUxD,EAAKtrB,GACrBA,EAAQ7H,GAAGkQ,QAAQrI,GAASA,EAAQ,CAACA,GACrC,IAA+BtP,EAA3B2X,EAAUlQ,GAAGkQ,QAAQijB,GACzB,IAAK56B,EAAI,EAAGA,EAAIsP,EAAMlK,OAAQpF,IACtB2X,EACAijB,EAAItrB,EAAMtP,IAAM,sBAET46B,EAAItrB,EAAMtP,IAGrB2X,GACAlQ,GAAGw2B,OAAOrD,EAAK,iBAIvByD,aAAc,SAAU9C,GACpB,OAAOA,EAAIvoB,MAAM,QAGrBsrB,aAAc,SAAU14B,GACpB,OAAOA,EAAMuH,KAAK,QAGtBoxB,QAAS,SAAUhD,GAEf,IADA,IAAIoC,EAAM,EACD39B,EAAI,EAAGuF,GADUg2B,EAAMA,EAAIiD,eACVp5B,OAAQpF,EAAIuF,IAAOvF,EAEzC,IADA29B,EAAMpC,EAAIkD,OAAOz+B,GAAG2uB,WAAW,GAFd,IAEyBA,WAAW,GAAK,GAAKgP,EAAM,IAC1D,WAAapC,EAAIkD,OAAOz+B,GAAG2uB,WAAW,GAHhC,IAG2CA,WAAW,IAAM,GACzE,OAAO,EAGf,OAAOgP,GAGXe,QAAS,SAAUC,GACf,IAAIC,EAAS,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KACvIjB,EAAMgB,EAAKpD,EAAM,GACrB,GAAY,IAARoD,EACA,MAAO,GAEX,KAAe,IAARhB,GAAW,CACd,IAAIz8B,EAAIy8B,EAAM,GACJ,IAANz8B,IACAA,EAAI,IAERq6B,EAAMqD,EAAO19B,EAAI,GAAKq6B,EACtBoC,GAAOA,EAAMz8B,GAAK,GAEtB,OAAOq6B,KAKfvnB,EAAEwkB,KAAK,CAAC,QAAS,UAAW,OAAQ,OAAQ,UAAW,UAAW,UAAW,QAAS,eAClF,aAAc,MAAO,QAAS,SAAU,UAAW,cAAe,cAAe,QAAS,OAAQ,YAAa,UAAW,SAAUj4B,GACpIkH,GAAGlH,GAAQs6B,EAAOt6B,KAEtByT,EAAEwkB,KAAK,CAAC,YAAa,iBAAkB,SAAUj4B,GAC7CkH,GAAGlH,GAAQu6B,EAAWv6B,KAE1ByT,EAAEsiB,OAAO7uB,GAAI,CAET00B,UAAW,SAAU/2B,EAAQnE,GAEzB,IADA,IAAIm8B,EAAM,GACDp9B,EAAI,EAAGA,EAAIoF,EAAQpF,IACpByH,GAAG6vB,OAAOr2B,GACVm8B,EAAIn3B,KAAKjG,GAETo9B,EAAIn3B,KAAKwB,GAAGs0B,UAAU96B,IAG9B,OAAOm8B,GAGXyB,WAAY,SAAUj5B,EAAO3E,GAEzB,IADA,IAAI6Q,EAAM,GACD9R,EAAI,EAAGA,EAAI4F,EAAMR,OAAQpF,IAC1ByH,GAAG6vB,OAAOr2B,GACV6Q,EAAIlM,EAAM5F,IAAM4F,EAAM5F,GAEtB8R,EAAIlM,EAAM5F,IAAMyH,GAAGs0B,UAAU96B,GAGrC,OAAO6Q,GAGXgtB,iBAAkB,SAAUl5B,EAAO3E,GAC/B,IAAIm8B,EAAM,GACV,IAAKx3B,EACD,OAAOw3B,EAEX,IAAK,IAAIp9B,EAAI,EAAGuF,EAAMK,EAAMR,OAAQpF,EAAIuF,EAAKvF,IACrCyH,GAAGkQ,QAAQ/R,EAAM5F,IACjBo9B,EAAIn3B,KAAKlD,UAAUg8B,OAAOn5B,EAAM5F,GAAIiB,IAEpCm8B,EAAIn3B,KAAKwB,GAAGs0B,UAAU96B,IAG9B,OAAOm8B,GAGXpH,KAAM,SAAUpwB,EAAOo5B,EAAU5vB,EAAUurB,GACvC,OAAa,MAAT/0B,EACO,IAENoO,EAAEkjB,UAAU8H,KACbrE,EAAUvrB,EACVA,EAAW4vB,EACXA,GAAW,GAEF5vB,EAAbA,GAAwBsrB,EAAStrB,EAAUurB,GACpC3mB,EAAEgiB,KAAK71B,KAAK6T,EAAGpO,EAAOo5B,EAAU5vB,EAAUurB,OAKzD3mB,EAAEwkB,KAAK,CAAC,OAAQ,UAAW,SAAU,QAAS,SAAU,SAAU,YAAa,SAAU,YACrF,WAAY,QAAS,WAAY,aAAc,UAAW,UAAW,UAAW,UAChF,YAAa,WAAY,WAAY,UAAW,WAAY,gBAAiB,cAAe,aAAc,WAC1G,YAAa,SAAU,WAAY,UAAW,QAAS,cAAe,YAAa,aAAc,SAAUj4B,GAC3GkH,GAAGlH,GAAQs6B,EAAOt6B,KAEtByT,EAAEwkB,KAAK,CAAC,YAAa,UAAW,OAAQ,OAAQ,OAAQ,SAAUj4B,GAC9DkH,GAAGlH,GAAQu6B,EAAWv6B,KAE1ByT,EAAEsiB,OAAO7uB,GAAI,CAETw3B,QAAS,SAAUC,EAAIC,EAAIC,GAQf,SAAJC,KAPc,iBAAPF,IACPC,EAAYD,EACZA,EAAKD,EACLA,EAAK,WACD,OAAOC,EAAG38B,MAAMP,KAAMc,aAG9B,IACGu8B,EAAMH,EAAGv9B,UAOZ,OANAy9B,EAAEz9B,UAAY09B,EACdJ,EAAGt9B,UAAY,IAAIy9B,EACnBH,EAAGK,WAAaD,EAChBtrB,EAAEsiB,OAAO4I,EAAGt9B,UAAWw9B,EAAW,CAC9BG,WAAYJ,IAETD,GAGXM,KAAM,WAEF,KAAO/3B,GAAGC,UAAiC,EAArBD,GAAGC,SAAStC,QAC9BqC,GAAGC,SAAS00B,OAAZ30B,GAEJA,GAAGg4B,aAAc,GAGrBluB,IAAK,SAAUqpB,EAAKjnB,GAChB,OAAIlM,GAAGkQ,QAAQhE,GACS,IAAhBA,EAAKvO,QAGFqC,GAAGovB,MAAMljB,EAAM,SAAU3T,EAAGuB,GAC/B,OAAOyS,EAAEzC,IAAIqpB,EAAKr5B,KAGnByS,EAAEzC,IAAI/O,MAAMwR,EAAGjR,YAG1B28B,OAAQ,SAAUz+B,GAGd,OAAIP,OAAOg/B,QAAUj4B,GAAGwQ,SAAShX,GACtBP,OAAOg/B,OAAOz+B,GAElBA,GAIX6iB,MAAO,SAAUviB,GACb,OAAOkG,GAAGqrB,SAASvxB,IAASkG,GAAGwrB,SAAS1xB,IAAqB,EAAbA,EAAI6D,QAIxDu6B,eAAgB,SAAUC,EAAGC,GAGzB,OAFAD,EAAIn4B,GAAG6vB,OAAOsI,GAAKA,GAAK,GAAKA,GAAGE,cAChCD,EAAIp4B,GAAG6vB,OAAOuI,GAAKA,GAAK,GAAKA,GAAGC,cACzBr4B,GAAG2vB,QAAQwI,EAAGC,IAGzBE,gBAAiB,SAAUC,GACvB,MAAiB,iBAANA,EACK,GAALA,EACa,iBAANA,EACP,aAAatsB,KAAKssB,IAAW,QAALA,GAAe,UAAUtsB,KAAKssB,QAD1D,GAKXC,UAAW,SAAUrF,GACjB,OAAQnzB,GAAG6vB,OAAOsD,IAGtBtD,OAAQ,SAAUsD,GACd,OAAO,MAAOA,GAGlBsF,aAAc,SAAUC,GACpB,OAAO14B,GAAGkQ,QAAQwoB,IAAQ14B,GAAG0vB,QAAQgJ,IAGzCC,gBAAiB,SAAUD,GACvB,OAAO14B,GAAGkQ,QAAQwoB,KAAS14B,GAAG0vB,QAAQgJ,IAG1CE,cAAe,SAAUzF,GACrB,OAAOnzB,GAAG2vB,QAAQwD,EAAK,KAG3B0F,iBAAkB,SAAU1F,GACxB,OAAOnzB,GAAG6d,cAAcsV,KAASnzB,GAAG44B,cAAczF,IAGtD2F,cAAe,SAAU3F,GACrB,OAAOnzB,GAAGwrB,SAAS2H,IAAuB,IAAfA,EAAIx1B,QAGnCo7B,iBAAkB,SAAU5F,GACxB,OAAOnzB,GAAGwrB,SAAS2H,KAASnzB,GAAG84B,cAAc3F,IAGjD6F,SAAU,SAAU7F,GAChB,OAAc,MAAPA,GAAeA,GAAOA,EAAIx4B,UAKzC4R,EAAEsiB,OAAO7uB,GAAI,CACTs0B,UAAW/nB,EAAE2iB,UACb+J,WAAY1sB,EAAEmgB,MAEdwM,YAAa,SAAUj/B,EAAQk/B,GAC3B,IAAIjtB,EAAOlM,GAAGkM,KAAKitB,GAAQx7B,EAASuO,EAAKvO,OACzC,GAAc,MAAV1D,EACA,OAAQ0D,EAGZ,IADA,IAAIw1B,EAAMl6B,OAAOgB,GACR1B,EAAI,EAAGA,EAAIoF,EAAQpF,IAAK,CAC7B,IAAIuB,EAAMoS,EAAK3T,GACf,KAAKyH,GAAG2vB,QAAQwJ,EAAMr/B,GAAMq5B,EAAIr5B,KAAWA,KAAOq5B,GAC9C,OAAO,EAGf,OAAO,GAGXuD,SAAU,SAAUvD,EAAKsD,EAAQptB,GAE7B,OADKkD,EAAEyL,YAAYmb,KAAMA,EAAM5mB,EAAE7D,OAAOyqB,IACqC,GAAtE5mB,EAAEijB,QAAQ2D,EAAKsD,EAA6B,iBAAdptB,GAA0BA,IAGnEoqB,aAAc,SAAUN,EAAK/S,GACzB,OAAIpgB,GAAGwQ,SAAS4P,GACLpgB,GAAG41B,IAAIzC,EAAK,SAAU56B,EAAGg7B,GAC5B,GAAIvzB,GAAG2vB,QAAQ4D,EAAGnT,GACd,OAAO,IAIZpgB,GAAG02B,SAASvD,EAAK/S,IAG5BgZ,YAAa,SAAUjG,EAAKsD,GACxB,IAAK,IAAIl+B,EAAI,EAAGA,EAAI46B,EAAIx1B,OAAQpF,IAC5B,GAAIyH,GAAG2vB,QAAQ8G,EAAQtD,EAAI56B,IACvB,OAAOA,EAGf,OAAQ,GAGZ8gC,WAAY,SAAUlG,EAAKsD,GACvB,IACIl+B,EADAszB,GAAO,EAEX,GAAI7rB,GAAGkQ,QAAQijB,GACX,IAAK56B,EAAI,EAAGA,EAAI46B,EAAIx1B,OAAQpF,IACpByH,GAAG2vB,QAAQ8G,EAAQtD,EAAI56B,MACvB46B,EAAIlmB,OAAO1U,IAAK,GAChBszB,GAAO,QAIf7rB,GAAG+wB,KAAKoC,EAAK,SAAU56B,EAAGg7B,GAClBvzB,GAAG2vB,QAAQ8G,EAAQtD,EAAI56B,aAChB46B,EAAI56B,GACXszB,GAAO,KAInB,OAAOA,GAGXyN,YAAa,SAAUnG,EAAKsD,GACxB,GAAIz2B,GAAGkQ,QAAQijB,GAAM,CAEjB,IADA,IAAIhrB,EAAS,GACJ5P,EAAI,EAAGA,EAAI46B,EAAIx1B,OAAQpF,IACvByH,GAAG2vB,QAAQ8G,EAAQtD,EAAI56B,KACxB4P,EAAO3J,KAAK20B,EAAI56B,IAGxB,OAAO4P,EAQX,OANIA,EAAS,GACbnI,GAAG+wB,KAAKoC,EAAK,SAAU56B,EAAGg7B,GACjBvzB,GAAG2vB,QAAQ8G,EAAQtD,EAAI56B,MACxB4P,EAAO5P,GAAKg7B,KAGbprB,GAIXoxB,WAAY,SAAUp7B,GAClB,IAAIgK,EAAS,GAMb,OALAnI,GAAG+wB,KAAK5yB,EAAO,SAAU5F,EAAGwD,GACnBiE,GAAGyzB,aAAatrB,EAAQpM,IACzBoM,EAAO3J,KAAKzC,KAGboM,GAIXqxB,SAAU,SAAUv/B,EAAQ8f,GACb9f,EAAXA,GAAoB,GACV8f,EAAVA,GAAkB,GAClB,IAAI5R,EAAS,GACTsxB,EAAO,GACX,IAAK,IAAIrB,KAAKn+B,EACNO,KAAKsP,IAAI7P,EAAQm+B,KACZ59B,KAAKm1B,QAAQ11B,EAAOm+B,GAAIre,EAAMqe,KAC/BjwB,EAAO3J,KAAK45B,GAEhBqB,EAAKj7B,KAAK45B,IAGlB,IAAK,IAAIA,KAAKre,EACNvf,KAAKsP,IAAIiQ,EAAOqe,KAAOp4B,GAAG02B,SAAS+C,EAAMrB,IACzCjwB,EAAO3J,KAAK45B,GAGpB,OAAOjwB,KAKfoE,EAAEwkB,KAAK,CAAC,WAAY,SAAU,QAAS,WAAY,SAAU,WAAY,SAAU,SAAU,SAAUj4B,GACnGkH,GAAGlH,GAAQ,WACP,OAAOyT,EAAEzT,GAAMiC,MAAMwR,EAAGjR,cAKhCiR,EAAEwkB,KAAK,CAAC,OAAQ,OAAQ,UAAW,WAAY,WAAY,QAAS,QAAS,QAAS,SAAUj4B,GAC5FkH,GAAGlH,GAAQ,WACP,OAAOyT,EAAEzT,GAAMiC,MAAMwR,EAAGjR,cAIhCiR,EAAEsiB,OAAO7uB,GAAI,CACT3B,SAAU,WACN,IAAIq7B,EAAY,GACZC,GAAU,EACVC,OAAY,EAEhB,SAASC,IACLF,GAAU,EAGV,IAFA,IAAIG,EAASJ,EAAUvZ,MAAM,GAEpB5nB,EADTmhC,EAAU/7B,OAAS,EACHpF,EAAIuhC,EAAOn8B,OAAQpF,IAC/BuhC,EAAOvhC,KAIf,GAAuB,oBAAZyW,QAAyB,CAChC,IAAI3U,EAAI2U,QAAQmX,UAChByT,EAAY,SAASA,IACjBv/B,EAAE0/B,KAAKF,SAER,GAAgC,oBAArBG,iBAAkC,CAChD,IAAIC,EAAU,EACVC,EAAW,IAAIF,iBAAiBH,GAChCM,EAAWC,SAASC,eAAe7nB,OAAOynB,IAC9CC,EAASI,QAAQH,EAAU,CACvBI,eAAe,IAEnBX,EAAY,SAASA,IACjBK,GAAWA,EAAU,GAAK,EAC1BE,EAASpoB,KAAOS,OAAOynB,SAG3BL,OAD+B,IAAjBp9B,EACF,SAASo9B,IACjBp9B,EAAaq9B,IAIL,SAASD,IACjBv+B,WAAWw+B,EAAiB,IAIpC,OAAO,SAAuBW,GAC1B,IAAIC,OAAW,EACXn8B,EAAO,GAAG6hB,MAAMznB,KAAK4C,UAAW,GAiBpC,GAhBAo+B,EAAUl7B,KAAK,WACX,GAAIg8B,EACA,IACIA,EAAGz/B,MAAM,KAAMuD,GACjB,MAAO5D,GACLi5B,QAAQ+G,MAAMhgC,QAEX+/B,GACPA,EAAS1/B,MAAM,KAAMuD,KAGxBq7B,IACDA,GAAU,EACVC,MAGCY,GAAyB,oBAAZxrB,QACd,OAAO,IAAIA,QAAQ,SAAUmX,EAAS8H,GAClCwM,EAAWtU,KA9DjB,KAsEd5Z,EAAEwkB,KAAK,CAAC,UAAW,SAAUj4B,GACzBkH,GAAGlH,GAAQs6B,EAAOt6B,KAEtByT,EAAEsiB,OAAO7uB,GAAI,CACT26B,QAAS,WACL,OAAI76B,QAAQ86B,aAAe96B,QAAQ86B,YAAYlsB,IACpC5O,QAAQ86B,YAAYlsB,MAE3B5O,QAAQ86B,aAAe96B,QAAQ86B,YAAYC,UACpC/6B,QAAQ86B,YAAYC,YAE3BpsB,KAAKC,IACED,KAAKC,MAET1O,GAAG86B,UAAUH,WAKxBx0B,SAAU,SAAUghB,GAChB,IAAI4T,EAAQ,GACR,OAAO5wB,KAAKgd,KACZ4T,EAAQ,IAEZ,IACI,OAAO50B,SAASghB,EAAQ4T,GAC1B,MAAOrgC,GACL,MAAM,IAAIwC,MAAMiqB,EAAS,qBAKjC6T,aAAc,SAAUxhC,GACpB,IAAI8H,EAAmB,iBACvB,OAAO9H,EACDgB,KAAKs0B,MAAMt0B,KAAK2L,SAAS3M,IAAS8H,EAAkBA,GACzC,IAAV9H,EAAcA,EAAQ,GAGjCyM,WAAY,SAAUkhB,GAClB,IACI,OAAOlhB,WAAWkhB,GACpB,MAAOzsB,GACL,MAAM,IAAIwC,MAAMiqB,EAAS,uBAKjC8T,gBAAiB,SAAU9T,GACvB,QAAI,QAAQhd,KAAKgd,IAMrB+T,kBAAmB,SAAU/T,GACzB,QAAI,mBAAmBhd,KAAKgd,IAMhCgU,kBAAmB,SAAUhU,GACzB,QAAI,kBAAkBhd,KAAKgd,IAM/BiU,UAAW,SAAUjU,GACjB,QAAI,WAAWhd,KAAKgd,IAMxBkU,UAAW,SAAUlU,GACjB,OAAQyI,MAAM3pB,WAAWkhB,KAAYjZ,SAASiZ,IAGlDmU,QAAS,SAAUnU,GACf,QAAI,oBAAoBhd,KAAKgd,IAMjCoU,MAAO,SAAUpU,GACb,QAAKnnB,GAAGo7B,UAAUjU,IAGM,IAAP,EAATA,IAGZqU,OAAQ,SAAUrU,GACd,QAAKnnB,GAAGo7B,UAAUjU,IAGM,IAAP,EAATA,IAGZsU,IAAK,SAAUt9B,EAAOwJ,EAAUurB,GAC5B,IAAIuI,EAAM,EAQV,OAPAz7B,GAAG+wB,KAAK5yB,EAAO,SAAU5F,EAAGwD,GAEpB0/B,GADA9zB,EACO+zB,OAAO/zB,EAAS5M,MAAMm4B,EAAS,CAAC36B,EAAGwD,KAEnC2/B,OAAO3/B,KAGf0/B,GAGXE,QAAS,SAAUx9B,EAAOwJ,EAAUurB,GAEhC,OADUlzB,GAAGy7B,IAAIt9B,EAAOwJ,EAAUurB,GACrB/0B,EAAMR,UAK3B4O,EAAEsiB,OAAO7uB,GAAI,CACTswB,KAAM,WACF,OAAO/jB,EAAE+jB,KAAKv1B,MAAMwR,EAAGjR,YAG3By7B,YAAa,SAAU7sB,GACnB,OAAQA,EAAS,IAAI0xB,qBAGzBvD,YAAa,SAAUnuB,GACnB,OAAQA,EAAS,IAAI2xB,qBAGzBC,eAAgB,SAAU5xB,GACtB,MAAO,eAAeC,KAAKD,IAG/B6xB,UAAW,SAAUC,GAEjB,MADqB,iDACC7xB,KAAK6xB,IAG/BC,YAAa,SAAUnI,GACnB,IAAIqE,EAAIrE,EAAI5M,WAAW,GAEvB,OAAOiR,IADCrE,EAAI5M,WAAW4M,EAAIn2B,OAAS,IACX,KAANw6B,GAAoB,KAANA,EAE3BrE,EADAA,EAAI3T,MAAM,GAAI,IAKxB+b,SAAU,SAAUpI,GAChB,OAAOA,EAAIrnB,QAAQ,QAAS,SAAUF,EAAG4vB,GACrC,OAAOA,EAAUpF,iBAKzBqF,UAAW,SAAUtI,GACjB,OAAOA,EAAIrnB,QAAQ,WAAY,OAAO4rB,eAG1CU,iBAAkB,SAAUjF,GACxB,OAAO9zB,GAAGwrB,SAASsI,KAAS9zB,GAAG0vB,QAAQoE,IAG3CgF,cAAe,SAAUhF,GACrB,OAAO9zB,GAAGwrB,SAASsI,IAAQ9zB,GAAG0vB,QAAQoE,IAM1CuI,QAAS,SAAU3W,EAAM4W,EAAMxiC,GAC3B,OAAQ4rB,GACJ,KAAK1lB,GAAGu8B,WAAWC,IACnB,QACI,OAAOx8B,GAAGy8B,WAAWH,EAAMxiC,KAWvC4iC,QAAS,SAAUhX,EAAM4W,EAAMxiC,GAC3B,OAAQ4rB,GACJ,KAAK1lB,GAAGu8B,WAAWC,IACnB,QACI,OAAOx8B,GAAG28B,WAAWL,EAAMxiC,KAUvCq1B,OAAQ,SAAUjlB,GACd,OAAOA,EAAOuC,QAAQ,UAAW,SAcrCmwB,QAAS,SAAUC,EAAKvyB,EAAMwyB,GAC1B,IAAI30B,EAASqK,OAAOqqB,GAIpB,IAFIC,EADCA,GACI,IAEF30B,EAAOxK,OAAS2M,GACnBnC,EAAS20B,EAAK30B,EAElB,OAAOA,EAAO2D,YAclBixB,OAAQ,SAAUA,GACd,IAAIz+B,EAAOC,MAAMpE,UAAUgmB,MAAMznB,KAAK4C,UAAW,GACjD,OAAOyhC,EAAOtwB,QAAQ,aAAc,SAAU9T,EAAGJ,GAC7C,OAAO+F,EAAK/F,QAMxBgU,EAAEsiB,OAAO7uB,GAAI,CAMTg9B,WAAY,SAAUC,GAClB,OAAQA,EAAO,GAAM,GAAKA,EAAO,KAAQ,GAAMA,EAAO,KAAQ,GAalEC,cAAe,SAAUC,EAAIC,EAAIC,EAAIC,EAASC,GAC1C,IAAIC,EAAO,GA8BX,OA7BAL,GAAU,EACVC,GAAU,EACVC,GAAU,EACVC,EAAUt9B,GAAGwrB,SAAS8R,GAAWA,EAAQjyB,MAAM,QAAUiyB,EACzDC,EAAUv9B,GAAGwrB,SAAS+R,GAAWA,EAAQlyB,MAAM,QAAUkyB,EACrDJ,EAAKG,EAAQ,GACbE,EAAO,CAAC,KACDL,EAAKI,EAAQ,GACpBC,EAAO,CAAC,IAAK,GACNL,GAAMG,EAAQ,IAAMH,GAAMI,EAAQ,KACrCJ,GAAMG,EAAQ,KACVF,EAAKE,EAAQ,GACbE,EAAO,CAAC,KACDJ,GAAME,EAAQ,IACjBD,EAAKC,EAAQ,KACbE,EAAO,CAAC,OAIhBL,GAAMI,EAAQ,KACVH,EAAKG,EAAQ,GACbC,EAAO,CAAC,IAAK,GACNJ,GAAMG,EAAQ,IACjBF,EAAKE,EAAQ,KACbC,EAAO,CAAC,IAAK,MAKtBA,GAGXC,eAAgB,SAAU3J,GACtB,IAAI4J,EAAK5J,EAAIzoB,MAAM,QACf8xB,EAAa,EAARO,EAAG,GAAQN,EAAa,EAARM,EAAG,GAAQL,EAAa,EAARK,EAAG,GAC5C,GAAIA,EAAG//B,QAAU,EACb,OAAO,EAEX,GAAI+/B,EAAG//B,QAAU,EACb,OAAa,GAANy/B,GAAWA,GAAM,GAE5B,IAAIO,EAAK39B,GAAGyO,KAAKmvB,IAAIzd,MAAM,GAE3B,OADAwd,EAAG,GAAK39B,GAAGg9B,WAAWG,GAAM,GAAK,GACpB,GAANC,GAAWA,GAAM,IAAMC,GAAMM,EAAGP,EAAK,IAGhDS,cAAe,SAAU/J,EAAKgK,GAC1B,IAAIC,EAAQ/9B,GAAG86B,UACXkD,EAAI,EACJrlC,EAAI,EACJE,EAAI,EAEJs/B,EAAIrE,EAAIvoB,MAAM,OACO,QAArBuyB,EAAIzF,eAAgD,UAArByF,EAAIzF,gBAGnCF,EAAE,GAAKrE,EAAImK,UAAU,EAFJ,GAGjB9F,EAAE,GAAKrE,EAAImK,UAHM,EAGgBC,GACjC/F,EAAE,GAAKrE,EAAImK,UAAUC,EAA0BA,IAEnD,IAAI9F,EAAI0F,EAAIzyB,MAAM,OACd9S,EAAI,EAAG4lC,EAAI,EACXC,EAAK,EACL7vB,EAAM,EACN8vB,EAAM,EACV,IAAK9lC,EAAI,EAAGA,EAAI4/B,EAAEx6B,SAAUpF,EACxB,OAAQ6/B,EAAE7/B,IACN,IAAK,KACL,IAAK,KACDM,EAAIsN,SAASgyB,EAAE5/B,GAAI,IACnB,MAEJ,IAAK,KAGL,IAAK,KACDI,EAAIwN,SAASgyB,EAAE5/B,GAAI,IAAM,EACzB,MAEJ,IAAK,KACL,IAAK,MACDylC,EAAI73B,SAASgyB,EAAE5/B,GAAI,KACd,MAASylC,GAAU,GAAJA,EAAU,KAAO,KACrC,MAEJ,IAAK,KACL,IAAK,KACD,IAAKG,EAAI,EAAGA,EAAI,KAAMA,EAClB,GAAIn+B,GAAGyO,KAAK6vB,IAAIH,GAAGI,OAAO,EAAGpG,EAAE5/B,GAAGoF,QAAQ06B,eAAiBF,EAAE5/B,GAAG8/B,cAAe,CAC3E1/B,EAAIwlC,EACJ,MAGR,MAEJ,IAAK,KACL,IAAK,KACL,IAAK,KACL,IAAK,KACDC,EAAKj4B,SAASgyB,EAAE5/B,GAAI,IACpB,MAEJ,IAAK,KACL,IAAK,KACG,MAAM4R,KAAKguB,EAAE5/B,KAAO6lC,EAAK,GACzBA,GAAM,GACC,MAAMj0B,KAAKguB,EAAE5/B,KAAa,IAAN6lC,IAC3BA,GAAM,IAEV,MAEJ,IAAK,KACD7vB,EAAMpI,SAASgyB,EAAE5/B,GAAI,IACzB,IAAK,KACD8lC,EAAMl4B,SAASgyB,EAAE5/B,GAAI,IAyBjC,GAlBIq3B,MAAMoO,KACNA,EAAID,EAAMS,eAEV5O,MAAMj3B,KACNA,EAAIolC,EAAMU,YAEV7O,MAAM/2B,KACNA,EAAIklC,EAAMjD,WAEVlL,MAAMwO,KACNA,EAAKL,EAAMW,YAEX9O,MAAMrhB,KACNA,EAAMwvB,EAAMY,cAEZ/O,MAAMyO,KACNA,EAAMN,EAAMa,cAEP,GAALZ,EACA,OAAOh+B,GAAG86B,QAAQkD,EAAGrlC,EAAGE,EAAGulC,EAAI7vB,EAAK8vB,GAKxC,IAFA1lC,GAAK,EAEAJ,EADLM,EAFAmlC,EAAI,EAGQzlC,EAAI4/B,EAAEx6B,SAAUpF,EACxB,IAAiC,GAA7B4/B,EAAE5/B,GAAGsmC,OAAO,aAAoB,CAChC,IAAIplC,GAAK,EACT,IAAK0kC,EAAI,EAAGA,EAAI,KAAMA,EAClB,GAAIn+B,GAAGyO,KAAK6vB,IAAIH,GAAGI,OAAO,EAAGpG,EAAE5/B,GAAGoF,QAAQ06B,eAAiBF,EAAE5/B,GAAG8/B,cAAe,CAC3E5+B,EAAI0kC,EACJ,OAGE,GAAN1kC,KACU,GAANd,IACAE,EAAIF,EAAI,GAEZA,EAAIc,QAED0M,SAASgyB,EAAE5/B,GAAI,KAAO,KAAY,GAANI,EACnCA,EAAIw/B,EAAE5/B,GAAK,EACiB,GAArB4N,SAASgyB,EAAE5/B,GAAI,KAAiB,GAALylC,GAClCA,EAAI73B,SAASgyB,EAAE5/B,GAAI,KACd,MAASylC,GAAU,GAAJA,EAAU,KAAO,KACzB,GAALnlC,IACPA,EAAIs/B,EAAE5/B,IAMd,OAHS,GAALylC,IACAA,EAAID,EAAMS,gBAEJ,GAAN7lC,GAAgB,GAALE,EACJmH,GAAG86B,QAAQkD,EAAGrlC,EAAGE,EAAGulC,EAAI7vB,EAAK8vB,GAEjCN,GAGXjD,QAAS,WACL,IAEIgE,EADAxgC,EAAOhD,UAEX,OAHaA,UAAUqC,QAKnB,KAAK,EACDmhC,EAAK,IAAIrwB,KACT,MAEJ,KAAK,EACDqwB,EAAK,IAAIrwB,KAAKnQ,EAAK,IACnB,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,IAC5B,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACrC,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC9C,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACvD,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAChE,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzE,MACJ,QACIwgC,EAAK,IAAIrwB,KAGjB,GAAIzO,GAAGw4B,UAAUx4B,GAAG++B,YAAmC,IAArBzjC,UAAUqC,QAAsC,IAArBrC,UAAUqC,QAAgBqC,GAAGqrB,SAAS/vB,UAAU,KAAO,CAChH,IAAI0jC,EAAYF,EAAGnE,UAEfsE,EAAuC,IAAzBH,EAAGI,oBAErB,OAAO,IAAIzwB,KADDuwB,EAAYC,EACAj/B,GAAG++B,UAE7B,OAAOD,GAIXnE,QAAS,WACL,IAEImE,EADAxgC,EAAOhD,UAEX,OAHaA,UAAUqC,QAKnB,KAAK,EACDmhC,EAAK,IAAIrwB,KACT,MAEJ,KAAK,EACDqwB,EAAK,IAAIrwB,KAAKnQ,EAAK,IACnB,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,IAC5B,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACrC,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC9C,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACvD,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAChE,MAEJ,KAAK,EACDwgC,EAAK,IAAIrwB,KAAKnQ,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,GAAIA,EAAK,IACzE,MACJ,QACIwgC,EAAK,IAAIrwB,KAGjB,OAAIzO,GAAGw4B,UAAUx4B,GAAG++B,UAETD,EAAGnE,UAAY36B,GAAG++B,SAA4C,KAAjC,IAAItwB,MAAOywB,oBAE5CJ,EAAGnE,e,iFC3wCrB,SAAU9/B,EAAQkF,GAGf,IAAIlF,EAAO2B,aAAX,CAIA,IAII2iC,EAJAC,EAAa,EACbC,EAAgB,GAChBC,GAAwB,EACxBC,EAAM1kC,EAAOu/B,SAoJboF,EAAWvmC,OAAO6T,gBAAkB7T,OAAO6T,eAAejS,GAC9D2kC,EAAWA,GAAYA,EAASnkC,WAAamkC,EAAW3kC,EAGf,qBAArC,GAAGiR,SAASpT,KAAKmC,EAAOmC,SArF5B,SAASyiC,IACLN,EAAoB,SAASO,GACzB1iC,EAAQqB,SAAS,WAAcshC,EAAaD,MAqFhDD,IAjFJ,SAASG,IAGL,GAAI/kC,EAAOglC,cAAgBhlC,EAAOilC,cAAe,CAC7C,IAAIC,GAA4B,EAC5BC,EAAenlC,EAAOolC,UAM1B,OALAplC,EAAOolC,UAAY,WACfF,GAA4B,GAEhCllC,EAAOglC,YAAY,GAAI,KACvBhlC,EAAOolC,UAAYD,EACZD,GAwEJH,GAIA/kC,EAAOqlC,eA/ClB,SAASC,IACL,IAAIC,EAAU,IAAIF,eAClBE,EAAQC,MAAMJ,UAAY,SAASK,GAE/BX,EADaW,EAAMvuB,OAIvBotB,EAAoB,SAASO,GACzBU,EAAQG,MAAMV,YAAYH,IAyC9BS,GAEOZ,GAAO,uBAAwBA,EAAIiB,cAAc,UAvC5D,SAASC,IACL,IAAIC,EAAOnB,EAAIoB,gBACfxB,EAAoB,SAASO,GAGzB,IAAIkB,EAASrB,EAAIiB,cAAc,UAC/BI,EAAOC,mBAAqB,WACxBlB,EAAaD,GACbkB,EAAOC,mBAAqB,KAC5BH,EAAKI,YAAYF,GACjBA,EAAS,MAEbF,EAAKK,YAAYH,IA6BrBH,GAzBJ,SAASO,IACL7B,EAAoB,SAASO,GACzBrkC,WAAWskC,EAAc,EAAGD,IA2BhCsB,GAlFJ,SAASC,IAKL,IAAIC,EAAgB,gBAAkBzzB,KAAKmB,SAAW,IAClDuyB,EAAkB,SAAlBA,EAA2Bb,GACvBA,EAAMz8B,SAAWhJ,GACK,iBAAfylC,EAAMvuB,MACyB,IAAtCuuB,EAAMvuB,KAAKyd,QAAQ0R,IACnBvB,GAAcW,EAAMvuB,KAAKoO,MAAM+gB,EAAcvjC,UAIjD9C,EAAOumC,iBACPvmC,EAAOumC,iBAAiB,UAAWD,GAAiB,GAEpDtmC,EAAOwmC,YAAY,YAAaF,GAGpChC,EAAoB,SAASO,GACzB7kC,EAAOglC,YAAYqB,EAAgBxB,EAAQ,MAiD/CuB,GAeJzB,EAAShjC,aA1KT,SAASA,EAAa8kC,GAEI,mBAAbA,IACTA,EAAW,IAAI7mC,SAAS,GAAK6mC,IAI/B,IADA,IAAIhjC,EAAO,IAAIC,MAAMjD,UAAUqC,OAAS,GAC/BpF,EAAI,EAAGA,EAAI+F,EAAKX,OAAQpF,IAC7B+F,EAAK/F,GAAK+C,UAAU/C,EAAI,GAG5B,IAAIgpC,EAAO,CAAED,SAAUA,EAAUhjC,KAAMA,GAGvC,OAFA+gC,EAAcD,GAAcmC,EAC5BpC,EAAkBC,GACXA,KA6JTI,EAAS/iC,eAAiBA,EA1J1B,SAASA,EAAeijC,UACbL,EAAcK,GAyBzB,SAASC,EAAaD,GAGlB,GAAIJ,EAGAjkC,WAAWskC,EAAc,EAAGD,OACzB,CACH,IAAI6B,EAAOlC,EAAcK,GACzB,GAAI6B,EAAM,CACNjC,GAAwB,EACxB,KAjCZ,SAASvhC,EAAIwjC,GACT,IAAID,EAAWC,EAAKD,SAChBhjC,EAAOijC,EAAKjjC,KAChB,OAAQA,EAAKX,QACb,KAAK,EACD2jC,IACA,MACJ,KAAK,EACDA,EAAShjC,EAAK,IACd,MACJ,KAAK,EACDgjC,EAAShjC,EAAK,GAAIA,EAAK,IACvB,MACJ,KAAK,EACDgjC,EAAShjC,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAChC,MACJ,QACIgjC,EAASvmC,MAAMgF,EAAWzB,IAiBlBP,CAAIwjC,GADR,QAGI9kC,EAAeijC,GACfJ,GAAwB,MAvE3C,CAyLiB,oBAATxkC,UAAyC,IAAXD,OAAP,EAAuCA,EAASC,Q,qCC3J5EkF,GAAGwhC,GAAK,SAAUC,GACdjnC,KAAKknC,aAAaD,IAEtBl1B,EAAEsiB,OAAO7uB,GAAGwhC,GAAGrnC,UAAW,CACtBsb,MAAO,GACPsiB,KAAM,KACN4J,UAAW,KAEXD,aAAc,SAAUD,GACpBjnC,KAAKonC,WAAWH,GAChBjnC,KAAKqnC,QACLrnC,KAAKsnC,YAGTC,eAAgB,SAAUN,GACtB,MAAO,IAGXG,WAAY,SAAUH,GAClB,IAAIhsB,EAAQjb,KAAKib,MACbzV,GAAGiZ,WAAWze,KAAKib,SACnBA,EAAQjb,KAAKib,MAAMgsB,IAEvBjnC,KAAK4uB,QApDb,SAASyF,EAAT,GAEI,IADA,IAAmEzF,EAAStwB,EAAWsnB,EAAnFqW,EADR,GACiC,GAAI94B,EAASrC,UAAUqC,OAAQpF,EAAI,EACzDA,EAAIoF,EAAQpF,IAEf,GAAgC,OAA3B6wB,EAAU9tB,UAAU/C,IAErB,IAAKO,KAAQswB,EACHqN,EAAO39B,GAIT29B,KAHJrW,EAAOgJ,EAAQtwB,KAOXsnB,IAASrgB,YACT02B,EAAO39B,GAAQsnB,GAK/B,OAAOqW,EA+BY5H,CAAOr0B,KAAKunC,eAAeN,GAAShsB,EAAOgsB,IAG9DI,MAAO,WACHrnC,KAAKwnC,iBACLxnC,KAAKu9B,MAAQv9B,KAAKu9B,QAGtBiK,eAAgB,WACZ,IAAIlnC,EAAON,KACmB,MAA1BA,KAAK4uB,QAAQ5pB,YACb+M,EAAEwkB,KAAKv2B,KAAK4uB,QAAQ5pB,UAAW,SAAUyiC,IACpCA,EAAIxL,OAASwL,EAAIxL,OAAS37B,GAAMmnC,EAAIhjC,KAAO,OAAS,MACpDgjC,EAAIC,UAAW31B,EAAExS,KAAKkoC,EAAIjiB,OAAQllB,aAEhCN,KAAK4uB,QAAQ5pB,YAK5BsiC,SAAU,WACFtnC,KAAK4uB,QAAQvtB,KACbrB,KAAK4uB,QAAQvtB,IAAInD,KAAK8B,KAAMA,OAKpC2nC,UAAW,WACH3nC,KAAK4uB,QAAQvtB,MACbrB,KAAK4uB,QAAQvtB,IAAInD,KAAK,MACtB8B,KAAK4uB,QAAQvtB,IAAM,OAI3BumC,WAAY,WAIR,OAHK71B,EAAE2D,QAAQ1V,KAAK6nC,UAChB7nC,KAAK6nC,OAAS,IAEX7nC,KAAK6nC,QAQhBtjC,GAAI,SAAUmjC,EAAW1e,GACrB0e,EAAYA,EAAU7J,cACtB,IAAIiK,EAAM9nC,KAAK4nC,aAAaF,GACvB31B,EAAE2D,QAAQoyB,KACXA,EAAM,GACN9nC,KAAK4nC,aAAaF,GAAaI,GAEnCA,EAAI9jC,KAAKglB,IAQbvkB,KAAM,SAAUijC,EAAW1e,GACvB,IAAI+e,EAAQ,WACR/e,EAAGzoB,MAAMP,KAAMc,WACfd,KAAKgoC,GAAGN,EAAWK,IAEvB/nC,KAAKuE,GAAGmjC,EAAWK,IAOvBC,GAAI,SAAUN,EAAW1e,GAIrB,GAHA0e,EAAYA,EAAU7J,cAGZ,MAAN7U,SACOhpB,KAAK4nC,aAAaF,OACtB,CACH,IAAII,EAAM9nC,KAAK4nC,aAAaF,GAC5B,GAAI31B,EAAE2D,QAAQoyB,GAAM,CAChB,IAAIG,EAAS,GACbl2B,EAAEwkB,KAAKuR,EAAK,SAAUI,GACdA,GAAOlf,GACPif,EAAOjkC,KAAKkkC,KAGpBloC,KAAK4nC,aAAaF,GAAaO,KAO3CE,eAAgB,WAEZnoC,KAAK6nC,OAAS,IAQlBO,UAAW,WACP,IAAIV,EAAY5mC,UAAU,GAAG+8B,cACzBiK,EAAM9nC,KAAK4nC,aAAaF,GAC5B,GAAIliC,GAAGkQ,QAAQoyB,GACX,GAAItiC,GAAGoS,YAAY9W,UAAU,KACzB,IAAK,IAAI/C,EAAI,EAAGA,EAAI+pC,EAAI3kC,OAAQpF,IAC5B,IAAyC,IAArC+pC,EAAI/pC,GAAGwC,MAAMP,KAAMc,UAAU,IAC7B,OAAO,MAIf,KAAIgD,EAAOC,MAAMpE,UAAUgmB,MAAMznB,KAAK4C,UAAW,GACjD,IAAS/C,EAAI,EAAGA,EAAI+pC,EAAI3kC,OAAQpF,IAC5B,IAAiC,IAA7B+pC,EAAI/pC,GAAGwC,MAAMP,KAAM8D,GACnB,OAAO,EAKvB,OAAO,GAGXukC,QAAS,WACLroC,KAAKmnC,WAAannC,KAAKmnC,YACvBnnC,KAAK2nC,YACL3nC,KAAKmoC,qB,eCvLf,WAUE3iC,GAAGu8B,WAAav8B,GAAGu8B,YAAc,GACjCv8B,GAAGu8B,WAAWC,IAAM,MAEpB,IAAsC/uB,EAI9Bq1B,EAKAC,EAKAC,EAgIAC,EA8IAC,EAKAC,EA4DAC,EA2DAC,EA+CAC,EAqPAC,EAaAT,EAEAG,EA2WAH,EACAC,EACAC,EACAC,EACAM,EACAC,EAMAC,EA+8BAC,EAhhEJC,EAAWA,IAAuBl2B,EA+rBpCA,KAtrBMs1B,GALAD,EAAI,IAKMc,IAAM,GAKhBZ,EAAOD,EAAMC,KAIN,CAmBHnU,OAAQ,SAAU8I,GAEdC,EAAEz9B,UAAYK,KACd,IAAIqpC,EAAU,IAAIjM,EAoBlB,OAjBID,GACAkM,EAAQC,MAAMnM,GAIbkM,EAAQzpC,eAAe,UACxBypC,EAAQ9L,KAAO,WACX8L,EAAQE,OAAOhM,KAAKh9B,MAAMP,KAAMc,cAKxCuoC,EAAQ9L,KAAK59B,UAAY0pC,GAGjBE,OAASvpC,KAEVqpC,GAeXhqC,OAAQ,WACJ,IAAImqC,EAAWxpC,KAAKq0B,SAGpB,OAFAmV,EAASjM,KAAKh9B,MAAMipC,EAAU1oC,WAEvB0oC,GAeXjM,KAAM,aAcN+L,MAAO,SAAUtW,GACb,IAAK,IAAIyW,KAAgBzW,EACjBA,EAAWpzB,eAAe6pC,KAC1BzpC,KAAKypC,GAAgBzW,EAAWyW,IAKpCzW,EAAWpzB,eAAe,cAC1BI,KAAKsR,SAAW0hB,EAAW1hB,WAanCwb,MAAO,WACH,OAAO9sB,KAAKu9B,KAAK59B,UAAU00B,OAAOr0B,QAW1CyoC,EAAYF,EAAME,UAAYD,EAAKnU,OAAO,CAa1CkJ,KAAM,SAAUmM,EAAOC,GACnBD,EAAQ1pC,KAAK0pC,MAAQA,GAAS,GAG1B1pC,KAAK2pC,SA/JM,MA8JXA,EACgBA,EAEe,EAAfD,EAAMvmC,QAiB9BmO,SAAU,SAAUs4B,GAChB,OAAQA,GAAWjB,GAAKkB,UAAU7pC,OActCoD,OAAQ,SAAU0mC,GAEd,IAAIC,EAAY/pC,KAAK0pC,MACjBM,EAAYF,EAAUJ,MACtBO,EAAejqC,KAAK2pC,SACpBO,EAAeJ,EAAUH,SAM7B,GAHA3pC,KAAKs0B,QAGD2V,EAAe,EAEf,IAAK,IAAIlsC,EAAI,EAAGA,EAAImsC,EAAcnsC,IAAK,CACnC,IAAIosC,EAAYH,EAAUjsC,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,IAC7DgsC,EAAWE,EAAelsC,IAAO,IAAMosC,GAAa,IAAOF,EAAelsC,GAAK,EAAK,OAErF,GAAuB,MAAnBisC,EAAU7mC,OAEjB,IAASpF,EAAI,EAAGA,EAAImsC,EAAcnsC,GAAK,EACnCgsC,EAAWE,EAAelsC,IAAO,GAAKisC,EAAUjsC,IAAM,QAI1DgsC,EAAU/lC,KAAKzD,MAAMwpC,EAAWC,GAKpC,OAHAhqC,KAAK2pC,UAAYO,EAGVlqC,MAUXs0B,MAAO,WAEH,IAAIoV,EAAQ1pC,KAAK0pC,MACbC,EAAW3pC,KAAK2pC,SAGpBD,EAAMC,IAAa,IAAM,YAAe,GAAMA,EAAW,EAAK,EAC9DD,EAAMvmC,OAAS8P,EAAKC,KAAKy2B,EAAW,IAYxC7c,MAAO,WACH,IAAIA,EAAQ0b,EAAK1b,MAAM5uB,KAAK8B,MAG5B,OAFA8sB,EAAM4c,MAAQ1pC,KAAK0pC,MAAM/jB,MAAM,GAExBmH,GAgBX1Y,OAAQ,SAAUg2B,GAEd,IADA,IAAIV,EAAQ,GACH3rC,EAAI,EAAGA,EAAIqsC,EAAQrsC,GAAK,EAC7B2rC,EAAM1lC,KAAsB,WAAhBiP,EAAKmB,SAA0B,GAG/C,OAAO,IAAIq0B,EAAUlL,KAAKmM,EAAOU,MAOrC1B,EAAQJ,EAAE+B,IAAM,GAKhB1B,EAAMD,EAAMC,IAAM,CAclBkB,UAAW,SAAUC,GAOjB,IALA,IAAIJ,EAAQI,EAAUJ,MAClBC,EAAWG,EAAUH,SAGrBW,EAAW,GACNvsC,EAAI,EAAGA,EAAI4rC,EAAU5rC,IAAK,CAC/B,IAAIwsC,EAAQb,EAAM3rC,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,IACrDusC,EAAStmC,MAAMumC,IAAS,GAAGj5B,SAAS,KACpCg5B,EAAStmC,MAAa,GAAPumC,GAAaj5B,SAAS,KAGzC,OAAOg5B,EAASp/B,KAAK,KAgBzBs/B,MAAO,SAAUC,GAMb,IAJA,IAAIC,EAAeD,EAAOtnC,OAGtBumC,EAAQ,GACH3rC,EAAI,EAAGA,EAAI2sC,EAAc3sC,GAAK,EACnC2rC,EAAM3rC,IAAM,IAAM4N,SAAS8+B,EAAO1G,OAAOhmC,EAAG,GAAI,KAAQ,GAAMA,EAAI,EAAK,EAG3E,OAAO,IAAI0qC,EAAUlL,KAAKmM,EAAOgB,EAAe,KAOpD9B,EAASF,EAAME,OAAS,CAcxBiB,UAAW,SAAUC,GAOjB,IALA,IAAIJ,EAAQI,EAAUJ,MAClBC,EAAWG,EAAUH,SAGrBgB,EAAc,GACT5sC,EAAI,EAAGA,EAAI4rC,EAAU5rC,IAAK,CAC/B,IAAIwsC,EAAQb,EAAM3rC,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,IACrD4sC,EAAY3mC,KAAKgU,OAAO4yB,aAAaL,IAGzC,OAAOI,EAAYz/B,KAAK,KAgB5Bs/B,MAAO,SAAUK,GAMb,IAJA,IAAIC,EAAkBD,EAAU1nC,OAG5BumC,EAAQ,GACH3rC,EAAI,EAAGA,EAAI+sC,EAAiB/sC,IACjC2rC,EAAM3rC,IAAM,KAAiC,IAA1B8sC,EAAUne,WAAW3uB,KAAe,GAAMA,EAAI,EAAK,EAG1E,OAAO,IAAI0qC,EAAUlL,KAAKmM,EAAOoB,KAOrCjC,EAAOH,EAAMG,KAAO,CAcpBgB,UAAW,SAAUC,GACjB,IACI,OAAOiB,mBAAmBpW,OAAOiU,EAAOiB,UAAUC,KACpD,MAAO5pC,GACL,MAAM,IAAIwC,MAAM,0BAiBxB8nC,MAAO,SAAUQ,GACb,OAAOpC,EAAO4B,MAAMS,SAASC,mBAAmBF,OAWpDlC,EAAyBP,EAAMO,uBAAyBN,EAAKnU,OAAO,CAQpE8W,MAAO,WAEHnrC,KAAKorC,MAAQ,IAAI3C,EAAUlL,KAC3Bv9B,KAAKqrC,YAAc,GAavBC,QAAS,SAAU/zB,GAEI,iBAARA,IACPA,EAAOsxB,EAAK2B,MAAMjzB,IAItBvX,KAAKorC,MAAMhoC,OAAOmU,GAClBvX,KAAKqrC,aAAe9zB,EAAKoyB,UAiB7B4B,SAAU,SAAUC,GAEhB,IAAIj0B,EAAOvX,KAAKorC,MACZK,EAAYl0B,EAAKmyB,MACjBgC,EAAen0B,EAAKoyB,SACpBgC,EAAY3rC,KAAK2rC,UAIjBC,EAAeF,GAHc,EAAZC,GAcjBE,GARAD,EAFAJ,EAEev4B,EAAKC,KAAK04B,GAIV34B,EAAKY,KAAoB,EAAf+3B,GAAoB5rC,KAAK8rC,eAAgB,IAIrCH,EAG7BI,EAAc94B,EAAKc,IAAkB,EAAd83B,EAAiBH,GAG5C,GAAIG,EAAa,CACb,IAAK,IAAI19B,EAAS,EAAGA,EAAS09B,EAAa19B,GAAUw9B,EAEjD3rC,KAAKgsC,gBAAgBP,EAAWt9B,GAIpC,IAAI89B,EAAiBR,EAAUh5B,OAAO,EAAGo5B,GACzCt0B,EAAKoyB,UAAYoC,EAIrB,OAAO,IAAItD,EAAUlL,KAAK0O,EAAgBF,IAY9Cjf,MAAO,WACH,IAAIA,EAAQ0b,EAAK1b,MAAM5uB,KAAK8B,MAG5B,OAFA8sB,EAAMse,MAAQprC,KAAKorC,MAAMte,QAElBA,GAGXgf,eAAgB,IAQPvD,EAAM2D,OAASpD,EAAuBzU,OAAO,CAItD8X,IAAK3D,EAAKnU,SAWVkJ,KAAM,SAAU4O,GAEZnsC,KAAKmsC,IAAMnsC,KAAKmsC,IAAI9X,OAAO8X,GAG3BnsC,KAAKmrC,SAUTA,MAAO,WAEHrC,EAAuBqC,MAAMjtC,KAAK8B,MAGlCA,KAAKosC,YAeTC,OAAQ,SAAUC,GAQd,OANAtsC,KAAKsrC,QAAQgB,GAGbtsC,KAAKurC,WAGEvrC,MAiBXusC,SAAU,SAAUD,GAShB,OAPIA,GACAtsC,KAAKsrC,QAAQgB,GAINtsC,KAAKwsC,eAKpBb,UAAW,GAeXc,cAAe,SAAUC,GACrB,OAAO,SAAUnsB,EAAS4rB,GACtB,OAAO,IAAIO,EAAOnP,KAAK4O,GAAKI,SAAShsB,KAiB7CosB,kBAAmB,SAAUD,GACzB,OAAO,SAAUnsB,EAASjhB,GACtB,OAAO,IAAIypC,EAAO6D,KAAKrP,KAAKmP,EAAQptC,GAAKitC,SAAShsB,OAQ1DwoB,EAAST,EAAEuE,KAAO,GAEfvE,GA/qBH,SAASlL,KA4rBTqL,GAFAH,EAAIa,GACMC,IACQX,UACVH,EAAE+B,IAKKyC,OAAS,CAcxBjD,UAAW,SAAUC,GAEjB,IAAIJ,EAAQI,EAAUJ,MAClBC,EAAWG,EAAUH,SACrB95B,EAAM7P,KAAK+sC,KAGfjD,EAAUxV,QAIV,IADA,IAAI0Y,EAAc,GACTjvC,EAAI,EAAGA,EAAI4rC,EAAU5rC,GAAK,EAO/B,IANA,IAIIkvC,GAJSvD,EAAM3rC,IAAM,KAAQ,GAAMA,EAAI,EAAK,EAAM,MAI9B,IAHX2rC,EAAO3rC,EAAI,IAAO,KAAQ,IAAOA,EAAI,GAAK,EAAK,EAAM,MAG1B,EAF3B2rC,EAAO3rC,EAAI,IAAO,KAAQ,IAAOA,EAAI,GAAK,EAAK,EAAM,IAIzD4lC,EAAI,EAAIA,EAAI,GAAO5lC,EAAQ,IAAJ4lC,EAAWgG,EAAWhG,IAClDqJ,EAAYhpC,KAAK6L,EAAI2sB,OAAQyQ,IAAa,GAAK,EAAItJ,GAAO,KAKlE,IAAIuJ,EAAcr9B,EAAI2sB,OAAO,IAC7B,GAAI0Q,EACA,KAAOF,EAAY7pC,OAAS,GACxB6pC,EAAYhpC,KAAKkpC,GAIzB,OAAOF,EAAY9hC,KAAK,KAgB5Bs/B,MAAO,SAAU2C,GAEb,IAAIC,EAAkBD,EAAUhqC,OAC5B0M,EAAM7P,KAAK+sC,KAGXG,EAAcr9B,EAAI2sB,OAAO,IAC7B,GAAI0Q,EAAa,CACb,IAAIG,EAAeF,EAAUnY,QAAQkY,IAChB,GAAjBG,IACAD,EAAkBC,GAO1B,IAFA,IAAI3D,EAAQ,GACRU,EAAS,EACJrsC,EAAI,EAAGA,EAAIqvC,EAAiBrvC,IACjC,GAAIA,EAAI,EAAG,CACP,IAAIuvC,EAAQz9B,EAAImlB,QAAQmY,EAAU3Q,OAAOz+B,EAAI,KAASA,EAAI,EAAK,EAC3DwvC,EAAQ19B,EAAImlB,QAAQmY,EAAU3Q,OAAOz+B,MAAS,EAAKA,EAAI,EAAK,EAChE2rC,EAAMU,IAAW,KAAOkD,EAAQC,IAAW,GAAMnD,EAAS,EAAK,EAC/DA,IAIR,OAAO3B,EAAUppC,OAAOqqC,EAAOU,IAGnC2C,KAAM,qEAUb,SAAU95B,GAEP,IAAIq1B,EAAIa,EACJZ,EAAQD,EAAEc,IACVX,EAAYF,EAAME,UAClByD,EAAS3D,EAAM2D,OACfnD,EAAST,EAAEuE,KAGXW,EAAI,IAGP,WACG,IAAK,IAAIzvC,EAAI,EAAGA,EAAI,GAAIA,IACpByvC,EAAEzvC,GAAkC,WAA5BkV,EAAKw6B,IAAIx6B,EAAKy6B,IAAI3vC,EAAI,IAAqB,EAF3D,GASA,IAAIirC,EAAMD,EAAOC,IAAMkD,EAAO7X,OAAO,CACjC+X,SAAU,WACNpsC,KAAK2tC,MAAQ,IAAIlF,EAAUlL,KAAK,CAC5B,WAAY,WACZ,WAAY,aAIpByO,gBAAiB,SAAU4B,EAAGz/B,GAE1B,IAAK,IAAIpQ,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAEzB,IAAI8vC,EAAW1/B,EAASpQ,EACpB+vC,EAAaF,EAAEC,GAEnBD,EAAEC,GAC+C,UAA1CC,GAAc,EAAMA,IAAe,IACO,YAA1CA,GAAc,GAAOA,IAAe,GAK/C,IAAIC,EAAI/tC,KAAK2tC,MAAMjE,MAEfsE,EAAaJ,EAAEz/B,EAAS,GACxB8/B,EAAaL,EAAEz/B,EAAS,GACxB+/B,EAAaN,EAAEz/B,EAAS,GACxBggC,EAAaP,EAAEz/B,EAAS,GACxBigC,EAAaR,EAAEz/B,EAAS,GACxBkgC,EAAaT,EAAEz/B,EAAS,GACxBmgC,EAAaV,EAAEz/B,EAAS,GACxBogC,EAAaX,EAAEz/B,EAAS,GACxBqgC,EAAaZ,EAAEz/B,EAAS,GACxBsgC,EAAab,EAAEz/B,EAAS,GACxBugC,EAAcd,EAAEz/B,EAAS,IACzBwgC,EAAcf,EAAEz/B,EAAS,IACzBygC,EAAchB,EAAEz/B,EAAS,IACzB0gC,EAAcjB,EAAEz/B,EAAS,IACzB2gC,EAAclB,EAAEz/B,EAAS,IACzB4gC,EAAcnB,EAAEz/B,EAAS,IAGzBwvB,EAAIoQ,EAAE,GACNnQ,EAAImQ,EAAE,GACN3vC,EAAI2vC,EAAE,GACN1vC,EAAI0vC,EAAE,GAqEVnQ,EAAIoR,EAJJpR,EAAIoR,EAJJpR,EAAIoR,EAJJpR,EAAIoR,EALJpR,EAAIqR,EAJJrR,EAAIqR,EAJJrR,EAAIqR,EAJJrR,EAAIqR,EALJrR,EAAIsR,EAJJtR,EAAIsR,EAJJtR,EAAIsR,EAJJtR,EAAIsR,EALJtR,EAAIuR,EAJJvR,EAAIuR,EAJJvR,EAAIuR,EAJJvR,EAAIuR,EAAGvR,EADPx/B,EAAI+wC,EAAG/wC,EADPC,EAAI8wC,EAAG9wC,EADPs/B,EAAIwR,EAAGxR,EAAGC,EAAGx/B,EAAGC,EAAG2vC,EAAY,EAAGR,EAAE,IACvB5P,EAAGx/B,EAAG6vC,EAAY,GAAIT,EAAE,IACxB7P,EAAGC,EAAGsQ,EAAY,GAAIV,EAAE,IACxBnvC,EAAGs/B,EAAGwQ,EAAY,GAAIX,EAAE,IAGrCpvC,EAAI+wC,EAAG/wC,EADPC,EAAI8wC,EAAG9wC,EADPs/B,EAAIwR,EAAGxR,EAAGC,EAAGx/B,EAAGC,EAAG+vC,EAAY,EAAGZ,EAAE,IACvB5P,EAAGx/B,EAAGiwC,EAAY,GAAIb,EAAE,IACxB7P,EAAGC,EAAG0Q,EAAY,GAAId,EAAE,IACxBnvC,EAAGs/B,EAAG4Q,EAAY,GAAIf,EAAE,IAGrCpvC,EAAI+wC,EAAG/wC,EADPC,EAAI8wC,EAAG9wC,EADPs/B,EAAIwR,EAAGxR,EAAGC,EAAGx/B,EAAGC,EAAGmwC,EAAY,EAAGhB,EAAE,IACvB5P,EAAGx/B,EAAGqwC,EAAY,GAAIjB,EAAE,IACxB7P,EAAGC,EAAG8Q,EAAa,GAAIlB,EAAE,KACzBnvC,EAAGs/B,EAAGgR,EAAa,GAAInB,EAAE,KAGtCpvC,EAAI+wC,EAAG/wC,EADPC,EAAI8wC,EAAG9wC,EADPs/B,EAAIwR,EAAGxR,EAAGC,EAAGx/B,EAAGC,EAAGuwC,EAAa,EAAGpB,EAAE,KACxB5P,EAAGx/B,EAAGywC,EAAa,GAAIrB,EAAE,KACzB7P,EAAGC,EAAGkR,EAAa,GAAItB,EAAE,KACzBnvC,EAAGs/B,EAAGoR,EAAa,GAAIvB,EAAE,KAItCpvC,EAAI8wC,EAAG9wC,EADPC,EAAI6wC,EAAG7wC,EADPs/B,EAAIuR,EAAGvR,EAAGC,EAAGx/B,EAAGC,EAAG4vC,EAAY,EAAGT,EAAE,KACvB5P,EAAGx/B,EAAGkwC,EAAY,EAAGd,EAAE,KACvB7P,EAAGC,EAAG+Q,EAAa,GAAInB,EAAE,KACzBnvC,EAAGs/B,EAAGqQ,EAAY,GAAIR,EAAE,KAGrCpvC,EAAI8wC,EAAG9wC,EADPC,EAAI6wC,EAAG7wC,EADPs/B,EAAIuR,EAAGvR,EAAGC,EAAGx/B,EAAGC,EAAGgwC,EAAY,EAAGb,EAAE,KACvB5P,EAAGx/B,EAAGswC,EAAa,EAAGlB,EAAE,KACxB7P,EAAGC,EAAGmR,EAAa,GAAIvB,EAAE,KACzBnvC,EAAGs/B,EAAGyQ,EAAY,GAAIZ,EAAE,KAGrCpvC,EAAI8wC,EAAG9wC,EADPC,EAAI6wC,EAAG7wC,EADPs/B,EAAIuR,EAAGvR,EAAGC,EAAGx/B,EAAGC,EAAGowC,EAAY,EAAGjB,EAAE,KACvB5P,EAAGx/B,EAAG0wC,EAAa,EAAGtB,EAAE,KACxB7P,EAAGC,EAAGuQ,EAAY,GAAIX,EAAE,KACxBnvC,EAAGs/B,EAAG6Q,EAAY,GAAIhB,EAAE,KAGrCpvC,EAAI8wC,EAAG9wC,EADPC,EAAI6wC,EAAG7wC,EADPs/B,EAAIuR,EAAGvR,EAAGC,EAAGx/B,EAAGC,EAAGwwC,EAAa,EAAGrB,EAAE,KACxB5P,EAAGx/B,EAAG8vC,EAAY,EAAGV,EAAE,KACvB7P,EAAGC,EAAG2Q,EAAY,GAAIf,EAAE,KACxBnvC,EAAGs/B,EAAGiR,EAAa,GAAIpB,EAAE,KAItCpvC,EAAI6wC,EAAG7wC,EADPC,EAAI4wC,EAAG5wC,EADPs/B,EAAIsR,EAAGtR,EAAGC,EAAGx/B,EAAGC,EAAGgwC,EAAY,EAAGb,EAAE,KACvB5P,EAAGx/B,EAAGowC,EAAY,GAAIhB,EAAE,KACxB7P,EAAGC,EAAG+Q,EAAa,GAAInB,EAAE,KACzBnvC,EAAGs/B,EAAGmR,EAAa,GAAItB,EAAE,KAGtCpvC,EAAI6wC,EAAG7wC,EADPC,EAAI4wC,EAAG5wC,EADPs/B,EAAIsR,EAAGtR,EAAGC,EAAGx/B,EAAGC,EAAG4vC,EAAY,EAAGT,EAAE,KACvB5P,EAAGx/B,EAAGgwC,EAAY,GAAIZ,EAAE,KACxB7P,EAAGC,EAAG2Q,EAAY,GAAIf,EAAE,KACxBnvC,EAAGs/B,EAAG+Q,EAAa,GAAIlB,EAAE,KAGtCpvC,EAAI6wC,EAAG7wC,EADPC,EAAI4wC,EAAG5wC,EADPs/B,EAAIsR,EAAGtR,EAAGC,EAAGx/B,EAAGC,EAAGwwC,EAAa,EAAGrB,EAAE,KACxB5P,EAAGx/B,EAAG4vC,EAAY,GAAIR,EAAE,KACxB7P,EAAGC,EAAGuQ,EAAY,GAAIX,EAAE,KACxBnvC,EAAGs/B,EAAG2Q,EAAY,GAAId,EAAE,KAGrCpvC,EAAI6wC,EAAG7wC,EADPC,EAAI4wC,EAAG5wC,EADPs/B,EAAIsR,EAAGtR,EAAGC,EAAGx/B,EAAGC,EAAGowC,EAAY,EAAGjB,EAAE,KACvB5P,EAAGx/B,EAAGwwC,EAAa,GAAIpB,EAAE,KACzB7P,EAAGC,EAAGmR,EAAa,GAAIvB,EAAE,KACzBnvC,EAAGs/B,EAAGuQ,EAAY,GAAIV,EAAE,KAIrCpvC,EAAI4wC,EAAG5wC,EADPC,EAAI2wC,EAAG3wC,EADPs/B,EAAIqR,EAAGrR,EAAGC,EAAGx/B,EAAGC,EAAG2vC,EAAY,EAAGR,EAAE,KACvB5P,EAAGx/B,EAAGmwC,EAAY,GAAIf,EAAE,KACxB7P,EAAGC,EAAGkR,EAAa,GAAItB,EAAE,KACzBnvC,EAAGs/B,EAAG0Q,EAAY,GAAIb,EAAE,KAGrCpvC,EAAI4wC,EAAG5wC,EADPC,EAAI2wC,EAAG3wC,EADPs/B,EAAIqR,EAAGrR,EAAGC,EAAGx/B,EAAGC,EAAGuwC,EAAa,EAAGpB,EAAE,KACxB5P,EAAGx/B,EAAG+vC,EAAY,GAAIX,EAAE,KACxB7P,EAAGC,EAAG8Q,EAAa,GAAIlB,EAAE,KACzBnvC,EAAGs/B,EAAGsQ,EAAY,GAAIT,EAAE,KAGrCpvC,EAAI4wC,EAAG5wC,EADPC,EAAI2wC,EAAG3wC,EADPs/B,EAAIqR,EAAGrR,EAAGC,EAAGx/B,EAAGC,EAAGmwC,EAAY,EAAGhB,EAAE,KACvB5P,EAAGx/B,EAAG2wC,EAAa,GAAIvB,EAAE,KACzB7P,EAAGC,EAAG0Q,EAAY,GAAId,EAAE,KACxBnvC,EAAGs/B,EAAGkR,EAAa,GAAIrB,EAAE,KAGtCpvC,EAAI4wC,EAAG5wC,EADPC,EAAI2wC,EAAG3wC,EADPs/B,EAAIqR,EAAGrR,EAAGC,EAAGx/B,EAAGC,EAAG+vC,EAAY,EAAGZ,EAAE,KACvB5P,EAAGx/B,EAAGuwC,EAAa,GAAInB,EAAE,KACzB7P,EAAGC,EAAGsQ,EAAY,GAAIV,EAAE,KACxBnvC,EAAGs/B,EAAG8Q,EAAY,GAAIjB,EAAE,KAGrCO,EAAE,GAAMA,EAAE,GAAKpQ,EAAK,EACpBoQ,EAAE,GAAMA,EAAE,GAAKnQ,EAAK,EACpBmQ,EAAE,GAAMA,EAAE,GAAK3vC,EAAK,EACpB2vC,EAAE,GAAMA,EAAE,GAAK1vC,EAAK,GAGxBmuC,YAAa,WAET,IAAIj1B,EAAOvX,KAAKorC,MACZK,EAAYl0B,EAAKmyB,MAEjB0F,EAAgC,EAAnBpvC,KAAKqrC,YAClBgE,EAA4B,EAAhB93B,EAAKoyB,SAGrB8B,EAAU4D,IAAc,IAAM,KAAS,GAAKA,EAAY,GAExD,IAAIC,EAAcr8B,EAAKG,MAAMg8B,EAAa,YACtCG,EAAcH,EAClB3D,EAA4C,IAAnB,GAAZ4D,IAAoB,GAAM,IACY,UAA5CC,GAAe,EAAMA,IAAgB,IACO,YAA5CA,GAAe,GAAOA,IAAgB,GAE7C7D,EAA4C,IAAnB,GAAZ4D,IAAoB,GAAM,IACY,UAA5CE,GAAe,EAAMA,IAAgB,IACO,YAA5CA,GAAe,GAAOA,IAAgB,GAG7Ch4B,EAAKoyB,SAAoC,GAAxB8B,EAAUtoC,OAAS,GAGpCnD,KAAKurC,WAOL,IAJA,IAAIiE,EAAOxvC,KAAK2tC,MACZI,EAAIyB,EAAK9F,MAGJ3rC,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAExB,IAAI0xC,EAAM1B,EAAEhwC,GAEZgwC,EAAEhwC,GAAoC,UAA5B0xC,GAAO,EAAMA,IAAQ,IACI,YAA5BA,GAAO,GAAOA,IAAQ,GAIjC,OAAOD,GAGX1iB,MAAO,WACH,IAAIA,EAAQof,EAAOpf,MAAM5uB,KAAK8B,MAG9B,OAFA8sB,EAAM6gB,MAAQ3tC,KAAK2tC,MAAM7gB,QAElBA,KAIf,SAASqiB,EAAIxR,EAAGC,EAAGx/B,EAAGC,EAAGqxC,EAAG5vC,EAAGb,GAC3B,IAAIO,EAAIm+B,GAAMC,EAAIx/B,GAAOw/B,EAAIv/B,GAAMqxC,EAAIzwC,EACvC,OAASO,GAAKM,EAAMN,IAAO,GAAKM,GAAO89B,EAG3C,SAASsR,EAAIvR,EAAGC,EAAGx/B,EAAGC,EAAGqxC,EAAG5vC,EAAGb,GAC3B,IAAIO,EAAIm+B,GAAMC,EAAIv/B,EAAMD,GAAKC,GAAMqxC,EAAIzwC,EACvC,OAASO,GAAKM,EAAMN,IAAO,GAAKM,GAAO89B,EAG3C,SAASqR,EAAItR,EAAGC,EAAGx/B,EAAGC,EAAGqxC,EAAG5vC,EAAGb,GAC3B,IAAIO,EAAIm+B,GAAKC,EAAIx/B,EAAIC,GAAKqxC,EAAIzwC,EAC9B,OAASO,GAAKM,EAAMN,IAAO,GAAKM,GAAO89B,EAG3C,SAASoR,EAAIrR,EAAGC,EAAGx/B,EAAGC,EAAGqxC,EAAG5vC,EAAGb,GAC3B,IAAIO,EAAIm+B,GAAKv/B,GAAKw/B,GAAKv/B,IAAMqxC,EAAIzwC,EACjC,OAASO,GAAKM,EAAMN,IAAO,GAAKM,GAAO89B,EAiB3C0K,EAAEU,IAAMkD,EAAOO,cAAczD,GAgB7BV,EAAEqH,QAAUzD,EAAOS,kBAAkB3D,GAtPzC,CAuPE/1B,MAWMs1B,GADAD,EAAIa,GACMC,IACVZ,EAAOD,EAAMC,KACbC,EAAYF,EAAME,UAClBM,EAAST,EAAEuE,KACX7D,EAAMD,EAAOC,IAMbC,EAASF,EAAOE,OAAST,EAAKnU,OAAO,CAQrC8X,IAAK3D,EAAKnU,OAAO,CACbub,QAAS,EACTlD,OAAQ1D,EACR6G,WAAY,IAchBtS,KAAM,SAAU4O,GACZnsC,KAAKmsC,IAAMnsC,KAAKmsC,IAAI9X,OAAO8X,IAe/B2D,QAAS,SAAUC,EAAUC,GAgBzB,IAdA,IAAI7D,EAAMnsC,KAAKmsC,IAGXO,EAASP,EAAIO,OAAOrtC,SAGpB4wC,EAAaxH,EAAUppC,SAGvB6wC,EAAkBD,EAAWvG,MAC7BkG,EAAUzD,EAAIyD,QACdC,EAAa1D,EAAI0D,WAGdK,EAAgB/sC,OAASysC,GAAS,CACjCO,GACAzD,EAAOL,OAAO8D,GAElB,IAAIA,EAAQzD,EAAOL,OAAO0D,GAAUxD,SAASyD,GAC7CtD,EAAOvB,QAGP,IAAK,IAAIptC,EAAI,EAAGA,EAAI8xC,EAAY9xC,IAC5BoyC,EAAQzD,EAAOH,SAAS4D,GACxBzD,EAAOvB,QAGX8E,EAAW7sC,OAAO+sC,GAItB,OAFAF,EAAWtG,SAAqB,EAAViG,EAEfK,KAqBf3H,EAAEW,OAAS,SAAU8G,EAAUC,EAAM7D,GACjC,OAAOlD,EAAO5pC,OAAO8sC,GAAK2D,QAAQC,EAAUC,IAcpD7G,EAASC,IAAIgH,QAAW,WAEpB,IAAI9H,EAAIa,EACJZ,EAAQD,EAAEc,IACVZ,EAAOD,EAAMC,KACbC,EAAYF,EAAME,UAClBK,EAAyBP,EAAMO,uBAC/BJ,EAAQJ,EAAE+B,IAEVyC,GADOpE,EAAMG,KACJH,EAAMoE,QAEf7D,EADSX,EAAEuE,KACK5D,OAUhBmH,EAAS7H,EAAM6H,OAAStH,EAAuBzU,OAAO,CAMtD8X,IAAK3D,EAAKnU,SAgBVgc,gBAAiB,SAAU/wC,EAAK6sC,GAC5B,OAAOnsC,KAAKX,OAAOW,KAAKswC,gBAAiBhxC,EAAK6sC,IAiBlDoE,gBAAiB,SAAUjxC,EAAK6sC,GAC5B,OAAOnsC,KAAKX,OAAOW,KAAKwwC,gBAAiBlxC,EAAK6sC,IAclD5O,KAAM,SAAUkT,EAAWnxC,EAAK6sC,GAE5BnsC,KAAKmsC,IAAMnsC,KAAKmsC,IAAI9X,OAAO8X,GAG3BnsC,KAAK0wC,WAAaD,EAClBzwC,KAAK2wC,KAAOrxC,EAGZU,KAAKmrC,SAUTA,MAAO,WAEHrC,EAAuBqC,MAAMjtC,KAAK8B,MAGlCA,KAAKosC,YAeT5pC,QAAS,SAAUouC,GAKf,OAHA5wC,KAAKsrC,QAAQsF,GAGN5wC,KAAKurC,YAiBhBgB,SAAU,SAAUqE,GAShB,OAPIA,GACA5wC,KAAKsrC,QAAQsF,GAIQ5wC,KAAKwsC,eAKlCoD,QAAS,EAETiB,OAAQ,EAERP,gBAAiB,EAEjBE,gBAAiB,EAejB/D,cASW,SAAUqE,GACb,MAAO,CACHjP,QAAS,SAAUthB,EAASjhB,EAAK6sC,GAC7B,OAAO4E,EAAqBzxC,GAAKuiC,QAAQiP,EAAQvwB,EAASjhB,EAAK6sC,IAGnEjK,QAAS,SAAU8O,EAAY1xC,EAAK6sC,GAChC,OAAO4E,EAAqBzxC,GAAK4iC,QAAQ4O,EAAQE,EAAY1xC,EAAK6sC,QAf9E,SAAS4E,EAAsBzxC,GAC3B,MAAkB,iBAAPA,EACA2xC,EAEAC,EAuBJ3I,EAAM4I,aAAef,EAAO/b,OAAO,CAClDmY,YAAa,WAIT,OAF2BxsC,KAAKurC,UAAS,IAK7CI,UAAW,IARf,IA2EQyF,EA7DJC,EAAS/I,EAAEppC,KAAO,GAKlBoyC,EAAkB/I,EAAM+I,gBAAkB9I,EAAKnU,OAAO,CAatDgc,gBAAiB,SAAUS,EAAQS,GAC/B,OAAOvxC,KAAKwxC,UAAUnyC,OAAOyxC,EAAQS,IAezChB,gBAAiB,SAAUO,EAAQS,GAC/B,OAAOvxC,KAAKyxC,UAAUpyC,OAAOyxC,EAAQS,IAazChU,KAAM,SAAUuT,EAAQS,GACpBvxC,KAAK0xC,QAAUZ,EACf9wC,KAAK2xC,IAAMJ,KAOfH,EAAMC,EAAOD,MAITA,EAAME,EAAgBjd,UAKtBmd,UAAYJ,EAAI/c,OAAO,CAWvBud,aAAc,SAAUlI,EAAOv7B,GAE3B,IAAI2iC,EAAS9wC,KAAK0xC,QACd/F,EAAYmF,EAAOnF,UAGvBkG,EAAS3zC,KAAK8B,KAAM0pC,EAAOv7B,EAAQw9B,GACnCmF,EAAOgB,aAAapI,EAAOv7B,GAG3BnO,KAAK+xC,WAAarI,EAAM/jB,MAAMxX,EAAQA,EAASw9B,MAOvDyF,EAAIK,UAAYL,EAAI/c,OAAO,CAWvBud,aAAc,SAAUlI,EAAOv7B,GAE3B,IAAI2iC,EAAS9wC,KAAK0xC,QACd/F,EAAYmF,EAAOnF,UAGnBqG,EAAYtI,EAAM/jB,MAAMxX,EAAQA,EAASw9B,GAG7CmF,EAAOmB,aAAavI,EAAOv7B,GAC3B0jC,EAAS3zC,KAAK8B,KAAM0pC,EAAOv7B,EAAQw9B,GAGnC3rC,KAAK+xC,WAAaC,KAwBnBZ,GApBP,SAASS,EAAUnI,EAAOv7B,EAAQw9B,GAE9B,IAAI4F,EAAKvxC,KAAK2xC,IAGd,GAAIJ,EAAI,CACJ,IAAIpB,EAAQoB,EAGZvxC,KAAK2xC,SAvVE,OAyVHxB,EAAQnwC,KAAK+xC,WAIrB,IAAK,IAAIh0C,EAAI,EAAGA,EAAI4tC,EAAW5tC,IAC3B2rC,EAAMv7B,EAASpQ,IAAMoyC,EAAMpyC,GAUvC,IAKIm0C,GALQ5J,EAAE6J,IAAM,IAKFD,MAAQ,CAatBC,IAAK,SAAU56B,EAAMo0B,GAYjB,IAVA,IAAIyG,EAA6B,EAAZzG,EAGjB0G,EAAgBD,EAAiB76B,EAAKoyB,SAAWyI,EAGjDE,EAAeD,GAAiB,GAAOA,GAAiB,GAAOA,GAAiB,EAAKA,EAGrFE,EAAe,GACVx0C,EAAI,EAAGA,EAAIs0C,EAAet0C,GAAK,EACpCw0C,EAAavuC,KAAKsuC,GAEtB,IAAIE,EAAU/J,EAAUppC,OAAOkzC,EAAcF,GAG7C96B,EAAKnU,OAAOovC,IAchBC,MAAO,SAAUl7B,GAEb,IAAI86B,EAAwD,IAAxC96B,EAAKmyB,MAAOnyB,EAAKoyB,SAAW,IAAO,GAGvDpyB,EAAKoyB,UAAY0I,IAoFrBK,GA3EcnK,EAAMoK,YAAcvC,EAAO/b,OAAO,CAOhD8X,IAAKiE,EAAOjE,IAAI9X,OAAO,CACnBn1B,KAAMkyC,EACNoB,QAASN,IAGb/G,MAAO,WAEHiF,EAAOjF,MAAMjtC,KAAK8B,MAGlB,IAAImsC,EAAMnsC,KAAKmsC,IACXoF,EAAKpF,EAAIoF,GACTryC,EAAOitC,EAAIjtC,KAGf,GAAIc,KAAK0wC,YAAc1wC,KAAKswC,gBACxB,IAAIsC,EAAc1zC,EAAKmxC,oBAC+B,CAClDuC,EAAc1zC,EAAKqxC,gBAGvBvwC,KAAK8rC,eAAiB,EAE1B9rC,KAAK6yC,MAAQD,EAAY10C,KAAKgB,EAAMc,KAAMuxC,GAAMA,EAAG7H,QAGvDsC,gBAAiB,SAAUtC,EAAOv7B,GAC9BnO,KAAK6yC,MAAMjB,aAAalI,EAAOv7B,IAGnCq+B,YAAa,WAET,IAAIgG,EAAUxyC,KAAKmsC,IAAIqG,QAGvB,GAAIxyC,KAAK0wC,YAAc1wC,KAAKswC,gBAAiB,CAEzCkC,EAAQL,IAAInyC,KAAKorC,MAAOprC,KAAK2rC,WAG7B,IAAImH,EAAuB9yC,KAAKurC,UAAS,OACa,CAElDuH,EAAuB9yC,KAAKurC,UAAS,GAGzCiH,EAAQC,MAAMK,GAGlB,OAAOA,GAGXnH,UAAW,IAgBIpD,EAAMmK,aAAelK,EAAKnU,OAAO,CAoBhDkJ,KAAM,SAAUwV,GACZ/yC,KAAKspC,MAAMyJ,IAkBfzhC,SAAU,SAAU0hC,GAChB,OAAQA,GAAahzC,KAAKgzC,WAAWnJ,UAAU7pC,UAYnDizC,GALW3K,EAAE/F,OAAS,IAKM2Q,QAAU,CActCrJ,UAAW,SAAUkJ,GAEjB,IAAI/B,EAAa+B,EAAa/B,WAC1BhB,EAAO+C,EAAa/C,KAGxB,GAAIA,EACA,IAAIlG,EAAYrB,EAAUppC,OAAO,CAAC,WAAY,aAAa+D,OAAO4sC,GAAM5sC,OAAO4tC,QAE3ElH,EAAYkH,EAGpB,OAAOlH,EAAUx4B,SAASw7B,IAgB9BtC,MAAO,SAAU2I,GAEb,IAAInC,EAAalE,EAAOtC,MAAM2I,GAG1BC,EAAkBpC,EAAWtH,MAGjC,GAA0B,YAAtB0J,EAAgB,IAA0C,YAAtBA,EAAgB,GAAkB,CAEtE,IAAIpD,EAAOvH,EAAUppC,OAAO+zC,EAAgBztB,MAAM,EAAG,IAGrDytB,EAAgB3gC,OAAO,EAAG,GAC1Bu+B,EAAWrH,UAAY,GAG3B,OAAO+I,EAAarzC,OAAO,CAAC2xC,WAAYA,EAAYhB,KAAMA,MAO9DkB,EAAqB3I,EAAM2I,mBAAqB1I,EAAKnU,OAAO,CAM5D8X,IAAK3D,EAAKnU,OAAO,CACbkO,OAAQ0Q,IAqBZpR,QAAS,SAAUiP,EAAQvwB,EAASjhB,EAAK6sC,GAErCA,EAAMnsC,KAAKmsC,IAAI9X,OAAO8X,GAGtB,IAAIkH,EAAYvC,EAAOT,gBAAgB/wC,EAAK6sC,GACxC6E,EAAaqC,EAAU9G,SAAShsB,GAGhC+yB,EAAYD,EAAUlH,IAG1B,OAAOuG,EAAarzC,OAAO,CACvB2xC,WAAYA,EACZ1xC,IAAKA,EACLiyC,GAAI+B,EAAU/B,GACdgC,UAAWzC,EACX5xC,KAAMo0C,EAAUp0C,KAChBszC,QAASc,EAAUd,QACnB7G,UAAWmF,EAAOnF,UAClBqH,UAAW7G,EAAI5J,UAqBvBL,QAAS,SAAU4O,EAAQE,EAAY1xC,EAAK6sC,GAUxC,OARAA,EAAMnsC,KAAKmsC,IAAI9X,OAAO8X,GAGtB6E,EAAahxC,KAAKwzC,OAAOxC,EAAY7E,EAAI5J,QAGzBuO,EAAOP,gBAAgBjxC,EAAK6sC,GAAKI,SAASyE,EAAWA,aAoBzEwC,OAAQ,SAAUxC,EAAYzO,GAC1B,MAAyB,iBAAdyO,EACAzO,EAAOiI,MAAMwG,EAAYhxC,MAEzBgxC,KAafyC,GALQnL,EAAEoL,IAAM,IAKGR,QAAU,CAkB7BS,QAAS,SAAU5D,EAAUH,EAASiB,EAAQb,GAGtCA,EADCA,GACMvH,EAAUr0B,OAAO,GAI5B,IAAI9U,EAAM2pC,EAAO5pC,OAAO,CAACuwC,QAASA,EAAUiB,IAASf,QAAQC,EAAUC,GAGnEuB,EAAK9I,EAAUppC,OAAOC,EAAIoqC,MAAM/jB,MAAMiqB,GAAmB,EAATiB,GAIpD,OAHAvxC,EAAIqqC,SAAqB,EAAViG,EAGR8C,EAAarzC,OAAO,CAACC,IAAKA,EAAKiyC,GAAIA,EAAIvB,KAAMA,MAQxDiB,EAAsB1I,EAAM0I,oBAAsBC,EAAmB7c,OAAO,CAM5E8X,IAAK+E,EAAmB/E,IAAI9X,OAAO,CAC/Bqf,IAAKD,IAoBT5R,QAAS,SAAUiP,EAAQvwB,EAASwvB,EAAU5D,GAK1C,IAAIyH,GAHJzH,EAAMnsC,KAAKmsC,IAAI9X,OAAO8X,IAGEuH,IAAIC,QAAQ5D,EAAUe,EAAOlB,QAASkB,EAAOD,QAGrE1E,EAAIoF,GAAKqC,EAAcrC,GAGvB,IAAIP,EAAaE,EAAmBrP,QAAQ3jC,KAAK8B,KAAM8wC,EAAQvwB,EAASqzB,EAAct0C,IAAK6sC,GAK3F,OAFA6E,EAAW1H,MAAMsK,GAEV5C,GAoBX9O,QAAS,SAAU4O,EAAQE,EAAYjB,EAAU5D,GAE7CA,EAAMnsC,KAAKmsC,IAAI9X,OAAO8X,GAGtB6E,EAAahxC,KAAKwzC,OAAOxC,EAAY7E,EAAI5J,QAGzC,IAAIqR,EAAgBzH,EAAIuH,IAAIC,QAAQ5D,EAAUe,EAAOlB,QAASkB,EAAOD,OAAQG,EAAWhB,MAQxF,OALA7D,EAAIoF,GAAKqC,EAAcrC,GAGPL,EAAmBhP,QAAQhkC,KAAK8B,KAAM8wC,EAAQE,EAAY4C,EAAct0C,IAAK6sC,MAh1BlF,GAg2BvBhD,EAASjqC,KAAKgqC,MACNA,EAAMC,EAASC,IAAIkI,gBAAgBjd,UAEnCmd,UAAYtI,EAAI7U,OAAO,CACvBud,aAAc,SAAUlI,EAAOv7B,GAC3BnO,KAAK0xC,QAAQI,aAAapI,EAAOv7B,MAIzC+6B,EAAIuI,UAAYvI,EAAI7U,OAAO,CACvBud,aAAc,SAAUlI,EAAOv7B,GAC3BnO,KAAK0xC,QAAQO,aAAavI,EAAOv7B,MAIlC+6B,GAUV,WAEG,IAAIZ,EAAIa,EAEJwJ,EADQrK,EAAEc,IACUuJ,YACpB5J,EAAST,EAAEuE,KAGXgH,EAAO,GACPC,EAAW,GACXC,EAAY,GACZC,EAAY,GACZC,EAAY,GACZC,EAAY,GACZC,EAAgB,GAChBC,EAAgB,GAChBC,EAAgB,GAChBC,EAAgB,IAGnB,WAGG,IADA,IAAIj2C,EAAI,GACCN,EAAI,EAAGA,EAAI,IAAKA,IAEjBM,EAAEN,GADFA,EAAI,IACGA,GAAK,EAEJA,GAAK,EAAK,IAK1B,IAAI2xC,EAAI,EACJ6E,EAAK,EACT,IAASx2C,EAAI,EAAGA,EAAI,IAAKA,IAAK,CAE1B,IAAIy2C,EAAKD,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EAAMA,GAAM,EACzDC,EAAMA,IAAO,EAAW,IAALA,EAAa,GAChCX,EAAKnE,GAAK8E,EAIV,IAAIC,EAAKp2C,EAHTy1C,EAASU,GAAM9E,GAIXgF,EAAKr2C,EAAEo2C,GACPE,EAAKt2C,EAAEq2C,GAGPz1C,EAAa,IAARZ,EAAEm2C,GAAqB,SAALA,EAC3BT,EAAUrE,GAAMzwC,GAAK,GAAOA,IAAM,EAClC+0C,EAAUtE,GAAMzwC,GAAK,GAAOA,IAAM,GAClCg1C,EAAUvE,GAAMzwC,GAAK,EAAMA,IAAM,GACjCi1C,EAAUxE,GAAKzwC,EAGXA,EAAU,SAAL01C,EAAwB,MAALD,EAAsB,IAALD,EAAmB,SAAJ/E,EAC5DyE,EAAcK,GAAOv1C,GAAK,GAAOA,IAAM,EACvCm1C,EAAcI,GAAOv1C,GAAK,GAAOA,IAAM,GACvCo1C,EAAcG,GAAOv1C,GAAK,EAAMA,IAAM,GACtCq1C,EAAcE,GAAMv1C,EAGfywC,GAGDA,EAAI+E,EAAKp2C,EAAEA,EAAEA,EAAEs2C,EAAKF,KACpBF,GAAMl2C,EAAEA,EAAEk2C,KAHV7E,EAAI6E,EAAK,GA1CrB,GAmDA,IAAIK,EAAO,CAAC,EAAM,EAAM,EAAM,EAAM,EAAM,GAAM,GAAM,GAAM,IAAM,GAAM,IAKpE5S,EAAM+G,EAAO/G,IAAM2Q,EAAYte,OAAO,CACtC+X,SAAU,WAcN,IAZA,IAAI9sC,EAAMU,KAAK2wC,KACXkE,EAAWv1C,EAAIoqC,MACfkG,EAAUtwC,EAAIqqC,SAAW,EAMzBmL,EAAyB,GAAL,GAHV90C,KAAK+0C,SAAqB,EAAVnF,IAM1BoF,EAAch1C,KAAKi1C,aAAe,GAC7BC,EAAQ,EAAGA,EAAQJ,EAAQI,IAChC,GAAIA,EAAQtF,EACRoF,EAAYE,GAASL,EAASK,OAC3B,CACH,IAAIj2C,EAAI+1C,EAAYE,EAAQ,GAEtBA,EAAQtF,EASO,EAAVA,GAAesF,EAAQtF,GAAW,IAEzC3wC,EAAK40C,EAAK50C,IAAM,KAAO,GAAO40C,EAAM50C,IAAM,GAAM,MAAS,GAAO40C,EAAM50C,IAAM,EAAK,MAAS,EAAK40C,EAAS,IAAJ50C,KANpGA,EAAK40C,GAHL50C,EAAKA,GAAK,EAAMA,IAAM,MAGN,KAAO,GAAO40C,EAAM50C,IAAM,GAAM,MAAS,GAAO40C,EAAM50C,IAAM,EAAK,MAAS,EAAK40C,EAAS,IAAJ50C,GAGpGA,GAAK21C,EAAMM,EAAQtF,EAAW,IAAM,IAMxCoF,EAAYE,GAASF,EAAYE,EAAQtF,GAAW3wC,EAM5D,IADA,IAAIk2C,EAAiBn1C,KAAKo1C,gBAAkB,GACnCC,EAAW,EAAGA,EAAWP,EAAQO,IAAY,CAC9CH,EAAQJ,EAASO,EAErB,GAAIA,EAAW,EACPp2C,EAAI+1C,EAAYE,QAEhBj2C,EAAI+1C,EAAYE,EAAQ,GAI5BC,EAAeE,GADfA,EAAW,GAAKH,GAAS,EACEj2C,EAEAk1C,EAAcN,EAAK50C,IAAM,KAAOm1C,EAAcP,EAAM50C,IAAM,GAAM,MACvFo1C,EAAcR,EAAM50C,IAAM,EAAK,MAASq1C,EAAcT,EAAS,IAAJ50C,MAK3E6yC,aAAc,SAAUlE,EAAGz/B,GACvBnO,KAAKs1C,cAAc1H,EAAGz/B,EAAQnO,KAAKi1C,aAAclB,EAAWC,EAAWC,EAAWC,EAAWL,IAGjG5B,aAAc,SAAUrE,EAAGz/B,GAEvB,IAAIlP,EAAI2uC,EAAEz/B,EAAS,GACnBy/B,EAAEz/B,EAAS,GAAKy/B,EAAEz/B,EAAS,GAC3By/B,EAAEz/B,EAAS,GAAKlP,EAEhBe,KAAKs1C,cAAc1H,EAAGz/B,EAAQnO,KAAKo1C,gBAAiBjB,EAAeC,EAAeC,EAAeC,EAAeR,GAG5G70C,EAAI2uC,EAAEz/B,EAAS,GACnBy/B,EAAEz/B,EAAS,GAAKy/B,EAAEz/B,EAAS,GAC3By/B,EAAEz/B,EAAS,GAAKlP,GAGpBq2C,cAAe,SAAU1H,EAAGz/B,EAAQ6mC,EAAajB,EAAWC,EAAWC,EAAWC,EAAWL,GAczF,IAZA,IAAI0B,EAAUv1C,KAAK+0C,SAGfS,EAAK5H,EAAEz/B,GAAU6mC,EAAY,GAC7BS,EAAK7H,EAAEz/B,EAAS,GAAK6mC,EAAY,GACjCU,EAAK9H,EAAEz/B,EAAS,GAAK6mC,EAAY,GACjCW,EAAK/H,EAAEz/B,EAAS,GAAK6mC,EAAY,GAGjCE,EAAQ,EAGHU,EAAQ,EAAGA,EAAQL,EAASK,IAAS,CAE1C,IAAIC,EAAK9B,EAAUyB,IAAO,IAAMxB,EAAWyB,IAAO,GAAM,KAAQxB,EAAWyB,IAAO,EAAK,KAAQxB,EAAe,IAALyB,GAAaX,EAAYE,KAC9HY,EAAK/B,EAAU0B,IAAO,IAAMzB,EAAW0B,IAAO,GAAM,KAAQzB,EAAW0B,IAAO,EAAK,KAAQzB,EAAe,IAALsB,GAAaR,EAAYE,KAC9Ha,EAAKhC,EAAU2B,IAAO,IAAM1B,EAAW2B,IAAO,GAAM,KAAQ1B,EAAWuB,IAAO,EAAK,KAAQtB,EAAe,IAALuB,GAAaT,EAAYE,KAC9Hc,EAAKjC,EAAU4B,IAAO,IAAM3B,EAAWwB,IAAO,GAAM,KAAQvB,EAAWwB,IAAO,EAAK,KAAQvB,EAAe,IAALwB,GAAaV,EAAYE,KAGlIM,EAAKK,EACLJ,EAAKK,EACLJ,EAAKK,EACLJ,EAAKK,EAILH,GAAOhC,EAAK2B,IAAO,KAAO,GAAO3B,EAAM4B,IAAO,GAAM,MAAS,GAAO5B,EAAM6B,IAAO,EAAK,MAAS,EAAK7B,EAAU,IAAL8B,IAAcX,EAAYE,KACnIY,GAAOjC,EAAK4B,IAAO,KAAO,GAAO5B,EAAM6B,IAAO,GAAM,MAAS,GAAO7B,EAAM8B,IAAO,EAAK,MAAS,EAAK9B,EAAU,IAAL2B,IAAcR,EAAYE,KACnIa,GAAOlC,EAAK6B,IAAO,KAAO,GAAO7B,EAAM8B,IAAO,GAAM,MAAS,GAAO9B,EAAM2B,IAAO,EAAK,MAAS,EAAK3B,EAAU,IAAL4B,IAAcT,EAAYE,KACnIc,GAAOnC,EAAK8B,IAAO,KAAO,GAAO9B,EAAM2B,IAAO,GAAM,MAAS,GAAO3B,EAAM4B,IAAO,EAAK,MAAS,EAAK5B,EAAU,IAAL6B,IAAcV,EAAYE,KAGvItH,EAAEz/B,GAAU0nC,EACZjI,EAAEz/B,EAAS,GAAK2nC,EAChBlI,EAAEz/B,EAAS,GAAK4nC,EAChBnI,EAAEz/B,EAAS,GAAK6nC,GAGpBpG,QAAS,IAWbtH,EAAEtG,IAAM2Q,EAAYlG,cAAczK,GA7MtC,GAiNAjwB,EAAEsiB,OAAO7uB,GAAI,CASTy8B,WAAY,SAAUH,EAAMxiC,GAQxB,OAPAA,EAAM6pC,EAASkB,IAAIxB,KAAK2B,MAAMlrC,GACjB6pC,EAASnH,IAAIH,QAAQC,EAAMxiC,EAAK,CACzCJ,KAAMiqC,EAASjqC,KAAKgqC,IACpBsJ,QAASrJ,EAASgJ,IAAID,QAGAlB,WAAW1/B,SAAS63B,EAASkB,IAAIyC,SAS/D3K,WAAY,SAAUL,EAAMxiC,GACxBA,EAAM6pC,EAASkB,IAAIxB,KAAK2B,MAAMlrC,GAC9B,IAAI22C,EAAW9M,EAASnH,IAAIE,QAAQJ,EAAMxiC,EAAK,CAC3CJ,KAAMiqC,EAASjqC,KAAKgqC,IACpBsJ,QAASrJ,EAASgJ,IAAID,QAG1B,OAAO/I,EAASkB,IAAIxB,KAAKgB,UAAUoM,MAtyE9C,I,cCCG,SAASC,EAAQhrB,GACb,OAAO,SAAU+Q,EAAQxJ,EAAY0jB,GACjC,IACIC,EADAC,EAAQpa,EAAOxJ,GAGd4jB,GAASA,EAAMpa,QAAUA,KAC1Bma,EAAana,EAAOxJ,GAAc,WAI9B,IAFA,IACsBrB,EADlBklB,EAAYF,EAAW1nB,OACvB5qB,EAAOhD,UACF9C,EAAIs4C,EAAUnzC,OAAQnF,KAAM,CAEjC,IAAa,KADbozB,EAAOklB,EAAUt4C,GAAGm4C,OAAO51C,MAAMP,KAAM8D,IAEnC,OAAO,EAEXA,EAAOstB,GAAQttB,EAMnB,IAHA,IAAIyyC,EAAKH,EAAWI,OAAOj2C,MAAMP,KAAM8D,GAEnC2yC,EAAWL,EAAWtjB,MACjB/0B,EAAI,EAAG24C,EAAKD,EAAStzC,OAAQpF,EAAI24C,EAAI34C,IAAK,CAE/C,GADAqzB,EAAOqlB,EAAS14C,GAAGo4C,OAAOj4C,KAAK8B,KAAMu2C,EAAIzyC,IAC9B,IAAPyyC,EACA,OAAO,EAEXzyC,EAAOstB,GAAQttB,EAEnB,OAAOyyC,IAGA7nB,OAAS,GACpB0nB,EAAWtjB,MAAQ,GAEfujB,IACAD,EAAWI,OAASH,GAExBD,EAAWna,OAASA,GAGxB,IAAI0a,GAAaP,GAAcC,GAAOnrB,GAClCyN,EAAM,CACNwd,OAAQA,EACRS,OAAQD,EAAUxzC,OAClB64B,OAAQ,WACJ2a,EAAUlkC,OAAOzS,KAAK42C,OAAQ,KAKtC,OAFAD,EAAU3yC,KAAK20B,GAERA,GAIfnzB,GAAG0wC,OAAS,CACRxnB,OAAQwnB,EAAO,UACfpjB,MAAOojB,EAAO,UAGX1wC,GAAG0wC,Q,cC3Db,IAEOW,IAAU,oEAwDd9kC,EAAEsiB,OAAO7uB,GAAI,CAETsxC,OAAQ,SAAUz9B,GACd,IACI09B,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,EADpCC,EAAS,GAETv5C,EAAI,EAIR,IAFAsb,EA3DW,SAAU3J,GACzBA,EAASA,EAAOuC,QAAQ,QAAS,MAGjC,IAFA,IAAIslC,EAAU,GAEL/3C,EAAI,EAAGA,EAAIkQ,EAAOvM,OAAQ3D,IAAK,CAEpC,IAAIpB,EAAIsR,EAAOgd,WAAWltB,GAEtBpB,EAAI,IACJm5C,GAAWv/B,OAAO4yB,aAAaxsC,IACnB,IAAJA,GAAaA,EAAI,KACzBm5C,GAAWv/B,OAAO4yB,aAAcxsC,GAAK,EAAK,MAG1Cm5C,GAAWv/B,OAAO4yB,aAAcxsC,GAAK,GAAM,KAC3Cm5C,GAAWv/B,OAAO4yB,aAAexsC,GAAK,EAAK,GAAM,MAHjDm5C,GAAWv/B,OAAO4yB,aAAkB,GAAJxsC,EAAU,MASlD,OAAOm5C,EAsCKC,CAAan+B,GAEdtb,EAAIsb,EAAMlW,QAMb+zC,GAJAH,EAAO19B,EAAMqT,WAAW3uB,OAIT,EACfo5C,GAAgB,EAAPJ,IAAa,GAJtBC,EAAO39B,EAAMqT,WAAW3uB,OAIY,EACpCq5C,GAAgB,GAAPJ,IAAc,GAJvBC,EAAO59B,EAAMqT,WAAW3uB,OAIa,EACrCs5C,EAAc,GAAPJ,EAEH7hB,MAAM4hB,GACNI,EAAOC,EAAO,GACPjiB,MAAM6hB,KACbI,EAAO,IAGXC,EAASA,EAAST,EAAQra,OAAO0a,GAAQL,EAAQra,OAAO2a,GAAQN,EAAQra,OAAO4a,GAAQP,EAAQra,OAAO6a,GAI1G,OAAOC,GAIXG,OAAQ,SAAUp+B,GACd,IACI09B,EAAMC,EAAMC,EACNE,EAAMC,EAAMC,EAFlBC,EAAS,GAGTv5C,EAAI,EAIR,IAFAsb,EAAQA,EAAMpH,QAAQ,sBAAuB,IAEtClU,EAAIsb,EAAMlW,QAOb4zC,EALOF,EAAQ7hB,QAAQ3b,EAAMmjB,OAAOz+B,OAKpB,GAJhBo5C,EAAON,EAAQ7hB,QAAQ3b,EAAMmjB,OAAOz+B,QAIN,EAC9Bi5C,GAAgB,GAAPG,IAAc,GAJvBC,EAAOP,EAAQ7hB,QAAQ3b,EAAMmjB,OAAOz+B,QAIC,EACrCk5C,GAAgB,EAAPG,IAAa,GAJtBC,EAAOR,EAAQ7hB,QAAQ3b,EAAMmjB,OAAOz+B,OAMpCu5C,GAAkBt/B,OAAO4yB,aAAamM,GAE1B,IAARK,IACAE,GAAkBt/B,OAAO4yB,aAAaoM,IAE9B,IAARK,IACAC,GAAkBt/B,OAAO4yB,aAAaqM,IAO9C,OAFAK,EA3FW,SAAUC,GAKzB,IAJA,IAAI7nC,EAAS,GACT3R,EAAI,EACJK,EAAI,EAAGs5C,EAAK,EAAGC,EAAK,EAEjB55C,EAAIw5C,EAAQp0C,SAEf/E,EAAIm5C,EAAQ7qB,WAAW3uB,IAEf,KACJ2R,GAAUsI,OAAO4yB,aAAaxsC,GAC9BL,KACY,IAAJK,GAAaA,EAAI,KACzBu5C,EAAKJ,EAAQ7qB,WAAW3uB,EAAI,GAC5B2R,GAAUsI,OAAO4yB,cAAmB,GAAJxsC,IAAW,EAAW,GAALu5C,GACjD55C,GAAK,IAEL45C,EAAKJ,EAAQ7qB,WAAW3uB,EAAI,GAC5B25C,EAAKH,EAAQ7qB,WAAW3uB,EAAI,GAC5B2R,GAAUsI,OAAO4yB,cAAmB,GAAJxsC,IAAW,IAAa,GAALu5C,IAAY,EAAW,GAALD,GACrE35C,GAAK,GAIb,OAAO2R,EAmEMkoC,CAAaN,O,cC1HlC9xC,GAAGgrB,MAAQ,CACPqnB,QAAS,KACTC,YAAa,SAAUC,GACnBC,aAAaC,QAAQzyC,GAAGgrB,MAAMqnB,QAAU,aAAcE,EAAW,IAAM,IAAIxb,gBAE/E2b,YAAa,WACT,OAAOF,aAAaG,QAAQ3yC,GAAGgrB,MAAMqnB,QAAU,cAAgB,IAEnEO,cAAe,WACX,OAAO5yC,GAAGgrB,MAAM0nB,cAAgB,IAAM1yC,GAAGgrB,MAAMqnB,QAAU,KAE7DQ,aAAc,SAAU/4C,GACpB,OAAOkG,GAAGgrB,MAAM4nB,iBAAmB94C,GAAO,KAE9C64C,QAAS,SAAU74C,GACf,OAAO04C,aAAaG,QAAQ3yC,GAAGgrB,MAAM6nB,aAAa/4C,KAEtD24C,QAAS,SAAU34C,EAAKN,GACpBg5C,aAAaC,QAAQzyC,GAAGgrB,MAAM6nB,aAAa/4C,GAAMN,IAErDs5C,WAAY,SAAUh5C,GAClB04C,aAAaM,WAAW9yC,GAAGgrB,MAAM6nB,aAAa/4C,KAElDyX,MAAO,WACH,IAAK,IAAIhZ,EAAIi6C,aAAa70C,OAAa,GAALpF,EAAQA,IAAK,CAC3C,IAAIuB,EAAM04C,aAAa14C,IAAIvB,GACvBuB,GAC8C,IAA1CA,EAAI01B,QAAQxvB,GAAGgrB,MAAM4nB,kBACrBJ,aAAaM,WAAWh5C,KAKxCoS,KAAM,WAEF,IADA,IAAI/D,EAAS,GACJ5P,EAAIi6C,aAAa70C,OAAa,GAALpF,EAAQA,IAAK,CAC3C,IAAIuB,EAAM04C,aAAa14C,IAAIvB,GAC3B,GAAIuB,EAAK,CACL,IAAIg3B,EAAS9wB,GAAGgrB,MAAM4nB,gBACM,IAAxB94C,EAAI01B,QAAQsB,KACZ3oB,EAAOA,EAAOxK,QAAU7D,EAAImkC,UAAUnN,EAAOnzB,UAIzD,OAAOwK,GAGX4qC,UAAW,SAAUj6C,EAAMU,EAAO2f,EAAM65B,GACpC,IAAIC,EAAen6C,EAAO,IAAMq2B,OAAO31B,GAEvC,GAAIw5C,GAA+B,EAAfA,EAAkB,CAClC,IAAIE,EAAO,IAAIzkC,KAEfykC,EAAKC,QAAQD,EAAKvY,UAA2B,KAAfqY,EAAsB,KACpDC,EAAeA,EAAe,aAAeC,EAAKE,cAElDj6B,IACA85B,EAAeA,EAAe,UAAY95B,GAE9CihB,SAASiZ,OAASJ,GAEtBK,UAAW,SAAUx6C,GACjB,IAAI4/B,EAAK6a,EAAM,IAAI3vC,OAAO,QAAU9K,EAAO,iBAC3C,OAAI4/B,EAAM0B,SAASiZ,OAAOhoC,MAAMkoC,IAAc9N,SAAS/M,EAAI,IACpD,MAEX8a,aAAc,SAAU16C,EAAMqgB,GAC1B,IAAI+5B,EAAO,IAAIzkC,KACfykC,EAAKC,QAAQD,EAAKvY,UAAY,KAC9B,IAAIsY,EAAen6C,EAAO,eAAiBo6C,EAAKE,cAC5Cj6B,IACA85B,EAAeA,EAAe,UAAY95B,GAE9CihB,SAASiZ,OAASJ,K,cC1E1BjzC,GAAGyzC,2BAA6B,SAAUC,EAAWC,EAAgBC,GACjEp5C,KAAKq5C,gBAAkBF,EACvBn5C,KAAKs5C,WAAaJ,EAClBl5C,KAAKu5C,mBAAqBH,EAC1Bp5C,KAAKw5C,yBAA2B,GAChCx5C,KAAKy5C,oBAAsB,GAG/Bj0C,GAAGyzC,2BAA2Bt5C,UAAY,CACtCyZ,YAAa5T,GAAGyzC,2BAChBS,UAAW,SAAUR,EAAWE,GAC5Bp5C,KAAKs5C,WAAaJ,EAClBl5C,KAAKu5C,mBAAqBH,GAG9BO,aAAc,WACV,OAAO35C,KAAKs5C,YAGhBM,qBAAsB,WAClB,OAAO55C,KAAKu5C,oBAGhBM,qBAAsB,WAClB,OAAO75C,KAAKy5C,oBAGhBK,yBAA0B,SAAUzsC,GAChC,KAAIA,EAAQ,GAAKA,GAASrN,KAAKs5C,YAA/B,CAGA,GAAIjsC,EAAQrN,KAAKy5C,mBAAoB,CAIjC,IAHA,IAAIM,EAAkC/5C,KAAKg6C,uCACvC7rC,EAAS4rC,EAAgC5rC,OAAS4rC,EAAgCjqC,KAE7E/R,EAAIiC,KAAKy5C,mBAAqB,EAAG17C,GAAKsP,EAAOtP,IAAK,CACvD,IAAI+R,EAAO9P,KAAKq5C,gBAAgBt7C,GAEpB,MAAR+R,GAAgBslB,MAAMtlB,KAI1B9P,KAAKw5C,yBAAyBz7C,GAAK,CAC/BoQ,OAAQA,EACR2B,KAAMA,GAGV3B,GAAU2B,GAGd9P,KAAKy5C,mBAAqBpsC,EAE9B,OAAOrN,KAAKw5C,yBAAyBnsC,KAGzC2sC,qCAAsC,WAClC,OAAkC,GAA3Bh6C,KAAKy5C,mBACNz5C,KAAKw5C,yBAAyBx5C,KAAKy5C,oBACnC,CACEtrC,OAAQ,EACR2B,KAAM,IAIlBmqC,aAAc,WACV,IAAIF,EAAkC/5C,KAAKg6C,uCAC3C,OAAOD,EAAgC5rC,OAAS4rC,EAAgCjqC,MAAQ9P,KAAKs5C,WAAat5C,KAAKy5C,mBAAqB,GAAKz5C,KAAKu5C,oBAGlJW,yBAA0B,SAAUC,EAAOC,EAAeC,EAAeC,GACrE,IAIIC,EAJAC,EAAQx6C,KAAK85C,yBAAyBQ,GACtCG,EAAYD,EAAMrsC,OAClBusC,EAAYD,EAAYL,EAAgBI,EAAM1qC,KAIlD,OAAQqqC,GACJ,IAAK,QACDI,EAAcE,EACd,MACJ,IAAK,MACDF,EAAcG,EACd,MACJ,IAAK,SACDH,EAAcE,GAAcL,EAAgBI,EAAM1qC,MAAQ,EAC1D,MACJ,QACIyqC,EAActnC,KAAKY,IAAI6mC,EAAWznC,KAAKc,IAAI0mC,EAAWJ,IAI9D,IAAIM,EAAY36C,KAAKi6C,eAErB,OAAOhnC,KAAKY,IAAI,EAAGZ,KAAKc,IAAI4mC,EAAYP,EAAeG,KAG3DK,oBAAqB,SAAUR,EAAejsC,GAG1C,GAAkB,IAFFnO,KAAKi6C,eAGjB,MAAO,GAGX,IAAIQ,EAAYtsC,EAASisC,EACrB71B,EAAQvkB,KAAK66C,iBAAiB1sC,GAE9BqsC,EAAQx6C,KAAK85C,yBAAyBv1B,GAC1CpW,EAASqsC,EAAMrsC,OAASqsC,EAAM1qC,KAI9B,IAFA,IAAIgrC,EAAOv2B,EAEJpW,EAASssC,GAAaK,EAAO96C,KAAKs5C,WAAa,GAClDwB,IACA3sC,GAAUnO,KAAK85C,yBAAyBgB,GAAMhrC,KAGlD,MAAO,CACHyU,MAAOA,EACPu2B,KAAMA,IAIdC,UAAW,SAAU1tC,GACjBrN,KAAKy5C,mBAAqBxmC,KAAKc,IAAI/T,KAAKy5C,mBAAoBpsC,EAAQ,IAGxE2tC,cAAe,SAAUC,EAAMC,EAAK/sC,GAIhC,IAHA,IAAIgtC,EACAd,EAEGa,GAAOD,GAAM,CAIhB,GAHAE,EAASD,EAAMjoC,KAAKG,OAAO6nC,EAAOC,GAAO,IACzCb,EAAgBr6C,KAAK85C,yBAAyBqB,GAAQhtC,UAEhCA,EAClB,OAAOgtC,EACAd,EAAgBlsC,EACvB+sC,EAAMC,EAAS,EACQhtC,EAAhBksC,IACPY,EAAOE,EAAS,GAIxB,GAAU,EAAND,EACA,OAAOA,EAAM,GAIrBE,mBAAoB,SAAU/tC,EAAOc,GAGjC,IAFA,IAAIktC,EAAW,EAERhuC,EAAQrN,KAAKs5C,YAAct5C,KAAK85C,yBAAyBzsC,GAAOc,OAASA,GAC5Ed,GAASguC,EACTA,GAAY,EAGhB,OAAOr7C,KAAKg7C,cAAc/nC,KAAKc,IAAI1G,EAAOrN,KAAKs5C,WAAa,GAAIrmC,KAAKG,MAAM/F,EAAQ,GAAIc,IAG3F0sC,iBAAkB,SAAU1sC,GACxB,IAAIinB,MAAMjnB,GAAV,CAIAA,EAAS8E,KAAKY,IAAI,EAAG1F,GAErB,IAAI4rC,EAAkC/5C,KAAKg6C,uCACvCsB,EAAoBroC,KAAKY,IAAI,EAAG7T,KAAKy5C,oBAEzC,OAAIM,EAAgC5rC,QAAUA,EACnCnO,KAAKg7C,cAAcM,EAAmB,EAAGntC,GAE7CnO,KAAKo7C,mBAAmBE,EAAmBntC,MAK1D3I,GAAG+1C,kCAAoC,SAAUrC,EAAWC,EAAgBC,EAAmBoC,GAC3Fx7C,KAAKy7C,4BAA8B,IAAIj2C,GAAGyzC,2BAA2BC,EAAWC,EAAgBC,GAChGp5C,KAAK07C,eAAiBF,GAAiB,KAG3Ch2C,GAAG+1C,kCAAkC57C,UAAY,CAC7CyZ,YAAa5T,GAAG+1C,kCAEhB7B,UAAW,WACP15C,KAAKy7C,4BAA4B/B,UAAUn5C,MAAMP,KAAKy7C,4BAA6B36C,YAGvF64C,aAAc,WACV,OAAO35C,KAAKy7C,4BAA4B9B,gBAG5CC,qBAAsB,WAClB,OAAO55C,KAAKy7C,4BAA4B7B,wBAG5CC,qBAAsB,WAClB,OAAO75C,KAAKy7C,4BAA4B5B,wBAG5C8B,oBAAqB,SAAUvB,EAAejsC,GAC1C,IAAIwsC,EAAY36C,KAAKy7C,4BAA4BxB,eAC7C2B,EAAgB57C,KAAKi6C,eACrB4B,EAAmB77C,KAAK87C,qBAAqB1B,EAAejsC,EAAQytC,GAExE,OAAO3oC,KAAK2iC,MAAMiG,GAAoBD,EAAgBjB,KAG1Db,yBAA0B,SAAUzsC,GAChC,OAAOrN,KAAKy7C,4BAA4B3B,yBAAyBzsC,IAGrE2sC,qCAAsC,WAClC,OAAOh6C,KAAKy7C,4BAA4BzB,wCAG5CC,aAAc,WACV,OAAOhnC,KAAKc,IAAI/T,KAAK07C,eAAgB17C,KAAKy7C,4BAA4BxB,iBAG1EC,yBAA0B,SAAUC,EAAOC,EAAeC,EAAeC,GACrED,EAAgBr6C,KAAK+7C,oBAAoB3B,EAAeC,GAExD,IAAIlsC,EAASnO,KAAKy7C,4BAA4BvB,yBAAyBC,EAAOC,EAAeC,EAAeC,GAE5G,OAAOt6C,KAAKg8C,oBAAoB5B,EAAejsC,IAGnDysC,oBAAqB,SAAUR,EAAejsC,GAG1C,OAFAA,EAASnO,KAAK+7C,oBAAoB3B,EAAejsC,GAE1CnO,KAAKy7C,4BAA4Bb,oBAAoBR,EAAejsC,IAG/E4sC,UAAW,SAAU1tC,GACjBrN,KAAKy7C,4BAA4BV,UAAU1tC,IAG/CyuC,qBAAsB,SAAU1B,EAAejsC,EAAQwsC,GACnD,OAAOA,GAAaP,EACd,EACAjsC,GAAUwsC,EAAYP,IAGhC4B,oBAAqB,SAAU5B,EAAejsC,GAC1C,IAAIwsC,EAAY36C,KAAKy7C,4BAA4BxB,eAC7C2B,EAAgB57C,KAAKi6C,eAEzB,GAAIU,IAAciB,EACd,OAAOztC,EAEX,IAAI0tC,EAAmB77C,KAAK87C,qBAAqB1B,EAAejsC,EAAQwsC,GAExE,OAAO1nC,KAAK2iC,MAAMiG,GAAoBD,EAAgBxB,KAI1D2B,oBAAqB,SAAU3B,EAAejsC,GAC1C,IAAIwsC,EAAY36C,KAAKy7C,4BAA4BxB,eAC7C2B,EAAgB57C,KAAKi6C,eAEzB,GAAIU,IAAciB,EACd,OAAOztC,EAEX,IAAI0tC,EAAmB77C,KAAK87C,qBAAqB1B,EAAejsC,EAAQytC,GAExE,OAAO3oC,KAAK2iC,MAAMiG,GAAoBlB,EAAYP,O,cCvQzD,IAIO6B,IAAa,CACbC,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,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,IACPC,MAAO,KACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,MACPC,MAAO,KACPC,MAAO,KACPC,MAAO,MACPC,MAAO,KACPC,MAAO,IACPC,MAAO,KACPC,MAAO,MACPC,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,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,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,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,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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 = 1072);\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":""}