From db118979572e69c700bb59dab976f5e7a351589b Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 21 Jul 2022 14:42:36 +0800 Subject: [PATCH 001/161] =?UTF-8?q?REPORT-75687=20&=20KERNEL-11647=20fix:?= =?UTF-8?q?=20=E4=BE=9D=E7=84=B6=E6=8A=8AtriggerIcon=E6=94=BE=E5=88=B0trig?= =?UTF-8?q?ger=E5=A4=96=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../combo.searchtextvalue.js | 1 - .../trigger.searchtextvalue.js | 4 -- .../widget/multitree/multi.tree.combo.less | 7 ++- src/widget/multiselect/multiselect.combo.js | 22 +++++++- src/widget/multiselect/multiselect.loader.js | 3 +- src/widget/multiselect/multiselect.trigger.js | 22 ++------ .../search/multiselect.search.loader.js | 3 +- src/widget/multitree/multi.tree.combo.js | 51 +++++++++++++------ .../multitree/multi.tree.insert.combo.js | 49 +++++++++++++----- src/widget/multitree/multi.tree.list.combo.js | 49 +++++++++++++----- 10 files changed, 141 insertions(+), 70 deletions(-) diff --git a/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js b/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js index 8de574c76..09608dea9 100644 --- a/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js +++ b/src/case/combo/searchtextvaluecombo/combo.searchtextvalue.js @@ -33,7 +33,6 @@ BI.SearchTextValueCombo = BI.inherit(BI.Widget, { adjustLength: 2, height: height, width: width, - toggle: false, ref: function () { self.combo = this; }, diff --git a/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js b/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js index c61093b35..7f6f7925d 100644 --- a/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js +++ b/src/case/combo/searchtextvaluecombo/trigger.searchtextvalue.js @@ -24,10 +24,6 @@ BI.SearchTextValueTrigger = BI.inherit(BI.Trigger, { }, width: o.height, height: o.height, - stopPropagation: true, - handler: function () { - self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.TOGGLE); - } }; var stateText = this._digest(o.value, o.items) || o.text; diff --git a/src/less/widget/multitree/multi.tree.combo.less b/src/less/widget/multitree/multi.tree.combo.less index 7e193b7d3..62b29c2a3 100644 --- a/src/less/widget/multitree/multi.tree.combo.less +++ b/src/less/widget/multitree/multi.tree.combo.less @@ -1,9 +1,11 @@ @import "../../index.less"; + @val: transform .3s ease; -.bi-multi-tree-combo{ - & .multi-select-trigger-icon-button{ +.bi-multi-tree-combo, .bi-multi-tree-insert-combo, .bi-multi-tree-list-combo { + & .multi-select-trigger-icon-button { font-size: @font-size-16; } + // 此combo的trigger_button是absolute上去的,与bi-combo在同一层级,独立写一下 & .bi-combo.bi-combo-popup + .bi-trigger-icon-button { & .x-icon { @@ -11,6 +13,7 @@ .transition(@val); } } + & .bi-combo + .bi-trigger-icon-button { & .x-icon { .rotate(0deg); diff --git a/src/widget/multiselect/multiselect.combo.js b/src/widget/multiselect/multiselect.combo.js index 2e71071b8..23d5385b8 100644 --- a/src/widget/multiselect/multiselect.combo.js +++ b/src/widget/multiselect/multiselect.combo.js @@ -173,7 +173,7 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { }, value: o.value, hideChecker: function (e) { - return self.numberCounter.element.find(e.target).length === 0; + return triggerBtn.element.find(e.target).length === 0 && self.numberCounter.element.find(e.target).length === 0; }, }); @@ -198,6 +198,21 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { } }); + var triggerBtn = BI.createWidget({ + type: "bi.trigger_icon_button", + width: o.height, + height: o.height, + cls: "multi-select-trigger-icon-button", + }); + triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { + self.numberCounter.hideView(); + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } else { + self.combo.showView(); + } + }); + this.numberCounter = BI.createWidget({ type: "bi.multi_select_check_selected_switcher", masker: { @@ -248,6 +263,11 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { right: 0, top: 0, bottom: 0, + }, { + el: triggerBtn, + right: 0, + top: 0, + bottom: 0, }, { el: { type: "bi.vertical_adapt", diff --git a/src/widget/multiselect/multiselect.loader.js b/src/widget/multiselect/multiselect.loader.js index 2f51ae181..3dc7229bb 100644 --- a/src/widget/multiselect/multiselect.loader.js +++ b/src/widget/multiselect/multiselect.loader.js @@ -110,12 +110,13 @@ BI.MultiSelectLoader = BI.inherit(BI.Widget, { }, _createItems: function (items) { + var allSelected = this.isAllSelected(); return BI.createItems(items, { type: "bi.multi_select_item", logic: this.options.logic, cls: "bi-list-item-active", height: this.options.itemHeight || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, - selected: this.isAllSelected(), + selected: allSelected, iconWrapperWidth: 36 }); }, diff --git a/src/widget/multiselect/multiselect.trigger.js b/src/widget/multiselect/multiselect.trigger.js index 4f75b38cb..7140741ff 100644 --- a/src/widget/multiselect/multiselect.trigger.js +++ b/src/widget/multiselect/multiselect.trigger.js @@ -78,22 +78,10 @@ BI.MultiSelectTrigger = BI.inherit(BI.Trigger, { items: [ { el: this.searcher, - width: "fill" - }, { - el: this.wrapNumberCounter, - width: 0 - }, { - el: { - type: "bi.trigger_icon_button", - height: o.height, - stopPropagation: true, - cls: "multi-select-trigger-icon-button", - handler: function () { - self.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.TOGGLE); - } - }, - width: 24 - }] + width: "fill", + rgap: 24 + } + ] }); !o.allowEdit && BI.createWidget({ @@ -123,7 +111,7 @@ BI.MultiSelectTrigger = BI.inherit(BI.Trigger, { * 重新调整numberCounter的空白占位符 */ refreshPlaceHolderWidth: function (width) { - this.wrapper.attr("items")[1].width = width; + this.wrapper.attr("items")[0].rgap = 24 + width; this.wrapper.resize(); }, diff --git a/src/widget/multiselect/search/multiselect.search.loader.js b/src/widget/multiselect/search/multiselect.search.loader.js index 8f17eacfc..07d4cfbea 100644 --- a/src/widget/multiselect/search/multiselect.search.loader.js +++ b/src/widget/multiselect/search/multiselect.search.loader.js @@ -91,13 +91,14 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, { }, _createItems: function (items) { + var allSelected = this.isAllSelected(); return BI.createItems(items, { type: "bi.multi_select_item", logic: { dynamic: false }, height: this.options.itemHeight || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, - selected: this.isAllSelected(), + selected: allSelected, cls: "bi-list-item-active", iconWrapperWidth: 36 }); diff --git a/src/widget/multitree/multi.tree.combo.js b/src/widget/multitree/multi.tree.combo.js index ec94374d8..4e42df154 100644 --- a/src/widget/multitree/multi.tree.combo.js +++ b/src/widget/multitree/multi.tree.combo.js @@ -22,7 +22,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { var isInit = false; var want2showCounter = false; - this.storeValue = { value: o.value || {} }; + this.storeValue = {value: o.value || {}}; this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", @@ -44,7 +44,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { type: "bi.multi_tree_searcher", itemsCreator: o.itemsCreator }, - value: { value: o.value || {} } + value: {value: o.value || {}} }); this.combo = BI.createWidget({ @@ -105,9 +105,10 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { maxWidth: o.isNeedAdjustWidth ? "auto" : 500, }, isNeedAdjustWidth: o.isNeedAdjustWidth, - value: { value: o.value || {} }, + value: {value: o.value || {}}, hideChecker: function (e) { - return self.numberCounter.element.find(e.target).length === 0; + return triggerBtn.element.find(e.target).length === 0 && + self.numberCounter.element.find(e.target).length === 0; } }); @@ -130,12 +131,12 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; this.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { - self.storeValue = { value: this.getValue() }; + self.storeValue = {value: this.getValue()}; self.combo.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); BI.nextTick(function () { @@ -150,11 +151,11 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { self.fireEvent(BI.MultiTreeCombo.EVENT_SEARCHING); }); - function showCounter() { + function showCounter () { if (isSearching()) { - self.storeValue = { value: self.trigger.getValue() }; + self.storeValue = {value: self.trigger.getValue()}; } else if (isPopupView()) { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; } self.trigger.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); @@ -173,7 +174,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { var checked = this.getSearcher().hasChecked(); var val = { type: BI.Selection.Multi, - value: checked ? { 1: 1 } : {} + value: checked ? {1: 1} : {} }; this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None); self.numberCounter.setButtonChecked(val); @@ -185,7 +186,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { return; } if (change === true) { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; change = false; } self.combo.setValue(self.storeValue); @@ -200,9 +201,9 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { } else { if (isPopupView()) { self._stopEditing(); - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; if (clear === true) { - self.storeValue = { value: {} }; + self.storeValue = {value: {}}; } self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM); } @@ -211,6 +212,21 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { change = false; }); + var triggerBtn = BI.createWidget({ + type: "bi.trigger_icon_button", + width: o.height, + height: o.height, + cls: "multi-select-trigger-icon-button" + }); + triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { + self.numberCounter.hideView(); + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } else { + self.combo.showView(); + } + }); + this.numberCounter = BI.createWidget({ type: "bi.multi_select_check_selected_switcher", el: { @@ -229,7 +245,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { }, itemsCreator: o.itemsCreator, valueFormatter: o.valueFormatter, - value: { value: o.value || {} } + value: {value: o.value || {}} }); this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () { if (!self.combo.isViewVisible()) { @@ -273,6 +289,11 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { right: 0, top: 0, bottom: 0 + }, { + el: triggerBtn, + right: 0, + top: 0, + bottom: 0 }, { el: { type: "bi.vertical_adapt", @@ -285,7 +306,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { }); }, - _stopEditing: function () { + _stopEditing: function() { this.trigger.stopEditing(); this.numberCounter.hideView(); }, diff --git a/src/widget/multitree/multi.tree.insert.combo.js b/src/widget/multitree/multi.tree.insert.combo.js index 9823b37a7..9694b3556 100644 --- a/src/widget/multitree/multi.tree.insert.combo.js +++ b/src/widget/multitree/multi.tree.insert.combo.js @@ -23,7 +23,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { var isInit = false; var want2showCounter = false; - this.storeValue = { value: o.value || {} }; + this.storeValue = {value: o.value || {}}; this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", @@ -59,7 +59,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { }] } }, - value: { value: o.value || {} } + value: {value: o.value || {}} }); @@ -121,9 +121,10 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { maxWidth: o.isNeedAdjustWidth ? "auto" : 500, }, isNeedAdjustWidth: o.isNeedAdjustWidth, - value: { value: o.value || {} }, + value: {value: o.value || {}}, hideChecker: function (e) { - return self.numberCounter.element.find(e.target).length === 0; + return triggerBtn.element.find(e.target).length === 0 && + self.numberCounter.element.find(e.target).length === 0; } }); @@ -146,12 +147,12 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; this.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { - self.storeValue = { value: this.getValue() }; + self.storeValue = {value: this.getValue()}; self.combo.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); BI.nextTick(function () { @@ -166,11 +167,11 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { self.fireEvent(BI.MultiTreeInsertCombo.EVENT_SEARCHING); }); - function showCounter() { + function showCounter () { if (isSearching()) { - self.storeValue = { value: self.trigger.getValue() }; + self.storeValue = {value: self.trigger.getValue()}; } else if (isPopupView()) { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; } self.trigger.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); @@ -184,7 +185,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { var checked = this.getSearcher().hasChecked(); var val = { type: BI.Selection.Multi, - value: checked ? { 1: 1 } : {} + value: checked ? {1: 1} : {} }; this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None); self.numberCounter.setButtonChecked(val); @@ -196,7 +197,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { return; } if (change === true) { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; change = false; } self.combo.setValue(self.storeValue); @@ -211,9 +212,9 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { } else { if (isPopupView()) { self._stopEditing(); - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; if (clear === true) { - self.storeValue = { value: {} }; + self.storeValue = {value: {}}; } self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM); } @@ -222,6 +223,21 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { change = false; }); + var triggerBtn = BI.createWidget({ + type: "bi.trigger_icon_button", + width: o.height, + height: o.height, + cls: "multi-select-trigger-icon-button" + }); + triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { + self.numberCounter.hideView(); + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } else { + self.combo.showView(); + } + }); + this.numberCounter = BI.createWidget({ type: "bi.multi_select_check_selected_switcher", el: { @@ -284,6 +300,11 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { right: 0, top: 0, bottom: 0 + }, { + el: triggerBtn, + right: 0, + top: 0, + bottom: 0 }, { el: { type: "bi.vertical_adapt", @@ -301,7 +322,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { this.numberCounter.setButtonChecked(this.storeValue); }, - _stopEditing: function () { + _stopEditing: function() { this.trigger.stopEditing(); this.numberCounter.hideView(); }, diff --git a/src/widget/multitree/multi.tree.list.combo.js b/src/widget/multitree/multi.tree.list.combo.js index 2a378b1ae..ff5a2864a 100644 --- a/src/widget/multitree/multi.tree.list.combo.js +++ b/src/widget/multitree/multi.tree.list.combo.js @@ -23,7 +23,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { var isInit = false; var want2showCounter = false; - this.storeValue = { value: o.value || [] }; + this.storeValue = {value: o.value || []}; this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", @@ -74,7 +74,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { itemsCreator: o.itemsCreator } }, - value: { value: o.value || {} } + value: {value: o.value || {}} }); @@ -139,9 +139,10 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { maxWidth: o.isNeedAdjustWidth ? "auto" : 500, }, isNeedAdjustWidth: o.isNeedAdjustWidth, - value: { value: o.value || {} }, + value: {value: o.value || {}}, hideChecker: function (e) { - return self.numberCounter.element.find(e.target).length === 0; + return triggerBtn.element.find(e.target).length === 0 && + self.numberCounter.element.find(e.target).length === 0; } }); @@ -164,12 +165,12 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; this.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { - self.storeValue = { value: this.getValue() }; + self.storeValue = {value: this.getValue()}; self.combo.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); BI.nextTick(function () { @@ -184,11 +185,11 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { self.fireEvent(BI.MultiTreeListCombo.EVENT_SEARCHING); }); - function showCounter() { + function showCounter () { if (isSearching()) { - self.storeValue = { value: self.trigger.getValue() }; + self.storeValue = {value: self.trigger.getValue()}; } else if (isPopupView()) { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; } self.trigger.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); @@ -202,7 +203,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { var checked = this.getSearcher().hasChecked(); var val = { type: BI.Selection.Multi, - value: checked ? { 1: 1 } : {} + value: checked ? {1: 1} : {} }; this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None); self.numberCounter.setButtonChecked(val); @@ -214,7 +215,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { return; } if (change === true) { - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; change = false; } self.combo.setValue(self.storeValue); @@ -229,9 +230,9 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { } else { if (isPopupView()) { self._stopEditing(); - self.storeValue = { value: self.combo.getValue() }; + self.storeValue = {value: self.combo.getValue()}; if (clear === true) { - self.storeValue = { value: [] }; + self.storeValue = {value: []}; } self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM); } @@ -240,6 +241,21 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { change = false; }); + var triggerBtn = BI.createWidget({ + type: "bi.trigger_icon_button", + width: o.height, + height: o.height, + cls: "multi-select-trigger-icon-button" + }); + triggerBtn.on(BI.TriggerIconButton.EVENT_CHANGE, function () { + self.numberCounter.hideView(); + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } else { + self.combo.showView(); + } + }); + this.numberCounter = BI.createWidget({ type: "bi.multi_select_check_selected_switcher", el: { @@ -302,6 +318,11 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { right: 0, top: 0, bottom: 0 + }, { + el: triggerBtn, + right: 0, + top: 0, + bottom: 0 }, { el: { type: "bi.vertical_adapt", @@ -319,7 +340,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { this.numberCounter.setButtonChecked(this.storeValue); }, - _stopEditing: function () { + _stopEditing: function() { this.trigger.stopEditing(); this.numberCounter.hideView(); }, From 0feb419e428d72de1b9d6cccb5bf17b78438c447 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 21 Jul 2022 14:43:32 +0800 Subject: [PATCH 002/161] =?UTF-8?q?KERNEL-11911=20feat:=20label=E9=BB=98?= =?UTF-8?q?=E8=AE=A4tooltip=E9=80=82=E9=85=8D,=20=E6=B0=94=E6=B3=A1?= =?UTF-8?q?=E4=B8=8D=E9=9C=80=E8=A6=81tooltip?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/controller/controller.bubbles.js | 2 +- src/core/controller/controller.tooltips.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/core/controller/controller.bubbles.js b/src/core/controller/controller.bubbles.js index a705ef4a6..fa5cefb5f 100644 --- a/src/core/controller/controller.bubbles.js +++ b/src/core/controller/controller.bubbles.js @@ -30,7 +30,7 @@ BI.BubblesController = BI.inherit(BI.Controller, { if (!this.storeBubbles[name]) { this.storeBubbles[name] = BI.createWidget({ - type: "bi.label", + type: "bi.text", cls: "bi-bubble" + " bubble-" + level, text: text, hgap: 5, diff --git a/src/core/controller/controller.tooltips.js b/src/core/controller/controller.tooltips.js index 2e126b424..14dbba9e4 100644 --- a/src/core/controller/controller.tooltips.js +++ b/src/core/controller/controller.tooltips.js @@ -38,7 +38,7 @@ BI.TooltipsController = BI.inherit(BI.Controller, { }); this.showingTips = {}; if (!this.has(name)) { - this.create(name, tooltipOpt, opt.container || "body"); + this.create(name, tooltipOpt, document.fullscreenElement ? context : (opt.container || "body")); } if (!opt.belowMouse) { var offset = context.element.offset(); From 6e3f5865fbe170eb3116148df825f3b9ecba9b11 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 21 Jul 2022 14:50:10 +0800 Subject: [PATCH 003/161] =?UTF-8?q?KERNEL-12098=20feat:=20radio=E5=92=8Cch?= =?UTF-8?q?eckbox=20item=E4=BB=A3=E7=A0=81=E8=A7=84=E8=8C=83=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fineui中的代码是可以作为其他同学开发自定义组件的参考的. 所以一定要保持规范优雅 --- src/case/button/item.multiselect.js | 6 ------ src/case/button/item.singleselect.radio.js | 11 ----------- 2 files changed, 17 deletions(-) diff --git a/src/case/button/item.multiselect.js b/src/case/button/item.multiselect.js index 0d44b6da8..b90fafac5 100644 --- a/src/case/button/item.multiselect.js +++ b/src/case/button/item.multiselect.js @@ -20,11 +20,6 @@ BI.MultiSelectItem = BI.inherit(BI.BasicButton, { this.checkbox = BI.createWidget({ type: "bi.checkbox" }); - this.checkbox.on(BI.Controller.EVENT_CHANGE, function (type) { - if (type === BI.Events.CLICK) { - self.setSelected(self.isSelected()); - } - }); return { type: "bi.vertical_adapt", columnSize: [o.iconWrapperWidth || o.height, "fill"], @@ -74,7 +69,6 @@ BI.MultiSelectItem = BI.inherit(BI.BasicButton, { doClick: function () { BI.MultiSelectItem.superclass.doClick.apply(this, arguments); - this.checkbox.setSelected(this.isSelected()); if (this.isValid()) { this.fireEvent(BI.MultiSelectItem.EVENT_CHANGE, this.getValue(), this); } diff --git a/src/case/button/item.singleselect.radio.js b/src/case/button/item.singleselect.radio.js index a7c5fe04b..74ebe49c9 100644 --- a/src/case/button/item.singleselect.radio.js +++ b/src/case/button/item.singleselect.radio.js @@ -28,16 +28,6 @@ BI.SingleSelectRadioItem = BI.inherit(BI.BasicButton, { ref: function (_ref) { self.radio = _ref; }, - listeners: [ - { - eventName: BI.Controller.EVENT_CHANGE, - action: function (type) { - if (type === BI.Events.CLICK) { - self.setSelected(self.isSelected()); - } - } - } - ], }] }, { el: { @@ -82,7 +72,6 @@ BI.SingleSelectRadioItem = BI.inherit(BI.BasicButton, { doClick: function () { BI.SingleSelectRadioItem.superclass.doClick.apply(this, arguments); - this.radio.setSelected(this.isSelected()); if (this.isValid()) { this.fireEvent(BI.SingleSelectRadioItem.EVENT_CHANGE, this.isSelected(), this); } From 46076973a1ed21a702b391ce01c64b7417b57990 Mon Sep 17 00:00:00 2001 From: iapyang Date: Thu, 21 Jul 2022 16:16:51 +0800 Subject: [PATCH 004/161] =?UTF-8?q?KERNEL-12095=20chore:=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9Ewebpack=20worker=E6=89=93=E5=8C=85=E6=8F=92=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .npmignore | 2 + .../webpack-fui-worker-plugin/constants.js | 9 ++ plugins/webpack-fui-worker-plugin/index.js | 45 ++++++++ .../worker-loader.js | 109 ++++++++++++++++++ 4 files changed, 165 insertions(+) create mode 100644 plugins/webpack-fui-worker-plugin/constants.js create mode 100644 plugins/webpack-fui-worker-plugin/index.js create mode 100644 plugins/webpack-fui-worker-plugin/worker-loader.js diff --git a/.npmignore b/.npmignore index a5bc0942a..0f0f7d2e4 100644 --- a/.npmignore +++ b/.npmignore @@ -40,3 +40,5 @@ !dist/2.0/bi.min.css !bin/* !bin/**/* +!plugins/* +!plugins/**/* diff --git a/plugins/webpack-fui-worker-plugin/constants.js b/plugins/webpack-fui-worker-plugin/constants.js new file mode 100644 index 000000000..7b80ac3dc --- /dev/null +++ b/plugins/webpack-fui-worker-plugin/constants.js @@ -0,0 +1,9 @@ +const WorkerPluginName = 'FuiWorkerPlugin'; +const WorkerLoaderName = 'FuiWorkerWorkerLoader'; +const FileNamePrefix = 'worker-'; + +module.exports = { + WorkerPluginName, + WorkerLoaderName, + FileNamePrefix, +}; diff --git a/plugins/webpack-fui-worker-plugin/index.js b/plugins/webpack-fui-worker-plugin/index.js new file mode 100644 index 000000000..caa782306 --- /dev/null +++ b/plugins/webpack-fui-worker-plugin/index.js @@ -0,0 +1,45 @@ +/* + * worker-plugin + */ + +const path = require('path'); +const webpack = require('webpack'); +const { WorkerPluginName } = require('./constants'); + +class FuiWorkerPlugin { + constructor(options) { + this.options = options; + } + + apply(compiler) { + // 为主线程构建添加 __WORKER__ 环境变量, 构建中区分不同线程源码, 实现代码拆减 + compiler.hooks.afterPlugins.tap(WorkerPluginName, compiler => { + new webpack.DefinePlugin({ + // __WORKER__ 表示当前所在线程是否是 worker 线程 + // 主线程构建中为 false + __WORKER__: false, + }).apply(compiler); + }); + + // 添加自定义的worker entry-loader + compiler.hooks.afterResolvers.tap(WorkerPluginName, compiler => { + /** + * https://webpack.js.org/configuration/resolve/#resolveloader + * 使用 resolveloader 添加自定义的 worker loader + */ + if (!compiler.options.resolveLoader) { + compiler.options.resolveLoader = { + alias: {}, + }; + } + if (!compiler.options.resolveLoader.alias) { + compiler.options.resolveLoader.alias = {}; + } + + // 动态添加 worker 的 worker-loader, 命名为 "fui-worker" + compiler.options.resolveLoader.alias['fui-worker'] = path.resolve(__dirname, './worker-loader.js'); + }); + } +} + +module.exports = FuiWorkerPlugin; diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js new file mode 100644 index 000000000..9affe81f4 --- /dev/null +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -0,0 +1,109 @@ +/* + * fui-worker worker-loader + */ + +const webpack = require('webpack'); +const loaderUtils = require('loader-utils'); +const SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin'); +const { WorkerLoaderName, FileNamePrefix } = require('./constants'); + +// 正常 loader 处理逻辑 +function loader() { + const callback = this.async(); + this.cacheable(false); + + // 过滤掉当前的 worker-loader, 保留 worker 侧构建需要的其他 loader(babel-loader/ts-loader 等) + const otherLoaders = this.loaders.filter((loader, index) => { + if (index === this.loaderIndex) { + return false; + } + + return true; + }); + /** + * 拼接构建需要的 loader 字符串, 用于指定 childCompiler 的构建 loader + * 比如: /path/to/babel-loader/lib/index.js!/path/to/ts-loader/index.js! + */ + const loaderPath = otherLoaders.reduce((pre, loader) => `${pre}${loader.path}!`, ''); + + /** + * worker 独立构建的 entry + * 构建 loader + worker 源码入口文件路径 + * + * https://webpack.js.org/concepts/loaders/#inline + * `!!` 实现在 childCompiler 中忽略其他所有 loader, 只保留主构建的 loader + * 不然 worker 入口在 childCompiler 中会继续由 worker-loader 处理, 造成死循环 + */ + const workerEntry = `!!${loaderPath}${this.resourcePath}`; + + // 把资源纳入构建流程的依赖, 实现 dev 模式下的 watch + this.addDependency(workerEntry); + + // 生成的 service 独立 bundle 名称 + const entryFileName = `${FileNamePrefix}index`; + + // 获取传递给 loader 的 options + loaderUtils.getOptions(this) || {}; + + // 创建 childCompiler, 用于实现 worker 构建为独立 js 资源 + const childCompiler = this._compilation.createChildCompiler(WorkerLoaderName, { + globalObject: 'this', + }); + childCompiler.context = this._compiler.context; + + // 指定独立构建的 entry 和生成 js 资源名称 + new SingleEntryPlugin(this.context, workerEntry, entryFileName).apply(childCompiler); + + // 设置 worker 侧的环境变量 + new webpack.DefinePlugin({ + __WORKER__: true, + }).apply(childCompiler); + + // 添加 window 全局对象, 映射为 worker 线程全局对象 self + // 如果在 worker 源码中添加, 可能没有前置到所有引用模块前 + new webpack.BannerPlugin({ + banner: 'self.window = self;', + raw: true, + entryOnly: true, + }).apply(childCompiler); + + const subCache = `subcache ${__dirname} ${workerEntry}`; + childCompiler.hooks.compilation.tap(WorkerLoaderName, compilation => { + if (compilation.cache) { + if (!compilation.cache[subCache]) compilation.cache[subCache] = {}; + compilation.cache = compilation.cache[subCache]; + } + }); + + childCompiler.runAsChild((error, entries, compilation) => { + if (!error && compilation.errors && compilation.errors.length) { + // eslint-disable-next-line no-param-reassign + error = compilation.errors[0]; + } + + // compatible with Array (v4) and Set (v5) prototypes + const entry = entries && entries[0] && entries[0].files.values().next().value; + if (!error && !entry) { + // eslint-disable-next-line no-param-reassign + error = Error(`${WorkerLoaderName}, no entry for ${workerEntry}`); + } + + if (error) { + return callback(error); + } + + return callback( + null, + // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 + // 添加 @ts-nocheck 避免 ts-check 报错 + `// @ts-nocheck + const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; + export const workerUrl = servicePath; + ` + ); + }); + + return; +} + +module.exports = loader; From b0ef84a0605a0370217055d057630199af280a07 Mon Sep 17 00:00:00 2001 From: iapyang Date: Thu, 21 Jul 2022 16:21:55 +0800 Subject: [PATCH 005/161] =?UTF-8?q?refactor:=20=E5=8A=A0=E4=B8=AA=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/webpack-fui-worker-plugin/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/webpack-fui-worker-plugin/index.js b/plugins/webpack-fui-worker-plugin/index.js index caa782306..19f660299 100644 --- a/plugins/webpack-fui-worker-plugin/index.js +++ b/plugins/webpack-fui-worker-plugin/index.js @@ -7,7 +7,7 @@ const webpack = require('webpack'); const { WorkerPluginName } = require('./constants'); class FuiWorkerPlugin { - constructor(options) { + constructor(options = {}) { this.options = options; } From 4360c7dba924cb4bca4a67805696fd3bab62e408 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 21 Jul 2022 18:59:39 +0800 Subject: [PATCH 006/161] =?UTF-8?q?=E6=97=A0JIRA=20toast=E5=AE=B9=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/foundation/message.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/base/foundation/message.js b/src/base/foundation/message.js index 156297c9d..82ab48ee5 100644 --- a/src/base/foundation/message.js +++ b/src/base/foundation/message.js @@ -22,7 +22,7 @@ BI.Msg = function () { // BI.Msg.prompt(title, message, value, callback, min_width); }, toast: function (message, options, context) { - BI.isString(options) && (options = { level: options }) + BI.isString(options) && (options = { level: options }); options = options || {}; context = context || BI.Widget._renderEngine.createElement("body"); var level = options.level || "common"; @@ -41,7 +41,7 @@ BI.Msg = function () { BI.remove(toastStack, toast.element); var _height = BI.SIZE_CONSANTS.TOAST_TOP; BI.each(toastStack, function (i, element) { - element.css({"top": _height}); + element.css({ "top": _height }); _height += element.outerHeight() + 10; }); callback(); @@ -62,16 +62,16 @@ BI.Msg = function () { }] }); toastStack.push(toast.element); - toast.element.css({"margin-left": -1 * toast.element.outerWidth() / 2}); + toast.element.css({ "margin-left": -1 * toast.element.outerWidth() / 2 }); toast.element.removeClass("bi-message-leave").addClass("bi-message-enter"); autoClose && BI.delay(function () { toast.element.removeClass("bi-message-enter").addClass("bi-message-leave"); - toast.destroy(); + toast.destroy?.(); }, 5000); return function () { toast.element.removeClass("bi-message-enter").addClass("bi-message-leave"); - toast.destroy(); + toast.destroy?.(); }; }, _show: function (hasCancel, title, message, callback) { From f4f0fdc27cd33d75d85318d227bc2e969446cdd1 Mon Sep 17 00:00:00 2001 From: iapyang Date: Fri, 22 Jul 2022 10:55:43 +0800 Subject: [PATCH 007/161] =?UTF-8?q?KERNEL-12095=20fix:=20=E5=B0=81?= =?UTF-8?q?=E8=A3=85new=E9=83=A8=E5=88=86=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/worker_new/index.js | 4 ++-- examples/worker_new/worker.js | 4 ++-- typescript/core/worker/worker.main_thread.ts | 8 +++++--- typescript/core/worker/worker.worker_thread.ts | 9 +++++---- typescript/core/worker/workers.ts | 13 ++++++++++++- 5 files changed, 26 insertions(+), 12 deletions(-) diff --git a/examples/worker_new/index.js b/examples/worker_new/index.js index 67646a1ec..b95fbbad6 100644 --- a/examples/worker_new/index.js +++ b/examples/worker_new/index.js @@ -42,7 +42,7 @@ const HeartBeatCheckAction = BI.inherit(BI.Workers.WorkerBaseAction, { } }); -var WorkerThreadWorker = BI.inherit(BI.Workers.MainThreadWorker, { +var MainThreadWorker = BI.inherit(BI.Workers.MainThreadWorker, { initActions: function() { this.cookieAction = this.createAction(CookieAction); @@ -64,7 +64,7 @@ var WorkerThreadWorker = BI.inherit(BI.Workers.MainThreadWorker, { } }); -var mainThreadWorker = new WorkerThreadWorker({ +var mainThreadWorker = BI.Workers.createWorker(MainThreadWorker, { workerUrl: "./worker_new/worker.js", workerName: "demo" }); diff --git a/examples/worker_new/worker.js b/examples/worker_new/worker.js index f30856b21..96e88e542 100644 --- a/examples/worker_new/worker.js +++ b/examples/worker_new/worker.js @@ -58,7 +58,7 @@ const HeartBeatCheckAction = BI.inherit(BI.Workers.WorkerBaseAction, { } }); -var WorkerThreadWorker = BI.inherit(BI.Workers.WorkerThreadWorker, { +var MainThreadWorker = BI.inherit(BI.Workers.WorkerThreadWorker, { initActions: function() { this.cookieAction = this.createAction(CookieAction); @@ -75,6 +75,6 @@ var WorkerThreadWorker = BI.inherit(BI.Workers.WorkerThreadWorker, { } }); -var workerThreadWorker = new WorkerThreadWorker(); +var workerThreadWorker = BI.Workers.createWorker(MainThreadWorker); workerThreadWorker.fetchCookie(); diff --git a/typescript/core/worker/worker.main_thread.ts b/typescript/core/worker/worker.main_thread.ts index 42e0c18dd..c87bc9833 100644 --- a/typescript/core/worker/worker.main_thread.ts +++ b/typescript/core/worker/worker.main_thread.ts @@ -5,7 +5,7 @@ import { IWorkerOptions } from "./worker.core"; /** * 主线程Worker */ -export abstract class MainThreadWorker { +export class MainThreadWorker { /** * Worker 名称 */ @@ -24,10 +24,12 @@ export abstract class MainThreadWorker { public constructor(options: IWorkerOptions) { this.name = options.workerName; this.controller = new WorkerMainThreadController(options); - this.initActions(); } - protected abstract initActions(): void; + /** + * 初始化业务actions + */ + public initActions() {} /** * 销毁 worker 实例 diff --git a/typescript/core/worker/worker.worker_thread.ts b/typescript/core/worker/worker.worker_thread.ts index 9907955fb..53b621403 100644 --- a/typescript/core/worker/worker.worker_thread.ts +++ b/typescript/core/worker/worker.worker_thread.ts @@ -4,7 +4,7 @@ import { WorkerThreadController } from "./controller/worker.worker_thread.contro /** * worker线程实例 */ -export abstract class WorkerThreadWorker { +export class WorkerThreadWorker { /** * Worker 线程通信控制器 */ @@ -12,11 +12,12 @@ export abstract class WorkerThreadWorker { public constructor() { this.controller = new WorkerThreadController(); - - this.initActions(); } - protected abstract initActions(): void; + /** + * 初始化业务actions + */ + public initActions() {} /** * 实例化action diff --git a/typescript/core/worker/workers.ts b/typescript/core/worker/workers.ts index f02447120..5ab99dddc 100644 --- a/typescript/core/worker/workers.ts +++ b/typescript/core/worker/workers.ts @@ -1,12 +1,22 @@ import { WorkerChannel } from "./worker.channel"; import { WorkerBaseController } from "./controller/worker.controller"; -import { WorkerMessageType } from "./worker.core"; +import { IWorkerOptions, WorkerMessageType } from "./worker.core"; import { WorkerMainThreadController } from "./controller/worker.main_thread.controller"; import { WorkerThreadController } from "./controller/worker.worker_thread.controller"; import { WorkerBaseAction } from "./action/worker.action"; import { MainThreadWorker } from "./worker.main_thread"; import { WorkerThreadWorker } from "./worker.worker_thread"; +function createWorker(ThreadWorker: T, options: IWorkerOptions): InstanceType +function createWorker(ThreadWorker: T): InstanceType +function createWorker(ThreadWorker: T, options?: IWorkerOptions): InstanceType { + const threadWorker = new ThreadWorker(options as any) as InstanceType; + + threadWorker.initActions(); + + return threadWorker; +} + export const Workers = { WorkerChannel, WorkerBaseController, @@ -16,4 +26,5 @@ export const Workers = { MainThreadWorker, WorkerThreadWorker, WorkerMessageType, + createWorker, }; From 36a81b2f6a13132a8e005cacd3e642e4322a427e Mon Sep 17 00:00:00 2001 From: iapyang Date: Fri, 22 Jul 2022 10:58:22 +0800 Subject: [PATCH 008/161] =?UTF-8?q?refactor:=20=E6=94=B9=E4=B8=AA=E5=90=8D?= =?UTF-8?q?=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/cli.worker.js | 4 ++-- bin/cli/worker/template/{action_type.ts => action_type.t} | 0 .../template/{main_thread_template.ts => main_thread.t} | 0 .../template/{worker_thread_template.ts => worker_thread.t} | 0 4 files changed, 2 insertions(+), 2 deletions(-) rename bin/cli/worker/template/{action_type.ts => action_type.t} (100%) rename bin/cli/worker/template/{main_thread_template.ts => main_thread.t} (100%) rename bin/cli/worker/template/{worker_thread_template.ts => worker_thread.t} (100%) diff --git a/bin/cli/worker/cli.worker.js b/bin/cli/worker/cli.worker.js index 0c086db08..3549e75ca 100644 --- a/bin/cli/worker/cli.worker.js +++ b/bin/cli/worker/cli.worker.js @@ -34,14 +34,14 @@ module.exports = { [`${name}_worker`]: { 'main_thread': { action: {}, - [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread_template.ts'), + [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread_template.t'), }, utils: { 'action_type.ts': '', }, 'worker_thread': { action: {}, - [`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread_template.ts'), + [`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread_template.t'), }, }, }; diff --git a/bin/cli/worker/template/action_type.ts b/bin/cli/worker/template/action_type.t similarity index 100% rename from bin/cli/worker/template/action_type.ts rename to bin/cli/worker/template/action_type.t diff --git a/bin/cli/worker/template/main_thread_template.ts b/bin/cli/worker/template/main_thread.t similarity index 100% rename from bin/cli/worker/template/main_thread_template.ts rename to bin/cli/worker/template/main_thread.t diff --git a/bin/cli/worker/template/worker_thread_template.ts b/bin/cli/worker/template/worker_thread.t similarity index 100% rename from bin/cli/worker/template/worker_thread_template.ts rename to bin/cli/worker/template/worker_thread.t From baeb88933f5f1bc61bb8e07b2492fc96e013d0ad Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 22 Jul 2022 14:06:12 +0800 Subject: [PATCH 009/161] =?UTF-8?q?BI-110020=20feat:=20=E3=80=90=E8=A7=86?= =?UTF-8?q?=E8=A7=89=E9=AA=8C=E6=94=B6=E3=80=91=E6=A0=91=E8=A1=8C=E9=AB=98?= =?UTF-8?q?=E5=92=8C=E8=8A=82=E7=82=B9=E5=B0=BA=E5=AF=B8,=E6=9B=B4?= =?UTF-8?q?=E6=8D=A230=E9=AB=98=E5=BA=A6=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2x/icon/dark/tree_solid_collapse_1.png | Bin 371 -> 394 bytes .../2x/icon/dark/tree_solid_collapse_2.png | Bin 454 -> 473 bytes .../2x/icon/dark/tree_solid_collapse_3.png | Bin 494 -> 509 bytes .../2x/icon/dark/tree_solid_collapse_4.png | Bin 462 -> 476 bytes .../2x/icon/dark/tree_solid_collapse_5.png | Bin 417 -> 434 bytes .../images/2x/icon/dark/tree_solid_expand_1.png | Bin 308 -> 330 bytes .../images/2x/icon/dark/tree_solid_expand_2.png | Bin 393 -> 409 bytes .../images/2x/icon/dark/tree_solid_expand_3.png | Bin 431 -> 466 bytes .../images/2x/icon/dark/tree_solid_expand_4.png | Bin 401 -> 415 bytes .../images/2x/icon/dark/tree_solid_expand_5.png | Bin 352 -> 376 bytes .../2x/icon/dark/tree_solid_vertical_line_1.png | Bin 178 -> 216 bytes .../2x/icon/dark/tree_solid_vertical_line_2.png | Bin 217 -> 233 bytes .../2x/icon/dark/tree_solid_vertical_line_3.png | Bin 255 -> 255 bytes .../2x/icon/dark/tree_solid_vertical_line_4.png | Bin 215 -> 215 bytes dist/images/2x/icon/tree_solid_collapse_1.png | Bin 429 -> 495 bytes dist/images/2x/icon/tree_solid_collapse_2.png | Bin 505 -> 581 bytes dist/images/2x/icon/tree_solid_collapse_3.png | Bin 547 -> 619 bytes dist/images/2x/icon/tree_solid_collapse_4.png | Bin 515 -> 580 bytes dist/images/2x/icon/tree_solid_collapse_5.png | Bin 468 -> 538 bytes dist/images/2x/icon/tree_solid_expand_1.png | Bin 336 -> 392 bytes dist/images/2x/icon/tree_solid_expand_2.png | Bin 419 -> 476 bytes dist/images/2x/icon/tree_solid_expand_3.png | Bin 458 -> 513 bytes dist/images/2x/icon/tree_solid_expand_4.png | Bin 429 -> 477 bytes dist/images/2x/icon/tree_solid_expand_5.png | Bin 381 -> 434 bytes .../2x/icon/tree_solid_vertical_line_2.png | Bin 217 -> 233 bytes .../2x/icon/tree_solid_vertical_line_3.png | Bin 255 -> 255 bytes .../2x/icon/tree_solid_vertical_line_4.png | Bin 215 -> 215 bytes dist/images/2x/icon/tree_vertical_line_1.png | Bin 117 -> 216 bytes 28 files changed, 0 insertions(+), 0 deletions(-) diff --git a/dist/images/2x/icon/dark/tree_solid_collapse_1.png b/dist/images/2x/icon/dark/tree_solid_collapse_1.png index 9bd5051d11c794861e1e4680b06d2d7bbbe072cb..1b39baa92f0a92eb68a61c7eb8c54f1132475973 100644 GIT binary patch delta 352 zcmV-m0iXW!0*V76iBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5e;-Li zK~#7F?bz*Y!Y~lV@yAs^cY8g27n0|fdyE=oJE3oG0KPB1r+{2 z$qEDs>A`0ou>=4B0000cFUdj9xv|TaVl7ijTMhIsA0_OM;^g-FG=V!C8*BMm*qF(Q zci^>^-M^gJQt4j01%A_uA#gM+f77{*T{{|$?9ns)p^;J2Q}=R#z5DQmc2l}ur{^10 zbJlB5te0;TBs8#D^?d$UxmSLHPX&2&N#~yT?xJV-yK=9TbT_lVx_uznD^O_Q+FHC? zv)jn^T0>i!I{NSk%BB>)8{ac};PzZ9tk3qLq=%~gRU9D6>14Iz9e5#MHYMy_jywaG ysh!F3z^(HAgLwsBDpm>G_aFiQ00000aC89W4m=}mZA{Am0000-G<8Q|y6%O%Cdz`(%k>ERLtq#Zz*gAGWo$}GG$QPH%X!_&nvq=ND7jk}zO z3?y0~27kQ8Dzi}d3Tw;(Um1s(1GOa#a~CM@XyCrG{zB8=iE%UZb)VHLh-hiZ6;F!b z1R4Yc9$w2DR;@bqcGL9r+0#;&GDT{y`E^?UY5qpWEple>xU$n12PDKX-pQR6CoU}Ky2}_R%Hl!s5@7hrRF~@D)Or2D=91~%!1xHln8?IX}SRDD}m+k+UAD`0Zzu&O= zi1WEcED3qS>*w#kbN`g2Xn;)n#OhMkTk-#vJd~d^U8zIpK*aRwx%$apYI$xi5OQaj zxWEaJV23OK1B4woz>O29GC(^)M_>UKFn&^k zLa>w|zvoo$_mix&snzPM?f4HsL_|bHL_|czb5P*DufpXFw${$M9TFWwhlH(R$G6wL z3EbI+vVpEuC<`dj4!jB7?g>i5e^BXOss%p6fni{4p_?v4`D{yt%;s+46J*9NUAlt{ ztUV9^(ms@i+7-fm0Z< z4m?J}xxxEry}O(9`u_GJc@<|J_$qQwx^&mF5BR$w_<|wRz>%?t!I<5}f9hD`v{X9I z!x_j!$zvwj1Gnc=X7lVAcIi~HrD6gHrIXc;cHk9sN!TS6X$F?2U10pc&GqX4_xqD+ z1zu0BD7zlH%GwyyN!YQC$bJf2JTC<^;YzD?3|u+}E*%4xj)6NCo5D8)tJ5 zIS8;mc&_o>WP(skW2Qn-QSYbX(~7bMr!-G#ss}mpS-Ocdu&_F?PH|v1Nk~&wZZy2n zF*DZtvt4Ft=0*pb_iy?cm0%#;NJHzi(e%@@Ilh~9qMc5fmbBX2x9q*gwqff8v-Wk3 zTbNF*VVZH;p#E>8lIHq?K>i0@=L{KCl$>`>*tROF&*hg9Q{Ds)Z-#R_`442tZ&*I- z$*ayZ_2h)CptAiktVY zef@d8T=K6sZnAQ& tq?FKOEr#b340Dnh3i=oiShAsU%>2b&Z#@@T`yCkI44$rjF6*2UngAdmsxtrp diff --git a/dist/images/2x/icon/dark/tree_solid_collapse_3.png b/dist/images/2x/icon/dark/tree_solid_collapse_3.png index c16ac4fc3c19ee4640a9e2f52587f74806d62d78..ff6c4f653b458cde8446d49fdf94f09b81b7877c 100644 GIT binary patch delta 468 zcmV;_0W1FQ1N{RbiBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5f09W= zK~#7F?V8O^!$1&5zeSv>fDYV1k_I@z1x|njHQ)x|j?)8&aDo%3P(V^aN}vH6aAqPq zvQ{hEk!N?K$vkP~WV1^0GW#C`iMhQmYYt@M3@3&OYsZAOW5U`oVeOc(c1&11Caj&4 z6F!FkbzK*9xf)XUWAU@Qel6Z#e{dK}=iCM(aS(un`OBAx2cMA4NqCNth-A3Knqmc6 zW)u?$AuYU;$U+OXoc5uZu#M8%NiIyybV~8pM1jQQ&hP~iV@+B+wzQO_8I=5f+8wBh z&Rn~P=JK^)L`%|&{*$UO@T0#!t6(yt3KPFQufGM#_!qcDBw`Eq!E(-fe;%y&^l)81 zKi(YOTH5C>P{vKV&Fm|MzXSS5M4}1@`XanOy9w2aiA_t|v3WQFJSb(m$0NCLb1oHa zp6$b$^jJbm#Su6N9W=H`3(p`6%T6JPq%fy;g8l3h*jtOhWDulIT!rC!m?U=B3OjtWPj%l;)g_$j}j$Ok@Lc|OJ0000< KMNUMnLSTZvxY0TQ delta 453 zcmey%{Ek_%Gr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~Viv!{z=NCo5DS^i#! z9Yl`p@5t7FAXwG(g{dj;sJ*rLyaVfEI<><;GI8w^;a9lAyhZ(m;GPEYj(im--iu4V zob`F|yY7R;3_jhzsrSyzR&h|%(_8;q;KUie6B8LGC^IU!Gdc9JG{|r=SPC%|sW3e8 zU^uZ*d;_=pt6lRViVafU)SrHRyZrZ;fcQk?XRd*39=I^N`#AhCHa@b{i1B;Dp;ERr z8@EIpn7-1LGd+njq9Sf-!`XEgc5q+NV<_6hxj{2Fs>a07QSF!!^S23{OBqfCYWA?0 zbjMhqzb?MdbMyKChq5|Tcc1rqacZ7cxWtLikMHiknkU3~tor=(?e$;YD;uq>XW3C$ zR%BsqZ!7gTa>3a`_jr%S`P%i#7wsO_DlvMplsqlcejXm19JC-;0OR=#a^ z*x(V9YRhy85}Sb4q9e0G*S;mH+?% diff --git a/dist/images/2x/icon/dark/tree_solid_collapse_4.png b/dist/images/2x/icon/dark/tree_solid_collapse_4.png index f8b7f8ef2af0a75bb96c9e8d9da854b2282666c4..fb8e354d394d08e2b2561203f26f209575fd6909 100644 GIT binary patch delta 435 zcmV;k0ZjhR1Ka~4iBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5e{o4f zK~#7F?b^Xj!!Q&E;NOTd6R<%RXuAL>xWEaJU!`hSv@HjUc;wPQPOfXpth%i0%=loNN2DXlYtz%&87}&al z3w#U(bzK*-Iosygm&M2L_HFU}e}LUAopT!u6@}E?NEkFAGwTf0|(!k=g=k=$^KK~1xB9YXA`}lA!e|R1}?(XKi zyuZEJySa4eDzeWv>9%GcrG!^N-$*EF;K;d%;GEsWj!B8bl64%1Gw_|#X!m$z58SLv zB^zh^ut^UUn<@_AptR7~(hfX>E+2LZMVf(q)lQ(e;1+rR!L$M|k(LkJcOgPVL_|bH dL`3xG2i+c1WR)*|S^xk52>?k&PDHLkV1g{A$_fAg delta 420 zcmcb^e2!VMGr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~VivZsqlf6-2yXU`EaZnVWeqGT_WE=By35Gez3om^Su2-QZe#uo40r}lS3j3^P68 diff --git a/dist/images/2x/icon/dark/tree_solid_collapse_5.png b/dist/images/2x/icon/dark/tree_solid_collapse_5.png index 5620b08869142f7c91bdc53892587e668a64d711..b3c53e8a0612f2b45c4b83ac7c7350fb1cdbae2e 100644 GIT binary patch delta 392 zcmV;30eAkP1F{1liBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5e@96~ zK~#7F?bypr!$1^;;WLOe70`hjNYVf+*uV;qpa(Yq1(+UKz>XEGP(V^aN}vH6Ff+nN z!Hi@i-|Haf|D=%<$4YcEk86(v00000046WUKwZ~GJeuC!j|$=H^+Yy zxV4ULC0mQwW-?+Ocom1;gN($ff6~4*3w)qGLtt-ln9gH+Z(5;|?Yf7LG%|+t)a_kh z>pJ{HvnX}v>GncZY}MLtv6ip9ryiePtMkjU(jR~N<+;jsrfcBnt>^Rm%(?Ur9LtG! z;65o_=)BKfcXM@G-d>*#zKin?e33bqhIHGrcl!N6@F7R8firVaojJS7UR~pfvNUzn z;Sr=osn(8+9=O?;a;vj_7}7)KZWRXzGTK>fSqEOoRth_pAO=( zK~#7F?byFf!$1_r@t+Yj3owEwa27y<7V)Q}V1rath>9vqKtYKZ04WTROpp;+fCbE1 zawKA$I8xrbi*nzObh31b66KeBch8mp000000D!C%GE~=f87^n?H7$x_AtT4K)%^Ie z{OxT3OY<;hvNZ~$k}zXX07@h*=_-uxc9cqFUsk}05}^c? zx$Fb*>H}7^n_Rcf|89I`d(N*2y~Mmb_x|xYxx0UuXiIOe&l}tQC;i-SSk0OW?Kwm9)YJSo8o)|a=O_ezUP&!dI zxgp7p!S=bH`#C>^5>V#6N?_F2+wc0Ba^Mv}C5H!?9;^eH%3qA{000000000E)h~qd VJw5`#{F49x002ovPDHLkV1jFTos<9o diff --git a/dist/images/2x/icon/dark/tree_solid_expand_1.png b/dist/images/2x/icon/dark/tree_solid_expand_1.png index edae4d431c55a65f62238d802a49db3a139d9bf3..05a11cd9c1f7cacd50a43ef01bed897d3f83b756 100644 GIT binary patch delta 287 zcmV+)0pR|$0?Gm*iBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5f8R+& zK~#7F?by)?!Y~*`;T!SU3EaR1)CF9?P29tMbO4>eMO+{zU_n8Uw)aO#&j+RLOX1Ll zq>%ss0000$^O6j5&Z~0TDb^{abkj(4dDPg0;^gP~Z-P75a$MxKEyr3W?%+%L?2a-i zL#4a41&*`VH^Z z-(7)1gCob{P)tj$Be-=0x6VE-y===kB$;+rJMQ4EylU)5M$X{+YS%JuxP5s3Xs+Os lV%69oKOz7C0001BiXOf{Ael?%--7@E002ovPDHLkV1l29f;a#G delta 265 zcmX@bw1r8rGr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~X2NlzEYkP61PHxBYP zIS9BttnW>i-oT>Wz?O5s@6F-54Gb#|xaB0s3fWY&oXO$&yszaA?;&n!HEl+q89=a7 z#B$ZvxSX9@*8;pMPo50i_iXxp?R)pxe$09!^>p?2)sr``U|3wcjNfw8TT}gajC@{w z3{a$(#rI=lPy7k>wJDpAEJ^TXnz4MFrM5)0L++g|_o8`CI4>mW=O4`vI4S4=LWUfg zZu{pv+<7mUaS>Aqm&Jje2eJtPd&JH|+`;he6>~+Jzopr01!T8 A^8f$< diff --git a/dist/images/2x/icon/dark/tree_solid_expand_2.png b/dist/images/2x/icon/dark/tree_solid_expand_2.png index 5951e659ff9dc06e8fc2a35f65788ae9b07939d1..6a744dbb0162aa261a63e7232924f108524101ba 100644 GIT binary patch delta 367 zcmeBVp2@7(8Q|y6%O%Cdz`(%k>ERLtq-{W$gAGVp{kd5*QPH$s&(p;*q=ND74PU;4 z0U~V=-*;^kz0t^;Cp&!_0|-+zG5^NzB)6JJmdd*UnpARO5e1BvU2- z*0X;ME)bA1ubJt6t@<3cj@J+7>|U@)t;8dzsp8MyKgI`V7F+mTxXSM??zN@a|KY}H zN6(7TP5oI1dH+b(vqc|IcrB4L_nXC^Cw5PB7A`TEHb1^TD*xNdidjoEj=kTO`R;6w zl#EQ^yfbFEI#kL&SPMOm+xI+f`wZU6PisOd#l)>Enm(=T(8ww{w>!d`&-@?ZtwaFVw?_B=XbnDuoM{L?B%oLeU-hBWJLk3S*KbLh* G2~7Y;#G@qu delta 351 zcmbQq+{vui8Q|y6%O%Cdz`(%k>ERLtq#Zz*gAGWo$}GG$QPH$s&eO#)q=ND7jq{$& zjuLGj(~oZEjc5{8;pM0j{eQ>ihNEBD1I@4p2Ny>)2ylC7Z4i`>NLP>(nRxd@?c~<) ze-9c6I628}dSlL=1_MD>OkZp3gSG`1t=+Zmx55d4}NQR-1ufc-dA?BLQhr?wqc1cT&ymRXIfBW=n+n&9<!JBk^OSTa1S z5mPu`^P5Nii?Qbf(FC_c%x8EmGKM+dkMJ)oUBB7(G0(p~Pi=S8Tl@6BohfGo>3}(6 k4zt2JMuF!HAcJZd4UM&fYs9m8fnmnr>FVdQ&MBb@0JNoyC;$Ke diff --git a/dist/images/2x/icon/dark/tree_solid_expand_3.png b/dist/images/2x/icon/dark/tree_solid_expand_3.png index de68cf779e83f98ed96b14d5150f45e31b2b07c1..09e0ad07d5bbaf1b5ec611f63efaf928063e8784 100644 GIT binary patch delta 424 zcmZ3_e2H1HGr-TCmrII^fq{Y7)59eQNZWug2OE&I`g5~rqM~Vix~Gd{NCo5DS%!Xx z9RyteD`oi|;N9Wi;oRB6!W$A$(Edc~hk(e!CN`BN7cNc^E@0llAZ}nhVJbswh55YR zwI}N@Wj)H+a;bREllQj{%(AqVzixFwF#3jp#v56#>h?qT7H%kqF>hKt%#{eZ{&n7z z!&C0PK6yBN@7$RB-U-J|T0V45o5Arox@^v+ilP#Mc(t$RJFQjr3ih2z*`t%aqrPU{ zmbf^XaF1k-0dmK?GBSr`h0Zf{WZ^?t=|H*;Nqo8l~3+CstGBkYq$g^KIHtF z(R0UD(Tm%BVbR0$AC;PPth9E%o+0J_diU(Chu61m`5^h}XWftIf9I>K&zrIAv5|rI zcL}hY6Sw4a|C=fy^uc<@mSa&B9MK_V@@)}ZuidR3KJz_Zm3iXHrHw-KmYHR#UDLX~ zW#{ipt94vmdKI;Vst0NcpM AA^-pY delta 389 zcmcb_yq;OHGr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~WNi>HfYNCo5DTW39) z9c9`+rXStR8_^`H!pl)5YM&>!=D?ga2QJ@gXp%e1)Dqzk)YyCDfR(bP2S=j$pY%;1 z_Ss9Y9hx*jUAiny_{QYhyW92nzrA57-R^8?+#^B ziGTBK#-S`$j^f%%v)wzbpoPiYz`KLb;C*$%y{k_x*T0oq_C332)_)yaA)MZ-V?6W6LijeS1D^vSiBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5e>6!% zK~#7F?b*Ri0znwX@i)e^71)6dAPsoZi=Na(YjE3e>A?e@^u!4YfC^}Y28M44n~=>W zu!~3ieLH-YM8S1$(Dp?-cBvg1zfq@HGfx zjCXc=ION)&@nm!U8-IVHooNVRe~FF)2rM|g_yYN)9g>j+kI)figm*0Ln1gF*#{eYk z;5lOyD)!E)ZqkDFE$y9xy;HDvT3Rw~mz+0f$>#D!{UKYDmiC`iiNnPI-?DKqvj&?P z+DogATV#?uc%Kv(YWEwj`*?dSKHr}%ZY^E+g7#L(C~I)TXYuSbEqSM4OYaoy9erBb z*_L4lAZ;{O*ug_^rPzBAF@w|44nW*+Yk2<7Siw`|m12+iAtE9oA|fIpB7L+5wof1ceM>TR4zO@HaOE6fTbItk?ZlCI!czRu z&v{RtskJy%NE)TH-I(~hefcHbvNs)1L>jQ8OY9cM0yUqW+4k9Y-tV7ZZExSNk3X&a zw`caUpGQ5LmANm}&Jf%f#r>g4__}h!!7JBT;+>zVQ=PTQM0hOu>L++JM!7n*nT!tvXmZ)I-xV)%Tx%#SlnyJ7b2*WDNIo_%^R zo?B=4qW$(-D})lR=2ynQF!3njawxI|;$312#|rBB&wn-L6c9~tIKX>`;~wL&Bdb5k eDZxPdD|x18`sD`y@6P~+9fPNS8buaL(Y-jp$px)a-|2*6L=9XFwTGh zm4L?lKg#$%5TYRjUXn1AkpKVy002Pof(*nMpVIC{zGfkWm3q3DjT~FaPu%XWCb+Ro z+d{U6X&cChb?_oRc7HOGUX|vje_8OIZVbVtBe-+~m(F?|-m{%@KB%KKmM;$v{g0;g z`)5__G;uPnTW_Xoa57hSdA9K=C*HxwppZ&O7)+-L2)wHMr$n zyf}uX(h*!bf=g#UEbT1ISO_v&S#4Mc4`nOIKFg40aK5zz87{cBT)#J~CE%HS<=AsR hL;wH)006)(+5lHrE5ZuQF+l(T002ovPDHLkV1f)|k`Dj? delta 311 zcmeyt^ngjRGr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM}JX!&gri$B+ufw>S23 z9tsd?d#IoEmZ|Rn%dUn6Ykyph+|f8yIN~LX*tACsO?(T4cXV(c(au=dAz}GkXwQ3Q z#R*D^`ka*mFs&2F7p7mo0X@o^z^4biwjRdR+=$4dw5PB0ormK+Sp_?_d}8 z-PGoC@u|k}hGjBh2DTCGH%`a*WJBD^@c$K8I-k;Z-)Y*s8$d#yu6{1-oD!Mj^m7uyo oD1s>N)o+c@Bl4@nzW!z~R$|?Dt)$2s=l}*!S3j3^%uWeS0C?~`tr!k!k_df(JD4M^>^|I{iIg2U6te>gTe~ HDWM4f^N=Bd diff --git a/dist/images/2x/icon/dark/tree_solid_vertical_line_2.png b/dist/images/2x/icon/dark/tree_solid_vertical_line_2.png index ab5584b5fd5a22177df4da114b6858df3a6fcb96..22688bcaf3ff90b56ac82722169f9b45b50dd22d 100644 GIT binary patch delta 190 zcmcb~_>xhvGr-TCmrII^fq{Y7)59eQNZWug2OE&I`g5~rqM~Viou`XqNCo5Dn}%FW zh5~ID3qQ7%#T_oL;I%$4A(+FWoU_sT!~5z9N-COmL4Kk@jX-eV_R6xdo%h^w^KIn6 zKfQi1sP+V=&5hJm?ENEq8d!N^y}$ W0};{nrkr{pb3I-CT-G@yGywomKSwM8 delta 174 zcmaFKc#~1FGr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~Vio~MgrNCo5DO9v-1 zG6=X_+#k(UI-!L_<)K2b(SsJPzj17zmvaNv13|<6@7Jfx_&=|fFW4P7@7|C5JDlUc zy>fnUwx5AfO5NcxOU4|AUf~6WOeTH}$2c!oU<%qYoW01#RXydBAILmUS3eh)bxsLQ E09&X$A^-pY diff --git a/dist/images/2x/icon/dark/tree_solid_vertical_line_3.png b/dist/images/2x/icon/dark/tree_solid_vertical_line_3.png index adf63d3d5b2db873857314145a77089b67b3bc8c..d155fcdadb8a86f1994dc99d07bd73694e2f516c 100644 GIT binary patch delta 212 zcmey*_@7a+Gr-TCmrII^fq{Y7)59eQNZWug2OE&I`g5~rqM~Vix2KC^NCo5D+Z%Zs z40sqEn{Q0$Go8_F`eKIRgL${6+0_TJRakl@t1h}xH%HmuBr@5E?Xsj#y20FoCD<6c zfon3>o6P(DOZHib@V!MR%^N@6o?5fz1g;d%A literal 255 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=oCO|{#S9E$svykh8Km+7D9BhG z z3LwYz-qT(9tgLM9WxhGU!;EEuKK z9Uik}%wfO~^pkxOKL6qK$Nx%?|KtW*1_uA`OYdaj*tUv?X99@t>FVdQ&WS0Z2>`LG BI7|Ql diff --git a/dist/images/2x/icon/tree_solid_collapse_1.png b/dist/images/2x/icon/tree_solid_collapse_1.png index 3aa9463adf3154e7c838fdbd768fc776c2c6da6b..94ed363d4d17f8ed38d8b8af65497097bb3ff8ba 100644 GIT binary patch delta 454 zcmV;%0XhDy1MdSNiBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5e}qXy zK~#7F?buIB!%z?g@Ne=;#EsxiP+Yjp1^lxTMK9n@ynwxcC-DLnq`1(YzynwjT#L{W zO~&_9MQaOHGOv~P`z_KmGz}lk%u5F#A|fIpA|j%>Coqt1?qyEXV?~;k&_0Ke)vZJHUyD$9W`Pqdn1u^$ zT*H$suOIBdl^0>Z$n&H8seb4Ei<$nyZmF??DPs-KJ2ov#>DqqgTryOr+9)#7!4s_% zF7r)nAXV^d!ZTjuc)53ubL^A7JS|_|W7k3?&fAVDH5F}HT zX4qHJGl34R!-c**BciB*d-vBPwOG}x8{Fn0?6}Xw#ARvTF>q|om7ysqrqGecnfkw_ zmu@?Bt<807*qoM6N<$g7JXWB>(^b delta 387 zcmV-}0et@N1FZugiBL{Q4GJ0x0000DNk~Le0000$0000$2nGNE0IF$m-jN|Se?mz_ zK~#7F?b%UE12GhZ;ghBa^}$D}xP)23xB)ldPF#R=1MWu`U{~N0MDf7~5ei}_P6koN z87P$8Odj+T|YyOgDExYOs$qY{}br8syOu4T!0 z|Ji{S;LlpYJt!p?F52f>iP;n&e-3{0e5;feXR!#$3oujRD1fH2IIVTOeCi%?^_a+E z%mCk3+|V=PT#xjc-_%`25=NHs!)4P4lg< zG^W0Mv3$x`nI+e{#B86kG)G)7?R|ba>WPTlo3~TSwx3dc!LO@#=6lTyH|F})G9e6q z`ik!-9*&>7Flj??+%fgE0~4++U&_JPKJmTn?YYy=a~*I0-5Fk(#=Lm{-BPX#iiecs zg)a#*m7X~)SG%Xl(T&+$ZvCQK!9#Ydqw0(KZm;h3G}684$25D{l=IC(2hS^S3S8;$ zo&Qy<|J1Q(H!U`8@##8kw9CY>Ic7aeZxPV9TzQGSUb7W+g5rWrEteP@v|c^>qe*(( z?eENq8@}zoEHtD0Nqp(!h(Fg3SI0>^|JT^z&iZfh?cMB;_<1^YY;x2abJ3CMS`nVN cu`_C!ls#(O&9@zD07f{2r>mdKI;Vst0F#jMOaK4? delta 464 zcmX@g@{?JyGr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~VipQnpsNCo5DoBO>E z2Z*qJcyH#qqIq%1o!D0oq~Z^V3&^m@AMkvmbLr&DgD1-`vTs=3toLq_g+)hz!0c>4 z0af1(qVMKE`dK$&Tg$)G)8|zC3pI2=frlvb^l7_nRnpk)eBY?voB!^ChqT_wW74{9b#y_*|2sb_P4>R}@uHw&!+!H4 zbGDh8*X4dc%yQva=-Y(Ve{`)IGHoQTKa8BgAam-R{;!)iJ2&eY`!Lj--Cw)b*p>4D z&#CJ>ZFO(mdBu5d$=5E1Lo62pPN$xoz20g05*b+_M)wzjin#JLa|p6 zu~17J?QB#8YY`%+mvQGrBxf`iGJDZ+ej&NbvLW|lZ)fM`4xnI;PtJ(n&>>3j#V}#* zn6P$CSUV=H9TV1$32VoMwe#hKf6E|1qpGo2OJx zBBZAT4-*&pAol8a)vMj3OcTybO)O82tt~@7sHgjX!@&$H>?+_B=UQFcvut`)C0gXH zF#|XJhCmd)EM;Ih%zSUyZ*^^BZfSn{qvg^Wur~gx2{0nUMcyZ*1q7;FhZB0Zfq(=R zuAc8_=OUzY);*o(EZeA0e@JXu(vAs-#<>~?C4#pja!?9imToWhI4TEQXPaTEWxH@$ zMv6NuA=fKG5Lsbga7$}YVt84kKB3}jili{5)y3uoH+<=z2ZYx8zmJG87s-7gK38A9 z>ftTt#*iQK|FHv~5qtEoU`$v$CafJ3){Y5l$Aq;}RB delta 507 zcmaFOvY17&Gr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM}JX;|@<3$B+ufx3l(p z9S#s_uivieBrCJ@=v`I5bst%47!NvrV4SmLuB(-$s>M%+rsn=kS_4DY{?|#d#AGh)OB5F79eIf_zOkG!?EC)^q=WPR<@H8Vj5By4UW%mIG5G( z^j-44z;7R1jH?_btUDkq#FWrCJrOp|j8Ejwl!ajci2S!H>8^OGklJ{C7BS>4r?4UXh+ z;QjnJL_R$=udvNLbMHaMJeH6nMRK2Csq?M)82a48;gSN-%MZFATt2B_&Rw7R;qO$p z+SiqJVj#E76i)CvFq diff --git a/dist/images/2x/icon/tree_solid_collapse_4.png b/dist/images/2x/icon/tree_solid_collapse_4.png index f9b67b9cdd4f75ed0ac44c8f337bcfbb7d79ff03..643f0123b54edc8c3065c5f108b013cd1f82a025 100644 GIT binary patch delta 539 zcmZo>Il`jY8Q|y6%O%Cdz`(%k>ERLtq-{W$gAGVp{kd5*QPH&irl*TzNCo5D8~eST z0!7$A6z@se!jkJ~-GD~%RYnjkil(TZJs&Yo3 zL*-YSyT4sdEnoQQ+|?cP`d6Gk9ejWK?|1xs4)gEY+f1xH)S!}Z!Xx3jCkEn;eV}6C zQGa$#MOV=5yK}0`B0286FAwKm$j2T0Qmp>!2l^ z{NKtp?T-GbQ_?Q>?D?&-WmgYqu~t2f$r% zx928L*7069`9R?|%~0dXLI>{~ZwjrApJsQ;)mS?^I^BBW+SHh3I)|5bahiPfN;o1N zA%5qOl!&yfSZ3$S9a4{Yd=g71ZhR2dzQ4}iZrXum9_zS2CJ4U#uhAgj#G%*%B3#V( aF`lWcIsazeiW|WAX7F_Nb6Mw<&;$VPGV#O! delta 474 zcmX@Y(#)dR8Q|y6%O%Cdz`(%k>ERLtq#Zz*gAGWo$}GG$QPH%1hNp{TNCo5Dn;X3j zJ4mp9_;2dEqIvO_9lNg_+`6wpU%`UIu3_?)%^vE@#nj~;3O)#aVSMvyLHBMAK0YOp zBj3)r23}%`e!6@2q3{14y*M&w|0%wISCvs|=f0hr^Bhw|HI6eZkYR2p;$b*t$biaO zZr7ltQm=buw#S)gI=ko1n_Iu`id62OqbK4Xy!|NV#G|rvvf(!7`Dzz6g$`t1TvgD%DrIQokK}~?V|6z5IkA4r6FZc zi$?@gKwofT%LLzv>aXt1diLGsiptq7!8&#MKTKxaxpMFR>-x9va=sfZ{<`&QeERN0 zrWKDiUAR%yp1Rv$X>TFxyjD(!fd4<1T(-BG@w>Xw#`>OCj&UaEfs)N%H`@9v-}%#e zPvBEl#um;6OQvm}WgcJpz;9p9dz!M8a!rP#=nVi$8@pIH>=w&{Z~+ef<^y-F|;fR5`I%SmjxJI N44$rjF6*2UngGXw*suTq diff --git a/dist/images/2x/icon/tree_solid_collapse_5.png b/dist/images/2x/icon/tree_solid_collapse_5.png index 55e059d6f9e69e0fed77ee337357be3d4d456df6..0cb0d5d73e5667cb3e0d242d5639847119d3351e 100644 GIT binary patch delta 497 zcmV)%VPYRN-Oa*dB;%nH?fBzBqi_}Q?mNc=f#G55jq8m64+jyv+l9I`}4QjrI zcH*f8&e4b&xxmVExVQ1?^<^^Ah20N>U^95iUU`4xPw%i9%TLgNVGa*F6fI5O)S7Qh zu5F%5KJ-~yZ?qg5KQ3Y&=QSR$YN;VU+}|zjZI?^bA6ZI8;(=oyB>E|J};ac9b|rsa~qhWosJ=5UxbTxUs#Trq-`Az z;(q6&r3X{O$L%QweOFIhKJz00000NkvXXu0mjfLZ93M delta 427 zcmbQma)nv3Gr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~Virl*TzNCo5DoAzGJ zjv{Oy@{JrjT9>-K$-Q={Y;S|OfDQ|Pg6c9c&(x_$Pwjrec!txaNkdFbiRH+f9h*Bg z-Bjg#xcBCP8hZ~8?|*NnR~qYYW)Osezz`ml+%Lir#Vo$T<^Aigt8=_`nq*)3nC(K! z>H9gp%sL=r`pPJo6@gn|APgx&7pypIU=gsKEA&BnMjgNZFI&-!vy3Z`u`Oe}$?(UOTf2Jg(vQX+Fpv>y&vD)WNLS8Q|y6%O%Cdz`(%k>ERLtq-{W$gAGVp{kd5*QPHHHQP$JNF{Fa=?G0bA z!vP{kKNbt03@CW!AY<{C?T-X!lXQXlyTgAY1PT|#HgX3PGW!Lsdiiy)#tP+L+v(G; ze{SAZa_PfzPEK|KK`@y3NRngL-Nk`#&uTK2n(dxrd+%PdqqM?{WZvf;k6%jsEH-W0 z|AQs3Ji*A`C;zv?!+N&mH@?06#iSBltv+L4+0R3ZS;HfYx%B2Xc`tu(X`;MMUDmdK z_tMzhqy^u8W;H1+JXqRnXmH$NUYs?@rZ>U2>VNu)|KdOVEL~#7=k4MwT)cVmd56{= z{eLNUWeM06_x-w0BimB5ras*(ERLtq#Zz*gAGWo$}GG$QPHHH;i;#KV@L(#+nWbD z4;e_bJ=70l(Vr*kUceN4fc4H1+dJ;;7dYoQeth97a4Vxq@SykU|LltIi(hP1&6k!E z;slxm1R7owmR>AbsI}(l%D!sb_34t5r-GzvI-)CA-75dKoYBs&>!F6X;<|g+m-hT* z@o27(DcfW+Zz;z!Mz$I)8O9I`rWFM&0T1_xIo-ddT4Wp;-hbQk+$R=^R~J4f&ps^~ z>|l8$ZSlHS2V*6la85|n`+hV(pjEkn%bh{AuXTdW65cag+S6bP0l+XkK@rrWN diff --git a/dist/images/2x/icon/tree_solid_expand_2.png b/dist/images/2x/icon/tree_solid_expand_2.png index 2a94194d105119bca52d95d1cd2ba34dadbde731..bde83809a8885f906cbea4dd412c82246007e398 100644 GIT binary patch delta 435 zcmV;k0Zjg*1Ka~4iBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5e{o4f zK~#7F?by9a13?sq;qPQ+OTo@UEW|E0cK%d?U@uyD0XBkFdM`kTjb$#uD=;8pp($;& zvr+K|Y!af$II{@B5X>$)W8%s8z-CEUSYE<1vj-p|A|fIpA|mqy3ev^Ra^lh*MAVV? zW&7p!5hI#`f-F{0K|IdiBb+BAf4Ijr;N%XP#BKPGH7L;y_OZ>^>oX{sTiQnJqZ1xH zwcrw_41=v>uyqW!PI=?;Q#!v@PLk3r3TnPxHTr&%$r;UHmrWOk58R}8eI9~h*Z)o> zI1I_Z=f*>Yx1Mkgdt>D1{5|UUkM19yTsSZ$T$Ze3uyqW!j=|P3*g6JV$6)I?)A|Er ddlwGA0IK~~4-UBp?*IS*2>?k&PDHLkV1iv0#*F{~ delta 377 zcmcb^yqH*E*tZj`v+4~^8;p!&bf2vO3kSeuVvV6_2Ln?MxP$*!o5|yI+QL= zDbDvk|DQc~p|kfsl_yWwTwuUy<%ccXc6!IkPP%My_tVE;EtB=;DAYg%1ggx wZnn+6QNO0C{rK|~eKDVK#-?Bf?C3Yk!CThs<~hfDfT79Y>FVdQ&MBb@0GOzwJ^%m! diff --git a/dist/images/2x/icon/tree_solid_expand_3.png b/dist/images/2x/icon/tree_solid_expand_3.png index 2300dad28b7117ce8c4355bcc977cd87add662f0..e16463b19ba14241df0675a2f370b269a2c7a76f 100644 GIT binary patch delta 472 zcmX@b+{mKX8Q|y6%O%Cdz`(%k>ERLtq-{W$gAGVp{kd5*QPH%1nx~6nNCo5DTl>8Z z2Z$X1ct2C+fzl4k70o-Y9zAOx>{uW!Tf-oJ@aQ|ch6{RqwG8YB?>2Qbrv~kY zz;orY>($Ib9InDudBOhYmv346)akeCQeQu=o*RcBZ!Qd;ieM$GU;ssfe{6DfNSyE4S z)r8sMO@jFwWOpnz)-W@hcE;**f$34noJ%hs-Dfs`wf=l_K+fOy5lwd|+~IpvytdTc z_T9a=(#rP9@r!%^d;G7mNRragLkbiKb84Z{+AYb6&!tbsCzWK~vpf%sECx?kKbLh* G2~7aSQ`r#! delta 416 zcmZoERLtq#Zz*gAGWo$}GG$QPH$M-qXb~q=ND7En6>U zM~1eC<&zbbY&5%ZJ0nqA{{brt_d(_e&!Fh&)Qz7Qnp)j2FweN=B(1+7;ucFw%Go1M zA`@e0-qfkP&-_!dMdf$e;d5u$ragK0ZzG5Jv^A|3><)9770xjVJZI=AW;kNW@JNQC zkgvhwCxdKKROIa?bKg#@tbcX%>DA+N^YR@;FF%^K{W-hR$qvmNpD-TJl_%VM<`pS* z?q;u%I&c3%*D&?yxj(!7Q!<%adi#Iq>XuY1I(=cVDg~@ zVqqsGEBB^fBeOdD@%4*&wv1MH{uHK1t8c7ga+xxJF8}AtlaHNe-B+fSRvluRyEmx0 zis{dX=sYfYHbIDUEA5*dxxJUm)=mL-U{<(Hv_9U pY0vTc2ln3PE!aE?^nXo5x$Qa+p*^;rqk)0W;OXk;vd$@?2>`ITsLKEV diff --git a/dist/images/2x/icon/tree_solid_expand_4.png b/dist/images/2x/icon/tree_solid_expand_4.png index 7eb88716c4ce9cf6ae201f1e304365cc69bba8b8..9738216c4ec76563bfdc3139ead529ad8c7361f2 100644 GIT binary patch delta 436 zcmV;l0Zaa^1Kk55iBL{Q4GJ0x0000DNk~Le0000y0000y2nGNE06P5Ha*-i5e{xAg zK~#7F?b*Fb13?sq;cv3CU?bRBsD;?Y#?GHAAlQo*UVx2YV|p(@NE*vrfQ4XhK*T~* z+GuB^;tkj&L^tEiiYQBpUG|KIlkW*hNLZ4*Ovnx=z#qH2f3*IJe^SAiVX$@#){ep2 zF<3hWYsX;i7_8mc1y4XgJilIze{8&&=h)Npc6vWKS35)jiRoYTpKl&el7WEq!yD8Q zj&+x2_vNaIl0;VchwZ?cTSzi?&E2d(h-|Qnl~{#u(+eBuy(j*AC>G3LY3&%S9fP&w z)>2YDQ>#W%WeNp#UoShEr_90LPGfhg)j&RWd1-OzVg?P4Vz`a-00sF!f7)gdNYLOM ze4NQV9(vqK>#Tl!v_EQl=?pX2MnQ@Fctb!zgS$`H9gG;Bmb7EAb_~`|{Iul9GE#b` zV*I=kf@Fi;z%89YiE**Ut_lrTQupg4UK|BJo?mgNdA|fIp eA|fKn;}cXpRaf=6iD3W$3IG5}MNUMnLSTY@HN%ep delta 387 zcmcc1yp~z9Gr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~WNlc$SgNCo5Dn}%M8 z17wbW%)g~nQn+o$?iUZD^dGRYupeZ$@U*tJR<)>PICxO`1>>7n3%bPvWMa9Te!p4W ztg+PO>Hj$H|M%IWyfl43`8vhLCAiL;7w=rNF^P9hFavf}EWe<2Y46(DSw|n%E7|Ye zx%cwn9I~0ucJnv_wGN z;IYiSuk~sZvJ|fP8aB>s%5C^@VNvGq6^YM`Twow2^8WQZHeb|sa;O2rmBG{1&t;uc GLK6TZXrXWb diff --git a/dist/images/2x/icon/tree_solid_expand_5.png b/dist/images/2x/icon/tree_solid_expand_5.png index 7ae297dd6010a0ba8bc536e5ebdb4e2734144878..74bd1198e72c187c8529572c93df2d36205704bb 100644 GIT binary patch delta 392 zcmV;30eAlW0qu}Ns4&qi9H$Nspa2FlC02jfjyB8qT#j%&*6<82)&|HBR zpyCa=+z7 z2FK3)vgBtOD?>@d@0BoQ8|((RYJ)Q4VnsKN*5rz1uvY7$;o$Z~e*J!XCc%Cr|K5#5 mQFn|1h=_=Yh=_=Y>i7gT+eq>m0@GLk0000Q)|`N!&$3)Gc;BfZ$=lcMLXdTMEX zkwH85=m&joMLV6kXruaP!V0o~cEq2)^fR<8L2kjqLxK*i$_-rZ45H_<1){dgOiUNI zx>9lD?w{9>|E~S~>(iZ!^WMGBE9?7R$z<}i{K?TW-SkQ(iBJD>k zUj|%0<{|lnbHmd(J5d|9Pz$CN1uOv%E5s+XZ)uo$?ZcYwFAro3WL4@URB3MDonRLg jvh9AxhvGr-TCmrII^fq{Y7)59eQNZWug2OE&I`g5~rqM~Viou`XqNCo5Dn}%FW zh5~ID3qNX1GrRX+z--z*RizsoZa0$3AKd@0;OY@nvt*7IP$LjDY!80>=3hnMt$RCS z^-r&FUiz!&{IBit#pU0=o!&X?OkG0uT>Cpt1y%=NvMd*#bP0l+XkKS{qHz delta 174 zcmaFKc#~1FGr-TCmrII^fq{Y7)59eQNIQTq2OE%Fm05UiqM~Vio~MgrNCo5DOB*LL zGKjcd+-;pD$oVC{)nSRGmBOK(azFO}|H6UlLEz86{rjF2?Y;ZE;q%KMUyl7hCi`ns zxO~<2pR61gEEuKK9Uik}%wgyiUQozn;@5DD6GQMFn>FVdgvd$@? F2>>)nKQ{mX diff --git a/dist/images/2x/icon/tree_solid_vertical_line_3.png b/dist/images/2x/icon/tree_solid_vertical_line_3.png index a44f13db0a0b4404702ec5fbc077d3e4c38e8ef1..43aab5d89de4d35e046ffaace154bc3b3dc4c8f1 100644 GIT binary patch delta 212 zcmey*_@7a+Gr-TCmrII^fq{Y7)59eQNZWug2OE&I`g5~rqM~Vix2KC^NCo5D+Z%Zs z40sqEnd4uRorW51wlDPVGp#{R>xd%(wE=yuz zYQ{_4M9@t@J2ZFlv;<)$nX@oIsY^M#S`;9Ks$#@&~sf$n4QboFyt=akR{0Ksig A5C8xG diff --git a/dist/images/2x/icon/tree_solid_vertical_line_4.png b/dist/images/2x/icon/tree_solid_vertical_line_4.png index 7de47eeed52ba14ab3b402f52cbfa90bda0e0620..4b40cc497128631a59a520cae84d6eda57b790f0 100644 GIT binary patch delta 172 zcmcc4c%4zPGr-TCmrII^fq{Y7)59eQNZWug2OE&I`g5~rqM~Viil>WXNCo5Dn;Ur> z3rSq46Z{52t3nR``DW^VgYtWqETLdW9DhGMV@_9OJxT z!6>Ef@R%h7U9kL>!v0@8_t#BdZ+$KvXc-uM_ diff --git a/dist/images/2x/icon/tree_vertical_line_1.png b/dist/images/2x/icon/tree_vertical_line_1.png index ea9e933a0ceae80554b8a3aacf49cdf9c028dbc3..c6b8e799ccf120e0727955320af94aa020ee7e71 100644 GIT binary patch literal 216 zcmeAS@N?(olHy`uVBq!ia0vp^8bEBr!3HEncK&z(q&N#aB8wRq#8g3;(KATp15l8$ zILO_JVcj{Imp~3nx}&cn1H;CC?mvmFKz^>Li(^Oy5WBTpjr4 zLBfL_4{UGbG;2QS-*}_c{(b%C|Hp64IpCF`xDiF4+2WvD|`E4q>Bu6E=?43oHH<@G~-eHDvjyvf&$0 PCj*10tDnm{r-UW|@2n#$ From 0038b76320079328d69d27e34e87981d414d05af Mon Sep 17 00:00:00 2001 From: iapyang Date: Fri, 22 Jul 2022 14:44:41 +0800 Subject: [PATCH 010/161] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E4=B8=8B?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/cli.worker.js | 29 ++++++++++++++----- bin/cli/worker/template/action_type.t | 0 bin/cli/worker/template/main_thread.t | 5 ---- .../action/action.worker_ability_test.t | 13 +++++++++ .../worker/template/main_thread/main_thread.t | 25 ++++++++++++++++ bin/cli/worker/template/utils/action_type.t | 8 +++++ bin/cli/worker/template/utils/payload_type.t | 13 +++++++++ bin/cli/worker/template/worker_thread.t | 5 ---- .../action/action.worker_ability_test.t | 24 +++++++++++++++ .../template/worker_thread/worker_thread.t | 12 ++++++++ 10 files changed, 116 insertions(+), 18 deletions(-) delete mode 100644 bin/cli/worker/template/action_type.t delete mode 100644 bin/cli/worker/template/main_thread.t create mode 100644 bin/cli/worker/template/main_thread/action/action.worker_ability_test.t create mode 100644 bin/cli/worker/template/main_thread/main_thread.t create mode 100644 bin/cli/worker/template/utils/action_type.t create mode 100644 bin/cli/worker/template/utils/payload_type.t delete mode 100644 bin/cli/worker/template/worker_thread.t create mode 100644 bin/cli/worker/template/worker_thread/action/action.worker_ability_test.t create mode 100644 bin/cli/worker/template/worker_thread/worker_thread.t diff --git a/bin/cli/worker/cli.worker.js b/bin/cli/worker/cli.worker.js index 3549e75ca..85b4507c3 100644 --- a/bin/cli/worker/cli.worker.js +++ b/bin/cli/worker/cli.worker.js @@ -1,17 +1,25 @@ const fs = require('fs'); const path = require('path'); -function scanAndCreate(structure, root = process.cwd()) { +function first2UpperCase(str) { + return str.toLowerCase().replace(/( |^)[a-z]/g, L => L.toUpperCase()); +} + +function scanAndCreate(structure, workerName, root = process.env.INIT_CWD) { Object.keys(structure) .forEach(name => { if (typeof structure[name] === 'object') { fs.mkdirSync(path.resolve(root, name)); - scanAndCreate(structure[name], path.resolve(root, `./${name}`)); + scanAndCreate(structure[name], workerName, path.resolve(root, `./${name}`)); } else if (structure[name] === '') { fs.appendFileSync(path.resolve(root, name), ''); } else if (typeof structure[name] === 'string') { - const content = fs.readFileSync(structure[name]).toString(); + let content = fs.readFileSync(structure[name]).toString(); + + content = content + .replace(/\${WorkerName}/g, first2UpperCase(workerName)) + .replace(/\${workerName}/g, workerName); fs.appendFileSync(path.resolve(root, name), content); } @@ -33,15 +41,20 @@ module.exports = { const structure = { [`${name}_worker`]: { 'main_thread': { - action: {}, - [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread_template.t'), + action: { + 'action.worker_ability_test.ts': path.resolve(__dirname, './template/main_thread/action/action.worker_ability_test.t'), + }, + [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.t'), }, utils: { - 'action_type.ts': '', + 'action_type.ts': path.resolve(__dirname, './template/utils/action_type.t'), + 'payload_type.ts': path.resolve(__dirname, './template/utils/payload_type.t'), }, 'worker_thread': { - action: {}, - [`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread_template.t'), + action: { + 'action.worker_ability_test.ts': path.resolve(__dirname, './template/worker_thread/action/action.worker_ability_test.t'), + }, + [`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread/worker_thread.t'), }, }, }; diff --git a/bin/cli/worker/template/action_type.t b/bin/cli/worker/template/action_type.t deleted file mode 100644 index e69de29bb..000000000 diff --git a/bin/cli/worker/template/main_thread.t b/bin/cli/worker/template/main_thread.t deleted file mode 100644 index 8df764495..000000000 --- a/bin/cli/worker/template/main_thread.t +++ /dev/null @@ -1,5 +0,0 @@ -class CrudMainTreadWorker extends BI.Workers.MainThreadWorker { - protected initActions(): void { - // to init some actions - } -} diff --git a/bin/cli/worker/template/main_thread/action/action.worker_ability_test.t b/bin/cli/worker/template/main_thread/action/action.worker_ability_test.t new file mode 100644 index 000000000..42425b859 --- /dev/null +++ b/bin/cli/worker/template/main_thread/action/action.worker_ability_test.t @@ -0,0 +1,13 @@ +import { WorkerAbilityTestActionType } from '../../utils/action_type'; +import { WorkerAbilityTestPayload, WorkerAbilityTestReponse } from '../../utils/payload_type'; + +export class WorkerAbilityTestMainThreadAction extends BI.Workers.WorkerBaseAction { + /** + * 通信能力检测 + */ + public communicationTest(): Promise { + const mainThreadPostTime: WorkerAbilityTestPayload['CommunicationTest'] = Date.now(); + + return this.controller.requestPromise(WorkerAbilityTestActionType.CommunicationTest, mainThreadPostTime); + } +} diff --git a/bin/cli/worker/template/main_thread/main_thread.t b/bin/cli/worker/template/main_thread/main_thread.t new file mode 100644 index 000000000..75f8fb674 --- /dev/null +++ b/bin/cli/worker/template/main_thread/main_thread.t @@ -0,0 +1,25 @@ +import { WorkerAbilityTestMainThreadAction } from './action/action.worker_ability_test'; +// 不需要一起打包的话则不需要引入这行 +import { workerUrl } from 'fui-worker!../worker_thread/${workerName}_worker_thread'; + +class ${WorkerName}MainTreadWorker extends BI.Workers.MainThreadWorker { + private communicationTest: WorkerAbilityTestMainThreadAction; + + public initActions(): void { + this.communicationTest = this.createAction(WorkerAbilityTestMainThreadAction); + } + + public testCommunication() { + return this.communicationTest.communicationTest(); + } +} + +const ${workerName}MainTreadWorker = BI.Workers.createWorker(${WorkerName}MainTreadWorker, { + workerUrl, + workerName: BI.UUID(), +}); + +${workerName}MainTreadWorker.testCommunication() + .then(v => { + console.log(v); + }); diff --git a/bin/cli/worker/template/utils/action_type.t b/bin/cli/worker/template/utils/action_type.t new file mode 100644 index 000000000..c92de897a --- /dev/null +++ b/bin/cli/worker/template/utils/action_type.t @@ -0,0 +1,8 @@ +/* + * Worker 事务标识 + * 每类事务有命名空间, 包含多个具体事务 + */ + +export const enum WorkerAbilityTestActionType { + CommunicationTest = 'CommunicationTest', +} diff --git a/bin/cli/worker/template/utils/payload_type.t b/bin/cli/worker/template/utils/payload_type.t new file mode 100644 index 000000000..6b9a71509 --- /dev/null +++ b/bin/cli/worker/template/utils/payload_type.t @@ -0,0 +1,13 @@ +/** + * 跨线程通信各事务的发送数据类型声明 + */ +export interface WorkerAbilityTestPayload { + CommunicationTest: number; +} + +/** + * 跨线程通信各事务的响应数据类型声明 + */ +export interface WorkerAbilityTestReponse { + CommunicationTest: number; +} diff --git a/bin/cli/worker/template/worker_thread.t b/bin/cli/worker/template/worker_thread.t deleted file mode 100644 index fc457c9c7..000000000 --- a/bin/cli/worker/template/worker_thread.t +++ /dev/null @@ -1,5 +0,0 @@ -class CrudWorkerTreadWorker extends BI.Workers.MainThreadWorker { - protected initActions(): void { - // to init some actions - } -} diff --git a/bin/cli/worker/template/worker_thread/action/action.worker_ability_test.t b/bin/cli/worker/template/worker_thread/action/action.worker_ability_test.t new file mode 100644 index 000000000..f7d1248f4 --- /dev/null +++ b/bin/cli/worker/template/worker_thread/action/action.worker_ability_test.t @@ -0,0 +1,24 @@ +import { WorkerAbilityTestActionType } from '../../utils/action_type'; +import { WorkerAbilityTestPayload, WorkerAbilityTestReponse } from '../../utils/payload_type'; + +export class WorkerAbilityTestWorkerThreadAction extends BI.Workers.WorkerBaseAction { + protected addActionHandler(): void { + this.controller.addActionHandler( + WorkerAbilityTestActionType.CommunicationTest, + this.communicationTest.bind(this) + ); + } + + /** + * 通信能力检测的处理器 + */ + private communicationTest( + payload: WorkerAbilityTestPayload['CommunicationTest'] + ): WorkerAbilityTestReponse['CommunicationTest'] { + const mainThreadPostTime = payload; + // 收到主线程信息的耗时 + const workerGetMessageDuration = Date.now() - mainThreadPostTime; + + return workerGetMessageDuration; + } +} diff --git a/bin/cli/worker/template/worker_thread/worker_thread.t b/bin/cli/worker/template/worker_thread/worker_thread.t new file mode 100644 index 000000000..24c5b91e8 --- /dev/null +++ b/bin/cli/worker/template/worker_thread/worker_thread.t @@ -0,0 +1,12 @@ +// TODO: 这边需要先import fineui资源 +import { WorkerAbilityTestWorkerThreadAction } from './action/action.worker_ability_test'; + +class ${WorkerName}WorkerTreadWorker extends BI.Workers.MainThreadWorker { + public communicationTest: WorkerAbilityTestWorkerThreadAction; + + public initActions(): void { + this.communicationTest = this.createAction(WorkerAbilityTestWorkerThreadAction); + } +} + +export const ${workerName}WorkerTreadWorker = BI.Workers.createWorker(${WorkerName}WorkerTreadWorker); From dffd0466c23d633683c6bbf0451ea46dd400f9be Mon Sep 17 00:00:00 2001 From: data Date: Fri, 22 Jul 2022 17:05:08 +0800 Subject: [PATCH 011/161] auto upgrade version to 2.0.20220722170456 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8f235e458..3b7cbc060 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220720140353", + "version": "2.0.20220722170456", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 1d0f2910420996f2e7b052e93648827fb17ec597 Mon Sep 17 00:00:00 2001 From: iapyang Date: Fri, 22 Jul 2022 17:07:16 +0800 Subject: [PATCH 012/161] =?UTF-8?q?fix:=20=E8=84=9A=E6=9C=AC=E5=87=BA?= =?UTF-8?q?=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/cli.worker.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/cli/worker/cli.worker.js b/bin/cli/worker/cli.worker.js index 85b4507c3..cfd331c8b 100644 --- a/bin/cli/worker/cli.worker.js +++ b/bin/cli/worker/cli.worker.js @@ -59,7 +59,7 @@ module.exports = { }, }; - scanAndCreate(structure); + scanAndCreate(structure, name); }, }; From d9e118164c612d5aacb477956ebd4e29a6ce3a91 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 22 Jul 2022 17:23:51 +0800 Subject: [PATCH 013/161] auto upgrade version to 2.0.20220722172339 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3b7cbc060..26a902ef2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220722170456", + "version": "2.0.20220722172339", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 51d94282d35a7c643ac4f4a33bf4a713d0034bbb Mon Sep 17 00:00:00 2001 From: iapyang Date: Fri, 22 Jul 2022 17:32:14 +0800 Subject: [PATCH 014/161] =?UTF-8?q?fix:=20=E6=A8=A1=E6=9D=BF=E9=94=99?= =?UTF-8?q?=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/template/worker_thread/worker_thread.t | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/cli/worker/template/worker_thread/worker_thread.t b/bin/cli/worker/template/worker_thread/worker_thread.t index 24c5b91e8..f437bbc23 100644 --- a/bin/cli/worker/template/worker_thread/worker_thread.t +++ b/bin/cli/worker/template/worker_thread/worker_thread.t @@ -1,7 +1,7 @@ // TODO: 这边需要先import fineui资源 import { WorkerAbilityTestWorkerThreadAction } from './action/action.worker_ability_test'; -class ${WorkerName}WorkerTreadWorker extends BI.Workers.MainThreadWorker { +class ${WorkerName}WorkerTreadWorker extends BI.Workers.WorkerThreadWorker { public communicationTest: WorkerAbilityTestWorkerThreadAction; public initActions(): void { From f2fce11540ca96b68b691df672c3a036dcb40b60 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 22 Jul 2022 17:34:52 +0800 Subject: [PATCH 015/161] auto upgrade version to 2.0.20220722173443 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 26a902ef2..d67733607 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220722172339", + "version": "2.0.20220722173443", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 6a5289dd12650db0c56295b497afc14462bc63fe Mon Sep 17 00:00:00 2001 From: data Date: Fri, 22 Jul 2022 18:03:59 +0800 Subject: [PATCH 016/161] auto upgrade version to 2.0.20220722180351 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d67733607..d69fcc199 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220722173443", + "version": "2.0.20220722180351", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 093621581d2d3f72edf5af78a729f4d6cff7d5ae Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 25 Jul 2022 11:43:54 +0800 Subject: [PATCH 017/161] =?UTF-8?q?KERNEL-12148=20feat:=20drawer=E6=9A=82?= =?UTF-8?q?=E6=97=B6=E6=94=B9=E7=94=A8left,right=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 因为transform对下拉框影响到问题还未解决,会导致drawer里面的下拉框都无法弹出 --- src/base/layer/layer.drawer.js | 23 ++++++++++++++++------- src/less/base/view/drawer.less | 2 +- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/base/layer/layer.drawer.js b/src/base/layer/layer.drawer.js index e62c272dc..2bf2b2942 100644 --- a/src/base/layer/layer.drawer.js +++ b/src/base/layer/layer.drawer.js @@ -154,22 +154,22 @@ BI.Drawer = BI.inherit(BI.Widget, { switch (o.placement) { case "right": self.element.css({ - transform: "translateX(-" + size.width + "px)" + left: "calc(100% - " + size.width + "px)" }); break; case "left": self.element.css({ - transform: "translateX(" + size.width + "px)" + right: "calc(100% - " + size.width + "px)" }); break; case "top": self.element.css({ - transform: "translateY(" + size.height + "px)" + bottom: "calc(100% - " + size.height + "px)" }); break; case "bottom": self.element.css({ - transform: "translateY(-" + size.height + "px)" + top: "calc(100% - " + size.height + "px)" }); break; } @@ -180,17 +180,26 @@ BI.Drawer = BI.inherit(BI.Widget, { hide: function (callback) { var self = this, o = this.options; requestAnimationFrame(function () { + var size = self._getSuitableSize(); switch (o.placement) { case "right": + self.element.css({ + left: "100%" + }); + break; case "left": self.element.css({ - transform: "translateX(0px)" + right: "100%" }); break; case "top": + self.element.css({ + bottom: "100%" + }); + break; case "bottom": self.element.css({ - transform: "translateY(0px)" + top: "100%" }); break; } @@ -213,7 +222,7 @@ BI.Drawer = BI.inherit(BI.Widget, { }, setZindex: function (zindex) { - this.element.css({"z-index": zindex}); + this.element.css({ "z-index": zindex }); }, destroyed: function () { diff --git a/src/less/base/view/drawer.less b/src/less/base/view/drawer.less index 76ab23d18..940b9b7c9 100644 --- a/src/less/base/view/drawer.less +++ b/src/less/base/view/drawer.less @@ -2,5 +2,5 @@ .bi-drawer { .box-shadows(-6px 0 16px -8px #00000014, -9px 0 28px #0000000d, -12px 0 48px 16px #00000008); - .transitions(transform .3s cubic-bezier(.23, 1, .32, 1), box-shadow .3s cubic-bezier(.23, 1, .32, 1)); + .transitions(inset .3s cubic-bezier(.23, 1, .32, 1), box-shadow .3s cubic-bezier(.23, 1, .32, 1)); } From 8e186f57cf1083c0d70edcc575cf1acba7fcaf1d Mon Sep 17 00:00:00 2001 From: treecat Date: Mon, 25 Jul 2022 15:17:31 +0800 Subject: [PATCH 018/161] =?UTF-8?q?KERNEL-12151=20fix:=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=B0=B4=E6=B3=A2=E7=BA=B9=E5=AE=9A=E4=BD=8D=E4=B8=8D=E5=AF=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/less/base/single/button/button.less | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/less/base/single/button/button.less b/src/less/base/single/button/button.less index 6eae05320..b458ad89a 100644 --- a/src/less/base/single/button/button.less +++ b/src/less/base/single/button/button.less @@ -401,6 +401,10 @@ body .bi-button, #body .bi-button { } .bi-basic-button { + + // 按钮水波纹需要根据按钮根结点定位 + position: relative; + &.button-common, &.button-success, &.button-warning, &.button-error { &:after { content: ""; From 8a47a75ec91dc9e06964c4194dee27fbdb5265f9 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 25 Jul 2022 16:14:45 +0800 Subject: [PATCH 019/161] auto upgrade version to 2.0.20220725161436 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d69fcc199..057570070 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220722180351", + "version": "2.0.20220725161436", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From ed92dda2a5b561d0d00eb76a9986e0417d165167 Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Mon, 25 Jul 2022 16:17:15 +0800 Subject: [PATCH 020/161] =?UTF-8?q?KERNEL-12095=20worker=E4=B8=BB=E8=BF=9B?= =?UTF-8?q?=E7=A8=8B=E5=9C=A8helper=E5=B1=82=E5=88=9B=E5=BB=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/cli.worker.js | 1 + .../template/main_thread/main_thread.helper.t | 26 +++++++++++++++++++ .../worker/template/main_thread/main_thread.t | 14 +--------- 3 files changed, 28 insertions(+), 13 deletions(-) create mode 100644 bin/cli/worker/template/main_thread/main_thread.helper.t diff --git a/bin/cli/worker/cli.worker.js b/bin/cli/worker/cli.worker.js index cfd331c8b..02a7c803a 100644 --- a/bin/cli/worker/cli.worker.js +++ b/bin/cli/worker/cli.worker.js @@ -45,6 +45,7 @@ module.exports = { 'action.worker_ability_test.ts': path.resolve(__dirname, './template/main_thread/action/action.worker_ability_test.t'), }, [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.t'), + [`${name}_main_thread.helper.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.helper.t'), }, utils: { 'action_type.ts': path.resolve(__dirname, './template/utils/action_type.t'), diff --git a/bin/cli/worker/template/main_thread/main_thread.helper.t b/bin/cli/worker/template/main_thread/main_thread.helper.t new file mode 100644 index 000000000..defe01502 --- /dev/null +++ b/bin/cli/worker/template/main_thread/main_thread.helper.t @@ -0,0 +1,26 @@ +import { ${WorkerName}MainThreadWorker } from './new_main_thread'; +// 不需要一起打包的话则不需要引入这行 +import { workerUrl } from 'fui-worker!../worker_thread/new_worker_thread'; + +// MainThread的创建在helper层处理 +export class ${WorkerName}MainThreadWorkerHelper { + public createMainTreadWorker() { + return BI.Workers.createWorker(${WorkerName}MainThreadWorker, { + workerUrl: this.urlFormatter(workerUrl), + workerName: BI.UUID(), + }); + } + + private urlFormatter(v: string) { + return v; + } +} + +export const mainThreadWorkerHelper = new ${WorkerName}MainThreadWorkerHelper(); + +// 调用示例 +mainThreadWorkerHelper.createMainTreadWorker() + .testCommunication() + .then(res => { + console.log(res) + }) \ No newline at end of file diff --git a/bin/cli/worker/template/main_thread/main_thread.t b/bin/cli/worker/template/main_thread/main_thread.t index 75f8fb674..00fb09177 100644 --- a/bin/cli/worker/template/main_thread/main_thread.t +++ b/bin/cli/worker/template/main_thread/main_thread.t @@ -1,8 +1,6 @@ import { WorkerAbilityTestMainThreadAction } from './action/action.worker_ability_test'; -// 不需要一起打包的话则不需要引入这行 -import { workerUrl } from 'fui-worker!../worker_thread/${workerName}_worker_thread'; -class ${WorkerName}MainTreadWorker extends BI.Workers.MainThreadWorker { +export class ${WorkerName}MainThreadWorker extends BI.Workers.MainThreadWorker { private communicationTest: WorkerAbilityTestMainThreadAction; public initActions(): void { @@ -13,13 +11,3 @@ class ${WorkerName}MainTreadWorker extends BI.Workers.MainThreadWorker { return this.communicationTest.communicationTest(); } } - -const ${workerName}MainTreadWorker = BI.Workers.createWorker(${WorkerName}MainTreadWorker, { - workerUrl, - workerName: BI.UUID(), -}); - -${workerName}MainTreadWorker.testCommunication() - .then(v => { - console.log(v); - }); From 2cb037c6693889ad2d8191219badd04784fd3ac0 Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Tue, 26 Jul 2022 14:20:49 +0800 Subject: [PATCH 021/161] =?UTF-8?q?KERNEL-12095=20WorkerHelper=E6=94=B9?= =?UTF-8?q?=E4=B8=8B=E8=AE=BE=E8=AE=A1=EF=BC=8C=E6=94=AF=E6=8C=81=E6=A0=A1?= =?UTF-8?q?=E9=AA=8C=E3=80=81=E5=88=9B=E5=BB=BA=E3=80=81=E7=BB=88=E6=AD=A2?= =?UTF-8?q?worker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/cli.worker.js | 2 +- bin/cli/worker/template/main_thread.helper.t | 71 +++++++++++++++++++ .../template/main_thread/main_thread.helper.t | 26 ------- 3 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 bin/cli/worker/template/main_thread.helper.t delete mode 100644 bin/cli/worker/template/main_thread/main_thread.helper.t diff --git a/bin/cli/worker/cli.worker.js b/bin/cli/worker/cli.worker.js index 02a7c803a..555c99cf0 100644 --- a/bin/cli/worker/cli.worker.js +++ b/bin/cli/worker/cli.worker.js @@ -45,7 +45,6 @@ module.exports = { 'action.worker_ability_test.ts': path.resolve(__dirname, './template/main_thread/action/action.worker_ability_test.t'), }, [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.t'), - [`${name}_main_thread.helper.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.helper.t'), }, utils: { 'action_type.ts': path.resolve(__dirname, './template/utils/action_type.t'), @@ -57,6 +56,7 @@ module.exports = { }, [`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread/worker_thread.t'), }, + [`${name}_main_thread.helper.ts`]: path.resolve(__dirname, './template/main_thread.helper.t'), }, }; diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t new file mode 100644 index 000000000..996cd9007 --- /dev/null +++ b/bin/cli/worker/template/main_thread.helper.t @@ -0,0 +1,71 @@ +import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_thread'; +// 不需要一起打包的话则不需要引入这行 +import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; + +export class ${WorkerName}WorkerHelper { + public workers: WorkerItems[] = []; + + /** + * 支持创建多个worker + * @param key worker key + */ + public createMainThreadWorker(key: string = '') { + const findItem = this.workers.find(item => item.key === key); + + if (findItem) return findItem.worker; + + const newWorker = BI.Workers.createWorker(${WorkerName}MainThreadWorker, { + workerUrl: this.urlFormatter(workerUrl), + workerName: BI.UUID(), + }); + + this.workers.push({ + key, + worker: newWorker, + }); + + return newWorker; + } + + /** + * 格式化worker url,比如补充一些环境信息到参数里 + * @param url worker url + */ + private urlFormatter(url: string) { + return url; + } + + /** + * 终止worker,不传key就全部终止 + * @param key key + */ + public terminate(key?: string) { + if (!key) { + this.workers.forEach(item => { + item.worker.terminate(); + }); + + this.workers = []; + + return; + } + this.workers.find(item => item.key === key)?.worker.terminate(); + + const findIndex = this.workers.findIndex(item => item.key === key); + + findIndex !== -1 + && this.workers.splice(findIndex, 1); + } +} + +export const ${workerName}WorkerHelper = new ${WorkerName}WorkerHelper(); + +interface WorkerItems { + key: string; + worker: ${WorkerName}MainThreadWorker; +} + +// 使用示例 +${workerName}WorkerHelper.createMainThreadWorker() + .testCommunication() + .then(res => console.log(res)); diff --git a/bin/cli/worker/template/main_thread/main_thread.helper.t b/bin/cli/worker/template/main_thread/main_thread.helper.t deleted file mode 100644 index defe01502..000000000 --- a/bin/cli/worker/template/main_thread/main_thread.helper.t +++ /dev/null @@ -1,26 +0,0 @@ -import { ${WorkerName}MainThreadWorker } from './new_main_thread'; -// 不需要一起打包的话则不需要引入这行 -import { workerUrl } from 'fui-worker!../worker_thread/new_worker_thread'; - -// MainThread的创建在helper层处理 -export class ${WorkerName}MainThreadWorkerHelper { - public createMainTreadWorker() { - return BI.Workers.createWorker(${WorkerName}MainThreadWorker, { - workerUrl: this.urlFormatter(workerUrl), - workerName: BI.UUID(), - }); - } - - private urlFormatter(v: string) { - return v; - } -} - -export const mainThreadWorkerHelper = new ${WorkerName}MainThreadWorkerHelper(); - -// 调用示例 -mainThreadWorkerHelper.createMainTreadWorker() - .testCommunication() - .then(res => { - console.log(res) - }) \ No newline at end of file From eb36417a7716c1e2f33cd35dccf6c7cb60c5be96 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 26 Jul 2022 15:54:03 +0800 Subject: [PATCH 022/161] auto upgrade version to 2.0.20220726155349 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 057570070..a272024af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220725161436", + "version": "2.0.20220726155349", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 0b90b3baf013841eb6767292fc9f68674726990d Mon Sep 17 00:00:00 2001 From: zsmj Date: Tue, 26 Jul 2022 16:37:00 +0800 Subject: [PATCH 023/161] =?UTF-8?q?DESIGN-5=20style:=20=E3=80=902022?= =?UTF-8?q?=E3=80=91=E6=B0=94=E6=B3=A1=E7=9A=84=E8=BE=B9=E8=B7=9D=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/combo/bubblecombo/popup.bubble.js | 30 ++++++++++------------ 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/src/case/combo/bubblecombo/popup.bubble.js b/src/case/combo/bubblecombo/popup.bubble.js index 7bc1f500c..6826a99f5 100644 --- a/src/case/combo/bubblecombo/popup.bubble.js +++ b/src/case/combo/bubblecombo/popup.bubble.js @@ -36,7 +36,9 @@ BI.BubblePopupBarView = BI.inherit(BI.BubblePopupView, { }, { text: BI.i18nText(BI.i18nText("BI-Basic_OK")), value: true - }] + }], + innerVgap: 16, + innerHgap: 16, }); }, @@ -48,8 +50,7 @@ BI.BubblePopupBarView = BI.inherit(BI.BubblePopupView, { if (BI.isWidget(buttonOpt)) { items.push({ el: buttonOpt, - lgap: i === 0 ? 15 : 10, - rgap: i === o.buttons.length - 1 ? 15 : 0 + lgap: 12, }); } else { items.push({ @@ -60,14 +61,14 @@ BI.BubblePopupBarView = BI.inherit(BI.BubblePopupView, { self.fireEvent(BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON, v); } }, buttonOpt), - lgap: i === 0 ? 15 : 10, - rgap: i === o.buttons.length - 1 ? 15 : 0 + lgap: 12, }); } }); return BI.createWidget({ type: "bi.right_vertical_adapt", - height: 44, + innerVgap: o.innerVgap, + innerHgap: o.innerHgap, items: items }); }, @@ -79,20 +80,17 @@ BI.BubblePopupBarView = BI.inherit(BI.BubblePopupView, { _createView: function () { var o = this.options; - var button = BI.createWidget({ - type: "bi.button_group", + var view = BI.createWidget({ + type: "bi.vertical", items: [this._createContent()], - layouts: [{ - type: "bi.vertical", - cls: "bar-popup-container", - hgap: BI.SIZE_CONSANTS.H_GAP_SIZE, - tgap: BI.SIZE_CONSANTS.V_GAP_SIZE - }] + cls: "bar-popup-container", + hgap: o.innerHgap, + tgap: o.innerVgap, }); - button.element.css("min-height", o.minHeight - 44); + view.element.css("min-height", o.minHeight); - return button; + return view; } }); BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON = "EVENT_CLICK_TOOLBAR_BUTTON"; From ced17523f4739e1ee6d880446be1e4ea2f50a0a5 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 26 Jul 2022 18:55:22 +0800 Subject: [PATCH 024/161] auto upgrade version to 2.0.20220726185509 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a272024af..c1fee0dab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220726155349", + "version": "2.0.20220726185509", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 17049a18f9c4d8272b106206f81892627b8dbeae Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Tue, 26 Jul 2022 20:09:51 +0800 Subject: [PATCH 025/161] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=8B=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/template/main_thread.helper.t | 37 ++++++++------------ 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t index 996cd9007..29c679d87 100644 --- a/bin/cli/worker/template/main_thread.helper.t +++ b/bin/cli/worker/template/main_thread.helper.t @@ -3,26 +3,23 @@ import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_ import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; export class ${WorkerName}WorkerHelper { - public workers: WorkerItems[] = []; + public workers = new Map(); /** * 支持创建多个worker * @param key worker key */ public createMainThreadWorker(key: string = '') { - const findItem = this.workers.find(item => item.key === key); - - if (findItem) return findItem.worker; + if (this.workers.has(key)) { + return this.workers.get(key); + } const newWorker = BI.Workers.createWorker(${WorkerName}MainThreadWorker, { workerUrl: this.urlFormatter(workerUrl), workerName: BI.UUID(), }); - this.workers.push({ - key, - worker: newWorker, - }); + this.workers.set(key, newWorker); return newWorker; } @@ -40,32 +37,26 @@ export class ${WorkerName}WorkerHelper { * @param key key */ public terminate(key?: string) { - if (!key) { - this.workers.forEach(item => { - item.worker.terminate(); + if (BI.isNull(key)) { + this.workers.forEach(thread => { + thread.terminate(); }); - this.workers = []; + this.workers.clear(); return; } - this.workers.find(item => item.key === key)?.worker.terminate(); - const findIndex = this.workers.findIndex(item => item.key === key); + this.workers.get(key)?.terminate(); - findIndex !== -1 - && this.workers.splice(findIndex, 1); + this.workers.delete(key); } } export const ${workerName}WorkerHelper = new ${WorkerName}WorkerHelper(); -interface WorkerItems { - key: string; - worker: ${WorkerName}MainThreadWorker; -} - // 使用示例 -${workerName}WorkerHelper.createMainThreadWorker() - .testCommunication() +const worker = ${workerName}WorkerHelper.createMainThreadWorker(); + +worker.testCommunication() .then(res => console.log(res)); From 4ebb9fbb92c41047b2167f92d0291808dd84e6da Mon Sep 17 00:00:00 2001 From: data Date: Wed, 27 Jul 2022 09:04:37 +0800 Subject: [PATCH 026/161] auto upgrade version to 2.0.20220727090428 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c1fee0dab..77889b2ba 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220726185509", + "version": "2.0.20220727090428", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 876fba6c4392824ad47e4d3ba3e744a9ab1f04b1 Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Wed, 27 Jul 2022 10:21:31 +0800 Subject: [PATCH 027/161] =?UTF-8?q?KERNEL-12095=20=E6=94=B9=E4=B8=8B?= =?UTF-8?q?=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/template/main_thread.helper.t | 43 ++++++-------------- 1 file changed, 13 insertions(+), 30 deletions(-) diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t index 29c679d87..e2242e27a 100644 --- a/bin/cli/worker/template/main_thread.helper.t +++ b/bin/cli/worker/template/main_thread.helper.t @@ -3,25 +3,22 @@ import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_ import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; export class ${WorkerName}WorkerHelper { - public workers = new Map(); + private worker: ${WorkerName}MainThreadWorker; /** - * 支持创建多个worker - * @param key worker key + * 拿到helper中的worker */ - public createMainThreadWorker(key: string = '') { - if (this.workers.has(key)) { - return this.workers.get(key); + public get${WorkerName}MainThreadWorker() { + if (this.worker) { + return this.worker; } - const newWorker = BI.Workers.createWorker(${WorkerName}MainThreadWorker, { + this.worker = BI.Workers.createWorker(${WorkerName}MainThreadWorker, { workerUrl: this.urlFormatter(workerUrl), workerName: BI.UUID(), }); - this.workers.set(key, newWorker); - - return newWorker; + return this.worker; } /** @@ -33,30 +30,16 @@ export class ${WorkerName}WorkerHelper { } /** - * 终止worker,不传key就全部终止 - * @param key key + * 终止worker */ - public terminate(key?: string) { - if (BI.isNull(key)) { - this.workers.forEach(thread => { - thread.terminate(); - }); - - this.workers.clear(); - - return; - } - - this.workers.get(key)?.terminate(); - - this.workers.delete(key); + public terminate() { + this.worker?.terminate(); } } -export const ${workerName}WorkerHelper = new ${WorkerName}WorkerHelper(); - // 使用示例 -const worker = ${workerName}WorkerHelper.createMainThreadWorker(); +const workerHelper = new ${WorkerName}WorkerHelper(); -worker.testCommunication() +workerHelper.get${WorkerName}MainThreadWorker() + .testCommunication() .then(res => console.log(res)); From 3e43d5c9058422d13608d83f18c43f9a691f27fe Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Wed, 27 Jul 2022 10:24:03 +0800 Subject: [PATCH 028/161] =?UTF-8?q?=E5=8A=A0=E4=B8=8B=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/template/main_thread.helper.t | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t index e2242e27a..af02e5192 100644 --- a/bin/cli/worker/template/main_thread.helper.t +++ b/bin/cli/worker/template/main_thread.helper.t @@ -8,7 +8,7 @@ export class ${WorkerName}WorkerHelper { /** * 拿到helper中的worker */ - public get${WorkerName}MainThreadWorker() { + public getWorker() { if (this.worker) { return this.worker; } @@ -38,8 +38,8 @@ export class ${WorkerName}WorkerHelper { } // 使用示例 -const workerHelper = new ${WorkerName}WorkerHelper(); +// const workerHelper = new ${WorkerName}WorkerHelper(); -workerHelper.get${WorkerName}MainThreadWorker() - .testCommunication() - .then(res => console.log(res)); +// workerHelper.getWorker() +// .testCommunication() +// .then(res => console.log(res)); From 5748064c3d01876c799a23ffa3e0b101ee6c6bfd Mon Sep 17 00:00:00 2001 From: data Date: Wed, 27 Jul 2022 11:04:53 +0800 Subject: [PATCH 029/161] auto upgrade version to 2.0.20220727110444 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 77889b2ba..854378c01 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220727090428", + "version": "2.0.20220727110444", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 167b4948cd37e594d02bdf998f17bd24b56dd12b Mon Sep 17 00:00:00 2001 From: data Date: Wed, 27 Jul 2022 11:16:02 +0800 Subject: [PATCH 030/161] auto upgrade version to 2.0.20220727111551 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 854378c01..fe7f49173 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220727110444", + "version": "2.0.20220727111551", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From d09ae2808af346fcae331f962dfd6a4994c66604 Mon Sep 17 00:00:00 2001 From: treecat Date: Wed, 27 Jul 2022 17:22:44 +0800 Subject: [PATCH 031/161] =?UTF-8?q?KERNEL-12202=20=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E6=94=AF=E6=8C=81=20loading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/base/button/demo.button.js | 74 ++++++++--- src/base/single/button/button.basic.js | 7 +- src/base/single/button/buttons/button.js | 152 ++++++++++++----------- src/less/base/single/button/button.less | 3 + src/less/lib/font.less | 1 + src/less/resource/font.less | 4 + 6 files changed, 154 insertions(+), 87 deletions(-) diff --git a/demo/js/base/button/demo.button.js b/demo/js/base/button/demo.button.js index d0b14aaff..c69e01167 100644 --- a/demo/js/base/button/demo.button.js +++ b/demo/js/base/button/demo.button.js @@ -5,9 +5,18 @@ Demo.Button = BI.inherit(BI.Widget, { render: function () { var items = [{ type: "bi.button", - text: "一般按钮", + text: "一般按钮1111111111111", level: "common", - height: 30 + whiteSpace: "nowrap", + width: 100, + height: 30, + handler() { + console.log("触发点击事件"); + this.setLoading(); + setTimeout(() => { + this.setLoaded(); + }, 5 * 1000); + } }, { type: "bi.button", text: "表示成功状态按钮", @@ -190,19 +199,14 @@ Demo.Button = BI.inherit(BI.Widget, { height: 30 }, { type: "bi.button", - text: "图标在上面的按钮,而且可以自动撑开高度", - iconCls: "close-font", - iconGap: 24, - iconPosition: "top" - },{ - type: "bi.button", - text: "自动撑开高度", + text: "自动撑开", iconCls: "close-font", - textHeight: 32, - iconGap: 24, + // textHeight: 32, + // height: 32, + iconGap: 64, vgap: 16, hgap: 100, - iconPosition: "top" + iconPosition: "bottom" }, { type: "bi.button", text: "图标在下面的按钮", @@ -288,14 +292,54 @@ Demo.Button = BI.inherit(BI.Widget, { iconCls: "plus-font", text: "点我,更改图标", handler() { - this.i = this.i === undefined ? 0 : ++this.i; + this.i = this.i === undefined ? 0 : ++this.i; const arr = ["text-background-font", "check-mark-ha-font", "close-font", "search-font", "date-change-h-font"]; - if(this.i >= arr.length) { + if (this.i >= arr.length) { this.i = 0; } this.setIcon(arr[this.i]); }, height: 24 + }, { + type: "bi.button", + text: "带加载的按钮", + handler() { + console.log("触发点击事件"); + this.setLoading(); + setTimeout(() => { + this.setLoaded(); + }, 5 * 1000); + } + }, { + type: "bi.button", + text: "带加载的按钮", + iconCls: "circle-close-font", + handler() { + console.log("触发点击事件"); + this.setLoading(); + setTimeout(() => { + this.setLoaded(); + }, 5 * 1000); + } + }, { + type: "bi.button", + clear: true, + text: "带加载的按钮", + iconCls: "circle-close-font", + handler() { + console.log("触发点击事件"); + this.setLoading(); + setTimeout(() => { + this.setLoaded(); + }, 5 * 1000); + } + }, { + type: "bi.button", + text: "加载中的按钮", + loading: true, + handler() { + console.log("我是无法被触发的!"); + } }]; return { @@ -306,7 +350,7 @@ Demo.Button = BI.inherit(BI.Widget, { items: BI.map(items, function (index, value) { return { el: value - } + }; }) }; } diff --git a/src/base/single/button/button.basic.js b/src/base/single/button/button.basic.js index da7791890..71a254d81 100644 --- a/src/base/single/button/button.basic.js +++ b/src/base/single/button/button.basic.js @@ -332,8 +332,13 @@ BI.BasicButton = BI.inherit(BI.Single, { _doClick: function (e) { if (this.isValid()) { - this.beforeClick(e); + var consume = this.beforeClick(e); + // 如果事件已经被消费掉了,就不再触发点击事件 + if (consume) { + return; + } } + this._trigger(e); if (this.isValid()) { this.doClick(e); diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index 420b5f7aa..778ecfe74 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -3,6 +3,8 @@ return position === "top" || position === "bottom"; } + var loadingCls = "button-loading-font anim-rotate"; + /** * 文字类型的按钮 * @class BI.Button @@ -54,7 +56,7 @@ whiteSpace: "nowrap", textWidth: null, textHeight: null, - hgap: props.clear ? 0 : 10, + hgap: props.clear ? 0 : (props.plain && !props.text ? 4 : 10), vgap: 0, tgap: 0, bgap: 0, @@ -86,71 +88,64 @@ textHeight = lineHeight; } } - if (BI.isKey(o.iconCls)) { - this.icon = BI.createWidget({ - type: "bi.icon_label", - cls: o.iconCls, - width: this._const.iconWidth, - height: lineHeight, - lineHeight: lineHeight, - // 不设置,自定义按钮无法居中 - iconWidth: o.iconWidth, - iconHeight: o.iconHeight - }); - this.text = BI.createWidget({ - type: "bi.label", - text: o.text, - textWidth: BI.isNotNull(o.textWidth) ? o.textWidth - this._const.iconWidth : null, - textHeight: textHeight, - height: lineHeight, - value: o.value - }); - var layoutType = "bi.horizontal"; - var gapContainer = { - lgap: o.iconPosition === "left" && o.text ? o.iconGap : 0, - rgap: o.iconPosition === "right" ? o.iconGap : 0, - tgap: o.iconPosition === "top" ? o.iconGap : 0, - bgap: o.iconPosition === "bottom" ? o.iconGap : 0 - }; - var items = [this.icon, BI.extend({ el: this.text }, gapContainer)]; - if (isVertical(o.iconPosition)) { - layoutType = "bi.vertical"; - } - if (o.iconPosition === "right" || o.iconPosition === "bottom") { - items = [BI.extend({ el: this.text }, gapContainer), this.icon]; - } - BI.createWidget({ - type: "bi.center_adapt", - element: this, - hgap: o.hgap, - vgap: o.vgap, - items: [{ - type: layoutType, - horizontalAlign: "center", - verticalAlign: "middle", - items: items - }] - }); - } else { - this.text = BI.createWidget({ - type: "bi.label", - height: o.height, - textAlign: o.textAlign, - whiteSpace: o.whiteSpace, - textWidth: o.textWidth, - textHeight: textHeight, - hgap: o.hgap, - vgap: o.vgap, - tgap: o.tgap, - bgap: o.bgap, - lgap: o.lgap, - rgap: o.rgap, - element: this, - text: o.text, - value: o.value, - title: null, - }); + + var iconInvisible = !o.loading && !o.iconCls; + this.icon = BI.createWidget({ + type: "bi.icon_label", + cls: o.loading ? loadingCls : o.iconCls, + width: this._const.iconWidth, + height: lineHeight, + lineHeight: lineHeight, + // 不设置,自定义按钮无法居中 + iconWidth: o.iconWidth, + iconHeight: o.iconHeight, + invisible: iconInvisible + }); + // 用于 whiteSpace + var textWidth = iconInvisible && o.width ? o.width - o.hgap * 2 : null; + if (BI.isNotNull(o.textWidth)) { + // textWidth 需要减去图标 + textWidth = o.textWidth - (iconInvisible || isVertical(o.iconPosition) ? 0 : this._const.iconWidth); } + this.text = BI.createWidget({ + type: "bi.label", + text: o.text, + whiteSpace: o.whiteSpace, + textAlign: o.textAlign, + textWidth: textWidth, + textHeight: textHeight, + height: lineHeight, + value: o.value, + title: null + }); + var layoutType = "bi.horizontal"; + var gapContainer = { + lgap: o.iconPosition === "left" && o.text ? o.iconGap : 0, + rgap: o.iconPosition === "right" ? o.iconGap : 0, + tgap: o.iconPosition === "top" ? o.iconGap : 0, + bgap: o.iconPosition === "bottom" ? o.iconGap : 0 + }; + var items = [this.icon, BI.extend({el: this.text}, gapContainer)]; + if (isVertical(o.iconPosition)) { + layoutType = "bi.vertical"; + } + if (o.iconPosition === "right" || o.iconPosition === "bottom") { + items = [BI.extend({el: this.text}, gapContainer), this.icon]; + } + // bi.center_adapt 作用:让 hgap 不影响 iconGap。 + BI.createWidget({ + type: "bi.center_adapt", + element: this, + hgap: o.hgap, + vgap: o.vgap, + items: [{ + type: layoutType, + horizontalAlign: "center", + verticalAlign: "middle", + items: items + }] + }); + var classArr = ["block", "clear", "ghost", "plain", "loading", "light"]; // 如果 options 对应的属性为 true 则给元素添加 class BI.each(classArr, function (_, clz) { @@ -160,7 +155,7 @@ }); if (o.minWidth > 0) { - this.element.css({ "min-width": o.minWidth / BI.pixRatio + BI.pixUnit }); + this.element.css({"min-width": o.minWidth / BI.pixRatio + BI.pixUnit}); } }, @@ -180,12 +175,27 @@ } }, + beforeClick: function () { + return this.isLoading(); + }, + + isLoading() { + return this._loading === undefined ? this.options.loading : this._loading; + }, + setLoading: function (loading) { - if (loading) { - this.element.addClass("loading"); - } else { - this.element.removeClass("loading"); - } + this._loading = true; + this.element.addClass("loading"); + // loadingCls 可以覆盖 iconCls 所以不需要移除 iconCls + this.icon.element.addClass(loadingCls); + this.icon.setVisible(true); + }, + + setLoaded() { + this._loading = false; + this.element.removeClass("loading"); + this.icon.element.removeClass(loadingCls); + this.icon.setVisible(!!this.options.iconCls); }, setText: function (text) { diff --git a/src/less/base/single/button/button.less b/src/less/base/single/button/button.less index b458ad89a..b9aad6d1a 100644 --- a/src/less/base/single/button/button.less +++ b/src/less/base/single/button/button.less @@ -14,6 +14,9 @@ body .bi-button, #body .bi-button { text-align: center; vertical-align: middle; cursor: pointer; + &.loading { + cursor: not-allowed; + } &.block { font-size: inherit; border-width: 0; diff --git a/src/less/lib/font.less b/src/less/lib/font.less index ce865e30e..deb495daa 100644 --- a/src/less/lib/font.less +++ b/src/less/lib/font.less @@ -1,4 +1,5 @@ //字体库 +@font-button-loading: "e7cd"; @font-cross: "e1ab"; diff --git a/src/less/resource/font.less b/src/less/resource/font.less index be6730eca..fedc1b902 100644 --- a/src/less/resource/font.less +++ b/src/less/resource/font.less @@ -81,6 +81,10 @@ .font-hover(pull-down-h-font, @font-down-triangle, @color-bi-text-light-gray); .font-hover-active(pull-down-ha-font, @font-down-triangle, @color-bi-text-light-gray); +// button +.font(button-loading-font, @font-button-loading); + + //toast .font(toast-error-font, @font-tip-error, @color-bi-color-toast-error); .font(toast-success-font, @font-tip-success, @color-bi-color-toast-success); From 5a70e82652dea1c9abde7f434bdf9025a81a8be7 Mon Sep 17 00:00:00 2001 From: treecat Date: Wed, 27 Jul 2022 18:31:47 +0800 Subject: [PATCH 032/161] =?UTF-8?q?KERNEL-12202=20fix:setLoading=E6=94=B9?= =?UTF-8?q?=E4=B8=BAloading?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/base/button/demo.button.js | 16 ++++++++-------- src/base/single/button/buttons/button.js | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/demo/js/base/button/demo.button.js b/demo/js/base/button/demo.button.js index c69e01167..1f2eeec0a 100644 --- a/demo/js/base/button/demo.button.js +++ b/demo/js/base/button/demo.button.js @@ -12,9 +12,9 @@ Demo.Button = BI.inherit(BI.Widget, { height: 30, handler() { console.log("触发点击事件"); - this.setLoading(); + this.loading(); setTimeout(() => { - this.setLoaded(); + this.loaded(); }, 5 * 1000); } }, { @@ -305,9 +305,9 @@ Demo.Button = BI.inherit(BI.Widget, { text: "带加载的按钮", handler() { console.log("触发点击事件"); - this.setLoading(); + this.loading(); setTimeout(() => { - this.setLoaded(); + this.loaded(); }, 5 * 1000); } }, { @@ -316,9 +316,9 @@ Demo.Button = BI.inherit(BI.Widget, { iconCls: "circle-close-font", handler() { console.log("触发点击事件"); - this.setLoading(); + this.loading(); setTimeout(() => { - this.setLoaded(); + this.loaded(); }, 5 * 1000); } }, { @@ -328,9 +328,9 @@ Demo.Button = BI.inherit(BI.Widget, { iconCls: "circle-close-font", handler() { console.log("触发点击事件"); - this.setLoading(); + this.loading(); setTimeout(() => { - this.setLoaded(); + this.loaded(); }, 5 * 1000); } }, { diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index 778ecfe74..8f46112ca 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -183,7 +183,7 @@ return this._loading === undefined ? this.options.loading : this._loading; }, - setLoading: function (loading) { + loading: function (loading) { this._loading = true; this.element.addClass("loading"); // loadingCls 可以覆盖 iconCls 所以不需要移除 iconCls @@ -191,7 +191,7 @@ this.icon.setVisible(true); }, - setLoaded() { + loaded() { this._loading = false; this.element.removeClass("loading"); this.icon.element.removeClass(loadingCls); From 8ad2fe413c8b053ed46982665cf452322c5508ee Mon Sep 17 00:00:00 2001 From: treecat Date: Thu, 28 Jul 2022 09:43:53 +0800 Subject: [PATCH 033/161] =?UTF-8?q?KERNEL-12202=20fix:=E6=8A=8Acomsume?= =?UTF-8?q?=E6=8D=A2=E6=88=90isIntercepted?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/single/button/button.basic.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base/single/button/button.basic.js b/src/base/single/button/button.basic.js index 71a254d81..15529fd34 100644 --- a/src/base/single/button/button.basic.js +++ b/src/base/single/button/button.basic.js @@ -332,9 +332,9 @@ BI.BasicButton = BI.inherit(BI.Single, { _doClick: function (e) { if (this.isValid()) { - var consume = this.beforeClick(e); + var isIntercepted = this.beforeClick(e); // 如果事件已经被消费掉了,就不再触发点击事件 - if (consume) { + if (isIntercepted) { return; } } From 53bc760115d1cba7565785ffa45f5c1e99d9871f Mon Sep 17 00:00:00 2001 From: treecat Date: Thu, 28 Jul 2022 11:38:47 +0800 Subject: [PATCH 034/161] =?UTF-8?q?KERNEL-12202=20fix:=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E4=B8=AA=20beforeClick=20=E7=9A=84=E6=B3=A8=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/single/button/button.basic.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/base/single/button/button.basic.js b/src/base/single/button/button.basic.js index 15529fd34..9ade43edb 100644 --- a/src/base/single/button/button.basic.js +++ b/src/base/single/button/button.basic.js @@ -345,6 +345,9 @@ BI.BasicButton = BI.inherit(BI.Single, { } }, + /** + * 子类可以得写这个方法,如果返回为 true,则可以阻止 handler 的触发 + */ beforeClick: function () { }, From c4f35934f6b6750d06b5f29a3e8ed706f5a2d9e4 Mon Sep 17 00:00:00 2001 From: Kira Date: Thu, 28 Jul 2022 13:55:31 +0800 Subject: [PATCH 035/161] =?UTF-8?q?fix:=20newValue=E4=B8=BA0=E6=97=B6?= =?UTF-8?q?=E4=B8=8D=E7=94=9F=E6=95=88=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/core/4.widget.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/4.widget.js b/src/core/4.widget.js index 61b09a07b..4ca395207 100644 --- a/src/core/4.widget.js +++ b/src/core/4.widget.js @@ -225,7 +225,7 @@ if (BI.isFunction(o.css)) { var css = this.__watch(o.css, function (context, newValue) { for (var k in css) { - if (!newValue[k]) { + if (BI.isNull(newValue[k])) { newValue[k] = ""; } } From 411d8af270b0faab6c7b76e67fe96e90d2becc0e Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 28 Jul 2022 15:10:11 +0800 Subject: [PATCH 036/161] =?UTF-8?q?REPORT-76547=20fix:=20=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E6=98=AF=E5=90=A6=E5=BC=82=E6=AD=A5=E8=8E=B7=E5=8F=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE,=E5=92=8C=E7=BB=84=E4=BB=B6=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E6=94=AF=E6=8C=81=E6=90=9C=E7=B4=A2=E5=88=86=E7=A6=BB?= =?UTF-8?q?=E5=BC=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../multilayersingletree.combo.js | 27 ++++++++++++------- 1 file changed, 18 insertions(+), 9 deletions(-) diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index 63f43b4f9..cea4d72da 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -36,11 +36,6 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { return (o.itemsCreator === BI.emptyFn) ? this._getSyncConfig() : this._getAsyncConfig(); }, - _shouldWrapper: function () { - var o = this.options; - return !o.allowEdit && o.itemsCreator === BI.emptyFn; - }, - _getBaseConfig: function () { var self = this, o = this.options; return { @@ -99,7 +94,6 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { container: o.container, allowInsertValue: o.allowInsertValue, allowSearchValue: o.allowSearchValue, - allowEdit: o.allowEdit, cls: "multilayer-single-tree-trigger", ref: function (_ref) { self.trigger = _ref; @@ -184,13 +178,28 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { tipType: o.tipType, warningTitle: o.warningTitle, valueFormatter: o.valueFormatter, - } + }, }); }, _getAsyncConfig: function () { - var config = this._getBaseConfig(); - return BI.extend(config, this._getSearchConfig()); + var o = this.options, self = this; + var baseConfig = this._getBaseConfig(); + return BI.extend(baseConfig, o.allowEdit ? this._getSearchConfig() : { + el: { + type: "bi.single_tree_trigger", + ref: function (_ref) { + self.textTrigger = _ref; + }, + text: o.text, + height: o.height, + items: o.items, + value: o.value, + tipType: o.tipType, + warningTitle: o.warningTitle, + valueFormatter: o.valueFormatter, + }, + }); }, getSearcher: function () { From 29a0d1716cfa4a7cfec536ec9998031a507af38d Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 28 Jul 2022 15:12:29 +0800 Subject: [PATCH 037/161] =?UTF-8?q?=E6=97=A0JIRA=20fix:=20=E8=A1=A5?= =?UTF-8?q?=E9=BD=90=E4=BA=8B=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../multilayerselecttree/multilayerselecttree.combo.js | 6 ++++++ .../multilayersingletree/multilayersingletree.combo.js | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/src/widget/multilayerselecttree/multilayerselecttree.combo.js b/src/widget/multilayerselecttree/multilayerselecttree.combo.js index 48ff0cbe0..5b2b4bc48 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.combo.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.combo.js @@ -132,6 +132,11 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { action: function () { self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_SEARCHING); } + }, { + eventName: BI.MultiLayerSelectTreeTrigger.EVENT_STOP, + action: function () { + self.fireEvent(BI.MultiLayerSelectTreeCombo.EVENT_STOP); + } }, { eventName: BI.MultiLayerSelectTreeTrigger.EVENT_ADD_ITEM, action: function () { @@ -243,6 +248,7 @@ BI.MultiLayerSelectTreeCombo.EVENT_SEARCHING = "EVENT_SEARCHING"; BI.MultiLayerSelectTreeCombo.EVENT_BLUR = "EVENT_BLUR"; BI.MultiLayerSelectTreeCombo.EVENT_FOCUS = "EVENT_FOCUS"; BI.MultiLayerSelectTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; +BI.MultiLayerSelectTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSelectTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; BI.MultiLayerSelectTreeCombo.EVENT_CLICK_ITEM = "EVENT_CLICK_ITEM"; BI.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo); diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index cea4d72da..1ebe80c4a 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -130,6 +130,11 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { action: function () { self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_SEARCHING); } + }, { + eventName: BI.MultiLayerSingleTreeTrigger.EVENT_STOP, + action: function () { + self.fireEvent(BI.MultiLayerSingleTreeCombo.EVENT_STOP); + } }, { eventName: BI.MultiLayerSingleTreeTrigger.EVENT_ADD_ITEM, action: function () { @@ -252,5 +257,6 @@ BI.MultiLayerSingleTreeCombo.EVENT_SEARCHING = "EVENT_SEARCHING"; BI.MultiLayerSingleTreeCombo.EVENT_BLUR = "EVENT_BLUR"; BI.MultiLayerSingleTreeCombo.EVENT_FOCUS = "EVENT_FOCUS"; BI.MultiLayerSingleTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; +BI.MultiLayerSingleTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSingleTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; BI.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo); From 76b14245f3a3ba73fcf4376858fa9735eea323a1 Mon Sep 17 00:00:00 2001 From: data Date: Thu, 28 Jul 2022 16:14:34 +0800 Subject: [PATCH 038/161] auto upgrade version to 2.0.20220728161422 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fe7f49173..19f8cd439 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220727111551", + "version": "2.0.20220728161422", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 5ad1408774066403aea4eb0346e6e6a7d8b30161 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 28 Jul 2022 17:18:57 +0800 Subject: [PATCH 039/161] =?UTF-8?q?=E6=97=A0JIRA=20fix:=20value=E4=B8=BAnu?= =?UTF-8?q?ll=E6=97=B6=E9=80=89=E4=B8=AD=E7=8A=B6=E6=80=81=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/combination/group.button.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/base/combination/group.button.js b/src/base/combination/group.button.js index ed4f9d680..b9e8f7127 100644 --- a/src/base/combination/group.button.js +++ b/src/base/combination/group.button.js @@ -236,7 +236,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { setValueMap: function (map) { map = map || {}; BI.each(this.buttons, function (i, item) { - if (BI.isNotNull(map[item.getValue()])) { + if (BI.has(map, item.getValue())) { item.setSelected && item.setSelected(true); } else { item.setSelected && item.setSelected(false); From 39b1269fe36746827710e458fc00124ae1bd5207 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 29 Jul 2022 11:23:52 +0800 Subject: [PATCH 040/161] auto upgrade version to 2.0.20220729112342 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 19f8cd439..fc808a1b9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220728161422", + "version": "2.0.20220729112342", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 749ae96826f67ee2c4a58ad9a42813b1f6aea39f Mon Sep 17 00:00:00 2001 From: zhangzijie01 Date: Fri, 29 Jul 2022 17:20:36 +0800 Subject: [PATCH 041/161] =?UTF-8?q?BI-110672=20fix:=20=E4=BF=AE=E5=A4=8Dlo?= =?UTF-8?q?ading=E7=9A=84=E6=97=B6=E5=80=99=E4=B8=A2=E5=A4=B1=E4=B8=8A?= =?UTF-8?q?=E4=B8=8B=E6=96=87=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/1.pane.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/base/1.pane.js b/src/base/1.pane.js index 0a4c93a96..c3e201f58 100644 --- a/src/base/1.pane.js +++ b/src/base/1.pane.js @@ -40,10 +40,10 @@ BI.Pane = BI.inherit(BI.Widget, { loading: function () { var self = this, o = this.options; - var loadingAnimation = BI.Providers.getProvider("bi.provider.system").getLoading({ + var loadingAnimation = BI.createWidget(BI.Providers.getProvider("bi.provider.system").getLoading({ loadingSize: o.loadingSize, context: this - }); + })); // pane在同步方式下由items决定tipText的显示与否 // loading的异步情况下由loaded后对面板的populate的时机决定 this.setTipVisible(false); From 34a85550a2af2e239e4f159ee378ddd45f6f73d3 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 29 Jul 2022 17:35:05 +0800 Subject: [PATCH 042/161] auto upgrade version to 2.0.20220729173459 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fc808a1b9..ed38bc380 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220729112342", + "version": "2.0.20220729173459", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 2fb2b6a6b1c0073284d922319585f097bf7704d4 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 29 Jul 2022 17:44:15 +0800 Subject: [PATCH 043/161] auto upgrade version to 2.0.20220729174408 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ed38bc380..c935d7b1d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220729173459", + "version": "2.0.20220729174408", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 822d941db59929569473df76dd3761b14c342332 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 29 Jul 2022 17:55:02 +0800 Subject: [PATCH 044/161] auto upgrade version to 2.0.20220729175453 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c935d7b1d..45fa023da 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220729174408", + "version": "2.0.20220729175453", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 24852af9a5a2dd2ad26c93ba35e2eb92cfcdf123 Mon Sep 17 00:00:00 2001 From: windy Date: Mon, 1 Aug 2022 17:16:51 +0800 Subject: [PATCH 045/161] =?UTF-8?q?=E6=97=A0JIRA=E4=BB=BB=E5=8A=A1=20down?= =?UTF-8?q?=5Flist=5Fitem=E7=9A=84iconCls=E5=AF=B9=E5=BA=94=E5=9B=BE?= =?UTF-8?q?=E7=89=87=E6=B2=A1=E6=9C=89=E9=AB=98=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widget/downlist/item.downlistgroup.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/widget/downlist/item.downlistgroup.js b/src/widget/downlist/item.downlistgroup.js index 31492b78b..e142a72b7 100644 --- a/src/widget/downlist/item.downlistgroup.js +++ b/src/widget/downlist/item.downlistgroup.js @@ -29,6 +29,8 @@ BI.DownListGroupItem = BI.inherit(BI.BasicButton, { cls: o.iconCls1, width: 36, height: o.height, + iconHeight: o.iconHeight, + iconWidth: 36, disableSelected: true, selected: this._digest(o.value) }); From b6541eb9221112daf29af64256727486d0ce4a25 Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 1 Aug 2022 17:18:25 +0800 Subject: [PATCH 046/161] =?UTF-8?q?KERNEL-11286=20&&=20REPORT-77087=20fix:?= =?UTF-8?q?=20=E3=80=90=E6=96=B0=E5=BC=95=E6=93=8E=E6=96=B0=E5=89=8D?= =?UTF-8?q?=E7=AB=AF=E3=80=91=E5=85=81=E8=AE=B8=E7=9B=B4=E6=8E=A5=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E7=9A=84=E4=B8=8B=E6=8B=89=E6=A0=91=E5=B1=95=E5=BC=80?= =?UTF-8?q?=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=E7=82=B9=E5=87=BB=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E4=B8=8D=E8=83=BD=E6=94=B6=E8=B5=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../multilayerselecttree.combo.less | 15 ++++ .../multilayerselecttree.combo.js | 86 +++++++++++++------ .../multilayerselecttree.trigger.js | 11 +-- 3 files changed, 77 insertions(+), 35 deletions(-) diff --git a/src/less/widget/multilayerselecttree/multilayerselecttree.combo.less b/src/less/widget/multilayerselecttree/multilayerselecttree.combo.less index d1c5771dc..ecb2dbf58 100644 --- a/src/less/widget/multilayerselecttree/multilayerselecttree.combo.less +++ b/src/less/widget/multilayerselecttree/multilayerselecttree.combo.less @@ -1,7 +1,22 @@ @import "../../index.less"; +@val: transform .3s ease; .bi-multilayer-select-tree-combo { + // 此combo的trigger_button是absolute上去的,与bi-combo在同一层级,独立写一下 + & .bi-combo.bi-combo-popup + .bi-trigger-icon-button { + & .x-icon { + .rotate(180deg); + .transition(@val); + } + } + + &:hover { + &.bi-border, &.bi-border-bottom { + border-color: @color-bi-border-hover-combo; + } + } + &.status-error { &.bi-border, &.bi-border-bottom { border-color: @border-color-negative; diff --git a/src/widget/multilayerselecttree/multilayerselecttree.combo.js b/src/widget/multilayerselecttree/multilayerselecttree.combo.js index 5b2b4bc48..98acb74b0 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.combo.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.combo.js @@ -10,6 +10,7 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { isDefaultInit: false, height: 24, text: "", + defaultText: "", itemsCreator: BI.emptyFn, items: [], value: "", @@ -31,14 +32,47 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { render: function () { var self = this, o = this.options; - return (o.itemsCreator === BI.emptyFn) ? this._getSyncConfig() : this._getAsyncConfig(); + var cls = (o.simple ? "bi-border-bottom " : "bi-border bi-border-radius ") + (BI.isKey(o.status) ? ("status-" + o.status) : ""); + + var baseConfig = this._getBaseConfig(); + + if (o.allowEdit) { + return { + type: "bi.absolute", + cls, + items: [ + { + el: BI.extend(baseConfig, this._getSearchConfig()), + top: 0, bottom: 0, right: 0, left: 0 + }, { + el: self._getTriggerIconButton(), + top: 0, bottom: 0, right: 0, + }, + ] + }; + } + + return BI.extend(baseConfig, { + el: { + type: "bi.single_tree_trigger", + ref: function (_ref) { + self.textTrigger = _ref; + }, + text: o.text, + defaultText: o.defaultText, + height: o.height, + items: o.items, + value: o.value, + tipType: o.tipType, + warningTitle: o.warningTitle, + } + }, { cls }); }, _getBaseConfig: function () { var self = this, o = this.options; return { type: "bi.combo", - cls: (o.simple ? "bi-border-bottom " : "bi-border bi-border-radius ") + (BI.isKey(o.status) ? ("status-" + o.status) : ""), container: o.container, destroyWhenHide: o.destroyWhenHide, adjustLength: 2, @@ -105,6 +139,7 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { // height: o.height - (o.simple ? 1 : 2), height: o.height, text: o.text, + defaultText: o.defaultText, value: o.value, tipType: o.tipType, warningTitle: o.warningTitle, @@ -153,7 +188,7 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { // IE11下,popover(position: fixed)下放置下拉控件(position: fixed), 滚动的时候会异常卡顿 // 通过container参数将popup放置于popover之外解决此问题, 其他下拉控件由于元素少或者有分页,所以 // 卡顿不明显, 先在此做尝试, 并在FineUI特殊处理待解决文档中标记跟踪 - return !(o.container && self.trigger.getSearcher().isSearching() && self.trigger.getSearcher().getView().element.find(e.target).length > 0); + 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; }, listeners: [{ @@ -170,28 +205,29 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { }; }, - _getSyncConfig: function () { - var o = this.options, self = this; - var baseConfig = this._getBaseConfig(); - return BI.extend(baseConfig, o.allowEdit ? this._getSearchConfig() : { - el: { - type: "bi.single_tree_trigger", - ref: function (_ref) { - self.textTrigger = _ref; - }, - text: o.text, - height: o.height, - items: o.items, - value: o.value, - tipType: o.tipType, - warningTitle: o.warningTitle, - } - }); - }, - - _getAsyncConfig: function () { - var config = this._getBaseConfig(); - return BI.extend(config, this._getSearchConfig()); + _getTriggerIconButton: function () { + var self = this, o = this.options; + return { + type: "bi.trigger_icon_button", + cls: "trigger-icon-button", + ref: function (_ref) { + self.triggerBtn = _ref; + }, + width: o.height, + height: o.height, + listeners: [ + { + eventName: BI.TriggerIconButton.EVENT_CHANGE, + action: function () { + if (self.combo.isViewVisible()) { + self.combo.hideView(); + } else { + self.combo.showView(); + } + } + } + ] + }; }, setValue: function (v) { diff --git a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js index 11789b5ac..3d9614544 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js @@ -102,17 +102,8 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { }] }, width: "fill", - }, { - el: { - type: "bi.trigger_icon_button", - cls: "trigger-icon-button", - ref: function (_ref) { - self.triggerBtn = _ref; + rgap: 24 }, - width: 24, - }, - width: 24, - } ] }; }, From 1317564a0ff9c70d3ad0b4901c904c0952296972 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 1 Aug 2022 17:56:26 +0800 Subject: [PATCH 047/161] auto upgrade version to 2.0.20220801175612 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 45fa023da..ef2db899a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220729175453", + "version": "2.0.20220801175612", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From abe1b1989be5d8576bbbefa34b3c4c21d0a1b8f5 Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 1 Aug 2022 18:20:18 +0800 Subject: [PATCH 048/161] =?UTF-8?q?KERNEL-11422=20feat:=20=E7=BB=99?= =?UTF-8?q?=E4=B8=8B=E6=8B=89=E6=A1=86=E9=83=BD=E6=B7=BB=E5=8A=A0valueForm?= =?UTF-8?q?atter=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../multilayerselecttree.combo.js | 4 +++- .../multilayerselecttree.trigger.js | 16 ++++++---------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/widget/multilayerselecttree/multilayerselecttree.combo.js b/src/widget/multilayerselecttree/multilayerselecttree.combo.js index b0371bd59..519b45f76 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.combo.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.combo.js @@ -36,6 +36,7 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { var baseConfig = this._getBaseConfig(); + if (o.allowEdit) { return { type: "bi.absolute", @@ -65,6 +66,7 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { value: o.value, tipType: o.tipType, warningTitle: o.warningTitle, + valueFormatter: o.valueFormatter, } }, { cls }); }, @@ -287,4 +289,4 @@ BI.MultiLayerSelectTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiLayerSelectTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSelectTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; BI.MultiLayerSelectTreeCombo.EVENT_CLICK_ITEM = "EVENT_CLICK_ITEM"; -BI.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo); \ No newline at end of file +BI.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo); diff --git a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js index 3d9614544..f59ab6251 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js @@ -19,7 +19,7 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { if (o.itemsCreator === BI.emptyFn) { this._initData(); } - + return { type: "bi.horizontal_fill", items: [ @@ -103,7 +103,7 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { }, width: "fill", rgap: 24 - }, + }, ] }; }, @@ -181,15 +181,11 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { return o.valueFormatter(v); } - if (o.itemsCreator === BI.emptyFn) { - var result = BI.find(o.items, function (i, item) { - return item.value === v; - }); - - return BI.isNotNull(result) ? result.text : o.text; - } + var result = BI.find(o.items, function (i, item) { + return item.value === v; + }); - return v; + return BI.isNotNull(result) ? result.text : (o.text ?? v); }, _getShowText: function () { From 002343976de549f06fa88cbfa28bb8eb995b3412 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 2 Aug 2022 09:54:23 +0800 Subject: [PATCH 049/161] auto upgrade version to 2.0.20220802095411 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ef2db899a..bece05fab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220801175612", + "version": "2.0.20220802095411", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From d44df0fc720fe4be23808a557f322c77b7563af5 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 2 Aug 2022 11:45:21 +0800 Subject: [PATCH 050/161] auto upgrade version to 2.0.20220802114505 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bece05fab..794a31d0b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220802095411", + "version": "2.0.20220802114505", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From afe02f585eaba2fcc7f880f293b32b2adf3e047e Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Tue, 2 Aug 2022 14:21:22 +0800 Subject: [PATCH 051/161] =?UTF-8?q?KERNEL-12093=20feat:=20=E6=8B=93?= =?UTF-8?q?=E5=B1=95=E4=B8=8Bfui-worker=E6=94=AF=E6=8C=81=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/template/main_thread.helper.t | 4 ++- .../worker-loader.js | 29 ++++++++++++------- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t index af02e5192..c0e1c6b2b 100644 --- a/bin/cli/worker/template/main_thread.helper.t +++ b/bin/cli/worker/template/main_thread.helper.t @@ -1,6 +1,7 @@ import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_thread'; // 不需要一起打包的话则不需要引入这行 -import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; +// 根据实际需求传入inline属性,true -> blob url,false -> servicePath +import { workerUrl } from 'fui-worker?inline=true!./worker_thread/${workerName}_worker_thread'; export class ${WorkerName}WorkerHelper { private worker: ${WorkerName}MainThreadWorker; @@ -23,6 +24,7 @@ export class ${WorkerName}WorkerHelper { /** * 格式化worker url,比如补充一些环境信息到参数里 + * 通过 #hash 传入blob url或 ?params 传入servicePath * @param url worker url */ private urlFormatter(url: string) { diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index 9affe81f4..fd91bb829 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -43,7 +43,7 @@ function loader() { const entryFileName = `${FileNamePrefix}index`; // 获取传递给 loader 的 options - loaderUtils.getOptions(this) || {}; + const options = loaderUtils.getOptions(this) || {}; // 创建 childCompiler, 用于实现 worker 构建为独立 js 资源 const childCompiler = this._compilation.createChildCompiler(WorkerLoaderName, { @@ -92,15 +92,24 @@ function loader() { return callback(error); } - return callback( - null, - // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 - // 添加 @ts-nocheck 避免 ts-check 报错 - `// @ts-nocheck - const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; - export const workerUrl = servicePath; - ` - ); + // 支持blob url形式 + return options.inline + ? callback( + null, + // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 + // 添加 @ts-nocheck 避免 ts-check 报错 + `// @ts-nocheck + const blob = new Blob([${JSON.stringify(compilation.assets[entry].source())}]); + export const workerUrl = window.URL.createObjectURL(blob); + ` + ) + : callback( + null, + `// @ts-nocheck + const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; + export const workerUrl = servicePath; + ` + ) }); return; From e7e34fc1149b3eebd09f2b16ca6ce7f6ce0fb5a1 Mon Sep 17 00:00:00 2001 From: windy Date: Tue, 2 Aug 2022 14:36:41 +0800 Subject: [PATCH 052/161] =?UTF-8?q?KERNEL-12166=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/font/iconfont.eot | Bin 227576 -> 235132 bytes dist/font/iconfont.svg | 316 ++++++++++++++++++++++++--------------- dist/font/iconfont.ttf | Bin 227408 -> 234964 bytes dist/font/iconfont.woff | Bin 110144 -> 114020 bytes dist/font/iconfont.woff2 | Bin 83548 -> 86524 bytes 5 files changed, 192 insertions(+), 124 deletions(-) diff --git a/dist/font/iconfont.eot b/dist/font/iconfont.eot index 6cd1f1cf2d8e709446728e18bf629102f967be1c..3ddfa699967d6b19956e0c97588bba9dabae1aad 100644 GIT binary patch delta 47417 zcmbrn37pk)`~QDk*ZVAUWs26A%wbS`bz2eVoI5BWd!?%Ir&7t^!G!!Oo*!+6pLT(t5eAnjY3wYFF$^=y{j# z3h7GM*0pyX-L>vIew2s18~A!x?$)>p&gDEV;396r8@V*XZMi*n8_$U5_f8)b+m9TikFY%Hjsgf?4k}Wxs zCxy~R%A~z?k_xGkTInWBq=)pDzA{S2$apzHPLh*lHjjN?=E;0HTP~4HWw~4`A%uA|5^*a(&Cl}lu83dcfAXvRI`8Cn_&xrB zKjKfgk-y;m{FS?qzvY8S`hW8w{trim#EDM=k|-&XCK-|?t)#USNU@YkJL%}!xKg^` zmAQ7(NBT!(kQ^(+Wu%OjaWYXR$yAvkv*Z*xRp!bWa+WMa?42izB_c~@nOrVc%GJ_9 zC9+2TDX+?h^0Dld&*Tf)Cr$FTd?!E1&+@DMF3rfS&iP!xCAt(Bbm=a`g)Vi^SgMLW5bxyT7_lAGeDxfyPzJK4>4r@FcBbT{9fagO~0OR;5B>;-^O?FdcK$M=LdNc^5bLt1V6*u z`2~KNU*XsIO@5o-<=u#`k9jYD&M4OS8~&bu@P*Cvv=ul_4@rj*|&;qD+zLG82(JM^2N|*OxEN1l>rWPp#Ibk#qs%c9xb8|>1+Ck z_Rz=l34Mxct&u*Xb7?-ENoUd7w15`UIdlfirPFC1okpk9DKwi-ra3f=X3{j8PBZ8v z8cXA7JWZg{G?5}F(24XpeL-K+KH5)Bbb!9159oc`O>fcL^bYN!cj-OaNpI5Y^ai~~ zbto%#Pz}98uTm{aj%w;cFVV|1i7Kgz)=+1vpmO>Ly+F@XC)7yosRM1NXX!cAxzEtk zbRRuNkJA&hm7b)h=)nj*L=V$u+Cq=gBeb6GrcE@4+EH67q5EkvO`)lD58X=}=nlG* z?xLIMX1aye(yeqG-A?PMfmYECbR(^%>*#t~N!QZVbPcVbtLREPo<`9~I*vxrFd9xn z=~(JR_0*esQBUeY-KiTLLqob!DV0$%6;UA-P(I~RYsw`-eVRkr)QYkwlftMEgOo<; z6h|S-pkzv+1WKeN)V2ZglaIXQ*<6v8$dQhltR{6^wU#yHC+JOv`~tn%kl&!U7;+f8 z))1|s(TY)=K+ytG99lY!w;L`Fy3TM3&^uy8$R%UvPJ!8QP9&eAwV@C}K@L(fESF+9Z0>U=Q>q zgEe|zHrNOKr@?;c4udt?UokiUebrzzyBhyR6wwWuHq`iw4|u&s;cK9o2Csv{m=#7A-Unk= zWF-{FtVH-8?7*58M*iKGWAI(jTtl9Qwl*AMY+s(?E{5hC@+`E#aF;*}4S60~WVlPA z#fH2NZG-g3hU7&Ylo$dd+gED1%b{h4y8_zQa92Uw8Ez!Bz2T0Bb}(cfw4>q1LN&&K z8xJiv+(ZqH8U}DDLMsfXhSSB6x1p7WybG-|1O~dV+Hg~$HHMoGtu@@$&^p6u$ko08 zTJE&38;D?oiih?cV>pe@?gkq6w6BMO+JW}V6_3f zP~kREHQEtKf8L0l;|$hx*YpIep&VtfhVpoWHI$49ELD!DXvL-avSTOd84ml@I3+2# zn!J%~umPfJs(BXh^U#$>tQ5Nr`#>~VG;0FU=x;DYL$b;c^}J?fAnM5*4bk_kHsmI# zW@QkOwb;=UKyHWLY{;F^TMXF%)%$?xi*7YU9ly3M0=KKsOpL z4f>$rLJ{n!Zvpp*K5RI((oF^rf@&xL4}m^vU>t(>Z8p%apnY2m^fzeVV+ML1wC{1l z6+oXb_;~165Wxn67_{$61DzDw_mshEI8Pg_1&>A<;Azlj3_c0^tiftf8k2zMK(`yL z`Cn}cux4|OVZdi;{(k`nfEPkvG2Fic6;x`OdgL>0oHOid^uZ6y4@a@pI4Zailj=^d(y9`#_c-LU0 z|GxJO)}(&lh}Ap0HT`$PcbbkL7}~_%_o2a>MrwqBH7WKOtWo~45zDS>oWK=9KQ&lm zbFaY~YmEkL?0jZ$M595i8L)=-3xhROYT1C*_xlW1PwqEZJ=SEfdfsyx1pUe2|3H5>I11JKfatTo z7~-J68sgLZuMPkSKz}nN5&F9!DNuD7NE-C8AsNtSL$aXyLLjZ6M+|9Agh0oT0w_YE zNHG+?+Am0dDa8(arARv{(qEB|P_NPgKBz^TVZ8BRTOyy4UXqYbAo9b-6s(OARH zf@;nI?iA>FP5<#Ym;;?)I5m`shC2;hSRj3Vz_zGsfIfP zI?ZrrLZ=%payE8m7;Yg{qXxKhp)(Dq*-3p4+y&5+4b~{tPyp7Ln{BYhoCXLm(s}=> z2KR$%fBw}3UePB&PSLVXTcqhDhHutu|n0mI;701~ou{HKrCA ztTCd21FRuG$KaWo|23q5H6)7+Rv&Aq0jtN(H&{KOF#uR!q=gG$b?`!i^|^}-*6W(Y zfUkotF?bd9Vnr{k#?DfM?}J`q@Waq$20sG5)Zi`9%M5-Jdbz>dpvw)XF>!^#&q1#= z_#e=#3{j1&zy^r=?rMWyf?i|r4(PQ8zX4ro@LN!Q2JkNE^#(UV8w?o$)sO+pHRNvSt%hg}-Db!W(Ay2sfUPq` z19pd|{~dVozi@D;AsWiN4A}`?Z^%1PeF>2Fp!XQm33{&~jnEB-d=J&+1o9*Fenb8Z zeZY`INdNsC4fzlBK|`X@hYZJ1wFTfj&`pN(Lmx3*JoHh+B|$eEE)}Y=0bCaJF~hZj zJ`N(-xIFA=Gy!)UbgSV;LDj&3tAjpexNgv=4c7&#h6h{~^cll-hdyh#o=`PH;Ce&1 z8?KM$|L1W4oE8phoxlx%zF@dP&=(Ci1gdEWoEp)~h8qt3r{P9JHEn?#1AWDCxNTfR9gUU2J}tC&4j950H-D4TZWqrecN!SLe*Y?n+x4# zxYMEU8g4%HJxzZYlRFFgzTp-?cN^{;=m&;d1pUx(=R-d-++ye+!(9aZ*lxqwGu-vi{f29RHW_Xe^nl@R zgnnhX)zGgs{jqU3;ouvCTSLD!I3N0*!G+N84K9WrG`Ix%gTZCc9}R8?{mI}C(4P(N z1l24ExU=T}UvL0eE%{f2tDuJrR;&Nb;2P-f25XMcEDKn3#9@Qg@|z7-%a0nYmVdaAk-Q9vL=tgL!n-SVfjrygOPQc{05JL#u+>Y8ZdY~G~VEe z&`1I{fG0r{4W0^3GI$0w+2C2w6oY3&Qw=^18Z;Od-jrtWnb35DVbo0_gU^L#7!igg zH)R@pAvA0-thXu4;7g#{2E$;RS{Zx=G{;~VX_H1P;A^3*f!FNDmYznW3wlVl#C=5^G`=O-lx;W2hP%;JwhU27eBPl`FgtdW^vbps;v_zk&8J_{A z2%T%lBIrCrE`X{7KrVuwVaUbM`35}zRfmCG20hD=E1+i^vI45_19GkA|AjaJay|4M zLvDbcYshM-dIZSL(DMx03O(PD$Dry#AooER8}cahLPH*gs>gw7AT{YD*vPHeSz^dK zsD=p0UC^b5+ylMDkf)%_40#56sUfdGHPk>}gI;csgDy8@J5*x>$P3WOmDm7z8G4l= zZ$UMhfb4=^ZOHr3YYh1SdaXfipeqg81HI0WPoWyCfHZ&&hE{q_s|>8}!Hz~ZkguRO z8uBevqaMgX=o*96_nJ)sX-sL70MZcNVvvS>tw99ph5kh4;j=KszwD!4RMn}YM_r8q=u_T2n2T4piR{#O;11vpz0VP&93SgAoYy81xP)tZUIsct6P9HM$|1p8Y6Hkq8rjE zQO5uwHk#Br0cnhUW01zkw+3l6e`kLSs2u7w=pRs@K`%i4hA#Cu5NGJX#eqlw8$cbQ z@dmYrCK%KKnrP5=Xp%w5!v~TLdJdXm&^BnQLCEt5f(AVeO*7~|Xu1)h$FLJJ=y7O< zK~F$44cZC~8}uYJ%b=&A*#VvvhUOZy8QR*QEzmrqKQ=^<;vnCkN1z1; zt%nvGbT_ofpiR(XgT_GH7}O40Vo+OXsiAWO2g(ecvN@pF08K{vAJB&YO@V6E1DXoe zs0VZpRFenLy--azKpUW%=78>is$BrO6RLIr=q@OXP@$WkYF~hEhN^uFh4wY*YG^-$u7UP9Xa#hDp>sk91{!oFbdW*ELkGt|{Ex!U5Q9cS zk2UBx=um@3K!+KmI@};ty#`3{)n@>y8|oGy^}N0VP(4&%4oCw#8t*?a8V4E+YDj=I zdd3>0(KgN?jn44~X_QYeNTYnBL7FTl7^KE`qCskWlMGVBoorA>pr;v>4V|m$j}5iL!90UBZ!a<^6MCLO zVd(h=r9v+-C^MF#RA9{d&feG(!! zaF{6mAW;HLDzPn5(ggSz-b#U{!iCh=h=QAl((qh5j??!bsJn?Wnux-ah_V(FW#isf z!-#U`6Xo_GYF&@;=k+Jb+d`BNNAux80sLNsn~DzN7hfGQy_rf>3I|K!P}xYZjHoSM z)(*7aOVnW}Di7S(5yzbp!8)Sy1w<8it^(&O@oeQb)MnM-5K%Smt%iqca9pzj;jf)b zRF?%d5p`Wc)NKP%k6dH}IM55)YX|a50rHNr82JhGT?M`&>IcvFAA{!dBBFt_i3TMS z4aPHrcOegkkSFI84ckUE0{h3UAQ}nJkAjXKhTptxMYAh{7miy_G=2@y1bAQ~96E6@ z*p7O68Vcx+D2ow-sT+u<%|v5vF42rO0Qb*0L^Kl)&59#BS$U1<6kMOZfM^cxnS*;y zg$GW9J98%x&8q-SXqB!dn%|Y^%pI`*vtA@Rdk@h9ICf3}_=f1*MMR6X5}h{*4SV?h zf(b;6tHEycJaF$thwvbtTQUY+AiVhEB}7XXqZfmhUIJZKkFE~RUkW!a8w}Qf!$g-a zLpP}hSO@T)EBYh-uUJoXC2qbFKD}}q=Fzc#)hePDsbB@sH6DN$uAG1}8V)ri65R*~ zR`(}bvjertLDVM8QHc})Jiiv6x^)36jIO9Cs)^QZLG831wGy7WYc0|Gl|*;ro_j)I zFw*~CIC$?aRAX3qNav zjz9sx{uem+#Wtk>m%Fi61s8P0UdJsC;Nn-f_zfKWb_LP*ZNVX;AK;N6aPLnQ0Oxx{G1@O@C%ZUC1cMmTBIBrJlL_+}YIMM@k!(yzzqJzYe z3dRt-MPL`P2m4;!;N4B^s|V|d{kX?Jn>el`SWg_7MjSr@Y{d@t(5lZ@*r zU5QaLaw^;pE&@C7yNnIQ>C1^j69A4gB8&0c3uOy&I19g9#RFM$iL+eG;cg>|kHO1(z(YN8z9;VQ1$TSlTyMO*H;(Ix@mzykyNgTt7CXd)hj{lV)2_J`DCu6`}?P~1Nh_YSKd9zK$Eo}NckgKYpW zI&MC|Go$eAs5Rg<;^Vht-hMXmn2ul-*n@?KE0O-=a4-%B<5yw=eDVlMIITyThZ$`0bGiKrywNM|Q_2CmJ(^Cv9_cy8u0;#q^i7Gf03dX>fmTWF$5}6Q7P3p8?Kni)D%HF}c5vcma+V;^A{<6Q7IyMO}%{TSk0- zJ@EzA#3+&(MKWKA>laN!T8;tVU}YliTM7?d@*43n+mvkpx5uh3dJqNt5y=)&;vxy&?1n}U)2+gLo#E;YyKZ<)c;{{u)i66tgkHJHa?;(C- zG4WP-=E+^ePaP!QRsgmVKiii0x%I@`mt%49Fya>yiC@eGYmxph!LgSSHUDfP-Z2;K zCVpiv@vBRSUt0!n{5tdvJov^sOmA$&N<}#SR)6BRdl0`fAH0ZF2=K_elfX8tSga?0 ze+Br4c=t}?4{-m7@YF|mW=}`3iumIY@h6d)#Gft#xVRTDYQzgZ!$T+{`3vynG)#9? z6YnnoIL2TKA6Sd!i#Y!^&VRiU(;g#bX)@sC@HQEKu} zuMz*;9~{Q7e76(-g6AT?hKPS%Pkbl~yh!{TZv1^6@qdP4S$sWlGl*^?KC+GkC8h8l z64#N$;{oeQyudesBz`71M3S(bBnj7&=aZzYBuNc{Z6v`JSiQK4B)ttus4c*?j5Sz) zojHsovkB86a3Bj8vcA9)#vUYSBuXxR*w-4GR{-#m{JA6rxK_A~qzKOx8*we*Wf#`Xt? zNyhgenSh%o;+~1?u%3Q7$)sGco@6rao3fo`Dm*^zHInHslFV2|a?)awS=A&b!_8Bc zk<7*m=ivIOc<$7_By&3goR7@iLoyGZIK2Ywz*5I;B=h0uSvWo$j-EZAWFa0t2acVC z`_5fLvIxhEaQ-}8M`0uvj3ikM$1a3ki0c=@%?OT{;GT<90b*q7G?Gg~Sm_84T-qPg zBe-^XJ<@+UPA?_GJOhP?HxnXhzpIgNj_Ug@;Pq&9Qq|*@+EHC zw~J&yUW8d3IRMALT1$e$N4~-R-{SiB^_U`ALGr^EaFFCjJpWUFfO9|No}b~dfA;`O zNPfk+-@xx%N&chh-<(Pkg)dRa;1eJyWa!BE?m8?S3hU@)dXcX+hr%2TWp?Mv+L|EO z_T=i)VsAy4>Rwz`Se3{A3|#g5I&e{0DXy;z<$5_kH#9$#%Vpl&P;(CnB*~gouZN>M zohMiy^tkA5mzo=D=l4bR;ydw+rPCOpFuuBqT<6M{iE|`2C)AKAGE6 zOE1~2#k^2DMlh;$CWQTEb+wiGkYHWd?Gd=Q^N2x9!C=M)Sx%|b}ZxvaFvpUnPXD4dzknc+Odc3o|6#-;|}4k;=v zi~X&x!-=|HT$ve;{YAw4ec_CdKUs>@jh^`4MrG|ECmKGP8jb|KL0^7N<;B?fc;epr?o8hOdGOGbuLs~&j#fvP`_GP1i|cl~u;vSn(; z@!_nj@bMMV+E8+Qsy`22!M{9zYJ75tFA8O6hmz8hQUdYuDM@Kbp@<%*C8fm22U3#K z%NHl5hKe&XibJVMiwjFjpT0ObC8H<<|5B1KPD;qg%F4ii3&vB9L_F*+#%M|%M&HiB zRNv(o{#%PrZcImXg)*xuYhZ>&t`d<^S6f~7M+EvZLgCuFs&JROs?2b4X<3(uzqqW} z=P%CVaHjJW7nRlEVZ>^6XRZoo`f;x>>?TI; zXer{qsuI!d3)fU-;BRqFF?Nc>#Wi?K2KK{sRb{1}8Hsgt6S0&lDl5jRa`qSbEP+Mc zPGLK$(sb?3u`5VewSaD{PIP9UKf~wmf@Jpl5K6U(Kb(%eqOLY}e?B9;8pd!Jb4A@y zry`u;_Z9n#@T%h2rF<#vjDKo#U1CmE!_l%@L`FV`Qt;6UM4FtM-Kq=zojQB!q-)CB zwk^A6($t-?-2zWy$Li`1$8KuuoBwNs{5=N1N%{BbGq34yZW+;|Dc7iQcR z>eD*VDpD5C?v#{R(mg9Kl$n~AU7nPqMm ziU;EJBqn>}#Ie`s3nfGX_?(V@QOBE<81VS?!#Ym99v}XCeR1M-{*2^QkMpFt^tk-? zY0i_7Bpy7Ql;BAZ2{MSs&wh`@dnC=D93O`d`berLo&)iLIFB&-0Vp=-Z+2Ks8M&`Icn6@hIZ|_uFRXpaq&rUtrm>SOYA=2 z%y4RYFflbHn4A>|C1>ZQ1mjW??VwdKJu}x6&Yqi_J+m&?oA%n~>j{?TdK0q4-hc;@ z>v0LG;zg=xTsvR9CqBs+ha`zV1(D+M;$e*=ykk2H9*%QJVu#u$R^u#*<@GG;O62|T zIXV=xYdDG$zFe~mv{a22Wq)R6Z+t{Xv(oCdpL13Lum6^P_@Iv$-#qe49^*4FUVLZ7 zhi{8`@u47I-Di!2BXVx^JHdxY7+*+|eDU#1j4veN12~NDoOt0WhXQCfzR%JYHO(NM zNkv7N(NYQa2JwH^nsHwmKYrWIw(_!s|c)jjrY3Jf_b4mc$+3%u12eY$-M<^{jJ5AcRsj3=MRULiw zFX!&pD@RDr@NB=Q07V5{6@1Jn&gCQre8^U=&f`P=@&%H@ey_I!Y}<#z%bV->!C(4- z^G7u6;LZAo7i9&kunvWZK9lA5dOE-rErj$DMjkf*Fy1;29>PE2KRglhYKw=k4+|x~ zZrn6!!c0UMb1NM%K{QlN6|o6JtSQV06{9Mvs?in^4t&L~Fr(1BdejKXUp;Mvq{cQ8 z*V`Lc(Y&J~&g+enHF4hJ<{i?td6^dG179h2T*U<>#pk*e_ZfM3?d$W*H$2a8eZne7A2+oOU_WasycOlHQjnL`5 z^jO0PO;k0v)|x@pOpzzGHCTsu&^%d`jBhL<-&XZP*8TI2vSMvIAuDRbu{&--+@Vf? zt+b@R&#Q`b19e(_u&lZ+6OTJwH1o+Z(PJ(={+vk0uS1 zEyITK;n;IACwk+b4C$DhmK!Pv<)$Tf7+M~?p?>Acm9fI`dG{Qe z-+grLPKkQz51-W>-HT`&#ez`v=ibo}p}9~~oKb})k0yE@+Ub>f97={eWxb`!BD4de z-J~sgZOv=Zm4eIK)JHQv1%)hUIqw=xzBRV>;@e){J+bXt=k4ZoYulIZIV(41kk>8l zd*-EQ_U(ISzswBwcO0z`4GQ>*GRt(YtZjWlVn0+$p1O|Se#g&W{cRoRN6G`~$F48w zu)%o;_0>o5yhpNL^}15$?GVcLc-nY8IMo`^2-Vy!v|1`3Wnvoo)kj_h||D{7z81zN_K`ny$ z|H?Avd!1}j|3r7zwnC52%QOG?5dRTi`5BK!G@hd0RrcrQaK`-~hYCF>7{V3Oi22!k ztkFShp~ZU5aM6IzI9d_6RLm#|>e36-W1ZJBR!jG@FOtc{>2A5leeckI{M+X6Pwl*N z3KyLs-gX}JSicf)i5G&;_}%f;0oSg9f;EMrzR$Db*%Bx*nO8 zbuQLIXeO=E3uL?XNux`6T67(wA(M-mjB`AhY!wY0xDh-%!bbJQ;Q>uL&*79_FK zrM9Xh6M;h4Db`>UJ#?pUle&#pKc$_nXTotw2qjdVq3S}i*F!R7YANkJT(8FMFB z+nz^5dEoD%x#Cy(ViH{(x_33s$ui5z`w2Y;l|61|$oL^swm`T#A_68(2TgC@Do_eZqA zG0drH;uXrrR0Ny*qYl+{32+xQTK`_JGHQZP)SjE)KwI4x{T&VSO6Q4SpeBSSyF{Di z0S`X+sTLpoDEfAL-NPZbgUxUu-eoy+625Fs;a@obIhh7m>!GiLhfX8M{<&GsMGxA6+y4i9If`)?L+Io^Fw(vVK8_2g2scrN-|28e#r za{3hyK9z~vu=zYQl-<0|i>BCwj&&Y#$AeQFpi*u4`=|#Y8^BkVii*Q-`gLtsyf4AsLa>!*5_&A{k~1|K6JRkd8^^M`Bwwk@r}Fp9r4?9U9>>9(%MSBG(! zvX*VhUt%O;?JSfYZY2URWp10|;x@5(h&#sD{C&poW7<|u>|CB&m((w=E9X|FPAl&; zAiw)rnZrg8zBFOffP(I)we6l?ofG}yZxO{2(NNd=y7^;qP+C&NGpqBvx2-yuh07HQp-EH8`<`l;Te5j_-kaviiRVPxFfC*tAqw& zk>50$t82;8(L|{8(Cz6g$y|=F>}EC;F0G0ra~}4~#fMIgH9S#zl<2;8cd(xxYhM+j zU)TZNMxW*mZIq+zbPWZ$Njbv(_j-593;iU9w#ode2TctNsNe)j- zN>5LUuEUw4?#0t^mh019RxsG5Z{IG#V1G#TSG{GsZn!>n_rJ6olQAu)#K8r9Cc0f8 zEH4~?LdozzcDnO>hP93_88LlI-^?6-vmxV>lE~hyn1kl*#PpoBw4C(qCR|wBs!yL* zrG@HvVQd>4&D`srM>Ms;0@R_g!Axz4R-w&_3J$H#LbR^Y-P0_uBWt*ZNT^LOY-!%t zAYY^)Dmx2?KT$1Uh)d9+7mVy$lk|UzGC?Rcau5~GOa2xmuWMwv`&VMAWBsjkV(Gi8Aw5@$~k{tN6-o5AW!)V_kvX zF?Zm=_!Dn>`ng-C1?w+8F%lO{_PK<(5ogtwDpCu)Y45U4~9D|K{;T z5#XKgyrZ=YdZ9;_VCY~8dZFo9a@ZNAr?)_^^fxE=IE?kKMA(k5|QA)%DivEa3 zM<}yS&sSzfLKs@rp;?S)q8AeiXB2m4^k!;sq-3}ovV+a-wP&v19DO$}JGwP56ihA& zXQibk1w*a!JG5I>P*zr7T3Qgy2(`(`n28ao)bfHnk8U6B+O_YDv6?L$`uImEJMG=( zkt7QhIPu#t8Cr6GB3M6IWM7T>}|bMi#qKqY6XV zRY?E3VpK6zVI7+;EvxB;EQI0%9opD{5?s>J=>HxiH5qM-yLBn9=7Oevb#;BFZ>lIn zk(E+ZaZRW5I-QVEolsa+QZ=CzqjG#nPEl%7AhBC@WqNu_Qg$RWv*^FX&)80_22JbL zzyEDH?OTmLyAjh9kj|17v1s4?w=2!t+-&!+GryGJQDqmSSN-@I`4#* z3KF$sf3J%*8?iweVs+G!m)#@qeb-!`_ z29~y!2u73x*)BeAIu{i#9G3mGFPtRdesG^3KUQnfPG+d1&zH;Na1r&^nAU9jCus`M((s^;ZRp3xicb z9cpPAB#l{d9%_czu;_mq6^)=7z4!lZSaieu`BE@{>;K=e(ZS92vc0)}@Sh{3Hb5G# zIXXfb>rp@LUc{#fLR8R@{B-!_bT3+gUSF*5BXq%>lY8{))#KzjzZ~5u<}{x#`kg;1 zssG>3$8L~|9`+=A9`^X-cuJf`8hLzd)*XmKF9FBMkgM~a>O`2m3 zy5=VBTeMhq*H}I%&>s2GI}W1z5z8lf%i!kuD6-;^j0Z8Xdo(lV#9maUKk#T79 z(nd2RYVaCAN~tgks&E9GIuu%EI5Gc^_a4oH8#ZhhylK-R$c96k{+8PcHXLlZ5W8j5 zrcLk&`dvqUM2jJaUrV5$fZFiS$-87UjWBLgQ;y8uGH{iFv8#B@f%Ouvj`goDyqvQl zVYj_sw}eRp2HiPmz@&t3{VK=T)%5FEGjQRR3kT{>-T2CAtvAX0zH^<>!o9@fLHV#0 zd*zsWDCmE7(TF8&N=n)+8Buh0|6@)blsq(j@`B0f0~Yr0zi>cocWCmUlfU=kc^@2* zr5w?ijb4ntMkkz#XdR$6-1|sT+!rd#?~D)Er^L5T#Q#>|3$+O+rX?g~99Q0seF@n~iD_x+ znFWa%d}oJQE8j}zk~Zzr6WJRIhvNN-DMfsV<8vk8CZO}XQhl>9hcP{s>D+%XW}YUy zJmP5{9C$P?YsBzKa^A+}S(11MdcyuQ!r85>a@!UHY&5ub>0$GIUB;X=rVA$P zqH{1o$H|@xJ^1HxajC!`kSgb@1hK!@ABcLctsYlZHLm(vPiv1zYtL+tr_k$-mBCxw zWA0c=MR%lM1V2=njjYo$_TYSIG`kec4Rb{otzOVeYZ>vyAZcb8xkpzJ^wh-!u(Glm z{L|agD|;~p#xX38Oy^=VI6gl*dPm1qQODKQ%KHg<3FQe1*Tqjv3decddGB7F7Ad(n zx~V?DE~B8}*b9dYx$xK?rwtFrr=|uun2}MM5a-8KhmU>1_*P$co7%PO)U$N+i%!rc zq!hF%?N!nxuT@3vG3CKrJ~knt6JBtYFVB;hl{m&f@q*&S3;4zU9ftIa8*<^Q3x`xr z=$fA!A9q4RQbJ%t;w3Y-WLM3o=QGMUF+DN2xl@bdc!L|;?Sd=bm~(Y@LUy|zqvnkm z*sZRhwnKW$@C1sSl_+xZk;YXtyy2|lhf1)x;icpI%A`pRNuzsaHt+PhSZ~H|)KQG? zG`8X7(WCXo=SSD;js7tMvtu{LQsf6XnSvjn=-^%r9oH~-%<$N~W9szY=$Jk}yLa=T zu?N{-j34$)!ut7>$9GD@c)`)JJ&M6Y@)+sIrVp6e5||LJPSEQtA)`GWfSt-u5J+g*9w08Zzyun^%%H$1!ncTJ`jC1 zc9*aDZ|2w|T4jN|yKoUbh7K4kg`S ziQ566`@L^^cb|Rs>h14I@#gWfR`^njFj6~8f3{nqLsP{W4Zob$F2P2#x-+6>b#IYy zL$A3R{B^^)xrHa}Ri_U&uZ+d)BBaGZJrPaC(0E%6+v@=~Cm~s8?9u}cIqwV{wRP?x zGy)#NWco|7a)Q)%sNZE>H0Irdo8O$fM6wF-OU+}@aXbMz{%CvH6{iYc0kw z03DkEI$AZw%DcjFU2SZN*M>Izv9(sQQ96`&TJnWs#h|v%aj-_#48|;UBsSVSKNpcb zQUlw(3DHpJ^$tgj!x&==tD_KJ$sW(m&O6!Xf9hN;5;)h5 zlr_t?=_7~X;9wb}ZXs1MqvTu-5)g$YoGb7L8qx$#xgf(OdFtkn2TsL%Zu0njlf5Hc zHkNy2yUoRCekGAN-4lozZD1Xvzqf8#CH6J()!`iG}bG1TAh2g=>kmazA!q$%-MKCcsKf1>s=!R7*Q_zZ-;_-NUeuFSw zsNrh*+iB!6gv}fY`0M}Nby!NaD<03|@%Xi|IBCv`$!$l^zURkip0={KV}`U3S|?r6 zh_9?$-8spn<^Cn%EftG1juttE4J#URv-4n}v53ZItIa$`m#7CdIpV!c{)j;*ur$1*lFOLS@yExukH zwxNK^+SrA3o!dm@>$ot?t=Qql$k98G4jXWngsS|U@*MojuS&SN=ZHzsUsAJD@h=z0 z&pmhaYTchFH(j+L!TXUH{}KjX^~up2auW5SRN0x^Ca1i%Jf}_Wid}8&+^#mcgImsa zm}#fBwaMj<%dkB0UgY3=u}*PWbXUtQOYBYfA<}c_3=2g*#K+}Au(@`Kk3NWvkiQh& zGVY>1pfW6>L`{t`Q&hfaT}as9r3#gDX&F{k;U+YUYs->#RTxU)a_%MWeC{-5c*p9g zy-H8-IqI@rT>^nn>5A6XeRCdKU2$A~>$0q9LfyE|E84a7W#oD~cYY|^|KG<(1_VZ5 z&MU;Fq;wryvGkWd=bn&RQFFo#7m2GVS#f+(&kn&$9_lt}a_c&-2o9Uw?d28iPCct< z_oe5RKg7c?S#^Fd+I-B_?|38D3DnAN0KPde2cLDo#B9q{yY}J!m`v8PAvWJ0n^5*2 zovLo>*_ZgVQHqv@P07a2VkJn+vpaexkdY{T7LoU}sAqon*gJ#}5H=+mm#mbY;%*%$y#Z^Z}x>?;MD z+f753-R=)eYo4|)Hovx`ecm*@1GAPWnp^gDHl6-!2?&GmgP;as|ZOM8Y7PR^D)^zCE z0skI3p`y0(#NuczuSm*{W@=QqIDg>eyq(dmJ7a%%2gD6z)JQ@67!7L(JqcJo2bbEx zrDR`RVm5r>Z-;lJ!AH0uwdJmcq3g2SdxH1mb?DHeef#F={9a~h5mQ+qtO?c`;D3%8 zGiLCZ!6QeGTr&n`&DwSErbZrgPvPT?A^nkdI&v7-!bWsZT_e!12@x)-MRDWM^2f-v zJ2jB(q93@R{}&kQ84n{)uDF%!{7F8~v$uZBzhI>xm$>A>;hV5_@E3S|<6MmKeRb>8 z9$%6_`r57fbtAK3dvDtaTFh8&V9Bk?t8Ya*XKGR+C6V^%*~ZMF4Eemw3)}VkG_~tW z;8mB*n4*tO6aO(A$X$@3uxe9Z|L_@j{V)EY8zr9h$kx4Yo$m1t^m=c<^+{MT-;aDa z>N~Fo>%%;(K|5dKu)08`2z4#~cR(pZn@grT9_4~?kKNpj2=Om|PvD>j?ulpXt+)C- z1HGQ9xAx+I8}IRaJCZR;7$@f;5~8d19VKuI^Nh{!!YQbQ{u%twZ^@|fI&EJ1=>2i* zZ|L-NQK%MoRG|g_HlBD&J9vIsy88J}EX z4UNxaZhq$NM_~2bF#m&sV99@7sL^o82l>p{7IY>r{@+PBfK7DTpZmO~<)qh5`15RZ zLPOGr6E@HMus5pEhV=(JNnx;I&w)x$^E#f{ko8qX;CVsQ9NwqR zsOw^LYht4)uL`%!0hLwhXtE9aU|CjimC)?T6C>g4F*F=~9LtS7uMKSeH5{2Z`RXlW zU~4Z=-Qm(pwqx&Nu(Jzpt49m`7T2@Ktl8&}9)9d1smA);`c55hoq@U%wUk~SIOEoi zouZ4zij2+8?c00&^BD6Id22OVsBU#`?)kH4_2}8U^=$q4;uBZ3#{V!F!HoZr=VI+k z4PyuWNR`cu!?##-hKdS(4XlZeb#zfpp}tR#9Tbmpq~^2Ent?PZkM%g|l-tH(XWWd)C#zcQt9}8x3@=cmN zH@y=J#^W=(c8|6h=iIo>Lq;SgSIoJ;b7f`c`{!KcK^+haK0N=#-h3YN|FrfkfKgS~ z+Sz-bd1dmLJSLNbgv{hML*DNM5<-9^1P}-WBq<09l92ES5eN-F7_45!YBd_{!M4`e z+FP$xiCQ{n^%`weEcF-r+e%e@wD!u?T4P%)y_Y%tzqQYq$pE&0dwV0E*?XUT&e?mP zz1LcMt#7Rp?>`})6AR&6(hdoym*Pjk#7lzNOfu2wk}{G|BckQl51*F?sU_(YLTfGl zuk?6lLSln$kEdYq>5^?86%ks%oNNh|u{R5v^GlX@uda*D@h>W6K8r1SwCSr4P(xanelk0qE^&6<(qn9iUR93M;OJGL>zFHahq>+8Vpn1czz`hk5SOTqt2^o>O zoTQxUq%rnvj+!-}nbX_oje~xrMdOpXa=n|hKPr|-A6hqd#WN{mw?1oi$WlH!1tb(z zzCztTpSc5Hna{2lf&Xk_&CLI?xL0@}jCo+mtij8_kQ?cn<%BA*R>)eU|F_gKukIv; z_8HB^=U1h|hB@?KE!Skx&S7)U4nrpm#Jv){g9q4#qp}%fg2Hb3Lrm>5Y;Ltr0Os+5 zbEGO57{#KnyP!DyZ)`KZc}(D%;D>tWBt;9nx`=(k)AAVFwqe zPViWC9GM|e8M-GAR!fDp)*1nQttuzBHGl&%h-%S?=q&v_=#DpjKKeg z-!Z17)T9`?VG*g&10o2*4&)xlx+MM>5)etZ5O%7;1aQLZs?CB-44*ac0l5aw%BI!v zami9_mT%Em6bo?#BLo{n@HT5K&ts5FthVo&mEER9(IU)uTZQF-DbZm)WU?d-#%|nG zwc6h_LqG{Zdm4EsXp_)A?CPON3I0Skh)n2q416&-#&*Bibf?9EPf{z_nuYalGjCB6 z%)3nH@7b)T*tLQ$n(tpzIlM7;@S4D*>)3THehOsY0p^w|fnICX=F6C8w!Xb*l4*(CDcLE@Nr^dP~9hu_Vy;af@wIrsaX@nf7OMblXF>O!xJEsyj>e zTpuxgc&e}-J~LT@pGkUqJUGN~zt`@G3QYE}&qP%+_Lhy%#dKrOehWntGhPWP|KxsB zzL&60i-e#`^^;z74SOufmXjiToTGaB*rtM)dBzuWgC|77D!Do4`H!tPnWIUw7N|D z>d}Qm3ohn?tPOQuzYeP#JBT&#I-2}jJkh#~&IIpJ_g>A`1x{Yga+u#6zM#^R zaGvcVgi|K_81a*w5qd35y9?a|(fSx&{TQ?cxw|m+A#Mq9VbX4E$5jsD$bv6B5ZLbN@~71+O@sV0987;}x>V4C5PEOoL(Xo2XqfU%MOfHZ|tojuK= zQ9?=*>?*y&Wz;ehCvvAryc&F3GB9llzgi6sr0My>^Vl|__FqSTz^xuVx@>~Q>uK%B z_&qI9Y{o~#asAXZ^AEmqOr+}BLKEZ?I0!)mFlpx?2E4A9KYCO1LuFhPcc^?DG|x) z*L^%G>4(oeBa3jxBK{y*L7@8vw%X;yvySmUg37gEw*s8El)BXC?q&`C>O5%L$aP5m z=7K<-B06*KjKv0x5*E&SIv!$^Qn#t9a9yKY21}ZW^vdxu?c}GU38a~u2?m>YDH<;bfUo5()zEhExv+q zBI0DYdiZ2G5u7MrvTS16l5$6UyaP$Uk>;~~t&8qo)auiJxOMH)wt}Lfg0`g(FIh~9 z#Y@&KX==>FUt`muP(r(Zx>~4y*TvOh<`H^fUP^j;N;s9?l;`#4HJRlPNdGuH!4qHP z?}i6#kk)B^l``#0854|TiDVw81nfOFxg0G$T zt^%X?v1gc{rrbvmsuM5?V*rXS!77}Kl>uo6j2=7_`q%Bj%5H-V8komi8XS5ueA&p3iUSR_t4pq+J7 zO&s3k{A!{6*@UCGnw$Qth?dRAH*Y?EC@H@>FRvPH4V?N{<}tGa>VG}RW~wD|!oiq2 z>mjIFnY#EPwyF6*gz}_&I{nwwD@4%S=@6lGi3)u95Df4x5|1HpSJLJzBqLz2rn;VC z?skYkSl8r920M|VgVE(uV!SvrL`Us7dCwREIUkiW5lfY4V5psrzR>oUK;N_MWwR|Q ziVUKyQ5(l5Uv;THFS1oYc4|}V(=W0mrY3Dl+Zjmt3G-(ck$S=b@=59*X$SrPsC&jf zIO*^+?BI<63lixqc?vj)*&7B+%;cio5PO27$EkOatm$P^lFYu-MqjYPW39tAGb-Gd zu3zKvX2-ibb*|Uhu()VxVd2uwrA4f8sc=M_&&ums4UH1n*v-+Tw<7VV4yL&2q~=@x zr7u^wb93Fk{_Q1eb&B3u&{DLtb4gLr65KK>@Xe3dQwp0@*Z-bvNZ4Dnv?%2$-G4R4 zf0f0ip7=fVyhZXQyc)3mfn9IK)^{8q0?Gh~Z6)|_?dR~+5SN95F~n0rS9R`c?1%F% zWX-x!l|)U+n4jQ*J9OrHpTS)3)3bhdx1PA^=uLWJLhhB}QB}q15AuW%!M~ultQEs5 zXCz@bKRyOfoABcNcjSiIY`RZp#?Y&RCyRqe;WtF5ACcSWSksLt#C;?%jBXsR%Q8!O9qf^uf{f20#T)`=vRjl?Om9!!lHIUt+(C03=q><{S+ z!a9OeQ*E||^8gyqPMxn5*st(c^bxwY&Co6U40_{hBGdwHO(UcZXc_@HAh0o$w>td) zF1{h^fXX8rdKxr1vjFvp%5%vrwkr=80tZ>^v*4!Z0L7kR6_l1}qmGL>(C+mdy& zHg?#SITpvyX4ns9T24KpJoJEd_Pt}~%)8?F!HL+f&roh(I)3jxze{{!0iBcz#{ngKb$)Eb**Z;Q@W#T*6PM2H?c= zq+%G*jscfIo;My?&8q;PUjua47r|;m3l5@Y37-dT!913PxkUV|SBwXbS!|M$5K**QirRvQd6do4d7s6X z5Ca$>Tny}%6nE0lS8efe>5kawkZAA=_2zlA*iJn7jd>oSmc3Dkw3^s}la(^fGZij`_;ft}FEHiu#d%Wd6rdU!O zzQmHO!uJBX%lU7Z|8c;#7Xb`mmmBy_;1RaNObOGZB@b!{IetPnRfBO`yk;D;;B*Q3 zTC#8wi|XMj&4Ey^(Y-Q(W&lRcR9OyfevSohf#tN^G5>M9oLZP1MF=Ou&H0G^f{jN! zt7Qjgx>;p(Vp&;Y@+=W&z0nq{%xrILi?_6zta(-|fSs+j_~yoTw=Mn)j4!)(=@w@~ zLY_%ksKi?r&TH3RnX|SoeqBN}vu?9yC8re4s;Ydeva8H ziTUhEPfwq<4T)LScB|FekY197 zWT;Dj^wWxpPZ>){@)hQGe)_5QUw7K=Wig(Z!`Y?;M|AXeQ}Kq>j+Oj({{JhU6U7La zJQGW-8NN|nSZFZEmIJE`;AsVXzq}-Fhq5)b=Dg}S<~B;C+MnDRAf1y|oi1`AW<(DUcP%qdRoQ}!$S+iuz%y`T{ANs)$`c4`R{3;yf+``H~(t$ zhGEn0p3U!X>K+zi#~0S`$iJdz!eBmie+Ms5lG+9BeJH*E%%X_fU=RFE z2hVj#);~Fg2|Xn11pd?kE4!Z%+b;{E4Vh6spf2hqo@OU~a0F(Pkjgf!l9*;qku(DP z9h#ceIsY(?@P~-R#Wdm<)kmoP-z(RRs{2f)eW3K&{IL*~NQ{Y1cFcYGpCS^yTiJzwx3~qE#^)H z{XZIY3gazdUNGThGWGT^^Q6iwn0fLI#8_Ck@lNZTb#=O-hc*F7nQc)$$61o!N%lXf znTNnk#5uB6Gvq*m)kL%fx<D%tri}+1|W5y;=JdjFOyu)!DUc9n2JXvWsJHNVpdrXlVuG_JCn` zMO_BS=pN}J8iKcpkcn>^-lQ8QE_ArixrbqXCOO%##$b_SioleJ#aj#UE5YfhhWDh$ z5A_V#H^3FxjFJ(xrW$)2BBlhCtCA&^{C?+5C;sKe)6uDIkpoAETd?;64-N6t`$nix z_m~>FkILz68*^*#Fn6#_{`$;fslPK3L7(QBd8+@w8aR%@kGk-NcEsYUUgr@Cf6#c& z-TGtK%cUz1JeO{&`>cE)(!%r^vSOCe$={A>Cr3uKS0~v+kW}MVUAb5>n>$95xH)*% zsw`X=k0;MI^O(9>P>k_F!DTQL$tW<-V~0LRn!P0QgiKo)6hu6O;EGj8Y@C(_n0>Vr zUJ1hK74XV1mLUcZ?}U(L#^S;D9pPf~bNJgZHS_|~Fdv%hr{<%xy`h3hlW7tKoqX%T zgEyZ03$=e7HbpBCtm12mwG5lL8kt)B6lVBSt)UYOCy{-65nvYUZajGKPqen^TDn)n z%`LXT*?{-o9sur!k+3Y@hP#fu2dH=&_c_g(GX1*+j#IG zKj|MD=?6=EA+xY(X12u?o1Qj9iMGT$i!yT_PbtW)fTe(f+H>L0PqN}u7LJu^8mE-fvM&=cwItMZcbb4?DbIX)dRqU>g?W9}?p z4&tQ6DV8LA3~pzO_hfk<_mOJm!A<<%AbU#2PA@kGw1ZUI-T3^~jbJnImxlfUNLZjk zMMzagt370FGNvn72dqxWkgX;HwUP(mfnI9J2bD>>*$wd75LE#!;m2#%Z(m;{566dl zH_fiEpS`K~gHU34)9RIF<>h57SO1t2eoASZOk%yErO6ehJ#q~rAxnjhK;BMSP=3(q z&>421#&}N6dM*9Dr^v^(g`W~m2nU&C*3-RmVMS^ac}ThCU2T>+Y!*xc#xFdBKWNlJ z+GYui_VH?3G|yvPXToB0Y19yX3N3=xlAViiJ|L%Ip3T5J;n5i~aKlZOK*~Df4wLQ3 z!a|_waDj;^4c!o)ofz?uZ?>Q1=XfPq2F|TrpUtwdpriLwb2T?Sey-mfT~t*Rt^JWo zSd7dN_X$edSe?utrgMj7lD%!>Y1~wY5UK~bsnN`@12vpu;_2MH6^`hOKrxF9xcD-R zg-N^`{H-xw?2Icj(qKS{IzuU&=sV_dk9D$bYe9~e+ zEe;DeRE-OwR;fQ|<~e>c9_W}=iu*v2M#JPpp&tOYyg>6M7MEUgP3a=3^$@L|&d&KR zm%Bw*g0z%)JlX?5C0m3S*x^N}xxwu&U8F067I|E*1)ZH9?NiXILJ%!zd4fM*js!nh z>hYAe>Hv{eRGZ(~g?q{xEhYP}(EwDXCzx?dkLR-e*OavB4{URHcH#LRP8zY`FHjgb zwukRyp3~wk0A30RF@kxG?XN_ehgbgYf`rD24xgo6J{e!`7qdI#(k ze+xz0)p2jMnd4DSK$B|kn4{TQ(lBe+)9ubt5?cV1xSvvzU{Q=ND4})0X9NsXL{W3K z35bXijp~=qbGpppL_maQX-2$I6NUMeoexhU5MXj}DB%)-K>AeBU6OT)dxdZmG`^Jx zE)CVO)04mwAC;r2(DC8uqPn8(cPX}-u1aggqFJdnzjBvgAJaK(2SOxJW$+MO7h%;~Ft1U=KI+Kk+)4o;Rx>LBc- zCqz1YF!SK?*MdbOi2xWu!dUBTbNw@cQ22&WOuH1NRhV`mDC%4qO|6=a>_kL*Sf+2L zqev0r7m6+TCmM5(K&@J>NwiW1_h576k1SyICMu#d*~ks}@9op@-=cpI|2s*#}# zd3mgGsn*{i=Tkd%A_p=D z%0|%<)=0&Sj!q!-l|f!WG~~t_%g_@_VYeLdBC*8_QE?r$MV_3Y6o?Bht43_QLZ;qx z19<)Y^m6)T3v{ts#xyt9;=^2i!e<+~mvED??(SYl2&E(T$Ybq)$E7o+LSi8ES3MePcTi)2Px&QYBoR^U(&PXwa-y_d` zT^ID&0f}|5tJxq$-oHqtFfLtLT1GefDc!ZAyyMc%!jx|kBYm6aG*BbhZbkV|odVpW zNq0*|ty=Yv>4Pkm*aw7*Oa$FV|Zw6H#9DDgiXJE%IJehTn z{2v;T{{NlPP~ZI-&-ecmQv&Q2t$daG{Axt7Jk8anJOO*mdEJuSUWO{KRX@pL$?BOg zUSAx8S%o%t3C>gD6!)6XyP)}-%?s#j2S%c;zIUXzULMqrL%gu;QErl!kK3wn0UXWv z-WBIvKv%A4FfOU@jZz;z#K#Opo)w!(asl2!A6>*?W4k4zpC`GbglmkwE(4R&7ZLKL z&IYn?NF+`o^&7x#SkF1-Sk9!{qb(_X6?KbS4&4!JT`J?~GZrwcmG~J|Ci^bPKQ`v5 zQww%UF##yLkJHQZ;)*jeif6nvjvMR8VkIOmf5+{NtD z1eQH7JG+s6I38@L`woHk0XoQ_{X2Jt_rrAj9@ye`lw_xEp5b)P*qoM<;7FSh3yQDU zqUl32c3X6&$5R<=MaXiK$q6M}!pto5wXtSfLJ9(=T*W>|kp&IUT~5=(qh`Fw>`4%Iv?#?Aee12!_-sU!Njv##bwcGox4$f26pOKK zK*)0Sr#@)WiD|>hJG7$??Yb#X-r+fhqyzD09r-5C-sYu^GZP4E{L1Ltm+Go^P04v zjFUnjDt#le)61~uaej=!960)O zzC<`)z`mM-$E=9jO`oUEQ$Ko&Wvcye@eG-Q#D z0fB=nrMl>CRQby5+><&SZcm$>Y6p$>s1Lu+-;Mndo}LL98+{4qRzy5;tM9$R+l}6n z7qp?#6iJW^zQy@H_{rwH^9{P!FT3DPRGzzWV{W|=9*77L*hs)E~P7h9Wz}vejR_$v3A3ANgy& zX*kVaizQ6uOxc^ksDDx2Z*dm@Dr)yTd^Jc_*q$ANQBXYW>ppk8a?J^vZ2; zITA|eHKsHm>k;C8y|ZuYE9I)(jooc&Y3P(3nYpe6)SZV;$t+7`-6TPIEPR~-$$AZE z92a*(o&PrfUE)u|vtbLUIYL54&WG>6!%L0%5b*23VZGs z<#KrgpL8l^tQUm{7u=8`yvy@uKu=|?g!5+}NaqiJ#b+t;wEdzG$O&Lw z*F=3~?7{JVd{|}7dGGb6;uRI)@1B zst*AXZlIo?e4p32B6><2)sV7FP5Xdvk4>cpoH3lg)X@+42DqhFB5=`vur;!wBkF&D z!1Dv{5BV!uj!+=KS@;kkkRo0)DnHl&N{T966mz@VIz_k-kv zbR8W>q_j99OyK|eR3PUu8D3M?m6i0%kUT?|p#LXnW>G~F6h>i`eZVeu$M`?OOi6}< z3~>cbM_ai0NbXw0J z(f+7zOcSm|ToJCp<|?so9#Kcrgi{>Rngb7{iDlO05^&IViaC{pFY1v90wkFlmo0Kx zk~%wE6h%+&wwGi~Wt7-=t5;-;bbMe?9nBWi>8Iptv|4N#xw#Zj&S7W~_(}CYa9sd+ zw3A%APdtsUXEaH0Zy$Kr^-*`J=ki2qMFQErbp^__e{HBNtoJ5qKa&DCLoia;-p;br z{(O+Gq4Ea1yL+4{2+swXR{!T0CL(XX)v6iPT-)vl`p(Y z5Fx{dsH{|W5UTMe%+AP;jbaX>NI!6L9c6Y(?evPgIOd=W`VAOL;E-3WWTwZ( zUd%zy}X)_6Ly^?E=e?R7=jU*|0!SyJ26 zoRYqv93fqk@PNYVlI81{m*jgel111@o5Zj2=~(=cdjpY?`GJZ8@kS#1S|DyNf>ipI ze^G8wZd48`Hz{9MZdPtlzM|Z!+@_2ww<~ujW6B}rPUWkLsvJg$t*u6x*N&d;ar*`ax9r4C0@+Ng15KOS&lIpyUERLF>^Z`{3qc;HIh4=4Sf zb9M_(?UqlE=^x&C#W2!a(Yt8l7k!V}HGt+JF)}<@9xXE%jgbL6x{Hf(`@Z3%FZK@7 zW!rlP@YF3E7p_>|>b#(AX^X#W_5206Gv3P%jOQ>VaqGc>o}Dp~@4~WgSa#AT2Ld(9 zl})G}l37qa1 g8+f338|a{#IVf&YCkDmUf%=_@+7ftdmuNBnKOv6nBme*a delta 40175 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 diff --git a/dist/font/iconfont.svg b/dist/font/iconfont.svg index c70fa76fe..68df1b9b5 100644 --- a/dist/font/iconfont.svg +++ b/dist/font/iconfont.svg @@ -14,11 +14,83 @@ /> - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -26,7 +98,7 @@ - + @@ -44,11 +116,11 @@ - + - + @@ -62,7 +134,7 @@ - + @@ -76,7 +148,7 @@ - + @@ -86,9 +158,9 @@ - + - + @@ -98,11 +170,11 @@ - + - + - + @@ -140,7 +212,7 @@ - + @@ -156,9 +228,9 @@ - + - + @@ -184,7 +256,7 @@ - + @@ -222,9 +294,9 @@ - + - + @@ -262,7 +334,7 @@ - + @@ -302,9 +374,9 @@ - + - + @@ -326,7 +398,7 @@ - + @@ -370,7 +442,7 @@ - + @@ -404,7 +476,7 @@ - + @@ -520,11 +592,11 @@ - + - + @@ -568,7 +640,7 @@ - + @@ -580,7 +652,7 @@ - + @@ -616,19 +688,19 @@ - + - + - + @@ -640,13 +712,13 @@ - + - + @@ -658,13 +730,13 @@ - + - + @@ -700,19 +772,19 @@ - + - + - + @@ -720,7 +792,7 @@ - + @@ -736,7 +808,7 @@ - + @@ -754,7 +826,7 @@ - + @@ -762,13 +834,13 @@ - + - + @@ -798,13 +870,13 @@ - + - + @@ -828,13 +900,13 @@ - + - + @@ -904,25 +976,25 @@ - + - + - + - + - + @@ -936,7 +1008,7 @@ - + @@ -982,9 +1054,9 @@ - + - + @@ -1000,7 +1072,7 @@ - + @@ -1084,7 +1156,7 @@ - + @@ -1094,7 +1166,7 @@ - + @@ -1114,7 +1186,7 @@ - + @@ -1152,7 +1224,7 @@ - + @@ -1182,7 +1254,7 @@ - + @@ -1194,7 +1266,7 @@ - + @@ -1248,7 +1320,7 @@ - + @@ -1296,7 +1368,7 @@ - + @@ -1312,71 +1384,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1398,37 +1470,35 @@ - + - + - + - - - + - + - + - + - + @@ -1436,29 +1506,27 @@ - + - + - + - + - + - + - + - - - + @@ -1470,23 +1538,23 @@ - + - + - + - + - + - + @@ -1550,7 +1618,7 @@ - + @@ -1558,11 +1626,11 @@ - + - + @@ -1602,11 +1670,11 @@ - + - + - + @@ -1630,7 +1698,7 @@ - + @@ -1640,19 +1708,19 @@ - + - + - + - + @@ -1666,13 +1734,13 @@ - + - + - + @@ -1740,7 +1808,7 @@ - + @@ -1772,9 +1840,9 @@ - + - + @@ -1796,7 +1864,7 @@ - + @@ -1804,11 +1872,11 @@ - + - + diff --git a/dist/font/iconfont.ttf b/dist/font/iconfont.ttf index 76debf9d2f1898a31dfdb6105ff9e0698e45c636..3a9bb3bd3450051ae525695b66aa52d63169e196 100644 GIT binary patch delta 47452 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
  • p* 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 diff --git a/dist/font/iconfont.woff b/dist/font/iconfont.woff index ea016fed73a6c86083a5d199346a277954b62717..f3503d4658a47457c51efe493f04aa4b2e08146b 100644 GIT binary patch literal 114020 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%0A8Gak4e${my1b@H4kb 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

    uaw0qAv$u8PXZ-U{{a9J1#H3q literal 83548 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 Date: Tue, 2 Aug 2022 15:14:03 +0800 Subject: [PATCH 053/161] auto upgrade version to 2.0.20220802151352 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 794a31d0b..1a0afdd97 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220802114505", + "version": "2.0.20220802151352", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From a6f8d093a72054499343e8aef8889d39707fa78a Mon Sep 17 00:00:00 2001 From: data Date: Wed, 3 Aug 2022 10:47:44 +0800 Subject: [PATCH 054/161] auto upgrade version to 2.0.20220803104711 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1a0afdd97..1add842ef 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220802151352", + "version": "2.0.20220803104711", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 6c440c5cfc00f1e1771d2d4eb61e010a617c824f Mon Sep 17 00:00:00 2001 From: zhangzijie01 Date: Wed, 3 Aug 2022 13:57:18 +0800 Subject: [PATCH 055/161] =?UTF-8?q?BI-110963=20fix:=20IconCombo=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=9A=90=E8=97=8Ftigger=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/combo/iconcombo/combo.icon.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/case/combo/iconcombo/combo.icon.js b/src/case/combo/iconcombo/combo.icon.js index 81050859a..697377cf9 100644 --- a/src/case/combo/iconcombo/combo.icon.js +++ b/src/case/combo/iconcombo/combo.icon.js @@ -42,7 +42,8 @@ BI.IconCombo = BI.inherit(BI.Widget, { height: o.height, iconWidth: o.iconWidth, iconHeight: o.iconHeight, - value: o.value + value: o.value, + isShowDown: o.isShowDown }); this.popup = BI.createWidget(o.popup, { type: "bi.icon_combo_popup", From 3f69775db9f1bed3977947db0e45ff4bdc99de7e Mon Sep 17 00:00:00 2001 From: zhangzijie01 Date: Wed, 3 Aug 2022 14:03:44 +0800 Subject: [PATCH 056/161] =?UTF-8?q?BI-110963=20fix:=20IconCombo=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E9=9A=90=E8=97=8Ftigger=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/combo/iconcombo/combo.icon.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/case/combo/iconcombo/combo.icon.js b/src/case/combo/iconcombo/combo.icon.js index 697377cf9..8cb821a1e 100644 --- a/src/case/combo/iconcombo/combo.icon.js +++ b/src/case/combo/iconcombo/combo.icon.js @@ -20,7 +20,8 @@ BI.IconCombo = BI.inherit(BI.Widget, { adjustXOffset: 0, adjustYOffset: 0, offsetStyle: "left", - chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE + chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, + isShowDown: true }); }, From adbd17c8013655eea4141a2c4964bf9cb0d843e4 Mon Sep 17 00:00:00 2001 From: data Date: Wed, 3 Aug 2022 14:38:22 +0800 Subject: [PATCH 057/161] auto upgrade version to 2.0.20220803143754 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1add842ef..602f3c016 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220803104711", + "version": "2.0.20220803143754", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 9272745bdd6876e5613da5e1b2bd4d71ed2969f6 Mon Sep 17 00:00:00 2001 From: data Date: Wed, 3 Aug 2022 16:53:57 +0800 Subject: [PATCH 058/161] auto upgrade version to 2.0.20220803165348 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 602f3c016..3fa10aa5d 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220803143754", + "version": "2.0.20220803165348", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From e38e010e32026a159a2457700c44d007bd556b90 Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Wed, 3 Aug 2022 18:38:55 +0800 Subject: [PATCH 059/161] =?UTF-8?q?KERNEL-12093=20feat:=20worker=E6=8F=92?= =?UTF-8?q?=E4=BB=B6options=E5=90=8C=E6=AD=A5=E5=88=B0loader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/template/main_thread.helper.t | 7 ++-- plugins/webpack-fui-worker-plugin/index.js | 34 +++++++++++++++++++ .../worker-loader.js | 2 +- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t index c0e1c6b2b..19ac36016 100644 --- a/bin/cli/worker/template/main_thread.helper.t +++ b/bin/cli/worker/template/main_thread.helper.t @@ -1,7 +1,8 @@ import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_thread'; // 不需要一起打包的话则不需要引入这行 -// 根据实际需求传入inline属性,true -> blob url,false -> servicePath -import { workerUrl } from 'fui-worker?inline=true!./worker_thread/${workerName}_worker_thread'; +// FuiWorkerPlugin中的属性会同步到fui-worker中,同时支持loader行内传入属性 +// 根据实际需求传入inline,返回格式 true -> blob url,false -> servicePath +import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; export class ${WorkerName}WorkerHelper { private worker: ${WorkerName}MainThreadWorker; @@ -24,7 +25,7 @@ export class ${WorkerName}WorkerHelper { /** * 格式化worker url,比如补充一些环境信息到参数里 - * 通过 #hash 传入blob url或 ?params 传入servicePath + * 可通过 #hash 将参数传入blob url * @param url worker url */ private urlFormatter(url: string) { diff --git a/plugins/webpack-fui-worker-plugin/index.js b/plugins/webpack-fui-worker-plugin/index.js index 19f660299..2fa9b3ed0 100644 --- a/plugins/webpack-fui-worker-plugin/index.js +++ b/plugins/webpack-fui-worker-plugin/index.js @@ -5,6 +5,7 @@ const path = require('path'); const webpack = require('webpack'); const { WorkerPluginName } = require('./constants'); +const ModuleFilenameHelpers = require('webpack/lib/ModuleFilenameHelpers'); class FuiWorkerPlugin { constructor(options = {}) { @@ -39,6 +40,39 @@ class FuiWorkerPlugin { // 动态添加 worker 的 worker-loader, 命名为 "fui-worker" compiler.options.resolveLoader.alias['fui-worker'] = path.resolve(__dirname, './worker-loader.js'); }); + + // 将FuiWorkerPlugin的参数传递给fui-worker loader + compiler.hooks.compilation.tap(WorkerPluginName, compilation => { + compilation.hooks.normalModuleLoader.tap(WorkerPluginName, (context, module) => { + // 仅提供给fui-worker + const fuiLoader = module.loaders.find(loader => loader.loader.indexOf('fui-worker') !== -1); + + if (fuiLoader) { + const resource = module.resource; + + if (!resource) return; + + // fui-worker通过options读取 + context.options = context.options || {}; + + const index = resource.indexOf('?'); + + if (ModuleFilenameHelpers.matchObject( + this.options, + index < 0 ? resource : resource.substr(0, index) + )) { + for (const key of Object.keys(this.options)) { + // 忽略关键属性 + if (key === "include" || key === "exclude" || key === "test") { + continue; + } + + context.options[key] = this.options[key]; + } + } + } + }) + }) } } diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index fd91bb829..dd47d0b70 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -43,7 +43,7 @@ function loader() { const entryFileName = `${FileNamePrefix}index`; // 获取传递给 loader 的 options - const options = loaderUtils.getOptions(this) || {}; + const options = Object.assign(loaderUtils.getOptions(this) || {}, this.options); // 创建 childCompiler, 用于实现 worker 构建为独立 js 资源 const childCompiler = this._compilation.createChildCompiler(WorkerLoaderName, { From ac4e3b428c3554a6ca61aa2a4b5ee21a39b5315e Mon Sep 17 00:00:00 2001 From: data Date: Fri, 5 Aug 2022 10:15:57 +0800 Subject: [PATCH 060/161] auto upgrade version to 2.0.20220805101538 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3fa10aa5d..d01b7bf78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220803165348", + "version": "2.0.20220805101538", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From f2235049c28424f9b302fd95e744621a7870dcf4 Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 5 Aug 2022 10:36:01 +0800 Subject: [PATCH 061/161] =?UTF-8?q?KERNEL-10683=20&&=20DESIGN-4160=20feat:?= =?UTF-8?q?=20=E6=95=B4=E7=90=86=E7=AE=80=E5=8C=96FIneUI=E6=A0=91=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E7=9A=84node=E5=92=8Citem,=E5=90=8C=E6=97=B6=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=88=B6=E8=8A=82=E7=82=B9=E4=B8=8D=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E4=BD=86=E5=8F=AF=E4=BB=A5=E5=B1=95=E5=BC=80=E6=94=B6?= =?UTF-8?q?=E8=B5=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/config.js | 528 +++++++++--------- demo/js/case/tree/demo.level_tree.js | 5 + .../tree/demo.multilayer_select_level_tree.js | 2 +- .../tree/demo.multilayer_single_level_tree.js | 38 +- src/case/button/node/siwtcher.tree.node.js | 59 ++ src/case/button/node/treenode.js | 106 ++++ src/case/button/treeitem/treeitem.js | 90 +++ src/case/tree/tree.level.js | 34 +- src/case/tree/treeexpander/tree.expander.js | 3 +- .../tree/treeexpander/tree.expander.popup.js | 4 +- .../multilayerselecttree.leveltree.js | 24 +- .../multilayersingletree.leveltree.js | 25 +- src/widget/selecttree/selecttree.popup.js | 57 +- 13 files changed, 601 insertions(+), 374 deletions(-) create mode 100644 src/case/button/node/siwtcher.tree.node.js create mode 100644 src/case/button/node/treenode.js create mode 100644 src/case/button/treeitem/treeitem.js diff --git a/demo/config.js b/demo/config.js index 7b86a02b6..a20f13ebe 100644 --- a/demo/config.js +++ b/demo/config.js @@ -15,1381 +15,1381 @@ Demo.CONSTANTS = { title: v }; }), - TREEITEMS: [{pId: "0", id: "0_0", text: "( 共25个 )", value: "", open: true}, { + TREEITEMS: [{ pId: "0", id: "0_0", text: "( 共25个 )", value: "", open: true }, { pId: "0_0", id: "0_0_0", text: "安徽省( 共1个 )", value: "安徽省", open: true - }, {pId: "0_0_0", id: "0_0_0_0", text: "芜湖市", value: "芜湖市", open: true}, { + }, { pId: "0_0_0", id: "0_0_0_0", text: "芜湖市", value: "芜湖市", open: true }, { pId: "0_0", id: "0_0_1", text: "北京市( 共6个 )", value: "北京市", open: true - }, {pId: "0_0_1", id: "0_0_1_0", text: "北京市区", value: "北京市区", open: true}, { + }, { pId: "0_0_1", id: "0_0_1_0", text: "北京市区", value: "北京市区", open: true }, { pId: "0_0_1", id: "0_0_1_1", text: "朝阳区", value: "朝阳区", open: true - }, {pId: "0_0_1", id: "0_0_1_2", text: "东城区", value: "东城区", open: true}, { + }, { pId: "0_0_1", id: "0_0_1_2", text: "东城区", value: "东城区", open: true }, { pId: "0_0_1", id: "0_0_1_3", text: "海淀区4内", value: "海淀区4内", open: true - }, {pId: "0_0_1", id: "0_0_1_4", text: "海淀区4外", value: "海淀区4外", open: true}, { + }, { pId: "0_0_1", id: "0_0_1_4", text: "海淀区4外", value: "海淀区4外", open: true }, { pId: "0_0_1", id: "0_0_1_5", text: "石景山区", value: "石景山区", open: true - }, {pId: "0_0", id: "0_0_2", text: "福建省( 共2个 )", value: "福建省", open: true}, { + }, { pId: "0_0", id: "0_0_2", text: "福建省( 共2个 )", value: "福建省", open: true }, { pId: "0_0_2", id: "0_0_2_0", text: "莆田市", value: "莆田市", open: true - }, {pId: "0_0_2", id: "0_0_2_1", text: "泉州市", value: "泉州市", open: true}, { + }, { pId: "0_0_2", id: "0_0_2_1", text: "泉州市", value: "泉州市", open: true }, { pId: "0_0", id: "0_0_3", text: "甘肃省( 共1个 )", value: "甘肃省", open: true - }, {pId: "0_0_3", id: "0_0_3_0", text: "兰州市", value: "兰州市", open: true}, { + }, { pId: "0_0_3", id: "0_0_3_0", text: "兰州市", value: "兰州市", open: true }, { pId: "0_0", id: "0_0_4", text: "广东省( 共5个 )", value: "广东省", open: true - }, {pId: "0_0_4", id: "0_0_4_0", text: "东莞市", value: "东莞市", open: true}, { + }, { pId: "0_0_4", id: "0_0_4_0", text: "东莞市", value: "东莞市", open: true }, { pId: "0_0_4", id: "0_0_4_1", text: "广州市", value: "广州市", open: true - }, {pId: "0_0_4", id: "0_0_4_2", text: "惠州市", value: "惠州市", open: true}, { + }, { pId: "0_0_4", id: "0_0_4_2", text: "惠州市", value: "惠州市", open: true }, { pId: "0_0_4", id: "0_0_4_3", text: "深圳市", value: "深圳市", open: true - }, {pId: "0_0_4", id: "0_0_4_4", text: "珠海市", value: "珠海市", open: true}, { + }, { pId: "0_0_4", id: "0_0_4_4", text: "珠海市", value: "珠海市", open: true }, { pId: "0_0", id: "0_0_5", text: "广西壮族自治区( 共1个 )", value: "广西壮族自治区", open: true - }, {pId: "0_0_5", id: "0_0_5_0", text: "南宁市", value: "南宁市", open: true}, { + }, { pId: "0_0_5", id: "0_0_5_0", text: "南宁市", value: "南宁市", open: true }, { pId: "0_0", id: "0_0_6", text: "河北省( 共2个 )", value: "河北省", open: true - }, {pId: "0_0_6", id: "0_0_6_0", text: "保定市", value: "保定市", open: true}, { + }, { pId: "0_0_6", id: "0_0_6_0", text: "保定市", value: "保定市", open: true }, { pId: "0_0_6", id: "0_0_6_1", text: "邢台市", value: "邢台市", open: true - }, {pId: "0_0", id: "0_0_7", text: "河南省( 共1个 )", value: "河南省", open: true}, { + }, { pId: "0_0", id: "0_0_7", text: "河南省( 共1个 )", value: "河南省", open: true }, { pId: "0_0_7", id: "0_0_7_0", text: "郑州市", value: "郑州市", open: true - }, {pId: "0_0", id: "0_0_8", text: "黑龙江省( 共7个 )", value: "黑龙江省", open: true}, { + }, { pId: "0_0", id: "0_0_8", text: "黑龙江省( 共7个 )", value: "黑龙江省", open: true }, { pId: "0_0_8", id: "0_0_8_0", text: "大庆市", value: "大庆市", open: true - }, {pId: "0_0_8", id: "0_0_8_1", text: "哈尔滨市", value: "哈尔滨市", open: true}, { + }, { pId: "0_0_8", id: "0_0_8_1", text: "哈尔滨市", value: "哈尔滨市", open: true }, { pId: "0_0_8", id: "0_0_8_2", text: "鸡西市", value: "鸡西市", open: true - }, {pId: "0_0_8", id: "0_0_8_3", text: "佳木斯市", value: "佳木斯市", open: true}, { + }, { pId: "0_0_8", id: "0_0_8_3", text: "佳木斯市", value: "佳木斯市", open: true }, { pId: "0_0_8", id: "0_0_8_4", text: "牡丹江市", value: "牡丹江市", open: true - }, {pId: "0_0_8", id: "0_0_8_5", text: "齐齐哈尔市", value: "齐齐哈尔市", open: true}, { + }, { pId: "0_0_8", id: "0_0_8_5", text: "齐齐哈尔市", value: "齐齐哈尔市", open: true }, { pId: "0_0_8", id: "0_0_8_6", text: "双鸭山市", value: "双鸭山市", open: true - }, {pId: "0_0", id: "0_0_9", text: "湖北省( 共1个 )", value: "湖北省", open: true}, { + }, { pId: "0_0", id: "0_0_9", text: "湖北省( 共1个 )", value: "湖北省", open: true }, { pId: "0_0_9", id: "0_0_9_0", text: "武汉市", value: "武汉市", open: true - }, {pId: "0_0", id: "0_0_10", text: "湖南省( 共3个 )", value: "湖南省", open: true}, { + }, { pId: "0_0", id: "0_0_10", text: "湖南省( 共3个 )", value: "湖南省", open: true }, { pId: "0_0_10", id: "0_0_10_0", text: "常德市", value: "常德市", open: true - }, {pId: "0_0_10", id: "0_0_10_1", text: "长沙市", value: "长沙市", open: true}, { + }, { pId: "0_0_10", id: "0_0_10_1", text: "长沙市", value: "长沙市", open: true }, { pId: "0_0_10", id: "0_0_10_2", text: "邵阳市", value: "邵阳市", open: true - }, {pId: "0_0", id: "0_0_11", text: "吉林省( 共4个 )", value: "吉林省", open: true}, { + }, { pId: "0_0", id: "0_0_11", text: "吉林省( 共4个 )", value: "吉林省", open: true }, { pId: "0_0_11", id: "0_0_11_0", text: "白山市", value: "白山市", open: true - }, {pId: "0_0_11", id: "0_0_11_1", text: "长春市", value: "长春市", open: true}, { + }, { pId: "0_0_11", id: "0_0_11_1", text: "长春市", value: "长春市", open: true }, { pId: "0_0_11", id: "0_0_11_2", text: "松原市", value: "松原市", open: true - }, {pId: "0_0_11", id: "0_0_11_3", text: "通化市", value: "通化市", open: true}, { + }, { pId: "0_0_11", id: "0_0_11_3", text: "通化市", value: "通化市", open: true }, { pId: "0_0", id: "0_0_12", text: "江苏省( 共8个 )", value: "江苏省", open: true - }, {pId: "0_0_12", id: "0_0_12_0", text: "常州市", value: "常州市", open: true}, { + }, { pId: "0_0_12", id: "0_0_12_0", text: "常州市", value: "常州市", open: true }, { pId: "0_0_12", id: "0_0_12_1", text: "南京市", value: "南京市", open: true - }, {pId: "0_0_12", id: "0_0_12_2", text: "南通市", value: "南通市", open: true}, { + }, { pId: "0_0_12", id: "0_0_12_2", text: "南通市", value: "南通市", open: true }, { pId: "0_0_12", id: "0_0_12_3", text: "苏州市", value: "苏州市", open: true - }, {pId: "0_0_12", id: "0_0_12_4", text: "宿迁市", value: "宿迁市", open: true}, { + }, { pId: "0_0_12", id: "0_0_12_4", text: "宿迁市", value: "宿迁市", open: true }, { pId: "0_0_12", id: "0_0_12_5", text: "泰州市", value: "泰州市", open: true - }, {pId: "0_0_12", id: "0_0_12_6", text: "无锡市", value: "无锡市", open: true}, { + }, { pId: "0_0_12", id: "0_0_12_6", text: "无锡市", value: "无锡市", open: true }, { pId: "0_0_12", id: "0_0_12_7", text: "盐城市", value: "盐城市", open: true - }, {pId: "0_0", id: "0_0_13", text: "辽宁省( 共11个 )", value: "辽宁省", open: true}, { + }, { pId: "0_0", id: "0_0_13", text: "辽宁省( 共11个 )", value: "辽宁省", open: true }, { pId: "0_0_13", id: "0_0_13_0", text: "鞍山市", value: "鞍山市", open: true - }, {pId: "0_0_13", id: "0_0_13_1", text: "本溪市", value: "本溪市", open: true}, { + }, { pId: "0_0_13", id: "0_0_13_1", text: "本溪市", value: "本溪市", open: true }, { pId: "0_0_13", id: "0_0_13_2", text: "朝阳市", value: "朝阳市", open: true - }, {pId: "0_0_13", id: "0_0_13_3", text: "大连市", value: "大连市", open: true}, { + }, { pId: "0_0_13", id: "0_0_13_3", text: "大连市", value: "大连市", open: true }, { pId: "0_0_13", id: "0_0_13_4", text: "抚顺市", value: "抚顺市", open: true - }, {pId: "0_0_13", id: "0_0_13_5", text: "葫芦岛市", value: "葫芦岛市", open: true}, { + }, { pId: "0_0_13", id: "0_0_13_5", text: "葫芦岛市", value: "葫芦岛市", open: true }, { pId: "0_0_13", id: "0_0_13_6", text: "锦州市", value: "锦州市", open: true - }, {pId: "0_0_13", id: "0_0_13_7", text: "辽阳市", value: "辽阳市", open: true}, { + }, { pId: "0_0_13", id: "0_0_13_7", text: "辽阳市", value: "辽阳市", open: true }, { pId: "0_0_13", id: "0_0_13_8", text: "盘锦市", value: "盘锦市", open: true - }, {pId: "0_0_13", id: "0_0_13_9", text: "沈阳市", value: "沈阳市", open: true}, { + }, { pId: "0_0_13", id: "0_0_13_9", text: "沈阳市", value: "沈阳市", open: true }, { pId: "0_0_13", id: "0_0_13_10", text: "营口市", value: "营口市", open: true - }, {pId: "0_0", id: "0_0_14", text: "内蒙古( 共1个 )", value: "内蒙古", open: true}, { + }, { pId: "0_0", id: "0_0_14", text: "内蒙古( 共1个 )", value: "内蒙古", open: true }, { pId: "0_0_14", id: "0_0_14_0", text: "鄂尔多斯市", value: "鄂尔多斯市", open: true - }, {pId: "0_0", id: "0_0_15", text: "宁夏回族自治区( 共1个 )", value: "宁夏回族自治区", open: true}, { + }, { pId: "0_0", id: "0_0_15", text: "宁夏回族自治区( 共1个 )", value: "宁夏回族自治区", open: true }, { pId: "0_0_15", id: "0_0_15_0", text: "银川市", value: "银川市", open: true - }, {pId: "0_0", id: "0_0_16", text: "山东省( 共7个 )", value: "山东省", open: true}, { + }, { pId: "0_0", id: "0_0_16", text: "山东省( 共7个 )", value: "山东省", open: true }, { pId: "0_0_16", id: "0_0_16_0", text: "济南市", value: "济南市", open: true - }, {pId: "0_0_16", id: "0_0_16_1", text: "济宁市", value: "济宁市", open: true}, { + }, { pId: "0_0_16", id: "0_0_16_1", text: "济宁市", value: "济宁市", open: true }, { pId: "0_0_16", id: "0_0_16_2", text: "聊城市", value: "聊城市", open: true - }, {pId: "0_0_16", id: "0_0_16_3", text: "临沂市", value: "临沂市", open: true}, { + }, { pId: "0_0_16", id: "0_0_16_3", text: "临沂市", value: "临沂市", open: true }, { pId: "0_0_16", id: "0_0_16_4", text: "青岛市", value: "青岛市", open: true - }, {pId: "0_0_16", id: "0_0_16_5", text: "烟台市", value: "烟台市", open: true}, { + }, { pId: "0_0_16", id: "0_0_16_5", text: "烟台市", value: "烟台市", open: true }, { pId: "0_0_16", id: "0_0_16_6", text: "枣庄市", value: "枣庄市", open: true - }, {pId: "0_0", id: "0_0_17", text: "山西省( 共1个 )", value: "山西省", open: true}, { + }, { pId: "0_0", id: "0_0_17", text: "山西省( 共1个 )", value: "山西省", open: true }, { pId: "0_0_17", id: "0_0_17_0", text: "太原市", value: "太原市", open: true - }, {pId: "0_0", id: "0_0_18", text: "陕西省( 共1个 )", value: "陕西省", open: true}, { + }, { pId: "0_0", id: "0_0_18", text: "陕西省( 共1个 )", value: "陕西省", open: true }, { pId: "0_0_18", id: "0_0_18_0", text: "西安市", value: "西安市", open: true - }, {pId: "0_0", id: "0_0_19", text: "上海市( 共1个 )", value: "上海市", open: true}, { + }, { pId: "0_0", id: "0_0_19", text: "上海市( 共1个 )", value: "上海市", open: true }, { pId: "0_0_19", id: "0_0_19_0", text: "上海市区", value: "上海市区", open: true - }, {pId: "0_0", id: "0_0_20", text: "四川省( 共1个 )", value: "四川省", open: true}, { + }, { pId: "0_0", id: "0_0_20", text: "四川省( 共1个 )", value: "四川省", open: true }, { pId: "0_0_20", id: "0_0_20_0", text: "成都市", value: "成都市", open: true - }, {pId: "0_0", id: "0_0_21", text: "新疆维吾尔族自治区( 共2个 )", value: "新疆维吾尔族自治区", open: true}, { + }, { pId: "0_0", id: "0_0_21", text: "新疆维吾尔族自治区( 共2个 )", value: "新疆维吾尔族自治区", open: true }, { pId: "0_0_21", id: "0_0_21_0", text: "吐鲁番地区", value: "吐鲁番地区", open: true - }, {pId: "0_0_21", id: "0_0_21_1", text: "乌鲁木齐", value: "乌鲁木齐", open: true}, { + }, { pId: "0_0_21", id: "0_0_21_1", text: "乌鲁木齐", value: "乌鲁木齐", open: true }, { pId: "0_0", id: "0_0_22", text: "云南省( 共1个 )", value: "云南省", open: true - }, {pId: "0_0_22", id: "0_0_22_0", text: "昆明市", value: "昆明市", open: true}, { + }, { pId: "0_0_22", id: "0_0_22_0", text: "昆明市", value: "昆明市", open: true }, { pId: "0_0", id: "0_0_23", text: "浙江省( 共5个 )", value: "浙江省", open: true - }, {pId: "0_0_23", id: "0_0_23_0", text: "杭州市", value: "杭州市", open: true}, { + }, { pId: "0_0_23", id: "0_0_23_0", text: "杭州市", value: "杭州市", open: true }, { pId: "0_0_23", id: "0_0_23_1", text: "湖州市", value: "湖州市", open: true - }, {pId: "0_0_23", id: "0_0_23_2", text: "嘉兴市", value: "嘉兴市", open: true}, { + }, { pId: "0_0_23", id: "0_0_23_2", text: "嘉兴市", value: "嘉兴市", open: true }, { pId: "0_0_23", id: "0_0_23_3", text: "宁波市", value: "宁波市", open: true - }, {pId: "0_0_23", id: "0_0_23_4", text: "绍兴市", value: "绍兴市", open: true}, { + }, { pId: "0_0_23", id: "0_0_23_4", text: "绍兴市", value: "绍兴市", open: true }, { pId: "0_0", id: "0_0_24", text: "重庆市( 共1个 )", value: "重庆市", open: true - }, {pId: "0_0_24", id: "0_0_24_0", text: "重庆市区", value: "重庆市区", open: true}, { + }, { pId: "0_0_24", id: "0_0_24_0", text: "重庆市区", value: "重庆市区", open: true }, { pId: "0", id: "0_1", text: "中国( 共34个 )", value: "中国", open: true - }, {pId: "0_1", id: "0_1_0", text: "安徽省( 共19个 )", value: "安徽省", open: true}, { + }, { pId: "0_1", id: "0_1_0", text: "安徽省( 共19个 )", value: "安徽省", open: true }, { pId: "0_1_0", id: "0_1_0_0", text: "安庆市", value: "安庆市", open: true - }, {pId: "0_1_0", id: "0_1_0_1", text: "蚌埠市", value: "蚌埠市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_1", text: "蚌埠市", value: "蚌埠市", open: true }, { pId: "0_1_0", id: "0_1_0_2", text: "亳州市", value: "亳州市", open: true - }, {pId: "0_1_0", id: "0_1_0_3", text: "巢湖市", value: "巢湖市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_3", text: "巢湖市", value: "巢湖市", open: true }, { pId: "0_1_0", id: "0_1_0_4", text: "池州市", value: "池州市", open: true - }, {pId: "0_1_0", id: "0_1_0_5", text: "滁州市", value: "滁州市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_5", text: "滁州市", value: "滁州市", open: true }, { pId: "0_1_0", id: "0_1_0_6", text: "阜阳市", value: "阜阳市", open: true - }, {pId: "0_1_0", id: "0_1_0_7", text: "毫州市", value: "毫州市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_7", text: "毫州市", value: "毫州市", open: true }, { pId: "0_1_0", id: "0_1_0_8", text: "合肥市", value: "合肥市", open: true - }, {pId: "0_1_0", id: "0_1_0_9", text: "淮北市", value: "淮北市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_9", text: "淮北市", value: "淮北市", open: true }, { pId: "0_1_0", id: "0_1_0_10", text: "淮南市", value: "淮南市", open: true - }, {pId: "0_1_0", id: "0_1_0_11", text: "黄山市", value: "黄山市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_11", text: "黄山市", value: "黄山市", open: true }, { pId: "0_1_0", id: "0_1_0_12", text: "六安市", value: "六安市", open: true - }, {pId: "0_1_0", id: "0_1_0_13", text: "马鞍山市", value: "马鞍山市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_13", text: "马鞍山市", value: "马鞍山市", open: true }, { pId: "0_1_0", id: "0_1_0_14", text: "濮阳市", value: "濮阳市", open: true - }, {pId: "0_1_0", id: "0_1_0_15", text: "宿州市", value: "宿州市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_15", text: "宿州市", value: "宿州市", open: true }, { pId: "0_1_0", id: "0_1_0_16", text: "铜陵市", value: "铜陵市", open: true - }, {pId: "0_1_0", id: "0_1_0_17", text: "芜湖市", value: "芜湖市", open: true}, { + }, { pId: "0_1_0", id: "0_1_0_17", text: "芜湖市", value: "芜湖市", open: true }, { pId: "0_1_0", id: "0_1_0_18", text: "宣城市", value: "宣城市", open: true - }, {pId: "0_1", id: "0_1_1", text: "澳门特别行政区( 共1个 )", value: "澳门特别行政区", open: true}, { + }, { pId: "0_1", id: "0_1_1", text: "澳门特别行政区( 共1个 )", value: "澳门特别行政区", open: true }, { pId: "0_1_1", id: "0_1_1_0", text: "澳门", value: "澳门", open: true - }, {pId: "0_1", id: "0_1_2", text: "北京市( 共17个 )", value: "北京市", open: true}, { + }, { pId: "0_1", id: "0_1_2", text: "北京市( 共17个 )", value: "北京市", open: true }, { pId: "0_1_2", id: "0_1_2_0", text: "北京市区", value: "北京市区", open: true - }, {pId: "0_1_2", id: "0_1_2_1", text: "昌平区", value: "昌平区", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_1", text: "昌平区", value: "昌平区", open: true }, { pId: "0_1_2", id: "0_1_2_2", text: "朝阳区", value: "朝阳区", open: true - }, {pId: "0_1_2", id: "0_1_2_3", text: "大兴区", value: "大兴区", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_3", text: "大兴区", value: "大兴区", open: true }, { pId: "0_1_2", id: "0_1_2_4", text: "东城区", value: "东城区", open: true - }, {pId: "0_1_2", id: "0_1_2_5", text: "房山区", value: "房山区", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_5", text: "房山区", value: "房山区", open: true }, { pId: "0_1_2", id: "0_1_2_6", text: "丰台区", value: "丰台区", open: true - }, {pId: "0_1_2", id: "0_1_2_7", text: "海淀区", value: "海淀区", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_7", text: "海淀区", value: "海淀区", open: true }, { pId: "0_1_2", id: "0_1_2_8", text: "海淀区4内", value: "海淀区4内", open: true - }, {pId: "0_1_2", id: "0_1_2_9", text: "海淀区4外", value: "海淀区4外", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_9", text: "海淀区4外", value: "海淀区4外", open: true }, { pId: "0_1_2", id: "0_1_2_10", text: "门头沟区", value: "门头沟区", open: true - }, {pId: "0_1_2", id: "0_1_2_11", text: "平谷区", value: "平谷区", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_11", text: "平谷区", value: "平谷区", open: true }, { pId: "0_1_2", id: "0_1_2_12", text: "石景山区", value: "石景山区", open: true - }, {pId: "0_1_2", id: "0_1_2_13", text: "顺义区", value: "顺义区", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_13", text: "顺义区", value: "顺义区", open: true }, { pId: "0_1_2", id: "0_1_2_14", text: "通州区", value: "通州区", open: true - }, {pId: "0_1_2", id: "0_1_2_15", text: "西城区", value: "西城区", open: true}, { + }, { pId: "0_1_2", id: "0_1_2_15", text: "西城区", value: "西城区", open: true }, { pId: "0_1_2", id: "0_1_2_16", text: "西城区 ", value: "西城区 ", open: true - }, {pId: "0_1", id: "0_1_3", text: "福建省( 共9个 )", value: "福建省", open: true}, { + }, { pId: "0_1", id: "0_1_3", text: "福建省( 共9个 )", value: "福建省", open: true }, { pId: "0_1_3", id: "0_1_3_0", text: "福州市", value: "福州市", open: true - }, {pId: "0_1_3", id: "0_1_3_1", text: "龙岩市", value: "龙岩市", open: true}, { + }, { pId: "0_1_3", id: "0_1_3_1", text: "龙岩市", value: "龙岩市", open: true }, { pId: "0_1_3", id: "0_1_3_2", text: "南平市", value: "南平市", open: true - }, {pId: "0_1_3", id: "0_1_3_3", text: "宁德市", value: "宁德市", open: true}, { + }, { pId: "0_1_3", id: "0_1_3_3", text: "宁德市", value: "宁德市", open: true }, { pId: "0_1_3", id: "0_1_3_4", text: "莆田市", value: "莆田市", open: true - }, {pId: "0_1_3", id: "0_1_3_5", text: "泉州市", value: "泉州市", open: true}, { + }, { pId: "0_1_3", id: "0_1_3_5", text: "泉州市", value: "泉州市", open: true }, { pId: "0_1_3", id: "0_1_3_6", text: "三明市", value: "三明市", open: true - }, {pId: "0_1_3", id: "0_1_3_7", text: "厦门市", value: "厦门市", open: true}, { + }, { pId: "0_1_3", id: "0_1_3_7", text: "厦门市", value: "厦门市", open: true }, { pId: "0_1_3", id: "0_1_3_8", text: "漳州市", value: "漳州市", open: true - }, {pId: "0_1", id: "0_1_4", text: "甘肃省( 共12个 )", value: "甘肃省", open: true}, { + }, { pId: "0_1", id: "0_1_4", text: "甘肃省( 共12个 )", value: "甘肃省", open: true }, { pId: "0_1_4", id: "0_1_4_0", text: "白银市", value: "白银市", open: true - }, {pId: "0_1_4", id: "0_1_4_1", text: "嘉峪关市", value: "嘉峪关市", open: true}, { + }, { pId: "0_1_4", id: "0_1_4_1", text: "嘉峪关市", value: "嘉峪关市", open: true }, { pId: "0_1_4", id: "0_1_4_2", text: "金昌市", value: "金昌市", open: true - }, {pId: "0_1_4", id: "0_1_4_3", text: "酒泉市", value: "酒泉市", open: true}, { + }, { pId: "0_1_4", id: "0_1_4_3", text: "酒泉市", value: "酒泉市", open: true }, { pId: "0_1_4", id: "0_1_4_4", text: "兰州市", value: "兰州市", open: true - }, {pId: "0_1_4", id: "0_1_4_5", text: "陇南市", value: "陇南市", open: true}, { + }, { pId: "0_1_4", id: "0_1_4_5", text: "陇南市", value: "陇南市", open: true }, { pId: "0_1_4", id: "0_1_4_6", text: "平凉市", value: "平凉市", open: true - }, {pId: "0_1_4", id: "0_1_4_7", text: "庆阳市", value: "庆阳市", open: true}, { + }, { pId: "0_1_4", id: "0_1_4_7", text: "庆阳市", value: "庆阳市", open: true }, { pId: "0_1_4", id: "0_1_4_8", text: "天津市区", value: "天津市区", open: true - }, {pId: "0_1_4", id: "0_1_4_9", text: "天水市", value: "天水市", open: true}, { + }, { pId: "0_1_4", id: "0_1_4_9", text: "天水市", value: "天水市", open: true }, { pId: "0_1_4", id: "0_1_4_10", text: "武威市", value: "武威市", open: true - }, {pId: "0_1_4", id: "0_1_4_11", text: "张掖市", value: "张掖市", open: true}, { + }, { pId: "0_1_4", id: "0_1_4_11", text: "张掖市", value: "张掖市", open: true }, { pId: "0_1", id: "0_1_5", text: "广东省( 共21个 )", value: "广东省", open: true - }, {pId: "0_1_5", id: "0_1_5_0", text: "潮州市", value: "潮州市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_0", text: "潮州市", value: "潮州市", open: true }, { pId: "0_1_5", id: "0_1_5_1", text: "东莞市", value: "东莞市", open: true - }, {pId: "0_1_5", id: "0_1_5_2", text: "佛山市", value: "佛山市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_2", text: "佛山市", value: "佛山市", open: true }, { pId: "0_1_5", id: "0_1_5_3", text: "广州市", value: "广州市", open: true - }, {pId: "0_1_5", id: "0_1_5_4", text: "河源市", value: "河源市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_4", text: "河源市", value: "河源市", open: true }, { pId: "0_1_5", id: "0_1_5_5", text: "惠州市", value: "惠州市", open: true - }, {pId: "0_1_5", id: "0_1_5_6", text: "江门市", value: "江门市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_6", text: "江门市", value: "江门市", open: true }, { pId: "0_1_5", id: "0_1_5_7", text: "揭阳市", value: "揭阳市", open: true - }, {pId: "0_1_5", id: "0_1_5_8", text: "茂名市", value: "茂名市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_8", text: "茂名市", value: "茂名市", open: true }, { pId: "0_1_5", id: "0_1_5_9", text: "梅州市", value: "梅州市", open: true - }, {pId: "0_1_5", id: "0_1_5_10", text: "清远市", value: "清远市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_10", text: "清远市", value: "清远市", open: true }, { pId: "0_1_5", id: "0_1_5_11", text: "汕头市", value: "汕头市", open: true - }, {pId: "0_1_5", id: "0_1_5_12", text: "汕尾市", value: "汕尾市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_12", text: "汕尾市", value: "汕尾市", open: true }, { pId: "0_1_5", id: "0_1_5_13", text: "韶关市", value: "韶关市", open: true - }, {pId: "0_1_5", id: "0_1_5_14", text: "深圳市", value: "深圳市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_14", text: "深圳市", value: "深圳市", open: true }, { pId: "0_1_5", id: "0_1_5_15", text: "阳江市", value: "阳江市", open: true - }, {pId: "0_1_5", id: "0_1_5_16", text: "云浮市", value: "云浮市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_16", text: "云浮市", value: "云浮市", open: true }, { pId: "0_1_5", id: "0_1_5_17", text: "湛江市", value: "湛江市", open: true - }, {pId: "0_1_5", id: "0_1_5_18", text: "肇庆市", value: "肇庆市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_18", text: "肇庆市", value: "肇庆市", open: true }, { pId: "0_1_5", id: "0_1_5_19", text: "中山市", value: "中山市", open: true - }, {pId: "0_1_5", id: "0_1_5_20", text: "珠海市", value: "珠海市", open: true}, { + }, { pId: "0_1_5", id: "0_1_5_20", text: "珠海市", value: "珠海市", open: true }, { pId: "0_1", id: "0_1_6", text: "广西壮族自治区( 共14个 )", value: "广西壮族自治区", open: true - }, {pId: "0_1_6", id: "0_1_6_0", text: "百色市", value: "百色市", open: true}, { + }, { pId: "0_1_6", id: "0_1_6_0", text: "百色市", value: "百色市", open: true }, { pId: "0_1_6", id: "0_1_6_1", text: "北海市", value: "北海市", open: true - }, {pId: "0_1_6", id: "0_1_6_2", text: "崇左市", value: "崇左市", open: true}, { + }, { pId: "0_1_6", id: "0_1_6_2", text: "崇左市", value: "崇左市", open: true }, { pId: "0_1_6", id: "0_1_6_3", text: "防城港市", value: "防城港市", open: true - }, {pId: "0_1_6", id: "0_1_6_4", text: "桂林市", value: "桂林市", open: true}, { + }, { pId: "0_1_6", id: "0_1_6_4", text: "桂林市", value: "桂林市", open: true }, { pId: "0_1_6", id: "0_1_6_5", text: "贵港市", value: "贵港市", open: true - }, {pId: "0_1_6", id: "0_1_6_6", text: "河池市", value: "河池市", open: true}, { + }, { pId: "0_1_6", id: "0_1_6_6", text: "河池市", value: "河池市", open: true }, { pId: "0_1_6", id: "0_1_6_7", text: "贺州市", value: "贺州市", open: true - }, {pId: "0_1_6", id: "0_1_6_8", text: "来宾市", value: "来宾市", open: true}, { + }, { pId: "0_1_6", id: "0_1_6_8", text: "来宾市", value: "来宾市", open: true }, { pId: "0_1_6", id: "0_1_6_9", text: "柳州市", value: "柳州市", open: true - }, {pId: "0_1_6", id: "0_1_6_10", text: "南宁市", value: "南宁市", open: true}, { + }, { pId: "0_1_6", id: "0_1_6_10", text: "南宁市", value: "南宁市", open: true }, { pId: "0_1_6", id: "0_1_6_11", text: "钦州市", value: "钦州市", open: true - }, {pId: "0_1_6", id: "0_1_6_12", text: "梧州市", value: "梧州市", open: true}, { + }, { pId: "0_1_6", id: "0_1_6_12", text: "梧州市", value: "梧州市", open: true }, { pId: "0_1_6", id: "0_1_6_13", text: "玉林市", value: "玉林市", open: true - }, {pId: "0_1", id: "0_1_7", text: "贵州省( 共9个 )", value: "贵州省", open: true}, { + }, { pId: "0_1", id: "0_1_7", text: "贵州省( 共9个 )", value: "贵州省", open: true }, { pId: "0_1_7", id: "0_1_7_0", text: "安顺市", value: "安顺市", open: true - }, {pId: "0_1_7", id: "0_1_7_1", text: "毕节地区", value: "毕节地区", open: true}, { + }, { pId: "0_1_7", id: "0_1_7_1", text: "毕节地区", value: "毕节地区", open: true }, { pId: "0_1_7", id: "0_1_7_2", text: "贵阳市", value: "贵阳市", open: true - }, {pId: "0_1_7", id: "0_1_7_3", text: "六盘水市", value: "六盘水市", open: true}, { + }, { pId: "0_1_7", id: "0_1_7_3", text: "六盘水市", value: "六盘水市", open: true }, { pId: "0_1_7", id: "0_1_7_4", text: "黔东南州", value: "黔东南州", open: true - }, {pId: "0_1_7", id: "0_1_7_5", text: "黔南州", value: "黔南州", open: true}, { + }, { pId: "0_1_7", id: "0_1_7_5", text: "黔南州", value: "黔南州", open: true }, { pId: "0_1_7", id: "0_1_7_6", text: "黔西南市", value: "黔西南市", open: true - }, {pId: "0_1_7", id: "0_1_7_7", text: "铜仁地区", value: "铜仁地区", open: true}, { + }, { pId: "0_1_7", id: "0_1_7_7", text: "铜仁地区", value: "铜仁地区", open: true }, { pId: "0_1_7", id: "0_1_7_8", text: "遵义市", value: "遵义市", open: true - }, {pId: "0_1", id: "0_1_8", text: "海南省( 共2个 )", value: "海南省", open: true}, { + }, { pId: "0_1", id: "0_1_8", text: "海南省( 共2个 )", value: "海南省", open: true }, { pId: "0_1_8", id: "0_1_8_0", text: "海口市", value: "海口市", open: true - }, {pId: "0_1_8", id: "0_1_8_1", text: "三亚市", value: "三亚市", open: true}, { + }, { pId: "0_1_8", id: "0_1_8_1", text: "三亚市", value: "三亚市", open: true }, { pId: "0_1", id: "0_1_9", text: "河北省( 共12个 )", value: "河北省", open: true - }, {pId: "0_1_9", id: "0_1_9_0", text: "保定市", value: "保定市", open: true}, { + }, { pId: "0_1_9", id: "0_1_9_0", text: "保定市", value: "保定市", open: true }, { pId: "0_1_9", id: "0_1_9_1", text: "沧州市", value: "沧州市", open: true - }, {pId: "0_1_9", id: "0_1_9_2", text: "承德市", value: "承德市", open: true}, { + }, { pId: "0_1_9", id: "0_1_9_2", text: "承德市", value: "承德市", open: true }, { pId: "0_1_9", id: "0_1_9_3", text: "邯郸市", value: "邯郸市", open: true - }, {pId: "0_1_9", id: "0_1_9_4", text: "衡水市", value: "衡水市", open: true}, { + }, { pId: "0_1_9", id: "0_1_9_4", text: "衡水市", value: "衡水市", open: true }, { pId: "0_1_9", id: "0_1_9_5", text: "廊坊市", value: "廊坊市", open: true - }, {pId: "0_1_9", id: "0_1_9_6", text: "秦皇岛市", value: "秦皇岛市", open: true}, { + }, { pId: "0_1_9", id: "0_1_9_6", text: "秦皇岛市", value: "秦皇岛市", open: true }, { pId: "0_1_9", id: "0_1_9_7", text: "石家庄市", value: "石家庄市", open: true - }, {pId: "0_1_9", id: "0_1_9_8", text: "唐山市", value: "唐山市", open: true}, { + }, { pId: "0_1_9", id: "0_1_9_8", text: "唐山市", value: "唐山市", open: true }, { pId: "0_1_9", id: "0_1_9_9", text: "天津市区", value: "天津市区", open: true - }, {pId: "0_1_9", id: "0_1_9_10", text: "邢台市", value: "邢台市", open: true}, { + }, { pId: "0_1_9", id: "0_1_9_10", text: "邢台市", value: "邢台市", open: true }, { pId: "0_1_9", id: "0_1_9_11", text: "张家口市", value: "张家口市", open: true - }, {pId: "0_1", id: "0_1_10", text: "河南省( 共19个 )", value: "河南省", open: true}, { + }, { pId: "0_1", id: "0_1_10", text: "河南省( 共19个 )", value: "河南省", open: true }, { pId: "0_1_10", id: "0_1_10_0", text: "安阳市", value: "安阳市", open: true - }, {pId: "0_1_10", id: "0_1_10_1", text: "鹤壁市", value: "鹤壁市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_1", text: "鹤壁市", value: "鹤壁市", open: true }, { pId: "0_1_10", id: "0_1_10_2", text: "济源市", value: "济源市", open: true - }, {pId: "0_1_10", id: "0_1_10_3", text: "焦作市", value: "焦作市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_3", text: "焦作市", value: "焦作市", open: true }, { pId: "0_1_10", id: "0_1_10_4", text: "开封市", value: "开封市", open: true - }, {pId: "0_1_10", id: "0_1_10_5", text: "廊坊市", value: "廊坊市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_5", text: "廊坊市", value: "廊坊市", open: true }, { pId: "0_1_10", id: "0_1_10_6", text: "洛阳市", value: "洛阳市", open: true - }, {pId: "0_1_10", id: "0_1_10_7", text: "漯河市", value: "漯河市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_7", text: "漯河市", value: "漯河市", open: true }, { pId: "0_1_10", id: "0_1_10_8", text: "南阳市", value: "南阳市", open: true - }, {pId: "0_1_10", id: "0_1_10_9", text: "平顶山市", value: "平顶山市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_9", text: "平顶山市", value: "平顶山市", open: true }, { pId: "0_1_10", id: "0_1_10_10", text: "濮阳市", value: "濮阳市", open: true - }, {pId: "0_1_10", id: "0_1_10_11", text: "三门峡市", value: "三门峡市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_11", text: "三门峡市", value: "三门峡市", open: true }, { pId: "0_1_10", id: "0_1_10_12", text: "商丘市", value: "商丘市", open: true - }, {pId: "0_1_10", id: "0_1_10_13", text: "新乡市", value: "新乡市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_13", text: "新乡市", value: "新乡市", open: true }, { pId: "0_1_10", id: "0_1_10_14", text: "信阳市", value: "信阳市", open: true - }, {pId: "0_1_10", id: "0_1_10_15", text: "许昌市", value: "许昌市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_15", text: "许昌市", value: "许昌市", open: true }, { pId: "0_1_10", id: "0_1_10_16", text: "郑州市", value: "郑州市", open: true - }, {pId: "0_1_10", id: "0_1_10_17", text: "周口市", value: "周口市", open: true}, { + }, { pId: "0_1_10", id: "0_1_10_17", text: "周口市", value: "周口市", open: true }, { pId: "0_1_10", id: "0_1_10_18", text: "驻马店市", value: "驻马店市", open: true - }, {pId: "0_1", id: "0_1_11", text: "黑龙江省( 共13个 )", value: "黑龙江省", open: true}, { + }, { pId: "0_1", id: "0_1_11", text: "黑龙江省( 共13个 )", value: "黑龙江省", open: true }, { pId: "0_1_11", id: "0_1_11_0", text: "大庆市", value: "大庆市", open: true - }, {pId: "0_1_11", id: "0_1_11_1", text: "大兴安岭地区", value: "大兴安岭地区", open: true}, { + }, { pId: "0_1_11", id: "0_1_11_1", text: "大兴安岭地区", value: "大兴安岭地区", open: true }, { pId: "0_1_11", id: "0_1_11_2", text: "大兴安岭市", value: "大兴安岭市", open: true - }, {pId: "0_1_11", id: "0_1_11_3", text: "哈尔滨市", value: "哈尔滨市", open: true}, { + }, { pId: "0_1_11", id: "0_1_11_3", text: "哈尔滨市", value: "哈尔滨市", open: true }, { pId: "0_1_11", id: "0_1_11_4", text: "鹤港市", value: "鹤港市", open: true - }, {pId: "0_1_11", id: "0_1_11_5", text: "黑河市", value: "黑河市", open: true}, { + }, { pId: "0_1_11", id: "0_1_11_5", text: "黑河市", value: "黑河市", open: true }, { pId: "0_1_11", id: "0_1_11_6", text: "佳木斯市", value: "佳木斯市", open: true - }, {pId: "0_1_11", id: "0_1_11_7", text: "牡丹江市", value: "牡丹江市", open: true}, { + }, { pId: "0_1_11", id: "0_1_11_7", text: "牡丹江市", value: "牡丹江市", open: true }, { pId: "0_1_11", id: "0_1_11_8", text: "七台河市", value: "七台河市", open: true - }, {pId: "0_1_11", id: "0_1_11_9", text: "齐齐哈尔市", value: "齐齐哈尔市", open: true}, { + }, { pId: "0_1_11", id: "0_1_11_9", text: "齐齐哈尔市", value: "齐齐哈尔市", open: true }, { pId: "0_1_11", id: "0_1_11_10", text: "双鸭山市", value: "双鸭山市", open: true - }, {pId: "0_1_11", id: "0_1_11_11", text: "绥化市", value: "绥化市", open: true}, { + }, { pId: "0_1_11", id: "0_1_11_11", text: "绥化市", value: "绥化市", open: true }, { pId: "0_1_11", id: "0_1_11_12", text: "伊春市", value: "伊春市", open: true - }, {pId: "0_1", id: "0_1_12", text: "湖北省( 共16个 )", value: "湖北省", open: true}, { + }, { pId: "0_1", id: "0_1_12", text: "湖北省( 共16个 )", value: "湖北省", open: true }, { pId: "0_1_12", id: "0_1_12_0", text: "鄂州市", value: "鄂州市", open: true - }, {pId: "0_1_12", id: "0_1_12_1", text: "恩施土家族苗族自治州", value: "恩施土家族苗族自治州", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_1", text: "恩施土家族苗族自治州", value: "恩施土家族苗族自治州", open: true }, { pId: "0_1_12", id: "0_1_12_2", text: "黄冈市", value: "黄冈市", open: true - }, {pId: "0_1_12", id: "0_1_12_3", text: "黄石市", value: "黄石市", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_3", text: "黄石市", value: "黄石市", open: true }, { pId: "0_1_12", id: "0_1_12_4", text: "荆门市", value: "荆门市", open: true - }, {pId: "0_1_12", id: "0_1_12_5", text: "荆州市", value: "荆州市", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_5", text: "荆州市", value: "荆州市", open: true }, { pId: "0_1_12", id: "0_1_12_6", text: "神农架市", value: "神农架市", open: true - }, {pId: "0_1_12", id: "0_1_12_7", text: "十堰市", value: "十堰市", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_7", text: "十堰市", value: "十堰市", open: true }, { pId: "0_1_12", id: "0_1_12_8", text: "随州市", value: "随州市", open: true - }, {pId: "0_1_12", id: "0_1_12_9", text: "天门市", value: "天门市", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_9", text: "天门市", value: "天门市", open: true }, { pId: "0_1_12", id: "0_1_12_10", text: "武汉市", value: "武汉市", open: true - }, {pId: "0_1_12", id: "0_1_12_11", text: "咸宁市", value: "咸宁市", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_11", text: "咸宁市", value: "咸宁市", open: true }, { pId: "0_1_12", id: "0_1_12_12", text: "襄樊市", value: "襄樊市", open: true - }, {pId: "0_1_12", id: "0_1_12_13", text: "襄阳市", value: "襄阳市", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_13", text: "襄阳市", value: "襄阳市", open: true }, { pId: "0_1_12", id: "0_1_12_14", text: "孝感市", value: "孝感市", open: true - }, {pId: "0_1_12", id: "0_1_12_15", text: "宜昌市", value: "宜昌市", open: true}, { + }, { pId: "0_1_12", id: "0_1_12_15", text: "宜昌市", value: "宜昌市", open: true }, { pId: "0_1", id: "0_1_13", text: "湖南省( 共15个 )", value: "湖南省", open: true - }, {pId: "0_1_13", id: "0_1_13_0", text: "常德市", value: "常德市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_0", text: "常德市", value: "常德市", open: true }, { pId: "0_1_13", id: "0_1_13_1", text: "长沙市", value: "长沙市", open: true - }, {pId: "0_1_13", id: "0_1_13_2", text: "郴州市", value: "郴州市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_2", text: "郴州市", value: "郴州市", open: true }, { pId: "0_1_13", id: "0_1_13_3", text: "衡阳市", value: "衡阳市", open: true - }, {pId: "0_1_13", id: "0_1_13_4", text: "怀化市", value: "怀化市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_4", text: "怀化市", value: "怀化市", open: true }, { pId: "0_1_13", id: "0_1_13_5", text: "娄底市", value: "娄底市", open: true - }, {pId: "0_1_13", id: "0_1_13_6", text: "邵阳市", value: "邵阳市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_6", text: "邵阳市", value: "邵阳市", open: true }, { pId: "0_1_13", id: "0_1_13_7", text: "湘潭市", value: "湘潭市", open: true - }, {pId: "0_1_13", id: "0_1_13_8", text: "湘西市", value: "湘西市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_8", text: "湘西市", value: "湘西市", open: true }, { pId: "0_1_13", id: "0_1_13_9", text: "湘西土家族苗族自治州", value: "湘西土家族苗族自治州", open: true - }, {pId: "0_1_13", id: "0_1_13_10", text: "益阳市", value: "益阳市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_10", text: "益阳市", value: "益阳市", open: true }, { pId: "0_1_13", id: "0_1_13_11", text: "永州市", value: "永州市", open: true - }, {pId: "0_1_13", id: "0_1_13_12", text: "岳阳市", value: "岳阳市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_12", text: "岳阳市", value: "岳阳市", open: true }, { pId: "0_1_13", id: "0_1_13_13", text: "张家界市", value: "张家界市", open: true - }, {pId: "0_1_13", id: "0_1_13_14", text: "株洲市", value: "株洲市", open: true}, { + }, { pId: "0_1_13", id: "0_1_13_14", text: "株洲市", value: "株洲市", open: true }, { pId: "0_1", id: "0_1_14", text: "吉林省( 共10个 )", value: "吉林省", open: true - }, {pId: "0_1_14", id: "0_1_14_0", text: "白城市", value: "白城市", open: true}, { + }, { pId: "0_1_14", id: "0_1_14_0", text: "白城市", value: "白城市", open: true }, { pId: "0_1_14", id: "0_1_14_1", text: "白山市", value: "白山市", open: true - }, {pId: "0_1_14", id: "0_1_14_2", text: "长春市", value: "长春市", open: true}, { + }, { pId: "0_1_14", id: "0_1_14_2", text: "长春市", value: "长春市", open: true }, { pId: "0_1_14", id: "0_1_14_3", text: "大庆市", value: "大庆市", open: true - }, {pId: "0_1_14", id: "0_1_14_4", text: "吉林市", value: "吉林市", open: true}, { + }, { pId: "0_1_14", id: "0_1_14_4", text: "吉林市", value: "吉林市", open: true }, { pId: "0_1_14", id: "0_1_14_5", text: "辽源市", value: "辽源市", open: true - }, {pId: "0_1_14", id: "0_1_14_6", text: "四平市", value: "四平市", open: true}, { + }, { pId: "0_1_14", id: "0_1_14_6", text: "四平市", value: "四平市", open: true }, { pId: "0_1_14", id: "0_1_14_7", text: "松原市", value: "松原市", open: true - }, {pId: "0_1_14", id: "0_1_14_8", text: "通化市", value: "通化市", open: true}, { + }, { pId: "0_1_14", id: "0_1_14_8", text: "通化市", value: "通化市", open: true }, { pId: "0_1_14", id: "0_1_14_9", text: "延边朝鲜族自治州", value: "延边朝鲜族自治州", open: true - }, {pId: "0_1", id: "0_1_15", text: "江苏省( 共13个 )", value: "江苏省", open: true}, { + }, { pId: "0_1", id: "0_1_15", text: "江苏省( 共13个 )", value: "江苏省", open: true }, { pId: "0_1_15", id: "0_1_15_0", text: "常州市", value: "常州市", open: true - }, {pId: "0_1_15", id: "0_1_15_1", text: "淮安市", value: "淮安市", open: true}, { + }, { pId: "0_1_15", id: "0_1_15_1", text: "淮安市", value: "淮安市", open: true }, { pId: "0_1_15", id: "0_1_15_2", text: "连云港市", value: "连云港市", open: true - }, {pId: "0_1_15", id: "0_1_15_3", text: "南京市", value: "南京市", open: true}, { + }, { pId: "0_1_15", id: "0_1_15_3", text: "南京市", value: "南京市", open: true }, { pId: "0_1_15", id: "0_1_15_4", text: "南通市", value: "南通市", open: true - }, {pId: "0_1_15", id: "0_1_15_5", text: "苏州市", value: "苏州市", open: true}, { + }, { pId: "0_1_15", id: "0_1_15_5", text: "苏州市", value: "苏州市", open: true }, { pId: "0_1_15", id: "0_1_15_6", text: "宿迁市", value: "宿迁市", open: true - }, {pId: "0_1_15", id: "0_1_15_7", text: "泰州市", value: "泰州市", open: true}, { + }, { pId: "0_1_15", id: "0_1_15_7", text: "泰州市", value: "泰州市", open: true }, { pId: "0_1_15", id: "0_1_15_8", text: "无锡市", value: "无锡市", open: true - }, {pId: "0_1_15", id: "0_1_15_9", text: "徐州市", value: "徐州市", open: true}, { + }, { pId: "0_1_15", id: "0_1_15_9", text: "徐州市", value: "徐州市", open: true }, { pId: "0_1_15", id: "0_1_15_10", text: "盐城市", value: "盐城市", open: true - }, {pId: "0_1_15", id: "0_1_15_11", text: "扬州市", value: "扬州市", open: true}, { + }, { pId: "0_1_15", id: "0_1_15_11", text: "扬州市", value: "扬州市", open: true }, { pId: "0_1_15", id: "0_1_15_12", text: "镇江市", value: "镇江市", open: true - }, {pId: "0_1", id: "0_1_16", text: "江西省( 共10个 )", value: "江西省", open: true}, { + }, { pId: "0_1", id: "0_1_16", text: "江西省( 共10个 )", value: "江西省", open: true }, { pId: "0_1_16", id: "0_1_16_0", text: "抚州市", value: "抚州市", open: true - }, {pId: "0_1_16", id: "0_1_16_1", text: "赣州市", value: "赣州市", open: true}, { + }, { pId: "0_1_16", id: "0_1_16_1", text: "赣州市", value: "赣州市", open: true }, { pId: "0_1_16", id: "0_1_16_2", text: "景德镇市", value: "景德镇市", open: true - }, {pId: "0_1_16", id: "0_1_16_3", text: "九江市", value: "九江市", open: true}, { + }, { pId: "0_1_16", id: "0_1_16_3", text: "九江市", value: "九江市", open: true }, { pId: "0_1_16", id: "0_1_16_4", text: "南昌市", value: "南昌市", open: true - }, {pId: "0_1_16", id: "0_1_16_5", text: "萍乡市", value: "萍乡市", open: true}, { + }, { pId: "0_1_16", id: "0_1_16_5", text: "萍乡市", value: "萍乡市", open: true }, { pId: "0_1_16", id: "0_1_16_6", text: "上饶市", value: "上饶市", open: true - }, {pId: "0_1_16", id: "0_1_16_7", text: "新余市", value: "新余市", open: true}, { + }, { pId: "0_1_16", id: "0_1_16_7", text: "新余市", value: "新余市", open: true }, { pId: "0_1_16", id: "0_1_16_8", text: "宜春市", value: "宜春市", open: true - }, {pId: "0_1_16", id: "0_1_16_9", text: "鹰潭市", value: "鹰潭市", open: true}, { + }, { pId: "0_1_16", id: "0_1_16_9", text: "鹰潭市", value: "鹰潭市", open: true }, { pId: "0_1", id: "0_1_17", text: "辽宁省( 共14个 )", value: "辽宁省", open: true - }, {pId: "0_1_17", id: "0_1_17_0", text: "鞍山市", value: "鞍山市", open: true}, { + }, { pId: "0_1_17", id: "0_1_17_0", text: "鞍山市", value: "鞍山市", open: true }, { pId: "0_1_17", id: "0_1_17_1", text: "本溪市", value: "本溪市", open: true - }, {pId: "0_1_17", id: "0_1_17_2", text: "朝阳市", value: "朝阳市", open: true}, { + }, { pId: "0_1_17", id: "0_1_17_2", text: "朝阳市", value: "朝阳市", open: true }, { pId: "0_1_17", id: "0_1_17_3", text: "大连市", value: "大连市", open: true - }, {pId: "0_1_17", id: "0_1_17_4", text: "丹东市", value: "丹东市", open: true}, { + }, { pId: "0_1_17", id: "0_1_17_4", text: "丹东市", value: "丹东市", open: true }, { pId: "0_1_17", id: "0_1_17_5", text: "抚顺市", value: "抚顺市", open: true - }, {pId: "0_1_17", id: "0_1_17_6", text: "阜新市", value: "阜新市", open: true}, { + }, { pId: "0_1_17", id: "0_1_17_6", text: "阜新市", value: "阜新市", open: true }, { pId: "0_1_17", id: "0_1_17_7", text: "葫芦岛市", value: "葫芦岛市", open: true - }, {pId: "0_1_17", id: "0_1_17_8", text: "锦州市", value: "锦州市", open: true}, { + }, { pId: "0_1_17", id: "0_1_17_8", text: "锦州市", value: "锦州市", open: true }, { pId: "0_1_17", id: "0_1_17_9", text: "辽阳市", value: "辽阳市", open: true - }, {pId: "0_1_17", id: "0_1_17_10", text: "盘锦市", value: "盘锦市", open: true}, { + }, { pId: "0_1_17", id: "0_1_17_10", text: "盘锦市", value: "盘锦市", open: true }, { pId: "0_1_17", id: "0_1_17_11", text: "沈阳市", value: "沈阳市", open: true - }, {pId: "0_1_17", id: "0_1_17_12", text: "铁岭市", value: "铁岭市", open: true}, { + }, { pId: "0_1_17", id: "0_1_17_12", text: "铁岭市", value: "铁岭市", open: true }, { pId: "0_1_17", id: "0_1_17_13", text: "营口市", value: "营口市", open: true - }, {pId: "0_1", id: "0_1_18", text: "内蒙古( 共10个 )", value: "内蒙古", open: true}, { + }, { pId: "0_1", id: "0_1_18", text: "内蒙古( 共10个 )", value: "内蒙古", open: true }, { pId: "0_1_18", id: "0_1_18_0", text: "包头市", value: "包头市", open: true - }, {pId: "0_1_18", id: "0_1_18_1", text: "赤峰市", value: "赤峰市", open: true}, { + }, { pId: "0_1_18", id: "0_1_18_1", text: "赤峰市", value: "赤峰市", open: true }, { pId: "0_1_18", id: "0_1_18_2", text: "鄂尔多斯市", value: "鄂尔多斯市", open: true - }, {pId: "0_1_18", id: "0_1_18_3", text: "呼和浩特市", value: "呼和浩特市", open: true}, { + }, { pId: "0_1_18", id: "0_1_18_3", text: "呼和浩特市", value: "呼和浩特市", open: true }, { pId: "0_1_18", id: "0_1_18_4", text: "呼伦贝尔市", value: "呼伦贝尔市", open: true - }, {pId: "0_1_18", id: "0_1_18_5", text: "通辽市", value: "通辽市", open: true}, { + }, { pId: "0_1_18", id: "0_1_18_5", text: "通辽市", value: "通辽市", open: true }, { pId: "0_1_18", id: "0_1_18_6", text: "乌海市", value: "乌海市", open: true - }, {pId: "0_1_18", id: "0_1_18_7", text: "锡林郭勒市", value: "锡林郭勒市", open: true}, { + }, { pId: "0_1_18", id: "0_1_18_7", text: "锡林郭勒市", value: "锡林郭勒市", open: true }, { pId: "0_1_18", id: "0_1_18_8", text: "兴安市", value: "兴安市", open: true - }, {pId: "0_1_18", id: "0_1_18_9", text: "运城市", value: "运城市", open: true}, { + }, { pId: "0_1_18", id: "0_1_18_9", text: "运城市", value: "运城市", open: true }, { pId: "0_1", id: "0_1_19", text: "宁夏回族自治区( 共5个 )", value: "宁夏回族自治区", open: true - }, {pId: "0_1_19", id: "0_1_19_0", text: "固原市", value: "固原市", open: true}, { + }, { pId: "0_1_19", id: "0_1_19_0", text: "固原市", value: "固原市", open: true }, { pId: "0_1_19", id: "0_1_19_1", text: "石嘴山市", value: "石嘴山市", open: true - }, {pId: "0_1_19", id: "0_1_19_2", text: "吴忠市", value: "吴忠市", open: true}, { + }, { pId: "0_1_19", id: "0_1_19_2", text: "吴忠市", value: "吴忠市", open: true }, { pId: "0_1_19", id: "0_1_19_3", text: "银川市", value: "银川市", open: true - }, {pId: "0_1_19", id: "0_1_19_4", text: "中卫市", value: "中卫市", open: true}, { + }, { pId: "0_1_19", id: "0_1_19_4", text: "中卫市", value: "中卫市", open: true }, { pId: "0_1", id: "0_1_20", text: "青海省( 共4个 )", value: "青海省", open: true - }, {pId: "0_1_20", id: "0_1_20_0", text: "海东地区", value: "海东地区", open: true}, { + }, { pId: "0_1_20", id: "0_1_20_0", text: "海东地区", value: "海东地区", open: true }, { pId: "0_1_20", id: "0_1_20_1", text: "海南藏族自治州", value: "海南藏族自治州", open: true - }, {pId: "0_1_20", id: "0_1_20_2", text: "海西蒙古族藏族自治州", value: "海西蒙古族藏族自治州", open: true}, { + }, { pId: "0_1_20", id: "0_1_20_2", text: "海西蒙古族藏族自治州", value: "海西蒙古族藏族自治州", open: true }, { pId: "0_1_20", id: "0_1_20_3", text: "西宁市", value: "西宁市", open: true - }, {pId: "0_1", id: "0_1_21", text: "山东省( 共17个 )", value: "山东省", open: true}, { + }, { pId: "0_1", id: "0_1_21", text: "山东省( 共17个 )", value: "山东省", open: true }, { pId: "0_1_21", id: "0_1_21_0", text: "滨州市", value: "滨州市", open: true - }, {pId: "0_1_21", id: "0_1_21_1", text: "德州市", value: "德州市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_1", text: "德州市", value: "德州市", open: true }, { pId: "0_1_21", id: "0_1_21_2", text: "东营市", value: "东营市", open: true - }, {pId: "0_1_21", id: "0_1_21_3", text: "菏泽市", value: "菏泽市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_3", text: "菏泽市", value: "菏泽市", open: true }, { pId: "0_1_21", id: "0_1_21_4", text: "济南市", value: "济南市", open: true - }, {pId: "0_1_21", id: "0_1_21_5", text: "济宁市", value: "济宁市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_5", text: "济宁市", value: "济宁市", open: true }, { pId: "0_1_21", id: "0_1_21_6", text: "莱芜市", value: "莱芜市", open: true - }, {pId: "0_1_21", id: "0_1_21_7", text: "聊城市", value: "聊城市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_7", text: "聊城市", value: "聊城市", open: true }, { pId: "0_1_21", id: "0_1_21_8", text: "临沂市", value: "临沂市", open: true - }, {pId: "0_1_21", id: "0_1_21_9", text: "青岛市", value: "青岛市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_9", text: "青岛市", value: "青岛市", open: true }, { pId: "0_1_21", id: "0_1_21_10", text: "日照市", value: "日照市", open: true - }, {pId: "0_1_21", id: "0_1_21_11", text: "泰安市", value: "泰安市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_11", text: "泰安市", value: "泰安市", open: true }, { pId: "0_1_21", id: "0_1_21_12", text: "威海市", value: "威海市", open: true - }, {pId: "0_1_21", id: "0_1_21_13", text: "潍坊市", value: "潍坊市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_13", text: "潍坊市", value: "潍坊市", open: true }, { pId: "0_1_21", id: "0_1_21_14", text: "烟台市", value: "烟台市", open: true - }, {pId: "0_1_21", id: "0_1_21_15", text: "枣庄市", value: "枣庄市", open: true}, { + }, { pId: "0_1_21", id: "0_1_21_15", text: "枣庄市", value: "枣庄市", open: true }, { pId: "0_1_21", id: "0_1_21_16", text: "淄博市", value: "淄博市", open: true - }, {pId: "0_1", id: "0_1_22", text: "山西省( 共12个 )", value: "山西省", open: true}, { + }, { pId: "0_1", id: "0_1_22", text: "山西省( 共12个 )", value: "山西省", open: true }, { pId: "0_1_22", id: "0_1_22_0", text: "长治市", value: "长治市", open: true - }, {pId: "0_1_22", id: "0_1_22_1", text: "大同市", value: "大同市", open: true}, { + }, { pId: "0_1_22", id: "0_1_22_1", text: "大同市", value: "大同市", open: true }, { pId: "0_1_22", id: "0_1_22_2", text: "晋城市", value: "晋城市", open: true - }, {pId: "0_1_22", id: "0_1_22_3", text: "晋中市", value: "晋中市", open: true}, { + }, { pId: "0_1_22", id: "0_1_22_3", text: "晋中市", value: "晋中市", open: true }, { pId: "0_1_22", id: "0_1_22_4", text: "临汾市", value: "临汾市", open: true - }, {pId: "0_1_22", id: "0_1_22_5", text: "吕梁市", value: "吕梁市", open: true}, { + }, { pId: "0_1_22", id: "0_1_22_5", text: "吕梁市", value: "吕梁市", open: true }, { pId: "0_1_22", id: "0_1_22_6", text: "青岛市", value: "青岛市", open: true - }, {pId: "0_1_22", id: "0_1_22_7", text: "朔州市", value: "朔州市", open: true}, { + }, { pId: "0_1_22", id: "0_1_22_7", text: "朔州市", value: "朔州市", open: true }, { pId: "0_1_22", id: "0_1_22_8", text: "太原市", value: "太原市", open: true - }, {pId: "0_1_22", id: "0_1_22_9", text: "忻州市", value: "忻州市", open: true}, { + }, { pId: "0_1_22", id: "0_1_22_9", text: "忻州市", value: "忻州市", open: true }, { pId: "0_1_22", id: "0_1_22_10", text: "阳泉市", value: "阳泉市", open: true - }, {pId: "0_1_22", id: "0_1_22_11", text: "运城市", value: "运城市", open: true}, { + }, { pId: "0_1_22", id: "0_1_22_11", text: "运城市", value: "运城市", open: true }, { pId: "0_1", id: "0_1_23", text: "陕西省( 共9个 )", value: "陕西省", open: true - }, {pId: "0_1_23", id: "0_1_23_0", text: "安康市", value: "安康市", open: true}, { + }, { pId: "0_1_23", id: "0_1_23_0", text: "安康市", value: "安康市", open: true }, { pId: "0_1_23", id: "0_1_23_1", text: "宝鸡市", value: "宝鸡市", open: true - }, {pId: "0_1_23", id: "0_1_23_2", text: "汉中市", value: "汉中市", open: true}, { + }, { pId: "0_1_23", id: "0_1_23_2", text: "汉中市", value: "汉中市", open: true }, { pId: "0_1_23", id: "0_1_23_3", text: "商洛市", value: "商洛市", open: true - }, {pId: "0_1_23", id: "0_1_23_4", text: "渭南市", value: "渭南市", open: true}, { + }, { pId: "0_1_23", id: "0_1_23_4", text: "渭南市", value: "渭南市", open: true }, { pId: "0_1_23", id: "0_1_23_5", text: "西安市", value: "西安市", open: true - }, {pId: "0_1_23", id: "0_1_23_6", text: "咸阳市", value: "咸阳市", open: true}, { + }, { pId: "0_1_23", id: "0_1_23_6", text: "咸阳市", value: "咸阳市", open: true }, { pId: "0_1_23", id: "0_1_23_7", text: "延安市", value: "延安市", open: true - }, {pId: "0_1_23", id: "0_1_23_8", text: "榆林市", value: "榆林市", open: true}, { + }, { pId: "0_1_23", id: "0_1_23_8", text: "榆林市", value: "榆林市", open: true }, { pId: "0_1", id: "0_1_24", text: "上海市( 共19个 )", value: "上海市", open: true - }, {pId: "0_1_24", id: "0_1_24_0", text: "宝山区", value: "宝山区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_0", text: "宝山区", value: "宝山区", open: true }, { pId: "0_1_24", id: "0_1_24_1", text: "长宁区", value: "长宁区", open: true - }, {pId: "0_1_24", id: "0_1_24_2", text: "崇明县", value: "崇明县", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_2", text: "崇明县", value: "崇明县", open: true }, { pId: "0_1_24", id: "0_1_24_3", text: "奉贤区", value: "奉贤区", open: true - }, {pId: "0_1_24", id: "0_1_24_4", text: "虹口区", value: "虹口区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_4", text: "虹口区", value: "虹口区", open: true }, { pId: "0_1_24", id: "0_1_24_5", text: "黄浦区", value: "黄浦区", open: true - }, {pId: "0_1_24", id: "0_1_24_6", text: "嘉定区", value: "嘉定区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_6", text: "嘉定区", value: "嘉定区", open: true }, { pId: "0_1_24", id: "0_1_24_7", text: "金山区", value: "金山区", open: true - }, {pId: "0_1_24", id: "0_1_24_8", text: "静安区", value: "静安区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_8", text: "静安区", value: "静安区", open: true }, { pId: "0_1_24", id: "0_1_24_9", text: "昆明市", value: "昆明市", open: true - }, {pId: "0_1_24", id: "0_1_24_10", text: "闵行区", value: "闵行区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_10", text: "闵行区", value: "闵行区", open: true }, { pId: "0_1_24", id: "0_1_24_11", text: "普陀区", value: "普陀区", open: true - }, {pId: "0_1_24", id: "0_1_24_12", text: "浦东新区", value: "浦东新区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_12", text: "浦东新区", value: "浦东新区", open: true }, { pId: "0_1_24", id: "0_1_24_13", text: "青浦区", value: "青浦区", open: true - }, {pId: "0_1_24", id: "0_1_24_14", text: "上海市区", value: "上海市区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_14", text: "上海市区", value: "上海市区", open: true }, { pId: "0_1_24", id: "0_1_24_15", text: "松江区", value: "松江区", open: true - }, {pId: "0_1_24", id: "0_1_24_16", text: "徐汇区", value: "徐汇区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_16", text: "徐汇区", value: "徐汇区", open: true }, { pId: "0_1_24", id: "0_1_24_17", text: "杨浦区", value: "杨浦区", open: true - }, {pId: "0_1_24", id: "0_1_24_18", text: "闸北区", value: "闸北区", open: true}, { + }, { pId: "0_1_24", id: "0_1_24_18", text: "闸北区", value: "闸北区", open: true }, { pId: "0_1", id: "0_1_25", text: "四川省( 共21个 )", value: "四川省", open: true - }, {pId: "0_1_25", id: "0_1_25_0", text: "阿坝藏族羌族自治州", value: "阿坝藏族羌族自治州", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_0", text: "阿坝藏族羌族自治州", value: "阿坝藏族羌族自治州", open: true }, { pId: "0_1_25", id: "0_1_25_1", text: "巴中市", value: "巴中市", open: true - }, {pId: "0_1_25", id: "0_1_25_2", text: "成都市", value: "成都市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_2", text: "成都市", value: "成都市", open: true }, { pId: "0_1_25", id: "0_1_25_3", text: "达州市", value: "达州市", open: true - }, {pId: "0_1_25", id: "0_1_25_4", text: "德阳市", value: "德阳市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_4", text: "德阳市", value: "德阳市", open: true }, { pId: "0_1_25", id: "0_1_25_5", text: "甘孜市", value: "甘孜市", open: true - }, {pId: "0_1_25", id: "0_1_25_6", text: "广安市", value: "广安市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_6", text: "广安市", value: "广安市", open: true }, { pId: "0_1_25", id: "0_1_25_7", text: "广元市", value: "广元市", open: true - }, {pId: "0_1_25", id: "0_1_25_8", text: "乐山市", value: "乐山市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_8", text: "乐山市", value: "乐山市", open: true }, { pId: "0_1_25", id: "0_1_25_9", text: "凉山市", value: "凉山市", open: true - }, {pId: "0_1_25", id: "0_1_25_10", text: "泸州市", value: "泸州市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_10", text: "泸州市", value: "泸州市", open: true }, { pId: "0_1_25", id: "0_1_25_11", text: "眉山市", value: "眉山市", open: true - }, {pId: "0_1_25", id: "0_1_25_12", text: "绵阳市", value: "绵阳市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_12", text: "绵阳市", value: "绵阳市", open: true }, { pId: "0_1_25", id: "0_1_25_13", text: "南充市", value: "南充市", open: true - }, {pId: "0_1_25", id: "0_1_25_14", text: "内江市", value: "内江市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_14", text: "内江市", value: "内江市", open: true }, { pId: "0_1_25", id: "0_1_25_15", text: "攀枝花市", value: "攀枝花市", open: true - }, {pId: "0_1_25", id: "0_1_25_16", text: "遂宁市", value: "遂宁市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_16", text: "遂宁市", value: "遂宁市", open: true }, { pId: "0_1_25", id: "0_1_25_17", text: "雅安市", value: "雅安市", open: true - }, {pId: "0_1_25", id: "0_1_25_18", text: "宜宾市", value: "宜宾市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_18", text: "宜宾市", value: "宜宾市", open: true }, { pId: "0_1_25", id: "0_1_25_19", text: "资阳市", value: "资阳市", open: true - }, {pId: "0_1_25", id: "0_1_25_20", text: "自贡市", value: "自贡市", open: true}, { + }, { pId: "0_1_25", id: "0_1_25_20", text: "自贡市", value: "自贡市", open: true }, { pId: "0_1", id: "0_1_26", text: "台湾( 共1个 )", value: "台湾", open: true - }, {pId: "0_1_26", id: "0_1_26_0", text: "台北市", value: "台北市", open: true}, { + }, { pId: "0_1_26", id: "0_1_26_0", text: "台北市", value: "台北市", open: true }, { pId: "0_1", id: "0_1_27", text: "天津市( 共1个 )", value: "天津市", open: true - }, {pId: "0_1_27", id: "0_1_27_0", text: "天津市区", value: "天津市区", open: true}, { + }, { pId: "0_1_27", id: "0_1_27_0", text: "天津市区", value: "天津市区", open: true }, { pId: "0_1", id: "0_1_28", text: "西藏自治区( 共2个 )", value: "西藏自治区", open: true - }, {pId: "0_1_28", id: "0_1_28_0", text: "阿里市", value: "阿里市", open: true}, { + }, { pId: "0_1_28", id: "0_1_28_0", text: "阿里市", value: "阿里市", open: true }, { pId: "0_1_28", id: "0_1_28_1", text: "日喀则市", value: "日喀则市", open: true - }, {pId: "0_1", id: "0_1_29", text: "香港特别行政区( 共1个 )", value: "香港特别行政区", open: true}, { + }, { pId: "0_1", id: "0_1_29", text: "香港特别行政区( 共1个 )", value: "香港特别行政区", open: true }, { pId: "0_1_29", id: "0_1_29_0", text: "香港", @@ -1401,141 +1401,141 @@ Demo.CONSTANTS = { text: "新疆维吾尔族自治区( 共11个 )", value: "新疆维吾尔族自治区", open: true - }, {pId: "0_1_30", id: "0_1_30_0", text: "巴音郭楞市", value: "巴音郭楞市", open: true}, { + }, { pId: "0_1_30", id: "0_1_30_0", text: "巴音郭楞市", value: "巴音郭楞市", open: true }, { pId: "0_1_30", id: "0_1_30_1", text: "哈密市", value: "哈密市", open: true - }, {pId: "0_1_30", id: "0_1_30_2", text: "和田市", value: "和田市", open: true}, { + }, { pId: "0_1_30", id: "0_1_30_2", text: "和田市", value: "和田市", open: true }, { pId: "0_1_30", id: "0_1_30_3", text: "喀什地区", value: "喀什地区", open: true - }, {pId: "0_1_30", id: "0_1_30_4", text: "克拉玛依市", value: "克拉玛依市", open: true}, { + }, { pId: "0_1_30", id: "0_1_30_4", text: "克拉玛依市", value: "克拉玛依市", open: true }, { pId: "0_1_30", id: "0_1_30_5", text: "克孜勒苏柯州", value: "克孜勒苏柯州", open: true - }, {pId: "0_1_30", id: "0_1_30_6", text: "石河子市", value: "石河子市", open: true}, { + }, { pId: "0_1_30", id: "0_1_30_6", text: "石河子市", value: "石河子市", open: true }, { pId: "0_1_30", id: "0_1_30_7", text: "塔城市", value: "塔城市", open: true - }, {pId: "0_1_30", id: "0_1_30_8", text: "吐鲁番地区", value: "吐鲁番地区", open: true}, { + }, { pId: "0_1_30", id: "0_1_30_8", text: "吐鲁番地区", value: "吐鲁番地区", open: true }, { pId: "0_1_30", id: "0_1_30_9", text: "乌鲁木齐", value: "乌鲁木齐", open: true - }, {pId: "0_1_30", id: "0_1_30_10", text: "伊犁市", value: "伊犁市", open: true}, { + }, { pId: "0_1_30", id: "0_1_30_10", text: "伊犁市", value: "伊犁市", open: true }, { pId: "0_1", id: "0_1_31", text: "云南省( 共12个 )", value: "云南省", open: true - }, {pId: "0_1_31", id: "0_1_31_0", text: "保山市", value: "保山市", open: true}, { + }, { pId: "0_1_31", id: "0_1_31_0", text: "保山市", value: "保山市", open: true }, { pId: "0_1_31", id: "0_1_31_1", text: "楚雄彝族自治州", value: "楚雄彝族自治州", open: true - }, {pId: "0_1_31", id: "0_1_31_2", text: "大理白族自治州", value: "大理白族自治州", open: true}, { + }, { pId: "0_1_31", id: "0_1_31_2", text: "大理白族自治州", value: "大理白族自治州", open: true }, { pId: "0_1_31", id: "0_1_31_3", text: "红河哈尼族彝族自治州", value: "红河哈尼族彝族自治州", open: true - }, {pId: "0_1_31", id: "0_1_31_4", text: "昆明市", value: "昆明市", open: true}, { + }, { pId: "0_1_31", id: "0_1_31_4", text: "昆明市", value: "昆明市", open: true }, { pId: "0_1_31", id: "0_1_31_5", text: "丽江市", value: "丽江市", open: true - }, {pId: "0_1_31", id: "0_1_31_6", text: "临沧市", value: "临沧市", open: true}, { + }, { pId: "0_1_31", id: "0_1_31_6", text: "临沧市", value: "临沧市", open: true }, { pId: "0_1_31", id: "0_1_31_7", text: "曲靖市", value: "曲靖市", open: true - }, {pId: "0_1_31", id: "0_1_31_8", text: "思茅市", value: "思茅市", open: true}, { + }, { pId: "0_1_31", id: "0_1_31_8", text: "思茅市", value: "思茅市", open: true }, { pId: "0_1_31", id: "0_1_31_9", text: "文山市", value: "文山市", open: true - }, {pId: "0_1_31", id: "0_1_31_10", text: "玉溪市", value: "玉溪市", open: true}, { + }, { pId: "0_1_31", id: "0_1_31_10", text: "玉溪市", value: "玉溪市", open: true }, { pId: "0_1_31", id: "0_1_31_11", text: "昭通市", value: "昭通市", open: true - }, {pId: "0_1", id: "0_1_32", text: "浙江省( 共12个 )", value: "浙江省", open: true}, { + }, { pId: "0_1", id: "0_1_32", text: "浙江省( 共12个 )", value: "浙江省", open: true }, { pId: "0_1_32", id: "0_1_32_0", text: "杭州市", value: "杭州市", open: true - }, {pId: "0_1_32", id: "0_1_32_1", text: "湖州市", value: "湖州市", open: true}, { + }, { pId: "0_1_32", id: "0_1_32_1", text: "湖州市", value: "湖州市", open: true }, { pId: "0_1_32", id: "0_1_32_2", text: "嘉兴市", value: "嘉兴市", open: true - }, {pId: "0_1_32", id: "0_1_32_3", text: "金华市", value: "金华市", open: true}, { + }, { pId: "0_1_32", id: "0_1_32_3", text: "金华市", value: "金华市", open: true }, { pId: "0_1_32", id: "0_1_32_4", text: "丽水市", value: "丽水市", open: true - }, {pId: "0_1_32", id: "0_1_32_5", text: "宁波市", value: "宁波市", open: true}, { + }, { pId: "0_1_32", id: "0_1_32_5", text: "宁波市", value: "宁波市", open: true }, { pId: "0_1_32", id: "0_1_32_6", text: "衢州市", value: "衢州市", open: true - }, {pId: "0_1_32", id: "0_1_32_7", text: "绍兴市", value: "绍兴市", open: true}, { + }, { pId: "0_1_32", id: "0_1_32_7", text: "绍兴市", value: "绍兴市", open: true }, { pId: "0_1_32", id: "0_1_32_8", text: "台州市", value: "台州市", open: true - }, {pId: "0_1_32", id: "0_1_32_9", text: "温州市", value: "温州市", open: true}, { + }, { pId: "0_1_32", id: "0_1_32_9", text: "温州市", value: "温州市", open: true }, { pId: "0_1_32", id: "0_1_32_10", text: "浙江省", value: "浙江省", open: true - }, {pId: "0_1_32", id: "0_1_32_11", text: "舟山市", value: "舟山市", open: true}, { + }, { pId: "0_1_32", id: "0_1_32_11", text: "舟山市", value: "舟山市", open: true }, { pId: "0_1", id: "0_1_33", text: "重庆市( 共1个 )", value: "重庆市", open: true - }, {pId: "0_1_33", id: "0_1_33_0", text: "重庆市区", value: "重庆市区", open: true}], + }, { pId: "0_1_33", id: "0_1_33_0", text: "重庆市区", value: "重庆市区", open: true }], - TREE: [{id: -1, pId: -2, value: "根目录", text: "根目录"}, - {id: 1, pId: -1, value: "第一级目录1", text: "第一级目录1"}, - {id: 11, pId: 1, value: "第二级文件1", text: "第二级文件1"}, - {id: 12, pId: 1, value: "第二级目录2", text: "第二级目录2"}, - {id: 121, pId: 12, value: "第三级目录1", text: "第三级目录1"}, - {id: 122, pId: 12, value: "第三级文件1", text: "第三级文件1"}, - {id: 1211, pId: 121, value: "第四级目录1", text: "第四级目录1"}, + TREE: [{ id: -1, pId: -2, value: "根目录", text: "根目录" }, + { id: 1, pId: -1, value: "1", text: "第一级目录1", disabled: true }, + { id: 11, pId: 1, value: "11", text: "第二级文件1" }, + { id: 12, pId: 1, value: "12", text: "第二级目录2" }, + { id: 121, pId: 12, value: "121", text: "第三级目录1" }, + { id: 122, pId: 12, value: "122", text: "第三级文件1" }, + { id: 1211, pId: 121, value: "1211", text: "第四级目录1" }, { id: 12111, pId: 1211, - value: "第五级文件1", + value: "12111", text: "第五级文件111111111111111111111111111111111111111111111111111111111111111111111111111111111111111" }, - {id: 2, pId: -1, value: "第一级目录2", text: "第一级目录2"}, - {id: 21, pId: 2, value: "第二级目录3", text: "第二级目录3"}, - {id: 22, pId: 2, value: "第二级文件2", text: "第二级文件2"}, - {id: 211, pId: 21, value: "第三级目录2", text: "第三级目录2"}, - {id: 212, pId: 21, value: "第三级文件2", text: "第三级文件2"}, - {id: 2111, pId: 211, value: "第四级文件1", text: "第四级文件1"}], + { id: 2, pId: -1, value: "2", text: "第一级目录2" }, + { id: 21, pId: 2, value: "21", text: "第二级目录3" }, + { id: 22, pId: 2, value: "22", text: "第二级文件2" }, + { id: 211, pId: 21, value: "211", text: "第三级目录2" }, + { id: 212, pId: 21, value: "212", text: "第三级文件2" }, + { id: 2111, pId: 211, value: "2111", text: "第四级文件1" }], LEVELTREE: [{ id: 1, text: "第一项", diff --git a/demo/js/case/tree/demo.level_tree.js b/demo/js/case/tree/demo.level_tree.js index f21c21707..4b4ac061c 100644 --- a/demo/js/case/tree/demo.level_tree.js +++ b/demo/js/case/tree/demo.level_tree.js @@ -42,6 +42,11 @@ Demo.Func = BI.inherit(BI.Widget, { pId: 1, text: "子项3", value: 13 + }, { + id: 111, + pId: 11, + text: "子项1-1", + value: 111 }, { id: 21, pId: 2, diff --git a/demo/js/widget/tree/demo.multilayer_select_level_tree.js b/demo/js/widget/tree/demo.multilayer_select_level_tree.js index 0a9054c3a..357b32a23 100644 --- a/demo/js/widget/tree/demo.multilayer_select_level_tree.js +++ b/demo/js/widget/tree/demo.multilayer_select_level_tree.js @@ -33,7 +33,7 @@ Demo.MultiLayerSelectLevelTree = BI.inherit(BI.Widget, { height: 25, text: "setValue (第二级文件1)", handler: function () { - tree.setValue(["第二级文件1"]); + tree.setValue(["11"]); } }, height: 25 diff --git a/demo/js/widget/tree/demo.multilayer_single_level_tree.js b/demo/js/widget/tree/demo.multilayer_single_level_tree.js index 967c8d5f4..9aa4ab15c 100644 --- a/demo/js/widget/tree/demo.multilayer_single_level_tree.js +++ b/demo/js/widget/tree/demo.multilayer_single_level_tree.js @@ -46,27 +46,27 @@ Demo.MultiLayerSingleLevelTree = BI.inherit(BI.Widget, { mounted: function () { var tree = [ // {id: -2, pId: 0, value: "根目录1", text: "根目录1"}, - {id: -1, pId: 0, value: "根目录", text: "根目录"}, - {id: 1, pId: -1, value: "第一级目录1", text: "第一级目录1"}, - {id: 11, pId: 1, value: "第二级文件1", text: "第二级文件1"}, - {id: 12, pId: 1, value: "第二级目录2", text: "第二级目录2"}, - {id: 121, pId: 12, value: "第三级目录1", text: "第三级目录1"}, - {id: 122, pId: 12, value: "第三级文件1", text: "第三级文件1"}, - {id: 1211, pId: 121, value: "第四级目录1", text: "第四级目录1"}, - {id: 2, pId: -1, value: "第一级目录2", text: "第一级目录2"}, - {id: 21, pId: 2, value: "第二级目录3", text: "第二级目录3"}, - {id: 22, pId: 2, value: "第二级文件2", text: "第二级文件2"}, - {id: 211, pId: 21, value: "第三级目录2", text: "第三级目录2"}, - {id: 212, pId: 21, value: "第三级文件2", text: "第三级文件2"}, - {id: 2111, pId: 211, value: "第四级文件1", text: "第四级文件1"}, - {id: 3, pId: -1, value: "第一级目录3", text: "第一级目录3"}, - {id: 31, pId: 3, value: "第二级文件2", text: "第二级文件2"}, - {id: 33, pId: 3, value: "第二级目录3", text: "第二级目录1"}, - {id: 32, pId: 3, value: "第二级文件3", text: "第二级文件3"}, - {id: 331, pId: 33, value: "第三级文件1", text: "第三级文件1"} + { id: -1, pId: 0, value: "根目录", text: "根目录" }, + { id: 1, pId: -1, value: "第一级目录1", text: "第一级目录1" }, + { id: 11, pId: 1, value: "第二级文件1", text: "第二级文件1" }, + { id: 12, pId: 1, value: "第二级目录2", text: "第二级目录2", disabled: true }, + { id: 121, pId: 12, value: "第三级目录1", text: "第三级目录1" }, + { id: 122, pId: 12, value: "第三级文件1", text: "第三级文件1" }, + { id: 1211, pId: 121, value: "第四级目录1", text: "第四级目录1" }, + { id: 2, pId: -1, value: "第一级目录2", text: "第一级目录2" }, + { id: 21, pId: 2, value: "第二级目录3", text: "第二级目录3" }, + { id: 22, pId: 2, value: "第二级文件2", text: "第二级文件2" }, + { id: 211, pId: 21, value: "第三级目录2", text: "第三级目录2" }, + { id: 212, pId: 21, value: "第三级文件2", text: "第三级文件2" }, + { id: 2111, pId: 211, value: "第四级文件1", text: "第四级文件1" }, + { id: 3, pId: -1, value: "第一级目录3", text: "第一级目录3" }, + { id: 31, pId: 3, value: "第二级文件2", text: "第二级文件2" }, + { id: 33, pId: 3, value: "第二级目录3", text: "第二级目录1" }, + { id: 32, pId: 3, value: "第二级文件3", text: "第二级文件3" }, + { id: 331, pId: 33, value: "第三级文件1", text: "第三级文件1" } ]; this.tree.populate(tree); } }); -BI.shortcut("demo.multilayer_single_level_tree", Demo.MultiLayerSingleLevelTree); \ No newline at end of file +BI.shortcut("demo.multilayer_single_level_tree", Demo.MultiLayerSingleLevelTree); diff --git a/src/case/button/node/siwtcher.tree.node.js b/src/case/button/node/siwtcher.tree.node.js new file mode 100644 index 000000000..c118518d6 --- /dev/null +++ b/src/case/button/node/siwtcher.tree.node.js @@ -0,0 +1,59 @@ +BI.TreeNodeSwitcher = BI.inherit(BI.NodeButton, { + _defaultConfig: function () { + return BI.extend(BI.TreeNodeSwitcher.superclass._defaultConfig.apply(this, arguments), { + baseCls: "bi-tree-node-switcher", + iconWidth: 24, + iconHeight: 24, + isFirstNode: false, + isLastNode: false, + layer: 0 + }); + }, + + render: function () { + + const [collapse, expand] = this.getIconCls(); + + return { + type: "bi.icon_label", + iconWidth: this.options.iconWidth, + iconHeight: this.options.iconHeight, + cls: this.options.open ? expand : collapse, + }; + }, + + getIconCls: function () { + var options = this.options; + if (options.layer === 0 && options.isFirstNode && options.isLastNode) { + // 只有一层,并且是第一个节点,并且是最后一个节点 + return BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? ["tree-solid-collapse-icon-type1", "tree-solid-expand-icon-type1"] : ["tree-collapse-icon-type1", "tree-expand-icon-type1"]; + } else if (options.layer === 0 && options.isFirstNode) { + // 第一层,并且是第一个节点 + return BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? ["tree-solid-collapse-icon-type2", "tree-solid-expand-icon-type2"] : ["tree-collapse-icon-type2", "tree-expand-icon-type2"]; + } else if (options.isLastNode) { + // 最后一个节点 + return BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? ["tree-solid-collapse-icon-type4", "tree-solid-expand-icon-type4"] : ["tree-collapse-icon-type4", "tree-expand-icon-type4"]; + } else { + // 其他情况 + return BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? ["tree-solid-collapse-icon-type3", "tree-solid-expand-icon-type3"] : ["tree-collapse-icon-type3", "tree-expand-icon-type3"]; + } + }, + + setOpened: function (b) { + BI.TreeNodeSwitcher.superclass.setOpened.apply(this, arguments); + const [collapse, expand] = this.getIconCls(); + if (b) { + this.element.addClass(expand).removeClass(collapse); + } else { + this.element.addClass(collapse).removeClass(expand); + } + }, + + doClick: function () { + BI.TreeNodeSwitcher.superclass.doClick.apply(this, arguments); + this.fireEvent(BI.TreeNodeSwitcher.EVENT_CHANGE, this); + } +}); + +BI.TreeNodeSwitcher.EVENT_CHANGE = "EVENT_CHANGE"; +BI.shortcut("bi.tree_node_switcher", BI.TreeNodeSwitcher); diff --git a/src/case/button/node/treenode.js b/src/case/button/node/treenode.js new file mode 100644 index 000000000..c557f791c --- /dev/null +++ b/src/case/button/node/treenode.js @@ -0,0 +1,106 @@ +BI.BasicTreeNode = BI.inherit(BI.NodeButton, { + _defaultConfig: function (props) { + var conf = BI.BasicTreeNode.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { + baseCls: (conf.baseCls || "") + " bi-tree-node " + (props.selectable ? "bi-list-item-active" : "bi-list-item"), + id: "", + pId: "", + open: false, + height: 24, + readonly: true, + isFirstNode: false, + isLastNode: false, + switcherIcon: {}, + selectable: true, + disabled: false, // disabled不会影响展开收起功能 + }); + }, + + render: function () { + var self = this, o = this.options; + + const checkbox = { + type: "bi.tree_node_switcher", + __ref: function (_ref) { + self.switcher = _ref; + }, + iconHeight: o.height, + iconWidth: o.iconWrapperWidth || o.height, + open: o.open, + isFirstNode: o.isFirstNode, + isLastNode: o.isLastNode, + layer: o.layer, + ...o.switcherIcon, + stopPropagation: o.selectable, + mounted: function () { + this.setEnable(true); + }, + listeners: [ + { + eventName: "EVENT_CHANGE", + action: () => { + if (!this.isEnabled() || o.selectable) { + this.isOpened() ? this.triggerCollapse() : this.triggerExpand(); + } + } + } + ] + }; + + return { + type: "bi.vertical_adapt", + columnSize: [o.iconWrapperWidth || o.height, "fill"], + items: [ + { + el: checkbox, + lgap: o.layer * BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT / 2, // 偏移公式为每一层的偏移量为节点高度的一半 + }, { + el: { + type: "bi.label", + ref: function (_ref) { + self.text = _ref; + }, + textAlign: "left", + whiteSpace: "nowrap", + textHeight: o.height, + height: o.height, + hgap: o.hgap || o.textHgap, + vgap: o.textVgap, + lgap: o.textLgap, + rgap: o.textRgap, + text: o.text, + value: o.value, + keyword: o.keyword, + py: o.py + } + } + ] + }; + }, + + doRedMark: function () { + this.text.doRedMark.apply(this.text, arguments); + }, + + unRedMark: function () { + this.text.unRedMark.apply(this.text, arguments); + }, + + doClick: function () { + if (this.options.selectable) { + return; + } + BI.BasicTreeNode.superclass.doClick.apply(this, arguments); + }, + + setOpened: function (v) { + BI.BasicTreeNode.superclass.setOpened.apply(this, arguments); + this.switcher.setOpened(v); + }, + + setValue: function () { + BI.BasicTreeNode.superclass.setValue.apply(this, arguments); + } +}); + +BI.shortcut("bi.tree_node", BI.BasicTreeNode); diff --git a/src/case/button/treeitem/treeitem.js b/src/case/button/treeitem/treeitem.js new file mode 100644 index 000000000..b7858459f --- /dev/null +++ b/src/case/button/treeitem/treeitem.js @@ -0,0 +1,90 @@ +BI.BasicTreeItem = BI.inherit(BI.NodeButton, { + _defaultConfig: function () { + var conf = BI.BasicTreeItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { + baseCls: (conf.baseCls || "") + " bi-tree-item bi-list-item-active", + id: "", + pId: "", + height: 24, + readonly: true, + isFirstNode: false, + isLastNode: false, + switcherIcon: {}, + selectable: true, + disabled: false, // disabled不会影响展开收起功能 + }); + }, + + render: function () { + var self = this, o = this.options; + + return { + type: "bi.vertical_adapt", + columnSize: ["", "fill"], + items: [ + { + el: { + type: "bi.layout", + width: 24, + height: o.height, + width: o.height, + cls: this.getLineCls(), + }, + lgap: o.layer * BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT / 2, // 偏移公式为每一层的偏移量为节点高度的一半 + }, + { + el: { + type: "bi.label", + ref: function (_ref) { + self.text = _ref; + }, + textAlign: "left", + whiteSpace: "nowrap", + textHeight: o.height, + height: o.height, + hgap: o.hgap || o.textHgap, + vgap: o.textVgap, + lgap: o.textLgap, + rgap: o.textRgap, + text: o.text, + value: o.value, + keyword: o.keyword, + py: o.py + }, + } + ] + }; + }, + + getLineCls: function () { + var options = this.options; + if (options.layer === 0 && options.isFirstNode && options.isLastNode) { + return ""; + } else if (options.layer === 0 && options.isFirstNode) { + return BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? "first-solid-line-conn-background" : "first-line-conn-background"; + } else if (options.isLastNode) { + return BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? "last-solid-line-conn-background" : "last-line-conn-background"; + } else { + return BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? "mid-solid-line-conn-background" : "mid-line-conn-background"; + } + }, + + doRedMark: function () { + this.text.doRedMark.apply(this.text, arguments); + }, + + unRedMark: function () { + this.text.unRedMark.apply(this.text, arguments); + }, + + getId: function () { + return this.options.id; + }, + + getPId: function () { + return this.options.pId; + } + +}); + +BI.shortcut("bi.tree_item", BI.BasicTreeItem); diff --git a/src/case/tree/tree.level.js b/src/case/tree/tree.level.js index baac6a94c..81609217e 100644 --- a/src/case/tree/tree.level.js +++ b/src/case/tree/tree.level.js @@ -26,33 +26,24 @@ BI.LevelTree = BI.inherit(BI.Widget, { _formatItems: function (nodes, layer, pNode) { var self = this; BI.each(nodes, function (i, node) { - var extend = { layer: layer, height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT }; + var extend = { + layer: layer, + height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, + isFirstNode: i === 0, + isLastNode: i === nodes.length - 1, + }; if (!BI.isKey(node.id)) { node.id = BI.UUID(); } extend.pNode = pNode; if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) { - extend.type = "bi.mid_plus_group_node"; - if (i === nodes.length - 1) { - extend.type = "bi.last_plus_group_node"; - extend.isLastNode = true; - } - if (i === 0 && !pNode) { - extend.type = "bi.first_plus_group_node"; - } - if (i === 0 && i === nodes.length - 1) { // 根 - extend.type = "bi.plus_group_node"; - } + extend.type = "bi.tree_node"; + extend.selectable = false; + BI.defaults(node, extend); self._formatItems(node.children, layer + 1, node); } else { - extend.type = "bi.mid_tree_leaf_item"; - if (i === 0 && !pNode) { - extend.type = "bi.first_tree_leaf_item"; - } - if (i === nodes.length - 1) { - extend.type = "bi.last_tree_leaf_item"; - } + extend.type = "bi.tree_item"; BI.defaults(node, extend); } }); @@ -76,12 +67,14 @@ BI.LevelTree = BI.inherit(BI.Widget, { type: "bi.custom_tree", element: this, expander: BI.extend({ + type: "bi.tree_expander", el: {}, + isDefaultInit: false, + selectable: false, popup: { type: "bi.custom_tree" } }, o.expander), - items: this._formatItems(BI.Tree.transformToTreeFormat(nodes), 0), value: o.value, @@ -97,6 +90,7 @@ BI.LevelTree = BI.inherit(BI.Widget, { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); if (type === BI.Events.CLICK) { self.fireEvent(BI.LevelTree.EVENT_CHANGE, value, ob); + self.setValue(value); } }); }, diff --git a/src/case/tree/treeexpander/tree.expander.js b/src/case/tree/treeexpander/tree.expander.js index 88f5dbf50..36675ecca 100644 --- a/src/case/tree/treeexpander/tree.expander.js +++ b/src/case/tree/treeexpander/tree.expander.js @@ -59,7 +59,8 @@ getValue: function () { if (this.trigger.isSelected()) { - return [this.trigger.getValue()]; + var value = this.trigger.getValue(); + return BI.isArray(value) ? value : [value]; } return this.expander.getValue(); }, diff --git a/src/case/tree/treeexpander/tree.expander.popup.js b/src/case/tree/treeexpander/tree.expander.popup.js index 96f9fe259..edaad6c91 100644 --- a/src/case/tree/treeexpander/tree.expander.popup.js +++ b/src/case/tree/treeexpander/tree.expander.popup.js @@ -40,11 +40,11 @@ }, getValue: function () { - return this.popupview.getValue(); + return this.popupView.getValue(); }, populate: function (items) { - this.popupview.populate(items); + this.popupView.populate(items); }, getAllLeaves: function () { diff --git a/src/widget/multilayerselecttree/multilayerselecttree.leveltree.js b/src/widget/multilayerselecttree/multilayerselecttree.leveltree.js index 02209b0d2..9072c3284 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.leveltree.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.leveltree.js @@ -44,30 +44,12 @@ BI.MultiLayerSelectLevelTree = BI.inherit(BI.Pane, { node.keyword = node.keyword || keyword; extend.pNode = pNode; if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) { - - if (layer === 0 && extend.isFirstNode && extend.isLastNode) { - extend.type = "bi.multilayer_select_tree_plus_group_node"; - } else if (layer === 0 && extend.isFirstNode) { - extend.type = "bi.multilayer_select_tree_first_plus_group_node"; - } else if (extend.isLastNode) { - extend.type = "bi.multilayer_select_tree_last_plus_group_node"; - } else { - extend.type = "bi.multilayer_select_tree_mid_plus_group_node"; - } - + extend.type = "bi.tree_node"; + extend.selectable = true; BI.defaults(node, extend); self._formatItems(node.children, layer + 1, node); } else { - - if (layer === 0 && extend.isFirstNode && extend.isLastNode) { - extend.type = "bi.root_tree_leaf_item"; - } else if (layer === 0 && extend.isFirstNode) { - extend.type = "bi.multilayer_single_tree_first_tree_leaf_item"; - } else if (extend.isLastNode) { - extend.type = "bi.multilayer_single_tree_last_tree_leaf_item"; - } else { - extend.type = "bi.multilayer_single_tree_mid_tree_leaf_item"; - } + extend.type = "bi.tree_item"; BI.defaults(node, extend); } }); diff --git a/src/widget/multilayersingletree/multilayersingletree.leveltree.js b/src/widget/multilayersingletree/multilayersingletree.leveltree.js index 186e2e0ae..8e14aa749 100644 --- a/src/widget/multilayersingletree/multilayersingletree.leveltree.js +++ b/src/widget/multilayersingletree/multilayersingletree.leveltree.js @@ -44,31 +44,12 @@ BI.MultiLayerSingleLevelTree = BI.inherit(BI.Pane, { node.keyword = node.keyword || keyword; extend.pNode = pNode; if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) { - - if (layer === 0 && extend.isFirstNode && extend.isLastNode) { - extend.type = "bi.multilayer_single_tree_plus_group_node"; - } else if (layer === 0 && extend.isFirstNode) { - extend.type = "bi.multilayer_single_tree_first_plus_group_node"; - } else if (extend.isLastNode) { - extend.type = "bi.multilayer_single_tree_last_plus_group_node"; - } else { - extend.type = "bi.multilayer_single_tree_mid_plus_group_node"; - } - + extend.type = "bi.tree_node"; + extend.selectable = false; BI.defaults(node, extend); self._formatItems(node.children, layer + 1, node); } else { - - if (layer === 0 && extend.isFirstNode && extend.isLastNode) { - extend.type = "bi.root_tree_leaf_item"; - } else if (layer === 0 && extend.isFirstNode) { - extend.type = "bi.multilayer_single_tree_first_tree_leaf_item"; - } else if (extend.isLastNode) { - extend.type = "bi.multilayer_single_tree_last_tree_leaf_item"; - } else { - extend.type = "bi.multilayer_single_tree_mid_tree_leaf_item"; - } - + extend.type = "bi.tree_item"; BI.defaults(node, extend); } }); diff --git a/src/widget/selecttree/selecttree.popup.js b/src/widget/selecttree/selecttree.popup.js index 1bd69a6cb..08b22de9f 100644 --- a/src/widget/selecttree/selecttree.popup.js +++ b/src/widget/selecttree/selecttree.popup.js @@ -17,32 +17,40 @@ BI.SelectTreePopup = BI.inherit(BI.Pane, { _formatItems: function (nodes, layer, pNode) { var self = this; BI.each(nodes, function (i, node) { - var extend = {layer: layer}; + var extend = { + layer: layer, + isFirstNode: i === 0, + isLastNode: i === nodes.length - 1, + height: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, + pNode: pNode, + }; node.id = node.id || BI.UUID(); - extend.pNode = pNode; - extend.height = BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT; + if (node.isParent === true || node.parent === true || BI.isNotEmptyArray(node.children)) { - extend.type = "bi.select_tree_mid_plus_group_node"; - if (i === nodes.length - 1) { - extend.type = "bi.select_tree_last_plus_group_node"; - extend.isLastNode = true; - } - if (i === 0 && !pNode) { - extend.type = "bi.select_tree_first_plus_group_node" - } - if (i === 0 && i === nodes.length - 1) { // 根 - extend.type = "bi.select_tree_plus_group_node"; - } + + extend.type = "bi.tree_node"; + extend.selectable = true; + // if (i === nodes.length - 1) { + // extend.type = "bi.select_tree_last_plus_group_node"; + // extend.isLastNode = true; + // } + // if (i === 0 && !pNode) { + // extend.type = "bi.select_tree_first_plus_group_node"; + // } + // if (i === 0 && i === nodes.length - 1) { // 根 + // extend.type = "bi.select_tree_plus_group_node"; + // } BI.defaults(node, extend); self._formatItems(node.children, layer + 1, node); } else { - extend.type = "bi.mid_tree_leaf_item"; - if (i === 0 && !pNode) { - extend.type = "bi.first_tree_leaf_item" - } - if (i === nodes.length - 1) { - extend.type = "bi.last_tree_leaf_item"; - } + extend.type = "bi.tree_item"; + // extend.type = "bi.mid_tree_leaf_item"; + // if (i === 0 && !pNode) { + // extend.type = "bi.first_tree_leaf_item"; + // } + // if (i === nodes.length - 1) { + // extend.type = "bi.last_tree_leaf_item"; + // } BI.defaults(node, extend); } }); @@ -57,8 +65,9 @@ BI.SelectTreePopup = BI.inherit(BI.Pane, { this.tree = BI.createWidget({ type: "bi.level_tree", expander: { - type: "bi.select_tree_expander", - isDefaultInit: true + type: "bi.tree_expander", + // isDefaultInit: true, + selectable: true, }, items: this._formatItems(BI.Tree.transformToTreeFormat(o.items), 0), value: o.value, @@ -99,4 +108,4 @@ BI.SelectTreePopup = BI.inherit(BI.Pane, { }); BI.SelectTreePopup.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.select_level_tree", BI.SelectTreePopup); \ No newline at end of file +BI.shortcut("bi.select_level_tree", BI.SelectTreePopup); From 6b96ebdc6218ddab235081df05ddcd9174264426 Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 5 Aug 2022 10:40:27 +0800 Subject: [PATCH 062/161] =?UTF-8?q?KERNEL-10683=20&&=20DESIGN-4160=20feat:?= =?UTF-8?q?=20=E6=95=B4=E7=90=86=E7=AE=80=E5=8C=96FIneUI=E6=A0=91=E6=8E=A7?= =?UTF-8?q?=E4=BB=B6=E7=9A=84node=E5=92=8Citem,=E5=90=8C=E6=97=B6=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=88=B6=E8=8A=82=E7=82=B9=E4=B8=8D=E5=8F=AF=E9=80=89?= =?UTF-8?q?=E4=B8=AD=E4=BD=86=E5=8F=AF=E4=BB=A5=E5=B1=95=E5=BC=80=E6=94=B6?= =?UTF-8?q?=E8=B5=B7=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widget/selecttree/selecttree.popup.js | 17 ----------------- 1 file changed, 17 deletions(-) diff --git a/src/widget/selecttree/selecttree.popup.js b/src/widget/selecttree/selecttree.popup.js index 08b22de9f..cfce060ef 100644 --- a/src/widget/selecttree/selecttree.popup.js +++ b/src/widget/selecttree/selecttree.popup.js @@ -30,27 +30,10 @@ BI.SelectTreePopup = BI.inherit(BI.Pane, { extend.type = "bi.tree_node"; extend.selectable = true; - // if (i === nodes.length - 1) { - // extend.type = "bi.select_tree_last_plus_group_node"; - // extend.isLastNode = true; - // } - // if (i === 0 && !pNode) { - // extend.type = "bi.select_tree_first_plus_group_node"; - // } - // if (i === 0 && i === nodes.length - 1) { // 根 - // extend.type = "bi.select_tree_plus_group_node"; - // } BI.defaults(node, extend); self._formatItems(node.children, layer + 1, node); } else { extend.type = "bi.tree_item"; - // extend.type = "bi.mid_tree_leaf_item"; - // if (i === 0 && !pNode) { - // extend.type = "bi.first_tree_leaf_item"; - // } - // if (i === nodes.length - 1) { - // extend.type = "bi.last_tree_leaf_item"; - // } BI.defaults(node, extend); } }); From c00d37f60a16d1c1bf955d14033239f7d97b519a Mon Sep 17 00:00:00 2001 From: data Date: Fri, 5 Aug 2022 15:24:13 +0800 Subject: [PATCH 063/161] auto upgrade version to 2.0.20220805152359 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d01b7bf78..34c34aa6a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220805101538", + "version": "2.0.20220805152359", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 8fa9d6b1f5d42de13e554b8415021c92d576d99a Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 5 Aug 2022 17:15:56 +0800 Subject: [PATCH 064/161] =?UTF-8?q?KERNEL-12341=20fix:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A0=91=E6=8E=A7=E4=BB=B6=E6=90=9C=E7=B4=A2=E9=A1=BA?= =?UTF-8?q?=E5=BA=8F=E4=B8=8E=E6=AD=A3=E5=B8=B8=E7=8A=B6=E6=80=81=E4=BF=9D?= =?UTF-8?q?=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 搜索遍历是广度优先的,因此queue要先reverse一下 --- src/widget/multilayerselecttree/multilayerselecttree.trigger.js | 1 + src/widget/multilayersingletree/multilayersingletree.trigger.js | 1 + 2 files changed, 2 insertions(+) diff --git a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js index f59ab6251..179aeeec2 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js @@ -161,6 +161,7 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { result.push(node); result = result.concat(self._getChildren(node)); }); + queue.reverse(); while (BI.isNotEmptyArray(queue)) { var node = queue.pop(); var pNode = this.tree.search(this.tree.getRoot(), node.pId, "id"); diff --git a/src/widget/multilayersingletree/multilayersingletree.trigger.js b/src/widget/multilayersingletree/multilayersingletree.trigger.js index 8c58b0c8c..e00394a38 100644 --- a/src/widget/multilayersingletree/multilayersingletree.trigger.js +++ b/src/widget/multilayersingletree/multilayersingletree.trigger.js @@ -170,6 +170,7 @@ BI.MultiLayerSingleTreeTrigger = BI.inherit(BI.Trigger, { result.push(node); result = result.concat(self._getChildren(node)); }); + queue.reverse(); while (BI.isNotEmptyArray(queue)) { var node = queue.pop(); var pNode = this.tree.search(this.tree.getRoot(), node.pId, "id"); From 1163be274a9522d4096e4c800142dcb56930932f Mon Sep 17 00:00:00 2001 From: data Date: Fri, 5 Aug 2022 20:35:23 +0800 Subject: [PATCH 065/161] auto upgrade version to 2.0.20220805203516 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 34c34aa6a..e4bc9dc55 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220805152359", + "version": "2.0.20220805203516", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From c829658a1ec06e03e9aaa2b3f153fde6a1cb0906 Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 8 Aug 2022 14:06:32 +0800 Subject: [PATCH 066/161] =?UTF-8?q?JSY-20326=20fix:=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E9=97=AE=E9=A2=98=E3=80=91=E5=B8=A6=E6=B8=85=E9=99=A4?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=9A=84=E5=8D=95=E9=80=89=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86=EF=BC=8C=E6=B8=85=E9=99=A4=E5=90=8E=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=88=B0=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/case/combo/demo.text_value_combo.js | 196 +++++++++++++----- .../combo/textvaluecombo/combo.textvalue.js | 7 +- src/case/trigger/trigger.text.js | 38 +++- src/case/trigger/trigger.text.select.js | 24 ++- 4 files changed, 203 insertions(+), 62 deletions(-) diff --git a/demo/js/case/combo/demo.text_value_combo.js b/demo/js/case/combo/demo.text_value_combo.js index 9e2c0d6f3..77414af38 100644 --- a/demo/js/case/combo/demo.text_value_combo.js +++ b/demo/js/case/combo/demo.text_value_combo.js @@ -7,57 +7,159 @@ Demo.TextValueCombo = BI.inherit(BI.Widget, { }, render: function () { var combo, wrapper; + + var items = [{ + text: "MVC-1", + iconCls: "date-font", + value: 1 + }, { + text: "MVC-2", + iconCls: "search-font", + value: 2 + }, { + text: "MVC-3", + iconCls: "pull-right-font", + value: 3 + }]; + + // 创建下拉框各种场景用例 return { - type: "bi.button_group", - items: [{ - type: "bi.text_value_combo", - ref: function () { - combo = this; - }, - text: "默认值", - value: 22, - width: 300, - items: [{ - text: "MVC-1", - iconCls: "date-font", - value: 1 - }, { - text: "MVC-2", - iconCls: "search-font", - value: 2 + type: "bi.vertical", + vgap: 20, + hgap: 20, + items: [ + this.createCombo("无初始值,带提示文字", { + type: "bi.text_value_combo", + ref: function () { + combo = this; + }, + defaultText: "请选择", + width: 300, + items: items, + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }), + this.createCombo("自动根据value匹配text", { + type: "bi.text_value_combo", + ref: function () { + combo = this; + }, + defaultText: "请选择", + width: 300, + value: 1, + items: items, + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }), + this.createCombo("无初始值,可以清空", { + type: "bi.text_value_combo", + ref: function () { + combo = this; + }, + defaultText: "请选择", + width: 300, + items: items, + allowClear: true, + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }), + this.createCombo("有初始值,可以清空", { + type: "bi.text_value_combo", + ref: function () { + combo = this; + }, + defaultText: "请选择", + width: 300, + value: 1, + items: items, + allowClear: true, + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }), + this.createCombo("有初始值,value不匹配,自动标红,可以清空", { + type: "bi.text_value_combo", + ref: function () { + combo = this; + }, + defaultText: "请选择", + width: 300, + value: 111, + items: items, + allowClear: true, + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }), + this.createCombo("有初始值,value不匹配,自动标红,指定标红文字", { + type: "bi.text_value_combo", + ref: function () { + combo = this; + }, + width: 300, + text: "MVC-111", + value: 111, + items: items, + allowClear: true, + defaultText: "df", + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }) + ] + }; + }, + + createCombo: function (text, combo) { + return { + type: "bi.vertical", + items: [ + { + el: { + type: "bi.label", + textAlign: "left", + text, + }, + bgap: 10 }, { - text: "MVC-3", - iconCls: "pull-right-font", - value: 3 - }] - }, { - type: "bi.search_multi_text_value_combo", - items: Demo.CONSTANTS.ITEMS, - width: 200, - value: { - type: 1, - value: ["1", "2", "3"] - } - }, { - type: "bi.button", - width: 90, - height: 25, - handler: function () { - wrapper.populate(); + el: combo } - }, { - type: 'bi.label', - height: 1000 - }], - ref: function () { - wrapper = this; - }, - layouts: [{ - type: "bi.vertical", - vgap: 20 - }] + ] }; } }); -BI.shortcut("demo.text_value_combo", Demo.TextValueCombo); \ No newline at end of file +BI.shortcut("demo.text_value_combo", Demo.TextValueCombo); diff --git a/src/case/combo/textvaluecombo/combo.textvalue.js b/src/case/combo/textvaluecombo/combo.textvalue.js index 633656464..e29d6c094 100644 --- a/src/case/combo/textvaluecombo/combo.textvalue.js +++ b/src/case/combo/textvaluecombo/combo.textvalue.js @@ -12,6 +12,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, text: "", value: "", + defaultText: "", allowClear: false, }); }, @@ -36,6 +37,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { value: o.value, warningTitle: o.warningTitle, allowClear: o.allowClear, + defaultText: o.defaultText, listeners: [ { eventName: BI.SelectTextTrigger.EVENT_CLEAR, @@ -79,7 +81,10 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { }, _clear: function () { - this.setValue(); + this.trigger.setValue(); + this.popup.setValue(); + this.element.removeClass("error"); + this.trigger.element.removeClass("error"); }, _checkError: function (v) { diff --git a/src/case/trigger/trigger.text.js b/src/case/trigger/trigger.text.js index 8acee1c78..fe72fde60 100644 --- a/src/case/trigger/trigger.text.js +++ b/src/case/trigger/trigger.text.js @@ -17,21 +17,28 @@ BI.TextTrigger = BI.inherit(BI.Trigger, { allowClear: false, title: function () { return self.text.getText(); - } + }, + defaultText: "", + text: "", }; }, render: function () { var self = this, o = this.options, c = this._const; - var text = { + + var text = this.getText(); + + var defaultText = this.getDefaultText(); + + var label = { type: "bi.label", ref: function (_ref) { self.text = _ref; }, - cls: "select-text-label" + (BI.isKey(o.textCls) ? (" " + o.textCls) : ""), + cls: `select-text-label ${o.textCls} ${!BI.isNotEmptyString(text) && BI.isNotEmptyString(defaultText) ? "bi-tips" : ""}`, textAlign: "left", height: o.height, - text: o.text, + text: text || o.defaultText, tipType: o.tipType, warningTitle: o.warningTitle, hgap: o.textHgap, @@ -56,7 +63,7 @@ BI.TextTrigger = BI.inherit(BI.Trigger, { columnSize: ["fill", o.triggerWidth || o.height], items: [ { - el: text, + el: label, width: "fill" }, { el: o.allowClear ? { @@ -89,6 +96,16 @@ BI.TextTrigger = BI.inherit(BI.Trigger, { }); }, + getText: function () { + var o = this.options; + return BI.isFunction(o.text) ? o.text() : o.text; + }, + + getDefaultText: function () { + var o = this.options; + return BI.isFunction(o.defaultText) ? o.defaultText() : o.defaultText; + }, + getTextor: function () { return this.text; }, @@ -101,10 +118,19 @@ BI.TextTrigger = BI.inherit(BI.Trigger, { }, setText: function (text) { - this.text.setText(text); if (this.options.allowClear) { this.clearBtn.setVisible(BI.isNotEmptyString(text)); } + if (BI.isKey(text)) { + this.text.setText(text); + this.text.element.removeClass("bi-tips"); + } else if (BI.isKey(this.options.defaultText)) { + this.text.setText(this.options.defaultText); + this.text.element.addClass("bi-tips"); + } else { + this.text.setText(""); + this.text.element.removeClass("bi-tips"); + } }, setTipType: function (v) { diff --git a/src/case/trigger/trigger.text.select.js b/src/case/trigger/trigger.text.select.js index 4ec177764..1a74e7130 100644 --- a/src/case/trigger/trigger.text.select.js +++ b/src/case/trigger/trigger.text.select.js @@ -13,6 +13,7 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { height: 24, allowClear: false, valueFormatter: BI.emptyFn, + defaultText: "", }); }, @@ -26,6 +27,7 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { height: o.height, readonly: o.readonly, text: obj.text, + defaultText: o.defaultText, textCls: obj.textCls, textHgap: o.textHgap, textVgap: o.textVgap, @@ -48,13 +50,13 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { }); }, - _digest: function (vals, items) { + _digest: function (val, items) { var o = this.options; - vals = BI.isArray(vals) ? vals : [vals]; + val = BI.isArray(val) ? val[0] : val; var result = []; var formatItems = BI.Tree.transformToArrayFormat(items); BI.each(formatItems, function (i, item) { - if (BI.deepContains(vals, item.value) && !BI.contains(result, item.text || item.value)) { + if (val === item.value && !BI.contains(result, item.text || item.value)) { result.push(item.text || item.value); } }); @@ -62,12 +64,18 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { if (result.length > 0) { return { textCls: "", - text: o.valueFormatter(vals[0]) || result.join(","), // 只保留单个value的场景,后续会把BI.isArray(vals) ? vals : [vals];这种都去掉 + text: o.valueFormatter(val) || result.join(","), }; } else { + var text = BI.isFunction(o.text) ? o.text() : o.text; + if (BI.isEmptyString(text)) { + return { + textCls: "bi-tips", + text: "" + }; + } return { - textCls: "bi-water-mark", - text: BI.isFunction(o.text) ? o.text() : o.text + text: o.text }; } }, @@ -77,8 +85,8 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { this.trigger.setText(text); }, - setValue: function (vals) { - var formatValue = this._digest(vals, this.options.items); + setValue: function (val) { + var formatValue = this._digest(val, this.options.items); this.trigger.setTextCls(formatValue.textCls); this.trigger.setText(formatValue.text); }, From a99e4d759d05f82ae6c98fe68382695ecfde758b Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 8 Aug 2022 14:12:17 +0800 Subject: [PATCH 067/161] =?UTF-8?q?JSY-20326=20fix:=20=E3=80=90=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E9=97=AE=E9=A2=98=E3=80=91=E5=B8=A6=E6=B8=85=E9=99=A4?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=9A=84=E5=8D=95=E9=80=89=E4=B8=8B=E6=8B=89?= =?UTF-8?q?=E6=A1=86=EF=BC=8C=E6=B8=85=E9=99=A4=E5=90=8E=E9=9C=80=E8=A6=81?= =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=88=B0=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/widget/singletree/demo.single_tree_combo.js | 4 ++-- src/widget/singletree/singletree.combo.js | 1 + src/widget/singletree/singletree.trigger.js | 1 + 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/demo/js/widget/singletree/demo.single_tree_combo.js b/demo/js/widget/singletree/demo.single_tree_combo.js index 087b28888..d3c94508e 100644 --- a/demo/js/widget/singletree/demo.single_tree_combo.js +++ b/demo/js/widget/singletree/demo.single_tree_combo.js @@ -16,7 +16,7 @@ Demo.SingleTreeCombo = BI.inherit(BI.Widget, { ref: function (_ref) { self.tree = _ref; }, - text: "默认值", + defaultText: "请选择", items: items, width: 300, value: "11" @@ -40,4 +40,4 @@ Demo.SingleTreeCombo = BI.inherit(BI.Widget, { } }); -BI.shortcut("demo.single_tree_combo", Demo.SingleTreeCombo); \ No newline at end of file +BI.shortcut("demo.single_tree_combo", Demo.SingleTreeCombo); diff --git a/src/widget/singletree/singletree.combo.js b/src/widget/singletree/singletree.combo.js index ad6b85268..c42392db8 100644 --- a/src/widget/singletree/singletree.combo.js +++ b/src/widget/singletree/singletree.combo.js @@ -25,6 +25,7 @@ BI.SingleTreeCombo = BI.inherit(BI.Widget, { this.trigger = BI.createWidget(BI.extend({ type: "bi.single_tree_trigger", text: o.text, + defaultText: o.defaultText, height: o.height, items: o.items, value: o.value, diff --git a/src/widget/singletree/singletree.trigger.js b/src/widget/singletree/singletree.trigger.js index 8c5193d2d..221c8b069 100644 --- a/src/widget/singletree/singletree.trigger.js +++ b/src/widget/singletree/singletree.trigger.js @@ -26,6 +26,7 @@ BI.SingleTreeTrigger = BI.inherit(BI.Trigger, { type: "bi.select_text_trigger", element: this, text: o.text, + defaultText: o.defaultText, items: o.items, height: o.height, warningTitle: o.warningTitle, From fac7bc4b2dcd7ff67bec613a9b5edd1a490a4ef3 Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 8 Aug 2022 14:13:02 +0800 Subject: [PATCH 068/161] =?UTF-8?q?=E6=97=A0JIRA=20=E6=95=B4=E7=90=86?= =?UTF-8?q?=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/button/treeitem/treeitem.js | 4 ---- src/case/layer/pane.list.js | 1 + 2 files changed, 1 insertion(+), 4 deletions(-) diff --git a/src/case/button/treeitem/treeitem.js b/src/case/button/treeitem/treeitem.js index b7858459f..dd7e008f6 100644 --- a/src/case/button/treeitem/treeitem.js +++ b/src/case/button/treeitem/treeitem.js @@ -9,9 +9,6 @@ BI.BasicTreeItem = BI.inherit(BI.NodeButton, { readonly: true, isFirstNode: false, isLastNode: false, - switcherIcon: {}, - selectable: true, - disabled: false, // disabled不会影响展开收起功能 }); }, @@ -25,7 +22,6 @@ BI.BasicTreeItem = BI.inherit(BI.NodeButton, { { el: { type: "bi.layout", - width: 24, height: o.height, width: o.height, cls: this.getLineCls(), diff --git a/src/case/layer/pane.list.js b/src/case/layer/pane.list.js index 26be09624..d4b774d00 100644 --- a/src/case/layer/pane.list.js +++ b/src/case/layer/pane.list.js @@ -38,6 +38,7 @@ BI.ListPane = BI.inherit(BI.Pane, { chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, behaviors: {}, items: o.items, + value: o.value, itemsCreator: function (op, calback) { if (op.times === 1) { self.empty(); From 433df9b0bcf6d9f158ef909bfd4b480c9f558520 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 8 Aug 2022 21:36:18 +0800 Subject: [PATCH 069/161] auto upgrade version to 2.0.20220808213604 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e4bc9dc55..e27b40cbb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220805203516", + "version": "2.0.20220808213604", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From f332f498eaee1788ebd426cafe5271c3140937d6 Mon Sep 17 00:00:00 2001 From: zsmj Date: Tue, 9 Aug 2022 11:41:17 +0800 Subject: [PATCH 070/161] =?UTF-8?q?=E6=97=A0JIRA=20=E8=A7=A3=E5=86=B3Safar?= =?UTF-8?q?i=E4=B8=8Ainput=E5=92=8Ctextarea=E5=A1=AB=E5=85=85=E6=96=87?= =?UTF-8?q?=E5=AD=97=E9=A2=9C=E8=89=B2=E9=80=8F=E6=98=8E=E5=BA=A6=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/less/core/utils/common.less | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/less/core/utils/common.less b/src/less/core/utils/common.less index 036778c59..76a93b316 100644 --- a/src/less/core/utils/common.less +++ b/src/less/core/utils/common.less @@ -3,12 +3,17 @@ .base-disabled { cursor: not-allowed !important; color: @color-bi-text-disabled !important; + & .bi-input { color: @color-bi-text-disabled !important; + -webkit-text-fill-color: @color-bi-text-disabled; } + & .bi-textarea { color: @color-bi-text-disabled !important; + -webkit-text-fill-color: @color-bi-text-disabled; } + & .b-font:before { color: @color-bi-icon-disabled !important; } @@ -17,12 +22,17 @@ .bi-theme-dark { .base-disabled { color: @color-bi-text-disabled-theme-dark !important; + & .bi-input { color: @color-bi-text-disabled-theme-dark !important; + -webkit-text-fill-color: @color-bi-text-disabled-theme-dark; } + & .bi-textarea { color: @color-bi-text-disabled-theme-dark !important; + -webkit-text-fill-color: @color-bi-text-disabled-theme-dark; } + & .b-font:before { color: @color-bi-icon-disabled-theme-dark !important; } From 569a37edfbce2897a149179441847be5c853e8ae Mon Sep 17 00:00:00 2001 From: data Date: Tue, 9 Aug 2022 14:04:01 +0800 Subject: [PATCH 071/161] auto upgrade version to 2.0.20220809140353 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e27b40cbb..b56a39957 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220808213604", + "version": "2.0.20220809140353", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 6d0039c8ffebb941d930981cd67e3a7ef0b953c5 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 9 Aug 2022 14:14:05 +0800 Subject: [PATCH 072/161] auto upgrade version to 2.0.20220809141355 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b56a39957..084921680 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220809140353", + "version": "2.0.20220809141355", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 1e1007abcd742f09ed1298d5e56fa941e33dbf0d Mon Sep 17 00:00:00 2001 From: data Date: Tue, 9 Aug 2022 15:06:23 +0800 Subject: [PATCH 073/161] auto upgrade version to 2.0.20220809150613 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 084921680..b8a11fcd7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220809141355", + "version": "2.0.20220809150613", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From d192b160cc2c8bf5a9dcabb9a932eaf80adc75e9 Mon Sep 17 00:00:00 2001 From: iapyang Date: Tue, 9 Aug 2022 15:51:56 +0800 Subject: [PATCH 074/161] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0=E4=B8=8Bban?= =?UTF-8?q?ner?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webpack/webpack.prod.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webpack/webpack.prod.js b/webpack/webpack.prod.js index 89b7f18c8..a48a8c17f 100644 --- a/webpack/webpack.prod.js +++ b/webpack/webpack.prod.js @@ -73,7 +73,7 @@ module.exports = merge.smart(common, { }), new webpack.BannerPlugin({ banner: `time: ${new Date().toLocaleString()}; branch: ${git( - 'rev-parse --abbrev-ref HEAD' + 'name-rev --name-only HEAD' )} commit: ${git( 'rev-parse HEAD' )}` From 7508afdc023d45fb06b20435afce8f90090bdd5c Mon Sep 17 00:00:00 2001 From: data Date: Tue, 9 Aug 2022 16:24:46 +0800 Subject: [PATCH 075/161] auto upgrade version to 2.0.20220809162439 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b8a11fcd7..4c8e8d3ff 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220809150613", + "version": "2.0.20220809162439", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 20bd88b2e5a397d1b15a32ece61e03b2d59ec4db Mon Sep 17 00:00:00 2001 From: zsmj Date: Wed, 10 Aug 2022 14:40:14 +0800 Subject: [PATCH 076/161] =?UTF-8?q?KERNEL-10683=20feat:=20=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E4=B8=8D=E6=98=BE=E7=A4=BA=E8=BF=9E=E6=8E=A5=E7=BA=BF?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/tree/treeexpander/tree.expander.js | 2 ++ src/case/tree/treeexpander/tree.expander.popup.js | 10 +++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/case/tree/treeexpander/tree.expander.js b/src/case/tree/treeexpander/tree.expander.js index 36675ecca..8dde0807b 100644 --- a/src/case/tree/treeexpander/tree.expander.js +++ b/src/case/tree/treeexpander/tree.expander.js @@ -6,6 +6,7 @@ isLastNode: false, // 是不是最后一个 isFirstNode: false, // 是不是第一个 selectable: false, + showLine: true, }, render: function () { @@ -33,6 +34,7 @@ layer: o.layer || o.el.layer, isLastNode: o.isLastNode || o.el.isLastNode, isFirstNode: o.isFirstNode || o.el.isFirstNode, + showLine: o.showLine, el: o.popup, }, value: o.value, diff --git a/src/case/tree/treeexpander/tree.expander.popup.js b/src/case/tree/treeexpander/tree.expander.popup.js index edaad6c91..c3f53e40c 100644 --- a/src/case/tree/treeexpander/tree.expander.popup.js +++ b/src/case/tree/treeexpander/tree.expander.popup.js @@ -6,6 +6,7 @@ layer: 0, // 第几层级 el: {}, isLastNode: false, + showLine: true, }; }, @@ -22,12 +23,15 @@ this.popupView.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); - this.popupView.element.css("margin-left", -offset * (o.layer + 1)); - this.element.css("margin-left", offset * (o.layer + 1)); + + if (o.showLine) { + this.popupView.element.css("margin-left", -offset * (o.layer + 1)); + this.element.css("margin-left", offset * (o.layer + 1)); + } return { type: "bi.vertical", - cls: !o.isLastNode ? (BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? "line solid" : "line") : "", + cls: (o.showLine && !o.isLastNode) ? (BI.STYLE_CONSTANTS.LINK_LINE_TYPE === "solid" ? "line solid" : "line") : "", scrolly: null, items: [ this.popupView, From 6f3e59f087d9275fd9c36b596a01c8bf9bc4e72d Mon Sep 17 00:00:00 2001 From: data Date: Wed, 10 Aug 2022 15:25:55 +0800 Subject: [PATCH 077/161] auto upgrade version to 2.0.20220810152547 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c8e8d3ff..931a0218a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220809162439", + "version": "2.0.20220810152547", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From a2069f759f56cc3d546b30ac238520c8c13efe38 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 11 Aug 2022 16:00:03 +0800 Subject: [PATCH 078/161] =?UTF-8?q?REPORT-77722=20fix:=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Dtext=5Feditor=E7=9B=B4=E6=8E=A5=E4=BD=9C=E4=B8=BAroot?= =?UTF-8?q?=E7=9A=84=E6=97=B6=E5=80=99,isValid=E6=8A=A5=E9=94=99=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widget/editor/editor.text.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/widget/editor/editor.text.js b/src/widget/editor/editor.text.js index e50e153ae..02644b044 100644 --- a/src/widget/editor/editor.text.js +++ b/src/widget/editor/editor.text.js @@ -23,8 +23,7 @@ BI.TextEditor = BI.inherit(BI.Widget, { }); }, - _init: function () { - BI.TextEditor.superclass._init.apply(this, arguments); + render: function () { var self = this, o = this.options; var border = o.simple ? 1 : 2; if (BI.isNumber(o.height)) { From 8928a50bea9830ddab08ad151e12e78a88c018de Mon Sep 17 00:00:00 2001 From: data Date: Thu, 11 Aug 2022 20:09:14 +0800 Subject: [PATCH 079/161] auto upgrade version to 2.0.20220811200900 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 931a0218a..e86d78d91 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220810152547", + "version": "2.0.20220811200900", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From b3049e16d02963dbf5d98a05348a50638f623f0c Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 11 Aug 2022 20:32:05 +0800 Subject: [PATCH 080/161] =?UTF-8?q?KERNEL-11286=20feat:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A1=86value,text,defaultText=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E8=A7=84=E5=88=99=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../js/widget/selecttree/demo.multilayer_select_tree_combo.js | 4 ++-- .../js/widget/singletree/demo.multilayer_single_tree_combo.js | 4 ++-- src/widget/multilayersingletree/multilayersingletree.combo.js | 4 +++- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/demo/js/widget/selecttree/demo.multilayer_select_tree_combo.js b/demo/js/widget/selecttree/demo.multilayer_select_tree_combo.js index 645c28fcd..25ac4e518 100644 --- a/demo/js/widget/selecttree/demo.multilayer_select_tree_combo.js +++ b/demo/js/widget/selecttree/demo.multilayer_select_tree_combo.js @@ -16,7 +16,7 @@ Demo.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { ref: function (_ref) { self.tree = _ref; }, - text: "默认值", + defaultText: "请选择", items: items, width: 300, value: ["第五级文件1"] @@ -40,4 +40,4 @@ Demo.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { } }); -BI.shortcut("demo.multilayer_select_tree_combo", Demo.MultiLayerSelectTreeCombo); \ No newline at end of file +BI.shortcut("demo.multilayer_select_tree_combo", Demo.MultiLayerSelectTreeCombo); diff --git a/demo/js/widget/singletree/demo.multilayer_single_tree_combo.js b/demo/js/widget/singletree/demo.multilayer_single_tree_combo.js index 109d0c489..1a699c2ea 100644 --- a/demo/js/widget/singletree/demo.multilayer_single_tree_combo.js +++ b/demo/js/widget/singletree/demo.multilayer_single_tree_combo.js @@ -16,7 +16,7 @@ Demo.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { ref: function (_ref) { self.tree = _ref; }, - text: "默认值", + defaultText: "请选择", items: items, width: 300 }, { @@ -39,4 +39,4 @@ Demo.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { } }); -BI.shortcut("demo.multilayer_single_tree_combo", Demo.MultiLayerSingleTreeCombo); \ No newline at end of file +BI.shortcut("demo.multilayer_single_tree_combo", Demo.MultiLayerSingleTreeCombo); diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index fd606ccf7..c33e3d216 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -13,6 +13,7 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { isDefaultInit: false, height: 24, text: "", + defaultText: "", itemsCreator: BI.emptyFn, items: [], value: "", @@ -177,6 +178,7 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { self.textTrigger = _ref; }, text: o.text, + defaultText: o.defaultText, height: o.height, items: o.items, value: o.value, @@ -259,4 +261,4 @@ BI.MultiLayerSingleTreeCombo.EVENT_FOCUS = "EVENT_FOCUS"; BI.MultiLayerSingleTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiLayerSingleTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSingleTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; -BI.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo); \ No newline at end of file +BI.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo); From eb7b6feb612cb9aff1ad3c128f7a05f9b98ee9ed Mon Sep 17 00:00:00 2001 From: data Date: Fri, 12 Aug 2022 09:56:35 +0800 Subject: [PATCH 081/161] auto upgrade version to 2.0.20220812095620 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e86d78d91..435bd5356 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220811200900", + "version": "2.0.20220812095620", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 83dc71cc287895a2335ff99bb7932dc317a644b7 Mon Sep 17 00:00:00 2001 From: Kira Date: Fri, 12 Aug 2022 11:31:41 +0800 Subject: [PATCH 082/161] =?UTF-8?q?JSY-21565=20fix:=20popover=E6=8B=96?= =?UTF-8?q?=E6=8B=BD=E5=AE=9A=E4=BD=8D=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/layer/layer.popover.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/base/layer/layer.popover.js b/src/base/layer/layer.popover.js index bce738ef3..6b37e8033 100644 --- a/src/base/layer/layer.popover.js +++ b/src/base/layer/layer.popover.js @@ -159,9 +159,8 @@ BI.Popover = BI.inherit(BI.Widget, { var self = this; var o = this.options; this.dragger.element.mousedown(function (e) { - var pos = self.element.offset(); - self.startX = pos.left; - self.startY = pos.top; + self.startX = self.element[0].offsetLeft; + self.startY = self.element[0].offsetTop; self.tracker.captureMouseMoves(e); }); }, From 2bf92af2e7ded6a15251ab3c145c65867303e223 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Fri, 12 Aug 2022 11:40:21 +0800 Subject: [PATCH 083/161] =?UTF-8?q?chore:base=E4=B8=ADeslint=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 3 +- .../collection/__test__/collection.test.js | 3 +- src/base/collection/collection.js | 39 ++++++++++--------- src/base/foundation/__test__/message.test.js | 2 - src/base/tree/customtree.js | 6 ++- 5 files changed, 28 insertions(+), 25 deletions(-) diff --git a/.eslintrc b/.eslintrc index 12defcd8a..41426aa36 100644 --- a/.eslintrc +++ b/.eslintrc @@ -2,7 +2,8 @@ "env": { "browser": true, "node": true, - "es6": true + "es6": true, + "jest": true }, "globals": { "window": true, diff --git a/src/base/collection/__test__/collection.test.js b/src/base/collection/__test__/collection.test.js index 381735ac3..6ce44fc22 100644 --- a/src/base/collection/__test__/collection.test.js +++ b/src/base/collection/__test__/collection.test.js @@ -5,7 +5,6 @@ */ describe("CollectionTest", function () { - /** * test_author_windy */ @@ -35,4 +34,4 @@ describe("CollectionTest", function () { // TODO 列表展示类控件不知道该测什么,先标记一下 grid.destroy(); }); -}); \ No newline at end of file +}); diff --git a/src/base/collection/collection.js b/src/base/collection/collection.js index 8605e70c5..d28adebf1 100644 --- a/src/base/collection/collection.js +++ b/src/base/collection/collection.js @@ -58,7 +58,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { if (o.overflowY === false) { scrollable = false; } else { - scrollable = "y" + scrollable = "y"; } } else { if (o.overflowY === false) { @@ -84,7 +84,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { // mounted之后绑定事件 mounted: function () { - var o = this.options; + var o = this.options; if (o.scrollLeft !== 0 || o.scrollTop !== 0) { this.element.scrollTop(o.scrollTop); this.element.scrollLeft(o.scrollLeft); @@ -101,10 +101,10 @@ BI.CollectionView = BI.inherit(BI.Widget, { for (var index = 0, len = o.items.length; index < len; index++) { var cellMetadatum = o.cellSizeAndPositionGetter(index); - if (cellMetadatum.height == null || isNaN(cellMetadatum.height) || - cellMetadatum.width == null || isNaN(cellMetadatum.width) || - cellMetadatum.x == null || isNaN(cellMetadatum.x) || - cellMetadatum.y == null || isNaN(cellMetadatum.y)) { + if (cellMetadatum.height === null || isNaN(cellMetadatum.height) || + cellMetadatum.width === null || isNaN(cellMetadatum.width) || + cellMetadatum.x === null || isNaN(cellMetadatum.x) || + cellMetadatum.y === null || isNaN(cellMetadatum.y)) { throw Error(); } @@ -124,16 +124,18 @@ BI.CollectionView = BI.inherit(BI.Widget, { _cellRenderers: function (height, width, x, y) { this._lastRenderedCellIndices = this._sectionManager.getCellIndices(height, width, x, y); + return this._cellGroupRenderer(); }, _cellGroupRenderer: function () { - var self = this, o = this.options; + var self = this; var rendered = []; BI.each(this._lastRenderedCellIndices, function (i, index) { var cellMetadata = self._sectionManager.getCellMetadata(index); rendered.push(cellMetadata); }); + return rendered; }, @@ -167,16 +169,16 @@ BI.CollectionView = BI.inherit(BI.Widget, { var topMap = BI.invert(tops); // 存储上下左右四个边界 var leftBorder = {}, rightBorder = {}, topBorder = {}, bottomBorder = {}; - var assertMinBorder = function (border, offset) { - if (border[offset] == null) { + function assertMinBorder(border, offset) { + if (border[offset] === null) { border[offset] = Number.MAX_VALUE; } - }; - var assertMaxBorder = function (border, offset) { - if (border[offset] == null) { + } + function assertMaxBorder(border, offset) { + if (border[offset] === null) { border[offset] = 0; } - }; + } for (var i = 0, len = childrenToDisplay.length; i < len; i++) { var datum = childrenToDisplay[i]; var index = this.renderedKeys[datum.index] && this.renderedKeys[datum.index][1]; @@ -194,7 +196,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { this.renderedCells[index].el.element.css("left", datum.x / BI.pixRatio + BI.pixUnit); // } // if (this.renderedCells[index]._top !== datum.y) { - this.renderedCells[index].el.element.css("top", datum.y / BI.pixRatio + BI.pixUnit); + this.renderedCells[index].el.element.css("top", datum.y / BI.pixRatio + BI.pixUnit); // } renderedCells.push(child = this.renderedCells[index]); } else { @@ -213,7 +215,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { left: datum.x, top: datum.y, _left: datum.x, - _top: datum.y, + _top: datum.y // _width: datum.width, // _height: datum.height }); @@ -280,7 +282,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { var minY = BI.max(topBorder); var maxY = BI.min(bottomBorder); - this.renderRange = {minX: minX, minY: minY, maxX: maxX, maxY: maxY}; + this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY }; } }, @@ -308,6 +310,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { this.element.scrollTop(o.scrollTop); this.element.scrollLeft(o.scrollLeft); } catch (e) { + throw new Error("Failed in some way", { cause: e }); } this._calculateChildrenToRender(); }, @@ -339,7 +342,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { if (this.options.overflowX !== !!b) { this.options.overflowX = !!b; BI.nextTick(function () { - self.element.css({overflowX: b ? "auto" : "hidden"}); + self.element.css({ overflowX: b ? "auto" : "hidden" }); }); } }, @@ -349,7 +352,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { if (this.options.overflowY !== !!b) { this.options.overflowY = !!b; BI.nextTick(function () { - self.element.css({overflowY: b ? "auto" : "hidden"}); + self.element.css({ overflowY: b ? "auto" : "hidden" }); }); } }, diff --git a/src/base/foundation/__test__/message.test.js b/src/base/foundation/__test__/message.test.js index 7097c50ff..5e4890147 100644 --- a/src/base/foundation/__test__/message.test.js +++ b/src/base/foundation/__test__/message.test.js @@ -4,7 +4,6 @@ * Created by windy on 2020/3/9 */ describe("MessageTest", function () { - /** * test_author_windy */ @@ -44,4 +43,3 @@ describe("MessageTest", function () { expect(body.find(".bi-toast").length).to.equal(1); }); }); - diff --git a/src/base/tree/customtree.js b/src/base/tree/customtree.js index a72edba2a..fc7ce4736 100644 --- a/src/base/tree/customtree.js +++ b/src/base/tree/customtree.js @@ -47,7 +47,7 @@ BI.CustomTree = BI.inherit(BI.Widget, { el: { value: node.value }, - popup: {type: "bi.custom_tree"} + popup: { type: "bi.custom_tree" } }, BI.deepClone(o.expander), { id: node.id, pId: node.pId @@ -68,6 +68,7 @@ BI.CustomTree = BI.inherit(BI.Widget, { } var args = Array.prototype.slice.call(arguments, 0); args[0].node = node; + return o.itemsCreator.apply(self, args); }; BI.isNull(item.popup.el) && (item.popup.el = BI.deepClone(o.el)); @@ -76,6 +77,7 @@ BI.CustomTree = BI.inherit(BI.Widget, { items.push(node); } }); + return items; }, @@ -145,4 +147,4 @@ BI.CustomTree = BI.inherit(BI.Widget, { }); BI.CustomTree.EVENT_CHANGE = "EVENT_CHANGE"; -BI.shortcut("bi.custom_tree", BI.CustomTree); \ No newline at end of file +BI.shortcut("bi.custom_tree", BI.CustomTree); From 9018cbaa1200f4eee8a0c170326aa6aca30f97f6 Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 12 Aug 2022 14:07:41 +0800 Subject: [PATCH 084/161] =?UTF-8?q?REPORT-77978=20fix:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A0=91=E6=B0=B4=E5=8D=B0=E8=A1=A8=E7=8E=B0=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/editor/editor.state.simple.js | 7 +++-- .../combo.listtreevaluechooser.js | 1 + .../combo.treevaluechooser.insert.js | 1 + src/widget/multiselect/multiselect.trigger.js | 1 + .../multiselect/trigger/editor.multiselect.js | 2 +- .../trigger/searcher.multiselect.js | 1 + src/widget/multitree/multi.tree.combo.js | 29 ++++++++++--------- src/widget/multitree/multi.tree.list.combo.js | 29 ++++++++++--------- .../trigger/searcher.list.multi.tree.js | 1 + .../multitree/trigger/searcher.multi.tree.js | 3 +- 10 files changed, 43 insertions(+), 32 deletions(-) diff --git a/src/case/editor/editor.state.simple.js b/src/case/editor/editor.state.simple.js index 81b815441..ec895996b 100644 --- a/src/case/editor/editor.state.simple.js +++ b/src/case/editor/editor.state.simple.js @@ -136,7 +136,7 @@ BI.SimpleStateEditor = BI.inherit(BI.Widget, { items: [this.editor] }); this._showHint(); - if(BI.isNotNull(o.text)){ + if (BI.isNotNull(o.text)) { this.setState(o.text); } }, @@ -232,6 +232,7 @@ BI.SimpleStateEditor = BI.inherit(BI.Widget, { setState: function (v) { var o = this.options; BI.SimpleStateEditor.superclass.setValue.apply(this, arguments); + var defaultText = BI.isFunction(o.defaultText) ? o.defaultText() : o.defaultText; if (BI.isNumber(v)) { if (v === BI.Selection.All) { this._setText(BI.i18nText("BI-Already_Selected")); @@ -240,7 +241,7 @@ BI.SimpleStateEditor = BI.inherit(BI.Widget, { this._setText(BI.i18nText("BI-Already_Selected")); this.text.element.removeClass("bi-water-mark"); } else { - this._setText(o.text); + this._setText(BI.isKey(defaultText) ? defaultText : o.text); this.text.element.addClass("bi-water-mark"); } return; @@ -280,4 +281,4 @@ BI.SimpleStateEditor.EVENT_RESTRICT = "EVENT_RESTRICT"; BI.SimpleStateEditor.EVENT_SPACE = "EVENT_SPACE"; BI.SimpleStateEditor.EVENT_EMPTY = "EVENT_EMPTY"; -BI.shortcut("bi.simple_state_editor", BI.SimpleStateEditor); \ No newline at end of file +BI.shortcut("bi.simple_state_editor", BI.SimpleStateEditor); diff --git a/src/component/treevaluechooser/combo.listtreevaluechooser.js b/src/component/treevaluechooser/combo.listtreevaluechooser.js index fb6b3dfa8..0366a4bbc 100644 --- a/src/component/treevaluechooser/combo.listtreevaluechooser.js +++ b/src/component/treevaluechooser/combo.listtreevaluechooser.js @@ -30,6 +30,7 @@ BI.ListTreeValueChooserInsertCombo = BI.inherit(BI.AbstractListTreeValueChooser, isNeedAdjustWidth: o.isNeedAdjustWidth, element: this, text: o.text, + defaultText: o.defaultText, value: o.value, watermark: o.watermark, allowInsertValue: o.allowInsertValue, diff --git a/src/component/treevaluechooser/combo.treevaluechooser.insert.js b/src/component/treevaluechooser/combo.treevaluechooser.insert.js index ec60a0a4a..f9c6ebf4b 100644 --- a/src/component/treevaluechooser/combo.treevaluechooser.insert.js +++ b/src/component/treevaluechooser/combo.treevaluechooser.insert.js @@ -30,6 +30,7 @@ BI.TreeValueChooserInsertCombo = BI.inherit(BI.AbstractTreeValueChooser, { isNeedAdjustWidth: o.isNeedAdjustWidth, allowEdit: o.allowEdit, text: o.text, + defaultText: o.defaultText, value: o.value, watermark: o.watermark, element: this, diff --git a/src/widget/multiselect/multiselect.trigger.js b/src/widget/multiselect/multiselect.trigger.js index 7140741ff..937e83804 100644 --- a/src/widget/multiselect/multiselect.trigger.js +++ b/src/widget/multiselect/multiselect.trigger.js @@ -37,6 +37,7 @@ BI.MultiSelectTrigger = BI.inherit(BI.Trigger, { type: "bi.multi_select_searcher", height: o.height, text: o.text, + defaultText: o.defaultText, itemsCreator: o.itemsCreator, itemHeight: o.itemHeight, valueFormatter: o.valueFormatter, diff --git a/src/widget/multiselect/trigger/editor.multiselect.js b/src/widget/multiselect/trigger/editor.multiselect.js index 29ee8489b..db9acc9a4 100644 --- a/src/widget/multiselect/trigger/editor.multiselect.js +++ b/src/widget/multiselect/trigger/editor.multiselect.js @@ -24,7 +24,7 @@ BI.MultiSelectEditor = BI.inherit(BI.Widget, { watermark: o.watermark, allowBlank: true, value: o.value, - defaultText: o.text, + defaultText: o.defaultText, text: o.text, tipType: o.tipType, warningTitle: o.warningTitle, diff --git a/src/widget/multiselect/trigger/searcher.multiselect.js b/src/widget/multiselect/trigger/searcher.multiselect.js index 4dbfbead7..433f31920 100644 --- a/src/widget/multiselect/trigger/searcher.multiselect.js +++ b/src/widget/multiselect/trigger/searcher.multiselect.js @@ -27,6 +27,7 @@ BI.MultiSelectSearcher = BI.inherit(BI.Widget, { type: "bi.multi_select_editor", height: o.height, text: o.text, + defaultText: o.defaultText, watermark: o.watermark, listeners: [{ eventName: BI.MultiSelectEditor.EVENT_FOCUS, diff --git a/src/widget/multitree/multi.tree.combo.js b/src/widget/multitree/multi.tree.combo.js index 4e42df154..3b55ee15c 100644 --- a/src/widget/multitree/multi.tree.combo.js +++ b/src/widget/multitree/multi.tree.combo.js @@ -22,7 +22,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { var isInit = false; var want2showCounter = false; - this.storeValue = {value: o.value || {}}; + this.storeValue = { value: o.value || {} }; this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", @@ -30,6 +30,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { height: o.height - (o.simple ? 1 : 2), valueFormatter: o.valueFormatter, text: o.text, + defaultText: o.defaultText, watermark: o.watermark, // adapter: this.popup, masker: { @@ -44,7 +45,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { type: "bi.multi_tree_searcher", itemsCreator: o.itemsCreator }, - value: {value: o.value || {}} + value: { value: o.value || {} } }); this.combo = BI.createWidget({ @@ -105,7 +106,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { maxWidth: o.isNeedAdjustWidth ? "auto" : 500, }, isNeedAdjustWidth: o.isNeedAdjustWidth, - value: {value: o.value || {}}, + value: { value: o.value || {} }, hideChecker: function (e) { return triggerBtn.element.find(e.target).length === 0 && self.numberCounter.element.find(e.target).length === 0; @@ -131,12 +132,12 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; this.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { - self.storeValue = {value: this.getValue()}; + self.storeValue = { value: this.getValue() }; self.combo.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); BI.nextTick(function () { @@ -151,11 +152,11 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { self.fireEvent(BI.MultiTreeCombo.EVENT_SEARCHING); }); - function showCounter () { + function showCounter() { if (isSearching()) { - self.storeValue = {value: self.trigger.getValue()}; + self.storeValue = { value: self.trigger.getValue() }; } else if (isPopupView()) { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; } self.trigger.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); @@ -174,7 +175,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { var checked = this.getSearcher().hasChecked(); var val = { type: BI.Selection.Multi, - value: checked ? {1: 1} : {} + value: checked ? { 1: 1 } : {} }; this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None); self.numberCounter.setButtonChecked(val); @@ -186,7 +187,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { return; } if (change === true) { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; change = false; } self.combo.setValue(self.storeValue); @@ -201,9 +202,9 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { } else { if (isPopupView()) { self._stopEditing(); - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; if (clear === true) { - self.storeValue = {value: {}}; + self.storeValue = { value: {} }; } self.fireEvent(BI.MultiTreeCombo.EVENT_CONFIRM); } @@ -245,7 +246,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { }, itemsCreator: o.itemsCreator, valueFormatter: o.valueFormatter, - value: {value: o.value || {}} + value: { value: o.value || {} } }); this.numberCounter.on(BI.MultiSelectCheckSelectedSwitcher.EVENT_TRIGGER_CHANGE, function () { if (!self.combo.isViewVisible()) { @@ -306,7 +307,7 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { }); }, - _stopEditing: function() { + _stopEditing: function () { this.trigger.stopEditing(); this.numberCounter.hideView(); }, diff --git a/src/widget/multitree/multi.tree.list.combo.js b/src/widget/multitree/multi.tree.list.combo.js index ff5a2864a..559d6cf9c 100644 --- a/src/widget/multitree/multi.tree.list.combo.js +++ b/src/widget/multitree/multi.tree.list.combo.js @@ -14,6 +14,8 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { allowEdit: true, allowInsertValue: true, isNeedAdjustWidth: true, + text: "", + defaultText: "", }); }, @@ -23,12 +25,13 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { var isInit = false; var want2showCounter = false; - this.storeValue = {value: o.value || []}; + this.storeValue = { value: o.value || [] }; this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", allowEdit: o.allowEdit, text: o.text, + defaultText: o.defaultText, watermark: o.watermark, height: o.height - (o.simple ? 1 : 2), valueFormatter: o.valueFormatter, @@ -74,7 +77,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { itemsCreator: o.itemsCreator } }, - value: {value: o.value || {}} + value: { value: o.value || {} } }); @@ -139,7 +142,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { maxWidth: o.isNeedAdjustWidth ? "auto" : 500, }, isNeedAdjustWidth: o.isNeedAdjustWidth, - value: {value: o.value || {}}, + value: { value: o.value || {} }, hideChecker: function (e) { return triggerBtn.element.find(e.target).length === 0 && self.numberCounter.element.find(e.target).length === 0; @@ -165,12 +168,12 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; this.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { - self.storeValue = {value: this.getValue()}; + self.storeValue = { value: this.getValue() }; self.combo.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); BI.nextTick(function () { @@ -185,11 +188,11 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { self.fireEvent(BI.MultiTreeListCombo.EVENT_SEARCHING); }); - function showCounter () { + function showCounter() { if (isSearching()) { - self.storeValue = {value: self.trigger.getValue()}; + self.storeValue = { value: self.trigger.getValue() }; } else if (isPopupView()) { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; } self.trigger.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); @@ -203,7 +206,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { var checked = this.getSearcher().hasChecked(); var val = { type: BI.Selection.Multi, - value: checked ? {1: 1} : {} + value: checked ? { 1: 1 } : {} }; this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None); self.numberCounter.setButtonChecked(val); @@ -215,7 +218,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { return; } if (change === true) { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; change = false; } self.combo.setValue(self.storeValue); @@ -230,9 +233,9 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { } else { if (isPopupView()) { self._stopEditing(); - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; if (clear === true) { - self.storeValue = {value: []}; + self.storeValue = { value: [] }; } self.fireEvent(BI.MultiTreeListCombo.EVENT_CONFIRM); } @@ -340,7 +343,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { this.numberCounter.setButtonChecked(this.storeValue); }, - _stopEditing: function() { + _stopEditing: function () { this.trigger.stopEditing(); this.numberCounter.hideView(); }, diff --git a/src/widget/multitree/trigger/searcher.list.multi.tree.js b/src/widget/multitree/trigger/searcher.list.multi.tree.js index 555d1b783..1d213127a 100644 --- a/src/widget/multitree/trigger/searcher.list.multi.tree.js +++ b/src/widget/multitree/trigger/searcher.list.multi.tree.js @@ -27,6 +27,7 @@ BI.MultiListTreeSearcher = BI.inherit(BI.Widget, { type: "bi.multi_select_editor", height: o.height, text: o.text, + defaultText: o.defaultText, watermark: o.watermark, el: { type: "bi.simple_state_editor", diff --git a/src/widget/multitree/trigger/searcher.multi.tree.js b/src/widget/multitree/trigger/searcher.multi.tree.js index 35d59f200..8b9c4f004 100644 --- a/src/widget/multitree/trigger/searcher.multi.tree.js +++ b/src/widget/multitree/trigger/searcher.multi.tree.js @@ -30,6 +30,7 @@ BI.MultiTreeSearcher = BI.inherit(BI.Widget, { el: { type: "bi.simple_state_editor", text: o.text, + defaultText: o.defaultText, height: o.height }, listeners: [{ @@ -149,7 +150,7 @@ BI.MultiTreeSearcher = BI.inherit(BI.Widget, { } } - function getChildrenNode (ob) { + function getChildrenNode(ob) { var text = ""; var index = 0, size = BI.size(ob); var names = BI.Func.getSortedResult(BI.keys(ob)); From d728980489d2089cf6ffc6ffa5f70b0f466afcd1 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Fri, 12 Aug 2022 14:14:25 +0800 Subject: [PATCH 085/161] =?UTF-8?q?KERNEL-12408=20chore:=20base/combinatio?= =?UTF-8?q?n=E4=B8=ADeslint=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/collection/collection.js | 12 ++++++------ src/base/combination/bubble.js | 14 +++++++++----- src/base/combination/combo.js | 8 ++++++-- src/base/combination/expander.js | 6 +++++- src/base/combination/group.button.js | 24 ++++++++++++++++++++---- src/base/combination/group.combo.js | 2 +- src/base/combination/group.virtual.js | 7 ++++++- src/base/combination/loader.js | 10 +++++++--- src/base/combination/navigation.js | 5 +++-- src/base/combination/searcher.js | 12 +++++++++--- src/base/combination/switcher.js | 2 ++ src/base/combination/tab.js | 2 +- src/base/combination/tree.button.js | 25 +++++++++++++++++++++++-- 13 files changed, 98 insertions(+), 31 deletions(-) diff --git a/src/base/collection/collection.js b/src/base/collection/collection.js index d28adebf1..92d2b15eb 100644 --- a/src/base/collection/collection.js +++ b/src/base/collection/collection.js @@ -101,10 +101,10 @@ BI.CollectionView = BI.inherit(BI.Widget, { for (var index = 0, len = o.items.length; index < len; index++) { var cellMetadatum = o.cellSizeAndPositionGetter(index); - if (cellMetadatum.height === null || isNaN(cellMetadatum.height) || - cellMetadatum.width === null || isNaN(cellMetadatum.width) || - cellMetadatum.x === null || isNaN(cellMetadatum.x) || - cellMetadatum.y === null || isNaN(cellMetadatum.y)) { + if (BI.isNull(cellMetadatum.height) || isNaN(cellMetadatum.height) || + BI.isNull(cellMetadatum.width) || isNaN(cellMetadatum.width) || + BI.isNull(cellMetadatum.x) || isNaN(cellMetadatum.x) || + BI.isNull(cellMetadatum.y) || isNaN(cellMetadatum.y)) { throw Error(); } @@ -170,12 +170,12 @@ BI.CollectionView = BI.inherit(BI.Widget, { // 存储上下左右四个边界 var leftBorder = {}, rightBorder = {}, topBorder = {}, bottomBorder = {}; function assertMinBorder(border, offset) { - if (border[offset] === null) { + if (BI.isNull(border[offset])) { border[offset] = Number.MAX_VALUE; } } function assertMaxBorder(border, offset) { - if (border[offset] === null) { + if (BI.isNull(border[offset])) { border[offset] = 0; } } diff --git a/src/base/combination/bubble.js b/src/base/combination/bubble.js index f698b4a1a..288612a0c 100644 --- a/src/base/combination/bubble.js +++ b/src/base/combination/bubble.js @@ -6,6 +6,7 @@ BI.Bubble = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.Bubble.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-popper", attributes: { @@ -36,7 +37,7 @@ el: {}, popup: {}, comboClass: "bi-combo-popup", - hoverClass: "bi-combo-hover", + hoverClass: "bi-combo-hover" }); }, @@ -104,14 +105,14 @@ _initPullDownAction: function () { var self = this, o = this.options; var evs = (this.options.trigger || "").split(","); - var st = function (e) { + function st (e) { if (o.stopEvent) { e.stopEvent(); } if (o.stopPropagation) { e.stopPropagation(); } - }; + } var enterPopup = false; @@ -217,6 +218,8 @@ } }); break; + default: + break; } }); }, @@ -229,7 +232,7 @@ _assertPopupView: function () { var self = this, o = this.options; - if (this.popupView == null) { + if (BI.isNull(this.popupView)) { this.popupView = BI.createWidget(BI.isFunction(this.options.popup) ? this.options.popup() : this.options.popup, { type: "bi.bubble_popup_view", showArrow: o.showArrow, @@ -286,6 +289,7 @@ return; } this._hideView(e); + return true; }, @@ -319,7 +323,7 @@ }, _popupView: function (e) { - var self = this, o = this.options; + var o = this.options; this._assertPopupViewRender(); this.fireEvent(BI.Bubble.EVENT_BEFORE_POPUPVIEW); // popupVisible是为了获取其宽高, 放到可视范围之外以防止在IE下闪一下 diff --git a/src/base/combination/combo.js b/src/base/combination/combo.js index 27d00fc6a..c44338429 100644 --- a/src/base/combination/combo.js +++ b/src/base/combination/combo.js @@ -1,6 +1,7 @@ !(function () { var needHideWhenAnotherComboOpen = {}; var currentOpenedCombos = {}; + /** * @class BI.Combo * @extends BI.Widget @@ -11,6 +12,7 @@ }, _defaultConfig: function () { var conf = BI.Combo.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-combo" + (BI.isIE() ? " hack" : ""), attributes: { @@ -107,7 +109,7 @@ _assertPopupView: function () { var self = this, o = this.options; - if (this.popupView == null) { + if (BI.isNull(this.popupView)) { this.popupView = BI.createWidget(BI.isFunction(this.options.popup) ? this.options.popup() : this.options.popup, { type: "bi.popup_view", showArrow: o.showArrow, @@ -280,10 +282,12 @@ delete p.adaptHeight; p.dir = "right"; break; + default: + break; } if ("adaptHeight" in p) { - this.resetListHeight(p["adaptHeight"]); + this.resetListHeight(p.adaptHeight); } var width = this.combo.element.outerWidth(); var height = this.combo.element.outerHeight(); diff --git a/src/base/combination/expander.js b/src/base/combination/expander.js index 407413c40..f3d87109b 100644 --- a/src/base/combination/expander.js +++ b/src/base/combination/expander.js @@ -126,6 +126,8 @@ BI.Expander = BI.inherit(BI.Widget, { })); } break; + default: + break; } }); }, @@ -136,7 +138,7 @@ BI.Expander = BI.inherit(BI.Widget, { _assertPopupView: function () { var self = this, o = this.options; - if (this.popupView == null) { + if (BI.isNull(this.popupView)) { this.popupView = BI.createWidget(this.options.popup, { type: "bi.button_group", cls: "expander-popup", @@ -255,6 +257,7 @@ BI.Expander = BI.inherit(BI.Widget, { if (this.expander.options.id === id) { return this.expander; } + return this.popupView && this.popupView.getNodeById(id); }, @@ -262,6 +265,7 @@ BI.Expander = BI.inherit(BI.Widget, { if (this.expander.getValue() === value) { return this.expander; } + return this.popupView && this.popupView.getNodeByValue(value); }, diff --git a/src/base/combination/group.button.js b/src/base/combination/group.button.js index b9e8f7127..a79c3cc4c 100644 --- a/src/base/combination/group.button.js +++ b/src/base/combination/group.button.js @@ -42,7 +42,6 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { }, _createBtns: function (items) { - var o = this.options; return BI.createWidgets(BI.createItems(items, { type: "bi.text_button" }), this); @@ -66,6 +65,8 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { case BI.ButtonGroup.CHOOSE_TYPE_NONE: self.setValue([]); break; + default: + break; } self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); self.fireEvent(BI.ButtonGroup.EVENT_CHANGE, value, obj); @@ -84,7 +85,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { _packageBtns: function (btns) { var o = this.options; var layouts = BI.isArray(o.layouts) ? o.layouts : [o.layouts]; - for (var i = layouts.length - 1; i > 0; i--) { + for (let i = layouts.length - 1; i > 0; i--) { btns = BI.map(btns, function (k, it) { return BI.extend({}, layouts[i], { items: [ @@ -95,15 +96,18 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { }); }); } + return btns; }, _packageSimpleItems: function (btns) { var o = this.options; + return BI.map(o.items, function (i, item) { if (BI.stripEL(item) === item) { return btns[i]; } + return BI.extend({}, item, { el: btns[i] }); @@ -122,12 +126,14 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { lay = BI.formatEL(lay.items[0]).el; } lay.items = items; + return layout; }, // 如果是一个简单的layout _isSimpleLayout: function () { var o = this.options; + return BI.isArray(o.layouts) ? (o.layouts.length === 1 && !BI.isArray(o.items[0])) : true; }, @@ -140,12 +146,12 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { }, prependItems: function (items) { - var o = this.options; var btns = this._btnsCreator.apply(this, arguments); this.buttons = BI.concat(btns, this.buttons); if (this._isSimpleLayout() && this.layouts && this.layouts.prependItems) { this.layouts.prependItems(btns); + return; } @@ -154,13 +160,13 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { }, addItems: function (items) { - var o = this.options; var btns = this._btnsCreator.apply(this, arguments); this.buttons = BI.concat(this.buttons, btns); // 如果是一个简单的layout if (this._isSimpleLayout() && this.layouts && this.layouts.addItems) { this.layouts.addItems(btns); + return; } @@ -257,6 +263,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { v.push(item.getValue()); } }); + return v; }, @@ -267,6 +274,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { v.push(item.getValue()); } }); + return v; }, @@ -285,6 +293,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { btns.push(item); } }); + return btns; }, @@ -295,6 +304,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { btns.push(item); } }); + return btns; }, @@ -303,9 +313,11 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { BI.any(this.buttons, function (i, item) { if (item.isEnabled() && item.getValue() === value) { index = i; + return true; } }); + return index; }, @@ -314,9 +326,11 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { BI.any(this.buttons, function (i, item) { if (item.isEnabled() && item.options.id === id) { node = item; + return true; } }); + return node; }, @@ -325,9 +339,11 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { BI.any(this.buttons, function (i, item) { if (item.isEnabled() && item.getValue() === value) { node = item; + return true; } }); + return node; }, diff --git a/src/base/combination/group.combo.js b/src/base/combination/group.combo.js index 7c07445ee..9e4d56749 100644 --- a/src/base/combination/group.combo.js +++ b/src/base/combination/group.combo.js @@ -15,7 +15,7 @@ BI.ComboGroup = BI.inherit(BI.Widget, { isNeedAdjustHeight: false, isNeedAdjustWidth: false, - el: {type: "bi.text_button", text: "", value: ""}, + el: { type: "bi.text_button", text: "", value: "" }, items: [], popup: { diff --git a/src/base/combination/group.virtual.js b/src/base/combination/group.virtual.js index d42c7a5b7..7efe85716 100644 --- a/src/base/combination/group.virtual.js +++ b/src/base/combination/group.virtual.js @@ -29,9 +29,10 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { var o = this.options; var map = this.buttonMap = {}; var layouts = BI.isArray(o.layouts) ? o.layouts : [o.layouts]; - for (var i = layouts.length - 1; i > 0; i--) { + for (let i = layouts.length - 1; i > 0; i--) { items = BI.map(items, function (k, it) { var el = BI.stripEL(it); + return BI.extend({}, layouts[i], { items: [ BI.extend({}, layouts[i].el, { @@ -47,6 +48,7 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { }); }); } + return items; }, @@ -60,6 +62,7 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { lay = BI.formatEL(lay.items[0]).el; } lay.items = items; + return layout; }, @@ -93,6 +96,7 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { } } }); + return v; }, @@ -119,6 +123,7 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { } } }); + return v; }, diff --git a/src/base/combination/loader.js b/src/base/combination/loader.js index a56e72708..b873d09c0 100644 --- a/src/base/combination/loader.js +++ b/src/base/combination/loader.js @@ -38,7 +38,7 @@ BI.Loader = BI.inherit(BI.Widget, { _prevLoad: function () { var self = this, o = this.options; this.prev.setLoading(); - o.itemsCreator.apply(this, [{times: --this.times}, function () { + o.itemsCreator.apply(this, [{ times: --this.times }, function () { self.prev.setLoaded(); self.prependItems.apply(self, arguments); }]); @@ -47,7 +47,7 @@ BI.Loader = BI.inherit(BI.Widget, { _nextLoad: function () { var self = this, o = this.options; this.next.setLoading(); - o.itemsCreator.apply(this, [{times: ++this.times}, function () { + o.itemsCreator.apply(this, [{ times: ++this.times }, function () { self.next.setLoaded(); self.addItems.apply(self, arguments); }]); @@ -122,6 +122,7 @@ BI.Loader = BI.inherit(BI.Widget, { if (BI.isNumber(o.count)) { return this.count < o.count; } + return !!o.hasPrev.apply(this, [{ times: this.times, count: this.count @@ -133,6 +134,7 @@ BI.Loader = BI.inherit(BI.Widget, { if (BI.isNumber(o.count)) { return this.count < o.count; } + return !!o.hasNext.apply(this, [{ times: this.times, count: this.count @@ -168,13 +170,14 @@ BI.Loader = BI.inherit(BI.Widget, { _populate: function (items) { var self = this, o = this.options; if (arguments.length === 0 && (BI.isFunction(o.itemsCreator))) { - o.itemsCreator.apply(this, [{times: 1}, function () { + o.itemsCreator.apply(this, [{ times: 1 }, function () { if (arguments.length === 0) { throw new Error("参数不能为空"); } self.populate.apply(self, arguments); o.onLoaded(); }]); + return false; } this.options.items = items; @@ -195,6 +198,7 @@ BI.Loader = BI.inherit(BI.Widget, { this.prev.invisible(); } } + return true; }, diff --git a/src/base/combination/navigation.js b/src/base/combination/navigation.js index b2d5ae867..7223a1c5f 100644 --- a/src/base/combination/navigation.js +++ b/src/base/combination/navigation.js @@ -23,7 +23,7 @@ BI.Navigation = BI.inherit(BI.Widget, { render: function () { var self = this, o = this.options; - this.tab = BI.createWidget(this.options.tab, {type: "bi.button_group"}); + this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group" }); this.cardMap = {}; this.showIndex = 0; this.layout = BI.createWidget({ @@ -45,6 +45,7 @@ BI.Navigation = BI.inherit(BI.Widget, { cardCreator: function (v) { var card = o.cardCreator(v); self.cardMap[v] = card; + return card; }, afterCardCreated: BI.bind(this.afterCardCreated, this), @@ -54,7 +55,7 @@ BI.Navigation = BI.inherit(BI.Widget, { if (BI.isFunction(o.showIndex)) { this.__watch(o.showIndex, function (context, newValue) { self.setSelect(newValue); - }) + }); } }, diff --git a/src/base/combination/searcher.js b/src/base/combination/searcher.js index 0989b4c8a..14efe2e77 100644 --- a/src/base/combination/searcher.js +++ b/src/base/combination/searcher.js @@ -82,6 +82,8 @@ BI.Searcher = BI.inherit(BI.Widget, { self._pauseSearch(); } break; + default: + break; } }); }, @@ -109,6 +111,8 @@ BI.Searcher = BI.inherit(BI.Widget, { values.push(obj.getValue()); o.adapter && o.adapter.setValue(values); break; + default: + break; } } self.fireEvent(BI.Searcher.EVENT_CHANGE, value, obj); @@ -140,7 +144,6 @@ BI.Searcher = BI.inherit(BI.Widget, { }, _pauseSearch: function () { - var o = this.options, name = this.getName(); this._stop = true; BI.nextTick(function (name) { BI.Maskers.hide(name); @@ -153,7 +156,7 @@ BI.Searcher = BI.inherit(BI.Widget, { }, _stopSearch: function () { - var o = this.options, name = this.getName(); + var name = this.getName(); this._stop = true; BI.Maskers.hide(name); if (this._isSearching === true) { @@ -175,6 +178,7 @@ BI.Searcher = BI.inherit(BI.Widget, { this.popupView.populate(find, match, keyword); o.isAutoSync && o.adapter && o.adapter.getValue && this.popupView.setValue(o.adapter.getValue()); self.fireEvent(BI.Searcher.EVENT_SEARCHING); + return; } this.popupView.loading && this.popupView.loading(); @@ -203,6 +207,7 @@ BI.Searcher = BI.inherit(BI.Widget, { if (BI.isEmptyString(res[res.length - 1])) { res = res.slice(0, res.length - 1); } + return BI.isNull(res) ? "" : res[res.length - 1]; } }, @@ -246,6 +251,7 @@ BI.Searcher = BI.inherit(BI.Widget, { hasMatched: function () { this._assertPopupView(); + return this.popupView.hasMatched(); }, @@ -288,8 +294,8 @@ BI.Searcher = BI.inherit(BI.Widget, { if (BI.isNull(this.popupView)) { return o.popup.value; } - return this.popupView.getValue(); + return this.popupView.getValue(); }, populate: function (result, searchResult, keyword) { diff --git a/src/base/combination/switcher.js b/src/base/combination/switcher.js index 1a929f704..ce0a623e2 100644 --- a/src/base/combination/switcher.js +++ b/src/base/combination/switcher.js @@ -265,6 +265,7 @@ BI.Switcher = BI.inherit(BI.Widget, { if (this.switcher.attr("id") === id) { return this.switcher; } + return this.popupView && this.popupView.getNodeById(id); }, @@ -272,6 +273,7 @@ BI.Switcher = BI.inherit(BI.Widget, { if (this.switcher.getValue() === value) { return this.switcher; } + return this.popupView && this.popupView.getNodeByValue(value); }, diff --git a/src/base/combination/tab.js b/src/base/combination/tab.js index 90a788a17..3020859f5 100644 --- a/src/base/combination/tab.js +++ b/src/base/combination/tab.js @@ -112,7 +112,7 @@ BI.Tab = BI.inherit(BI.Widget, { }, removeTab: function (cardname) { - var self = this, o = this.options; + var self = this; BI.any(this.cardMap, function (name, card) { if (BI.isEqual(name, (cardname + ""))) { self.layout.deleteCardByName(name); diff --git a/src/base/combination/tree.button.js b/src/base/combination/tree.button.js index 45b436b8a..457c5afd5 100644 --- a/src/base/combination/tree.button.js +++ b/src/base/combination/tree.button.js @@ -16,6 +16,7 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (!BI.isFunction(item.setSelected)) { item.setNotSelectedValue(v); + return; } if (BI.deepContains(v, item.getValue())) { @@ -31,6 +32,7 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (BI.isFunction(item.setEnabledValue)) { item.setEnabledValue(v); + return; } if (BI.deepContains(v, item.getValue())) { @@ -46,6 +48,7 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (!BI.isFunction(item.setSelected)) { item.setValue(v); + return; } if (BI.deepContains(v, item.getValue())) { @@ -61,12 +64,14 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (item.isEnabled() && !BI.isFunction(item.setSelected)) { v = BI.concat(v, item.getNotSelectedValue()); + return; } if (item.isEnabled() && item.isSelected && !item.isSelected()) { v.push(item.getValue()); } }); + return v; }, @@ -75,12 +80,14 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (item.isEnabled() && !BI.isFunction(item.setSelected)) { v = BI.concat(v, item.getValue()); + return; } if (item.isEnabled() && item.isSelected && item.isSelected()) { v.push(item.getValue()); } }); + return v; }, @@ -89,12 +96,14 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (item.isEnabled() && !BI.isFunction(item.setSelected)) { btns = btns.concat(item.getSelectedButtons()); + return; } if (item.isSelected && item.isSelected()) { btns.push(item); } }); + return btns; }, @@ -103,12 +112,14 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (item.isEnabled() && !BI.isFunction(item.setSelected)) { btns = btns.concat(item.getNotSelectedButtons()); + return; } if (item.isSelected && !item.isSelected()) { btns.push(item); } }); + return btns; }, @@ -118,12 +129,14 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.each(this.buttons, function (i, item) { if (item.isEnabled() && !BI.isFunction(item.setSelected)) { leaves = leaves.concat(item.getAllLeaves()); + return; } if (item.isEnabled()) { leaves.push(item); } }); + return leaves; }, @@ -133,9 +146,11 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { var vs = item.getValue(); if (item.isEnabled() && (vs === value || BI.contains(vs, value))) { index = i; + return true; } }); + return index; }, @@ -145,14 +160,17 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { if (item.isEnabled()) { if (item.attr("id") === id) { node = item; + return true; } else if (BI.isFunction(item.getNodeById)) { - if (node = item.getNodeById(id)) { + node = item.getNodeById(id); + if (node) { return true; } } } }); + return node; }, @@ -161,15 +179,18 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { BI.any(this.buttons, function (i, item) { if (item.isEnabled()) { if (BI.isFunction(item.getNodeByValue)) { - if (node = item.getNodeByValue(value)) { + node = item.getNodeByValue(value); + if (node) { return true; } } else if (item.attr("value") === value) { node = item; + return true; } } }); + return node; } }); From 944eb9d9b9847c745ff9a8b430dc4a6480df4407 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Fri, 12 Aug 2022 14:56:36 +0800 Subject: [PATCH 086/161] =?UTF-8?q?KERNEL-12408=20chore:=20base/layer?= =?UTF-8?q?=E4=B8=ADeslint=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/collection/collection.js | 1 - src/base/combination/group.button.js | 2 +- src/base/foundation/message.js | 10 ++-- src/base/grid/__test__/grid.test.js | 3 +- src/base/grid/grid.js | 10 ++-- src/base/layer/__test__/layer.popover.test.js | 3 +- src/base/layer/layer.drawer.js | 7 ++- src/base/layer/layer.popover.js | 5 +- src/base/layer/layer.popup.js | 53 +++++++++++-------- src/base/layer/layer.searcher.js | 3 +- 10 files changed, 55 insertions(+), 42 deletions(-) diff --git a/src/base/collection/collection.js b/src/base/collection/collection.js index 92d2b15eb..1d56702fe 100644 --- a/src/base/collection/collection.js +++ b/src/base/collection/collection.js @@ -310,7 +310,6 @@ BI.CollectionView = BI.inherit(BI.Widget, { this.element.scrollTop(o.scrollTop); this.element.scrollLeft(o.scrollLeft); } catch (e) { - throw new Error("Failed in some way", { cause: e }); } this._calculateChildrenToRender(); }, diff --git a/src/base/combination/group.button.js b/src/base/combination/group.button.js index a79c3cc4c..fa91d7239 100644 --- a/src/base/combination/group.button.js +++ b/src/base/combination/group.button.js @@ -85,7 +85,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { _packageBtns: function (btns) { var o = this.options; var layouts = BI.isArray(o.layouts) ? o.layouts : [o.layouts]; - for (let i = layouts.length - 1; i > 0; i--) { + for (var i = layouts.length - 1; i > 0; i--) { btns = BI.map(btns, function (k, it) { return BI.extend({}, layouts[i], { items: [ diff --git a/src/base/foundation/message.js b/src/base/foundation/message.js index 82ab48ee5..875a244e5 100644 --- a/src/base/foundation/message.js +++ b/src/base/foundation/message.js @@ -3,8 +3,7 @@ * 弹出提示消息框,用于模拟阻塞操作(通过回调函数实现) * @class BI.Msg */ -BI.Msg = function () { - +BI.Msg = ((function () { var $mask, $pop; var messageShows = []; @@ -69,6 +68,7 @@ BI.Msg = function () { toast.element.removeClass("bi-message-enter").addClass("bi-message-leave"); toast.destroy?.(); }, 5000); + return function () { toast.element.removeClass("bi-message-enter").addClass("bi-message-leave"); toast.destroy?.(); @@ -92,14 +92,14 @@ BI.Msg = function () { right: 0, bottom: 0 }).appendTo("body"); - var close = function () { + function close () { messageShows[messageShows.length - 1].destroy(); messageShows.pop(); if (messageShows.length === 0) { $mask.remove(); $mask = null; } - }; + } var controlItems = []; if (hasCancel === true) { controlItems.push({ @@ -231,4 +231,4 @@ BI.Msg = function () { messageShows[messageShows.length] = BI.createWidget(conf); } }; -}(); +})()); diff --git a/src/base/grid/__test__/grid.test.js b/src/base/grid/__test__/grid.test.js index d65c3d24c..da11bba80 100644 --- a/src/base/grid/__test__/grid.test.js +++ b/src/base/grid/__test__/grid.test.js @@ -4,7 +4,6 @@ * Created by windy on 2020/3/20 */ describe("GridTest", function () { - /** * test_author_windy */ @@ -38,4 +37,4 @@ describe("GridTest", function () { // TODO 性能展示类控件,不知道要测啥,标记一下 grid.destroy(); }); -}); \ No newline at end of file +}); diff --git a/src/base/grid/grid.js b/src/base/grid/grid.js index 334851235..c08f30645 100644 --- a/src/base/grid/grid.js +++ b/src/base/grid/grid.js @@ -61,7 +61,7 @@ BI.GridView = BI.inherit(BI.Widget, { if (o.overflowY === false) { scrollable = false; } else { - scrollable = "y" + scrollable = "y"; } } else { if (o.overflowY === false) { @@ -258,7 +258,7 @@ BI.GridView = BI.inherit(BI.Widget, { this.container.attr("items", renderedCells); this.renderedCells = renderedCells; this.renderedKeys = renderedKeys; - this.renderRange = {minX: minX, minY: minY, maxX: maxX, maxY: maxY}; + this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY }; } }, @@ -279,7 +279,7 @@ BI.GridView = BI.inherit(BI.Widget, { }, _populate: function (items) { - var self = this, o = this.options; + var o = this.options; this._reRange(); if (items && items !== this.options.items) { this.options.items = items; @@ -333,7 +333,7 @@ BI.GridView = BI.inherit(BI.Widget, { if (this.options.overflowX !== !!b) { this.options.overflowX = !!b; BI.nextTick(function () { - self.element.css({overflowX: b ? "auto" : "hidden"}); + self.element.css({ overflowX: b ? "auto" : "hidden" }); }); } }, @@ -343,7 +343,7 @@ BI.GridView = BI.inherit(BI.Widget, { if (this.options.overflowY !== !!b) { this.options.overflowY = !!b; BI.nextTick(function () { - self.element.css({overflowY: b ? "auto" : "hidden"}); + self.element.css({ overflowY: b ? "auto" : "hidden" }); }); } }, diff --git a/src/base/layer/__test__/layer.popover.test.js b/src/base/layer/__test__/layer.popover.test.js index 1830744a8..09c05858b 100644 --- a/src/base/layer/__test__/layer.popover.test.js +++ b/src/base/layer/__test__/layer.popover.test.js @@ -5,7 +5,6 @@ */ describe("PopoverTest", function () { - /** * test_author_windy */ @@ -30,4 +29,4 @@ describe("PopoverTest", function () { done(); }, 100); }); -}); \ No newline at end of file +}); diff --git a/src/base/layer/layer.drawer.js b/src/base/layer/layer.drawer.js index 2bf2b2942..3472f6942 100644 --- a/src/base/layer/layer.drawer.js +++ b/src/base/layer/layer.drawer.js @@ -144,6 +144,8 @@ BI.Drawer = BI.inherit(BI.Widget, { top: "100%" }); break; + default: + break; } }, @@ -172,6 +174,8 @@ BI.Drawer = BI.inherit(BI.Widget, { top: "calc(100% - " + size.height + "px)" }); break; + default: + break; } callback && callback(); }); @@ -180,7 +184,6 @@ BI.Drawer = BI.inherit(BI.Widget, { hide: function (callback) { var self = this, o = this.options; requestAnimationFrame(function () { - var size = self._getSuitableSize(); switch (o.placement) { case "right": self.element.css({ @@ -202,6 +205,8 @@ BI.Drawer = BI.inherit(BI.Widget, { top: "100%" }); break; + default: + break; } setTimeout(callback, 300); }); diff --git a/src/base/layer/layer.popover.js b/src/base/layer/layer.popover.js index bce738ef3..65516f7d9 100644 --- a/src/base/layer/layer.popover.js +++ b/src/base/layer/layer.popover.js @@ -157,7 +157,6 @@ BI.Popover = BI.inherit(BI.Widget, { // mounted之后绑定事件 mounted: function () { var self = this; - var o = this.options; this.dragger.element.mousedown(function (e) { var pos = self.element.offset(); self.startX = pos.left; @@ -168,7 +167,7 @@ BI.Popover = BI.inherit(BI.Widget, { _getSuitableBodyHeight: function (height) { var o = this.options; - var c = this._constant; + return BI.clamp(height, 0, BI.Widget._renderEngine.createElement("body")[0].clientHeight - o.headerHeight - (o.footer ? o.footerHeight : 0) - o.bodyTgap); }, @@ -224,7 +223,7 @@ BI.Popover = BI.inherit(BI.Widget, { }, setZindex: function (zindex) { - this.element.css({"z-index": zindex}); + this.element.css({ "z-index": zindex }); }, destroyed: function () { diff --git a/src/base/layer/layer.popup.js b/src/base/layer/layer.popup.js index 8e747d24f..731510c42 100644 --- a/src/base/layer/layer.popup.js +++ b/src/base/layer/layer.popup.js @@ -50,22 +50,24 @@ BI.PopupView = BI.inherit(BI.Widget, { render: function () { var self = this, o = this.options; - var fn = function (e) { + function fn (e) { e.stopPropagation(); - }, stop = function (e) { + } + function stop (e) { e.stopEvent(); + return false; - }; + } this.element.css({ "z-index": BI.zIndex_popup, "min-width": BI.isNumeric(o.minWidth) ? (o.minWidth / BI.pixRatio + BI.pixUnit) : o.minWidth, "max-width": BI.isNumeric(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth - }).bind({click: fn}); + }).bind({ click: fn }); this.element.bind("mousewheel", fn); - o.stopPropagation && this.element.bind({mousedown: fn, mouseup: fn, mouseover: fn}); - o.stopEvent && this.element.bind({mousedown: stop, mouseup: stop, mouseover: stop}); + o.stopPropagation && this.element.bind({ mousedown: fn, mouseup: fn, mouseover: fn }); + o.stopEvent && this.element.bind({ mousedown: stop, mouseup: stop, mouseover: stop }); this.tool = this._createTool(); this.tab = this._createTab(); this.view = this._createView(); @@ -108,7 +110,7 @@ BI.PopupView = BI.inherit(BI.Widget, { type: "bi.absolute", cls: "bi-bubble-arrow-wrapper", items: [{ - el: this.arrow, + el: this.arrow }] }); // 因为三角符号的原因位置变大了,需要占位 @@ -121,7 +123,7 @@ BI.PopupView = BI.inherit(BI.Widget, { items: [{ el: this.arrowWrapper, left: 0, - top: 0, + top: 0 }, { el: this.placeholder }] @@ -131,7 +133,7 @@ BI.PopupView = BI.inherit(BI.Widget, { _createView: function () { var o = this.options; - this.button_group = BI.createWidget(o.el, {type: "bi.button_group", value: o.value}); + this.button_group = BI.createWidget(o.el, { type: "bi.button_group", value: o.value }); this.button_group.element.css({ "min-height": BI.isNumeric(o.minHeight) ? (o.minHeight / BI.pixRatio + BI.pixUnit) : o.minHeight, "padding-top": o.innerVgap / BI.pixRatio + BI.pixUnit, @@ -139,6 +141,7 @@ BI.PopupView = BI.inherit(BI.Widget, { "padding-left": o.innerHgap / BI.pixRatio + BI.pixUnit, "padding-right": o.innerHgap / BI.pixRatio + BI.pixUnit }); + return this.button_group; }, @@ -147,6 +150,7 @@ BI.PopupView = BI.inherit(BI.Widget, { if (false === o.tool) { return; } + return BI.createWidget(o.tool); }, @@ -155,6 +159,7 @@ BI.PopupView = BI.inherit(BI.Widget, { if (o.tabs.length === 0) { return; } + return BI.createWidget({ type: "bi.center", cls: "list-view-tab", @@ -218,7 +223,7 @@ BI.PopupView = BI.inherit(BI.Widget, { top: o.tgap + o.vgap, left: 0, right: "", - bottom: "", + bottom: "" }; placeholderStyle = { left: 0, @@ -237,7 +242,7 @@ BI.PopupView = BI.inherit(BI.Widget, { top: o.bgap + o.vgap, left: "", right: 0, - bottom: "", + bottom: "" }; placeholderStyle = { left: 0, @@ -257,14 +262,14 @@ BI.PopupView = BI.inherit(BI.Widget, { bottom: o.bgap + o.vgap, left: 0, right: "", - top: "", + top: "" }; placeholderStyle = { left: 0, right: 0, height: this._const.TRIANGLE_LENGTH, top: "", - bottom: -this._const.TRIANGLE_LENGTH, + bottom: -this._const.TRIANGLE_LENGTH }; break; case "top,left": @@ -276,14 +281,14 @@ BI.PopupView = BI.inherit(BI.Widget, { bottom: o.bgap + o.vgap, right: 0, left: "", - top: "", + top: "" }; placeholderStyle = { left: 0, right: 0, height: this._const.TRIANGLE_LENGTH, top: "", - bottom: -this._const.TRIANGLE_LENGTH, + bottom: -this._const.TRIANGLE_LENGTH }; break; case "left": @@ -296,7 +301,7 @@ BI.PopupView = BI.inherit(BI.Widget, { right: o.rgap + o.hgap, top: 0, bottom: "", - left: "", + left: "" }; placeholderStyle = { top: 0, @@ -315,7 +320,7 @@ BI.PopupView = BI.inherit(BI.Widget, { right: o.rgap + o.hgap, bottom: 0, top: "", - left: "", + left: "" }; placeholderStyle = { top: 0, @@ -335,7 +340,7 @@ BI.PopupView = BI.inherit(BI.Widget, { left: o.lgap + o.hgap, top: 0, bottom: "", - right: "", + right: "" }; placeholderStyle = { top: 0, @@ -354,7 +359,7 @@ BI.PopupView = BI.inherit(BI.Widget, { left: o.lgap + o.hgap, bottom: 0, top: "", - right: "", + right: "" }; placeholderStyle = { top: 0, @@ -372,8 +377,14 @@ BI.PopupView = BI.inherit(BI.Widget, { break; case "innerLeft": break; + default: + break; } - this.element.removeClass("left").removeClass("right").removeClass("top").removeClass("bottom").addClass(direction); + this.element.removeClass("left") + .removeClass("right") + .removeClass("top") + .removeClass("bottom") + .addClass(direction); this.arrow.element.css(style); this.arrowWrapper.element.css(wrapperStyle); this.placeholder.element.css(placeholderStyle); @@ -399,7 +410,7 @@ BI.PopupView = BI.inherit(BI.Widget, { toolHeight = ((this.tool && this.tool.attr("height")) || 24) * ((this.tool && this.tool.isVisible()) ? 1 : 0); var resetHeight = h - tbHeight - tabHeight - toolHeight - 2 * this.options.innerVgap; this.view.resetHeight ? this.view.resetHeight(resetHeight) : - this.view.element.css({"max-height": resetHeight / BI.pixRatio + BI.pixUnit}); + this.view.element.css({ "max-height": resetHeight / BI.pixRatio + BI.pixUnit }); }, setValue: function (selectedValues) { diff --git a/src/base/layer/layer.searcher.js b/src/base/layer/layer.searcher.js index 12867ed93..0d0f475fa 100644 --- a/src/base/layer/layer.searcher.js +++ b/src/base/layer/layer.searcher.js @@ -9,12 +9,13 @@ BI.SearcherView = BI.inherit(BI.Pane, { _defaultConfig: function () { var conf = BI.SearcherView.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-searcher-view bi-card", tipText: BI.i18nText("BI-No_Select"), chooseType: BI.Selection.Single, - matcher: {// 完全匹配的构造器 + matcher: { // 完全匹配的构造器 type: "bi.button_group", behaviors: { redmark: function () { From 471d384f2311dab011a2c16a2d7e8b309c3a23d9 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 12 Aug 2022 16:25:23 +0800 Subject: [PATCH 087/161] auto upgrade version to 2.0.20220812162503 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 435bd5356..ba41188b2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220812095620", + "version": "2.0.20220812162503", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 58b827c1f7252cf98e9d4be51a75fbb8190c3a9d Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Fri, 12 Aug 2022 17:05:35 +0800 Subject: [PATCH 088/161] =?UTF-8?q?KERNEL-12408=20chore:=20base=E4=B8=ADes?= =?UTF-8?q?lint=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/layer/layer.popup.js | 11 ++++++----- src/base/list/listview.js | 10 +++++----- src/base/list/virtualgrouplist.js | 1 + src/base/list/virtuallist.js | 6 +++--- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/base/layer/layer.popup.js b/src/base/layer/layer.popup.js index 731510c42..6255975ab 100644 --- a/src/base/layer/layer.popup.js +++ b/src/base/layer/layer.popup.js @@ -380,11 +380,12 @@ BI.PopupView = BI.inherit(BI.Widget, { default: break; } - this.element.removeClass("left") - .removeClass("right") - .removeClass("top") - .removeClass("bottom") - .addClass(direction); + this.element + .removeClass("left") + .removeClass("right") + .removeClass("top") + .removeClass("bottom") + .addClass(direction); this.arrow.element.css(style); this.arrowWrapper.element.css(wrapperStyle); this.placeholder.element.css(placeholderStyle); diff --git a/src/base/list/listview.js b/src/base/list/listview.js index 65f777a99..bca51e3cc 100644 --- a/src/base/list/listview.js +++ b/src/base/list/listview.js @@ -21,13 +21,13 @@ BI.ListView = BI.inherit(BI.Widget, { }, init: function () { - var self = this; this.renderedIndex = -1; this.cache = {}; }, render: function () { var self = this, o = this.options; + return { type: "bi.vertical", items: [BI.extend({ @@ -72,10 +72,11 @@ BI.ListView = BI.inherit(BI.Widget, { var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0; var cnt = this.renderedIndex + 1; var lastHeight; - var getElementHeight = function () { + function getElementHeight () { return self.container.element.height(); - }; - while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) { + } + lastHeight = getElementHeight(); + while ((lastHeight) < minContentHeight && index < o.items.length) { var items = o.items.slice(index, index + o.blockSize); this.container.addItems(items.map(function (item, i) { return o.itemFormatter(item, index + i); @@ -93,7 +94,6 @@ BI.ListView = BI.inherit(BI.Widget, { }, _calculateBlocksToRender: function () { - var o = this.options; this._renderMoreIf(); }, diff --git a/src/base/list/virtualgrouplist.js b/src/base/list/virtualgrouplist.js index cb8d1b533..2dc5f97a5 100644 --- a/src/base/list/virtualgrouplist.js +++ b/src/base/list/virtualgrouplist.js @@ -27,6 +27,7 @@ BI.VirtualGroupList = BI.inherit(BI.Widget, { render: function () { var self = this, o = this.options; + return { type: "bi.vertical", items: [{ diff --git a/src/base/list/virtuallist.js b/src/base/list/virtuallist.js index d5881b30b..7ae32143a 100644 --- a/src/base/list/virtuallist.js +++ b/src/base/list/virtuallist.js @@ -20,13 +20,13 @@ BI.VirtualList = BI.inherit(BI.Widget, { }, init: function () { - var self = this; this.renderedIndex = -1; this.cache = {}; }, render: function () { - var self = this, o = this.options; + var self = this; + return { type: "bi.vertical", items: [{ @@ -45,7 +45,7 @@ BI.VirtualList = BI.inherit(BI.Widget, { ref: function () { self.bottomBlank = this; } - }], + }] }; }, From d5565fef01515062b0c656ad3c595399293f6f08 Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 12 Aug 2022 17:34:19 +0800 Subject: [PATCH 089/161] =?UTF-8?q?REPORT-77978=20fix:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A0=91=E6=B0=B4=E5=8D=B0=E8=A1=A8=E7=8E=B0=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/editor/editor.defaulttext.js | 7 +++++-- .../multilayersingletree.combo.js | 1 + .../multilayersingletree.trigger.js | 17 ++++++----------- 3 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/case/editor/editor.defaulttext.js b/src/case/editor/editor.defaulttext.js index 5c01c7a01..4cfaf59a5 100644 --- a/src/case/editor/editor.defaulttext.js +++ b/src/case/editor/editor.defaulttext.js @@ -46,12 +46,15 @@ BI.DefaultTextEditor = BI.inherit(BI.Widget, { errorText: o.errorText, invisible: true, }); + + var showText = BI.isFunction(o.text) ? o.text() : o.text; + this.text = BI.createWidget({ type: "bi.text_button", - cls: BI.isKey(o.text) ? "tip-text-style" : "bi-water-mark tip-text-style", + cls: BI.isKey(showText) ? "tip-text-style" : "bi-water-mark tip-text-style", textAlign: "left", height: o.height, - text: BI.isKey(o.text) ? o.text : o.defaultText, + text: showText || o.defaultText, hgap: o.hgap + 2, handler: function () { self._showInput(); diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index c33e3d216..ba67f0c3a 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -105,6 +105,7 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { valueFormatter: o.valueFormatter, height: o.height, text: o.text, + defaultText: o.defaultText, value: o.value, tipType: o.tipType, warningTitle: o.warningTitle, diff --git a/src/widget/multilayersingletree/multilayersingletree.trigger.js b/src/widget/multilayersingletree/multilayersingletree.trigger.js index e00394a38..1ede397e2 100644 --- a/src/widget/multilayersingletree/multilayersingletree.trigger.js +++ b/src/widget/multilayersingletree/multilayersingletree.trigger.js @@ -37,11 +37,11 @@ BI.MultiLayerSingleTreeTrigger = BI.inherit(BI.Trigger, { }, isAutoSearch: false, el: { - type: "bi.state_editor", + type: "bi.default_text_editor", ref: function () { self.editor = this; }, - defaultText: o.text, + defaultText: o.defaultText, text: this._digest(o.value), value: o.value, height: o.height, @@ -192,16 +192,11 @@ BI.MultiLayerSingleTreeTrigger = BI.inherit(BI.Trigger, { return o.valueFormatter(v); } - if (o.itemsCreator === BI.emptyFn) { - var result = BI.find(o.items, function (i, item) { - return item.value === v; - }); - - return BI.isNotNull(result) ? result.text : o.text; - } - - return v; + var result = BI.find(o.items, function (i, item) { + return item.value === v; + }); + return BI.isNotNull(result) ? result.text : (o.text ?? v); }, _getShowText: function () { From 6278b5eb2648ededd808114159ba3b179887a5b3 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 12 Aug 2022 17:36:44 +0800 Subject: [PATCH 090/161] auto upgrade version to 2.0.20220812173637 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ba41188b2..b56e45aa9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220812162503", + "version": "2.0.20220812173637", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 1b7c43f20d83be22c4965918ecdbfc6f24be11a8 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 12 Aug 2022 18:06:29 +0800 Subject: [PATCH 091/161] auto upgrade version to 2.0.20220812180611 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b56e45aa9..852797d95 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220812173637", + "version": "2.0.20220812180611", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 5ffe80cdaad61abc59453387509b0698f767ef54 Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 15 Aug 2022 10:06:27 +0800 Subject: [PATCH 092/161] =?UTF-8?q?KERNEL-11286=20feat:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A1=86value,text,defaultText=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E8=A7=84=E5=88=99=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/component/demo.treevaluechoosercombo.js | 3 ++- src/component/treevaluechooser/combo.treevaluechooser.js | 3 ++- src/component/valuechooser/combo.valuechooser.js | 3 ++- src/component/valuechooser/combo.valuechooser.nobar.js | 7 ++++--- .../multilayerselecttree/multilayerselecttree.trigger.js | 4 ++-- 5 files changed, 12 insertions(+), 8 deletions(-) diff --git a/demo/js/component/demo.treevaluechoosercombo.js b/demo/js/component/demo.treevaluechoosercombo.js index 8fa557ee1..9a38fe428 100644 --- a/demo/js/component/demo.treevaluechoosercombo.js +++ b/demo/js/component/demo.treevaluechoosercombo.js @@ -10,7 +10,8 @@ Demo.TreeValueChooser = BI.inherit(BI.Widget, { // items: BI.deepClone(Demo.CONSTANTS.TREEITEMS), itemsCreator: function (op, callback) { callback(BI.deepClone(Demo.CONSTANTS.TREEITEMS)); - } + }, + defaultText: "请选择", }); return { type: "bi.vertical", diff --git a/src/component/treevaluechooser/combo.treevaluechooser.js b/src/component/treevaluechooser/combo.treevaluechooser.js index 4eec5d7c4..33cb4e520 100644 --- a/src/component/treevaluechooser/combo.treevaluechooser.js +++ b/src/component/treevaluechooser/combo.treevaluechooser.js @@ -28,6 +28,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.AbstractTreeValueChooser, { type: "bi.multi_tree_combo", simple: o.simple, text: o.text, + defaultText: o.defaultText, allowEdit: o.allowEdit, value: o.value, watermark: o.watermark, @@ -96,7 +97,7 @@ BI.TreeValueChooserCombo = BI.inherit(BI.AbstractTreeValueChooser, { return this.combo.getValue(); }, - getAllValue: function() { + getAllValue: function () { return this.buildCompleteTree(this.combo.getValue()); }, diff --git a/src/component/valuechooser/combo.valuechooser.js b/src/component/valuechooser/combo.valuechooser.js index 3da94a312..786dc1abd 100644 --- a/src/component/valuechooser/combo.valuechooser.js +++ b/src/component/valuechooser/combo.valuechooser.js @@ -31,6 +31,7 @@ BI.ValueChooserCombo = BI.inherit(BI.AbstractValueChooser, { element: this, allowEdit: o.allowEdit, text: o.text, + defaultText: o.defaultText, value: this._assertValue(o.value), itemsCreator: BI.bind(this._itemsCreator, this), valueFormatter: BI.bind(this._valueFormatter, this), @@ -82,7 +83,7 @@ BI.ValueChooserCombo = BI.inherit(BI.AbstractValueChooser, { }; }, - getAllValue: function() { + getAllValue: function () { var val = this.combo.getValue() || {}; if (val.type === BI.Selection.Multi) { return val.value || []; diff --git a/src/component/valuechooser/combo.valuechooser.nobar.js b/src/component/valuechooser/combo.valuechooser.nobar.js index 927f70f81..2910ea4fa 100644 --- a/src/component/valuechooser/combo.valuechooser.nobar.js +++ b/src/component/valuechooser/combo.valuechooser.nobar.js @@ -25,12 +25,13 @@ BI.ValueChooserNoBarCombo = BI.inherit(BI.AbstractValueChooser, { simple: o.simple, allowEdit: o.allowEdit, text: o.text, + defaultText: o.defaultText, value: this._assertValue(o.value), itemsCreator: BI.bind(this._itemsCreator, this), valueFormatter: BI.bind(this._valueFormatter, this), width: o.width, height: o.height, - ref: function(_ref) { + ref: function (_ref) { self.combo = _ref; }, listeners: [{ @@ -64,7 +65,7 @@ BI.ValueChooserNoBarCombo = BI.inherit(BI.AbstractValueChooser, { self.fireEvent(BI.ValueChooserNoBarCombo.EVENT_CONFIRM); } }] - } + }; }, setValue: function (v) { @@ -75,7 +76,7 @@ BI.ValueChooserNoBarCombo = BI.inherit(BI.AbstractValueChooser, { return this.combo.getValue(); }, - getAllValue: function() { + getAllValue: function () { return this.getValue(); }, diff --git a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js index 179aeeec2..c094bac9e 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js @@ -37,11 +37,11 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { }, isAutoSearch: false, el: { - type: "bi.state_editor", + type: "bi.default_text_editor", ref: function () { self.editor = this; }, - defaultText: o.text, + defaultText: o.defaultText, text: this._digest(o.value), value: o.value, height: o.height, From 4d56c4f129f1536a09ba6ac050d48540a5f23574 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Mon, 15 Aug 2022 14:16:32 +0800 Subject: [PATCH 093/161] KERNEL-12408 --- .eslintrc | 3 ++- src/base/list/__test__/listview.test.js | 3 +-- src/base/list/virtualgrouplist.js | 7 ++++--- src/base/list/virtuallist.js | 7 ++++--- src/base/pager/pager.js | 1 - src/base/single/0.single.js | 12 +++++++----- src/base/single/1.text.js | 8 +++++--- src/base/single/text.pure.js | 5 +++-- 8 files changed, 26 insertions(+), 20 deletions(-) diff --git a/.eslintrc b/.eslintrc index 41426aa36..1d4331f4b 100644 --- a/.eslintrc +++ b/.eslintrc @@ -31,7 +31,8 @@ "rules": { "no-param-reassign": "off", "quotes": [2, "double"], - "comma-dangle": ["error", "never"] // 多行对象字面量中要求拖尾逗号 + "comma-dangle": ["error", "always"], // 多行对象字面量中要求拖尾逗号 + "no-empty":["error", { "allowEmptyCatch": true }] } }, { "files": ["webpack/*.js", "./*.js", "lib/**/*.js", "lib/*.js", "./bin/*.js", "./bin/**/*.js"], diff --git a/src/base/list/__test__/listview.test.js b/src/base/list/__test__/listview.test.js index 4be8993c5..adeb87dfb 100644 --- a/src/base/list/__test__/listview.test.js +++ b/src/base/list/__test__/listview.test.js @@ -6,7 +6,6 @@ // TODO 展示类控件测什么没想好标记一下 describe("ListView && VirtualList", function () { - /** * test_author_windy */ @@ -45,4 +44,4 @@ describe("ListView && VirtualList", function () { }); a.destroy(); }); -}); \ No newline at end of file +}); diff --git a/src/base/list/virtualgrouplist.js b/src/base/list/virtualgrouplist.js index 2dc5f97a5..c18344a12 100644 --- a/src/base/list/virtualgrouplist.js +++ b/src/base/list/virtualgrouplist.js @@ -88,10 +88,11 @@ BI.VirtualGroupList = BI.inherit(BI.Widget, { var minContentHeight = o.scrollTop + height + o.overscanHeight; var index = (this.renderedIndex + 1) * o.blockSize, cnt = this.renderedIndex + 1; var lastHeight; - var getElementHeight = function () { + function getElementHeight () { return self.container.element.height() + self.topBlank.element.height() + self.bottomBlank.element.height(); - }; - while ((lastHeight = this.renderedIndex === -1 ? 0 : getElementHeight()) < minContentHeight && index < o.items.length) { + } + lastHeight = this.renderedIndex === -1 ? 0 : getElementHeight(); + while (lastHeight < minContentHeight && index < o.items.length) { var items = o.items.slice(index, index + o.blockSize); this.container[self.renderedIndex === -1 ? "populate" : "addItems"](items.map(function (item, i) { return o.itemFormatter(item, index + i); diff --git a/src/base/list/virtuallist.js b/src/base/list/virtuallist.js index 7ae32143a..83a0d38de 100644 --- a/src/base/list/virtuallist.js +++ b/src/base/list/virtuallist.js @@ -71,10 +71,11 @@ BI.VirtualList = BI.inherit(BI.Widget, { var minContentHeight = o.scrollTop + height + o.overscanHeight; var index = (this.renderedIndex + 1) * o.blockSize, cnt = this.renderedIndex + 1; var lastHeight; - var getElementHeight = function () { + function getElementHeight() { return self.container.element.height() + self.topBlank.element.height() + self.bottomBlank.element.height(); - }; - while ((lastHeight = getElementHeight()) < minContentHeight && index < o.items.length) { + } + lastHeight = getElementHeight(); + while (lastHeight < minContentHeight && index < o.items.length) { var items = o.items.slice(index, index + o.blockSize); this.container.addItems(items.map(function (item, i) { return o.itemFormatter(item, index + i); diff --git a/src/base/pager/pager.js b/src/base/pager/pager.js index 64ea9a942..c19d3e348 100644 --- a/src/base/pager/pager.js +++ b/src/base/pager/pager.js @@ -41,7 +41,6 @@ BI.Pager = BI.inherit(BI.Widget, { }, render: function () { - var self = this; this.currPage = BI.result(this.options, "curr"); // 翻页太灵敏 // this._lock = false; diff --git a/src/base/single/0.single.js b/src/base/single/0.single.js index 47dc6718f..e271cb5ad 100644 --- a/src/base/single/0.single.js +++ b/src/base/single/0.single.js @@ -15,13 +15,14 @@ var delayingTooltips; BI.Single = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.Single.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { readonly: false, title: null, warningTitle: null, tipType: null, // success或warning - belowMouse: false, // title是否跟随鼠标 - enableHover: false + belowMouse: false, // title是否跟随鼠标 + enableHover: false, }); }, @@ -70,7 +71,7 @@ BI.Single = BI.inherit(BI.Widget, { || BI.isFunction(o.title) || BI.isFunction(o.warningTitle)) { this.enableHover({ belowMouse: o.belowMouse, - container: o.container + container: o.container, }); } }, @@ -136,7 +137,6 @@ BI.Single = BI.inherit(BI.Widget, { } } }, 500); - }); this.element.on("mouseleave.title" + this.getName(), function (e) { self._e = null; @@ -193,6 +193,7 @@ BI.Single = BI.inherit(BI.Widget, { if (BI.isFunction(title)) { return title(); } + return title; }, @@ -201,6 +202,7 @@ BI.Single = BI.inherit(BI.Widget, { if (BI.isFunction(title)) { return title(); } + return title; }, @@ -222,6 +224,6 @@ BI.Single = BI.inherit(BI.Widget, { this.showTimeout = null; } BI.Tooltips.remove(this.getName()); - } + }, }); BI.shortcut("bi.single", BI.Single); diff --git a/src/base/single/1.text.js b/src/base/single/1.text.js index 4a22bf531..2f0fabb0a 100644 --- a/src/base/single/1.text.js +++ b/src/base/single/1.text.js @@ -45,13 +45,13 @@ }); } if (BI.isWidthOrHeight(o.height)) { - this.element.css({lineHeight: BI.isNumber(o.height) ? (o.height / BI.pixRatio + BI.pixUnit) : o.height}); + this.element.css({ lineHeight: BI.isNumber(o.height) ? (o.height / BI.pixRatio + BI.pixUnit) : o.height }); } if (BI.isWidthOrHeight(o.lineHeight)) { - this.element.css({lineHeight: BI.isNumber(o.lineHeight) ? (o.lineHeight / BI.pixRatio + BI.pixUnit) : o.lineHeight}); + this.element.css({ lineHeight: BI.isNumber(o.lineHeight) ? (o.lineHeight / BI.pixRatio + BI.pixUnit) : o.lineHeight }); } if (BI.isWidthOrHeight(o.maxWidth)) { - this.element.css({maxWidth: BI.isNumber(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth}); + this.element.css({ maxWidth: BI.isNumber(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth }); } this.element.css({ textAlign: o.textAlign, @@ -108,6 +108,7 @@ _getShowText: function () { var o = this.options; var text = BI.isFunction(o.text) ? o.text() : o.text; + return BI.isKey(text) ? BI.Text.formatText(text + "") : text; }, @@ -165,6 +166,7 @@ text = formatters[i](text); } } + return text; }; BI.shortcut("bi.text", BI.Text); diff --git a/src/base/single/text.pure.js b/src/base/single/text.pure.js index 7c4d93c0c..07a201369 100644 --- a/src/base/single/text.pure.js +++ b/src/base/single/text.pure.js @@ -5,7 +5,7 @@ BI.PureText = BI.inherit(BI.Widget, { props: { - tagName: null + tagName: null, }, render: function () { @@ -27,6 +27,7 @@ if (!BI.isKey(text)) { return ""; } + return BI.Text.formatText(text + ""); }, @@ -38,7 +39,7 @@ setText: function (text) { this.options.text = BI.isNotNull(text) ? text : ""; this.element.__textKeywordMarked__(this._getShowText()); - } + }, }); BI.shortcut("bi.pure_text", BI.PureText); }()); From d0fb3f62a8d017fc22e15af8c2ec73890d41d601 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Mon, 15 Aug 2022 14:17:40 +0800 Subject: [PATCH 094/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/single/tip/tip.tooltip.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/base/single/tip/tip.tooltip.js b/src/base/single/tip/tip.tooltip.js index 5499f05ac..70c710497 100644 --- a/src/base/single/tip/tip.tooltip.js +++ b/src/base/single/tip/tip.tooltip.js @@ -8,7 +8,7 @@ BI.Tooltip = BI.inherit(BI.Tip, { _const: { hgap: 8, - vgap: 4 + vgap: 4, }, _defaultConfig: function () { @@ -23,12 +23,12 @@ BI.Tooltip = BI.inherit(BI.Tip, { }, render: function () { - var self = this, o = this.options; + var o = this.options; this.element.addClass("tooltip-" + o.level); - var fn = function (e) { + function fn(e) { o.stopPropagation && e.stopPropagation(); o.stopEvent && e.stopEvent(); - }; + } this.element.bind({ click: fn, mousedown: fn, @@ -36,7 +36,7 @@ BI.Tooltip = BI.inherit(BI.Tip, { mouseover: fn, mouseenter: fn, mouseleave: fn, - mousemove: fn + mousemove: fn, }); var texts = (o.text + "").split("\n"); @@ -52,9 +52,9 @@ BI.Tooltip = BI.inherit(BI.Tip, { textAlign: o.textAlign, whiteSpace: "normal", text: text, - textHeight: 18 + textHeight: 18, }; - }) + }), }); } else { this.text = BI.createWidget({ @@ -81,7 +81,7 @@ BI.Tooltip = BI.inherit(BI.Tip, { setLevel: function (level) { this.element.removeClass("tooltip-success").removeClass("tooltip-warning"); this.element.addClass("tooltip-" + level); - } + }, }); BI.shortcut("bi.tooltip", BI.Tooltip); From 8e0d43994647f45d4786a319f08e34028b4f80d7 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 15 Aug 2022 15:58:19 +0800 Subject: [PATCH 095/161] auto upgrade version to 2.0.20220815155758 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 852797d95..384a269cd 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220812180611", + "version": "2.0.20220815155758", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 05de8e3d306833e86c87e7eadd49d969f1a00349 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Mon, 15 Aug 2022 16:02:17 +0800 Subject: [PATCH 096/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 3 +- src/base/1.pane.js | 20 ++-- .../collection/__test__/collection.test.js | 6 +- src/base/collection/collection.js | 22 ++-- src/base/combination/bubble.js | 36 +++--- src/base/combination/combo.js | 34 +++--- src/base/combination/expander.js | 18 +-- src/base/combination/group.button.js | 20 ++-- src/base/combination/group.combo.js | 18 +-- src/base/combination/group.virtual.js | 16 +-- src/base/combination/loader.js | 32 +++--- src/base/combination/navigation.js | 16 +-- src/base/combination/searcher.js | 22 ++-- src/base/combination/switcher.js | 22 ++-- src/base/combination/tab.js | 16 +-- src/base/combination/tree.button.js | 4 +- src/base/context.js | 6 +- src/base/el.js | 6 +- src/base/foundation/__test__/message.test.js | 2 +- src/base/foundation/message.js | 62 +++++------ src/base/grid/__test__/grid.test.js | 4 +- src/base/grid/grid.js | 24 ++-- src/base/layer/__test__/layer.popover.test.js | 6 +- src/base/layer/layer.drawer.js | 62 +++++------ src/base/layer/layer.popover.js | 72 ++++++------ src/base/layer/layer.popup.js | 104 +++++++++--------- src/base/layer/layer.searcher.js | 34 +++--- src/base/list/__test__/listview.test.js | 10 +- src/base/list/listview.js | 10 +- src/base/list/virtualgrouplist.js | 14 +-- src/base/list/virtuallist.js | 12 +- src/base/pager/pager.js | 40 +++---- src/base/single/1.text.js | 26 ++--- src/base/single/label/abstract.label.js | 89 +++++++++------ src/base/single/label/html.label.js | 9 +- src/base/single/label/icon.label.js | 10 +- src/base/single/label/label.js | 4 +- src/base/single/link/__test__/link.test.js | 7 +- src/base/single/link/link.js | 8 +- src/base/single/tip/0.tip.js | 9 +- src/base/single/tip/tip.toast.js | 19 ++-- src/base/single/trigger/trigger.js | 3 +- src/base/tree/customtree.js | 20 ++-- 43 files changed, 499 insertions(+), 478 deletions(-) diff --git a/.eslintrc b/.eslintrc index 1d4331f4b..a0374a47e 100644 --- a/.eslintrc +++ b/.eslintrc @@ -31,8 +31,7 @@ "rules": { "no-param-reassign": "off", "quotes": [2, "double"], - "comma-dangle": ["error", "always"], // 多行对象字面量中要求拖尾逗号 - "no-empty":["error", { "allowEmptyCatch": true }] + "comma-dangle": ["error", { "arrays": "never", "objects": "always"}], // 多行对象字面量中要求拖尾逗号 } }, { "files": ["webpack/*.js", "./*.js", "lib/**/*.js", "lib/*.js", "./bin/*.js", "./bin/**/*.js"], diff --git a/src/base/1.pane.js b/src/base/1.pane.js index 074d6a492..d628ae7bf 100644 --- a/src/base/1.pane.js +++ b/src/base/1.pane.js @@ -15,7 +15,7 @@ BI.Pane = BI.inherit(BI.Widget, { loadingText: "", loadingSize: "small", overlap: true, - onLoaded: BI.emptyFn + onLoaded: BI.emptyFn, }); }, @@ -32,8 +32,8 @@ BI.Pane = BI.inherit(BI.Widget, { }, cls: "bi-tips", text: o.tipText, - height: 25 - }] + height: 25, + }], }); } }, @@ -42,7 +42,7 @@ BI.Pane = BI.inherit(BI.Widget, { var self = this, o = this.options; var loadingAnimation = BI.createWidget(BI.Providers.getProvider("bi.provider.system").getLoading({ loadingSize: o.loadingSize, - context: this + context: this, })); // pane在同步方式下由items决定tipText的显示与否 // loading的异步情况下由loaded后对面板的populate的时机决定 @@ -53,7 +53,7 @@ BI.Pane = BI.inherit(BI.Widget, { type: "bi.center_adapt", cls: "loading-container", items: this._getLoadingTipItems(loadingAnimation), - element: BI.Layers.make(this.getName() + "-loading", this) + element: BI.Layers.make(this.getName() + "-loading", this), }); } BI.Layers.show(self.getName() + "-loading"); @@ -63,7 +63,7 @@ BI.Pane = BI.inherit(BI.Widget, { type: "bi.center_adapt", element: this, cls: "loading-container", - items: this._getLoadingTipItems(loadingAnimation) + items: this._getLoadingTipItems(loadingAnimation), }); } self.fireEvent(BI.Pane.EVENT_LOADING); @@ -78,12 +78,12 @@ BI.Pane = BI.inherit(BI.Widget, { var self = this, o = this.options; var loadingTipItems = [{ type: "bi.horizontal_adapt", - items: [loadingTip] + items: [loadingTip], }]; BI.isNotEmptyString(o.loadingText) && loadingTipItems.push({ type: "bi.text", text: o.loadingText, - tgap: this._getSize(10) + tgap: this._getSize(10), }); return [{ @@ -91,7 +91,7 @@ BI.Pane = BI.inherit(BI.Widget, { ref: function (_ref) { self._loading = _ref; }, - items: loadingTipItems + items: loadingTipItems, }]; }, @@ -125,7 +125,7 @@ BI.Pane = BI.inherit(BI.Widget, { populate: function (items) { this.options.items = items || []; this.check(); - } + }, }); BI.Pane.EVENT_LOADED = "EVENT_LOADED"; BI.Pane.EVENT_LOADING = "EVENT_LOADING"; diff --git a/src/base/collection/__test__/collection.test.js b/src/base/collection/__test__/collection.test.js index 6ce44fc22..380b84d4b 100644 --- a/src/base/collection/__test__/collection.test.js +++ b/src/base/collection/__test__/collection.test.js @@ -14,7 +14,7 @@ describe("CollectionTest", function () { for (var i = 0; i < cellCount; i++) { items[i] = { type: "bi.label", - text: i + text: i, }; } var grid = BI.Test.createWidget({ @@ -27,9 +27,9 @@ describe("CollectionTest", function () { x: index % 10 * 50, y: Math.floor(index / 10) * 50, width: 50, - height: 50 + height: 50, }; - } + }, }); // TODO 列表展示类控件不知道该测什么,先标记一下 grid.destroy(); diff --git a/src/base/collection/collection.js b/src/base/collection/collection.js index 1d56702fe..f6bbcc774 100644 --- a/src/base/collection/collection.js +++ b/src/base/collection/collection.js @@ -24,7 +24,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { items: [], itemFormatter: function (item, index) { return item; - } + }, }); }, @@ -38,7 +38,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { self._scrollLock = false; }, 1000 / 60); this.container = BI._lazyCreateWidget({ - type: "bi.absolute" + type: "bi.absolute", }); this.element.scroll(function () { if (self._scrollLock === true) { @@ -49,7 +49,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { self._calculateChildrenToRender(); self.fireEvent(BI.CollectionView.EVENT_SCROLL, { scrollLeft: o.scrollLeft, - scrollTop: o.scrollTop + scrollTop: o.scrollTop, }); }); // 兼容一下 @@ -71,7 +71,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { scrollable: scrollable, scrolly: scrolly, scrollx: scrollx, - items: [this.container] + items: [this.container], }); o.items = BI.isFunction(o.items) ? this.__watch(o.items, function (context, newValue) { self.populate(newValue); @@ -204,18 +204,18 @@ BI.CollectionView = BI.inherit(BI.Widget, { child = BI._lazyCreateWidget(BI.extend({ type: "bi.label", width: datum.width, - height: datum.height + height: datum.height, }, item, { cls: (item.cls || "") + " collection-cell" + (datum.y === 0 ? " first-row" : "") + (datum.x === 0 ? " first-col" : ""), _left: datum.x, - _top: datum.y + _top: datum.y, })); renderedCells.push({ el: child, left: datum.x, top: datum.y, _left: datum.x, - _top: datum.y + _top: datum.y, // _width: datum.width, // _height: datum.height }); @@ -282,7 +282,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { var minY = BI.max(topBorder); var maxY = BI.min(bottomBorder); - this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY }; + this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY, }; } }, @@ -341,7 +341,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { if (this.options.overflowX !== !!b) { this.options.overflowX = !!b; BI.nextTick(function () { - self.element.css({ overflowX: b ? "auto" : "hidden" }); + self.element.css({ overflowX: b ? "auto" : "hidden", }); }); } }, @@ -351,7 +351,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { if (this.options.overflowY !== !!b) { this.options.overflowY = !!b; BI.nextTick(function () { - self.element.css({ overflowY: b ? "auto" : "hidden" }); + self.element.css({ overflowY: b ? "auto" : "hidden", }); }); } }, @@ -398,7 +398,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { this.restore(); } this._populate(items); - } + }, }); BI.CollectionView.EVENT_SCROLL = "EVENT_SCROLL"; BI.shortcut("bi.collection_view", BI.CollectionView); diff --git a/src/base/combination/bubble.js b/src/base/combination/bubble.js index 288612a0c..0e8a79673 100644 --- a/src/base/combination/bubble.js +++ b/src/base/combination/bubble.js @@ -10,14 +10,14 @@ return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-popper", attributes: { - tabIndex: -1 + tabIndex: -1, }, trigger: "click", // click || hover || click-hover || "" toggle: true, direction: "", placement: "bottom-start", // top-start/top/top-end/bottom-start/bottom/bottom-end/left-start/left/left-end/right-start/right/right-end logic: { - dynamic: true + dynamic: true, }, container: null, // popupview放置的容器,默认为this.element isDefaultInit: false, @@ -37,7 +37,7 @@ el: {}, popup: {}, comboClass: "bi-combo-popup", - hoverClass: "bi-combo-hover" + hoverClass: "bi-combo-hover", }); }, @@ -82,11 +82,11 @@ }); BI.createWidget(BI.extend({ - element: this + element: this, }, BI.LogicFactory.createLogic("vertical", BI.extend(o.logic, { items: [ - { el: this.combo } - ] + { el: this.combo, } + ], })))); o.isDefaultInit && (this._assertPopupView()); }, @@ -172,7 +172,7 @@ } }, BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, }); self.element.off(ev + "." + self.getName()).on(ev + "." + self.getName(), function (e) { debounce(e); @@ -195,7 +195,7 @@ } }, BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, }); self.element.off("click." + self.getName()).on("click." + self.getName(), function (e) { debounce(e); @@ -226,7 +226,7 @@ _initCombo: function () { this.combo = BI.createWidget(this.options.el, { - value: this.options.value + value: this.options.value, }); }, @@ -236,7 +236,7 @@ this.popupView = BI.createWidget(BI.isFunction(this.options.popup) ? this.options.popup() : this.options.popup, { type: "bi.bubble_popup_view", showArrow: o.showArrow, - value: o.value + value: o.value, }, this); this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { if (type === BI.Events.CLICK) { @@ -260,8 +260,8 @@ scrolly: false, element: this.options.container || this, items: [ - { el: this.popupView } - ] + { el: this.popupView, } + ], }); this._rendered = true; } @@ -339,22 +339,22 @@ options: { offset: function () { return [o.adjustXOffset, (o.showArrow ? 12 : 0) + (o.adjustYOffset + o.adjustLength)]; - } - } + }, + }, }]; if (this.options.showArrow) { modifiers.push({ name: "arrow", options: { padding: 4, - element: this.popupView.arrow.element[0] - } + element: this.popupView.arrow.element[0], + }, }); } this.popper = BI.Popper.createPopper(this.combo.element[0], this.popupView.element[0], { placement: o.placement, strategy: "fixed", - modifiers: modifiers + modifiers: modifiers, }); // this.adjustHeight(e); @@ -482,7 +482,7 @@ this.popper && this.popper.destroy(); this.popper = null; this.popupView && this.popupView._destroy(); - } + }, }); BI.Bubble.EVENT_TRIGGER_CHANGE = "EVENT_TRIGGER_CHANGE"; BI.Bubble.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/combination/combo.js b/src/base/combination/combo.js index c44338429..23e05c8b8 100644 --- a/src/base/combination/combo.js +++ b/src/base/combination/combo.js @@ -8,7 +8,7 @@ */ BI.Combo = BI.inherit(BI.Bubble, { _const: { - TRIANGLE_LENGTH: 12 + TRIANGLE_LENGTH: 12, }, _defaultConfig: function () { var conf = BI.Combo.superclass._defaultConfig.apply(this, arguments); @@ -16,13 +16,13 @@ return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-combo" + (BI.isIE() ? " hack" : ""), attributes: { - tabIndex: -1 + tabIndex: -1, }, trigger: "click", // click || hover || click-hover || "" toggle: true, direction: "bottom", // top||bottom||left||right||top,left||top,right||bottom,left||bottom,right||right,innerRight||right,innerLeft||innerRight||innerLeft logic: { - dynamic: true + dynamic: true, }, container: null, // popupview放置的容器,默认为this.element isDefaultInit: false, @@ -44,7 +44,7 @@ popup: {}, comboClass: "bi-combo-popup", hoverClass: "bi-combo-hover", - belowMouse: false + belowMouse: false, }); }, @@ -92,11 +92,11 @@ }); BI.createWidget(BI.extend({ - element: this + element: this, }, BI.LogicFactory.createLogic("vertical", BI.extend(o.logic, { items: [ - { el: this.combo } - ] + { el: this.combo, } + ], })))); o.isDefaultInit && (this._assertPopupView()); BI.Resizers.add(this.getName(), BI.bind(function (e) { @@ -113,7 +113,7 @@ this.popupView = BI.createWidget(BI.isFunction(this.options.popup) ? this.options.popup() : this.options.popup, { type: "bi.popup_view", showArrow: o.showArrow, - value: o.value + value: o.value, }, this); this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { if (type === BI.Events.CLICK) { @@ -160,7 +160,7 @@ this._assertPopupViewRender(); this.fireEvent(BI.Combo.EVENT_BEFORE_POPUPVIEW); // popupVisible是为了获取其宽高, 放到可视范围之外以防止在IE下闪一下 - this.popupView.css({ left: -999999999, top: -99999999 }); + this.popupView.css({ left: -999999999, top: -99999999, }); this.popupView.visible(); BI.each(needHideWhenAnotherComboOpen, function (i, combo) { if (i !== self.getName()) { @@ -197,7 +197,7 @@ offset: function () { return { left: e.pageX, - top: e.pageY + top: e.pageY, }; }, bounds: function () { @@ -206,7 +206,7 @@ x: e.offsetX, y: e.offsetY, width: 0, - height: 24 + height: 24, }; }, outerWidth: function () { @@ -214,8 +214,8 @@ }, outerHeight: function () { return 24; - } - } + }, + }, } : this.combo; switch (o.direction) { case "bottom": @@ -297,16 +297,16 @@ offsetStyle: o.offsetStyle, adjustXOffset: o.adjustXOffset, adjustYOffset: o.adjustYOffset, - offset: this.combo.element.offset() + offset: this.combo.element.offset(), }); if ("left" in p) { this.popupView.element.css({ - left: p.left + left: p.left, }); } if ("top" in p) { this.popupView.element.css({ - top: p.top + top: p.top, }); } this.position = p; @@ -326,7 +326,7 @@ this.popupView && this.popupView._destroy(); delete needHideWhenAnotherComboOpen[this.getName()]; delete currentOpenedCombos[this.getName()]; - } + }, }); BI.Combo.closeAll = function () { BI.each(currentOpenedCombos, function (i, combo) { diff --git a/src/base/combination/expander.js b/src/base/combination/expander.js index f3d87109b..5e99dacbd 100644 --- a/src/base/combination/expander.js +++ b/src/base/combination/expander.js @@ -17,7 +17,7 @@ BI.Expander = BI.inherit(BI.Widget, { el: {}, popup: {}, expanderClass: "bi-expander-popup", - hoverClass: "bi-expander-hover" + hoverClass: "bi-expander-hover", }); }, @@ -65,8 +65,8 @@ BI.Expander = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.expander } - ] + { el: this.expander, } + ], }); o.isDefaultInit && this._assertPopupView(); if (this.expander.isOpened() === true) { @@ -122,7 +122,7 @@ BI.Expander = BI.inherit(BI.Widget, { } }, BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, })); } break; @@ -145,9 +145,9 @@ BI.Expander = BI.inherit(BI.Widget, { layouts: [{ type: "bi.vertical", hgap: 0, - vgap: 0 + vgap: 0, }], - value: o.value + value: o.value, }, this); this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -171,8 +171,8 @@ BI.Expander = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.popupView } - ] + { el: this.popupView, } + ], }); this._rendered = true; } @@ -271,7 +271,7 @@ BI.Expander = BI.inherit(BI.Widget, { destroy: function () { BI.Expander.superclass.destroy.apply(this, arguments); - } + }, }); BI.Expander.EVENT_EXPAND = "EVENT_EXPAND"; BI.Expander.EVENT_COLLAPSE = "EVENT_COLLAPSE"; diff --git a/src/base/combination/group.button.js b/src/base/combination/group.button.js index fa91d7239..aa73851a6 100644 --- a/src/base/combination/group.button.js +++ b/src/base/combination/group.button.js @@ -15,8 +15,8 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { layouts: [{ type: "bi.center", hgap: 0, - vgap: 0 - }] + vgap: 0, + }], }); }, @@ -25,7 +25,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { var behaviors = {}; BI.each(o.behaviors, function (key, rule) { behaviors[key] = BI.BehaviorFactory.createBehavior(key, { - rule: rule + rule: rule, }); }); this.behaviors = behaviors; @@ -43,7 +43,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { _createBtns: function (items) { return BI.createWidgets(BI.createItems(items, { - type: "bi.text_button" + type: "bi.text_button", }), this); }, @@ -90,9 +90,9 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { return BI.extend({}, layouts[i], { items: [ BI.extend({}, layouts[i].el, { - el: it + el: it, }) - ] + ], }); }); } @@ -109,7 +109,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { } return BI.extend({}, item, { - el: btns[i] + el: btns[i], }); }); }, @@ -203,7 +203,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { items = this._packageItems(items, this._packageBtns(this.buttons)); } - this.layouts = BI.createWidget(BI.extend({ element: this }, this._packageLayout(items))); + this.layouts = BI.createWidget(BI.extend({ element: this, }, this._packageLayout(items))); }, setNotSelectedValue: function (v) { @@ -365,14 +365,14 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { destroy: function () { BI.ButtonGroup.superclass.destroy.apply(this, arguments); this.options.items = []; - } + }, }); BI.extend(BI.ButtonGroup, { CHOOSE_TYPE_SINGLE: BI.Selection.Single, CHOOSE_TYPE_MULTI: BI.Selection.Multi, CHOOSE_TYPE_ALL: BI.Selection.All, CHOOSE_TYPE_NONE: BI.Selection.None, - CHOOSE_TYPE_DEFAULT: BI.Selection.Default + CHOOSE_TYPE_DEFAULT: BI.Selection.Default, }); BI.ButtonGroup.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/combination/group.combo.js b/src/base/combination/group.combo.js index 9e4d56749..1b77ddc3a 100644 --- a/src/base/combination/group.combo.js +++ b/src/base/combination/group.combo.js @@ -15,7 +15,7 @@ BI.ComboGroup = BI.inherit(BI.Widget, { isNeedAdjustHeight: false, isNeedAdjustWidth: false, - el: { type: "bi.text_button", text: "", value: "" }, + el: { type: "bi.text_button", text: "", value: "", }, items: [], popup: { @@ -23,10 +23,10 @@ BI.ComboGroup = BI.inherit(BI.Widget, { type: "bi.button_tree", chooseType: 0, layouts: [{ - type: "bi.vertical" - }] - } - } + type: "bi.vertical", + }], + }, + }, }); }, @@ -71,9 +71,9 @@ BI.ComboGroup = BI.inherit(BI.Widget, { el: item, popup: BI.extend({}, o.popup, { el: BI.extend({ - items: children - }, o.popup.el) - }) + items: children, + }, o.popup.el), + }), }); this.combo.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -89,7 +89,7 @@ BI.ComboGroup = BI.inherit(BI.Widget, { setValue: function (v) { this.combo.setValue(v); - } + }, }); BI.ComboGroup.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/combination/group.virtual.js b/src/base/combination/group.virtual.js index 7efe85716..a6f481a9d 100644 --- a/src/base/combination/group.virtual.js +++ b/src/base/combination/group.virtual.js @@ -6,8 +6,8 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { layouts: [{ type: "bi.center", hgap: 0, - vgap: 0 - }] + vgap: 0, + }], }); }, @@ -41,10 +41,10 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { if (BI.isKey(map[el.value])) { map[el.value] = _ref; } - } - }, el) + }, + }, el), }) - ] + ], }); }); } @@ -132,13 +132,13 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { this.options.items = items; items = this._packageBtns(items); if (!this.layouts) { - this.layouts = BI.createWidget(BI.extend({ element: this }, this._packageLayout(items))); + this.layouts = BI.createWidget(BI.extend({ element: this, }, this._packageLayout(items))); } else { this.layouts.populate(items, { - context: this + context: this, }); } - } + }, }); BI.VirtualGroup.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/combination/loader.js b/src/base/combination/loader.js index b873d09c0..a666fda1a 100644 --- a/src/base/combination/loader.js +++ b/src/base/combination/loader.js @@ -14,12 +14,12 @@ BI.Loader = BI.inherit(BI.Widget, { isDefaultInit: true, // 是否默认初始化数据 logic: { dynamic: true, - scrolly: true + scrolly: true, }, // 下面是button_group的属性 el: { - type: "bi.button_group" + type: "bi.button_group", }, items: [], @@ -31,14 +31,14 @@ BI.Loader = BI.inherit(BI.Widget, { prev: false, next: {}, hasPrev: BI.emptyFn, - hasNext: BI.emptyFn + hasNext: BI.emptyFn, }); }, _prevLoad: function () { var self = this, o = this.options; this.prev.setLoading(); - o.itemsCreator.apply(this, [{ times: --this.times }, function () { + o.itemsCreator.apply(this, [{ times: --this.times, }, function () { self.prev.setLoaded(); self.prependItems.apply(self, arguments); }]); @@ -47,7 +47,7 @@ BI.Loader = BI.inherit(BI.Widget, { _nextLoad: function () { var self = this, o = this.options; this.next.setLoading(); - o.itemsCreator.apply(this, [{ times: ++this.times }, function () { + o.itemsCreator.apply(this, [{ times: ++this.times, }, function () { self.next.setLoaded(); self.addItems.apply(self, arguments); }]); @@ -61,7 +61,7 @@ BI.Loader = BI.inherit(BI.Widget, { } if (o.prev !== false) { this.prev = BI.createWidget(BI.extend({ - type: "bi.loading_bar" + type: "bi.loading_bar", }, o.prev)); this.prev.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { @@ -76,9 +76,9 @@ BI.Loader = BI.inherit(BI.Widget, { items: o.items, behaviors: {}, layouts: [{ - type: "bi.vertical" + type: "bi.vertical", }], - value: o.value + value: o.value, }); this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -89,7 +89,7 @@ BI.Loader = BI.inherit(BI.Widget, { if (o.next !== false) { this.next = BI.createWidget(BI.extend({ - type: "bi.loading_bar" + type: "bi.loading_bar", }, o.next)); this.next.on(BI.Controller.EVENT_CHANGE, function (type) { if (type === BI.Events.CLICK) { @@ -99,11 +99,11 @@ BI.Loader = BI.inherit(BI.Widget, { } BI.createWidget(BI.extend({ - element: this + element: this, }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({ - scrolly: true + scrolly: true, }, o.logic, { - items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.prev, this.button_group, this.next) + items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.prev, this.button_group, this.next), })))); o.isDefaultInit && BI.isEmpty(o.items) && BI.nextTick(BI.bind(function () { @@ -125,7 +125,7 @@ BI.Loader = BI.inherit(BI.Widget, { return !!o.hasPrev.apply(this, [{ times: this.times, - count: this.count + count: this.count, }]); }, @@ -137,7 +137,7 @@ BI.Loader = BI.inherit(BI.Widget, { return !!o.hasNext.apply(this, [{ times: this.times, - count: this.count + count: this.count, }]); }, @@ -170,7 +170,7 @@ BI.Loader = BI.inherit(BI.Widget, { _populate: function (items) { var self = this, o = this.options; if (arguments.length === 0 && (BI.isFunction(o.itemsCreator))) { - o.itemsCreator.apply(this, [{ times: 1 }, function () { + o.itemsCreator.apply(this, [{ times: 1, }, function () { if (arguments.length === 0) { throw new Error("参数不能为空"); } @@ -259,7 +259,7 @@ BI.Loader = BI.inherit(BI.Widget, { destroy: function () { BI.Loader.superclass.destroy.apply(this, arguments); - } + }, }); BI.Loader.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.loader", BI.Loader); diff --git a/src/base/combination/navigation.js b/src/base/combination/navigation.js index 7223a1c5f..5004a660e 100644 --- a/src/base/combination/navigation.js +++ b/src/base/combination/navigation.js @@ -7,7 +7,7 @@ BI.Navigation = BI.inherit(BI.Widget, { return BI.extend(BI.Navigation.superclass._defaultConfig.apply(this, arguments), { direction: "bottom", // top, bottom, left, right, custom logic: { - dynamic: false + dynamic: false, }, single: false, showIndex: false, @@ -17,22 +17,22 @@ BI.Navigation = BI.inherit(BI.Widget, { }, afterCardCreated: BI.emptyFn, - afterCardShow: BI.emptyFn + afterCardShow: BI.emptyFn, }); }, render: function () { var self = this, o = this.options; - this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group" }); + this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group", }); this.cardMap = {}; this.showIndex = 0; this.layout = BI.createWidget({ - type: "bi.card" + type: "bi.card", }); BI.createWidget(BI.extend({ - element: this + element: this, }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, { - items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tab, this.layout) + items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tab, this.layout), })))); @@ -49,7 +49,7 @@ BI.Navigation = BI.inherit(BI.Widget, { return card; }, afterCardCreated: BI.bind(this.afterCardCreated, this), - afterCardShow: BI.bind(this.afterCardShow, this) + afterCardShow: BI.bind(this.afterCardShow, this), }); if (BI.isFunction(o.showIndex)) { @@ -162,7 +162,7 @@ BI.Navigation = BI.inherit(BI.Widget, { destroy: function () { BI.Navigation.superclass.destroy.apply(this, arguments); - } + }, }); BI.Navigation.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/combination/searcher.js b/src/base/combination/searcher.js index 14efe2e77..2098f4ce0 100644 --- a/src/base/combination/searcher.js +++ b/src/base/combination/searcher.js @@ -28,17 +28,17 @@ BI.Searcher = BI.inherit(BI.Widget, { }, el: { - type: "bi.search_editor" + type: "bi.search_editor", }, popup: { - type: "bi.searcher_view" + type: "bi.searcher_view", }, adapter: null, masker: { // masker层 - offset: {} - } + offset: {}, + }, }); }, @@ -46,7 +46,7 @@ BI.Searcher = BI.inherit(BI.Widget, { var self = this, o = this.options; this.editor = BI.createWidget(o.el, { - type: "bi.search_editor" + type: "bi.search_editor", }); BI.createWidget({ @@ -58,13 +58,13 @@ BI.Searcher = BI.inherit(BI.Widget, { bgap: o.bgap, vgap: o.vgap, hgap: o.hgap, - items: [this.editor] + items: [this.editor], }); o.isDefaultInit && (this._assertPopupView()); var search = BI.debounce(BI.bind(this._search, this), BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, }); this.editor.on(BI.Controller.EVENT_CHANGE, function (type) { switch (type) { @@ -93,7 +93,7 @@ BI.Searcher = BI.inherit(BI.Widget, { if ((o.masker && !BI.Maskers.has(this.getName())) || (o.masker === false && !this.popupView)) { this.popupView = BI.createWidget(o.popup, { type: "bi.searcher_view", - chooseType: o.chooseType + chooseType: o.chooseType, }); this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -125,7 +125,7 @@ BI.Searcher = BI.inherit(BI.Widget, { if (o.masker && !BI.Maskers.has(this.getName())) { BI.Maskers.create(this.getName(), o.adapter, BI.extend({ container: this, - render: this.popupView + render: this.popupView, }, o.masker), this); } }, @@ -185,7 +185,7 @@ BI.Searcher = BI.inherit(BI.Widget, { o.onSearch({ times: 1, keyword: keyword, - selectedValues: o.adapter && o.adapter.getValue() + selectedValues: o.adapter && o.adapter.getValue(), }, function (searchResult, matchResult) { if (!self._stop && keyword === self.editor.getValue()) { var args = [].slice.call(arguments); @@ -325,7 +325,7 @@ BI.Searcher = BI.inherit(BI.Widget, { setWaterMark: function (v) { this.editor.setWaterMark(v); - } + }, }); BI.Searcher.EVENT_CHANGE = "EVENT_CHANGE"; BI.Searcher.EVENT_START = "EVENT_START"; diff --git a/src/base/combination/switcher.js b/src/base/combination/switcher.js index ce0a623e2..3f5bd4936 100644 --- a/src/base/combination/switcher.js +++ b/src/base/combination/switcher.js @@ -18,7 +18,7 @@ BI.Switcher = BI.inherit(BI.Widget, { adapter: null, masker: {}, switcherClass: "bi-switcher-popup", - hoverClass: "bi-switcher-hover" + hoverClass: "bi-switcher-hover", }); }, @@ -65,8 +65,8 @@ BI.Switcher = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.switcher } - ] + { el: this.switcher, } + ], }); o.isDefaultInit && (this._assertPopupView()); }, @@ -119,7 +119,7 @@ BI.Switcher = BI.inherit(BI.Widget, { } }, BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, })); } break; @@ -129,7 +129,7 @@ BI.Switcher = BI.inherit(BI.Widget, { _initSwitcher: function () { this.switcher = BI.createWidget(this.options.el, { - value: this.options.value + value: this.options.value, }); }, @@ -138,14 +138,14 @@ BI.Switcher = BI.inherit(BI.Widget, { if (!this._created) { this.popupView = BI.createWidget(o.popup, { type: "bi.button_group", - element: o.adapter && BI.Maskers.create(this.getName(), o.adapter, BI.extend({ container: this }, o.masker)), + element: o.adapter && BI.Maskers.create(this.getName(), o.adapter, BI.extend({ container: this, }, o.masker)), cls: "switcher-popup", layouts: [{ type: "bi.vertical", hgap: 0, - vgap: 0 + vgap: 0, }], - value: o.value + value: o.value, }, this); this.popupView.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -159,8 +159,8 @@ BI.Switcher = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.popupView } - ] + { el: this.popupView, } + ], }); } this._created = true; @@ -279,7 +279,7 @@ BI.Switcher = BI.inherit(BI.Widget, { empty: function () { this.popupView && this.popupView.empty(); - } + }, }); BI.Switcher.EVENT_EXPAND = "EVENT_EXPAND"; BI.Switcher.EVENT_COLLAPSE = "EVENT_COLLAPSE"; diff --git a/src/base/combination/tab.js b/src/base/combination/tab.js index 3020859f5..196c90850 100644 --- a/src/base/combination/tab.js +++ b/src/base/combination/tab.js @@ -9,34 +9,34 @@ BI.Tab = BI.inherit(BI.Widget, { direction: "top", // top, bottom, left, right, custom single: false, // 是不是单页面 logic: { - dynamic: false + dynamic: false, }, showIndex: false, tab: false, cardCreator: function (v) { return BI.createWidget(); }, - keepAlives: [] + keepAlives: [], }); }, render: function () { var self = this, o = this.options; if (BI.isObject(o.tab)) { - this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group" }); + this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group", }); this.tab.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); } this.cardMap = {}; this.layout = BI.createWidget({ - type: "bi.card" + type: "bi.card", }); BI.createWidget(BI.extend({ - element: this + element: this, }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, { - items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tab, this.layout) + items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tab, this.layout), })))); var listener = new BI.ShowListener({ @@ -51,7 +51,7 @@ BI.Tab = BI.inherit(BI.Widget, { afterCardShow: function (v) { self._deleteOtherCards(v); self.curr = v; - } + }, }); listener.on(BI.ShowListener.EVENT_CHANGE, function (value) { self.fireEvent(BI.Tab.EVENT_CHANGE, value, self); @@ -170,7 +170,7 @@ BI.Tab = BI.inherit(BI.Widget, { destroy: function () { this.cardMap = {}; BI.Tab.superclass.destroy.apply(this, arguments); - } + }, }); BI.Tab.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/combination/tree.button.js b/src/base/combination/tree.button.js index 457c5afd5..cfa9a3c3b 100644 --- a/src/base/combination/tree.button.js +++ b/src/base/combination/tree.button.js @@ -7,7 +7,7 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { _defaultConfig: function () { return BI.extend(BI.ButtonTree.superclass._defaultConfig.apply(this, arguments), { - baseCls: "bi-button-tree" + baseCls: "bi-button-tree", }); }, @@ -192,7 +192,7 @@ BI.ButtonTree = BI.inherit(BI.ButtonGroup, { }); return node; - } + }, }); BI.ButtonTree.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/context.js b/src/base/context.js index ecaf5febf..67ef704c0 100644 --- a/src/base/context.js +++ b/src/base/context.js @@ -10,13 +10,13 @@ BI.Context = BI.inherit(BI.Widget, { context: "", watch: {}, el: {}, - items: [] + items: [], }, render: function () { var self = this, o = this.options; this.context = BI.createWidget(o.items[0] || o.el, { - element: this + element: this, }); this.context.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -40,6 +40,6 @@ BI.Context = BI.inherit(BI.Widget, { populate: function () { this.context.populate.apply(this, arguments); - } + }, }); BI.shortcut("bi.context", BI.Context); diff --git a/src/base/el.js b/src/base/el.js index 6feb40f42..885c04ac5 100644 --- a/src/base/el.js +++ b/src/base/el.js @@ -9,14 +9,14 @@ BI.EL = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.EL.superclass._defaultConfig.apply(this, arguments), { baseCls: "bi-el", - el: {} + el: {}, }); }, render: function () { var self = this, o = this.options; this.ele = BI.createWidget(o.el, { - element: this + element: this, }); this.ele.on(BI.Controller.EVENT_CHANGE, function () { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -33,6 +33,6 @@ BI.EL = BI.inherit(BI.Widget, { populate: function () { this.ele.populate.apply(this, arguments); - } + }, }); BI.shortcut("bi.el", BI.EL); diff --git a/src/base/foundation/__test__/message.test.js b/src/base/foundation/__test__/message.test.js index 5e4890147..ac391bc07 100644 --- a/src/base/foundation/__test__/message.test.js +++ b/src/base/foundation/__test__/message.test.js @@ -23,7 +23,7 @@ describe("MessageTest", function () { */ it("toast_hand_close", function (done) { BI.Msg.toast("message", { - autoClose: false + autoClose: false, }); var body = BI.Widget._renderEngine.createElement("body"); expect(body.find(".bi-toast").length).to.equal(1); diff --git a/src/base/foundation/message.js b/src/base/foundation/message.js index 875a244e5..76d82f5e5 100644 --- a/src/base/foundation/message.js +++ b/src/base/foundation/message.js @@ -21,7 +21,7 @@ BI.Msg = ((function () { // BI.Msg.prompt(title, message, value, callback, min_width); }, toast: function (message, options, context) { - BI.isString(options) && (options = { level: options }); + BI.isString(options) && (options = { level: options, }); options = options || {}; context = context || BI.Widget._renderEngine.createElement("body"); var level = options.level || "common"; @@ -40,12 +40,12 @@ BI.Msg = ((function () { BI.remove(toastStack, toast.element); var _height = BI.SIZE_CONSANTS.TOAST_TOP; BI.each(toastStack, function (i, element) { - element.css({ "top": _height }); + element.css({ "top": _height, }); _height += element.outerHeight() + 10; }); callback(); - } - }] + }, + }], }); var height = BI.SIZE_CONSANTS.TOAST_TOP; BI.each(toastStack, function (i, element) { @@ -57,11 +57,11 @@ BI.Msg = ((function () { items: [{ el: toast, left: "50%", - top: height - }] + top: height, + }], }); toastStack.push(toast.element); - toast.element.css({ "margin-left": -1 * toast.element.outerWidth() / 2 }); + toast.element.css({ "margin-left": -1 * toast.element.outerWidth() / 2, }); toast.element.removeClass("bi-message-leave").addClass("bi-message-enter"); autoClose && BI.delay(function () { @@ -82,7 +82,7 @@ BI.Msg = ((function () { left: 0, right: 0, bottom: 0, - opacity: 0.5 + opacity: 0.5, }).appendTo("body")); $pop = BI.Widget._renderEngine.createElement("

    ").css({ position: "absolute", @@ -90,7 +90,7 @@ BI.Msg = ((function () { top: 0, left: 0, right: 0, - bottom: 0 + bottom: 0, }).appendTo("body"); function close () { messageShows[messageShows.length - 1].destroy(); @@ -112,8 +112,8 @@ BI.Msg = ((function () { if (BI.isFunction(callback)) { callback.apply(null, [false]); } - } - } + }, + }, }); } controlItems.push({ @@ -125,8 +125,8 @@ BI.Msg = ((function () { if (BI.isFunction(callback)) { callback.apply(null, [true]); } - } - } + }, + }, }); var conf = { element: $pop, @@ -135,7 +135,7 @@ BI.Msg = ((function () { { type: "bi.border", attributes: { - tabIndex: 1 + tabIndex: 1, }, mounted: function () { this.element.keyup(function (e) { @@ -173,8 +173,8 @@ BI.Msg = ((function () { text: title || BI.i18nText("BI-Basic_Prompt"), textAlign: "left", hgap: 20, - height: 40 - } + height: 40, + }, }, east: { el: { @@ -186,13 +186,13 @@ BI.Msg = ((function () { if (BI.isFunction(callback)) { callback.apply(null, [false]); } - } + }, }, - width: 56 - } - } + width: 56, + }, + }, }, - height: 40 + height: 40, }, center: { el: BI.isPlainObject(message) ? message : { @@ -200,8 +200,8 @@ BI.Msg = ((function () { vgap: 10, hgap: 20, whiteSpace: "normal", - text: message - } + text: message, + }, }, south: { el: { @@ -210,25 +210,25 @@ BI.Msg = ((function () { el: { type: "bi.right_vertical_adapt", lgap: 10, - items: controlItems + items: controlItems, }, top: 0, left: 20, right: 20, - bottom: 0 - }] + bottom: 0, + }], }, - height: 44 - } + height: 44, + }, }, width: 450, - height: 200 + height: 200, } - ] + ], }; messageShows[messageShows.length] = BI.createWidget(conf); - } + }, }; })()); diff --git a/src/base/grid/__test__/grid.test.js b/src/base/grid/__test__/grid.test.js index da11bba80..6ff920b4f 100644 --- a/src/base/grid/__test__/grid.test.js +++ b/src/base/grid/__test__/grid.test.js @@ -15,7 +15,7 @@ describe("GridTest", function () { for (var j = 0; j < columnCount; j++) { items[i][j] = { type: "bi.label", - text: i + "-" + j + text: i + "-" + j, }; } } @@ -32,7 +32,7 @@ describe("GridTest", function () { }, columnWidthGetter: function () { return 100; - } + }, }); // TODO 性能展示类控件,不知道要测啥,标记一下 grid.destroy(); diff --git a/src/base/grid/grid.js b/src/base/grid/grid.js index c08f30645..dc6e8506d 100644 --- a/src/base/grid/grid.js +++ b/src/base/grid/grid.js @@ -27,7 +27,7 @@ BI.GridView = BI.inherit(BI.Widget, { items: [], itemFormatter: function (item, row, col) { return item; - } + }, }); }, @@ -41,7 +41,7 @@ BI.GridView = BI.inherit(BI.Widget, { self._scrollLock = false; }, 1000 / 60); this.container = BI._lazyCreateWidget({ - type: "bi.absolute" + type: "bi.absolute", }); this.element.scroll(function () { if (self._scrollLock === true) { @@ -52,7 +52,7 @@ BI.GridView = BI.inherit(BI.Widget, { self._calculateChildrenToRender(); self.fireEvent(BI.GridView.EVENT_SCROLL, { scrollLeft: o.scrollLeft, - scrollTop: o.scrollTop + scrollTop: o.scrollTop, }); }); // 兼容一下 @@ -74,7 +74,7 @@ BI.GridView = BI.inherit(BI.Widget, { scrollable: scrollable, scrolly: scrolly, scrollx: scrollx, - items: [this.container] + items: [this.container], }); o.items = BI.isFunction(o.items) ? this.__watch(o.items, function (context, newValue) { self.populate(newValue); @@ -115,7 +115,7 @@ BI.GridView = BI.inherit(BI.Widget, { _getOverscanIndices: function (cellCount, overscanCellsCount, startIndex, stopIndex) { return { overscanStartIndex: Math.max(0, startIndex - overscanCellsCount), - overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount) + overscanStopIndex: Math.min(cellCount - 1, stopIndex + overscanCellsCount), }; }, @@ -197,20 +197,20 @@ BI.GridView = BI.inherit(BI.Widget, { child = BI._lazyCreateWidget(BI.extend({ type: "bi.label", width: columnDatum.size, - height: rowDatum.size + height: rowDatum.size, }, item, { cls: (item.cls || "") + " grid-cell" + (rowIndex === 0 ? " first-row" : "") + (columnIndex === 0 ? " first-col" : ""), _rowIndex: rowIndex, _columnIndex: columnIndex, _left: columnDatum.offset + horizontalOffsetAdjustment, - _top: rowDatum.offset + verticalOffsetAdjustment + _top: rowDatum.offset + verticalOffsetAdjustment, }), this); renderedCells.push({ el: child, left: columnDatum.offset + horizontalOffsetAdjustment, top: rowDatum.offset + verticalOffsetAdjustment, _left: columnDatum.offset + horizontalOffsetAdjustment, - _top: rowDatum.offset + verticalOffsetAdjustment + _top: rowDatum.offset + verticalOffsetAdjustment, // _width: columnDatum.size, // _height: rowDatum.size }); @@ -258,7 +258,7 @@ BI.GridView = BI.inherit(BI.Widget, { this.container.attr("items", renderedCells); this.renderedCells = renderedCells; this.renderedKeys = renderedKeys; - this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY }; + this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY, }; } }, @@ -333,7 +333,7 @@ BI.GridView = BI.inherit(BI.Widget, { if (this.options.overflowX !== !!b) { this.options.overflowX = !!b; BI.nextTick(function () { - self.element.css({ overflowX: b ? "auto" : "hidden" }); + self.element.css({ overflowX: b ? "auto" : "hidden", }); }); } }, @@ -343,7 +343,7 @@ BI.GridView = BI.inherit(BI.Widget, { if (this.options.overflowY !== !!b) { this.options.overflowY = !!b; BI.nextTick(function () { - self.element.css({ overflowY: b ? "auto" : "hidden" }); + self.element.css({ overflowY: b ? "auto" : "hidden", }); }); } }, @@ -398,7 +398,7 @@ BI.GridView = BI.inherit(BI.Widget, { this.restore(); } this._populate(items); - } + }, }); BI.GridView.EVENT_SCROLL = "EVENT_SCROLL"; BI.shortcut("bi.grid_view", BI.GridView); diff --git a/src/base/layer/__test__/layer.popover.test.js b/src/base/layer/__test__/layer.popover.test.js index 09c05858b..d9766f823 100644 --- a/src/base/layer/__test__/layer.popover.test.js +++ b/src/base/layer/__test__/layer.popover.test.js @@ -16,12 +16,12 @@ describe("PopoverTest", function () { size: "normal", header: { type: "bi.label", - text: "这个是header" + text: "这个是header", }, body: { type: "bi.label", - text: "这个是body" - } + text: "这个是body", + }, }).open(id); BI.delay(function () { expect(BI.Widget._renderEngine.createElement("body").find(".bi-popup-view .bi-z-index-mask").length).to.equal(1); diff --git a/src/base/layer/layer.drawer.js b/src/base/layer/layer.drawer.js index 3472f6942..af6eb98c2 100644 --- a/src/base/layer/layer.drawer.js +++ b/src/base/layer/layer.drawer.js @@ -7,7 +7,7 @@ BI.Drawer = BI.inherit(BI.Widget, { SIZE: { SMALL: "small", NORMAL: "normal", - BIG: "big" + BIG: "big", }, props: { baseCls: "bi-drawer bi-card", @@ -19,7 +19,7 @@ BI.Drawer = BI.inherit(BI.Widget, { closable: true, // BI-40839 是否显示右上角的关闭按钮 bodyHgap: 20, bodyTgap: 10, - bodyBgap: 10 + bodyBgap: 10, }, render: function () { @@ -33,20 +33,20 @@ BI.Drawer = BI.inherit(BI.Widget, { type: "bi.absolute", items: [{ el: BI.isPlainObject(o.header) ? BI.extend({}, o.header, { - extraCls: "bi-font-bold" + extraCls: "bi-font-bold", }) : { type: "bi.label", cls: "bi-font-bold", height: o.headerHeight, text: o.header, title: o.header, - textAlign: "left" + textAlign: "left", }, left: 20, top: 0, right: 0, - bottom: 0 - }] + bottom: 0, + }], }, { el: o.closable ? { type: "bi.icon_button", @@ -54,15 +54,15 @@ BI.Drawer = BI.inherit(BI.Widget, { height: o.headerHeight, handler: function () { self.close(); - } + }, } : { - type: "bi.layout" + type: "bi.layout", }, - width: 56 + width: 56, }], - height: o.headerHeight + height: o.headerHeight, }, - height: o.headerHeight + height: o.headerHeight, }, { el: { type: "bi.vertical", @@ -72,17 +72,17 @@ BI.Drawer = BI.inherit(BI.Widget, { self.body = this; }, items: [{ - el: o.body - }] + el: o.body, + }], }, hgap: o.bodyHgap, tgap: o.bodyTgap, - bgap: o.bodyBgap + bgap: o.bodyBgap, }]; return BI.extend({ type: "bi.vtape", - items: items + items: items, }, this._getSuitableSize()); }, @@ -103,12 +103,12 @@ BI.Drawer = BI.inherit(BI.Widget, { } if (o.placement === "top" || o.placement === "bottom") { return { - height: o.height || size + height: o.height || size, }; } if (o.placement === "left" || o.placement === "right") { return { - width: o.width || size + width: o.width || size, }; } }, @@ -120,28 +120,28 @@ BI.Drawer = BI.inherit(BI.Widget, { self.element.css({ top: 0, left: "100%", - bottom: 0 + bottom: 0, }); break; case "left": self.element.css({ top: 0, right: "100%", - bottom: 0 + bottom: 0, }); break; case "top": self.element.css({ left: 0, right: 0, - bottom: "100%" + bottom: "100%", }); break; case "bottom": self.element.css({ left: 0, right: 0, - top: "100%" + top: "100%", }); break; default: @@ -156,22 +156,22 @@ BI.Drawer = BI.inherit(BI.Widget, { switch (o.placement) { case "right": self.element.css({ - left: "calc(100% - " + size.width + "px)" + left: "calc(100% - " + size.width + "px)", }); break; case "left": self.element.css({ - right: "calc(100% - " + size.width + "px)" + right: "calc(100% - " + size.width + "px)", }); break; case "top": self.element.css({ - bottom: "calc(100% - " + size.height + "px)" + bottom: "calc(100% - " + size.height + "px)", }); break; case "bottom": self.element.css({ - top: "calc(100% - " + size.height + "px)" + top: "calc(100% - " + size.height + "px)", }); break; default: @@ -187,22 +187,22 @@ BI.Drawer = BI.inherit(BI.Widget, { switch (o.placement) { case "right": self.element.css({ - left: "100%" + left: "100%", }); break; case "left": self.element.css({ - right: "100%" + right: "100%", }); break; case "top": self.element.css({ - bottom: "100%" + bottom: "100%", }); break; case "bottom": self.element.css({ - top: "100%" + top: "100%", }); break; default: @@ -227,11 +227,11 @@ BI.Drawer = BI.inherit(BI.Widget, { }, setZindex: function (zindex) { - this.element.css({ "z-index": zindex }); + this.element.css({ "z-index": zindex, }); }, destroyed: function () { - } + }, }); BI.shortcut("bi.drawer", BI.Drawer); diff --git a/src/base/layer/layer.popover.js b/src/base/layer/layer.popover.js index c4d2efa5d..a6caefd85 100644 --- a/src/base/layer/layer.popover.js +++ b/src/base/layer/layer.popover.js @@ -8,9 +8,9 @@ BI.Popover = BI.inherit(BI.Widget, { SIZE: { SMALL: "small", NORMAL: "normal", - BIG: "big" + BIG: "big", }, - MAX_HEIGHT: 600 + MAX_HEIGHT: 600, }, props: function () { @@ -18,7 +18,7 @@ BI.Popover = BI.inherit(BI.Widget, { baseCls: "bi-popover bi-card bi-border-radius", size: "normal", // small, normal, big logic: { - dynamic: false + dynamic: false, }, header: null, headerHeight: 40, @@ -27,7 +27,7 @@ BI.Popover = BI.inherit(BI.Widget, { footerHeight: 44, closable: true, // BI-40839 是否显示右上角的关闭按钮 bodyHgap: BI.SIZE_CONSANTS.H_GAP_SIZE, - bodyTgap: BI.SIZE_CONSANTS.V_GAP_SIZE + bodyTgap: BI.SIZE_CONSANTS.V_GAP_SIZE, }; }, @@ -45,11 +45,11 @@ BI.Popover = BI.inherit(BI.Widget, { self.startY += deltaY; self.element.css({ left: BI.clamp(self.startX, 0, W - self.element.width()) + "px", - top: BI.clamp(self.startY, 0, H - self.element.height()) + "px" + top: BI.clamp(self.startY, 0, H - self.element.height()) + "px", }); // BI-12134 没有什么特别好的方法 BI.Resizers._resize({ - target: self.element[0] + target: self.element[0], }); }, function () { self.tracker.releaseMouseMoves(); @@ -66,21 +66,21 @@ BI.Popover = BI.inherit(BI.Widget, { }, items: [{ el: BI.isPlainObject(o.header) ? BI.extend({}, o.header, { - extraCls: "bi-font-bold" + extraCls: "bi-font-bold", }) : { type: "bi.label", cls: "bi-font-bold", height: o.headerHeight, text: o.header, title: o.header, - textAlign: "left" + textAlign: "left", }, top: 0, bottom: 0, left: BI.SIZE_CONSANTS.H_GAP_SIZE, - right: o.closable ? 0 : BI.SIZE_CONSANTS.H_GAP_SIZE - }] - } + right: o.closable ? 0 : BI.SIZE_CONSANTS.H_GAP_SIZE, + }], + }, }, o.closable ? { el: { type: "bi.icon_button", @@ -88,13 +88,13 @@ BI.Popover = BI.inherit(BI.Widget, { height: o.headerHeight, handler: function () { self.close(); - } + }, }, - width: 56 + width: 56, } : null], - height: o.headerHeight + height: o.headerHeight, }, - height: o.headerHeight + height: o.headerHeight, }, o.logic.dynamic ? { el: { type: "bi.vertical", @@ -105,14 +105,14 @@ BI.Popover = BI.inherit(BI.Widget, { }, css: { "max-height": this._getSuitableBodyHeight(c.MAX_HEIGHT - o.headerHeight - (o.footer ? o.footerHeight : 0) - o.bodyTgap), - "min-height": this._getSuitableBodyHeight(size.height - o.headerHeight - (o.footer ? o.footerHeight : 0) - o.bodyTgap) + "min-height": this._getSuitableBodyHeight(size.height - o.headerHeight - (o.footer ? o.footerHeight : 0) - o.bodyTgap), }, items: [{ - el: o.body + el: o.body, }], hgap: o.bodyHgap, - tgap: o.bodyTgap - } + tgap: o.bodyTgap, + }, } : { el: { type: "bi.absolute", @@ -121,9 +121,9 @@ BI.Popover = BI.inherit(BI.Widget, { left: o.bodyHgap, top: o.bodyTgap, right: o.bodyHgap, - bottom: 0 - }] - } + bottom: 0, + }], + }, }]; if (o.footer) { items.push({ @@ -134,23 +134,23 @@ BI.Popover = BI.inherit(BI.Widget, { left: BI.SIZE_CONSANTS.H_GAP_SIZE, top: 0, right: BI.SIZE_CONSANTS.H_GAP_SIZE, - bottom: 0 + bottom: 0, }], - height: o.footerHeight + height: o.footerHeight, }, - height: o.footerHeight + height: o.footerHeight, }); } return BI.extend({ items: items, - width: this._getSuitableWidth(size.width) + width: this._getSuitableWidth(size.width), }, o.logic.dynamic ? { type: "bi.vertical", - scrolly: false + scrolly: false, } : { type: "bi.vtape", - height: this._getSuitableHeight(size.height) + height: this._getSuitableHeight(size.height), }); }, @@ -203,7 +203,7 @@ BI.Popover = BI.inherit(BI.Widget, { return { width: o.width || size.width, height: o.height || size.height, - type: size.type || "default" + type: size.type || "default", }; }, @@ -222,11 +222,11 @@ BI.Popover = BI.inherit(BI.Widget, { }, setZindex: function (zindex) { - this.element.css({ "z-index": zindex }); + this.element.css({ "z-index": zindex, }); }, destroyed: function () { - } + }, }); BI.shortcut("bi.popover", BI.Popover); @@ -234,7 +234,7 @@ BI.shortcut("bi.popover", BI.Popover); BI.BarPopover = BI.inherit(BI.Popover, { _defaultConfig: function () { return BI.extend(BI.BarPopover.superclass._defaultConfig.apply(this, arguments), { - btns: [BI.i18nText("BI-Basic_OK"), BI.i18nText("BI-Basic_Cancel")] + btns: [BI.i18nText("BI-Basic_OK"), BI.i18nText("BI-Basic_Cancel")], }); }, @@ -252,7 +252,7 @@ BI.BarPopover = BI.inherit(BI.Popover, { handler: function (v) { self.fireEvent(BI.Popover.EVENT_CANCEL, v); self.close(v); - } + }, }, { type: "bi.button", text: this.options.btns[0], @@ -261,10 +261,10 @@ BI.BarPopover = BI.inherit(BI.Popover, { handler: function (v) { self.fireEvent(BI.Popover.EVENT_CONFIRM, v); self.close(v); - } - }] + }, + }], }); - } + }, }); BI.shortcut("bi.bar_popover", BI.BarPopover); diff --git a/src/base/layer/layer.popup.js b/src/base/layer/layer.popup.js index 6255975ab..d4291ef95 100644 --- a/src/base/layer/layer.popup.js +++ b/src/base/layer/layer.popup.js @@ -5,7 +5,7 @@ */ BI.PopupView = BI.inherit(BI.Widget, { _const: { - TRIANGLE_LENGTH: 12 + TRIANGLE_LENGTH: 12, }, _defaultConfig: function (props) { return BI.extend(BI.PopupView.superclass._defaultConfig.apply(this, arguments), { @@ -29,7 +29,7 @@ BI.PopupView = BI.inherit(BI.Widget, { stopEvent: false, // 是否停止mousedown、mouseup事件 stopPropagation: false, // 是否停止mousedown、mouseup向上冒泡 logic: { - dynamic: true + dynamic: true, }, tool: false, // 自定义工具栏 @@ -42,9 +42,9 @@ BI.PopupView = BI.inherit(BI.Widget, { chooseType: 0, behaviors: {}, layouts: [{ - type: "bi.vertical" - }] - } + type: "bi.vertical", + }], + }, }); }, @@ -61,13 +61,13 @@ BI.PopupView = BI.inherit(BI.Widget, { this.element.css({ "z-index": BI.zIndex_popup, "min-width": BI.isNumeric(o.minWidth) ? (o.minWidth / BI.pixRatio + BI.pixUnit) : o.minWidth, - "max-width": BI.isNumeric(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth - }).bind({ click: fn }); + "max-width": BI.isNumeric(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth, + }).bind({ click: fn, }); this.element.bind("mousewheel", fn); - o.stopPropagation && this.element.bind({ mousedown: fn, mouseup: fn, mouseover: fn }); - o.stopEvent && this.element.bind({ mousedown: stop, mouseup: stop, mouseover: stop }); + o.stopPropagation && this.element.bind({ mousedown: fn, mouseup: fn, mouseover: fn, }); + o.stopEvent && this.element.bind({ mousedown: stop, mouseup: stop, mouseover: stop, }); this.tool = this._createTool(); this.tab = this._createTab(); this.view = this._createView(); @@ -81,7 +81,7 @@ BI.PopupView = BI.inherit(BI.Widget, { }); BI.createWidget(BI.extend({ - element: this + element: this, }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, { scrolly: false, lgap: o.lgap, @@ -91,11 +91,11 @@ BI.PopupView = BI.inherit(BI.Widget, { vgap: o.vgap, hgap: o.hgap, items: BI.LogicFactory.createLogicItemsByDirection(o.direction, BI.extend({ - cls: "list-view-outer bi-card list-view-shadow" + (o.primary ? " bi-primary" : "") + cls: "list-view-outer bi-card list-view-shadow" + (o.primary ? " bi-primary" : ""), }, BI.LogicFactory.createLogic(BI.LogicFactory.createLogicTypeByDirection(o.direction), BI.extend({}, o.logic, { - items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tool, this.tab, this.view, this.toolbar) + items: BI.LogicFactory.createLogicItemsByDirection(o.direction, this.tool, this.tab, this.view, this.toolbar), }))) - ) + ), })))); if (o.showArrow) { this.arrow = BI.createWidget({ @@ -103,19 +103,19 @@ BI.PopupView = BI.inherit(BI.Widget, { cls: "bi-bubble-arrow", items: [{ type: "bi.layout", - cls: "bubble-arrow" - }] + cls: "bubble-arrow", + }], }); this.arrowWrapper = BI.createWidget({ type: "bi.absolute", cls: "bi-bubble-arrow-wrapper", items: [{ - el: this.arrow - }] + el: this.arrow, + }], }); // 因为三角符号的原因位置变大了,需要占位 this.placeholder = BI.createWidget({ - type: "bi.layout" + type: "bi.layout", }); BI.createWidget({ type: "bi.absolute", @@ -123,23 +123,23 @@ BI.PopupView = BI.inherit(BI.Widget, { items: [{ el: this.arrowWrapper, left: 0, - top: 0 + top: 0, }, { - el: this.placeholder - }] + el: this.placeholder, + }], }); } }, _createView: function () { var o = this.options; - this.button_group = BI.createWidget(o.el, { type: "bi.button_group", value: o.value }); + this.button_group = BI.createWidget(o.el, { type: "bi.button_group", value: o.value, }); this.button_group.element.css({ "min-height": BI.isNumeric(o.minHeight) ? (o.minHeight / BI.pixRatio + BI.pixUnit) : o.minHeight, "padding-top": o.innerVgap / BI.pixRatio + BI.pixUnit, "padding-bottom": o.innerVgap / BI.pixRatio + BI.pixUnit, "padding-left": o.innerHgap / BI.pixRatio + BI.pixUnit, - "padding-right": o.innerHgap / BI.pixRatio + BI.pixUnit + "padding-right": o.innerHgap / BI.pixRatio + BI.pixUnit, }); return this.button_group; @@ -165,7 +165,7 @@ BI.PopupView = BI.inherit(BI.Widget, { cls: "list-view-tab", height: 25, items: o.tabs, - value: o.value + value: o.value, }); }, @@ -182,8 +182,8 @@ BI.PopupView = BI.inherit(BI.Widget, { items: BI.createItems(o.buttons, { once: false, shadow: true, - isShadowShowingOnSelected: true - }) + isShadowShowingOnSelected: true, + }), }); }, @@ -217,156 +217,156 @@ BI.PopupView = BI.inherit(BI.Widget, { direction = "bottom"; style = { // 5表示留出一定的空间 - left: BI.clamp(((middle ? popupWidth : position.width) - adjustXOffset) / 2 - 8, minLeft, maxLeft) + left: BI.clamp(((middle ? popupWidth : position.width) - adjustXOffset) / 2 - 8, minLeft, maxLeft), }; wrapperStyle = { top: o.tgap + o.vgap, left: 0, right: "", - bottom: "" + bottom: "", }; placeholderStyle = { left: 0, right: 0, height: this._const.TRIANGLE_LENGTH, top: -this._const.TRIANGLE_LENGTH, - bottom: "" + bottom: "", }; break; case "bottom,left": direction = "bottom"; style = { - right: BI.clamp(((middle ? popupWidth : position.width) + adjustXOffset) / 2 - 8, minRight, maxRight) + right: BI.clamp(((middle ? popupWidth : position.width) + adjustXOffset) / 2 - 8, minRight, maxRight), }; wrapperStyle = { top: o.bgap + o.vgap, left: "", right: 0, - bottom: "" + bottom: "", }; placeholderStyle = { left: 0, right: 0, height: this._const.TRIANGLE_LENGTH, top: -this._const.TRIANGLE_LENGTH, - bottom: "" + bottom: "", }; break; case "top": case "top,right": direction = "top"; style = { - left: BI.clamp(((middle ? popupWidth : position.width) - adjustXOffset) / 2 - 8, minLeft, maxLeft) + left: BI.clamp(((middle ? popupWidth : position.width) - adjustXOffset) / 2 - 8, minLeft, maxLeft), }; wrapperStyle = { bottom: o.bgap + o.vgap, left: 0, right: "", - top: "" + top: "", }; placeholderStyle = { left: 0, right: 0, height: this._const.TRIANGLE_LENGTH, top: "", - bottom: -this._const.TRIANGLE_LENGTH + bottom: -this._const.TRIANGLE_LENGTH, }; break; case "top,left": direction = "top"; style = { - right: BI.clamp(((middle ? popupWidth : position.width) + adjustXOffset) / 2 - 8, minRight, maxRight) + right: BI.clamp(((middle ? popupWidth : position.width) + adjustXOffset) / 2 - 8, minRight, maxRight), }; wrapperStyle = { bottom: o.bgap + o.vgap, right: 0, left: "", - top: "" + top: "", }; placeholderStyle = { left: 0, right: 0, height: this._const.TRIANGLE_LENGTH, top: "", - bottom: -this._const.TRIANGLE_LENGTH + bottom: -this._const.TRIANGLE_LENGTH, }; break; case "left": case "left,bottom": direction = "left"; style = { - top: BI.clamp(((middle ? popupHeight : position.height) - adjustYOffset) / 2 - 8, minTop, maxTop) + top: BI.clamp(((middle ? popupHeight : position.height) - adjustYOffset) / 2 - 8, minTop, maxTop), }; wrapperStyle = { right: o.rgap + o.hgap, top: 0, bottom: "", - left: "" + left: "", }; placeholderStyle = { top: 0, bottom: 0, width: this._const.TRIANGLE_LENGTH, right: -this._const.TRIANGLE_LENGTH, - left: "" + left: "", }; break; case "left,top": direction = "left"; style = { - bottom: BI.clamp(((middle ? popupHeight : position.height) + adjustYOffset) / 2 - 8, minBottom, maxBottom) + bottom: BI.clamp(((middle ? popupHeight : position.height) + adjustYOffset) / 2 - 8, minBottom, maxBottom), }; wrapperStyle = { right: o.rgap + o.hgap, bottom: 0, top: "", - left: "" + left: "", }; placeholderStyle = { top: 0, bottom: 0, width: this._const.TRIANGLE_LENGTH, right: -this._const.TRIANGLE_LENGTH, - left: "" + left: "", }; break; case "right": case "right,bottom": direction = "right"; style = { - top: BI.clamp(((middle ? popupHeight : position.height) - adjustYOffset) / 2 - 8, minTop, maxTop) + top: BI.clamp(((middle ? popupHeight : position.height) - adjustYOffset) / 2 - 8, minTop, maxTop), }; wrapperStyle = { left: o.lgap + o.hgap, top: 0, bottom: "", - right: "" + right: "", }; placeholderStyle = { top: 0, bottom: 0, width: this._const.TRIANGLE_LENGTH, left: -this._const.TRIANGLE_LENGTH, - right: "" + right: "", }; break; case "right,top": direction = "right"; style = { - bottom: BI.clamp(((middle ? popupHeight : position.height) + adjustYOffset) / 2 - 8, minBottom, maxBottom) + bottom: BI.clamp(((middle ? popupHeight : position.height) + adjustYOffset) / 2 - 8, minBottom, maxBottom), }; wrapperStyle = { left: o.lgap + o.hgap, bottom: 0, top: "", - right: "" + right: "", }; placeholderStyle = { top: 0, bottom: 0, width: this._const.TRIANGLE_LENGTH, left: -this._const.TRIANGLE_LENGTH, - right: "" + right: "", }; break; case "right,innerRight": @@ -411,7 +411,7 @@ BI.PopupView = BI.inherit(BI.Widget, { toolHeight = ((this.tool && this.tool.attr("height")) || 24) * ((this.tool && this.tool.isVisible()) ? 1 : 0); var resetHeight = h - tbHeight - tabHeight - toolHeight - 2 * this.options.innerVgap; this.view.resetHeight ? this.view.resetHeight(resetHeight) : - this.view.element.css({ "max-height": resetHeight / BI.pixRatio + BI.pixUnit }); + this.view.element.css({ "max-height": resetHeight / BI.pixRatio + BI.pixUnit, }); }, setValue: function (selectedValues) { @@ -421,7 +421,7 @@ BI.PopupView = BI.inherit(BI.Widget, { getValue: function () { return this.view.getValue(); - } + }, }); BI.PopupView.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.popup_view", BI.PopupView); diff --git a/src/base/layer/layer.searcher.js b/src/base/layer/layer.searcher.js index 0d0f475fa..b9d8d2b41 100644 --- a/src/base/layer/layer.searcher.js +++ b/src/base/layer/layer.searcher.js @@ -20,25 +20,25 @@ BI.SearcherView = BI.inherit(BI.Pane, { behaviors: { redmark: function () { return true; - } + }, }, items: [], layouts: [{ - type: "bi.vertical" - }] + type: "bi.vertical", + }], }, searcher: { type: "bi.button_group", behaviors: { redmark: function () { return true; - } + }, }, items: [], layouts: [{ - type: "bi.vertical" - }] - } + type: "bi.vertical", + }], + }, }); }, @@ -51,12 +51,12 @@ BI.SearcherView = BI.inherit(BI.Pane, { behaviors: { redmark: function () { return true; - } + }, }, layouts: [{ - type: "bi.vertical" + type: "bi.vertical", }], - value: o.value + value: o.value, }); this.matcher.on(BI.Controller.EVENT_CHANGE, function (type, val, ob) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -71,8 +71,8 @@ BI.SearcherView = BI.inherit(BI.Pane, { items: [{ type: "bi.layout", height: 1, - cls: "searcher-view-spliter bi-background" - }] + cls: "searcher-view-spliter bi-background", + }], }); this.searcher = BI.createWidget(o.searcher, { type: "bi.button_group", @@ -80,12 +80,12 @@ BI.SearcherView = BI.inherit(BI.Pane, { behaviors: { redmark: function () { return true; - } + }, }, layouts: [{ - type: "bi.vertical" + type: "bi.vertical", }], - value: o.value + value: o.value, }); this.searcher.on(BI.Controller.EVENT_CHANGE, function (type, val, ob) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -97,7 +97,7 @@ BI.SearcherView = BI.inherit(BI.Pane, { BI.createWidget({ type: "bi.vertical", element: this, - items: [this.matcher, this.spliter, this.searcher] + items: [this.matcher, this.spliter, this.searcher], }); }, @@ -134,7 +134,7 @@ BI.SearcherView = BI.inherit(BI.Pane, { hasMatched: function () { return this.matcher.getAllButtons().length > 0; - } + }, }); BI.SearcherView.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/list/__test__/listview.test.js b/src/base/list/__test__/listview.test.js index adeb87dfb..0f35c711e 100644 --- a/src/base/list/__test__/listview.test.js +++ b/src/base/list/__test__/listview.test.js @@ -13,16 +13,16 @@ describe("ListView && VirtualList", function () { var a = BI.Test.createWidget({ type: "bi.list_view", el: { - type: "bi.left" + type: "bi.left", }, items: BI.map(BI.range(0, 100), function (i, item) { return BI.extend({}, item, { type: "bi.label", width: 200, height: 200, - text: (i + 1) + text: (i + 1), }); - }) + }), }); a.destroy(); }); @@ -38,9 +38,9 @@ describe("ListView && VirtualList", function () { return BI.extend({}, item, { type: "bi.label", height: 30, - text: (i + 1) + "." + item.text + text: (i + 1) + "." + item.text, }); - }) + }), }); a.destroy(); }); diff --git a/src/base/list/listview.js b/src/base/list/listview.js index bca51e3cc..4b12aa855 100644 --- a/src/base/list/listview.js +++ b/src/base/list/listview.js @@ -16,7 +16,7 @@ BI.ListView = BI.inherit(BI.Widget, { items: [], itemFormatter: function (item, index) { return item; - } + }, }; }, @@ -35,9 +35,9 @@ BI.ListView = BI.inherit(BI.Widget, { scrolly: false, ref: function (_ref) { self.container = _ref; - } + }, }, o.el)], - element: this + element: this, }; }, @@ -85,7 +85,7 @@ BI.ListView = BI.inherit(BI.Widget, { this.cache[cnt] = { index: index, scrollTop: lastHeight, - height: addedHeight + height: addedHeight, }; this.renderedIndex = cnt; cnt++; @@ -127,7 +127,7 @@ BI.ListView = BI.inherit(BI.Widget, { destroyed: function () { this.restore(); - } + }, }); BI.shortcut("bi.list_view", BI.ListView); diff --git a/src/base/list/virtualgrouplist.js b/src/base/list/virtualgrouplist.js index c18344a12..def972327 100644 --- a/src/base/list/virtualgrouplist.js +++ b/src/base/list/virtualgrouplist.js @@ -17,7 +17,7 @@ BI.VirtualGroupList = BI.inherit(BI.Widget, { el: {}, itemFormatter: function (item, index) { return item; - } + }, }; }, @@ -34,7 +34,7 @@ BI.VirtualGroupList = BI.inherit(BI.Widget, { type: "bi.layout", ref: function () { self.topBlank = this; - } + }, }, { type: "bi.virtual_group", height: o.rowHeight * o.items.length, @@ -43,15 +43,15 @@ BI.VirtualGroupList = BI.inherit(BI.Widget, { }, layouts: [BI.extend({ type: "bi.vertical", - scrolly: false - }, o.el)] + scrolly: false, + }, o.el)], }, { type: "bi.layout", ref: function () { self.bottomBlank = this; - } + }, }], - element: this + element: this, }; }, @@ -178,7 +178,7 @@ BI.VirtualGroupList = BI.inherit(BI.Widget, { populate: function (items) { this._populate(items); - } + }, }); BI.shortcut("bi.virtual_group_list", BI.VirtualGroupList); diff --git a/src/base/list/virtuallist.js b/src/base/list/virtuallist.js index 83a0d38de..89a79ed4f 100644 --- a/src/base/list/virtuallist.js +++ b/src/base/list/virtuallist.js @@ -15,7 +15,7 @@ BI.VirtualList = BI.inherit(BI.Widget, { items: [], itemFormatter: function (item, index) { return item; - } + }, }; }, @@ -33,19 +33,19 @@ BI.VirtualList = BI.inherit(BI.Widget, { type: "bi.layout", ref: function () { self.topBlank = this; - } + }, }, { type: "bi.vertical", scrolly: false, ref: function () { self.container = this; - } + }, }, { type: "bi.layout", ref: function () { self.bottomBlank = this; - } - }] + }, + }], }; }, @@ -203,7 +203,7 @@ BI.VirtualList = BI.inherit(BI.Widget, { destroyed: function () { this.cache = {}; this.renderedIndex = -1; - } + }, }); BI.shortcut("bi.virtual_list", BI.VirtualList); diff --git a/src/base/pager/pager.js b/src/base/pager/pager.js index c19d3e348..757d5632b 100644 --- a/src/base/pager/pager.js +++ b/src/base/pager/pager.js @@ -13,7 +13,7 @@ BI.Pager = BI.inherit(BI.Widget, { layouts: [{ type: "bi.horizontal", hgap: 10, - vgap: 0 + vgap: 0, }], dynamicShow: true, // 是否动态显示上一页、下一页、首页、尾页, 若为false,则指对其设置使能状态 @@ -36,7 +36,7 @@ BI.Pager = BI.inherit(BI.Widget, { return 1; }, hasPrev: BI.emptyFn, // pages不可用时有效 - hasNext: BI.emptyFn // pages不可用时有效 + hasNext: BI.emptyFn, // pages不可用时有效 }); }, @@ -78,13 +78,13 @@ BI.Pager = BI.inherit(BI.Widget, { view.push({ text: prev, value: "prev", - disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false) + disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false), }); } else { view.push({ el: BI.extend({ - disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false) - }, prev) + disabled: pages === false ? o.hasPrev(curr) === false : !(curr > 1 && prev !== false), + }, prev), }); } } @@ -94,13 +94,13 @@ BI.Pager = BI.inherit(BI.Widget, { view.push({ text: first, value: "first", - disabled: !(dict.index > 1 && groups !== 0) + disabled: !(dict.index > 1 && groups !== 0), }); if (dict.index > 1 && groups !== 0 && groups !== pages - 1) { view.push({ type: "bi.label", cls: "page-ellipsis", - text: "\u2026" + text: "\u2026", }); } } @@ -126,12 +126,12 @@ BI.Pager = BI.inherit(BI.Widget, { view.push({ text: s, value: s, - selected: true + selected: true, }); } else { view.push({ text: s, - value: s + value: s, }); } } @@ -142,13 +142,13 @@ BI.Pager = BI.inherit(BI.Widget, { view.push({ type: "bi.label", cls: "page-ellipsis", - text: "\u2026" + text: "\u2026", }); } view.push({ text: last, value: "last", - disabled: !(pages > groups && dict.end < pages && groups !== 0) + disabled: !(pages > groups && dict.end < pages && groups !== 0), }); } @@ -158,20 +158,20 @@ BI.Pager = BI.inherit(BI.Widget, { view.push((function () { if (BI.isKey(next)) { if (pages === false) { - return { text: next, value: "next", disabled: o.hasNext(curr) === false }; + return { text: next, value: "next", disabled: o.hasNext(curr) === false, }; } return (dict.flow && curr === pages) ? - { text: next, value: "next", disabled: true } + { text: next, value: "next", disabled: true, } : - { text: next, value: "next", disabled: !(curr !== pages && next || dict.flow) }; + { text: next, value: "next", disabled: !(curr !== pages && next || dict.flow), }; } return { el: BI.extend({ - disabled: pages === false ? o.hasNext(curr) === false : !(curr !== pages && next || dict.flow) - }, next) + disabled: pages === false ? o.hasNext(curr) === false : !(curr !== pages && next || dict.flow), + }, next), }; }())); } @@ -184,13 +184,13 @@ BI.Pager = BI.inherit(BI.Widget, { cls: "bi-list-item-select bi-border-radius", height: 23, hgap: v.el ? 0 : 10, - stopPropagation: true + stopPropagation: true, }, BI.stripEL(v)); return BI.formatEL(v); }), behaviors: o.behaviors, - layouts: o.layouts + layouts: o.layouts, }); this.button_group.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { // if (self._lock === true) { @@ -219,7 +219,7 @@ BI.Pager = BI.inherit(BI.Widget, { } o.jump.apply(self, [{ pages: pages, - curr: self.currPage + curr: self.currPage, }]); self._populate(); self.fireEvent(BI.Pager.EVENT_CHANGE, obj); @@ -292,7 +292,7 @@ BI.Pager = BI.inherit(BI.Widget, { populate: function () { this._populate(); - } + }, }); BI.Pager.EVENT_CHANGE = "EVENT_CHANGE"; BI.Pager.EVENT_AFTER_POPULATE = "EVENT_AFTER_POPULATE"; diff --git a/src/base/single/1.text.js b/src/base/single/1.text.js index 2f0fabb0a..123df54a3 100644 --- a/src/base/single/1.text.js +++ b/src/base/single/1.text.js @@ -19,50 +19,50 @@ tgap: 0, bgap: 0, py: "", - highLight: false + highLight: false, }, render: function () { var self = this, o = this.options; if (o.hgap + o.lgap > 0) { this.element.css({ - "padding-left": (o.hgap + o.lgap) / BI.pixRatio + BI.pixUnit + "padding-left": (o.hgap + o.lgap) / BI.pixRatio + BI.pixUnit, }); } if (o.hgap + o.rgap > 0) { this.element.css({ - "padding-right": (o.hgap + o.rgap) / BI.pixRatio + BI.pixUnit + "padding-right": (o.hgap + o.rgap) / BI.pixRatio + BI.pixUnit, }); } if (o.vgap + o.tgap > 0) { this.element.css({ - "padding-top": (o.vgap + o.tgap) / BI.pixRatio + BI.pixUnit + "padding-top": (o.vgap + o.tgap) / BI.pixRatio + BI.pixUnit, }); } if (o.vgap + o.bgap > 0) { this.element.css({ - "padding-bottom": (o.vgap + o.bgap) / BI.pixRatio + BI.pixUnit + "padding-bottom": (o.vgap + o.bgap) / BI.pixRatio + BI.pixUnit, }); } if (BI.isWidthOrHeight(o.height)) { - this.element.css({ lineHeight: BI.isNumber(o.height) ? (o.height / BI.pixRatio + BI.pixUnit) : o.height }); + this.element.css({ lineHeight: BI.isNumber(o.height) ? (o.height / BI.pixRatio + BI.pixUnit) : o.height, }); } if (BI.isWidthOrHeight(o.lineHeight)) { - this.element.css({ lineHeight: BI.isNumber(o.lineHeight) ? (o.lineHeight / BI.pixRatio + BI.pixUnit) : o.lineHeight }); + this.element.css({ lineHeight: BI.isNumber(o.lineHeight) ? (o.lineHeight / BI.pixRatio + BI.pixUnit) : o.lineHeight, }); } if (BI.isWidthOrHeight(o.maxWidth)) { - this.element.css({ maxWidth: BI.isNumber(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth }); + this.element.css({ maxWidth: BI.isNumber(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth, }); } this.element.css({ textAlign: o.textAlign, whiteSpace: this._getTextWrap(), textOverflow: o.whiteSpace === "nowrap" ? "ellipsis" : "", - overflow: o.whiteSpace === "nowrap" ? "" : (BI.isWidthOrHeight(o.height) ? "auto" : "") + overflow: o.whiteSpace === "nowrap" ? "" : (BI.isWidthOrHeight(o.height) ? "auto" : ""), }); if (o.handler && o.handler !== BI.emptyFn) { this.text = BI.createWidget({ type: "bi.layout", - tagName: "span" + tagName: "span", }); this.text.element.click(function (e) { o.handler.call(self, self.getValue(), self, e); @@ -70,7 +70,7 @@ BI.createWidget({ type: "bi.default", element: this, - items: [this.text] + items: [this.text], }); } else { this.text = this; @@ -154,7 +154,7 @@ BI.Text.superclass.setText.apply(this, arguments); this.options.text = text; this._doRedMark(this.options.keyword); - } + }, }); var formatters = []; BI.Text.addTextFormatter = function (formatter) { @@ -166,7 +166,7 @@ text = formatters[i](text); } } - + return text; }; BI.shortcut("bi.text", BI.Text); diff --git a/src/base/single/label/abstract.label.js b/src/base/single/label/abstract.label.js index 46e5e7969..c0443b39d 100644 --- a/src/base/single/label/abstract.label.js +++ b/src/base/single/label/abstract.label.js @@ -6,6 +6,7 @@ _defaultConfig: function (props) { var conf = BI.AbstractLabel.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { textAlign: "center", whiteSpace: "nowrap", // normal or nowrap @@ -36,11 +37,13 @@ if (BI.isFunction(text)) { return text(); } + return text; }, _createJson: function () { var o = this.options; + return { type: "bi.text", textAlign: o.textAlign, @@ -52,7 +55,7 @@ py: o.py, keyword: o.keyword, highLight: o.highLight, - handler: o.handler + handler: o.handler, }; }, @@ -80,10 +83,11 @@ element: this, items: [ { - el: (this.text = BI.createWidget(json)) + el: (this.text = BI.createWidget(json)), } - ] + ], }); + return; } BI.createWidget({ // 1.2 @@ -93,10 +97,11 @@ element: this, items: [ { - el: (this.text = BI.createWidget(json)) + el: (this.text = BI.createWidget(json)), } - ] + ], }); + return; } if (o.whiteSpace === "normal") { // 1.3 @@ -106,7 +111,7 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, }); this.text = BI.createWidget(json); BI.createWidget({ @@ -114,13 +119,14 @@ columnSize: ["auto"], // important! 让文字在flex布局下shrink为1 scrollable: o.whiteSpace === "normal", element: this, - items: [this.text] + items: [this.text], }); + return; } if (BI.isNumber(o.height) && o.height > 0) { // 1.4 this.element.css({ - "line-height": o.height / BI.pixRatio + BI.pixUnit + "line-height": o.height / BI.pixRatio + BI.pixUnit, }); json.textAlign = o.textAlign; delete json.maxWidth; @@ -131,8 +137,9 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, })); + return; } BI.extend(json, { // 1.5 @@ -142,7 +149,7 @@ rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, - maxWidth: "100%" + maxWidth: "100%", }); this.text = BI.createWidget(json); BI.createWidget({ @@ -150,11 +157,12 @@ columnSize: ["auto"], // important! 让文字在flex布局下shrink为1 scrollable: o.whiteSpace === "normal", element: this, - items: [this.text] + items: [this.text], }); + return; } - if (BI.isNumber(o.textWidth) && o.textWidth > 0) { // 1.6 + if (BI.isNumber(o.textWidth) && o.textWidth > 0) { // 1.6 json.maxWidth = o.textWidth; BI.createWidget({ type: "bi.center_adapt", @@ -163,10 +171,11 @@ element: this, items: [ { - el: (this.text = BI.createWidget(json)) + el: (this.text = BI.createWidget(json)), } - ] + ], }); + return; } if (o.whiteSpace === "normal") { // 1.7 @@ -176,7 +185,7 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, }); this.text = BI.createWidget(json); BI.createWidget({ @@ -184,13 +193,14 @@ columnSize: ["auto"], // important! 让文字在flex布局下shrink为1 scrollable: true, element: this, - items: [this.text] + items: [this.text], }); + return; } if (BI.isNumber(o.height) && o.height > 0) { // 1.8 this.element.css({ - "line-height": o.height / BI.pixRatio + BI.pixUnit + "line-height": o.height / BI.pixRatio + BI.pixUnit, }); json.textAlign = o.textAlign; delete json.maxWidth; @@ -201,8 +211,9 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, })); + return; } this.text = BI.createWidget(BI.extend(json, { @@ -211,13 +222,13 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, })); BI.createWidget({ type: "bi.center_adapt", columnSize: ["auto"], // important! 让文字在flex布局下shrink为1 element: this, - items: [this.text] + items: [this.text], }); }, @@ -238,10 +249,11 @@ element: this, items: [ { - el: (this.text = BI.createWidget(json)) + el: (this.text = BI.createWidget(json)), } - ] + ], }); + return; } BI.createWidget({ // 2.2 @@ -258,16 +270,17 @@ element: this, items: [ { - el: (this.text = BI.createWidget(json)) + el: (this.text = BI.createWidget(json)), } - ] + ], }); + return; } if (BI.isNumber(o.height) && o.height > 0) { // 2.3 if (o.whiteSpace !== "normal") { this.element.css({ - "line-height": (o.height - (o.vgap * 2)) / BI.pixRatio + BI.pixUnit + "line-height": (o.height - (o.vgap * 2)) / BI.pixRatio + BI.pixUnit, }); } delete json.maxWidth; @@ -278,8 +291,9 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, })); + return; } json.maxWidth = o.width - 2 * o.hgap - o.lgap - o.rgap; @@ -296,14 +310,15 @@ bgap: o.bgap, element: this, items: [{ - el: (this.text = BI.createWidget(json)) - }] + el: (this.text = BI.createWidget(json)), + }], }); + return; } if (BI.isNumber(o.textWidth) && o.textWidth > 0) { json.maxWidth = o.textWidth; - BI.createWidget({ // 2.5 + BI.createWidget({ // 2.5 type: adaptLayout, horizontalAlign: o.textAlign, columnSize: ["auto"], // important! 让文字在flex布局下shrink为1 @@ -317,16 +332,17 @@ element: this, items: [ { - el: (this.text = BI.createWidget(json)) + el: (this.text = BI.createWidget(json)), } - ] + ], }); + return; } if (BI.isNumber(o.height) && o.height > 0) { if (o.whiteSpace !== "normal") { this.element.css({ - "line-height": (o.height - (o.vgap * 2)) / BI.pixRatio + BI.pixUnit + "line-height": (o.height - (o.vgap * 2)) / BI.pixRatio + BI.pixUnit, }); } delete json.maxWidth; @@ -337,8 +353,9 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, })); + return; } this.text = BI.createWidget(BI.extend(json, { @@ -347,7 +364,7 @@ lgap: o.lgap, rgap: o.rgap, tgap: o.tgap, - bgap: o.bgap + bgap: o.bgap, })); BI.createWidget({ type: adaptLayout, @@ -355,7 +372,7 @@ columnSize: ["auto"], // important! 让文字在flex布局下shrink为1 element: this, scrollable: o.whiteSpace === "normal", - items: [this.text] + items: [this.text], }); }, @@ -394,6 +411,6 @@ this.options.text = v; this.text.setValue(v); } - } + }, }); }()); diff --git a/src/base/single/label/html.label.js b/src/base/single/label/html.label.js index 2ebe7815d..e1ac76b66 100644 --- a/src/base/single/label/html.label.js +++ b/src/base/single/label/html.label.js @@ -5,11 +5,12 @@ BI.HtmlLabel = BI.inherit(BI.AbstractLabel, { props: { - baseCls: "bi-html-label" + baseCls: "bi-html-label", }, _createJson: function () { var o = this.options; + return { type: "bi.html", textAlign: o.textAlign, @@ -17,9 +18,9 @@ BI.HtmlLabel = BI.inherit(BI.AbstractLabel, { lineHeight: o.textHeight, text: o.text, value: o.value, - handler: o.handler + handler: o.handler, }; - } + }, }); -BI.shortcut("bi.html_label", BI.HtmlLabel); \ No newline at end of file +BI.shortcut("bi.html_label", BI.HtmlLabel); diff --git a/src/base/single/label/icon.label.js b/src/base/single/label/icon.label.js index b5779c3e5..bff864f1d 100644 --- a/src/base/single/label/icon.label.js +++ b/src/base/single/label/icon.label.js @@ -21,12 +21,12 @@ BI.IconLabel = BI.inherit(BI.Single, { render: function () { var o = this.options; this.element.css({ - textAlign: "center" + textAlign: "center", }); this.icon = BI.createWidget({ type: "bi.icon", width: o.iconWidth, - height: o.iconHeight + height: o.iconHeight, }); if (BI.isNumber(o.height) && o.height > 0 && BI.isNull(o.iconWidth) && BI.isNull(o.iconHeight)) { this.element.css("lineHeight", (o.lineHeight || o.height) / BI.pixRatio + BI.pixUnit); @@ -39,7 +39,7 @@ BI.IconLabel = BI.inherit(BI.Single, { rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, - items: [this.icon] + items: [this.icon], }); } else { this.element.css("lineHeight", "1"); @@ -52,9 +52,9 @@ BI.IconLabel = BI.inherit(BI.Single, { rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, - items: [this.icon] + items: [this.icon], }); } - } + }, }); BI.shortcut("bi.icon_label", BI.IconLabel); diff --git a/src/base/single/label/label.js b/src/base/single/label/label.js index 37129087c..98bfa3707 100644 --- a/src/base/single/label/label.js +++ b/src/base/single/label/label.js @@ -7,7 +7,7 @@ BI.Label = BI.inherit(BI.AbstractLabel, { props: { baseCls: "bi-label", py: "", - keyword: "" + keyword: "", }, doRedMark: function () { @@ -16,7 +16,7 @@ BI.Label = BI.inherit(BI.AbstractLabel, { unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); - } + }, }); BI.shortcut("bi.label", BI.Label); diff --git a/src/base/single/link/__test__/link.test.js b/src/base/single/link/__test__/link.test.js index e425cb44b..630d1da71 100644 --- a/src/base/single/link/__test__/link.test.js +++ b/src/base/single/link/__test__/link.test.js @@ -5,15 +5,14 @@ */ describe("LinkTest", function () { - /** * test_author_windy */ it("link", function () { var a = BI.Test.createWidget({ - type: "bi.link" + type: "bi.link", }); - expect(a.element.is('a')).to.equal(true); + expect(a.element.is("a")).to.equal(true); a.destroy(); }); -}); \ No newline at end of file +}); diff --git a/src/base/single/link/link.js b/src/base/single/link/link.js index 680893537..176389af5 100644 --- a/src/base/single/link/link.js +++ b/src/base/single/link/link.js @@ -6,16 +6,18 @@ BI.Link = BI.inherit(BI.Label, { _defaultConfig: function () { var conf = BI.Link.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-link display-block", tagName: "a", href: "", - target: "_blank" + target: "_blank", }); }, _createJson: function () { var o = this.options; + return { type: "bi.a", textAlign: o.textAlign, @@ -26,9 +28,9 @@ BI.Link = BI.inherit(BI.Label, { value: o.value, py: o.py, href: o.href, - target: o.target + target: o.target, }; - } + }, }); BI.shortcut("bi.link", BI.Link); diff --git a/src/base/single/tip/0.tip.js b/src/base/single/tip/0.tip.js index c792b91b3..a57d90a2f 100644 --- a/src/base/single/tip/0.tip.js +++ b/src/base/single/tip/0.tip.js @@ -9,14 +9,15 @@ BI.Tip = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.Tip.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { _baseCls: (conf._baseCls || "") + " bi-tip", - zIndex: BI.zIndex_tip + zIndex: BI.zIndex_tip, }); }, _init: function () { BI.Tip.superclass._init.apply(this, arguments); - this.element.css({zIndex: this.options.zIndex}); - } -}); \ No newline at end of file + this.element.css({ zIndex: this.options.zIndex, }); + }, +}); diff --git a/src/base/single/tip/tip.toast.js b/src/base/single/tip/tip.toast.js index 0440ee23d..4b59260c9 100644 --- a/src/base/single/tip/tip.toast.js +++ b/src/base/single/tip/tip.toast.js @@ -31,14 +31,15 @@ BI.Toast = BI.inherit(BI.Tip, { var self = this, o = this.options, c = this._const; this.element.css({ minWidth: (o.closable ? c.closableMinWidth : c.minWidth) / BI.pixRatio + BI.pixUnit, - maxWidth: (o.closable ? c.closableMaxWidth : c.maxWidth) / BI.pixRatio + BI.pixUnit + maxWidth: (o.closable ? c.closableMaxWidth : c.maxWidth) / BI.pixRatio + BI.pixUnit, }); this.element.addClass("toast-" + o.level); - var fn = function (e) { + function fn(e) { e.stopPropagation(); e.stopEvent(); + return false; - }; + } this.element.bind({ click: fn, mousedown: fn, @@ -46,7 +47,7 @@ BI.Toast = BI.inherit(BI.Tip, { mouseover: fn, mouseenter: fn, mouseleave: fn, - mousemove: fn + mousemove: fn, }); var cls; switch (o.level) { @@ -68,9 +69,9 @@ BI.Toast = BI.inherit(BI.Tip, { break; } - var hasCloseIcon = function () { + function hasCloseIcon() { return o.closable === true || (o.closable === null && o.autoClose === false); - }; + } var items = [{ type: "bi.icon_label", cls: cls + " toast-icon", @@ -81,7 +82,7 @@ BI.Toast = BI.inherit(BI.Tip, { whiteSpace: "normal", text: o.text, textHeight: o.textHeight, - textAlign: "left" + textAlign: "left", }, }]; @@ -106,13 +107,13 @@ BI.Toast = BI.inherit(BI.Tip, { hgap: o.hgap, vgap: o.vgap, innerHgap: o.innerHgap, - columnSize: columnSize + columnSize: columnSize, }; }, beforeDestroy: function () { this.fireEvent(BI.Toast.EVENT_DESTORY); - } + }, }); BI.Toast.EVENT_DESTORY = "EVENT_DESTORY"; BI.shortcut("bi.toast", BI.Toast); diff --git a/src/base/single/trigger/trigger.js b/src/base/single/trigger/trigger.js index 9e97d2226..486ae898f 100644 --- a/src/base/single/trigger/trigger.js +++ b/src/base/single/trigger/trigger.js @@ -7,9 +7,10 @@ BI.Trigger = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.Trigger.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { _baseCls: (conf._baseCls || "") + " bi-trigger cursor-pointer", - height: 24 + height: 24, }); }, diff --git a/src/base/tree/customtree.js b/src/base/tree/customtree.js index fc7ce4736..9b2cf1b6a 100644 --- a/src/base/tree/customtree.js +++ b/src/base/tree/customtree.js @@ -13,8 +13,8 @@ BI.CustomTree = BI.inherit(BI.Widget, { expander: { el: {}, popup: { - type: "bi.custom_tree" - } + type: "bi.custom_tree", + }, }, items: [], @@ -24,9 +24,9 @@ BI.CustomTree = BI.inherit(BI.Widget, { type: "bi.button_tree", chooseType: 0, layouts: [{ - type: "bi.vertical" - }] - } + type: "bi.vertical", + }], + }, }); }, @@ -45,12 +45,12 @@ BI.CustomTree = BI.inherit(BI.Widget, { var item = BI.extend({ type: "bi.expander", el: { - value: node.value + value: node.value, }, - popup: { type: "bi.custom_tree" } + popup: { type: "bi.custom_tree", }, }, BI.deepClone(o.expander), { id: node.id, - pId: node.pId + pId: node.pId, }); var el = BI.stripEL(node); if (!BI.isWidget(el)) { @@ -94,7 +94,7 @@ BI.CustomTree = BI.inherit(BI.Widget, { callback.apply(null, args); }]); }, - value: o.value + value: o.value, }); this.tree.on(BI.Controller.EVENT_CHANGE, function (type, val, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -143,7 +143,7 @@ BI.CustomTree = BI.inherit(BI.Widget, { empty: function () { this.tree.empty(); - } + }, }); BI.CustomTree.EVENT_CHANGE = "EVENT_CHANGE"; From 445330991f26f2bc78fa00ecb8f8878bbfb980b6 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Mon, 15 Aug 2022 16:05:34 +0800 Subject: [PATCH 097/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 384a269cd..5e0b326a6 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "@babel/core": "^7.17.4", "@babel/polyfill": "7.6.0", "@fui/babel-preset-fineui": "^2.0.0", - "@fui/eslint-plugin": "1.0.15", + "@fui/eslint-plugin": "^1.0.15", "@types/node": "15.6.1", "autoprefixer": "9.6.1", "babel-loader": "8.0.6", @@ -85,4 +85,4 @@ }, "author": "fanruan", "license": "MIT" -} \ No newline at end of file +} From 3e6f88cab147b7435851a02bc0e2aabd7e631387 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Mon, 15 Aug 2022 17:13:00 +0800 Subject: [PATCH 098/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 3 +- src/base/collection/collection.js | 6 +-- src/base/combination/bubble.js | 4 +- src/base/combination/expander.js | 4 +- src/base/combination/group.button.js | 2 +- src/base/combination/group.combo.js | 2 +- src/base/combination/group.virtual.js | 2 +- src/base/combination/loader.js | 6 +-- src/base/combination/navigation.js | 2 +- src/base/combination/tab.js | 2 +- src/base/foundation/message.js | 6 +-- src/base/grid/grid.js | 6 +-- src/base/layer/layer.drawer.js | 2 +- src/base/layer/layer.popover.js | 2 +- src/base/layer/layer.popup.js | 10 ++--- src/base/single/1.text.js | 6 +-- src/base/single/button/button.basic.js | 35 ++++++++++-------- src/base/single/button/button.node.js | 5 ++- .../node/__test__/icontexticonnode.test.js | 12 +++--- .../button/node/__test__/icontextnode.test.js | 12 +++--- .../button/node/__test__/texticonnode.test.js | 12 +++--- .../button/node/__test__/textnode.test.js | 15 +++----- .../single/button/node/icontexticonnode.js | 15 ++++---- src/base/single/button/node/icontextnode.js | 13 ++++--- src/base/single/button/node/texticonnode.js | 13 ++++--- src/base/single/button/node/textnode.js | 9 +++-- src/base/single/editor/editor.js | 23 ++++++------ src/base/single/editor/editor.multifile.js | 11 +++--- src/base/single/html/__test__/html.test.js | 9 ++--- src/base/single/html/html.js | 24 ++++++------ src/base/single/icon/icon.js | 5 ++- .../single/iframe/__test__/iframe.test.js | 5 +-- src/base/single/iframe/iframe.js | 7 ++-- src/base/single/img/__test__/img.test.js | 5 +-- src/base/single/img/img.js | 7 ++-- .../single/input/checkbox/checkbox.image.js | 7 ++-- src/base/single/input/checkbox/checkbox.js | 11 +++--- src/base/single/input/input.js | 37 ++++++++++--------- src/base/single/input/radio/radio.image.js | 7 ++-- src/base/single/input/radio/radio.js | 11 +++--- src/base/single/tip/0.tip.js | 2 +- src/base/tree/customtree.js | 2 +- 42 files changed, 194 insertions(+), 185 deletions(-) diff --git a/.eslintrc b/.eslintrc index a0374a47e..70d386082 100644 --- a/.eslintrc +++ b/.eslintrc @@ -31,7 +31,8 @@ "rules": { "no-param-reassign": "off", "quotes": [2, "double"], - "comma-dangle": ["error", { "arrays": "never", "objects": "always"}], // 多行对象字面量中要求拖尾逗号 + "comma-dangle": ["error", { "arrays": "never", "objects": "always-multiline"}] // 多行对象字面量中要求拖尾逗号 + // "no-empty": ["error",{"allowEmptyCatch":"true"}] } }, { "files": ["webpack/*.js", "./*.js", "lib/**/*.js", "lib/*.js", "./bin/*.js", "./bin/**/*.js"], diff --git a/src/base/collection/collection.js b/src/base/collection/collection.js index f6bbcc774..0ad681faa 100644 --- a/src/base/collection/collection.js +++ b/src/base/collection/collection.js @@ -282,7 +282,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { var minY = BI.max(topBorder); var maxY = BI.min(bottomBorder); - this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY, }; + this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY }; } }, @@ -341,7 +341,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { if (this.options.overflowX !== !!b) { this.options.overflowX = !!b; BI.nextTick(function () { - self.element.css({ overflowX: b ? "auto" : "hidden", }); + self.element.css({ overflowX: b ? "auto" : "hidden" }); }); } }, @@ -351,7 +351,7 @@ BI.CollectionView = BI.inherit(BI.Widget, { if (this.options.overflowY !== !!b) { this.options.overflowY = !!b; BI.nextTick(function () { - self.element.css({ overflowY: b ? "auto" : "hidden", }); + self.element.css({ overflowY: b ? "auto" : "hidden" }); }); } }, diff --git a/src/base/combination/bubble.js b/src/base/combination/bubble.js index 0e8a79673..d4c240b17 100644 --- a/src/base/combination/bubble.js +++ b/src/base/combination/bubble.js @@ -85,7 +85,7 @@ element: this, }, BI.LogicFactory.createLogic("vertical", BI.extend(o.logic, { items: [ - { el: this.combo, } + { el: this.combo } ], })))); o.isDefaultInit && (this._assertPopupView()); @@ -260,7 +260,7 @@ scrolly: false, element: this.options.container || this, items: [ - { el: this.popupView, } + { el: this.popupView } ], }); this._rendered = true; diff --git a/src/base/combination/expander.js b/src/base/combination/expander.js index 5e99dacbd..60b3dd471 100644 --- a/src/base/combination/expander.js +++ b/src/base/combination/expander.js @@ -65,7 +65,7 @@ BI.Expander = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.expander, } + { el: this.expander } ], }); o.isDefaultInit && this._assertPopupView(); @@ -171,7 +171,7 @@ BI.Expander = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.popupView, } + { el: this.popupView } ], }); this._rendered = true; diff --git a/src/base/combination/group.button.js b/src/base/combination/group.button.js index aa73851a6..49d56167c 100644 --- a/src/base/combination/group.button.js +++ b/src/base/combination/group.button.js @@ -203,7 +203,7 @@ BI.ButtonGroup = BI.inherit(BI.Widget, { items = this._packageItems(items, this._packageBtns(this.buttons)); } - this.layouts = BI.createWidget(BI.extend({ element: this, }, this._packageLayout(items))); + this.layouts = BI.createWidget(BI.extend({ element: this }, this._packageLayout(items))); }, setNotSelectedValue: function (v) { diff --git a/src/base/combination/group.combo.js b/src/base/combination/group.combo.js index 1b77ddc3a..2f8b0c72e 100644 --- a/src/base/combination/group.combo.js +++ b/src/base/combination/group.combo.js @@ -15,7 +15,7 @@ BI.ComboGroup = BI.inherit(BI.Widget, { isNeedAdjustHeight: false, isNeedAdjustWidth: false, - el: { type: "bi.text_button", text: "", value: "", }, + el: { type: "bi.text_button", text: "", value: "" }, items: [], popup: { diff --git a/src/base/combination/group.virtual.js b/src/base/combination/group.virtual.js index a6f481a9d..40e7c09f4 100644 --- a/src/base/combination/group.virtual.js +++ b/src/base/combination/group.virtual.js @@ -132,7 +132,7 @@ BI.VirtualGroup = BI.inherit(BI.Widget, { this.options.items = items; items = this._packageBtns(items); if (!this.layouts) { - this.layouts = BI.createWidget(BI.extend({ element: this, }, this._packageLayout(items))); + this.layouts = BI.createWidget(BI.extend({ element: this }, this._packageLayout(items))); } else { this.layouts.populate(items, { context: this, diff --git a/src/base/combination/loader.js b/src/base/combination/loader.js index a666fda1a..cf548b024 100644 --- a/src/base/combination/loader.js +++ b/src/base/combination/loader.js @@ -38,7 +38,7 @@ BI.Loader = BI.inherit(BI.Widget, { _prevLoad: function () { var self = this, o = this.options; this.prev.setLoading(); - o.itemsCreator.apply(this, [{ times: --this.times, }, function () { + o.itemsCreator.apply(this, [{ times: --this.times }, function () { self.prev.setLoaded(); self.prependItems.apply(self, arguments); }]); @@ -47,7 +47,7 @@ BI.Loader = BI.inherit(BI.Widget, { _nextLoad: function () { var self = this, o = this.options; this.next.setLoading(); - o.itemsCreator.apply(this, [{ times: ++this.times, }, function () { + o.itemsCreator.apply(this, [{ times: ++this.times }, function () { self.next.setLoaded(); self.addItems.apply(self, arguments); }]); @@ -170,7 +170,7 @@ BI.Loader = BI.inherit(BI.Widget, { _populate: function (items) { var self = this, o = this.options; if (arguments.length === 0 && (BI.isFunction(o.itemsCreator))) { - o.itemsCreator.apply(this, [{ times: 1, }, function () { + o.itemsCreator.apply(this, [{ times: 1 }, function () { if (arguments.length === 0) { throw new Error("参数不能为空"); } diff --git a/src/base/combination/navigation.js b/src/base/combination/navigation.js index 5004a660e..971ec9ba9 100644 --- a/src/base/combination/navigation.js +++ b/src/base/combination/navigation.js @@ -23,7 +23,7 @@ BI.Navigation = BI.inherit(BI.Widget, { render: function () { var self = this, o = this.options; - this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group", }); + this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group" }); this.cardMap = {}; this.showIndex = 0; this.layout = BI.createWidget({ diff --git a/src/base/combination/tab.js b/src/base/combination/tab.js index 196c90850..fe5904804 100644 --- a/src/base/combination/tab.js +++ b/src/base/combination/tab.js @@ -23,7 +23,7 @@ BI.Tab = BI.inherit(BI.Widget, { render: function () { var self = this, o = this.options; if (BI.isObject(o.tab)) { - this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group", }); + this.tab = BI.createWidget(this.options.tab, { type: "bi.button_group" }); this.tab.on(BI.Controller.EVENT_CHANGE, function (type, value, obj) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); }); diff --git a/src/base/foundation/message.js b/src/base/foundation/message.js index 76d82f5e5..380e12039 100644 --- a/src/base/foundation/message.js +++ b/src/base/foundation/message.js @@ -21,7 +21,7 @@ BI.Msg = ((function () { // BI.Msg.prompt(title, message, value, callback, min_width); }, toast: function (message, options, context) { - BI.isString(options) && (options = { level: options, }); + BI.isString(options) && (options = { level: options }); options = options || {}; context = context || BI.Widget._renderEngine.createElement("body"); var level = options.level || "common"; @@ -40,7 +40,7 @@ BI.Msg = ((function () { BI.remove(toastStack, toast.element); var _height = BI.SIZE_CONSANTS.TOAST_TOP; BI.each(toastStack, function (i, element) { - element.css({ "top": _height, }); + element.css({ "top": _height }); _height += element.outerHeight() + 10; }); callback(); @@ -61,7 +61,7 @@ BI.Msg = ((function () { }], }); toastStack.push(toast.element); - toast.element.css({ "margin-left": -1 * toast.element.outerWidth() / 2, }); + toast.element.css({ "margin-left": -1 * toast.element.outerWidth() / 2 }); toast.element.removeClass("bi-message-leave").addClass("bi-message-enter"); autoClose && BI.delay(function () { diff --git a/src/base/grid/grid.js b/src/base/grid/grid.js index dc6e8506d..81853b77a 100644 --- a/src/base/grid/grid.js +++ b/src/base/grid/grid.js @@ -258,7 +258,7 @@ BI.GridView = BI.inherit(BI.Widget, { this.container.attr("items", renderedCells); this.renderedCells = renderedCells; this.renderedKeys = renderedKeys; - this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY, }; + this.renderRange = { minX: minX, minY: minY, maxX: maxX, maxY: maxY }; } }, @@ -333,7 +333,7 @@ BI.GridView = BI.inherit(BI.Widget, { if (this.options.overflowX !== !!b) { this.options.overflowX = !!b; BI.nextTick(function () { - self.element.css({ overflowX: b ? "auto" : "hidden", }); + self.element.css({ overflowX: b ? "auto" : "hidden" }); }); } }, @@ -343,7 +343,7 @@ BI.GridView = BI.inherit(BI.Widget, { if (this.options.overflowY !== !!b) { this.options.overflowY = !!b; BI.nextTick(function () { - self.element.css({ overflowY: b ? "auto" : "hidden", }); + self.element.css({ overflowY: b ? "auto" : "hidden" }); }); } }, diff --git a/src/base/layer/layer.drawer.js b/src/base/layer/layer.drawer.js index af6eb98c2..23ef8b8c5 100644 --- a/src/base/layer/layer.drawer.js +++ b/src/base/layer/layer.drawer.js @@ -227,7 +227,7 @@ BI.Drawer = BI.inherit(BI.Widget, { }, setZindex: function (zindex) { - this.element.css({ "z-index": zindex, }); + this.element.css({ "z-index": zindex }); }, destroyed: function () { diff --git a/src/base/layer/layer.popover.js b/src/base/layer/layer.popover.js index a6caefd85..2a4453472 100644 --- a/src/base/layer/layer.popover.js +++ b/src/base/layer/layer.popover.js @@ -222,7 +222,7 @@ BI.Popover = BI.inherit(BI.Widget, { }, setZindex: function (zindex) { - this.element.css({ "z-index": zindex, }); + this.element.css({ "z-index": zindex }); }, destroyed: function () { diff --git a/src/base/layer/layer.popup.js b/src/base/layer/layer.popup.js index d4291ef95..ef7d55749 100644 --- a/src/base/layer/layer.popup.js +++ b/src/base/layer/layer.popup.js @@ -62,12 +62,12 @@ BI.PopupView = BI.inherit(BI.Widget, { "z-index": BI.zIndex_popup, "min-width": BI.isNumeric(o.minWidth) ? (o.minWidth / BI.pixRatio + BI.pixUnit) : o.minWidth, "max-width": BI.isNumeric(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth, - }).bind({ click: fn, }); + }).bind({ click: fn }); this.element.bind("mousewheel", fn); - o.stopPropagation && this.element.bind({ mousedown: fn, mouseup: fn, mouseover: fn, }); - o.stopEvent && this.element.bind({ mousedown: stop, mouseup: stop, mouseover: stop, }); + o.stopPropagation && this.element.bind({ mousedown: fn, mouseup: fn, mouseover: fn }); + o.stopEvent && this.element.bind({ mousedown: stop, mouseup: stop, mouseover: stop }); this.tool = this._createTool(); this.tab = this._createTab(); this.view = this._createView(); @@ -133,7 +133,7 @@ BI.PopupView = BI.inherit(BI.Widget, { _createView: function () { var o = this.options; - this.button_group = BI.createWidget(o.el, { type: "bi.button_group", value: o.value, }); + this.button_group = BI.createWidget(o.el, { type: "bi.button_group", value: o.value }); this.button_group.element.css({ "min-height": BI.isNumeric(o.minHeight) ? (o.minHeight / BI.pixRatio + BI.pixUnit) : o.minHeight, "padding-top": o.innerVgap / BI.pixRatio + BI.pixUnit, @@ -411,7 +411,7 @@ BI.PopupView = BI.inherit(BI.Widget, { toolHeight = ((this.tool && this.tool.attr("height")) || 24) * ((this.tool && this.tool.isVisible()) ? 1 : 0); var resetHeight = h - tbHeight - tabHeight - toolHeight - 2 * this.options.innerVgap; this.view.resetHeight ? this.view.resetHeight(resetHeight) : - this.view.element.css({ "max-height": resetHeight / BI.pixRatio + BI.pixUnit, }); + this.view.element.css({ "max-height": resetHeight / BI.pixRatio + BI.pixUnit }); }, setValue: function (selectedValues) { diff --git a/src/base/single/1.text.js b/src/base/single/1.text.js index 123df54a3..50aebf841 100644 --- a/src/base/single/1.text.js +++ b/src/base/single/1.text.js @@ -45,13 +45,13 @@ }); } if (BI.isWidthOrHeight(o.height)) { - this.element.css({ lineHeight: BI.isNumber(o.height) ? (o.height / BI.pixRatio + BI.pixUnit) : o.height, }); + this.element.css({ lineHeight: BI.isNumber(o.height) ? (o.height / BI.pixRatio + BI.pixUnit) : o.height }); } if (BI.isWidthOrHeight(o.lineHeight)) { - this.element.css({ lineHeight: BI.isNumber(o.lineHeight) ? (o.lineHeight / BI.pixRatio + BI.pixUnit) : o.lineHeight, }); + this.element.css({ lineHeight: BI.isNumber(o.lineHeight) ? (o.lineHeight / BI.pixRatio + BI.pixUnit) : o.lineHeight }); } if (BI.isWidthOrHeight(o.maxWidth)) { - this.element.css({ maxWidth: BI.isNumber(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth, }); + this.element.css({ maxWidth: BI.isNumber(o.maxWidth) ? (o.maxWidth / BI.pixRatio + BI.pixUnit) : o.maxWidth }); } this.element.css({ textAlign: o.textAlign, diff --git a/src/base/single/button/button.basic.js b/src/base/single/button/button.basic.js index 9ade43edb..8fa304890 100644 --- a/src/base/single/button/button.basic.js +++ b/src/base/single/button/button.basic.js @@ -8,6 +8,7 @@ BI.BasicButton = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.BasicButton.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { _baseCls: (conf._baseCls || "") + " bi-basic-button" + (conf.invalid ? "" : " cursor-pointer") + ((BI.isIE() && BI.getIEVersion() < 10) ? " hack" : ""), // el: {} // 可以通过el来创建button元素 @@ -21,10 +22,10 @@ BI.BasicButton = BI.inherit(BI.Single, { disableSelected: false, // 使能选中 shadow: false, - isShadowShowingOnSelected: false, // 选中状态下是否显示阴影 + isShadowShowingOnSelected: false, // 选中状态下是否显示阴影 trigger: null, handler: BI.emptyFn, - bubble: null + bubble: null, }); }, @@ -63,11 +64,11 @@ BI.BasicButton = BI.inherit(BI.Single, { _createShadow: function () { var self = this, o = this.options; - var assertMask = function () { + function assertMask() { if (!self.$mask) { self.$mask = BI.createWidget(BI.isObject(o.shadow) ? o.shadow : {}, { type: "bi.layout", - cls: "bi-button-mask" + cls: "bi-button-mask", }); self.$mask.invisible(); BI.createWidget({ @@ -78,11 +79,11 @@ BI.BasicButton = BI.inherit(BI.Single, { left: 0, right: 0, top: 0, - bottom: 0 - }] + bottom: 0, + }], }); } - }; + } this.element.mouseup(function () { if (!self._hover && !o.isShadowShowingOnSelected) { @@ -223,7 +224,7 @@ BI.BasicButton = BI.inherit(BI.Single, { // 之后的300ms点击无效 var onClick = BI.debounce(this._doClick, BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, }); function ev(e) { @@ -257,7 +258,7 @@ BI.BasicButton = BI.inherit(BI.Single, { }, el: { type: "bi.layout", - height: "100%" + height: "100%", }, popup: { type: "bi.text_bubble_bar_popup_view", @@ -272,21 +273,21 @@ BI.BasicButton = BI.inherit(BI.Single, { if (v) { onClick.apply(self, arguments); } - } - }] + }, + }], }, listeners: [{ eventName: BI.BubbleCombo.EVENT_BEFORE_POPUPVIEW, action: function () { popup.populate(getBubble()); - } - }] + }, + }], }, left: 0, right: 0, bottom: 0, - top: 0 - }] + top: 0, + }], }); } if (self.combo.isViewVisible()) { @@ -294,6 +295,7 @@ BI.BasicButton = BI.inherit(BI.Single, { } else { self.combo.showView(); } + return; } onClick.apply(self, arguments); @@ -304,6 +306,7 @@ BI.BasicButton = BI.inherit(BI.Single, { if (BI.isFunction(bubble)) { return bubble(); } + return bubble; } }, @@ -436,7 +439,7 @@ BI.BasicButton = BI.inherit(BI.Single, { empty: function () { BI.Widget._renderEngine.createElement(document).unbind("mouseup." + this.getName()); BI.BasicButton.superclass.empty.apply(this, arguments); - } + }, }); BI.BasicButton.EVENT_CHANGE = "BasicButton.EVENT_CHANGE"; BI.shortcut("bi.basic_button", BI.BasicButton); diff --git a/src/base/single/button/button.node.js b/src/base/single/button/button.node.js index 8e17a4ea5..744cfe28f 100644 --- a/src/base/single/button/button.node.js +++ b/src/base/single/button/button.node.js @@ -9,9 +9,10 @@ BI.NodeButton = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.NodeButton.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { _baseCls: (conf._baseCls || "") + " bi-node", - open: false + open: false, }); }, @@ -51,6 +52,6 @@ BI.NodeButton = BI.inherit(BI.BasicButton, { this.setOpened(true); this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EXPAND, this.getValue(), this); } - } + }, }); BI.shortcut("bi.node_button", BI.NodeButton); diff --git a/src/base/single/button/node/__test__/icontexticonnode.test.js b/src/base/single/button/node/__test__/icontexticonnode.test.js index ae2a8fbb4..b76324283 100644 --- a/src/base/single/button/node/__test__/icontexticonnode.test.js +++ b/src/base/single/button/node/__test__/icontexticonnode.test.js @@ -4,13 +4,12 @@ */ describe("IconTextIconNodeTest", function () { - /** * test_author_kobi */ it("setText", function () { var iconTextIconNode = BI.Test.createWidget({ - type: "bi.icon_text_icon_node" + type: "bi.icon_text_icon_node", }); iconTextIconNode.setText("AAA"); expect(iconTextIconNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -34,7 +33,7 @@ describe("IconTextIconNodeTest", function () { */ it("setValue", function () { var iconTextIconNode = BI.Test.createWidget({ - type: "bi.icon_text_icon_node" + type: "bi.icon_text_icon_node", }); iconTextIconNode.setValue("AAA"); expect(iconTextIconNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -48,7 +47,7 @@ describe("IconTextIconNodeTest", function () { var iconTextIconNode = BI.Test.createWidget({ type: "bi.icon_text_icon_node", value: "AAA", - readonly: true + readonly: true, }); iconTextIconNode.setValue("BBB"); expect(iconTextIconNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -61,7 +60,7 @@ describe("IconTextIconNodeTest", function () { it("getValue", function () { var iconTextIconNode = BI.Test.createWidget({ type: "bi.icon_text_icon_node", - value: "AAA" + value: "AAA", }); expect(iconTextIconNode.getValue()).to.equal("AAA"); iconTextIconNode.destroy(); @@ -91,7 +90,7 @@ describe("IconTextIconNodeTest", function () { text: "AAA", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { iconTextIconNode.element.click(); @@ -100,5 +99,4 @@ describe("IconTextIconNodeTest", function () { done(); }); }); - }); diff --git a/src/base/single/button/node/__test__/icontextnode.test.js b/src/base/single/button/node/__test__/icontextnode.test.js index 2319e23e2..25b6ebc9f 100644 --- a/src/base/single/button/node/__test__/icontextnode.test.js +++ b/src/base/single/button/node/__test__/icontextnode.test.js @@ -4,13 +4,12 @@ */ describe("IconTextNodeTest", function () { - /** * test_author_kobi */ it("setText", function () { var iconTextNode = BI.Test.createWidget({ - type: "bi.icon_text_node" + type: "bi.icon_text_node", }); iconTextNode.setText("AAA"); expect(iconTextNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -34,7 +33,7 @@ describe("IconTextNodeTest", function () { */ it("setValue", function () { var iconTextNode = BI.Test.createWidget({ - type: "bi.icon_text_node" + type: "bi.icon_text_node", }); iconTextNode.setValue("AAA"); expect(iconTextNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -48,7 +47,7 @@ describe("IconTextNodeTest", function () { var iconTextNode = BI.Test.createWidget({ type: "bi.icon_text_node", value: "AAA", - readonly: true + readonly: true, }); iconTextNode.setValue("BBB"); expect(iconTextNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -61,7 +60,7 @@ describe("IconTextNodeTest", function () { it("getValue", function () { var iconTextNode = BI.Test.createWidget({ type: "bi.icon_text_node", - value: "AAA" + value: "AAA", }); expect(iconTextNode.getValue()).to.equal("AAA"); iconTextNode.destroy(); @@ -91,7 +90,7 @@ describe("IconTextNodeTest", function () { text: "AAA", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { iconTextNode.element.click(); @@ -100,5 +99,4 @@ describe("IconTextNodeTest", function () { done(); }); }); - }); diff --git a/src/base/single/button/node/__test__/texticonnode.test.js b/src/base/single/button/node/__test__/texticonnode.test.js index 9eb4ec2db..1523f8ce6 100644 --- a/src/base/single/button/node/__test__/texticonnode.test.js +++ b/src/base/single/button/node/__test__/texticonnode.test.js @@ -4,13 +4,12 @@ */ describe("TextIconNodeTest", function () { - /** * test_author_kobi */ it("setText", function () { var textIconNode = BI.Test.createWidget({ - type: "bi.text_icon_node" + type: "bi.text_icon_node", }); textIconNode.setText("AAA"); expect(textIconNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -34,7 +33,7 @@ describe("TextIconNodeTest", function () { */ it("setValue", function () { var textIconNode = BI.Test.createWidget({ - type: "bi.text_icon_node" + type: "bi.text_icon_node", }); textIconNode.setValue("AAA"); expect(textIconNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -48,7 +47,7 @@ describe("TextIconNodeTest", function () { var textIconNode = BI.Test.createWidget({ type: "bi.text_icon_node", value: "AAA", - readonly: true + readonly: true, }); textIconNode.setValue("BBB"); expect(textIconNode.element.find(".bi-text").text()).to.equal("AAA"); @@ -61,7 +60,7 @@ describe("TextIconNodeTest", function () { it("getValue", function () { var textIconNode = BI.Test.createWidget({ type: "bi.text_icon_node", - value: "AAA" + value: "AAA", }); expect(textIconNode.getValue()).to.equal("AAA"); textIconNode.destroy(); @@ -91,7 +90,7 @@ describe("TextIconNodeTest", function () { text: "AAA", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { textIconNode.element.click(); @@ -100,5 +99,4 @@ describe("TextIconNodeTest", function () { done(); }); }); - }); diff --git a/src/base/single/button/node/__test__/textnode.test.js b/src/base/single/button/node/__test__/textnode.test.js index 5674ae263..7b78bbb6b 100644 --- a/src/base/single/button/node/__test__/textnode.test.js +++ b/src/base/single/button/node/__test__/textnode.test.js @@ -4,13 +4,12 @@ */ describe("TextNodeTest", function () { - /** * test_author_kobi */ it("setText", function () { var textNode = BI.Test.createWidget({ - type: "bi.text_node" + type: "bi.text_node", }); textNode.setText("AAA"); expect(textNode.element.children(".bi-text").text()).to.equal("AAA"); @@ -24,7 +23,7 @@ describe("TextNodeTest", function () { var textNode = BI.Test.createWidget({ type: "bi.text_node", text: "AAA", - whiteSpace: "normal" + whiteSpace: "normal", }); expect(textNode.getText()).to.equal("AAA"); textNode.destroy(); @@ -35,7 +34,7 @@ describe("TextNodeTest", function () { */ it("setValue", function () { var textNode = BI.Test.createWidget({ - type: "bi.text_node" + type: "bi.text_node", }); textNode.setValue("AAA"); expect(textNode.element.children(".bi-text").text()).to.equal("AAA"); @@ -49,7 +48,7 @@ describe("TextNodeTest", function () { var textNode = BI.Test.createWidget({ type: "bi.text_node", value: "AAA", - readonly: true + readonly: true, }); textNode.setValue("BBB"); expect(textNode.element.children(".bi-text").text()).to.equal("AAA"); @@ -62,7 +61,7 @@ describe("TextNodeTest", function () { it("getValue", function () { var textNode = BI.Test.createWidget({ type: "bi.text_node", - value: "AAA" + value: "AAA", }); expect(textNode.getValue()).to.equal("AAA"); textNode.destroy(); @@ -92,7 +91,7 @@ describe("TextNodeTest", function () { text: "AAA", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { textNode.element.click(); @@ -101,6 +100,4 @@ describe("TextNodeTest", function () { done(); }); }); - - }); diff --git a/src/base/single/button/node/icontexticonnode.js b/src/base/single/button/node/icontexticonnode.js index 13d967425..7569490eb 100644 --- a/src/base/single/button/node/icontexticonnode.js +++ b/src/base/single/button/node/icontexticonnode.js @@ -8,6 +8,7 @@ BI.IconTextIconNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.IconTextIconNode.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-icon-text-icon-node", iconCls1: "close-ha-font", @@ -17,7 +18,7 @@ BI.IconTextIconNode = BI.inherit(BI.NodeButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -33,7 +34,7 @@ BI.IconTextIconNode = BI.inherit(BI.NodeButton, { width: o.leftIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { el: { type: "bi.label", @@ -48,16 +49,16 @@ BI.IconTextIconNode = BI.inherit(BI.NodeButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } + height: o.height, + }, }, { type: "bi.icon_label", cls: o.iconCls2, width: o.rightIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight - }] + iconHeight: o.iconHeight, + }], }; }, @@ -92,7 +93,7 @@ BI.IconTextIconNode = BI.inherit(BI.NodeButton, { getText: function () { return this.text.getText(); - } + }, }); BI.IconTextIconNode.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.icon_text_icon_node", BI.IconTextIconNode); diff --git a/src/base/single/button/node/icontextnode.js b/src/base/single/button/node/icontextnode.js index 5c9f1a4ca..16383cc7d 100644 --- a/src/base/single/button/node/icontextnode.js +++ b/src/base/single/button/node/icontextnode.js @@ -8,6 +8,7 @@ BI.IconTextNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.IconTextNode.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-icon-text-node", cls: "close-ha-font", @@ -16,7 +17,7 @@ BI.IconTextNode = BI.inherit(BI.NodeButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -32,7 +33,7 @@ BI.IconTextNode = BI.inherit(BI.NodeButton, { width: o.iconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { el: { type: "bi.label", @@ -48,9 +49,9 @@ BI.IconTextNode = BI.inherit(BI.NodeButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } - }] + height: o.height, + }, + }], }; }, @@ -85,7 +86,7 @@ BI.IconTextNode = BI.inherit(BI.NodeButton, { unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); - } + }, }); BI.IconTextNode.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.icon_text_node", BI.IconTextNode); diff --git a/src/base/single/button/node/texticonnode.js b/src/base/single/button/node/texticonnode.js index 6671c19a1..01167b009 100644 --- a/src/base/single/button/node/texticonnode.js +++ b/src/base/single/button/node/texticonnode.js @@ -7,6 +7,7 @@ BI.TextIconNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.TextIconNode.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-text-icon-node", cls: "close-ha-font", @@ -15,7 +16,7 @@ BI.TextIconNode = BI.inherit(BI.NodeButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -40,16 +41,16 @@ BI.TextIconNode = BI.inherit(BI.NodeButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } + height: o.height, + }, }, { type: "bi.icon_label", cls: o.iconCls, width: o.iconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight - }] + iconHeight: o.iconHeight, + }], }; }, @@ -84,7 +85,7 @@ BI.TextIconNode = BI.inherit(BI.NodeButton, { unRedMark: function () { this.text.unRedMark.apply(this.text, arguments); - } + }, }); BI.TextIconNode.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.text_icon_node", BI.TextIconNode); diff --git a/src/base/single/button/node/textnode.js b/src/base/single/button/node/textnode.js index 74974456c..6ecaa3fbf 100644 --- a/src/base/single/button/node/textnode.js +++ b/src/base/single/button/node/textnode.js @@ -9,6 +9,7 @@ BI.TextNode = BI.inherit(BI.NodeButton, { _defaultConfig: function () { var conf = BI.TextNode.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-text-node", textAlign: "left", @@ -16,7 +17,7 @@ BI.TextNode = BI.inherit(BI.NodeButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -27,7 +28,7 @@ BI.TextNode = BI.inherit(BI.NodeButton, { element: this, textAlign: o.textAlign, whiteSpace: o.whiteSpace, - textHeight: o.whiteSpace == "nowrap" ? o.height : o.textHeight, + textHeight: o.whiteSpace === "nowrap" ? o.height : o.textHeight, height: o.height, hgap: o.textHgap, vgap: o.textVgap, @@ -36,7 +37,7 @@ BI.TextNode = BI.inherit(BI.NodeButton, { text: o.text, value: o.value, keyword: o.keyword, - py: o.py + py: o.py, }); }, @@ -71,7 +72,7 @@ BI.TextNode = BI.inherit(BI.NodeButton, { getText: function () { return this.text.getText(); - } + }, }); BI.TextNode.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.text_node", BI.TextNode); diff --git a/src/base/single/editor/editor.js b/src/base/single/editor/editor.js index 5322124d9..ac9e779e9 100644 --- a/src/base/single/editor/editor.js +++ b/src/base/single/editor/editor.js @@ -38,7 +38,7 @@ BI.Editor = BI.inherit(BI.Single, { watermark: o.watermark, validationChecker: o.validationChecker, quitChecker: o.quitChecker, - allowBlank: o.allowBlank + allowBlank: o.allowBlank, })); this.editor.element.css({ width: "100%", @@ -46,7 +46,7 @@ BI.Editor = BI.inherit(BI.Single, { border: "none", outline: "none", padding: "0", - margin: "0" + margin: "0", }); var items = [{ @@ -60,19 +60,19 @@ BI.Editor = BI.inherit(BI.Single, { left: 0, right: 0, top: 0, - bottom: 0 - }] + bottom: 0, + }], }, left: o.hgap + o.lgap, right: o.hgap + o.rgap, top: o.vgap + o.tgap, - bottom: o.vgap + o.bgap + bottom: o.vgap + o.bgap, }]; BI.createWidget({ type: "bi.absolute", element: this, - items: items + items: items, }); this.setWaterMark(this.options.watermark); @@ -159,6 +159,7 @@ BI.Editor = BI.inherit(BI.Single, { }); this.element.click(function (e) { e.stopPropagation(); + return false; }); if (BI.isKey(this.options.value) || BI.isEmptyString(this.options.value)) { @@ -194,7 +195,7 @@ BI.Editor = BI.inherit(BI.Single, { height: o.height - 2 * o.vgap - o.tgap, hgap: 2, whiteSpace: "nowrap", - textAlign: "left" + textAlign: "left", }); this.watermark.element.bind({ mousedown: function (e) { @@ -204,7 +205,7 @@ BI.Editor = BI.inherit(BI.Single, { self.editor.isEditing() && self.editor.blur(); } e.stopEvent(); - } + }, }); this.watermark.element.bind("click", function (e) { if (self.isEnabled()) { @@ -240,7 +241,6 @@ BI.Editor = BI.inherit(BI.Single, { }, setWaterMark: function (v) { - this.options.watermark = v; if (BI.isNull(this.watermark)) { @@ -269,7 +269,7 @@ BI.Editor = BI.inherit(BI.Single, { } if (!this.disabledError && BI.isKey(errorText)) { BI.Bubbles[b ? "show" : "hide"](this.getName(), errorText, this, { - adjustYOffset: o.simple ? 1 : 2 + adjustYOffset: o.simple ? 1 : 2, }); this._checkToolTip(); } @@ -332,6 +332,7 @@ BI.Editor = BI.inherit(BI.Single, { if (!this.isValid()) { return BI.trim(this.editor.getLastValidValue()); } + return BI.trim(this.editor.getValue()); }, @@ -345,7 +346,7 @@ BI.Editor = BI.inherit(BI.Single, { destroyed: function () { BI.Bubbles.remove(this.getName()); - } + }, }); BI.Editor.EVENT_CHANGE = "EVENT_CHANGE"; BI.Editor.EVENT_FOCUS = "EVENT_FOCUS"; diff --git a/src/base/single/editor/editor.multifile.js b/src/base/single/editor/editor.multifile.js index ae0d5e0a9..21765474d 100644 --- a/src/base/single/editor/editor.multifile.js +++ b/src/base/single/editor/editor.multifile.js @@ -9,12 +9,13 @@ BI.MultifileEditor = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.MultifileEditor.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-multifile-editor", multiple: false, maxSize: -1, // 1024 * 1024 accept: "", - url: "" + url: "", }); }, @@ -57,13 +58,13 @@ BI.MultifileEditor = BI.inherit(BI.Widget, { el: { type: "bi.adaptive", scrollable: false, - items: [this.file] + items: [this.file], }, top: 0, right: 0, left: 0, - bottom: 0 - }] + bottom: 0, + }], }); }, @@ -104,7 +105,7 @@ BI.MultifileEditor = BI.inherit(BI.Widget, { reset: function () { this._reset(); - } + }, }); BI.MultifileEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultifileEditor.EVENT_UPLOADSTART = "EVENT_UPLOADSTART"; diff --git a/src/base/single/html/__test__/html.test.js b/src/base/single/html/__test__/html.test.js index 2d599ecd7..1414b1e59 100644 --- a/src/base/single/html/__test__/html.test.js +++ b/src/base/single/html/__test__/html.test.js @@ -5,14 +5,13 @@ */ describe("HtmlTest", function () { - /** * test_author_windy */ it("html_h1", function () { var a = BI.Test.createWidget({ type: "bi.html", - text: "

    在bi.html标签中使用html原生标签

    " + text: "

    在bi.html标签中使用html原生标签

    ", }); expect(a.element.find("h1").length).to.equal(1); a.destroy(); @@ -32,11 +31,11 @@ describe("HtmlTest", function () { highLight: true, hgap: 10, vgap: 10, - handler: BI.emptyFn + handler: BI.emptyFn, }); a.setValue("DDDDD"); - a.setStyle({"background-color": "red"}); + a.setStyle({ "background-color": "red" }); expect(a.text.element.css("background-color")).to.equal("rgb(255, 0, 0)"); a.destroy(); }); -}); \ No newline at end of file +}); diff --git a/src/base/single/html/html.js b/src/base/single/html/html.js index af88bac2c..9abbb2149 100644 --- a/src/base/single/html/html.js +++ b/src/base/single/html/html.js @@ -25,43 +25,43 @@ BI.Html = BI.inherit(BI.Single, { var self = this, o = this.options; if (o.hgap + o.lgap > 0) { this.element.css({ - "padding-left": (o.hgap + o.lgap) / BI.pixRatio + BI.pixUnit + "padding-left": (o.hgap + o.lgap) / BI.pixRatio + BI.pixUnit, }); } if (o.hgap + o.rgap > 0) { this.element.css({ - "padding-right": (o.hgap + o.rgap) / BI.pixRatio + BI.pixUnit + "padding-right": (o.hgap + o.rgap) / BI.pixRatio + BI.pixUnit, }); } if (o.vgap + o.tgap > 0) { this.element.css({ - "padding-top": (o.vgap + o.tgap) / BI.pixRatio + BI.pixUnit + "padding-top": (o.vgap + o.tgap) / BI.pixRatio + BI.pixUnit, }); } if (o.vgap + o.bgap > 0) { this.element.css({ - "padding-bottom": (o.vgap + o.bgap) / BI.pixRatio + BI.pixUnit + "padding-bottom": (o.vgap + o.bgap) / BI.pixRatio + BI.pixUnit, }); } if (BI.isNumber(o.height)) { - this.element.css({lineHeight: o.height / BI.pixRatio + BI.pixUnit}); + this.element.css({ lineHeight: o.height / BI.pixRatio + BI.pixUnit }); } if (BI.isNumber(o.lineHeight)) { - this.element.css({lineHeight: o.lineHeight / BI.pixRatio + BI.pixUnit}); + this.element.css({ lineHeight: o.lineHeight / BI.pixRatio + BI.pixUnit }); } if (BI.isWidthOrHeight(o.maxWidth)) { - this.element.css({maxWidth: o.maxWidth}); + this.element.css({ maxWidth: o.maxWidth }); } this.element.css({ textAlign: o.textAlign, whiteSpace: o.whiteSpace, - textOverflow: o.whiteSpace === 'nowrap' ? "ellipsis" : "", - overflow: o.whiteSpace === "nowrap" ? "" : "auto" + textOverflow: o.whiteSpace === "nowrap" ? "ellipsis" : "", + overflow: o.whiteSpace === "nowrap" ? "" : "auto", }); if (o.handler) { this.text = BI.createWidget({ type: "bi.layout", - tagName: "span" + tagName: "span", }); this.text.element.click(function () { o.handler(self.getValue()); @@ -69,7 +69,7 @@ BI.Html = BI.inherit(BI.Single, { BI.createWidget({ type: "bi.default", element: this, - items: [this.text] + items: [this.text], }); } else { this.text = this; @@ -108,7 +108,7 @@ BI.Html = BI.inherit(BI.Single, { BI.Html.superclass.setText.apply(this, arguments); this.options.text = text; this.text.element.html(text); - } + }, }); BI.shortcut("bi.html", BI.Html); diff --git a/src/base/single/icon/icon.js b/src/base/single/icon/icon.js index 112ea539a..916206bbd 100644 --- a/src/base/single/icon/icon.js +++ b/src/base/single/icon/icon.js @@ -6,9 +6,10 @@ BI.Icon = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.Icon.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { tagName: "i", - baseCls: (conf.baseCls || "") + " x-icon b-font horizon-center display-block" + baseCls: (conf.baseCls || "") + " x-icon b-font horizon-center display-block", }); }, @@ -16,6 +17,6 @@ BI.Icon = BI.inherit(BI.Single, { if (BI.isIE9Below && BI.isIE9Below()) { this.element.addClass("hack"); } - } + }, }); BI.shortcut("bi.icon", BI.Icon); diff --git a/src/base/single/iframe/__test__/iframe.test.js b/src/base/single/iframe/__test__/iframe.test.js index 8e99a48a0..9a9049ebc 100644 --- a/src/base/single/iframe/__test__/iframe.test.js +++ b/src/base/single/iframe/__test__/iframe.test.js @@ -5,13 +5,12 @@ */ describe("IframeTest", function () { - /** * test_author_windy */ it("directionPager", function () { var a = BI.Test.createWidget({ - type: "bi.iframe" + type: "bi.iframe", }); a.setSrc("http://www.baidu.com"); a.setName("testIFrame"); @@ -20,4 +19,4 @@ describe("IframeTest", function () { expect(a.getName(), "testIFrame"); a.destroy(); }); -}); \ No newline at end of file +}); diff --git a/src/base/single/iframe/iframe.js b/src/base/single/iframe/iframe.js index a7137fa58..e2df49e25 100644 --- a/src/base/single/iframe/iframe.js +++ b/src/base/single/iframe/iframe.js @@ -7,6 +7,7 @@ BI.Iframe = BI.inherit(BI.Single, { _defaultConfig: function (config) { var conf = BI.Iframe.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { tagName: "iframe", baseCls: (conf.baseCls || "") + " bi-iframe", @@ -14,7 +15,7 @@ BI.Iframe = BI.inherit(BI.Single, { name: "", attributes: {}, width: "100%", - height: "100%" + height: "100%", }); }, @@ -31,7 +32,7 @@ BI.Iframe = BI.inherit(BI.Single, { this.options.attributes = BI.extend({ frameborder: 0, src: o.src, - name: o.name + name: o.name, }, this.options.attributes); }, @@ -51,7 +52,7 @@ BI.Iframe = BI.inherit(BI.Single, { getName: function () { return this.options.name; - } + }, }); BI.shortcut("bi.iframe", BI.Iframe); diff --git a/src/base/single/img/__test__/img.test.js b/src/base/single/img/__test__/img.test.js index d16ca92d8..95c892b58 100644 --- a/src/base/single/img/__test__/img.test.js +++ b/src/base/single/img/__test__/img.test.js @@ -5,7 +5,6 @@ */ describe("ImgTest", function () { - /** * test_author_windy */ @@ -13,11 +12,11 @@ describe("ImgTest", function () { var a = BI.Test.createWidget({ type: "bi.img", iconWidth: 36, - iconHeight: 36 + iconHeight: 36, }); a.setSrc("test.png"); expect(a.element.attr("src")).to.equal("test.png"); expect(a.getSrc()).to.equal("test.png"); a.destroy(); }); -}); \ No newline at end of file +}); diff --git a/src/base/single/img/img.js b/src/base/single/img/img.js index aa90aaf40..ca715fb79 100644 --- a/src/base/single/img/img.js +++ b/src/base/single/img/img.js @@ -9,13 +9,14 @@ BI.Img = BI.inherit(BI.Single, { _defaultConfig: function (config) { var conf = BI.Img.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { tagName: "img", baseCls: (conf.baseCls || "") + " bi-img display-block", src: "", attributes: config.src ? { src: config.src } : {}, width: "100%", - height: "100%" + height: "100%", }); }, @@ -23,7 +24,7 @@ BI.Img = BI.inherit(BI.Single, { BI.Img.superclass._initProps.apply(this, arguments); var o = this.options; this.options.attributes = BI.extend({ - src: o.src + src: o.src, }, this.options.attributes); }, @@ -34,7 +35,7 @@ BI.Img = BI.inherit(BI.Single, { getSrc: function () { return this.options.src; - } + }, }); BI.shortcut("bi.img", BI.Img); diff --git a/src/base/single/input/checkbox/checkbox.image.js b/src/base/single/input/checkbox/checkbox.image.js index dc1703567..0400f6530 100644 --- a/src/base/single/input/checkbox/checkbox.image.js +++ b/src/base/single/input/checkbox/checkbox.image.js @@ -6,6 +6,7 @@ BI.ImageCheckbox = BI.inherit(BI.IconButton, { _defaultConfig: function () { var conf = BI.ImageCheckbox.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-image-checkbox check-box-icon", selected: false, @@ -13,10 +14,10 @@ BI.ImageCheckbox = BI.inherit(BI.IconButton, { width: 16, height: 16, iconWidth: 16, - iconHeight: 16 + iconHeight: 16, }); - } + }, }); BI.ImageCheckbox.EVENT_CHANGE = BI.IconButton.EVENT_CHANGE; -BI.shortcut("bi.image_checkbox", BI.ImageCheckbox); \ No newline at end of file +BI.shortcut("bi.image_checkbox", BI.ImageCheckbox); diff --git a/src/base/single/input/checkbox/checkbox.js b/src/base/single/input/checkbox/checkbox.js index 4a72f431f..b25d743e8 100644 --- a/src/base/single/input/checkbox/checkbox.js +++ b/src/base/single/input/checkbox/checkbox.js @@ -12,11 +12,12 @@ BI.Checkbox = BI.inherit(BI.BasicButton, { width: 14, height: 14, iconWidth: 14, - iconHeight: 14 + iconHeight: 14, }, render: function () { var self = this, o = this.options; + return { type: "bi.center_adapt", items: [{ @@ -26,8 +27,8 @@ BI.Checkbox = BI.inherit(BI.BasicButton, { }, cls: "checkbox-content", width: o.iconWidth, - height: o.iconHeight - }] + height: o.iconHeight, + }], }; }, @@ -42,7 +43,7 @@ BI.Checkbox = BI.inherit(BI.BasicButton, { doClick: function () { BI.Checkbox.superclass.doClick.apply(this, arguments); - if(this.isValid()) { + if (this.isValid()) { this.fireEvent(BI.Checkbox.EVENT_CHANGE); } }, @@ -54,7 +55,7 @@ BI.Checkbox = BI.inherit(BI.BasicButton, { } else { this.checkbox.element.removeClass("bi-high-light-background"); } - } + }, }); BI.Checkbox.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/single/input/input.js b/src/base/single/input/input.js index e868a5747..8f20bddbb 100644 --- a/src/base/single/input/input.js +++ b/src/base/single/input/input.js @@ -7,12 +7,13 @@ BI.Input = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.Input.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-input display-block overflow-dot", tagName: "input", validationChecker: BI.emptyFn, quitChecker: BI.emptyFn, // 按确定键能否退出编辑 - allowBlank: false + allowBlank: false, }); }, @@ -27,15 +28,15 @@ BI.Input = BI.inherit(BI.Single, { }, BI.EVENT_RESPONSE_TIME); var _clk = BI.debounce(BI.bind(this._click, this), BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, }); this._focusDebounce = BI.debounce(BI.bind(this._focus, this), BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, }); this._blurDebounce = BI.debounce(BI.bind(this._blur, this), BI.EVENT_RESPONSE_TIME, { "leading": true, - "trailing": false + "trailing": false, }); this.element .keydown(function (e) { @@ -86,7 +87,7 @@ BI.Input = BI.inherit(BI.Single, { this.element.addClass("bi-input-focus"); this._checkValidationOnValueChange(); this._isEditing = true; - if (this.getValue() == "") { + if (this.getValue() === "") { this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EMPTY, this.getValue(), this); this.fireEvent(BI.Input.EVENT_EMPTY); } @@ -139,7 +140,7 @@ BI.Input = BI.inherit(BI.Single, { this._checkValidationOnValueChange(); } if (this.isValid() && BI.trim(this.getValue()) !== "") { - if (BI.trim(this.getValue()) !== this._lastValue && (!this._start || this._lastValue == null || this._lastValue === "") + if (BI.trim(this.getValue()) !== this._lastValue && (!this._start || BI.isNull(this._lastValue) || this._lastValue === "") || (this._pause === true && !/(\s|\u00A0)$/.test(this.getValue()))) { this._start = true; this._pause = false; @@ -147,7 +148,7 @@ BI.Input = BI.inherit(BI.Single, { this.fireEvent(BI.Input.EVENT_START); } } - if (keyCode == BI.KeyCode.ENTER) { + if (BI.isEqual(keyCode, BI.KeyCode.ENTER)) { if (this.isValid() || this.options.quitChecker.apply(this, [BI.trim(this.getValue())]) !== false) { this.blur(); this.fireEvent(BI.Input.EVENT_ENTER); @@ -155,20 +156,20 @@ BI.Input = BI.inherit(BI.Single, { this.fireEvent(BI.Input.EVENT_RESTRICT); } } - if (keyCode == BI.KeyCode.SPACE) { + if (BI.isEqual(keyCode, BI.KeyCode.SPACE)) { this.fireEvent(BI.Input.EVENT_SPACE); } - if (keyCode == BI.KeyCode.BACKSPACE && this._lastValue == "") { + if (BI.isEqual(keyCode, BI.KeyCode.BACKSPACE) && this._lastValue === "") { this.fireEvent(BI.Input.EVENT_REMOVE); } - if (keyCode == BI.KeyCode.BACKSPACE || keyCode == BI.KeyCode.DELETE) { + if (BI.isEqual(keyCode, BI.KeyCode.BACKSPACE) || BI.isEqual(keyCode, BI.KeyCode.DELETE)) { this.fireEvent(BI.Input.EVENT_BACKSPACE); } this.fireEvent(BI.Input.EVENT_KEY_DOWN, arguments); // _valueChange中会更新_lastValue, 这边缓存用以后续STOP事件服务 var lastValue = this._lastValue; - if(BI.trim(this.getValue()) !== BI.trim(this._lastValue || "")){ + if (BI.trim(this.getValue()) !== BI.trim(this._lastValue || "")) { this._valueChange(); } if (BI.isEndWithBlank(this.getValue())) { @@ -185,7 +186,7 @@ BI.Input = BI.inherit(BI.Single, { // 初始状态 _defaultState: function () { - if (this.getValue() == "") { + if (this.getValue() === "") { this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EMPTY, this.getValue(), this); this.fireEvent(BI.Input.EVENT_EMPTY); } @@ -199,7 +200,7 @@ BI.Input = BI.inherit(BI.Single, { this.fireEvent(BI.Input.EVENT_CHANGE); this._lastSubmitValue = BI.trim(this.getValue()); } - if (this.getValue() == "") { + if (this.getValue() === "") { this.fireEvent(BI.Controller.EVENT_CHANGE, BI.Events.EMPTY, this.getValue(), this); this.fireEvent(BI.Input.EVENT_EMPTY); } @@ -209,14 +210,16 @@ BI.Input = BI.inherit(BI.Single, { _checkValidationOnValueChange: function (callback) { var self = this, o = this.options; var v = this.getValue(); - if (o.allowBlank === true && BI.trim(v) == "") { + if (o.allowBlank === true && BI.trim(v) === "") { this.setValid(true); callback && callback(); + return; } - if (BI.trim(v) == "") { + if (BI.trim(v) === "") { this.setValid(false); callback && callback(); + return; } var checker = o.validationChecker.apply(this, [BI.trim(v)]); @@ -224,7 +227,7 @@ BI.Input = BI.inherit(BI.Single, { checker.then(function (validate) { self.setValid(validate !== false); callback && callback(); - }) + }); } else { this.setValid(checker !== false); callback && callback(); @@ -306,7 +309,7 @@ BI.Input = BI.inherit(BI.Single, { _setEnable: function (b) { BI.Input.superclass._setEnable.apply(this, [b]); this.element[0].disabled = !b; - } + }, }); BI.Input.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/single/input/radio/radio.image.js b/src/base/single/input/radio/radio.image.js index e362592e4..f9d870f63 100644 --- a/src/base/single/input/radio/radio.image.js +++ b/src/base/single/input/radio/radio.image.js @@ -6,6 +6,7 @@ BI.ImageRadio = BI.inherit(BI.IconButton, { _defaultConfig: function () { var conf = BI.ImageRadio.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-radio radio-icon", selected: false, @@ -13,16 +14,16 @@ BI.ImageRadio = BI.inherit(BI.IconButton, { width: 16, height: 16, iconWidth: 16, - iconHeight: 16 + iconHeight: 16, }); }, doClick: function () { BI.ImageRadio.superclass.doClick.apply(this, arguments); - if(this.isValid()) { + if (this.isValid()) { this.fireEvent(BI.ImageRadio.EVENT_CHANGE); } - } + }, }); BI.ImageRadio.EVENT_CHANGE = BI.IconButton.EVENT_CHANGE; diff --git a/src/base/single/input/radio/radio.js b/src/base/single/input/radio/radio.js index f17e79e9e..d842196ae 100644 --- a/src/base/single/input/radio/radio.js +++ b/src/base/single/input/radio/radio.js @@ -12,11 +12,12 @@ BI.Radio = BI.inherit(BI.BasicButton, { width: 14, height: 14, iconWidth: 14, - iconHeight: 14 + iconHeight: 14, }, render: function () { var self = this, o = this.options; + return { type: "bi.center_adapt", items: [{ @@ -26,8 +27,8 @@ BI.Radio = BI.inherit(BI.BasicButton, { self.radio = _ref; }, width: o.iconWidth, - height: o.iconHeight - }] + height: o.iconHeight, + }], }; }, @@ -42,7 +43,7 @@ BI.Radio = BI.inherit(BI.BasicButton, { doClick: function () { BI.Radio.superclass.doClick.apply(this, arguments); - if(this.isValid()) { + if (this.isValid()) { this.fireEvent(BI.Radio.EVENT_CHANGE); } }, @@ -54,7 +55,7 @@ BI.Radio = BI.inherit(BI.BasicButton, { } else { this.radio.element.removeClass("bi-high-light-background"); } - } + }, }); BI.Radio.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/single/tip/0.tip.js b/src/base/single/tip/0.tip.js index a57d90a2f..a13240d8b 100644 --- a/src/base/single/tip/0.tip.js +++ b/src/base/single/tip/0.tip.js @@ -18,6 +18,6 @@ BI.Tip = BI.inherit(BI.Single, { _init: function () { BI.Tip.superclass._init.apply(this, arguments); - this.element.css({ zIndex: this.options.zIndex, }); + this.element.css({ zIndex: this.options.zIndex }); }, }); diff --git a/src/base/tree/customtree.js b/src/base/tree/customtree.js index 9b2cf1b6a..c20af875a 100644 --- a/src/base/tree/customtree.js +++ b/src/base/tree/customtree.js @@ -47,7 +47,7 @@ BI.CustomTree = BI.inherit(BI.Widget, { el: { value: node.value, }, - popup: { type: "bi.custom_tree", }, + popup: { type: "bi.custom_tree" }, }, BI.deepClone(o.expander), { id: node.id, pId: node.pId, From 8aa45f3c2a6f78e53cb8688b8e16d90a91a17dc6 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 15 Aug 2022 17:24:36 +0800 Subject: [PATCH 099/161] auto upgrade version to 2.0.20220815172431 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 384a269cd..1540099d5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220815155758", + "version": "2.0.20220815172431", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From dc79aa76bdc21b6a46b1397baa889bb738c79be7 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Mon, 15 Aug 2022 17:27:44 +0800 Subject: [PATCH 100/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 1 - 1 file changed, 1 deletion(-) diff --git a/.eslintrc b/.eslintrc index 70d386082..3fbfc3524 100644 --- a/.eslintrc +++ b/.eslintrc @@ -32,7 +32,6 @@ "no-param-reassign": "off", "quotes": [2, "double"], "comma-dangle": ["error", { "arrays": "never", "objects": "always-multiline"}] // 多行对象字面量中要求拖尾逗号 - // "no-empty": ["error",{"allowEmptyCatch":"true"}] } }, { "files": ["webpack/*.js", "./*.js", "lib/**/*.js", "lib/*.js", "./bin/*.js", "./bin/**/*.js"], From 659dcc15663490a75d5552a3f2399321cff38679 Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 15 Aug 2022 18:34:35 +0800 Subject: [PATCH 101/161] =?UTF-8?q?=E6=97=A0JIRA=20FDL=E9=9C=80=E6=B1=82?= =?UTF-8?q?=20chunk=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lodash.md | 2 +- src/core/1.lodash.js | 20456 +++++++++++++++++++++-------------------- src/core/2.base.js | 4 +- 3 files changed, 10272 insertions(+), 10190 deletions(-) diff --git a/lodash.md b/lodash.md index 770200a82..8faeb0142 100644 --- a/lodash.md +++ b/lodash.md @@ -1 +1 @@ -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,unescape" +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,unescape,chunk" diff --git a/src/core/1.lodash.js b/src/core/1.lodash.js index 8be57fe24..934448ac6 100644 --- a/src/core/1.lodash.js +++ b/src/core/1.lodash.js @@ -1,10275 +1,10357 @@ /** * @license * Lodash (Custom Build) - * 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,unescape"` + * 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,unescape,chunk"` * Copyright JS Foundation and other contributors * Released under MIT license * Based on Underscore.js 1.8.3 * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors */ -;(function() { - - /** Used as a safe reference for `undefined` in pre-ES5 environments. */ - var undefined; - - /** Used as the semantic version number. */ - var VERSION = '4.17.5'; - - /** Used as the size to enable large array optimizations. */ - var LARGE_ARRAY_SIZE = 200; - - /** Error message constants. */ - var FUNC_ERROR_TEXT = 'Expected a function'; - - /** Used to stand-in for `undefined` hash values. */ - var HASH_UNDEFINED = '__lodash_hash_undefined__'; - - /** Used as the maximum memoize cache size. */ - var MAX_MEMOIZE_SIZE = 500; - - /** Used as the internal argument placeholder. */ - var PLACEHOLDER = '__lodash_placeholder__'; - - /** Used to compose bitmasks for cloning. */ - var CLONE_DEEP_FLAG = 1, - CLONE_FLAT_FLAG = 2, - CLONE_SYMBOLS_FLAG = 4; - - /** Used to compose bitmasks for value comparisons. */ - var COMPARE_PARTIAL_FLAG = 1, - COMPARE_UNORDERED_FLAG = 2; - - /** Used to compose bitmasks for function metadata. */ - var WRAP_BIND_FLAG = 1, - WRAP_BIND_KEY_FLAG = 2, - WRAP_CURRY_BOUND_FLAG = 4, - WRAP_CURRY_FLAG = 8, - WRAP_CURRY_RIGHT_FLAG = 16, - WRAP_PARTIAL_FLAG = 32, - WRAP_PARTIAL_RIGHT_FLAG = 64, - WRAP_ARY_FLAG = 128, - WRAP_REARG_FLAG = 256, - WRAP_FLIP_FLAG = 512; - - /** Used to detect hot functions by number of calls within a span of milliseconds. */ - var HOT_COUNT = 800, - HOT_SPAN = 16; - - /** Used to indicate the type of lazy iteratees. */ - var LAZY_FILTER_FLAG = 1, - LAZY_MAP_FLAG = 2, - LAZY_WHILE_FLAG = 3; - - /** Used as references for various `Number` constants. */ - var INFINITY = 1 / 0, - MAX_SAFE_INTEGER = 9007199254740991, - MAX_INTEGER = 1.7976931348623157e+308, - NAN = 0 / 0; - - /** Used as references for the maximum length and index of an array. */ - var MAX_ARRAY_LENGTH = 4294967295; - - /** Used to associate wrap methods with their bit flags. */ - var wrapFlags = [ - ['ary', WRAP_ARY_FLAG], - ['bind', WRAP_BIND_FLAG], - ['bindKey', WRAP_BIND_KEY_FLAG], - ['curry', WRAP_CURRY_FLAG], - ['curryRight', WRAP_CURRY_RIGHT_FLAG], - ['flip', WRAP_FLIP_FLAG], - ['partial', WRAP_PARTIAL_FLAG], - ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], - ['rearg', WRAP_REARG_FLAG] - ]; - - /** `Object#toString` result references. */ - var argsTag = '[object Arguments]', - arrayTag = '[object Array]', - asyncTag = '[object AsyncFunction]', - boolTag = '[object Boolean]', - dateTag = '[object Date]', - errorTag = '[object Error]', - funcTag = '[object Function]', - genTag = '[object GeneratorFunction]', - mapTag = '[object Map]', - numberTag = '[object Number]', - nullTag = '[object Null]', - objectTag = '[object Object]', - promiseTag = '[object Promise]', - proxyTag = '[object Proxy]', - regexpTag = '[object RegExp]', - setTag = '[object Set]', - stringTag = '[object String]', - symbolTag = '[object Symbol]', - undefinedTag = '[object Undefined]', - weakMapTag = '[object WeakMap]'; - - var arrayBufferTag = '[object ArrayBuffer]', - dataViewTag = '[object DataView]', - float32Tag = '[object Float32Array]', - float64Tag = '[object Float64Array]', - int8Tag = '[object Int8Array]', - int16Tag = '[object Int16Array]', - int32Tag = '[object Int32Array]', - uint8Tag = '[object Uint8Array]', - uint8ClampedTag = '[object Uint8ClampedArray]', - uint16Tag = '[object Uint16Array]', - uint32Tag = '[object Uint32Array]'; - - /** Used to match HTML entities and HTML characters. */ - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, - reUnescapedHtml = /[&<>"']/g, - reHasEscapedHtml = RegExp(reEscapedHtml.source), - reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - - /** Used to match property names within property paths. */ - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, - reIsPlainProp = /^\w*$/, - rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - - /** - * Used to match `RegExp` - * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). - */ - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - - /** Used to match leading and trailing whitespace. */ - var reTrim = /^\s+|\s+$/g; - - /** Used to match wrap detail comments. */ - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, - reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, - reSplitDetails = /,? & /; - - /** Used to match backslashes in property paths. */ - var reEscapeChar = /\\(\\)?/g; - - /** Used to match `RegExp` flags from their coerced string values. */ - var reFlags = /\w*$/; - - /** Used to detect bad signed hexadecimal string values. */ - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - - /** Used to detect binary string values. */ - var reIsBinary = /^0b[01]+$/i; - - /** Used to detect host constructors (Safari). */ - var reIsHostCtor = /^\[object .+?Constructor\]$/; - - /** Used to detect octal string values. */ - var reIsOctal = /^0o[0-7]+$/i; - - /** Used to detect unsigned integer values. */ - var reIsUint = /^(?:0|[1-9]\d*)$/; - - /** Used to compose unicode character classes. */ - var rsAstralRange = '\\ud800-\\udfff', - rsComboMarksRange = '\\u0300-\\u036f', - reComboHalfMarksRange = '\\ufe20-\\ufe2f', - rsComboSymbolsRange = '\\u20d0-\\u20ff', - rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, - rsVarRange = '\\ufe0e\\ufe0f'; - - /** Used to compose unicode capture groups. */ - var rsAstral = '[' + rsAstralRange + ']', - rsCombo = '[' + rsComboRange + ']', - rsFitz = '\\ud83c[\\udffb-\\udfff]', - rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', - rsNonAstral = '[^' + rsAstralRange + ']', - rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', - rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', - rsZWJ = '\\u200d'; - - /** Used to compose unicode regexes. */ - var reOptMod = rsModifier + '?', - rsOptVar = '[' + rsVarRange + ']?', - rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', - rsSeq = rsOptVar + reOptMod + rsOptJoin, - rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; - - /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ - var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); - - /** 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/). */ - var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); - - /** Used to identify `toStringTag` values of typed arrays. */ - var typedArrayTags = {}; - typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = - typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = - typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = - typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = - typedArrayTags[uint32Tag] = true; - typedArrayTags[argsTag] = typedArrayTags[arrayTag] = - typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = - typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = - typedArrayTags[errorTag] = typedArrayTags[funcTag] = - typedArrayTags[mapTag] = typedArrayTags[numberTag] = - typedArrayTags[objectTag] = typedArrayTags[regexpTag] = - typedArrayTags[setTag] = typedArrayTags[stringTag] = - typedArrayTags[weakMapTag] = false; - - /** Used to identify `toStringTag` values supported by `_.clone`. */ - var cloneableTags = {}; - cloneableTags[argsTag] = cloneableTags[arrayTag] = - cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = - cloneableTags[boolTag] = cloneableTags[dateTag] = - cloneableTags[float32Tag] = cloneableTags[float64Tag] = - cloneableTags[int8Tag] = cloneableTags[int16Tag] = - cloneableTags[int32Tag] = cloneableTags[mapTag] = - cloneableTags[numberTag] = cloneableTags[objectTag] = - cloneableTags[regexpTag] = cloneableTags[setTag] = - cloneableTags[stringTag] = cloneableTags[symbolTag] = - cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = - cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag] = cloneableTags[funcTag] = - cloneableTags[weakMapTag] = false; - - /** Used to map characters to HTML entities. */ - var htmlEscapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - - /** Used to map HTML entities to characters. */ - var htmlUnescapes = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - ''': "'" - }; - - /** Built-in method references without a dependency on `root`. */ - var freeParseFloat = parseFloat, - freeParseInt = parseInt; - - /** Detect free variable `global` from Node.js. */ - var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; - - /** Detect free variable `self`. */ - var freeSelf = typeof self == 'object' && self && self.Object === Object && self; - - /** Used as a reference to the global object. */ - var root = freeGlobal || freeSelf || Function('return this')(); - - /** Detect free variable `exports`. */ - var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; - - /** Detect free variable `module`. */ - var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; - - /** Detect the popular CommonJS extension `module.exports`. */ - var moduleExports = freeModule && freeModule.exports === freeExports; - - /** Detect free variable `process` from Node.js. */ - var freeProcess = moduleExports && freeGlobal.process; - - /** Used to access faster Node.js helpers. */ - var nodeUtil = (function() { - try { - return freeProcess && freeProcess.binding && freeProcess.binding('util'); - } catch (e) {} - }()); - - /* Node.js helper references. */ - var nodeIsDate = nodeUtil && nodeUtil.isDate, - nodeIsMap = nodeUtil && nodeUtil.isMap, - nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, - nodeIsSet = nodeUtil && nodeUtil.isSet, - nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - - /*--------------------------------------------------------------------------*/ - - /** - * A faster alternative to `Function#apply`, this function invokes `func` - * with the `this` binding of `thisArg` and the arguments of `args`. - * - * @private - * @param {Function} func The function to invoke. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} args The arguments to invoke `func` with. - * @returns {*} Returns the result of `func`. - */ - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - /** - * A specialized version of `baseAggregator` for arrays. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - /** - * A specialized version of `_.forEach` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns `array`. - */ - function arrayEach(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - /** - * A specialized version of `_.every` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - */ - function arrayEvery(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - /** - * A specialized version of `_.filter` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function arrayFilter(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * A specialized version of `_.includes` for arrays without support for - * specifying an index to search from. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - /** - * This function is like `arrayIncludes` except that it accepts a comparator. - * - * @private - * @param {Array} [array] The array to inspect. - * @param {*} target The value to search for. - * @param {Function} comparator The comparator invoked per element. - * @returns {boolean} Returns `true` if `target` is found, else `false`. - */ - function arrayIncludesWith(array, value, comparator) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - /** - * A specialized version of `_.map` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function arrayMap(array, iteratee) { - var index = -1, - length = array == null ? 0 : array.length, - result = Array(length); - - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - /** - * Appends the elements of `values` to `array`. - * - * @private - * @param {Array} array The array to modify. - * @param {Array} values The values to append. - * @returns {Array} Returns `array`. - */ - function arrayPush(array, values) { - var index = -1, - length = values.length, - offset = array.length; - - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - /** - * A specialized version of `_.reduce` for arrays without support for - * iteratee shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @param {boolean} [initAccum] Specify using the first element of `array` as - * the initial value. - * @returns {*} Returns the accumulated value. - */ - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, - length = array == null ? 0 : array.length; - - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - /** - * A specialized version of `_.some` for arrays without support for iteratee - * shorthands. - * - * @private - * @param {Array} [array] The array to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function arraySome(array, predicate) { - var index = -1, - length = array == null ? 0 : array.length; - - while (++index < length) { - if (predicate(array[index], index, array)) { +;(function () { + + /** Used as a safe reference for `undefined` in pre-ES5 environments. */ + var undefined; + + /** Used as the semantic version number. */ + var VERSION = '4.17.5'; + + /** Used as the size to enable large array optimizations. */ + var LARGE_ARRAY_SIZE = 200; + + /** Error message constants. */ + var FUNC_ERROR_TEXT = 'Expected a function'; + + /** Used to stand-in for `undefined` hash values. */ + var HASH_UNDEFINED = '__lodash_hash_undefined__'; + + /** Used as the maximum memoize cache size. */ + var MAX_MEMOIZE_SIZE = 500; + + /** Used as the internal argument placeholder. */ + var PLACEHOLDER = '__lodash_placeholder__'; + + /** Used to compose bitmasks for cloning. */ + var CLONE_DEEP_FLAG = 1, + CLONE_FLAT_FLAG = 2, + CLONE_SYMBOLS_FLAG = 4; + + /** Used to compose bitmasks for value comparisons. */ + var COMPARE_PARTIAL_FLAG = 1, + COMPARE_UNORDERED_FLAG = 2; + + /** Used to compose bitmasks for function metadata. */ + var WRAP_BIND_FLAG = 1, + WRAP_BIND_KEY_FLAG = 2, + WRAP_CURRY_BOUND_FLAG = 4, + WRAP_CURRY_FLAG = 8, + WRAP_CURRY_RIGHT_FLAG = 16, + WRAP_PARTIAL_FLAG = 32, + WRAP_PARTIAL_RIGHT_FLAG = 64, + WRAP_ARY_FLAG = 128, + WRAP_REARG_FLAG = 256, + WRAP_FLIP_FLAG = 512; + + /** Used to detect hot functions by number of calls within a span of milliseconds. */ + var HOT_COUNT = 800, + HOT_SPAN = 16; + + /** Used to indicate the type of lazy iteratees. */ + var LAZY_FILTER_FLAG = 1, + LAZY_MAP_FLAG = 2, + LAZY_WHILE_FLAG = 3; + + /** Used as references for various `Number` constants. */ + var INFINITY = 1 / 0, + MAX_SAFE_INTEGER = 9007199254740991, + MAX_INTEGER = 1.7976931348623157e+308, + NAN = 0 / 0; + + /** Used as references for the maximum length and index of an array. */ + var MAX_ARRAY_LENGTH = 4294967295; + + /** Used to associate wrap methods with their bit flags. */ + var wrapFlags = [ + ['ary', WRAP_ARY_FLAG], + ['bind', WRAP_BIND_FLAG], + ['bindKey', WRAP_BIND_KEY_FLAG], + ['curry', WRAP_CURRY_FLAG], + ['curryRight', WRAP_CURRY_RIGHT_FLAG], + ['flip', WRAP_FLIP_FLAG], + ['partial', WRAP_PARTIAL_FLAG], + ['partialRight', WRAP_PARTIAL_RIGHT_FLAG], + ['rearg', WRAP_REARG_FLAG] + ]; + + /** `Object#toString` result references. */ + var argsTag = '[object Arguments]', + arrayTag = '[object Array]', + asyncTag = '[object AsyncFunction]', + boolTag = '[object Boolean]', + dateTag = '[object Date]', + errorTag = '[object Error]', + funcTag = '[object Function]', + genTag = '[object GeneratorFunction]', + mapTag = '[object Map]', + numberTag = '[object Number]', + nullTag = '[object Null]', + objectTag = '[object Object]', + promiseTag = '[object Promise]', + proxyTag = '[object Proxy]', + regexpTag = '[object RegExp]', + setTag = '[object Set]', + stringTag = '[object String]', + symbolTag = '[object Symbol]', + undefinedTag = '[object Undefined]', + weakMapTag = '[object WeakMap]'; + + var arrayBufferTag = '[object ArrayBuffer]', + dataViewTag = '[object DataView]', + float32Tag = '[object Float32Array]', + float64Tag = '[object Float64Array]', + int8Tag = '[object Int8Array]', + int16Tag = '[object Int16Array]', + int32Tag = '[object Int32Array]', + uint8Tag = '[object Uint8Array]', + uint8ClampedTag = '[object Uint8ClampedArray]', + uint16Tag = '[object Uint16Array]', + uint32Tag = '[object Uint32Array]'; + + /** Used to match HTML entities and HTML characters. */ + var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, + reUnescapedHtml = /[&<>"']/g, + reHasEscapedHtml = RegExp(reEscapedHtml.source), + reHasUnescapedHtml = RegExp(reUnescapedHtml.source); + + /** Used to match property names within property paths. */ + var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, + reIsPlainProp = /^\w*$/, + rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; + + /** + * Used to match `RegExp` + * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns). + */ + var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; + + /** Used to match leading and trailing whitespace. */ + var reTrim = /^\s+|\s+$/g; + + /** Used to match wrap detail comments. */ + var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, + reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, + reSplitDetails = /,? & /; + + /** Used to match backslashes in property paths. */ + var reEscapeChar = /\\(\\)?/g; + + /** Used to match `RegExp` flags from their coerced string values. */ + var reFlags = /\w*$/; + + /** Used to detect bad signed hexadecimal string values. */ + var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; + + /** Used to detect binary string values. */ + var reIsBinary = /^0b[01]+$/i; + + /** Used to detect host constructors (Safari). */ + var reIsHostCtor = /^\[object .+?Constructor\]$/; + + /** Used to detect octal string values. */ + var reIsOctal = /^0o[0-7]+$/i; + + /** Used to detect unsigned integer values. */ + var reIsUint = /^(?:0|[1-9]\d*)$/; + + /** Used to compose unicode character classes. */ + var rsAstralRange = '\\ud800-\\udfff', + rsComboMarksRange = '\\u0300-\\u036f', + reComboHalfMarksRange = '\\ufe20-\\ufe2f', + rsComboSymbolsRange = '\\u20d0-\\u20ff', + rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, + rsVarRange = '\\ufe0e\\ufe0f'; + + /** Used to compose unicode capture groups. */ + var rsAstral = '[' + rsAstralRange + ']', + rsCombo = '[' + rsComboRange + ']', + rsFitz = '\\ud83c[\\udffb-\\udfff]', + rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')', + rsNonAstral = '[^' + rsAstralRange + ']', + rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}', + rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]', + rsZWJ = '\\u200d'; + + /** Used to compose unicode regexes. */ + var reOptMod = rsModifier + '?', + rsOptVar = '[' + rsVarRange + ']?', + rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*', + rsSeq = rsOptVar + reOptMod + rsOptJoin, + rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')'; + + /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */ + var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g'); + + /** 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/). */ + var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']'); + + /** Used to identify `toStringTag` values of typed arrays. */ + var typedArrayTags = {}; + typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = + typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = + typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = + typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = + typedArrayTags[uint32Tag] = true; + typedArrayTags[argsTag] = typedArrayTags[arrayTag] = + typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = + typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = + typedArrayTags[errorTag] = typedArrayTags[funcTag] = + typedArrayTags[mapTag] = typedArrayTags[numberTag] = + typedArrayTags[objectTag] = typedArrayTags[regexpTag] = + typedArrayTags[setTag] = typedArrayTags[stringTag] = + typedArrayTags[weakMapTag] = false; + + /** Used to identify `toStringTag` values supported by `_.clone`. */ + var cloneableTags = {}; + cloneableTags[argsTag] = cloneableTags[arrayTag] = + cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = + cloneableTags[boolTag] = cloneableTags[dateTag] = + cloneableTags[float32Tag] = cloneableTags[float64Tag] = + cloneableTags[int8Tag] = cloneableTags[int16Tag] = + cloneableTags[int32Tag] = cloneableTags[mapTag] = + cloneableTags[numberTag] = cloneableTags[objectTag] = + cloneableTags[regexpTag] = cloneableTags[setTag] = + cloneableTags[stringTag] = cloneableTags[symbolTag] = + cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = + cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; + cloneableTags[errorTag] = cloneableTags[funcTag] = + cloneableTags[weakMapTag] = false; + + /** Used to map characters to HTML entities. */ + var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + /** Used to map HTML entities to characters. */ + var htmlUnescapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + ''': "'" + }; + + /** Built-in method references without a dependency on `root`. */ + var freeParseFloat = parseFloat, + freeParseInt = parseInt; + + /** Detect free variable `global` from Node.js. */ + var freeGlobal = typeof global == 'object' && global && global.Object === Object && global; + + /** Detect free variable `self`. */ + var freeSelf = typeof self == 'object' && self && self.Object === Object && self; + + /** Used as a reference to the global object. */ + var root = freeGlobal || freeSelf || Function('return this')(); + + /** Detect free variable `exports`. */ + var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports; + + /** Detect free variable `module`. */ + var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module; + + /** Detect the popular CommonJS extension `module.exports`. */ + var moduleExports = freeModule && freeModule.exports === freeExports; + + /** Detect free variable `process` from Node.js. */ + var freeProcess = moduleExports && freeGlobal.process; + + /** Used to access faster Node.js helpers. */ + var nodeUtil = (function () { + try { + return freeProcess && freeProcess.binding && freeProcess.binding('util'); + } catch (e) { + } + }()); + + /* Node.js helper references. */ + var nodeIsDate = nodeUtil && nodeUtil.isDate, + nodeIsMap = nodeUtil && nodeUtil.isMap, + nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, + nodeIsSet = nodeUtil && nodeUtil.isSet, + nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; + + /*--------------------------------------------------------------------------*/ + + /** + * A faster alternative to `Function#apply`, this function invokes `func` + * with the `this` binding of `thisArg` and the arguments of `args`. + * + * @private + * @param {Function} func The function to invoke. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} args The arguments to invoke `func` with. + * @returns {*} Returns the result of `func`. + */ + function apply(func, thisArg, args) { + switch (args.length) { + case 0: + return func.call(thisArg); + case 1: + return func.call(thisArg, args[0]); + case 2: + return func.call(thisArg, args[0], args[1]); + case 3: + return func.call(thisArg, args[0], args[1], args[2]); + } + return func.apply(thisArg, args); + } + + /** + * A specialized version of `baseAggregator` for arrays. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function arrayAggregator(array, setter, iteratee, accumulator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + var value = array[index]; + setter(accumulator, value, iteratee(value), array); + } + return accumulator; + } + + /** + * A specialized version of `_.forEach` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns `array`. + */ + function arrayEach(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (iteratee(array[index], index, array) === false) { + break; + } + } + return array; + } + + /** + * A specialized version of `_.every` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + */ + function arrayEvery(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (!predicate(array[index], index, array)) { + return false; + } + } return true; - } - } - return false; - } - - /** - * Gets the size of an ASCII `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - var asciiSize = baseProperty('length'); - - /** - * Converts an ASCII `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function asciiToArray(string) { - return string.split(''); - } - - /** - * The base implementation of methods like `_.findKey` and `_.findLastKey`, - * without support for iteratee shorthands, which iterates over `collection` - * using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the found element or its key, else `undefined`. - */ - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection) { - if (predicate(value, key, collection)) { - result = key; + } + + /** + * A specialized version of `_.filter` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function arrayFilter(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (predicate(value, index, array)) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * A specialized version of `_.includes` for arrays without support for + * specifying an index to search from. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludes(array, value) { + var length = array == null ? 0 : array.length; + return !!length && baseIndexOf(array, value, 0) > -1; + } + + /** + * This function is like `arrayIncludes` except that it accepts a comparator. + * + * @private + * @param {Array} [array] The array to inspect. + * @param {*} target The value to search for. + * @param {Function} comparator The comparator invoked per element. + * @returns {boolean} Returns `true` if `target` is found, else `false`. + */ + function arrayIncludesWith(array, value, comparator) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (comparator(value, array[index])) { + return true; + } + } return false; - } - }); - return result; - } - - /** - * The base implementation of `_.findIndex` and `_.findLastIndex` without - * support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} predicate The function invoked per iteration. - * @param {number} fromIndex The index to search from. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, - index = fromIndex + (fromRight ? 1 : -1); - - while ((fromRight ? index-- : ++index < length)) { - if (predicate(array[index], index, array)) { + } + + /** + * A specialized version of `_.map` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function arrayMap(array, iteratee) { + var index = -1, + length = array == null ? 0 : array.length, + result = Array(length); + + while (++index < length) { + result[index] = iteratee(array[index], index, array); + } + return result; + } + + /** + * Appends the elements of `values` to `array`. + * + * @private + * @param {Array} array The array to modify. + * @param {Array} values The values to append. + * @returns {Array} Returns `array`. + */ + function arrayPush(array, values) { + var index = -1, + length = values.length, + offset = array.length; + + while (++index < length) { + array[offset + index] = values[index]; + } + return array; + } + + /** + * A specialized version of `_.reduce` for arrays without support for + * iteratee shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @param {boolean} [initAccum] Specify using the first element of `array` as + * the initial value. + * @returns {*} Returns the accumulated value. + */ + function arrayReduce(array, iteratee, accumulator, initAccum) { + var index = -1, + length = array == null ? 0 : array.length; + + if (initAccum && length) { + accumulator = array[++index]; + } + while (++index < length) { + accumulator = iteratee(accumulator, array[index], index, array); + } + return accumulator; + } + + /** + * A specialized version of `_.some` for arrays without support for iteratee + * shorthands. + * + * @private + * @param {Array} [array] The array to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function arraySome(array, predicate) { + var index = -1, + length = array == null ? 0 : array.length; + + while (++index < length) { + if (predicate(array[index], index, array)) { + return true; + } + } + return false; + } + + /** + * Gets the size of an ASCII `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + var asciiSize = baseProperty('length'); + + /** + * Converts an ASCII `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function asciiToArray(string) { + return string.split(''); + } + + /** + * The base implementation of methods like `_.findKey` and `_.findLastKey`, + * without support for iteratee shorthands, which iterates over `collection` + * using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the found element or its key, else `undefined`. + */ + function baseFindKey(collection, predicate, eachFunc) { + var result; + eachFunc(collection, function (value, key, collection) { + if (predicate(value, key, collection)) { + result = key; + return false; + } + }); + return result; + } + + /** + * The base implementation of `_.findIndex` and `_.findLastIndex` without + * support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} predicate The function invoked per iteration. + * @param {number} fromIndex The index to search from. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseFindIndex(array, predicate, fromIndex, fromRight) { + var length = array.length, + index = fromIndex + (fromRight ? 1 : -1); + + while ((fromRight ? index-- : ++index < length)) { + if (predicate(array[index], index, array)) { + return index; + } + } + return -1; + } + + /** + * The base implementation of `_.indexOf` without `fromIndex` bounds checks. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function baseIndexOf(array, value, fromIndex) { + return value === value + ? strictIndexOf(array, value, fromIndex) + : baseFindIndex(array, baseIsNaN, fromIndex); + } + + /** + * The base implementation of `_.isNaN` without support for number objects. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + */ + function baseIsNaN(value) { + return value !== value; + } + + /** + * The base implementation of `_.property` without support for deep paths. + * + * @private + * @param {string} key The key of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function baseProperty(key) { + return function (object) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.propertyOf` without support for deep paths. + * + * @private + * @param {Object} object The object to query. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyOf(object) { + return function (key) { + return object == null ? undefined : object[key]; + }; + } + + /** + * The base implementation of `_.reduce` and `_.reduceRight`, without support + * for iteratee shorthands, which iterates over `collection` using `eachFunc`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {*} accumulator The initial value. + * @param {boolean} initAccum Specify using the first or last element of + * `collection` as the initial value. + * @param {Function} eachFunc The function to iterate over `collection`. + * @returns {*} Returns the accumulated value. + */ + function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { + eachFunc(collection, function (value, index, collection) { + accumulator = initAccum + ? (initAccum = false, value) + : iteratee(accumulator, value, index, collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.sortBy` which uses `comparer` to define the + * sort order of `array` and replaces criteria objects with their corresponding + * values. + * + * @private + * @param {Array} array The array to sort. + * @param {Function} comparer The function to define sort order. + * @returns {Array} Returns `array`. + */ + function baseSortBy(array, comparer) { + var length = array.length; + + array.sort(comparer); + while (length--) { + array[length] = array[length].value; + } + return array; + } + + /** + * The base implementation of `_.times` without support for iteratee shorthands + * or max array length checks. + * + * @private + * @param {number} n The number of times to invoke `iteratee`. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the array of results. + */ + function baseTimes(n, iteratee) { + var index = -1, + result = Array(n); + + while (++index < n) { + result[index] = iteratee(index); + } + return result; + } + + /** + * The base implementation of `_.unary` without support for storing metadata. + * + * @private + * @param {Function} func The function to cap arguments for. + * @returns {Function} Returns the new capped function. + */ + function baseUnary(func) { + return function (value) { + return func(value); + }; + } + + /** + * The base implementation of `_.values` and `_.valuesIn` which creates an + * array of `object` property values corresponding to the property names + * of `props`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} props The property names to get values for. + * @returns {Object} Returns the array of property values. + */ + function baseValues(object, props) { + return arrayMap(props, function (key) { + return object[key]; + }); + } + + /** + * Checks if a `cache` value for `key` exists. + * + * @private + * @param {Object} cache The cache to query. + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function cacheHas(cache, key) { + return cache.has(key); + } + + /** + * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the first unmatched string symbol. + */ + function charsStartIndex(strSymbols, chrSymbols) { + var index = -1, + length = strSymbols.length; + + while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { + } + return index; + } + + /** + * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol + * that is not found in the character symbols. + * + * @private + * @param {Array} strSymbols The string symbols to inspect. + * @param {Array} chrSymbols The character symbols to find. + * @returns {number} Returns the index of the last unmatched string symbol. + */ + function charsEndIndex(strSymbols, chrSymbols) { + var index = strSymbols.length; + + while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { + } return index; - } - } - return -1; - } - - /** - * The base implementation of `_.indexOf` without `fromIndex` bounds checks. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function baseIndexOf(array, value, fromIndex) { - return value === value - ? strictIndexOf(array, value, fromIndex) - : baseFindIndex(array, baseIsNaN, fromIndex); - } - - /** - * The base implementation of `_.isNaN` without support for number objects. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - */ - function baseIsNaN(value) { - return value !== value; - } - - /** - * The base implementation of `_.property` without support for deep paths. - * - * @private - * @param {string} key The key of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function baseProperty(key) { - return function(object) { - return object == null ? undefined : object[key]; + } + + /** + * Gets the number of `placeholder` occurrences in `array`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} placeholder The placeholder to search for. + * @returns {number} Returns the placeholder count. + */ + function countHolders(array, placeholder) { + var length = array.length, + result = 0; + + while (length--) { + if (array[length] === placeholder) { + ++result; + } + } + return result; + } + + /** + * Used by `_.escape` to convert characters to HTML entities. + * + * @private + * @param {string} chr The matched character to escape. + * @returns {string} Returns the escaped character. + */ + var escapeHtmlChar = basePropertyOf(htmlEscapes); + + /** + * Gets the value at `key` of `object`. + * + * @private + * @param {Object} [object] The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function getValue(object, key) { + return object == null ? undefined : object[key]; + } + + /** + * Checks if `string` contains Unicode symbols. + * + * @private + * @param {string} string The string to inspect. + * @returns {boolean} Returns `true` if a symbol is found, else `false`. + */ + function hasUnicode(string) { + return reHasUnicode.test(string); + } + + /** + * Converts `iterator` to an array. + * + * @private + * @param {Object} iterator The iterator to convert. + * @returns {Array} Returns the converted array. + */ + function iteratorToArray(iterator) { + var data, + result = []; + + while (!(data = iterator.next()).done) { + result.push(data.value); + } + return result; + } + + /** + * Converts `map` to its key-value pairs. + * + * @private + * @param {Object} map The map to convert. + * @returns {Array} Returns the key-value pairs. + */ + function mapToArray(map) { + var index = -1, + result = Array(map.size); + + map.forEach(function (value, key) { + result[++index] = [key, value]; + }); + return result; + } + + /** + * Creates a unary function that invokes `func` with its argument transformed. + * + * @private + * @param {Function} func The function to wrap. + * @param {Function} transform The argument transform. + * @returns {Function} Returns the new function. + */ + function overArg(func, transform) { + return function (arg) { + return func(transform(arg)); + }; + } + + /** + * Replaces all `placeholder` elements in `array` with an internal placeholder + * and returns an array of their indexes. + * + * @private + * @param {Array} array The array to modify. + * @param {*} placeholder The placeholder to replace. + * @returns {Array} Returns the new array of placeholder indexes. + */ + function replaceHolders(array, placeholder) { + var index = -1, + length = array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value === placeholder || value === PLACEHOLDER) { + array[index] = PLACEHOLDER; + result[resIndex++] = index; + } + } + return result; + } + + /** + * Gets the value at `key`, unless `key` is "__proto__". + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the property to get. + * @returns {*} Returns the property value. + */ + function safeGet(object, key) { + return key == '__proto__' + ? undefined + : object[key]; + } + + /** + * Converts `set` to an array of its values. + * + * @private + * @param {Object} set The set to convert. + * @returns {Array} Returns the values. + */ + function setToArray(set) { + var index = -1, + result = Array(set.size); + + set.forEach(function (value) { + result[++index] = value; + }); + return result; + } + + /** + * A specialized version of `_.indexOf` which performs strict equality + * comparisons of values, i.e. `===`. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} fromIndex The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function strictIndexOf(array, value, fromIndex) { + var index = fromIndex - 1, + length = array.length; + + while (++index < length) { + if (array[index] === value) { + return index; + } + } + return -1; + } + + /** + * Gets the number of symbols in `string`. + * + * @private + * @param {string} string The string to inspect. + * @returns {number} Returns the string size. + */ + function stringSize(string) { + return hasUnicode(string) + ? unicodeSize(string) + : asciiSize(string); + } + + /** + * Converts `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function stringToArray(string) { + return hasUnicode(string) + ? unicodeToArray(string) + : asciiToArray(string); + } + + /** + * Used by `_.unescape` to convert HTML entities to characters. + * + * @private + * @param {string} chr The matched character to unescape. + * @returns {string} Returns the unescaped character. + */ + var unescapeHtmlChar = basePropertyOf(htmlUnescapes); + + /** + * Gets the size of a Unicode `string`. + * + * @private + * @param {string} string The string inspect. + * @returns {number} Returns the string size. + */ + function unicodeSize(string) { + var result = reUnicode.lastIndex = 0; + while (reUnicode.test(string)) { + ++result; + } + return result; + } + + /** + * Converts a Unicode `string` to an array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the converted array. + */ + function unicodeToArray(string) { + return string.match(reUnicode) || []; + } + + /*--------------------------------------------------------------------------*/ + + /** Used for built-in method references. */ + var arrayProto = Array.prototype, + funcProto = Function.prototype, + objectProto = Object.prototype; + + /** Used to detect overreaching core-js shims. */ + var coreJsData = root['__core-js_shared__']; + + /** Used to resolve the decompiled source of functions. */ + var funcToString = funcProto.toString; + + /** Used to check objects for own properties. */ + var hasOwnProperty = objectProto.hasOwnProperty; + + /** Used to generate unique IDs. */ + var idCounter = 0; + + /** Used to detect methods masquerading as native. */ + var maskSrcKey = (function () { + var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); + return uid ? ('Symbol(src)_1.' + uid) : ''; + }()); + + /** + * Used to resolve the + * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) + * of values. + */ + var nativeObjectToString = objectProto.toString; + + /** Used to infer the `Object` constructor. */ + var objectCtorString = funcToString.call(Object); + + /** Used to restore the original `_` reference in `_.noConflict`. */ + var oldDash = root._; + + /** Used to detect if a method is native. */ + var reIsNative = RegExp('^' + + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') + .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' + ); + + /** Built-in value references. */ + var Buffer = moduleExports ? root.Buffer : undefined, + Symbol = root.Symbol, + Uint8Array = root.Uint8Array, + allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, + getPrototype = overArg(Object.getPrototypeOf, Object), + objectCreate = Object.create, + propertyIsEnumerable = objectProto.propertyIsEnumerable, + splice = arrayProto.splice, + spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, + symIterator = Symbol ? Symbol.iterator : undefined, + symToStringTag = Symbol ? Symbol.toStringTag : undefined; + + var defineProperty = (function () { + try { + var func = getNative(Object, 'defineProperty'); + func({}, '', {}); + return func; + } catch (e) { + } + }()); + + /* Built-in method references for those with the same name as other `lodash` methods. */ + var nativeCeil = Math.ceil, + nativeFloor = Math.floor, + nativeGetSymbols = Object.getOwnPropertySymbols, + nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, + nativeIsFinite = root.isFinite, + nativeKeys = overArg(Object.keys, Object), + nativeMax = Math.max, + nativeMin = Math.min, + nativeNow = Date.now, + nativeRandom = Math.random, + nativeReverse = arrayProto.reverse; + + /* Built-in method references that are verified to be native. */ + var DataView = getNative(root, 'DataView'), + Map = getNative(root, 'Map'), + Promise = getNative(root, 'Promise'), + Set = getNative(root, 'Set'), + WeakMap = getNative(root, 'WeakMap'), + nativeCreate = getNative(Object, 'create'); + + /** Used to store function metadata. */ + var metaMap = WeakMap && new WeakMap; + + /** Used to lookup unminified function names. */ + var realNames = {}; + + /** Used to detect maps, sets, and weakmaps. */ + var dataViewCtorString = toSource(DataView), + mapCtorString = toSource(Map), + promiseCtorString = toSource(Promise), + setCtorString = toSource(Set), + weakMapCtorString = toSource(WeakMap); + + /** Used to convert symbols to primitives and strings. */ + var symbolProto = Symbol ? Symbol.prototype : undefined, + symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, + symbolToString = symbolProto ? symbolProto.toString : undefined; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` object which wraps `value` to enable implicit method + * chain sequences. Methods that operate on and return arrays, collections, + * and functions can be chained together. Methods that retrieve a single value + * or may return a primitive value will automatically end the chain sequence + * and return the unwrapped value. Otherwise, the value must be unwrapped + * with `_#value`. + * + * Explicit chain sequences, which must be unwrapped with `_#value`, may be + * enabled using `_.chain`. + * + * The execution of chained methods is lazy, that is, it's deferred until + * `_#value` is implicitly or explicitly called. + * + * Lazy evaluation allows several methods to support shortcut fusion. + * Shortcut fusion is an optimization to merge iteratee calls; this avoids + * the creation of intermediate arrays and can greatly reduce the number of + * iteratee executions. Sections of a chain sequence qualify for shortcut + * fusion if the section is applied to an array and iteratees accept only + * one argument. The heuristic for whether a section qualifies for shortcut + * fusion is subject to change. + * + * Chaining is supported in custom builds as long as the `_#value` method is + * directly or indirectly included in the build. + * + * In addition to lodash methods, wrappers have `Array` and `String` methods. + * + * The wrapper `Array` methods are: + * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` + * + * The wrapper `String` methods are: + * `replace` and `split` + * + * The wrapper methods that support shortcut fusion are: + * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, + * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, + * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` + * + * The chainable wrapper methods are: + * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, + * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, + * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, + * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, + * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, + * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, + * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, + * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, + * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, + * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, + * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, + * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, + * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, + * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, + * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, + * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, + * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, + * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, + * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, + * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, + * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, + * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, + * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, + * `zipObject`, `zipObjectDeep`, and `zipWith` + * + * The wrapper methods that are **not** chainable by default are: + * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, + * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, + * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, + * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, + * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, + * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, + * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, + * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, + * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, + * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, + * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, + * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, + * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, + * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, + * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, + * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, + * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, + * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, + * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, + * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, + * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, + * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, + * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, + * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, + * `upperFirst`, `value`, and `words` + * + * @name _ + * @constructor + * @category Seq + * @param {*} value The value to wrap in a `lodash` instance. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2, 3]); + * + * // Returns an unwrapped value. + * wrapped.reduce(_.add); + * // => 6 + * + * // Returns a wrapped value. + * var squares = wrapped.map(square); + * + * _.isArray(squares); + * // => false + * + * _.isArray(squares.value()); + * // => true + */ + function lodash(value) { + if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { + if (value instanceof LodashWrapper) { + return value; + } + if (hasOwnProperty.call(value, '__wrapped__')) { + return wrapperClone(value); + } + } + return new LodashWrapper(value); + } + + /** + * The base implementation of `_.create` without support for assigning + * properties to the created object. + * + * @private + * @param {Object} proto The object to inherit from. + * @returns {Object} Returns the new object. + */ + var baseCreate = (function () { + function object() { + } + + return function (proto) { + if (!isObject(proto)) { + return {}; + } + if (objectCreate) { + return objectCreate(proto); + } + object.prototype = proto; + var result = new object; + object.prototype = undefined; + return result; + }; + }()); + + /** + * The function whose prototype chain sequence wrappers inherit from. + * + * @private + */ + function baseLodash() { + // No operation performed. + } + + /** + * The base constructor for creating `lodash` wrapper objects. + * + * @private + * @param {*} value The value to wrap. + * @param {boolean} [chainAll] Enable explicit method chain sequences. + */ + function LodashWrapper(value, chainAll) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__chain__ = !!chainAll; + this.__index__ = 0; + this.__values__ = undefined; + } + + // Ensure wrappers are instances of `baseLodash`. + lodash.prototype = baseLodash.prototype; + lodash.prototype.constructor = lodash; + + LodashWrapper.prototype = baseCreate(baseLodash.prototype); + LodashWrapper.prototype.constructor = LodashWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. + * + * @private + * @constructor + * @param {*} value The value to wrap. + */ + function LazyWrapper(value) { + this.__wrapped__ = value; + this.__actions__ = []; + this.__dir__ = 1; + this.__filtered__ = false; + this.__iteratees__ = []; + this.__takeCount__ = MAX_ARRAY_LENGTH; + this.__views__ = []; + } + + /** + * Creates a clone of the lazy wrapper object. + * + * @private + * @name clone + * @memberOf LazyWrapper + * @returns {Object} Returns the cloned `LazyWrapper` object. + */ + function lazyClone() { + var result = new LazyWrapper(this.__wrapped__); + result.__actions__ = copyArray(this.__actions__); + result.__dir__ = this.__dir__; + result.__filtered__ = this.__filtered__; + result.__iteratees__ = copyArray(this.__iteratees__); + result.__takeCount__ = this.__takeCount__; + result.__views__ = copyArray(this.__views__); + return result; + } + + /** + * Reverses the direction of lazy iteration. + * + * @private + * @name reverse + * @memberOf LazyWrapper + * @returns {Object} Returns the new reversed `LazyWrapper` object. + */ + function lazyReverse() { + if (this.__filtered__) { + var result = new LazyWrapper(this); + result.__dir__ = -1; + result.__filtered__ = true; + } else { + result = this.clone(); + result.__dir__ *= -1; + } + return result; + } + + /** + * Extracts the unwrapped value from its lazy wrapper. + * + * @private + * @name value + * @memberOf LazyWrapper + * @returns {*} Returns the unwrapped value. + */ + function lazyValue() { + var array = this.__wrapped__.value(), + dir = this.__dir__, + isArr = isArray(array), + isRight = dir < 0, + arrLength = isArr ? array.length : 0, + view = getView(0, arrLength, this.__views__), + start = view.start, + end = view.end, + length = end - start, + index = isRight ? end : (start - 1), + iteratees = this.__iteratees__, + iterLength = iteratees.length, + resIndex = 0, + takeCount = nativeMin(length, this.__takeCount__); + + if (!isArr || (!isRight && arrLength == length && takeCount == length)) { + return baseWrapperValue(array, this.__actions__); + } + var result = []; + + outer: + while (length-- && resIndex < takeCount) { + index += dir; + + var iterIndex = -1, + value = array[index]; + + while (++iterIndex < iterLength) { + var data = iteratees[iterIndex], + iteratee = data.iteratee, + type = data.type, + computed = iteratee(value); + + if (type == LAZY_MAP_FLAG) { + value = computed; + } else if (!computed) { + if (type == LAZY_FILTER_FLAG) { + continue outer; + } else { + break outer; + } + } + } + result[resIndex++] = value; + } + return result; + } + + // Ensure `LazyWrapper` is an instance of `baseLodash`. + LazyWrapper.prototype = baseCreate(baseLodash.prototype); + LazyWrapper.prototype.constructor = LazyWrapper; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a hash object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Hash(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the hash. + * + * @private + * @name clear + * @memberOf Hash + */ + function hashClear() { + this.__data__ = nativeCreate ? nativeCreate(null) : {}; + this.size = 0; + } + + /** + * Removes `key` and its value from the hash. + * + * @private + * @name delete + * @memberOf Hash + * @param {Object} hash The hash to modify. + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function hashDelete(key) { + var result = this.has(key) && delete this.__data__[key]; + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the hash value for `key`. + * + * @private + * @name get + * @memberOf Hash + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function hashGet(key) { + var data = this.__data__; + if (nativeCreate) { + var result = data[key]; + return result === HASH_UNDEFINED ? undefined : result; + } + return hasOwnProperty.call(data, key) ? data[key] : undefined; + } + + /** + * Checks if a hash value for `key` exists. + * + * @private + * @name has + * @memberOf Hash + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function hashHas(key) { + var data = this.__data__; + return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); + } + + /** + * Sets the hash `key` to `value`. + * + * @private + * @name set + * @memberOf Hash + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the hash instance. + */ + function hashSet(key, value) { + var data = this.__data__; + this.size += this.has(key) ? 0 : 1; + data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; + return this; + } + + // Add methods to `Hash`. + Hash.prototype.clear = hashClear; + Hash.prototype['delete'] = hashDelete; + Hash.prototype.get = hashGet; + Hash.prototype.has = hashHas; + Hash.prototype.set = hashSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an list cache object. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function ListCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the list cache. + * + * @private + * @name clear + * @memberOf ListCache + */ + function listCacheClear() { + this.__data__ = []; + this.size = 0; + } + + /** + * Removes `key` and its value from the list cache. + * + * @private + * @name delete + * @memberOf ListCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function listCacheDelete(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + return false; + } + var lastIndex = data.length - 1; + if (index == lastIndex) { + data.pop(); + } else { + splice.call(data, index, 1); + } + --this.size; + return true; + } + + /** + * Gets the list cache value for `key`. + * + * @private + * @name get + * @memberOf ListCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function listCacheGet(key) { + var data = this.__data__, + index = assocIndexOf(data, key); + + return index < 0 ? undefined : data[index][1]; + } + + /** + * Checks if a list cache value for `key` exists. + * + * @private + * @name has + * @memberOf ListCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function listCacheHas(key) { + return assocIndexOf(this.__data__, key) > -1; + } + + /** + * Sets the list cache `key` to `value`. + * + * @private + * @name set + * @memberOf ListCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the list cache instance. + */ + function listCacheSet(key, value) { + var data = this.__data__, + index = assocIndexOf(data, key); + + if (index < 0) { + ++this.size; + data.push([key, value]); + } else { + data[index][1] = value; + } + return this; + } + + // Add methods to `ListCache`. + ListCache.prototype.clear = listCacheClear; + ListCache.prototype['delete'] = listCacheDelete; + ListCache.prototype.get = listCacheGet; + ListCache.prototype.has = listCacheHas; + ListCache.prototype.set = listCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a map cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function MapCache(entries) { + var index = -1, + length = entries == null ? 0 : entries.length; + + this.clear(); + while (++index < length) { + var entry = entries[index]; + this.set(entry[0], entry[1]); + } + } + + /** + * Removes all key-value entries from the map. + * + * @private + * @name clear + * @memberOf MapCache + */ + function mapCacheClear() { + this.size = 0; + this.__data__ = { + 'hash': new Hash, + 'map': new (Map || ListCache), + 'string': new Hash + }; + } + + /** + * Removes `key` and its value from the map. + * + * @private + * @name delete + * @memberOf MapCache + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function mapCacheDelete(key) { + var result = getMapData(this, key)['delete'](key); + this.size -= result ? 1 : 0; + return result; + } + + /** + * Gets the map value for `key`. + * + * @private + * @name get + * @memberOf MapCache + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function mapCacheGet(key) { + return getMapData(this, key).get(key); + } + + /** + * Checks if a map value for `key` exists. + * + * @private + * @name has + * @memberOf MapCache + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function mapCacheHas(key) { + return getMapData(this, key).has(key); + } + + /** + * Sets the map `key` to `value`. + * + * @private + * @name set + * @memberOf MapCache + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the map cache instance. + */ + function mapCacheSet(key, value) { + var data = getMapData(this, key), + size = data.size; + + data.set(key, value); + this.size += data.size == size ? 0 : 1; + return this; + } + + // Add methods to `MapCache`. + MapCache.prototype.clear = mapCacheClear; + MapCache.prototype['delete'] = mapCacheDelete; + MapCache.prototype.get = mapCacheGet; + MapCache.prototype.has = mapCacheHas; + MapCache.prototype.set = mapCacheSet; + + /*------------------------------------------------------------------------*/ + + /** + * + * Creates an array cache object to store unique values. + * + * @private + * @constructor + * @param {Array} [values] The values to cache. + */ + function SetCache(values) { + var index = -1, + length = values == null ? 0 : values.length; + + this.__data__ = new MapCache; + while (++index < length) { + this.add(values[index]); + } + } + + /** + * Adds `value` to the array cache. + * + * @private + * @name add + * @memberOf SetCache + * @alias push + * @param {*} value The value to cache. + * @returns {Object} Returns the cache instance. + */ + function setCacheAdd(value) { + this.__data__.set(value, HASH_UNDEFINED); + return this; + } + + /** + * Checks if `value` is in the array cache. + * + * @private + * @name has + * @memberOf SetCache + * @param {*} value The value to search for. + * @returns {number} Returns `true` if `value` is found, else `false`. + */ + function setCacheHas(value) { + return this.__data__.has(value); + } + + // Add methods to `SetCache`. + SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; + SetCache.prototype.has = setCacheHas; + + /*------------------------------------------------------------------------*/ + + /** + * Creates a stack cache object to store key-value pairs. + * + * @private + * @constructor + * @param {Array} [entries] The key-value pairs to cache. + */ + function Stack(entries) { + var data = this.__data__ = new ListCache(entries); + this.size = data.size; + } + + /** + * Removes all key-value entries from the stack. + * + * @private + * @name clear + * @memberOf Stack + */ + function stackClear() { + this.__data__ = new ListCache; + this.size = 0; + } + + /** + * Removes `key` and its value from the stack. + * + * @private + * @name delete + * @memberOf Stack + * @param {string} key The key of the value to remove. + * @returns {boolean} Returns `true` if the entry was removed, else `false`. + */ + function stackDelete(key) { + var data = this.__data__, + result = data['delete'](key); + + this.size = data.size; + return result; + } + + /** + * Gets the stack value for `key`. + * + * @private + * @name get + * @memberOf Stack + * @param {string} key The key of the value to get. + * @returns {*} Returns the entry value. + */ + function stackGet(key) { + return this.__data__.get(key); + } + + /** + * Checks if a stack value for `key` exists. + * + * @private + * @name has + * @memberOf Stack + * @param {string} key The key of the entry to check. + * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. + */ + function stackHas(key) { + return this.__data__.has(key); + } + + /** + * Sets the stack `key` to `value`. + * + * @private + * @name set + * @memberOf Stack + * @param {string} key The key of the value to set. + * @param {*} value The value to set. + * @returns {Object} Returns the stack cache instance. + */ + function stackSet(key, value) { + var data = this.__data__; + if (data instanceof ListCache) { + var pairs = data.__data__; + if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { + pairs.push([key, value]); + this.size = ++data.size; + return this; + } + data = this.__data__ = new MapCache(pairs); + } + data.set(key, value); + this.size = data.size; + return this; + } + + // Add methods to `Stack`. + Stack.prototype.clear = stackClear; + Stack.prototype['delete'] = stackDelete; + Stack.prototype.get = stackGet; + Stack.prototype.has = stackHas; + Stack.prototype.set = stackSet; + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of the enumerable property names of the array-like `value`. + * + * @private + * @param {*} value The value to query. + * @param {boolean} inherited Specify returning inherited property names. + * @returns {Array} Returns the array of property names. + */ + function arrayLikeKeys(value, inherited) { + var isArr = isArray(value), + isArg = !isArr && isArguments(value), + isBuff = !isArr && !isArg && isBuffer(value), + isType = !isArr && !isArg && !isBuff && isTypedArray(value), + skipIndexes = isArr || isArg || isBuff || isType, + result = skipIndexes ? baseTimes(value.length, String) : [], + length = result.length; + + for (var key in value) { + if ((inherited || hasOwnProperty.call(value, key)) && + !(skipIndexes && ( + // Safari 9 has enumerable `arguments.length` in strict mode. + key == 'length' || + // Node.js 0.10 has enumerable non-index properties on buffers. + (isBuff && (key == 'offset' || key == 'parent')) || + // PhantomJS 2 has enumerable non-index properties on typed arrays. + (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || + // Skip index properties. + isIndex(key, length) + ))) { + result.push(key); + } + } + return result; + } + + /** + * This function is like `assignValue` except that it doesn't assign + * `undefined` values. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignMergeValue(object, key, value) { + if ((value !== undefined && !eq(object[key], value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Assigns `value` to `key` of `object` if the existing value is not equivalent + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function assignValue(object, key, value) { + var objValue = object[key]; + if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || + (value === undefined && !(key in object))) { + baseAssignValue(object, key, value); + } + } + + /** + * Gets the index at which the `key` is found in `array` of key-value pairs. + * + * @private + * @param {Array} array The array to inspect. + * @param {*} key The key to search for. + * @returns {number} Returns the index of the matched value, else `-1`. + */ + function assocIndexOf(array, key) { + var length = array.length; + while (length--) { + if (eq(array[length][0], key)) { + return length; + } + } + return -1; + } + + /** + * Aggregates elements of `collection` on `accumulator` with keys transformed + * by `iteratee` and values set by `setter`. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform keys. + * @param {Object} accumulator The initial aggregated object. + * @returns {Function} Returns `accumulator`. + */ + function baseAggregator(collection, setter, iteratee, accumulator) { + baseEach(collection, function (value, key, collection) { + setter(accumulator, value, iteratee(value), collection); + }); + return accumulator; + } + + /** + * The base implementation of `_.assign` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssign(object, source) { + return object && copyObject(source, keys(source), object); + } + + /** + * The base implementation of `_.assignIn` without support for multiple sources + * or `customizer` functions. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @returns {Object} Returns `object`. + */ + function baseAssignIn(object, source) { + return object && copyObject(source, keysIn(source), object); + } + + /** + * The base implementation of `assignValue` and `assignMergeValue` without + * value checks. + * + * @private + * @param {Object} object The object to modify. + * @param {string} key The key of the property to assign. + * @param {*} value The value to assign. + */ + function baseAssignValue(object, key, value) { + if (key == '__proto__' && defineProperty) { + defineProperty(object, key, { + 'configurable': true, + 'enumerable': true, + 'value': value, + 'writable': true + }); + } else { + object[key] = value; + } + } + + /** + * The base implementation of `_.at` without support for individual paths. + * + * @private + * @param {Object} object The object to iterate over. + * @param {string[]} paths The property paths to pick. + * @returns {Array} Returns the picked elements. + */ + function baseAt(object, paths) { + var index = -1, + length = paths.length, + result = Array(length), + skip = object == null; + + while (++index < length) { + result[index] = skip ? undefined : get(object, paths[index]); + } + return result; + } + + /** + * The base implementation of `_.clamp` which doesn't coerce arguments. + * + * @private + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + */ + function baseClamp(number, lower, upper) { + if (number === number) { + if (upper !== undefined) { + number = number <= upper ? number : upper; + } + if (lower !== undefined) { + number = number >= lower ? number : lower; + } + } + return number; + } + + /** + * The base implementation of `_.clone` and `_.cloneDeep` which tracks + * traversed objects. + * + * @private + * @param {*} value The value to clone. + * @param {boolean} bitmask The bitmask flags. + * 1 - Deep clone + * 2 - Flatten inherited properties + * 4 - Clone symbols + * @param {Function} [customizer] The function to customize cloning. + * @param {string} [key] The key of `value`. + * @param {Object} [object] The parent object of `value`. + * @param {Object} [stack] Tracks traversed objects and their clone counterparts. + * @returns {*} Returns the cloned value. + */ + function baseClone(value, bitmask, customizer, key, object, stack) { + var result, + isDeep = bitmask & CLONE_DEEP_FLAG, + isFlat = bitmask & CLONE_FLAT_FLAG, + isFull = bitmask & CLONE_SYMBOLS_FLAG; + + if (customizer) { + result = object ? customizer(value, key, object, stack) : customizer(value); + } + if (result !== undefined) { + return result; + } + if (!isObject(value)) { + return value; + } + var isArr = isArray(value); + if (isArr) { + result = initCloneArray(value); + if (!isDeep) { + return copyArray(value, result); + } + } else { + var tag = getTag(value), + isFunc = tag == funcTag || tag == genTag; + + if (isBuffer(value)) { + return cloneBuffer(value, isDeep); + } + if (tag == objectTag || tag == argsTag || (isFunc && !object)) { + result = (isFlat || isFunc) ? {} : initCloneObject(value); + if (!isDeep) { + return isFlat + ? copySymbolsIn(value, baseAssignIn(result, value)) + : copySymbols(value, baseAssign(result, value)); + } + } else { + if (!cloneableTags[tag]) { + return object ? value : {}; + } + result = initCloneByTag(value, tag, isDeep); + } + } + // Check for circular references and return its corresponding clone. + stack || (stack = new Stack); + var stacked = stack.get(value); + if (stacked) { + return stacked; + } + stack.set(value, result); + + if (isSet(value)) { + value.forEach(function (subValue) { + result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); + }); + + return result; + } + + if (isMap(value)) { + value.forEach(function (subValue, key) { + result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + + return result; + } + + var keysFunc = isFull + ? (isFlat ? getAllKeysIn : getAllKeys) + : (isFlat ? keysIn : keys); + + var props = isArr ? undefined : keysFunc(value); + arrayEach(props || value, function (subValue, key) { + if (props) { + key = subValue; + subValue = value[key]; + } + // Recursively populate clone (susceptible to call stack limits). + assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + }); + return result; + } + + /** + * The base implementation of `_.delay` and `_.defer` which accepts `args` + * to provide to `func`. + * + * @private + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {Array} args The arguments to provide to `func`. + * @returns {number|Object} Returns the timer id or timeout object. + */ + function baseDelay(func, wait, args) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return setTimeout(function () { + func.apply(undefined, args); + }, wait); + } + + /** + * The base implementation of methods like `_.difference` without support + * for excluding multiple arrays or iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Array} values The values to exclude. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of filtered values. + */ + function baseDifference(array, values, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + isCommon = true, + length = array.length, + result = [], + valuesLength = values.length; + + if (!length) { + return result; + } + if (iteratee) { + values = arrayMap(values, baseUnary(iteratee)); + } + if (comparator) { + includes = arrayIncludesWith; + isCommon = false; + } else if (values.length >= LARGE_ARRAY_SIZE) { + includes = cacheHas; + isCommon = false; + values = new SetCache(values); + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee == null ? value : iteratee(value); + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var valuesIndex = valuesLength; + while (valuesIndex--) { + if (values[valuesIndex] === computed) { + continue outer; + } + } + result.push(value); + } else if (!includes(values, computed, comparator)) { + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.forEach` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + */ + var baseEach = createBaseEach(baseForOwn); + + /** + * The base implementation of `_.every` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false` + */ + function baseEvery(collection, predicate) { + var result = true; + baseEach(collection, function (value, index, collection) { + result = !!predicate(value, index, collection); + return result; + }); + return result; + } + + /** + * The base implementation of methods like `_.max` and `_.min` which accepts a + * `comparator` to determine the extremum value. + * + * @private + * @param {Array} array The array to iterate over. + * @param {Function} iteratee The iteratee invoked per iteration. + * @param {Function} comparator The comparator used to compare values. + * @returns {*} Returns the extremum value. + */ + function baseExtremum(array, iteratee, comparator) { + var index = -1, + length = array.length; + + while (++index < length) { + var value = array[index], + current = iteratee(value); + + if (current != null && (computed === undefined + ? (current === current && !isSymbol(current)) + : comparator(current, computed) + )) { + var computed = current, + result = value; + } + } + return result; + } + + /** + * The base implementation of `_.filter` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + */ + function baseFilter(collection, predicate) { + var result = []; + baseEach(collection, function (value, index, collection) { + if (predicate(value, index, collection)) { + result.push(value); + } + }); + return result; + } + + /** + * The base implementation of `_.flatten` with support for restricting flattening. + * + * @private + * @param {Array} array The array to flatten. + * @param {number} depth The maximum recursion depth. + * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. + * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. + * @param {Array} [result=[]] The initial result value. + * @returns {Array} Returns the new flattened array. + */ + function baseFlatten(array, depth, predicate, isStrict, result) { + var index = -1, + length = array.length; + + predicate || (predicate = isFlattenable); + result || (result = []); + + while (++index < length) { + var value = array[index]; + if (depth > 0 && predicate(value)) { + if (depth > 1) { + // Recursively flatten arrays (susceptible to call stack limits). + baseFlatten(value, depth - 1, predicate, isStrict, result); + } else { + arrayPush(result, value); + } + } else if (!isStrict) { + result[result.length] = value; + } + } + return result; + } + + /** + * The base implementation of `baseForOwn` which iterates over `object` + * properties returned by `keysFunc` and invokes `iteratee` for each property. + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseFor = createBaseFor(); + + /** + * This function is like `baseFor` except that it iterates over properties + * in the opposite order. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @param {Function} keysFunc The function to get the keys of `object`. + * @returns {Object} Returns `object`. + */ + var baseForRight = createBaseFor(true); + + /** + * The base implementation of `_.forOwn` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwn(object, iteratee) { + return object && baseFor(object, iteratee, keys); + } + + /** + * The base implementation of `_.forOwnRight` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Object} Returns `object`. + */ + function baseForOwnRight(object, iteratee) { + return object && baseForRight(object, iteratee, keys); + } + + /** + * The base implementation of `_.functions` which creates an array of + * `object` function property names filtered from `props`. + * + * @private + * @param {Object} object The object to inspect. + * @param {Array} props The property names to filter. + * @returns {Array} Returns the function names. + */ + function baseFunctions(object, props) { + return arrayFilter(props, function (key) { + return isFunction(object[key]); + }); + } + + /** + * The base implementation of `_.get` without support for default values. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @returns {*} Returns the resolved value. + */ + function baseGet(object, path) { + path = castPath(path, object); + + var index = 0, + length = path.length; + + while (object != null && index < length) { + object = object[toKey(path[index++])]; + } + return (index && index == length) ? object : undefined; + } + + /** + * The base implementation of `getAllKeys` and `getAllKeysIn` which uses + * `keysFunc` and `symbolsFunc` to get the enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Function} keysFunc The function to get the keys of `object`. + * @param {Function} symbolsFunc The function to get the symbols of `object`. + * @returns {Array} Returns the array of property names and symbols. + */ + function baseGetAllKeys(object, keysFunc, symbolsFunc) { + var result = keysFunc(object); + return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); + } + + /** + * The base implementation of `getTag` without fallbacks for buggy environments. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + function baseGetTag(value) { + if (value == null) { + return value === undefined ? undefinedTag : nullTag; + } + return (symToStringTag && symToStringTag in Object(value)) + ? getRawTag(value) + : objectToString(value); + } + + /** + * The base implementation of `_.gt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is greater than `other`, + * else `false`. + */ + function baseGt(value, other) { + return value > other; + } + + /** + * The base implementation of `_.has` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHas(object, key) { + return object != null && hasOwnProperty.call(object, key); + } + + /** + * The base implementation of `_.hasIn` without support for deep paths. + * + * @private + * @param {Object} [object] The object to query. + * @param {Array|string} key The key to check. + * @returns {boolean} Returns `true` if `key` exists, else `false`. + */ + function baseHasIn(object, key) { + return object != null && key in Object(object); + } + + /** + * The base implementation of methods like `_.intersection`, without support + * for iteratee shorthands, that accepts an array of arrays to inspect. + * + * @private + * @param {Array} arrays The arrays to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new array of shared values. + */ + function baseIntersection(arrays, iteratee, comparator) { + var includes = comparator ? arrayIncludesWith : arrayIncludes, + length = arrays[0].length, + othLength = arrays.length, + othIndex = othLength, + caches = Array(othLength), + maxLength = Infinity, + result = []; + + while (othIndex--) { + var array = arrays[othIndex]; + if (othIndex && iteratee) { + array = arrayMap(array, baseUnary(iteratee)); + } + maxLength = nativeMin(array.length, maxLength); + caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) + ? new SetCache(othIndex && array) + : undefined; + } + array = arrays[0]; + + var index = -1, + seen = caches[0]; + + outer: + while (++index < length && result.length < maxLength) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (!(seen + ? cacheHas(seen, computed) + : includes(result, computed, comparator) + )) { + othIndex = othLength; + while (--othIndex) { + var cache = caches[othIndex]; + if (!(cache + ? cacheHas(cache, computed) + : includes(arrays[othIndex], computed, comparator)) + ) { + continue outer; + } + } + if (seen) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.invert` and `_.invertBy` which inverts + * `object` with values transformed by `iteratee` and set by `setter`. + * + * @private + * @param {Object} object The object to iterate over. + * @param {Function} setter The function to set `accumulator` values. + * @param {Function} iteratee The iteratee to transform values. + * @param {Object} accumulator The initial inverted object. + * @returns {Function} Returns `accumulator`. + */ + function baseInverter(object, setter, iteratee, accumulator) { + baseForOwn(object, function (value, key, object) { + setter(accumulator, iteratee(value), key, object); + }); + return accumulator; + } + + /** + * The base implementation of `_.invoke` without support for individual + * method arguments. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path of the method to invoke. + * @param {Array} args The arguments to invoke the method with. + * @returns {*} Returns the result of the invoked method. + */ + function baseInvoke(object, path, args) { + path = castPath(path, object); + object = parent(object, path); + var func = object == null ? object : object[toKey(last(path))]; + return func == null ? undefined : apply(func, object, args); + } + + /** + * The base implementation of `_.isArguments`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + */ + function baseIsArguments(value) { + return isObjectLike(value) && baseGetTag(value) == argsTag; + } + + /** + * The base implementation of `_.isDate` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + */ + function baseIsDate(value) { + return isObjectLike(value) && baseGetTag(value) == dateTag; + } + + /** + * The base implementation of `_.isEqual` which supports partial comparisons + * and tracks traversed objects. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @param {boolean} bitmask The bitmask flags. + * 1 - Unordered comparison + * 2 - Partial comparison + * @param {Function} [customizer] The function to customize comparisons. + * @param {Object} [stack] Tracks traversed `value` and `other` objects. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + */ + function baseIsEqual(value, other, bitmask, customizer, stack) { + if (value === other) { + return true; + } + if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { + return value !== value && other !== other; + } + return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); + } + + /** + * A specialized version of `baseIsEqual` for arrays and objects which performs + * deep comparisons and tracks traversed objects enabling objects with circular + * references to be compared. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} [stack] Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { + var objIsArr = isArray(object), + othIsArr = isArray(other), + objTag = objIsArr ? arrayTag : getTag(object), + othTag = othIsArr ? arrayTag : getTag(other); + + objTag = objTag == argsTag ? objectTag : objTag; + othTag = othTag == argsTag ? objectTag : othTag; + + var objIsObj = objTag == objectTag, + othIsObj = othTag == objectTag, + isSameTag = objTag == othTag; + + if (isSameTag && isBuffer(object)) { + if (!isBuffer(other)) { + return false; + } + objIsArr = true; + objIsObj = false; + } + if (isSameTag && !objIsObj) { + stack || (stack = new Stack); + return (objIsArr || isTypedArray(object)) + ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) + : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + } + if (!(bitmask & COMPARE_PARTIAL_FLAG)) { + var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), + othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); + + if (objIsWrapped || othIsWrapped) { + var objUnwrapped = objIsWrapped ? object.value() : object, + othUnwrapped = othIsWrapped ? other.value() : other; + + stack || (stack = new Stack); + return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); + } + } + if (!isSameTag) { + return false; + } + stack || (stack = new Stack); + return equalObjects(object, other, bitmask, customizer, equalFunc, stack); + } + + /** + * The base implementation of `_.isMap` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + */ + function baseIsMap(value) { + return isObjectLike(value) && getTag(value) == mapTag; + } + + /** + * The base implementation of `_.isMatch` without support for iteratee shorthands. + * + * @private + * @param {Object} object The object to inspect. + * @param {Object} source The object of property values to match. + * @param {Array} matchData The property names, values, and compare flags to match. + * @param {Function} [customizer] The function to customize comparisons. + * @returns {boolean} Returns `true` if `object` is a match, else `false`. + */ + function baseIsMatch(object, source, matchData, customizer) { + var index = matchData.length, + length = index, + noCustomizer = !customizer; + + if (object == null) { + return !length; + } + object = Object(object); + while (index--) { + var data = matchData[index]; + if ((noCustomizer && data[2]) + ? data[1] !== object[data[0]] + : !(data[0] in object) + ) { + return false; + } + } + while (++index < length) { + data = matchData[index]; + var key = data[0], + objValue = object[key], + srcValue = data[1]; + + if (noCustomizer && data[2]) { + if (objValue === undefined && !(key in object)) { + return false; + } + } else { + var stack = new Stack; + if (customizer) { + var result = customizer(objValue, srcValue, key, object, source, stack); + } + if (!(result === undefined + ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) + : result + )) { + return false; + } + } + } + return true; + } + + /** + * The base implementation of `_.isNative` without bad shim checks. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a native function, + * else `false`. + */ + function baseIsNative(value) { + if (!isObject(value) || isMasked(value)) { + return false; + } + var pattern = isFunction(value) ? reIsNative : reIsHostCtor; + return pattern.test(toSource(value)); + } + + /** + * The base implementation of `_.isRegExp` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + */ + function baseIsRegExp(value) { + return isObjectLike(value) && baseGetTag(value) == regexpTag; + } + + /** + * The base implementation of `_.isSet` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + */ + function baseIsSet(value) { + return isObjectLike(value) && getTag(value) == setTag; + } + + /** + * The base implementation of `_.isTypedArray` without Node.js optimizations. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + */ + function baseIsTypedArray(value) { + return isObjectLike(value) && + isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; + } + + /** + * The base implementation of `_.iteratee`. + * + * @private + * @param {*} [value=_.identity] The value to convert to an iteratee. + * @returns {Function} Returns the iteratee. + */ + function baseIteratee(value) { + // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. + // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. + if (typeof value == 'function') { + return value; + } + if (value == null) { + return identity; + } + if (typeof value == 'object') { + return isArray(value) + ? baseMatchesProperty(value[0], value[1]) + : baseMatches(value); + } + return property(value); + } + + /** + * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeys(object) { + if (!isPrototype(object)) { + return nativeKeys(object); + } + var result = []; + for (var key in Object(object)) { + if (hasOwnProperty.call(object, key) && key != 'constructor') { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function baseKeysIn(object) { + if (!isObject(object)) { + return nativeKeysIn(object); + } + var isProto = isPrototype(object), + result = []; + + for (var key in object) { + if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { + result.push(key); + } + } + return result; + } + + /** + * The base implementation of `_.lt` which doesn't coerce arguments. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if `value` is less than `other`, + * else `false`. + */ + function baseLt(value, other) { + return value < other; + } + + /** + * The base implementation of `_.map` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} iteratee The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + */ + function baseMap(collection, iteratee) { + var index = -1, + result = isArrayLike(collection) ? Array(collection.length) : []; + + baseEach(collection, function (value, key, collection) { + result[++index] = iteratee(value, key, collection); + }); + return result; + } + + /** + * The base implementation of `_.matches` which doesn't clone `source`. + * + * @private + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatches(source) { + var matchData = getMatchData(source); + if (matchData.length == 1 && matchData[0][2]) { + return matchesStrictComparable(matchData[0][0], matchData[0][1]); + } + return function (object) { + return object === source || baseIsMatch(object, source, matchData); + }; + } + + /** + * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. + * + * @private + * @param {string} path The path of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function baseMatchesProperty(path, srcValue) { + if (isKey(path) && isStrictComparable(srcValue)) { + return matchesStrictComparable(toKey(path), srcValue); + } + return function (object) { + var objValue = get(object, path); + return (objValue === undefined && objValue === srcValue) + ? hasIn(object, path) + : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); + }; + } + + /** + * The base implementation of `_.merge` without support for multiple sources. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {number} srcIndex The index of `source`. + * @param {Function} [customizer] The function to customize merged values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMerge(object, source, srcIndex, customizer, stack) { + if (object === source) { + return; + } + baseFor(source, function (srcValue, key) { + if (isObject(srcValue)) { + stack || (stack = new Stack); + baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); + } else { + var newValue = customizer + ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) + : undefined; + + if (newValue === undefined) { + newValue = srcValue; + } + assignMergeValue(object, key, newValue); + } + }, keysIn); + } + + /** + * A specialized version of `baseMerge` for arrays and objects which performs + * deep merges and tracks traversed objects enabling objects with circular + * references to be merged. + * + * @private + * @param {Object} object The destination object. + * @param {Object} source The source object. + * @param {string} key The key of the value to merge. + * @param {number} srcIndex The index of `source`. + * @param {Function} mergeFunc The function to merge values. + * @param {Function} [customizer] The function to customize assigned values. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + */ + function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { + var objValue = safeGet(object, key), + srcValue = safeGet(source, key), + stacked = stack.get(srcValue); + + if (stacked) { + assignMergeValue(object, key, stacked); + return; + } + var newValue = customizer + ? customizer(objValue, srcValue, (key + ''), object, source, stack) + : undefined; + + var isCommon = newValue === undefined; + + if (isCommon) { + var isArr = isArray(srcValue), + isBuff = !isArr && isBuffer(srcValue), + isTyped = !isArr && !isBuff && isTypedArray(srcValue); + + newValue = srcValue; + if (isArr || isBuff || isTyped) { + if (isArray(objValue)) { + newValue = objValue; + } else if (isArrayLikeObject(objValue)) { + newValue = copyArray(objValue); + } else if (isBuff) { + isCommon = false; + newValue = cloneBuffer(srcValue, true); + } else if (isTyped) { + isCommon = false; + newValue = cloneTypedArray(srcValue, true); + } else { + newValue = []; + } + } else if (isPlainObject(srcValue) || isArguments(srcValue)) { + newValue = objValue; + if (isArguments(objValue)) { + newValue = toPlainObject(objValue); + } else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { + newValue = initCloneObject(srcValue); + } + } else { + isCommon = false; + } + } + if (isCommon) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, newValue); + mergeFunc(newValue, srcValue, srcIndex, customizer, stack); + stack['delete'](srcValue); + } + assignMergeValue(object, key, newValue); + } + + /** + * The base implementation of `_.orderBy` without param guards. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. + * @param {string[]} orders The sort orders of `iteratees`. + * @returns {Array} Returns the new sorted array. + */ + function baseOrderBy(collection, iteratees, orders) { + var index = -1; + iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee)); + + var result = baseMap(collection, function (value, key, collection) { + var criteria = arrayMap(iteratees, function (iteratee) { + return iteratee(value); + }); + return { 'criteria': criteria, 'index': ++index, 'value': value }; + }); + + return baseSortBy(result, function (object, other) { + return compareMultiple(object, other, orders); + }); + } + + /** + * The base implementation of `_.pick` without support for individual + * property identifiers. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @returns {Object} Returns the new object. + */ + function basePick(object, paths) { + return basePickBy(object, paths, function (value, path) { + return hasIn(object, path); + }); + } + + /** + * The base implementation of `_.pickBy` without support for iteratee shorthands. + * + * @private + * @param {Object} object The source object. + * @param {string[]} paths The property paths to pick. + * @param {Function} predicate The function invoked per property. + * @returns {Object} Returns the new object. + */ + function basePickBy(object, paths, predicate) { + var index = -1, + length = paths.length, + result = {}; + + while (++index < length) { + var path = paths[index], + value = baseGet(object, path); + + if (predicate(value, path)) { + baseSet(result, castPath(path, object), value); + } + } + return result; + } + + /** + * A specialized version of `baseProperty` which supports deep paths. + * + * @private + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + */ + function basePropertyDeep(path) { + return function (object) { + return baseGet(object, path); + }; + } + + /** + * The base implementation of `_.random` without support for returning + * floating-point numbers. + * + * @private + * @param {number} lower The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the random number. + */ + function baseRandom(lower, upper) { + return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); + } + + /** + * The base implementation of `_.range` and `_.rangeRight` which doesn't + * coerce arguments. + * + * @private + * @param {number} start The start of the range. + * @param {number} end The end of the range. + * @param {number} step The value to increment or decrement by. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Array} Returns the range of numbers. + */ + function baseRange(start, end, step, fromRight) { + var index = -1, + length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), + result = Array(length); + + while (length--) { + result[fromRight ? length : ++index] = start; + start += step; + } + return result; + } + + /** + * The base implementation of `_.rest` which doesn't validate or coerce arguments. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + */ + function baseRest(func, start) { + return setToString(overRest(func, start, identity), func + ''); + } + + /** + * The base implementation of `_.set`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @param {Function} [customizer] The function to customize path creation. + * @returns {Object} Returns `object`. + */ + function baseSet(object, path, value, customizer) { + if (!isObject(object)) { + return object; + } + path = castPath(path, object); + + var index = -1, + length = path.length, + lastIndex = length - 1, + nested = object; + + while (nested != null && ++index < length) { + var key = toKey(path[index]), + newValue = value; + + if (index != lastIndex) { + var objValue = nested[key]; + newValue = customizer ? customizer(objValue, key, nested) : undefined; + if (newValue === undefined) { + newValue = isObject(objValue) + ? objValue + : (isIndex(path[index + 1]) ? [] : {}); + } + } + assignValue(nested, key, newValue); + nested = nested[key]; + } + return object; + } + + /** + * The base implementation of `setData` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var baseSetData = !metaMap ? identity : function (func, data) { + metaMap.set(func, data); + return func; }; - } - - /** - * The base implementation of `_.propertyOf` without support for deep paths. - * - * @private - * @param {Object} object The object to query. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyOf(object) { - return function(key) { - return object == null ? undefined : object[key]; + + /** + * The base implementation of `setToString` without support for hot loop shorting. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var baseSetToString = !defineProperty ? identity : function (func, string) { + return defineProperty(func, 'toString', { + 'configurable': true, + 'enumerable': false, + 'value': constant(string), + 'writable': true + }); }; - } - - /** - * The base implementation of `_.reduce` and `_.reduceRight`, without support - * for iteratee shorthands, which iterates over `collection` using `eachFunc`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {*} accumulator The initial value. - * @param {boolean} initAccum Specify using the first or last element of - * `collection` as the initial value. - * @param {Function} eachFunc The function to iterate over `collection`. - * @returns {*} Returns the accumulated value. - */ - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection) { - accumulator = initAccum - ? (initAccum = false, value) - : iteratee(accumulator, value, index, collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.sortBy` which uses `comparer` to define the - * sort order of `array` and replaces criteria objects with their corresponding - * values. - * - * @private - * @param {Array} array The array to sort. - * @param {Function} comparer The function to define sort order. - * @returns {Array} Returns `array`. - */ - function baseSortBy(array, comparer) { - var length = array.length; - - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - /** - * The base implementation of `_.times` without support for iteratee shorthands - * or max array length checks. - * - * @private - * @param {number} n The number of times to invoke `iteratee`. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the array of results. - */ - function baseTimes(n, iteratee) { - var index = -1, - result = Array(n); - - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - /** - * The base implementation of `_.unary` without support for storing metadata. - * - * @private - * @param {Function} func The function to cap arguments for. - * @returns {Function} Returns the new capped function. - */ - function baseUnary(func) { - return function(value) { - return func(value); + + /** + * The base implementation of `_.slice` without an iteratee call guard. + * + * @private + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function baseSlice(array, start, end) { + var index = -1, + length = array.length; + + if (start < 0) { + start = -start > length ? 0 : (length + start); + } + end = end > length ? length : end; + if (end < 0) { + end += length; + } + length = start > end ? 0 : ((end - start) >>> 0); + start >>>= 0; + + var result = Array(length); + while (++index < length) { + result[index] = array[index + start]; + } + return result; + } + + /** + * The base implementation of `_.some` without support for iteratee shorthands. + * + * @private + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} predicate The function invoked per iteration. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + */ + function baseSome(collection, predicate) { + var result; + + baseEach(collection, function (value, index, collection) { + result = predicate(value, index, collection); + return !result; + }); + return !!result; + } + + /** + * The base implementation of `_.toString` which doesn't convert nullish + * values to empty strings. + * + * @private + * @param {*} value The value to process. + * @returns {string} Returns the string. + */ + function baseToString(value) { + // Exit early for strings to avoid a performance hit in some environments. + if (typeof value == 'string') { + return value; + } + if (isArray(value)) { + // Recursively convert values (susceptible to call stack limits). + return arrayMap(value, baseToString) + ''; + } + if (isSymbol(value)) { + return symbolToString ? symbolToString.call(value) : ''; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * The base implementation of `_.uniqBy` without support for iteratee shorthands. + * + * @private + * @param {Array} array The array to inspect. + * @param {Function} [iteratee] The iteratee invoked per element. + * @param {Function} [comparator] The comparator invoked per element. + * @returns {Array} Returns the new duplicate free array. + */ + function baseUniq(array, iteratee, comparator) { + var index = -1, + includes = arrayIncludes, + length = array.length, + isCommon = true, + result = [], + seen = result; + + if (comparator) { + isCommon = false; + includes = arrayIncludesWith; + } else if (length >= LARGE_ARRAY_SIZE) { + var set = iteratee ? null : createSet(array); + if (set) { + return setToArray(set); + } + isCommon = false; + includes = cacheHas; + seen = new SetCache; + } else { + seen = iteratee ? [] : result; + } + outer: + while (++index < length) { + var value = array[index], + computed = iteratee ? iteratee(value) : value; + + value = (comparator || value !== 0) ? value : 0; + if (isCommon && computed === computed) { + var seenIndex = seen.length; + while (seenIndex--) { + if (seen[seenIndex] === computed) { + continue outer; + } + } + if (iteratee) { + seen.push(computed); + } + result.push(value); + } else if (!includes(seen, computed, comparator)) { + if (seen !== result) { + seen.push(computed); + } + result.push(value); + } + } + return result; + } + + /** + * The base implementation of `_.unset`. + * + * @private + * @param {Object} object The object to modify. + * @param {Array|string} path The property path to unset. + * @returns {boolean} Returns `true` if the property is deleted, else `false`. + */ + function baseUnset(object, path) { + path = castPath(path, object); + object = parent(object, path); + return object == null || delete object[toKey(last(path))]; + } + + /** + * The base implementation of `wrapperValue` which returns the result of + * performing a sequence of actions on the unwrapped `value`, where each + * successive action is supplied the return value of the previous. + * + * @private + * @param {*} value The unwrapped value. + * @param {Array} actions Actions to perform to resolve the unwrapped value. + * @returns {*} Returns the resolved value. + */ + function baseWrapperValue(value, actions) { + var result = value; + if (result instanceof LazyWrapper) { + result = result.value(); + } + return arrayReduce(actions, function (result, action) { + return action.func.apply(action.thisArg, arrayPush([result], action.args)); + }, result); + } + + /** + * This base implementation of `_.zipObject` which assigns values using `assignFunc`. + * + * @private + * @param {Array} props The property identifiers. + * @param {Array} values The property values. + * @param {Function} assignFunc The function to assign values. + * @returns {Object} Returns the new object. + */ + function baseZipObject(props, values, assignFunc) { + var index = -1, + length = props.length, + valsLength = values.length, + result = {}; + + while (++index < length) { + var value = index < valsLength ? values[index] : undefined; + assignFunc(result, props[index], value); + } + return result; + } + + /** + * Casts `value` to an empty array if it's not an array like object. + * + * @private + * @param {*} value The value to inspect. + * @returns {Array|Object} Returns the cast array-like object. + */ + function castArrayLikeObject(value) { + return isArrayLikeObject(value) ? value : []; + } + + /** + * Casts `value` to a path array if it's not one. + * + * @private + * @param {*} value The value to inspect. + * @param {Object} [object] The object to query keys on. + * @returns {Array} Returns the cast property path array. + */ + function castPath(value, object) { + if (isArray(value)) { + return value; + } + return isKey(value, object) ? [value] : stringToPath(toString(value)); + } + + /** + * Casts `array` to a slice if it's needed. + * + * @private + * @param {Array} array The array to inspect. + * @param {number} start The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the cast slice. + */ + function castSlice(array, start, end) { + var length = array.length; + end = end === undefined ? length : end; + return (!start && end >= length) ? array : baseSlice(array, start, end); + } + + /** + * Creates a clone of `buffer`. + * + * @private + * @param {Buffer} buffer The buffer to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Buffer} Returns the cloned buffer. + */ + function cloneBuffer(buffer, isDeep) { + if (isDeep) { + return buffer.slice(); + } + var length = buffer.length, + result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); + + buffer.copy(result); + return result; + } + + /** + * Creates a clone of `arrayBuffer`. + * + * @private + * @param {ArrayBuffer} arrayBuffer The array buffer to clone. + * @returns {ArrayBuffer} Returns the cloned array buffer. + */ + function cloneArrayBuffer(arrayBuffer) { + var result = new arrayBuffer.constructor(arrayBuffer.byteLength); + new Uint8Array(result).set(new Uint8Array(arrayBuffer)); + return result; + } + + /** + * Creates a clone of `dataView`. + * + * @private + * @param {Object} dataView The data view to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned data view. + */ + function cloneDataView(dataView, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; + return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); + } + + /** + * Creates a clone of `regexp`. + * + * @private + * @param {Object} regexp The regexp to clone. + * @returns {Object} Returns the cloned regexp. + */ + function cloneRegExp(regexp) { + var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); + result.lastIndex = regexp.lastIndex; + return result; + } + + /** + * Creates a clone of the `symbol` object. + * + * @private + * @param {Object} symbol The symbol object to clone. + * @returns {Object} Returns the cloned symbol object. + */ + function cloneSymbol(symbol) { + return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; + } + + /** + * Creates a clone of `typedArray`. + * + * @private + * @param {Object} typedArray The typed array to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the cloned typed array. + */ + function cloneTypedArray(typedArray, isDeep) { + var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; + return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); + } + + /** + * Compares values to sort them in ascending order. + * + * @private + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {number} Returns the sort order indicator for `value`. + */ + function compareAscending(value, other) { + if (value !== other) { + var valIsDefined = value !== undefined, + valIsNull = value === null, + valIsReflexive = value === value, + valIsSymbol = isSymbol(value); + + var othIsDefined = other !== undefined, + othIsNull = other === null, + othIsReflexive = other === other, + othIsSymbol = isSymbol(other); + + if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || + (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || + (valIsNull && othIsDefined && othIsReflexive) || + (!valIsDefined && othIsReflexive) || + !valIsReflexive) { + return 1; + } + if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || + (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || + (othIsNull && valIsDefined && valIsReflexive) || + (!othIsDefined && valIsReflexive) || + !othIsReflexive) { + return -1; + } + } + return 0; + } + + /** + * Used by `_.orderBy` to compare multiple properties of a value to another + * and stable sort them. + * + * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, + * specify an order of "desc" for descending or "asc" for ascending sort order + * of corresponding values. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {boolean[]|string[]} orders The order to sort by for each property. + * @returns {number} Returns the sort order indicator for `object`. + */ + function compareMultiple(object, other, orders) { + var index = -1, + objCriteria = object.criteria, + othCriteria = other.criteria, + length = objCriteria.length, + ordersLength = orders.length; + + while (++index < length) { + var result = compareAscending(objCriteria[index], othCriteria[index]); + if (result) { + if (index >= ordersLength) { + return result; + } + var order = orders[index]; + return result * (order == 'desc' ? -1 : 1); + } + } + // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications + // that causes it, under certain circumstances, to provide the same value for + // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 + // for more details. + // + // This also ensures a stable sort in V8 and other engines. + // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. + return object.index - other.index; + } + + /** + * Creates an array that is the composition of partially applied arguments, + * placeholders, and provided arguments into a single array of arguments. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to prepend to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgs(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersLength = holders.length, + leftIndex = -1, + leftLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(leftLength + rangeLength), + isUncurried = !isCurried; + + while (++leftIndex < leftLength) { + result[leftIndex] = partials[leftIndex]; + } + while (++argsIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[holders[argsIndex]] = args[argsIndex]; + } + } + while (rangeLength--) { + result[leftIndex++] = args[argsIndex++]; + } + return result; + } + + /** + * This function is like `composeArgs` except that the arguments composition + * is tailored for `_.partialRight`. + * + * @private + * @param {Array} args The provided arguments. + * @param {Array} partials The arguments to append to those provided. + * @param {Array} holders The `partials` placeholder indexes. + * @params {boolean} [isCurried] Specify composing for a curried function. + * @returns {Array} Returns the new array of composed arguments. + */ + function composeArgsRight(args, partials, holders, isCurried) { + var argsIndex = -1, + argsLength = args.length, + holdersIndex = -1, + holdersLength = holders.length, + rightIndex = -1, + rightLength = partials.length, + rangeLength = nativeMax(argsLength - holdersLength, 0), + result = Array(rangeLength + rightLength), + isUncurried = !isCurried; + + while (++argsIndex < rangeLength) { + result[argsIndex] = args[argsIndex]; + } + var offset = argsIndex; + while (++rightIndex < rightLength) { + result[offset + rightIndex] = partials[rightIndex]; + } + while (++holdersIndex < holdersLength) { + if (isUncurried || argsIndex < argsLength) { + result[offset + holders[holdersIndex]] = args[argsIndex++]; + } + } + return result; + } + + /** + * Copies the values of `source` to `array`. + * + * @private + * @param {Array} source The array to copy values from. + * @param {Array} [array=[]] The array to copy values to. + * @returns {Array} Returns `array`. + */ + function copyArray(source, array) { + var index = -1, + length = source.length; + + array || (array = Array(length)); + while (++index < length) { + array[index] = source[index]; + } + return array; + } + + /** + * Copies properties of `source` to `object`. + * + * @private + * @param {Object} source The object to copy properties from. + * @param {Array} props The property identifiers to copy. + * @param {Object} [object={}] The object to copy properties to. + * @param {Function} [customizer] The function to customize copied values. + * @returns {Object} Returns `object`. + */ + function copyObject(source, props, object, customizer) { + var isNew = !object; + object || (object = {}); + + var index = -1, + length = props.length; + + while (++index < length) { + var key = props[index]; + + var newValue = customizer + ? customizer(object[key], source[key], key, object, source) + : undefined; + + if (newValue === undefined) { + newValue = source[key]; + } + if (isNew) { + baseAssignValue(object, key, newValue); + } else { + assignValue(object, key, newValue); + } + } + return object; + } + + /** + * Copies own symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbols(source, object) { + return copyObject(source, getSymbols(source), object); + } + + /** + * Copies own and inherited symbols of `source` to `object`. + * + * @private + * @param {Object} source The object to copy symbols from. + * @param {Object} [object={}] The object to copy symbols to. + * @returns {Object} Returns `object`. + */ + function copySymbolsIn(source, object) { + return copyObject(source, getSymbolsIn(source), object); + } + + /** + * Creates a function like `_.groupBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} [initializer] The accumulator object initializer. + * @returns {Function} Returns the new aggregator function. + */ + function createAggregator(setter, initializer) { + return function (collection, iteratee) { + var func = isArray(collection) ? arrayAggregator : baseAggregator, + accumulator = initializer ? initializer() : {}; + + return func(collection, setter, baseIteratee(iteratee, 2), accumulator); + }; + } + + /** + * Creates a function like `_.assign`. + * + * @private + * @param {Function} assigner The function to assign values. + * @returns {Function} Returns the new assigner function. + */ + function createAssigner(assigner) { + return baseRest(function (object, sources) { + var index = -1, + length = sources.length, + customizer = length > 1 ? sources[length - 1] : undefined, + guard = length > 2 ? sources[2] : undefined; + + customizer = (assigner.length > 3 && typeof customizer == 'function') + ? (length--, customizer) + : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + customizer = length < 3 ? undefined : customizer; + length = 1; + } + object = Object(object); + while (++index < length) { + var source = sources[index]; + if (source) { + assigner(object, source, index, customizer); + } + } + return object; + }); + } + + /** + * Creates a `baseEach` or `baseEachRight` function. + * + * @private + * @param {Function} eachFunc The function to iterate over a collection. + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseEach(eachFunc, fromRight) { + return function (collection, iteratee) { + if (collection == null) { + return collection; + } + if (!isArrayLike(collection)) { + return eachFunc(collection, iteratee); + } + var length = collection.length, + index = fromRight ? length : -1, + iterable = Object(collection); + + while ((fromRight ? index-- : ++index < length)) { + if (iteratee(iterable[index], index, iterable) === false) { + break; + } + } + return collection; + }; + } + + /** + * Creates a base function for methods like `_.forIn` and `_.forOwn`. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new base function. + */ + function createBaseFor(fromRight) { + return function (object, iteratee, keysFunc) { + var index = -1, + iterable = Object(object), + props = keysFunc(object), + length = props.length; + + while (length--) { + var key = props[fromRight ? length : ++index]; + if (iteratee(iterable[key], key, iterable) === false) { + break; + } + } + return object; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the optional `this` + * binding of `thisArg`. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createBind(func, bitmask, thisArg) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return fn.apply(isBind ? thisArg : this, arguments); + } + + return wrapper; + } + + /** + * Creates a function that produces an instance of `Ctor` regardless of + * whether it was invoked as part of a `new` expression or by `call` or `apply`. + * + * @private + * @param {Function} Ctor The constructor to wrap. + * @returns {Function} Returns the new wrapped function. + */ + function createCtor(Ctor) { + return function () { + // Use a `switch` statement to work with class constructors. See + // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist + // for more details. + var args = arguments; + switch (args.length) { + case 0: + return new Ctor; + case 1: + return new Ctor(args[0]); + case 2: + return new Ctor(args[0], args[1]); + case 3: + return new Ctor(args[0], args[1], args[2]); + case 4: + return new Ctor(args[0], args[1], args[2], args[3]); + case 5: + return new Ctor(args[0], args[1], args[2], args[3], args[4]); + case 6: + return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); + case 7: + return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); + } + var thisBinding = baseCreate(Ctor.prototype), + result = Ctor.apply(thisBinding, args); + + // Mimic the constructor's `return` behavior. + // See https://es5.github.io/#x13.2.2 for more details. + return isObject(result) ? result : thisBinding; + }; + } + + /** + * Creates a function that wraps `func` to enable currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {number} arity The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createCurry(func, bitmask, arity) { + var Ctor = createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length, + placeholder = getHolder(wrapper); + + while (index--) { + args[index] = arguments[index]; + } + var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) + ? [] + : replaceHolders(args, placeholder); + + length -= holders.length; + if (length < arity) { + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, undefined, + args, holders, undefined, undefined, arity - length); + } + var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + return apply(fn, this, args); + } + + return wrapper; + } + + /** + * Creates a `_.find` or `_.findLast` function. + * + * @private + * @param {Function} findIndexFunc The function to find the collection index. + * @returns {Function} Returns the new find function. + */ + function createFind(findIndexFunc) { + return function (collection, predicate, fromIndex) { + var iterable = Object(collection); + if (!isArrayLike(collection)) { + var iteratee = baseIteratee(predicate, 3); + collection = keys(collection); + predicate = function (key) { + return iteratee(iterable[key], key, iterable); + }; + } + var index = findIndexFunc(collection, predicate, fromIndex); + return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; + }; + } + + /** + * Creates a function that wraps `func` to invoke it with optional `this` + * binding of `thisArg`, partial application, and currying. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [partialsRight] The arguments to append to those provided + * to the new function. + * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { + var isAry = bitmask & WRAP_ARY_FLAG, + isBind = bitmask & WRAP_BIND_FLAG, + isBindKey = bitmask & WRAP_BIND_KEY_FLAG, + isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), + isFlip = bitmask & WRAP_FLIP_FLAG, + Ctor = isBindKey ? undefined : createCtor(func); + + function wrapper() { + var length = arguments.length, + args = Array(length), + index = length; + + while (index--) { + args[index] = arguments[index]; + } + if (isCurried) { + var placeholder = getHolder(wrapper), + holdersCount = countHolders(args, placeholder); + } + if (partials) { + args = composeArgs(args, partials, holders, isCurried); + } + if (partialsRight) { + args = composeArgsRight(args, partialsRight, holdersRight, isCurried); + } + length -= holdersCount; + if (isCurried && length < arity) { + var newHolders = replaceHolders(args, placeholder); + return createRecurry( + func, bitmask, createHybrid, wrapper.placeholder, thisArg, + args, newHolders, argPos, ary, arity - length + ); + } + var thisBinding = isBind ? thisArg : this, + fn = isBindKey ? thisBinding[func] : func; + + length = args.length; + if (argPos) { + args = reorder(args, argPos); + } else if (isFlip && length > 1) { + args.reverse(); + } + if (isAry && ary < length) { + args.length = ary; + } + if (this && this !== root && this instanceof wrapper) { + fn = Ctor || createCtor(fn); + } + return fn.apply(thisBinding, args); + } + + return wrapper; + } + + /** + * Creates a function like `_.invertBy`. + * + * @private + * @param {Function} setter The function to set accumulator values. + * @param {Function} toIteratee The function to resolve iteratees. + * @returns {Function} Returns the new inverter function. + */ + function createInverter(setter, toIteratee) { + return function (object, iteratee) { + return baseInverter(object, setter, toIteratee(iteratee), {}); + }; + } + + /** + * Creates a function that wraps `func` to invoke it with the `this` binding + * of `thisArg` and `partials` prepended to the arguments it receives. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {*} thisArg The `this` binding of `func`. + * @param {Array} partials The arguments to prepend to those provided to + * the new function. + * @returns {Function} Returns the new wrapped function. + */ + function createPartial(func, bitmask, thisArg, partials) { + var isBind = bitmask & WRAP_BIND_FLAG, + Ctor = createCtor(func); + + function wrapper() { + var argsIndex = -1, + argsLength = arguments.length, + leftIndex = -1, + leftLength = partials.length, + args = Array(leftLength + argsLength), + fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; + + while (++leftIndex < leftLength) { + args[leftIndex] = partials[leftIndex]; + } + while (argsLength--) { + args[leftIndex++] = arguments[++argsIndex]; + } + return apply(fn, isBind ? thisArg : this, args); + } + + return wrapper; + } + + /** + * Creates a `_.range` or `_.rangeRight` function. + * + * @private + * @param {boolean} [fromRight] Specify iterating from right to left. + * @returns {Function} Returns the new range function. + */ + function createRange(fromRight) { + return function (start, end, step) { + if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { + end = step = undefined; + } + // Ensure the sign of `-0` is preserved. + start = toFinite(start); + if (end === undefined) { + end = start; + start = 0; + } else { + end = toFinite(end); + } + step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); + return baseRange(start, end, step, fromRight); + }; + } + + /** + * Creates a function that wraps `func` to continue currying. + * + * @private + * @param {Function} func The function to wrap. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @param {Function} wrapFunc The function to create the `func` wrapper. + * @param {*} placeholder The placeholder value. + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to prepend to those provided to + * the new function. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { + var isCurry = bitmask & WRAP_CURRY_FLAG, + newHolders = isCurry ? holders : undefined, + newHoldersRight = isCurry ? undefined : holders, + newPartials = isCurry ? partials : undefined, + newPartialsRight = isCurry ? undefined : partials; + + bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); + bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); + + if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { + bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); + } + var newData = [ + func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, + newHoldersRight, argPos, ary, arity + ]; + + var result = wrapFunc.apply(undefined, newData); + if (isLaziable(func)) { + setData(result, newData); + } + result.placeholder = placeholder; + return setWrapToString(result, func, bitmask); + } + + /** + * Creates a set object of `values`. + * + * @private + * @param {Array} values The values to add to the set. + * @returns {Object} Returns the new set. + */ + var createSet = !(Set && (1 / setToArray(new Set([, -0]))[1]) == INFINITY) ? noop : function (values) { + return new Set(values); }; - } - - /** - * The base implementation of `_.values` and `_.valuesIn` which creates an - * array of `object` property values corresponding to the property names - * of `props`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} props The property names to get values for. - * @returns {Object} Returns the array of property values. - */ - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - /** - * Checks if a `cache` value for `key` exists. - * - * @private - * @param {Object} cache The cache to query. - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function cacheHas(cache, key) { - return cache.has(key); - } - - /** - * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the first unmatched string symbol. - */ - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, - length = strSymbols.length; - - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol - * that is not found in the character symbols. - * - * @private - * @param {Array} strSymbols The string symbols to inspect. - * @param {Array} chrSymbols The character symbols to find. - * @returns {number} Returns the index of the last unmatched string symbol. - */ - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {} - return index; - } - - /** - * Gets the number of `placeholder` occurrences in `array`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} placeholder The placeholder to search for. - * @returns {number} Returns the placeholder count. - */ - function countHolders(array, placeholder) { - var length = array.length, - result = 0; - - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - - /** - * Used by `_.escape` to convert characters to HTML entities. - * - * @private - * @param {string} chr The matched character to escape. - * @returns {string} Returns the escaped character. - */ - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - /** - * Gets the value at `key` of `object`. - * - * @private - * @param {Object} [object] The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function getValue(object, key) { - return object == null ? undefined : object[key]; - } - - /** - * Checks if `string` contains Unicode symbols. - * - * @private - * @param {string} string The string to inspect. - * @returns {boolean} Returns `true` if a symbol is found, else `false`. - */ - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - /** - * Converts `iterator` to an array. - * - * @private - * @param {Object} iterator The iterator to convert. - * @returns {Array} Returns the converted array. - */ - function iteratorToArray(iterator) { - var data, - result = []; - - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - /** - * Converts `map` to its key-value pairs. - * - * @private - * @param {Object} map The map to convert. - * @returns {Array} Returns the key-value pairs. - */ - function mapToArray(map) { - var index = -1, - result = Array(map.size); - - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - /** - * Creates a unary function that invokes `func` with its argument transformed. - * - * @private - * @param {Function} func The function to wrap. - * @param {Function} transform The argument transform. - * @returns {Function} Returns the new function. - */ - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); + + /** + * Creates a function that either curries or invokes `func` with optional + * `this` binding and partially applied arguments. + * + * @private + * @param {Function|string} func The function or method name to wrap. + * @param {number} bitmask The bitmask flags. + * 1 - `_.bind` + * 2 - `_.bindKey` + * 4 - `_.curry` or `_.curryRight` of a bound function + * 8 - `_.curry` + * 16 - `_.curryRight` + * 32 - `_.partial` + * 64 - `_.partialRight` + * 128 - `_.rearg` + * 256 - `_.ary` + * 512 - `_.flip` + * @param {*} [thisArg] The `this` binding of `func`. + * @param {Array} [partials] The arguments to be partially applied. + * @param {Array} [holders] The `partials` placeholder indexes. + * @param {Array} [argPos] The argument positions of the new function. + * @param {number} [ary] The arity cap of `func`. + * @param {number} [arity] The arity of `func`. + * @returns {Function} Returns the new wrapped function. + */ + function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { + var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; + if (!isBindKey && typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + var length = partials ? partials.length : 0; + if (!length) { + bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); + partials = holders = undefined; + } + ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); + arity = arity === undefined ? arity : toInteger(arity); + length -= holders ? holders.length : 0; + + if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { + var partialsRight = partials, + holdersRight = holders; + + partials = holders = undefined; + } + var data = isBindKey ? undefined : getData(func); + + var newData = [ + func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, + argPos, ary, arity + ]; + + if (data) { + mergeData(newData, data); + } + func = newData[0]; + bitmask = newData[1]; + thisArg = newData[2]; + partials = newData[3]; + holders = newData[4]; + arity = newData[9] = newData[9] === undefined + ? (isBindKey ? 0 : func.length) + : nativeMax(newData[9] - length, 0); + + if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { + bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); + } + if (!bitmask || bitmask == WRAP_BIND_FLAG) { + var result = createBind(func, bitmask, thisArg); + } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { + result = createCurry(func, bitmask, arity); + } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { + result = createPartial(func, bitmask, thisArg, partials); + } else { + result = createHybrid.apply(undefined, newData); + } + var setter = data ? baseSetData : setData; + return setWrapToString(setter(result, newData), func, bitmask); + } + + /** + * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source + * objects into destination objects that are passed thru. + * + * @private + * @param {*} objValue The destination value. + * @param {*} srcValue The source value. + * @param {string} key The key of the property to merge. + * @param {Object} object The parent object of `objValue`. + * @param {Object} source The parent object of `srcValue`. + * @param {Object} [stack] Tracks traversed source values and their merged + * counterparts. + * @returns {*} Returns the value to assign. + */ + function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { + if (isObject(objValue) && isObject(srcValue)) { + // Recursively merge objects and arrays (susceptible to call stack limits). + stack.set(srcValue, objValue); + baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); + stack['delete'](srcValue); + } + return objValue; + } + + /** + * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain + * objects. + * + * @private + * @param {*} value The value to inspect. + * @param {string} key The key of the property to inspect. + * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. + */ + function customOmitClone(value) { + return isPlainObject(value) ? undefined : value; + } + + /** + * A specialized version of `baseIsEqualDeep` for arrays with support for + * partial deep comparisons. + * + * @private + * @param {Array} array The array to compare. + * @param {Array} other The other array to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `array` and `other` objects. + * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. + */ + function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + arrLength = array.length, + othLength = other.length; + + if (arrLength != othLength && !(isPartial && othLength > arrLength)) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(array); + if (stacked && stack.get(other)) { + return stacked == other; + } + var index = -1, + result = true, + seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; + + stack.set(array, other); + stack.set(other, array); + + // Ignore non-index properties. + while (++index < arrLength) { + var arrValue = array[index], + othValue = other[index]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, arrValue, index, other, array, stack) + : customizer(arrValue, othValue, index, array, other, stack); + } + if (compared !== undefined) { + if (compared) { + continue; + } + result = false; + break; + } + // Recursively compare arrays (susceptible to call stack limits). + if (seen) { + if (!arraySome(other, function (othValue, othIndex) { + if (!cacheHas(seen, othIndex) && + (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { + return seen.push(othIndex); + } + })) { + result = false; + break; + } + } else if (!( + arrValue === othValue || + equalFunc(arrValue, othValue, bitmask, customizer, stack) + )) { + result = false; + break; + } + } + stack['delete'](array); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseIsEqualDeep` for comparing objects of + * the same `toStringTag`. + * + * **Note:** This function only supports comparing values with tags of + * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {string} tag The `toStringTag` of the objects to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { + switch (tag) { + case dataViewTag: + if ((object.byteLength != other.byteLength) || + (object.byteOffset != other.byteOffset)) { + return false; + } + object = object.buffer; + other = other.buffer; + + case arrayBufferTag: + if ((object.byteLength != other.byteLength) || + !equalFunc(new Uint8Array(object), new Uint8Array(other))) { + return false; + } + return true; + + case boolTag: + case dateTag: + case numberTag: + // Coerce booleans to `1` or `0` and dates to milliseconds. + // Invalid dates are coerced to `NaN`. + return eq(+object, +other); + + case errorTag: + return object.name == other.name && object.message == other.message; + + case regexpTag: + case stringTag: + // Coerce regexes to strings and treat strings, primitives and objects, + // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring + // for more details. + return object == (other + ''); + + case mapTag: + var convert = mapToArray; + + case setTag: + var isPartial = bitmask & COMPARE_PARTIAL_FLAG; + convert || (convert = setToArray); + + if (object.size != other.size && !isPartial) { + return false; + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked) { + return stacked == other; + } + bitmask |= COMPARE_UNORDERED_FLAG; + + // Recursively compare objects (susceptible to call stack limits). + stack.set(object, other); + var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); + stack['delete'](object); + return result; + + case symbolTag: + if (symbolValueOf) { + return symbolValueOf.call(object) == symbolValueOf.call(other); + } + } + return false; + } + + /** + * A specialized version of `baseIsEqualDeep` for objects with support for + * partial deep comparisons. + * + * @private + * @param {Object} object The object to compare. + * @param {Object} other The other object to compare. + * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. + * @param {Function} customizer The function to customize comparisons. + * @param {Function} equalFunc The function to determine equivalents of values. + * @param {Object} stack Tracks traversed `object` and `other` objects. + * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. + */ + function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { + var isPartial = bitmask & COMPARE_PARTIAL_FLAG, + objProps = getAllKeys(object), + objLength = objProps.length, + othProps = getAllKeys(other), + othLength = othProps.length; + + if (objLength != othLength && !isPartial) { + return false; + } + var index = objLength; + while (index--) { + var key = objProps[index]; + if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { + return false; + } + } + // Assume cyclic values are equal. + var stacked = stack.get(object); + if (stacked && stack.get(other)) { + return stacked == other; + } + var result = true; + stack.set(object, other); + stack.set(other, object); + + var skipCtor = isPartial; + while (++index < objLength) { + key = objProps[index]; + var objValue = object[key], + othValue = other[key]; + + if (customizer) { + var compared = isPartial + ? customizer(othValue, objValue, key, other, object, stack) + : customizer(objValue, othValue, key, object, other, stack); + } + // Recursively compare objects (susceptible to call stack limits). + if (!(compared === undefined + ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) + : compared + )) { + result = false; + break; + } + skipCtor || (skipCtor = key == 'constructor'); + } + if (result && !skipCtor) { + var objCtor = object.constructor, + othCtor = other.constructor; + + // Non `Object` object instances with different constructors are not equal. + if (objCtor != othCtor && + ('constructor' in object && 'constructor' in other) && + !(typeof objCtor == 'function' && objCtor instanceof objCtor && + typeof othCtor == 'function' && othCtor instanceof othCtor)) { + result = false; + } + } + stack['delete'](object); + stack['delete'](other); + return result; + } + + /** + * A specialized version of `baseRest` which flattens the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @returns {Function} Returns the new function. + */ + function flatRest(func) { + return setToString(overRest(func, undefined, flatten), func + ''); + } + + /** + * Creates an array of own enumerable property names and symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeys(object) { + return baseGetAllKeys(object, keys, getSymbols); + } + + /** + * Creates an array of own and inherited enumerable property names and + * symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names and symbols. + */ + function getAllKeysIn(object) { + return baseGetAllKeys(object, keysIn, getSymbolsIn); + } + + /** + * Gets metadata for `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {*} Returns the metadata for `func`. + */ + var getData = !metaMap ? noop : function (func) { + return metaMap.get(func); }; - } - - /** - * Replaces all `placeholder` elements in `array` with an internal placeholder - * and returns an array of their indexes. - * - * @private - * @param {Array} array The array to modify. - * @param {*} placeholder The placeholder to replace. - * @returns {Array} Returns the new array of placeholder indexes. - */ - function replaceHolders(array, placeholder) { - var index = -1, - length = array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER) { - array[index] = PLACEHOLDER; - result[resIndex++] = index; - } - } - return result; - } - - /** - * Gets the value at `key`, unless `key` is "__proto__". - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the property to get. - * @returns {*} Returns the property value. - */ - function safeGet(object, key) { - return key == '__proto__' - ? undefined - : object[key]; - } - - /** - * Converts `set` to an array of its values. - * - * @private - * @param {Object} set The set to convert. - * @returns {Array} Returns the values. - */ - function setToArray(set) { - var index = -1, - result = Array(set.size); - - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - /** - * A specialized version of `_.indexOf` which performs strict equality - * comparisons of values, i.e. `===`. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} fromIndex The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, - length = array.length; - - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - /** - * Gets the number of symbols in `string`. - * - * @private - * @param {string} string The string to inspect. - * @returns {number} Returns the string size. - */ - function stringSize(string) { - return hasUnicode(string) - ? unicodeSize(string) - : asciiSize(string); - } - - /** - * Converts `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function stringToArray(string) { - return hasUnicode(string) - ? unicodeToArray(string) - : asciiToArray(string); - } - - /** - * Used by `_.unescape` to convert HTML entities to characters. - * - * @private - * @param {string} chr The matched character to unescape. - * @returns {string} Returns the unescaped character. - */ - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - - /** - * Gets the size of a Unicode `string`. - * - * @private - * @param {string} string The string inspect. - * @returns {number} Returns the string size. - */ - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - - /** - * Converts a Unicode `string` to an array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the converted array. - */ - function unicodeToArray(string) { - return string.match(reUnicode) || []; - } - - /*--------------------------------------------------------------------------*/ - - /** Used for built-in method references. */ - var arrayProto = Array.prototype, - funcProto = Function.prototype, - objectProto = Object.prototype; - - /** Used to detect overreaching core-js shims. */ - var coreJsData = root['__core-js_shared__']; - - /** Used to resolve the decompiled source of functions. */ - var funcToString = funcProto.toString; - - /** Used to check objects for own properties. */ - var hasOwnProperty = objectProto.hasOwnProperty; - - /** Used to generate unique IDs. */ - var idCounter = 0; - - /** Used to detect methods masquerading as native. */ - var maskSrcKey = (function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ''); - return uid ? ('Symbol(src)_1.' + uid) : ''; - }()); - - /** - * Used to resolve the - * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) - * of values. - */ - var nativeObjectToString = objectProto.toString; - - /** Used to infer the `Object` constructor. */ - var objectCtorString = funcToString.call(Object); - - /** Used to restore the original `_` reference in `_.noConflict`. */ - var oldDash = root._; - - /** Used to detect if a method is native. */ - var reIsNative = RegExp('^' + - funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&') - .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$' - ); - - /** Built-in value references. */ - var Buffer = moduleExports ? root.Buffer : undefined, - Symbol = root.Symbol, - Uint8Array = root.Uint8Array, - allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined, - getPrototype = overArg(Object.getPrototypeOf, Object), - objectCreate = Object.create, - propertyIsEnumerable = objectProto.propertyIsEnumerable, - splice = arrayProto.splice, - spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined, - symIterator = Symbol ? Symbol.iterator : undefined, - symToStringTag = Symbol ? Symbol.toStringTag : undefined; - - var defineProperty = (function() { - try { - var func = getNative(Object, 'defineProperty'); - func({}, '', {}); - return func; - } catch (e) {} - }()); - - /* Built-in method references for those with the same name as other `lodash` methods. */ - var nativeCeil = Math.ceil, - nativeFloor = Math.floor, - nativeGetSymbols = Object.getOwnPropertySymbols, - nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined, - nativeIsFinite = root.isFinite, - nativeKeys = overArg(Object.keys, Object), - nativeMax = Math.max, - nativeMin = Math.min, - nativeNow = Date.now, - nativeRandom = Math.random, - nativeReverse = arrayProto.reverse; - - /* Built-in method references that are verified to be native. */ - var DataView = getNative(root, 'DataView'), - Map = getNative(root, 'Map'), - Promise = getNative(root, 'Promise'), - Set = getNative(root, 'Set'), - WeakMap = getNative(root, 'WeakMap'), - nativeCreate = getNative(Object, 'create'); - - /** Used to store function metadata. */ - var metaMap = WeakMap && new WeakMap; - - /** Used to lookup unminified function names. */ - var realNames = {}; - - /** Used to detect maps, sets, and weakmaps. */ - var dataViewCtorString = toSource(DataView), - mapCtorString = toSource(Map), - promiseCtorString = toSource(Promise), - setCtorString = toSource(Set), - weakMapCtorString = toSource(WeakMap); - - /** Used to convert symbols to primitives and strings. */ - var symbolProto = Symbol ? Symbol.prototype : undefined, - symbolValueOf = symbolProto ? symbolProto.valueOf : undefined, - symbolToString = symbolProto ? symbolProto.toString : undefined; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` object which wraps `value` to enable implicit method - * chain sequences. Methods that operate on and return arrays, collections, - * and functions can be chained together. Methods that retrieve a single value - * or may return a primitive value will automatically end the chain sequence - * and return the unwrapped value. Otherwise, the value must be unwrapped - * with `_#value`. - * - * Explicit chain sequences, which must be unwrapped with `_#value`, may be - * enabled using `_.chain`. - * - * The execution of chained methods is lazy, that is, it's deferred until - * `_#value` is implicitly or explicitly called. - * - * Lazy evaluation allows several methods to support shortcut fusion. - * Shortcut fusion is an optimization to merge iteratee calls; this avoids - * the creation of intermediate arrays and can greatly reduce the number of - * iteratee executions. Sections of a chain sequence qualify for shortcut - * fusion if the section is applied to an array and iteratees accept only - * one argument. The heuristic for whether a section qualifies for shortcut - * fusion is subject to change. - * - * Chaining is supported in custom builds as long as the `_#value` method is - * directly or indirectly included in the build. - * - * In addition to lodash methods, wrappers have `Array` and `String` methods. - * - * The wrapper `Array` methods are: - * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift` - * - * The wrapper `String` methods are: - * `replace` and `split` - * - * The wrapper methods that support shortcut fusion are: - * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`, - * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`, - * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray` - * - * The chainable wrapper methods are: - * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`, - * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`, - * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`, - * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`, - * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`, - * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`, - * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`, - * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`, - * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`, - * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`, - * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`, - * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`, - * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`, - * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`, - * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`, - * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`, - * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`, - * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`, - * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`, - * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`, - * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`, - * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`, - * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`, - * `zipObject`, `zipObjectDeep`, and `zipWith` - * - * The wrapper methods that are **not** chainable by default are: - * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`, - * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`, - * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`, - * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`, - * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`, - * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`, - * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`, - * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`, - * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`, - * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`, - * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`, - * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`, - * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`, - * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`, - * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`, - * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`, - * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`, - * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`, - * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`, - * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`, - * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`, - * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`, - * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`, - * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`, - * `upperFirst`, `value`, and `words` - * - * @name _ - * @constructor - * @category Seq - * @param {*} value The value to wrap in a `lodash` instance. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2, 3]); - * - * // Returns an unwrapped value. - * wrapped.reduce(_.add); - * // => 6 - * - * // Returns a wrapped value. - * var squares = wrapped.map(square); - * - * _.isArray(squares); - * // => false - * - * _.isArray(squares.value()); - * // => true - */ - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty.call(value, '__wrapped__')) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - - /** - * The base implementation of `_.create` without support for assigning - * properties to the created object. - * - * @private - * @param {Object} proto The object to inherit from. - * @returns {Object} Returns the new object. - */ - var baseCreate = (function() { - function object() {} - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object; - object.prototype = undefined; - return result; + + /** + * Gets the name of `func`. + * + * @private + * @param {Function} func The function to query. + * @returns {string} Returns the function name. + */ + function getFuncName(func) { + var result = (func.name + ''), + array = realNames[result], + length = hasOwnProperty.call(realNames, result) ? array.length : 0; + + while (length--) { + var data = array[length], + otherFunc = data.func; + if (otherFunc == null || otherFunc == func) { + return data.name; + } + } + return result; + } + + /** + * Gets the argument placeholder value for `func`. + * + * @private + * @param {Function} func The function to inspect. + * @returns {*} Returns the placeholder value. + */ + function getHolder(func) { + var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; + return object.placeholder; + } + + /** + * Gets the data for `map`. + * + * @private + * @param {Object} map The map to query. + * @param {string} key The reference key. + * @returns {*} Returns the map data. + */ + function getMapData(map, key) { + var data = map.__data__; + return isKeyable(key) + ? data[typeof key == 'string' ? 'string' : 'hash'] + : data.map; + } + + /** + * Gets the property names, values, and compare flags of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the match data of `object`. + */ + function getMatchData(object) { + var result = keys(object), + length = result.length; + + while (length--) { + var key = result[length], + value = object[key]; + + result[length] = [key, value, isStrictComparable(value)]; + } + return result; + } + + /** + * Gets the native function at `key` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {string} key The key of the method to get. + * @returns {*} Returns the function if it's native, else `undefined`. + */ + function getNative(object, key) { + var value = getValue(object, key); + return baseIsNative(value) ? value : undefined; + } + + /** + * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the raw `toStringTag`. + */ + function getRawTag(value) { + var isOwn = hasOwnProperty.call(value, symToStringTag), + tag = value[symToStringTag]; + + try { + value[symToStringTag] = undefined; + var unmasked = true; + } catch (e) { + } + + var result = nativeObjectToString.call(value); + if (unmasked) { + if (isOwn) { + value[symToStringTag] = tag; + } else { + delete value[symToStringTag]; + } + } + return result; + } + + /** + * Creates an array of the own enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbols = !nativeGetSymbols ? stubArray : function (object) { + if (object == null) { + return []; + } + object = Object(object); + return arrayFilter(nativeGetSymbols(object), function (symbol) { + return propertyIsEnumerable.call(object, symbol); + }); }; - }()); - - /** - * The function whose prototype chain sequence wrappers inherit from. - * - * @private - */ - function baseLodash() { - // No operation performed. - } - - /** - * The base constructor for creating `lodash` wrapper objects. - * - * @private - * @param {*} value The value to wrap. - * @param {boolean} [chainAll] Enable explicit method chain sequences. - */ - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = undefined; - } - - // Ensure wrappers are instances of `baseLodash`. - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation. - * - * @private - * @constructor - * @param {*} value The value to wrap. - */ - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH; - this.__views__ = []; - } - - /** - * Creates a clone of the lazy wrapper object. - * - * @private - * @name clone - * @memberOf LazyWrapper - * @returns {Object} Returns the cloned `LazyWrapper` object. - */ - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - /** - * Reverses the direction of lazy iteration. - * - * @private - * @name reverse - * @memberOf LazyWrapper - * @returns {Object} Returns the new reversed `LazyWrapper` object. - */ - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - /** - * Extracts the unwrapped value from its lazy wrapper. - * - * @private - * @name value - * @memberOf LazyWrapper - * @returns {*} Returns the unwrapped value. - */ - function lazyValue() { - var array = this.__wrapped__.value(), - dir = this.__dir__, - isArr = isArray(array), - isRight = dir < 0, - arrLength = isArr ? array.length : 0, - view = getView(0, arrLength, this.__views__), - start = view.start, - end = view.end, - length = end - start, - index = isRight ? end : (start - 1), - iteratees = this.__iteratees__, - iterLength = iteratees.length, - resIndex = 0, - takeCount = nativeMin(length, this.__takeCount__); - - if (!isArr || (!isRight && arrLength == length && takeCount == length)) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - - outer: - while (length-- && resIndex < takeCount) { - index += dir; - - var iterIndex = -1, - value = array[index]; - - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], - iteratee = data.iteratee, - type = data.type, - computed = iteratee(value); - - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - // Ensure `LazyWrapper` is an instance of `baseLodash`. - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a hash object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Hash(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the hash. - * - * @private - * @name clear - * @memberOf Hash - */ - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - - /** - * Removes `key` and its value from the hash. - * - * @private - * @name delete - * @memberOf Hash - * @param {Object} hash The hash to modify. - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the hash value for `key`. - * - * @private - * @name get - * @memberOf Hash - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED ? undefined : result; - } - return hasOwnProperty.call(data, key) ? data[key] : undefined; - } - - /** - * Checks if a hash value for `key` exists. - * - * @private - * @name has - * @memberOf Hash - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key); - } - - /** - * Sets the hash `key` to `value`. - * - * @private - * @name set - * @memberOf Hash - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the hash instance. - */ - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value; - return this; - } - - // Add methods to `Hash`. - Hash.prototype.clear = hashClear; - Hash.prototype['delete'] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an list cache object. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function ListCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the list cache. - * - * @private - * @name clear - * @memberOf ListCache - */ - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - - /** - * Removes `key` and its value from the list cache. - * - * @private - * @name delete - * @memberOf ListCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function listCacheDelete(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; - } - - /** - * Gets the list cache value for `key`. - * - * @private - * @name get - * @memberOf ListCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function listCacheGet(key) { - var data = this.__data__, - index = assocIndexOf(data, key); - - return index < 0 ? undefined : data[index][1]; - } - - /** - * Checks if a list cache value for `key` exists. - * - * @private - * @name has - * @memberOf ListCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - /** - * Sets the list cache `key` to `value`. - * - * @private - * @name set - * @memberOf ListCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the list cache instance. - */ - function listCacheSet(key, value) { - var data = this.__data__, - index = assocIndexOf(data, key); - - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - // Add methods to `ListCache`. - ListCache.prototype.clear = listCacheClear; - ListCache.prototype['delete'] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a map cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function MapCache(entries) { - var index = -1, - length = entries == null ? 0 : entries.length; - - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - - /** - * Removes all key-value entries from the map. - * - * @private - * @name clear - * @memberOf MapCache - */ - function mapCacheClear() { - this.size = 0; - this.__data__ = { - 'hash': new Hash, - 'map': new (Map || ListCache), - 'string': new Hash + + /** + * Creates an array of the own and inherited enumerable symbols of `object`. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of symbols. + */ + var getSymbolsIn = !nativeGetSymbols ? stubArray : function (object) { + var result = []; + while (object) { + arrayPush(result, getSymbols(object)); + object = getPrototype(object); + } + return result; }; - } - - /** - * Removes `key` and its value from the map. - * - * @private - * @name delete - * @memberOf MapCache - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function mapCacheDelete(key) { - var result = getMapData(this, key)['delete'](key); - this.size -= result ? 1 : 0; - return result; - } - - /** - * Gets the map value for `key`. - * - * @private - * @name get - * @memberOf MapCache - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - /** - * Checks if a map value for `key` exists. - * - * @private - * @name has - * @memberOf MapCache - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - /** - * Sets the map `key` to `value`. - * - * @private - * @name set - * @memberOf MapCache - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the map cache instance. - */ - function mapCacheSet(key, value) { - var data = getMapData(this, key), - size = data.size; - - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - - // Add methods to `MapCache`. - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype['delete'] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - /*------------------------------------------------------------------------*/ - - /** - * - * Creates an array cache object to store unique values. - * - * @private - * @constructor - * @param {Array} [values] The values to cache. - */ - function SetCache(values) { - var index = -1, - length = values == null ? 0 : values.length; - - this.__data__ = new MapCache; - while (++index < length) { - this.add(values[index]); - } - } - - /** - * Adds `value` to the array cache. - * - * @private - * @name add - * @memberOf SetCache - * @alias push - * @param {*} value The value to cache. - * @returns {Object} Returns the cache instance. - */ - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - /** - * Checks if `value` is in the array cache. - * - * @private - * @name has - * @memberOf SetCache - * @param {*} value The value to search for. - * @returns {number} Returns `true` if `value` is found, else `false`. - */ - function setCacheHas(value) { - return this.__data__.has(value); - } - - // Add methods to `SetCache`. - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - /*------------------------------------------------------------------------*/ - - /** - * Creates a stack cache object to store key-value pairs. - * - * @private - * @constructor - * @param {Array} [entries] The key-value pairs to cache. - */ - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - - /** - * Removes all key-value entries from the stack. - * - * @private - * @name clear - * @memberOf Stack - */ - function stackClear() { - this.__data__ = new ListCache; - this.size = 0; - } - - /** - * Removes `key` and its value from the stack. - * - * @private - * @name delete - * @memberOf Stack - * @param {string} key The key of the value to remove. - * @returns {boolean} Returns `true` if the entry was removed, else `false`. - */ - function stackDelete(key) { - var data = this.__data__, - result = data['delete'](key); - - this.size = data.size; - return result; - } - - /** - * Gets the stack value for `key`. - * - * @private - * @name get - * @memberOf Stack - * @param {string} key The key of the value to get. - * @returns {*} Returns the entry value. - */ - function stackGet(key) { - return this.__data__.get(key); - } - - /** - * Checks if a stack value for `key` exists. - * - * @private - * @name has - * @memberOf Stack - * @param {string} key The key of the entry to check. - * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`. - */ - function stackHas(key) { - return this.__data__.has(key); - } - - /** - * Sets the stack `key` to `value`. - * - * @private - * @name set - * @memberOf Stack - * @param {string} key The key of the value to set. - * @param {*} value The value to set. - * @returns {Object} Returns the stack cache instance. - */ - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - // Add methods to `Stack`. - Stack.prototype.clear = stackClear; - Stack.prototype['delete'] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array of the enumerable property names of the array-like `value`. - * - * @private - * @param {*} value The value to query. - * @param {boolean} inherited Specify returning inherited property names. - * @returns {Array} Returns the array of property names. - */ - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), - isArg = !isArr && isArguments(value), - isBuff = !isArr && !isArg && isBuffer(value), - isType = !isArr && !isArg && !isBuff && isTypedArray(value), - skipIndexes = isArr || isArg || isBuff || isType, - result = skipIndexes ? baseTimes(value.length, String) : [], - length = result.length; - - for (var key in value) { - if ((inherited || hasOwnProperty.call(value, key)) && - !(skipIndexes && ( - // Safari 9 has enumerable `arguments.length` in strict mode. - key == 'length' || - // Node.js 0.10 has enumerable non-index properties on buffers. - (isBuff && (key == 'offset' || key == 'parent')) || - // PhantomJS 2 has enumerable non-index properties on typed arrays. - (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) || - // Skip index properties. - isIndex(key, length) - ))) { - result.push(key); - } - } - return result; - } - - /** - * This function is like `assignValue` except that it doesn't assign - * `undefined` values. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignMergeValue(object, key, value) { - if ((value !== undefined && !eq(object[key], value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Assigns `value` to `key` of `object` if the existing value is not equivalent - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || - (value === undefined && !(key in object))) { - baseAssignValue(object, key, value); - } - } - - /** - * Gets the index at which the `key` is found in `array` of key-value pairs. - * - * @private - * @param {Array} array The array to inspect. - * @param {*} key The key to search for. - * @returns {number} Returns the index of the matched value, else `-1`. - */ - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - /** - * Aggregates elements of `collection` on `accumulator` with keys transformed - * by `iteratee` and values set by `setter`. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform keys. - * @param {Object} accumulator The initial aggregated object. - * @returns {Function} Returns `accumulator`. - */ - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection) { - setter(accumulator, value, iteratee(value), collection); - }); - return accumulator; - } - - /** - * The base implementation of `_.assign` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - /** - * The base implementation of `_.assignIn` without support for multiple sources - * or `customizer` functions. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @returns {Object} Returns `object`. - */ - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - - /** - * The base implementation of `assignValue` and `assignMergeValue` without - * value checks. - * - * @private - * @param {Object} object The object to modify. - * @param {string} key The key of the property to assign. - * @param {*} value The value to assign. - */ - function baseAssignValue(object, key, value) { - if (key == '__proto__' && defineProperty) { - defineProperty(object, key, { - 'configurable': true, - 'enumerable': true, - 'value': value, - 'writable': true - }); - } else { - object[key] = value; - } - } - - /** - * The base implementation of `_.at` without support for individual paths. - * - * @private - * @param {Object} object The object to iterate over. - * @param {string[]} paths The property paths to pick. - * @returns {Array} Returns the picked elements. - */ - function baseAt(object, paths) { - var index = -1, - length = paths.length, - result = Array(length), - skip = object == null; - - while (++index < length) { - result[index] = skip ? undefined : get(object, paths[index]); - } - return result; - } - - /** - * The base implementation of `_.clamp` which doesn't coerce arguments. - * - * @private - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - */ - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== undefined) { - number = number <= upper ? number : upper; - } - if (lower !== undefined) { - number = number >= lower ? number : lower; - } - } - return number; - } - - /** - * The base implementation of `_.clone` and `_.cloneDeep` which tracks - * traversed objects. - * - * @private - * @param {*} value The value to clone. - * @param {boolean} bitmask The bitmask flags. - * 1 - Deep clone - * 2 - Flatten inherited properties - * 4 - Clone symbols - * @param {Function} [customizer] The function to customize cloning. - * @param {string} [key] The key of `value`. - * @param {Object} [object] The parent object of `value`. - * @param {Object} [stack] Tracks traversed objects and their clone counterparts. - * @returns {*} Returns the cloned value. - */ - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, - isDeep = bitmask & CLONE_DEEP_FLAG, - isFlat = bitmask & CLONE_FLAT_FLAG, - isFull = bitmask & CLONE_SYMBOLS_FLAG; - - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== undefined) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), - isFunc = tag == funcTag || tag == genTag; - - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag || tag == argsTag || (isFunc && !object)) { - result = (isFlat || isFunc) ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat - ? copySymbolsIn(value, baseAssignIn(result, value)) - : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - // Check for circular references and return its corresponding clone. - stack || (stack = new Stack); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - - return result; - } - - if (isMap(value)) { - value.forEach(function(subValue, key) { - result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack)); - }); - - return result; - } - - var keysFunc = isFull - ? (isFlat ? getAllKeysIn : getAllKeys) - : (isFlat ? keysIn : keys); - - var props = isArr ? undefined : keysFunc(value); - arrayEach(props || value, function(subValue, key) { - if (props) { - key = subValue; - subValue = value[key]; - } - // Recursively populate clone (susceptible to call stack limits). - assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack)); + + /** + * Gets the `toStringTag` of `value`. + * + * @private + * @param {*} value The value to query. + * @returns {string} Returns the `toStringTag`. + */ + var getTag = baseGetTag; + + // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. + if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || + (Map && getTag(new Map) != mapTag) || + (Promise && getTag(Promise.resolve()) != promiseTag) || + (Set && getTag(new Set) != setTag) || + (WeakMap && getTag(new WeakMap) != weakMapTag)) { + getTag = function (value) { + var result = baseGetTag(value), + Ctor = result == objectTag ? value.constructor : undefined, + ctorString = Ctor ? toSource(Ctor) : ''; + + if (ctorString) { + switch (ctorString) { + case dataViewCtorString: + return dataViewTag; + case mapCtorString: + return mapTag; + case promiseCtorString: + return promiseTag; + case setCtorString: + return setTag; + case weakMapCtorString: + return weakMapTag; + } + } + return result; + }; + } + + /** + * Gets the view, applying any `transforms` to the `start` and `end` positions. + * + * @private + * @param {number} start The start of the view. + * @param {number} end The end of the view. + * @param {Array} transforms The transformations to apply to the view. + * @returns {Object} Returns an object containing the `start` and `end` + * positions of the view. + */ + function getView(start, end, transforms) { + var index = -1, + length = transforms.length; + + while (++index < length) { + var data = transforms[index], + size = data.size; + + switch (data.type) { + case 'drop': + start += size; + break; + case 'dropRight': + end -= size; + break; + case 'take': + end = nativeMin(end, start + size); + break; + case 'takeRight': + start = nativeMax(start, end - size); + break; + } + } + return { 'start': start, 'end': end }; + } + + /** + * Extracts wrapper details from the `source` body comment. + * + * @private + * @param {string} source The source to inspect. + * @returns {Array} Returns the wrapper details. + */ + function getWrapDetails(source) { + var match = source.match(reWrapDetails); + return match ? match[1].split(reSplitDetails) : []; + } + + /** + * Checks if `path` exists on `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @param {Function} hasFunc The function to check properties. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + */ + function hasPath(object, path, hasFunc) { + path = castPath(path, object); + + var index = -1, + length = path.length, + result = false; + + while (++index < length) { + var key = toKey(path[index]); + if (!(result = object != null && hasFunc(object, key))) { + break; + } + object = object[key]; + } + if (result || ++index != length) { + return result; + } + length = object == null ? 0 : object.length; + return !!length && isLength(length) && isIndex(key, length) && + (isArray(object) || isArguments(object)); + } + + /** + * Initializes an array clone. + * + * @private + * @param {Array} array The array to clone. + * @returns {Array} Returns the initialized clone. + */ + function initCloneArray(array) { + var length = array.length, + result = new array.constructor(length); + + // Add properties assigned by `RegExp#exec`. + if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { + result.index = array.index; + result.input = array.input; + } + return result; + } + + /** + * Initializes an object clone. + * + * @private + * @param {Object} object The object to clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneObject(object) { + return (typeof object.constructor == 'function' && !isPrototype(object)) + ? baseCreate(getPrototype(object)) + : {}; + } + + /** + * Initializes an object clone based on its `toStringTag`. + * + * **Note:** This function only supports cloning values with tags of + * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. + * + * @private + * @param {Object} object The object to clone. + * @param {string} tag The `toStringTag` of the object to clone. + * @param {boolean} [isDeep] Specify a deep clone. + * @returns {Object} Returns the initialized clone. + */ + function initCloneByTag(object, tag, isDeep) { + var Ctor = object.constructor; + switch (tag) { + case arrayBufferTag: + return cloneArrayBuffer(object); + + case boolTag: + case dateTag: + return new Ctor(+object); + + case dataViewTag: + return cloneDataView(object, isDeep); + + case float32Tag: + case float64Tag: + case int8Tag: + case int16Tag: + case int32Tag: + case uint8Tag: + case uint8ClampedTag: + case uint16Tag: + case uint32Tag: + return cloneTypedArray(object, isDeep); + + case mapTag: + return new Ctor; + + case numberTag: + case stringTag: + return new Ctor(object); + + case regexpTag: + return cloneRegExp(object); + + case setTag: + return new Ctor; + + case symbolTag: + return cloneSymbol(object); + } + } + + /** + * Inserts wrapper `details` in a comment at the top of the `source` body. + * + * @private + * @param {string} source The source to modify. + * @returns {Array} details The details to insert. + * @returns {string} Returns the modified source. + */ + function insertWrapDetails(source, details) { + var length = details.length; + if (!length) { + return source; + } + var lastIndex = length - 1; + details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; + details = details.join(length > 2 ? ', ' : ' '); + return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); + } + + /** + * Checks if `value` is a flattenable `arguments` object or array. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. + */ + function isFlattenable(value) { + return isArray(value) || isArguments(value) || + !!(spreadableSymbol && value && value[spreadableSymbol]); + } + + /** + * Checks if `value` is a valid array-like index. + * + * @private + * @param {*} value The value to check. + * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. + * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. + */ + function isIndex(value, length) { + var type = typeof value; + length = length == null ? MAX_SAFE_INTEGER : length; + + return !!length && + (type == 'number' || + (type != 'symbol' && reIsUint.test(value))) && + (value > -1 && value % 1 == 0 && value < length); + } + + /** + * Checks if the given arguments are from an iteratee call. + * + * @private + * @param {*} value The potential iteratee value argument. + * @param {*} index The potential iteratee index or key argument. + * @param {*} object The potential iteratee object argument. + * @returns {boolean} Returns `true` if the arguments are from an iteratee call, + * else `false`. + */ + function isIterateeCall(value, index, object) { + if (!isObject(object)) { + return false; + } + var type = typeof index; + if (type == 'number' + ? (isArrayLike(object) && isIndex(index, object.length)) + : (type == 'string' && index in object) + ) { + return eq(object[index], value); + } + return false; + } + + /** + * Checks if `value` is a property name and not a property path. + * + * @private + * @param {*} value The value to check. + * @param {Object} [object] The object to query keys on. + * @returns {boolean} Returns `true` if `value` is a property name, else `false`. + */ + function isKey(value, object) { + if (isArray(value)) { + return false; + } + var type = typeof value; + if (type == 'number' || type == 'symbol' || type == 'boolean' || + value == null || isSymbol(value)) { + return true; + } + return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || + (object != null && value in Object(object)); + } + + /** + * Checks if `value` is suitable for use as unique object key. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is suitable, else `false`. + */ + function isKeyable(value) { + var type = typeof value; + return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') + ? (value !== '__proto__') + : (value === null); + } + + /** + * Checks if `func` has a lazy counterpart. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` has a lazy counterpart, + * else `false`. + */ + function isLaziable(func) { + var funcName = getFuncName(func), + other = lodash[funcName]; + + if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { + return false; + } + if (func === other) { + return true; + } + var data = getData(other); + return !!data && func === data[0]; + } + + /** + * Checks if `func` has its source masked. + * + * @private + * @param {Function} func The function to check. + * @returns {boolean} Returns `true` if `func` is masked, else `false`. + */ + function isMasked(func) { + return !!maskSrcKey && (maskSrcKey in func); + } + + /** + * Checks if `value` is likely a prototype object. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. + */ + function isPrototype(value) { + var Ctor = value && value.constructor, + proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; + + return value === proto; + } + + /** + * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` if suitable for strict + * equality comparisons, else `false`. + */ + function isStrictComparable(value) { + return value === value && !isObject(value); + } + + /** + * A specialized version of `matchesProperty` for source values suitable + * for strict equality comparisons, i.e. `===`. + * + * @private + * @param {string} key The key of the property to get. + * @param {*} srcValue The value to match. + * @returns {Function} Returns the new spec function. + */ + function matchesStrictComparable(key, srcValue) { + return function (object) { + if (object == null) { + return false; + } + return object[key] === srcValue && + (srcValue !== undefined || (key in Object(object))); + }; + } + + /** + * A specialized version of `_.memoize` which clears the memoized function's + * cache when it exceeds `MAX_MEMOIZE_SIZE`. + * + * @private + * @param {Function} func The function to have its output memoized. + * @returns {Function} Returns the new memoized function. + */ + function memoizeCapped(func) { + var result = memoize(func, function (key) { + if (cache.size === MAX_MEMOIZE_SIZE) { + cache.clear(); + } + return key; + }); + + var cache = result.cache; + return result; + } + + /** + * Merges the function metadata of `source` into `data`. + * + * Merging metadata reduces the number of wrappers used to invoke a function. + * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` + * may be applied regardless of execution order. Methods like `_.ary` and + * `_.rearg` modify function arguments, making the order in which they are + * executed important, preventing the merging of metadata. However, we make + * an exception for a safe combined case where curried functions have `_.ary` + * and or `_.rearg` applied. + * + * @private + * @param {Array} data The destination metadata. + * @param {Array} source The source metadata. + * @returns {Array} Returns `data`. + */ + function mergeData(data, source) { + var bitmask = data[1], + srcBitmask = source[1], + newBitmask = bitmask | srcBitmask, + isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); + + var isCombo = + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || + ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || + ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); + + // Exit early if metadata can't be merged. + if (!(isCommon || isCombo)) { + return data; + } + // Use source `thisArg` if available. + if (srcBitmask & WRAP_BIND_FLAG) { + data[2] = source[2]; + // Set when currying a bound function. + newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; + } + // Compose partial arguments. + var value = source[3]; + if (value) { + var partials = data[3]; + data[3] = partials ? composeArgs(partials, value, source[4]) : value; + data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; + } + // Compose partial right arguments. + value = source[5]; + if (value) { + partials = data[5]; + data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; + data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; + } + // Use source `argPos` if available. + value = source[7]; + if (value) { + data[7] = value; + } + // Use source `ary` if it's smaller. + if (srcBitmask & WRAP_ARY_FLAG) { + data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); + } + // Use source `arity` if one is not provided. + if (data[9] == null) { + data[9] = source[9]; + } + // Use source `func` and merge bitmasks. + data[0] = source[0]; + data[1] = newBitmask; + + return data; + } + + /** + * This function is like + * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * except that it includes inherited enumerable properties. + * + * @private + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + */ + function nativeKeysIn(object) { + var result = []; + if (object != null) { + for (var key in Object(object)) { + result.push(key); + } + } + return result; + } + + /** + * Converts `value` to a string using `Object.prototype.toString`. + * + * @private + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + */ + function objectToString(value) { + return nativeObjectToString.call(value); + } + + /** + * A specialized version of `baseRest` which transforms the rest array. + * + * @private + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @param {Function} transform The rest array transform. + * @returns {Function} Returns the new function. + */ + function overRest(func, start, transform) { + start = nativeMax(start === undefined ? (func.length - 1) : start, 0); + return function () { + var args = arguments, + index = -1, + length = nativeMax(args.length - start, 0), + array = Array(length); + + while (++index < length) { + array[index] = args[start + index]; + } + index = -1; + var otherArgs = Array(start + 1); + while (++index < start) { + otherArgs[index] = args[index]; + } + otherArgs[start] = transform(array); + return apply(func, this, otherArgs); + }; + } + + /** + * Gets the parent value at `path` of `object`. + * + * @private + * @param {Object} object The object to query. + * @param {Array} path The path to get the parent value of. + * @returns {*} Returns the parent value. + */ + function parent(object, path) { + return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); + } + + /** + * Reorder `array` according to the specified indexes where the element at + * the first index is assigned as the first element, the element at + * the second index is assigned as the second element, and so on. + * + * @private + * @param {Array} array The array to reorder. + * @param {Array} indexes The arranged array indexes. + * @returns {Array} Returns `array`. + */ + function reorder(array, indexes) { + var arrLength = array.length, + length = nativeMin(indexes.length, arrLength), + oldArray = copyArray(array); + + while (length--) { + var index = indexes[length]; + array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; + } + return array; + } + + /** + * Sets metadata for `func`. + * + * **Note:** If this function becomes hot, i.e. is invoked a lot in a short + * period of time, it will trip its breaker and transition to an identity + * function to avoid garbage collection pauses in V8. See + * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) + * for more details. + * + * @private + * @param {Function} func The function to associate metadata with. + * @param {*} data The metadata. + * @returns {Function} Returns `func`. + */ + var setData = shortOut(baseSetData); + + /** + * Sets the `toString` method of `func` to return `string`. + * + * @private + * @param {Function} func The function to modify. + * @param {Function} string The `toString` result. + * @returns {Function} Returns `func`. + */ + var setToString = shortOut(baseSetToString); + + /** + * Sets the `toString` method of `wrapper` to mimic the source of `reference` + * with wrapper details in a comment at the top of the source body. + * + * @private + * @param {Function} wrapper The function to modify. + * @param {Function} reference The reference function. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Function} Returns `wrapper`. + */ + function setWrapToString(wrapper, reference, bitmask) { + var source = (reference + ''); + return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); + } + + /** + * Creates a function that'll short out and invoke `identity` instead + * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` + * milliseconds. + * + * @private + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new shortable function. + */ + function shortOut(func) { + var count = 0, + lastCalled = 0; + + return function () { + var stamp = nativeNow(), + remaining = HOT_SPAN - (stamp - lastCalled); + + lastCalled = stamp; + if (remaining > 0) { + if (++count >= HOT_COUNT) { + return arguments[0]; + } + } else { + count = 0; + } + return func.apply(undefined, arguments); + }; + } + + /** + * Converts `string` to a property path array. + * + * @private + * @param {string} string The string to convert. + * @returns {Array} Returns the property path array. + */ + var stringToPath = memoizeCapped(function (string) { + var result = []; + if (string.charCodeAt(0) === 46 /* . */) { + result.push(''); + } + string.replace(rePropName, function (match, number, quote, subString) { + result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); + }); + return result; }); - return result; - } - - /** - * The base implementation of `_.delay` and `_.defer` which accepts `args` - * to provide to `func`. - * - * @private - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {Array} args The arguments to provide to `func`. - * @returns {number|Object} Returns the timer id or timeout object. - */ - function baseDelay(func, wait, args) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return setTimeout(function() { func.apply(undefined, args); }, wait); - } - - /** - * The base implementation of methods like `_.difference` without support - * for excluding multiple arrays or iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Array} values The values to exclude. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of filtered values. - */ - function baseDifference(array, values, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - isCommon = true, - length = array.length, - result = [], - valuesLength = values.length; - - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } - else if (values.length >= LARGE_ARRAY_SIZE) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee == null ? value : iteratee(value); - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } - else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.forEach` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - */ - var baseEach = createBaseEach(baseForOwn); - - /** - * The base implementation of `_.every` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false` - */ - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection) { - result = !!predicate(value, index, collection); - return result; + + /** + * Converts `value` to a string key if it's not a string or symbol. + * + * @private + * @param {*} value The value to inspect. + * @returns {string|symbol} Returns the key. + */ + function toKey(value) { + if (typeof value == 'string' || isSymbol(value)) { + return value; + } + var result = (value + ''); + return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; + } + + /** + * Converts `func` to its source code. + * + * @private + * @param {Function} func The function to convert. + * @returns {string} Returns the source code. + */ + function toSource(func) { + if (func != null) { + try { + return funcToString.call(func); + } catch (e) { + } + try { + return (func + ''); + } catch (e) { + } + } + return ''; + } + + /** + * Updates wrapper `details` based on `bitmask` flags. + * + * @private + * @returns {Array} details The details to modify. + * @param {number} bitmask The bitmask flags. See `createWrap` for more details. + * @returns {Array} Returns `details`. + */ + function updateWrapDetails(details, bitmask) { + arrayEach(wrapFlags, function (pair) { + var value = '_.' + pair[0]; + if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { + details.push(value); + } + }); + return details.sort(); + } + + /** + * Creates a clone of `wrapper`. + * + * @private + * @param {Object} wrapper The wrapper to clone. + * @returns {Object} Returns the cloned wrapper. + */ + function wrapperClone(wrapper) { + if (wrapper instanceof LazyWrapper) { + return wrapper.clone(); + } + var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); + result.__actions__ = copyArray(wrapper.__actions__); + result.__index__ = wrapper.__index__; + result.__values__ = wrapper.__values__; + return result; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an array of elements split into groups the length of `size`. + * If `array` can't be split evenly, the final chunk will be the remaining + * elements. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to process. + * @param {number} [size=1] The length of each chunk + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the new array of chunks. + * @example + * + * _.chunk(['a', 'b', 'c', 'd'], 2); + * // => [['a', 'b'], ['c', 'd']] + * + * _.chunk(['a', 'b', 'c', 'd'], 3); + * // => [['a', 'b', 'c'], ['d']] + */ + function chunk(array, size, guard) { + if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) { + size = 1; + } else { + size = nativeMax(toInteger(size), 0); + } + var length = array == null ? 0 : array.length; + if (!length || size < 1) { + return []; + } + var index = 0, + resIndex = 0, + result = Array(nativeCeil(length / size)); + + while (index < length) { + result[resIndex++] = baseSlice(array, index, (index += size)); + } + return result; + } + + /** + * Creates an array with all falsey values removed. The values `false`, `null`, + * `0`, `""`, `undefined`, and `NaN` are falsey. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to compact. + * @returns {Array} Returns the new array of filtered values. + * @example + * + * _.compact([0, 1, false, 2, '', 3]); + * // => [1, 2, 3] + */ + function compact(array) { + var index = -1, + length = array == null ? 0 : array.length, + resIndex = 0, + result = []; + + while (++index < length) { + var value = array[index]; + if (value) { + result[resIndex++] = value; + } + } + return result; + } + + /** + * Creates a new array concatenating `array` with any additional arrays + * and/or values. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to concatenate. + * @param {...*} [values] The values to concatenate. + * @returns {Array} Returns the new concatenated array. + * @example + * + * var array = [1]; + * var other = _.concat(array, 2, [3], [[4]]); + * + * console.log(other); + * // => [1, 2, 3, [4]] + * + * console.log(array); + * // => [1] + */ + function concat() { + var length = arguments.length; + if (!length) { + return []; + } + var args = Array(length - 1), + array = arguments[0], + index = length; + + while (index--) { + args[index - 1] = arguments[index]; + } + return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); + } + + /** + * Creates an array of `array` values not included in the other given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * **Note:** Unlike `_.pullAll`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...Array} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.without, _.xor + * @example + * + * _.difference([2, 1], [2, 3]); + * // => [1] + */ + var difference = baseRest(function (array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) + : []; }); - return result; - } - - /** - * The base implementation of methods like `_.max` and `_.min` which accepts a - * `comparator` to determine the extremum value. - * - * @private - * @param {Array} array The array to iterate over. - * @param {Function} iteratee The iteratee invoked per iteration. - * @param {Function} comparator The comparator used to compare values. - * @returns {*} Returns the extremum value. - */ - function baseExtremum(array, iteratee, comparator) { - var index = -1, - length = array.length; - - while (++index < length) { - var value = array[index], - current = iteratee(value); - - if (current != null && (computed === undefined - ? (current === current && !isSymbol(current)) - : comparator(current, computed) - )) { - var computed = current, - result = value; - } - } - return result; - } - - /** - * The base implementation of `_.filter` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - */ - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection) { - if (predicate(value, index, collection)) { - result.push(value); - } + + /** + * Creates a slice of `array` with `n` elements dropped from the beginning. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to drop. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.drop([1, 2, 3]); + * // => [2, 3] + * + * _.drop([1, 2, 3], 2); + * // => [3] + * + * _.drop([1, 2, 3], 5); + * // => [] + * + * _.drop([1, 2, 3], 0); + * // => [1, 2, 3] + */ + function drop(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * This method is like `_.find` except that it returns the index of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': false }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': true } + * ]; + * + * _.findIndex(users, function(o) { return o.user == 'barney'; }); + * // => 0 + * + * // The `_.matches` iteratee shorthand. + * _.findIndex(users, { 'user': 'fred', 'active': false }); + * // => 1 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findIndex(users, ['active', false]); + * // => 0 + * + * // The `_.property` iteratee shorthand. + * _.findIndex(users, 'active'); + * // => 2 + */ + function findIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index); + } + + /** + * This method is like `_.findIndex` except that it iterates over elements + * of `collection` from right to left. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=array.length-1] The index to search from. + * @returns {number} Returns the index of the found element, else `-1`. + * @example + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false }, + * { 'user': 'pebbles', 'active': false } + * ]; + * + * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); + * // => 2 + * + * // The `_.matches` iteratee shorthand. + * _.findLastIndex(users, { 'user': 'barney', 'active': true }); + * // => 0 + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastIndex(users, ['active', false]); + * // => 2 + * + * // The `_.property` iteratee shorthand. + * _.findLastIndex(users, 'active'); + * // => 0 + */ + function findLastIndex(array, predicate, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = length - 1; + if (fromIndex !== undefined) { + index = toInteger(fromIndex); + index = fromIndex < 0 + ? nativeMax(length + index, 0) + : nativeMin(index, length - 1); + } + return baseFindIndex(array, baseIteratee(predicate, 3), index, true); + } + + /** + * Flattens `array` a single level deep. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flatten([1, [2, [3, [4]], 5]]); + * // => [1, 2, [3, [4]], 5] + */ + function flatten(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, 1) : []; + } + + /** + * Recursively flattens `array`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to flatten. + * @returns {Array} Returns the new flattened array. + * @example + * + * _.flattenDeep([1, [2, [3, [4]], 5]]); + * // => [1, 2, 3, 4, 5] + */ + function flattenDeep(array) { + var length = array == null ? 0 : array.length; + return length ? baseFlatten(array, INFINITY) : []; + } + + /** + * Gets the first element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias first + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the first element of `array`. + * @example + * + * _.head([1, 2, 3]); + * // => 1 + * + * _.head([]); + * // => undefined + */ + function head(array) { + return (array && array.length) ? array[0] : undefined; + } + + /** + * Gets the index at which the first occurrence of `value` is found in `array` + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. If `fromIndex` is negative, it's used as the + * offset from the end of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {*} value The value to search for. + * @param {number} [fromIndex=0] The index to search from. + * @returns {number} Returns the index of the matched value, else `-1`. + * @example + * + * _.indexOf([1, 2, 1, 2], 2); + * // => 1 + * + * // Search from the `fromIndex`. + * _.indexOf([1, 2, 1, 2], 2, 2); + * // => 3 + */ + function indexOf(array, value, fromIndex) { + var length = array == null ? 0 : array.length; + if (!length) { + return -1; + } + var index = fromIndex == null ? 0 : toInteger(fromIndex); + if (index < 0) { + index = nativeMax(length + index, 0); + } + return baseIndexOf(array, value, index); + } + + /** + * Gets all but the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.initial([1, 2, 3]); + * // => [1, 2] + */ + function initial(array) { + var length = array == null ? 0 : array.length; + return length ? baseSlice(array, 0, -1) : []; + } + + /** + * Creates an array of unique values that are included in all given arrays + * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. The order and references of result values are + * determined by the first array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of intersecting values. + * @example + * + * _.intersection([2, 1], [2, 3]); + * // => [2] + */ + var intersection = baseRest(function (arrays) { + var mapped = arrayMap(arrays, castArrayLikeObject); + return (mapped.length && mapped[0] === arrays[0]) + ? baseIntersection(mapped) + : []; }); - return result; - } - - /** - * The base implementation of `_.flatten` with support for restricting flattening. - * - * @private - * @param {Array} array The array to flatten. - * @param {number} depth The maximum recursion depth. - * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. - * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. - * @param {Array} [result=[]] The initial result value. - * @returns {Array} Returns the new flattened array. - */ - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, - length = array.length; - - predicate || (predicate = isFlattenable); - result || (result = []); - - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - // Recursively flatten arrays (susceptible to call stack limits). - baseFlatten(value, depth - 1, predicate, isStrict, result); + + /** + * Gets the last element of `array`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @returns {*} Returns the last element of `array`. + * @example + * + * _.last([1, 2, 3]); + * // => 3 + */ + function last(array) { + var length = array == null ? 0 : array.length; + return length ? array[length - 1] : undefined; + } + + /** + * Reverses `array` so that the first element becomes the last, the second + * element becomes the second to last, and so on. + * + * **Note:** This method mutates `array` and is based on + * [`Array#reverse`](https://mdn.io/Array/reverse). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to modify. + * @returns {Array} Returns `array`. + * @example + * + * var array = [1, 2, 3]; + * + * _.reverse(array); + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function reverse(array) { + return array == null ? array : nativeReverse.call(array); + } + + /** + * Creates a slice of `array` from `start` up to, but not including, `end`. + * + * **Note:** This method is used instead of + * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are + * returned. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to slice. + * @param {number} [start=0] The start position. + * @param {number} [end=array.length] The end position. + * @returns {Array} Returns the slice of `array`. + */ + function slice(array, start, end) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { + start = 0; + end = length; } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - /** - * The base implementation of `baseForOwn` which iterates over `object` - * properties returned by `keysFunc` and invokes `iteratee` for each property. - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseFor = createBaseFor(); - - /** - * This function is like `baseFor` except that it iterates over properties - * in the opposite order. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @param {Function} keysFunc The function to get the keys of `object`. - * @returns {Object} Returns `object`. - */ - var baseForRight = createBaseFor(true); - - /** - * The base implementation of `_.forOwn` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - /** - * The base implementation of `_.forOwnRight` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Object} Returns `object`. - */ - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - /** - * The base implementation of `_.functions` which creates an array of - * `object` function property names filtered from `props`. - * - * @private - * @param {Object} object The object to inspect. - * @param {Array} props The property names to filter. - * @returns {Array} Returns the function names. - */ - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); + start = start == null ? 0 : toInteger(start); + end = end === undefined ? length : toInteger(end); + } + return baseSlice(array, start, end); + } + + /** + * Creates a slice of `array` with `n` elements taken from the beginning. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.take([1, 2, 3]); + * // => [1] + * + * _.take([1, 2, 3], 2); + * // => [1, 2] + * + * _.take([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.take([1, 2, 3], 0); + * // => [] + */ + function take(array, n, guard) { + if (!(array && array.length)) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + return baseSlice(array, 0, n < 0 ? 0 : n); + } + + /** + * Creates a slice of `array` with `n` elements taken from the end. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Array + * @param {Array} array The array to query. + * @param {number} [n=1] The number of elements to take. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {Array} Returns the slice of `array`. + * @example + * + * _.takeRight([1, 2, 3]); + * // => [3] + * + * _.takeRight([1, 2, 3], 2); + * // => [2, 3] + * + * _.takeRight([1, 2, 3], 5); + * // => [1, 2, 3] + * + * _.takeRight([1, 2, 3], 0); + * // => [] + */ + function takeRight(array, n, guard) { + var length = array == null ? 0 : array.length; + if (!length) { + return []; + } + n = (guard || n === undefined) ? 1 : toInteger(n); + n = length - n; + return baseSlice(array, n < 0 ? 0 : n, length); + } + + /** + * Creates an array of unique values, in order, from all given arrays using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to inspect. + * @returns {Array} Returns the new array of combined values. + * @example + * + * _.union([2], [1, 2]); + * // => [2, 1] + */ + var union = baseRest(function (arrays) { + return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); }); - } - - /** - * The base implementation of `_.get` without support for default values. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @returns {*} Returns the resolved value. - */ - function baseGet(object, path) { - path = castPath(path, object); - - var index = 0, - length = path.length; - - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return (index && index == length) ? object : undefined; - } - - /** - * The base implementation of `getAllKeys` and `getAllKeysIn` which uses - * `keysFunc` and `symbolsFunc` to get the enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Function} keysFunc The function to get the keys of `object`. - * @param {Function} symbolsFunc The function to get the symbols of `object`. - * @returns {Array} Returns the array of property names and symbols. - */ - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - /** - * The base implementation of `getTag` without fallbacks for buggy environments. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - function baseGetTag(value) { - if (value == null) { - return value === undefined ? undefinedTag : nullTag; - } - return (symToStringTag && symToStringTag in Object(value)) - ? getRawTag(value) - : objectToString(value); - } - - /** - * The base implementation of `_.gt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - */ - function baseGt(value, other) { - return value > other; - } - - /** - * The base implementation of `_.has` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHas(object, key) { - return object != null && hasOwnProperty.call(object, key); - } - - /** - * The base implementation of `_.hasIn` without support for deep paths. - * - * @private - * @param {Object} [object] The object to query. - * @param {Array|string} key The key to check. - * @returns {boolean} Returns `true` if `key` exists, else `false`. - */ - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - /** - * The base implementation of methods like `_.intersection`, without support - * for iteratee shorthands, that accepts an array of arrays to inspect. - * - * @private - * @param {Array} arrays The arrays to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new array of shared values. - */ - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, - length = arrays[0].length, - othLength = arrays.length, - othIndex = othLength, - caches = Array(othLength), - maxLength = Infinity, - result = []; - - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120)) - ? new SetCache(othIndex && array) - : undefined; - } - array = arrays[0]; - - var index = -1, - seen = caches[0]; - - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (!(seen - ? cacheHas(seen, computed) - : includes(result, computed, comparator) - )) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache - ? cacheHas(cache, computed) - : includes(arrays[othIndex], computed, comparator)) - ) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.invert` and `_.invertBy` which inverts - * `object` with values transformed by `iteratee` and set by `setter`. - * - * @private - * @param {Object} object The object to iterate over. - * @param {Function} setter The function to set `accumulator` values. - * @param {Function} iteratee The iteratee to transform values. - * @param {Object} accumulator The initial inverted object. - * @returns {Function} Returns `accumulator`. - */ - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object) { - setter(accumulator, iteratee(value), key, object); + + /** + * Creates a duplicate-free version of an array, using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons, in which only the first occurrence of each element + * is kept. The order of result values is determined by the order they occur + * in the array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniq([2, 1, 2]); + * // => [2, 1] + */ + function uniq(array) { + return (array && array.length) ? baseUniq(array) : []; + } + + /** + * This method is like `_.uniq` except that it accepts `iteratee` which is + * invoked for each element in `array` to generate the criterion by which + * uniqueness is computed. The order of result values is determined by the + * order they occur in the array. The iteratee is invoked with one argument: + * (value). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Array} Returns the new duplicate free array. + * @example + * + * _.uniqBy([2.1, 1.2, 2.3], Math.floor); + * // => [2.1, 1.2] + * + * // The `_.property` iteratee shorthand. + * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); + * // => [{ 'x': 1 }, { 'x': 2 }] + */ + function uniqBy(array, iteratee) { + return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; + } + + /** + * This method is like `_.zip` except that it accepts an array of grouped + * elements and creates an array regrouping the elements to their pre-zip + * configuration. + * + * @static + * @memberOf _ + * @since 1.2.0 + * @category Array + * @param {Array} array The array of grouped elements to process. + * @returns {Array} Returns the new array of regrouped elements. + * @example + * + * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + * + * _.unzip(zipped); + * // => [['a', 'b'], [1, 2], [true, false]] + */ + function unzip(array) { + if (!(array && array.length)) { + return []; + } + var length = 0; + array = arrayFilter(array, function (group) { + if (isArrayLikeObject(group)) { + length = nativeMax(group.length, length); + return true; + } + }); + return baseTimes(length, function (index) { + return arrayMap(array, baseProperty(index)); + }); + } + + /** + * Creates an array excluding all given values using + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * for equality comparisons. + * + * **Note:** Unlike `_.pull`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {Array} array The array to inspect. + * @param {...*} [values] The values to exclude. + * @returns {Array} Returns the new array of filtered values. + * @see _.difference, _.xor + * @example + * + * _.without([2, 1, 2, 3], 1, 2); + * // => [3] + */ + var without = baseRest(function (array, values) { + return isArrayLikeObject(array) + ? baseDifference(array, values) + : []; }); - return accumulator; - } - - /** - * The base implementation of `_.invoke` without support for individual - * method arguments. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {Array} args The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - */ - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? undefined : apply(func, object, args); - } - - /** - * The base implementation of `_.isArguments`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - */ - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag; - } - - /** - * The base implementation of `_.isDate` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - */ - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - - /** - * The base implementation of `_.isEqual` which supports partial comparisons - * and tracks traversed objects. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {boolean} bitmask The bitmask flags. - * 1 - Unordered comparison - * 2 - Partial comparison - * @param {Function} [customizer] The function to customize comparisons. - * @param {Object} [stack] Tracks traversed `value` and `other` objects. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - */ - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - - /** - * A specialized version of `baseIsEqual` for arrays and objects which performs - * deep comparisons and tracks traversed objects enabling objects with circular - * references to be compared. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} [stack] Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), - othIsArr = isArray(other), - objTag = objIsArr ? arrayTag : getTag(object), - othTag = othIsArr ? arrayTag : getTag(other); - - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - - var objIsObj = objTag == objectTag, - othIsObj = othTag == objectTag, - isSameTag = objTag == othTag; - - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; + + /** + * Creates an array of grouped elements, the first of which contains the + * first elements of the given arrays, the second of which contains the + * second elements of the given arrays, and so on. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Array + * @param {...Array} [arrays] The arrays to process. + * @returns {Array} Returns the new array of grouped elements. + * @example + * + * _.zip(['a', 'b'], [1, 2], [true, false]); + * // => [['a', 1, true], ['b', 2, false]] + */ + var zip = baseRest(unzip); + + /** + * This method is like `_.fromPairs` except that it accepts two arrays, + * one of property identifiers and one of corresponding values. + * + * @static + * @memberOf _ + * @since 0.4.0 + * @category Array + * @param {Array} [props=[]] The property identifiers. + * @param {Array} [values=[]] The property values. + * @returns {Object} Returns the new object. + * @example + * + * _.zipObject(['a', 'b'], [1, 2]); + * // => { 'a': 1, 'b': 2 } + */ + function zipObject(props, values) { + return baseZipObject(props || [], values || [], assignValue); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a `lodash` wrapper instance that wraps `value` with explicit method + * chain sequences enabled. The result of such sequences must be unwrapped + * with `_#value`. + * + * @static + * @memberOf _ + * @since 1.3.0 + * @category Seq + * @param {*} value The value to wrap. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'pebbles', 'age': 1 } + * ]; + * + * var youngest = _ + * .chain(users) + * .sortBy('age') + * .map(function(o) { + * return o.user + ' is ' + o.age; + * }) + * .head() + * .value(); + * // => 'pebbles is 1' + */ + function chain(value) { + var result = lodash(value); + result.__chain__ = true; + return result; } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack); - return (objIsArr || isTypedArray(object)) - ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) - : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); + + /** + * This method invokes `interceptor` and returns `value`. The interceptor + * is invoked with one argument; (value). The purpose of this method is to + * "tap into" a method chain sequence in order to modify intermediate results. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns `value`. + * @example + * + * _([1, 2, 3]) + * .tap(function(array) { + * // Mutate input array. + * array.pop(); + * }) + * .reverse() + * .value(); + * // => [2, 1] + */ + function tap(value, interceptor) { + interceptor(value); + return value; } - if (!(bitmask & COMPARE_PARTIAL_FLAG)) { - var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'), - othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__'); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, - othUnwrapped = othIsWrapped ? other.value() : other; + /** + * This method is like `_.tap` except that it returns the result of `interceptor`. + * The purpose of this method is to "pass thru" values replacing intermediate + * results in a method chain sequence. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Seq + * @param {*} value The value to provide to `interceptor`. + * @param {Function} interceptor The function to invoke. + * @returns {*} Returns the result of `interceptor`. + * @example + * + * _(' abc ') + * .chain() + * .trim() + * .thru(function(value) { + * return [value]; + * }) + * .value(); + * // => ['abc'] + */ + function thru(value, interceptor) { + return interceptor(value); + } + + /** + * This method is the wrapper version of `_.at`. + * + * @name at + * @memberOf _ + * @since 1.0.0 + * @category Seq + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; + * + * _(object).at(['a[0].b.c', 'a[1]']).value(); + * // => [3, 4] + */ + var wrapperAt = flatRest(function (paths) { + var length = paths.length, + start = length ? paths[0] : 0, + value = this.__wrapped__, + interceptor = function (object) { + return baseAt(object, paths); + }; + + if (length > 1 || this.__actions__.length || + !(value instanceof LazyWrapper) || !isIndex(start)) { + return this.thru(interceptor); + } + value = value.slice(start, +start + (length ? 1 : 0)); + value.__actions__.push({ + 'func': thru, + 'args': [interceptor], + 'thisArg': undefined + }); + return new LodashWrapper(value, this.__chain__).thru(function (array) { + if (length && !array.length) { + array.push(undefined); + } + return array; + }); + }); - stack || (stack = new Stack); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); - } - - /** - * The base implementation of `_.isMap` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - */ - function baseIsMap(value) { - return isObjectLike(value) && getTag(value) == mapTag; - } - - /** - * The base implementation of `_.isMatch` without support for iteratee shorthands. - * - * @private - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Array} matchData The property names, values, and compare flags to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - */ - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, - length = index, - noCustomizer = !customizer; - - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if ((noCustomizer && data[2]) - ? data[1] !== object[data[0]] - : !(data[0] in object) - ) { - return false; - } + /** + * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. + * + * @name chain + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 } + * ]; + * + * // A sequence without explicit chaining. + * _(users).head(); + * // => { 'user': 'barney', 'age': 36 } + * + * // A sequence with explicit chaining. + * _(users) + * .chain() + * .head() + * .pick('user') + * .value(); + * // => { 'user': 'barney' } + */ + function wrapperChain() { + return chain(this); + } + + /** + * Executes the chain sequence and returns the wrapped result. + * + * @name commit + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2]; + * var wrapped = _(array).push(3); + * + * console.log(array); + * // => [1, 2] + * + * wrapped = wrapped.commit(); + * console.log(array); + * // => [1, 2, 3] + * + * wrapped.last(); + * // => 3 + * + * console.log(array); + * // => [1, 2, 3] + */ + function wrapperCommit() { + return new LodashWrapper(this.value(), this.__chain__); + } + + /** + * Gets the next value on a wrapped object following the + * [iterator protocol](https://mdn.io/iteration_protocols#iterator). + * + * @name next + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the next iterator value. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped.next(); + * // => { 'done': false, 'value': 1 } + * + * wrapped.next(); + * // => { 'done': false, 'value': 2 } + * + * wrapped.next(); + * // => { 'done': true, 'value': undefined } + */ + function wrapperNext() { + if (this.__values__ === undefined) { + this.__values__ = toArray(this.value()); + } + var done = this.__index__ >= this.__values__.length, + value = done ? undefined : this.__values__[this.__index__++]; + + return { 'done': done, 'value': value }; + } + + /** + * Enables the wrapper to be iterable. + * + * @name Symbol.iterator + * @memberOf _ + * @since 4.0.0 + * @category Seq + * @returns {Object} Returns the wrapper object. + * @example + * + * var wrapped = _([1, 2]); + * + * wrapped[Symbol.iterator]() === wrapped; + * // => true + * + * Array.from(wrapped); + * // => [1, 2] + */ + function wrapperToIterator() { + return this; } - while (++index < length) { - data = matchData[index]; - var key = data[0], - objValue = object[key], - srcValue = data[1]; - if (noCustomizer && data[2]) { - if (objValue === undefined && !(key in object)) { - return false; + /** + * Creates a clone of the chain sequence planting `value` as the wrapped value. + * + * @name plant + * @memberOf _ + * @since 3.2.0 + * @category Seq + * @param {*} value The value to plant. + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * function square(n) { + * return n * n; + * } + * + * var wrapped = _([1, 2]).map(square); + * var other = wrapped.plant([3, 4]); + * + * other.value(); + * // => [9, 16] + * + * wrapped.value(); + * // => [1, 4] + */ + function wrapperPlant(value) { + var result, + parent = this; + + while (parent instanceof baseLodash) { + var clone = wrapperClone(parent); + clone.__index__ = 0; + clone.__values__ = undefined; + if (result) { + previous.__wrapped__ = clone; + } else { + result = clone; + } + var previous = clone; + parent = parent.__wrapped__; } - } else { - var stack = new Stack; - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); + previous.__wrapped__ = value; + return result; + } + + /** + * This method is the wrapper version of `_.reverse`. + * + * **Note:** This method mutates the wrapped array. + * + * @name reverse + * @memberOf _ + * @since 0.1.0 + * @category Seq + * @returns {Object} Returns the new `lodash` wrapper instance. + * @example + * + * var array = [1, 2, 3]; + * + * _(array).reverse().value() + * // => [3, 2, 1] + * + * console.log(array); + * // => [3, 2, 1] + */ + function wrapperReverse() { + var value = this.__wrapped__; + if (value instanceof LazyWrapper) { + var wrapped = value; + if (this.__actions__.length) { + wrapped = new LazyWrapper(this); + } + wrapped = wrapped.reverse(); + wrapped.__actions__.push({ + 'func': thru, + 'args': [reverse], + 'thisArg': undefined + }); + return new LodashWrapper(wrapped, this.__chain__); + } + return this.thru(reverse); + } + + /** + * Executes the chain sequence to resolve the unwrapped value. + * + * @name value + * @memberOf _ + * @since 0.1.0 + * @alias toJSON, valueOf + * @category Seq + * @returns {*} Returns the resolved unwrapped value. + * @example + * + * _([1, 2, 3]).value(); + * // => [1, 2, 3] + */ + function wrapperValue() { + return baseWrapperValue(this.__wrapped__, this.__actions__); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The corresponding value of + * each key is the number of times the key was returned by `iteratee`. The + * iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.countBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': 1, '6': 2 } + * + * // The `_.property` iteratee shorthand. + * _.countBy(['one', 'two', 'three'], 'length'); + * // => { '3': 2, '5': 1 } + */ + var countBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + ++result[key]; + } else { + baseAssignValue(result, key, 1); } - if (!(result === undefined - ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) - : result - )) { - return false; - } - } - } - return true; - } - - /** - * The base implementation of `_.isNative` without bad shim checks. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - */ - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - /** - * The base implementation of `_.isRegExp` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - */ - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - /** - * The base implementation of `_.isSet` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - */ - function baseIsSet(value) { - return isObjectLike(value) && getTag(value) == setTag; - } - - /** - * The base implementation of `_.isTypedArray` without Node.js optimizations. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - */ - function baseIsTypedArray(value) { - return isObjectLike(value) && - isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - - /** - * The base implementation of `_.iteratee`. - * - * @private - * @param {*} [value=_.identity] The value to convert to an iteratee. - * @returns {Function} Returns the iteratee. - */ - function baseIteratee(value) { - // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9. - // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details. - if (typeof value == 'function') { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == 'object') { - return isArray(value) - ? baseMatchesProperty(value[0], value[1]) - : baseMatches(value); - } - return property(value); - } - - /** - * The base implementation of `_.keys` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty.call(object, key) && key != 'constructor') { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), - result = []; - - for (var key in object) { - if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) { - result.push(key); - } - } - return result; - } - - /** - * The base implementation of `_.lt` which doesn't coerce arguments. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - */ - function baseLt(value, other) { - return value < other; - } - - /** - * The base implementation of `_.map` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} iteratee The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - */ - function baseMap(collection, iteratee) { - var index = -1, - result = isArrayLike(collection) ? Array(collection.length) : []; - - baseEach(collection, function(value, key, collection) { - result[++index] = iteratee(value, key, collection); }); - return result; - } - - /** - * The base implementation of `_.matches` which doesn't clone `source`. - * - * @private - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - /** - * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`. - * - * @private - * @param {string} path The path of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return (objValue === undefined && objValue === srcValue) - ? hasIn(object, path) - : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - - /** - * The base implementation of `_.merge` without support for multiple sources. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {number} srcIndex The index of `source`. - * @param {Function} [customizer] The function to customize merged values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - if (isObject(srcValue)) { - stack || (stack = new Stack); - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } - else { - var newValue = customizer - ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack) - : undefined; - if (newValue === undefined) { - newValue = srcValue; + /** + * Checks if `predicate` returns truthy for **all** elements of `collection`. + * Iteration is stopped once `predicate` returns falsey. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * **Note:** This method returns `true` for + * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because + * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of + * elements of empty collections. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if all elements pass the predicate check, + * else `false`. + * @example + * + * _.every([true, 1, null, 'yes'], Boolean); + * // => false + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.every(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.every(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.every(users, 'active'); + * // => false + */ + function every(collection, predicate, guard) { + var func = isArray(collection) ? arrayEvery : baseEvery; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning an array of all elements + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * **Note:** Unlike `_.remove`, this method returns a new array. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.reject + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * _.filter(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, { 'age': 36, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.filter(users, 'active'); + * // => objects for ['barney'] + */ + function filter(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, baseIteratee(predicate, 3)); + } + + /** + * Iterates over elements of `collection`, returning the first element + * `predicate` returns truthy for. The predicate is invoked with three + * arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param {number} [fromIndex=0] The index to search from. + * @returns {*} Returns the matched element, else `undefined`. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false }, + * { 'user': 'pebbles', 'age': 1, 'active': true } + * ]; + * + * _.find(users, function(o) { return o.age < 40; }); + * // => object for 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.find(users, { 'age': 1, 'active': true }); + * // => object for 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.find(users, ['active', false]); + * // => object for 'fred' + * + * // The `_.property` iteratee shorthand. + * _.find(users, 'active'); + * // => object for 'barney' + */ + var find = createFind(findIndex); + + /** + * Iterates over elements of `collection` and invokes `iteratee` for each element. + * The iteratee is invoked with three arguments: (value, index|key, collection). + * Iteratee functions may exit iteration early by explicitly returning `false`. + * + * **Note:** As with other "Collections" methods, objects with a "length" + * property are iterated like arrays. To avoid this behavior use `_.forIn` + * or `_.forOwn` for object iteration. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @alias each + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array|Object} Returns `collection`. + * @see _.forEachRight + * @example + * + * _.forEach([1, 2], function(value) { + * console.log(value); + * }); + * // => Logs `1` then `2`. + * + * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { + * console.log(key); + * }); + * // => Logs 'a' then 'b' (iteration order is not guaranteed). + */ + function forEach(collection, iteratee) { + var func = isArray(collection) ? arrayEach : baseEach; + return func(collection, baseIteratee(iteratee, 3)); + } + + /** + * Creates an object composed of keys generated from the results of running + * each element of `collection` thru `iteratee`. The order of grouped values + * is determined by the order they occur in `collection`. The corresponding + * value of each key is an array of elements responsible for generating the + * key. The iteratee is invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The iteratee to transform keys. + * @returns {Object} Returns the composed aggregate object. + * @example + * + * _.groupBy([6.1, 4.2, 6.3], Math.floor); + * // => { '4': [4.2], '6': [6.1, 6.3] } + * + * // The `_.property` iteratee shorthand. + * _.groupBy(['one', 'two', 'three'], 'length'); + * // => { '3': ['one', 'two'], '5': ['three'] } + */ + var groupBy = createAggregator(function (result, value, key) { + if (hasOwnProperty.call(result, key)) { + result[key].push(value); + } else { + baseAssignValue(result, key, [value]); } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - - /** - * A specialized version of `baseMerge` for arrays and objects which performs - * deep merges and tracks traversed objects enabling objects with circular - * references to be merged. - * - * @private - * @param {Object} object The destination object. - * @param {Object} source The source object. - * @param {string} key The key of the value to merge. - * @param {number} srcIndex The index of `source`. - * @param {Function} mergeFunc The function to merge values. - * @param {Function} [customizer] The function to customize assigned values. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - */ - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), - srcValue = safeGet(source, key), - stacked = stack.get(srcValue); - - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer - ? customizer(objValue, srcValue, (key + ''), object, source, stack) - : undefined; - - var isCommon = newValue === undefined; - - if (isCommon) { - var isArr = isArray(srcValue), - isBuff = !isArr && isBuffer(srcValue), - isTyped = !isArr && !isBuff && isTypedArray(srcValue); - - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } - else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } - else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } - else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } - else { - newValue = []; - } - } - else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } - else if (!isObject(objValue) || (srcIndex && isFunction(objValue))) { - newValue = initCloneObject(srcValue); - } - } - else { - isCommon = false; - } - } - if (isCommon) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack['delete'](srcValue); - } - assignMergeValue(object, key, newValue); - } - - /** - * The base implementation of `_.orderBy` without param guards. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by. - * @param {string[]} orders The sort orders of `iteratees`. - * @returns {Array} Returns the new sorted array. - */ - function baseOrderBy(collection, iteratees, orders) { - var index = -1; - iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(baseIteratee)); - - var result = baseMap(collection, function(value, key, collection) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { 'criteria': criteria, 'index': ++index, 'value': value }; }); - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - /** - * The base implementation of `_.pick` without support for individual - * property identifiers. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @returns {Object} Returns the new object. - */ - function basePick(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); + /** + * Creates an array of values by running each element in `collection` thru + * `iteratee`. The iteratee is invoked with three arguments: + * (value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. + * + * The guarded methods are: + * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, + * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, + * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, + * `template`, `trim`, `trimEnd`, `trimStart`, and `words` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new mapped array. + * @example + * + * function square(n) { + * return n * n; + * } + * + * _.map([4, 8], square); + * // => [16, 64] + * + * _.map({ 'a': 4, 'b': 8 }, square); + * // => [16, 64] (iteration order is not guaranteed) + * + * var users = [ + * { 'user': 'barney' }, + * { 'user': 'fred' } + * ]; + * + * // The `_.property` iteratee shorthand. + * _.map(users, 'user'); + * // => ['barney', 'fred'] + */ + function map(collection, iteratee) { + var func = isArray(collection) ? arrayMap : baseMap; + return func(collection, baseIteratee(iteratee, 3)); + } + + /** + * Reduces `collection` to a value which is the accumulated result of running + * each element in `collection` thru `iteratee`, where each successive + * invocation is supplied the return value of the previous. If `accumulator` + * is not given, the first element of `collection` is used as the initial + * value. The iteratee is invoked with four arguments: + * (accumulator, value, index|key, collection). + * + * Many lodash methods are guarded to work as iteratees for methods like + * `_.reduce`, `_.reduceRight`, and `_.transform`. + * + * The guarded methods are: + * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, + * and `sortBy` + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [iteratee=_.identity] The function invoked per iteration. + * @param {*} [accumulator] The initial value. + * @returns {*} Returns the accumulated value. + * @see _.reduceRight + * @example + * + * _.reduce([1, 2], function(sum, n) { + * return sum + n; + * }, 0); + * // => 3 + * + * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { + * (result[value] || (result[value] = [])).push(key); + * return result; + * }, {}); + * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) + */ + function reduce(collection, iteratee, accumulator) { + var func = isArray(collection) ? arrayReduce : baseReduce, + initAccum = arguments.length < 3; + + return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); + } + + /** + * The opposite of `_.filter`; this method returns the elements of `collection` + * that `predicate` does **not** return truthy for. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {Array} Returns the new filtered array. + * @see _.filter + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': false }, + * { 'user': 'fred', 'age': 40, 'active': true } + * ]; + * + * _.reject(users, function(o) { return !o.active; }); + * // => objects for ['fred'] + * + * // The `_.matches` iteratee shorthand. + * _.reject(users, { 'age': 40, 'active': true }); + * // => objects for ['barney'] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.reject(users, ['active', false]); + * // => objects for ['fred'] + * + * // The `_.property` iteratee shorthand. + * _.reject(users, 'active'); + * // => objects for ['barney'] + */ + function reject(collection, predicate) { + var func = isArray(collection) ? arrayFilter : baseFilter; + return func(collection, negate(baseIteratee(predicate, 3))); + } + + /** + * Gets the size of `collection` by returning its length for array-like + * values or the number of own enumerable string keyed properties for objects. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object|string} collection The collection to inspect. + * @returns {number} Returns the collection size. + * @example + * + * _.size([1, 2, 3]); + * // => 3 + * + * _.size({ 'a': 1, 'b': 2 }); + * // => 2 + * + * _.size('pebbles'); + * // => 7 + */ + function size(collection) { + if (collection == null) { + return 0; + } + if (isArrayLike(collection)) { + return isString(collection) ? stringSize(collection) : collection.length; + } + var tag = getTag(collection); + if (tag == mapTag || tag == setTag) { + return collection.size; + } + return baseKeys(collection).length; + } + + /** + * Checks if `predicate` returns truthy for **any** element of `collection`. + * Iteration is stopped once `predicate` returns truthy. The predicate is + * invoked with three arguments: (value, index|key, collection). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {boolean} Returns `true` if any element passes the predicate check, + * else `false`. + * @example + * + * _.some([null, 0, 'yes', false], Boolean); + * // => true + * + * var users = [ + * { 'user': 'barney', 'active': true }, + * { 'user': 'fred', 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.some(users, { 'user': 'barney', 'active': false }); + * // => false + * + * // The `_.matchesProperty` iteratee shorthand. + * _.some(users, ['active', false]); + * // => true + * + * // The `_.property` iteratee shorthand. + * _.some(users, 'active'); + * // => true + */ + function some(collection, predicate, guard) { + var func = isArray(collection) ? arraySome : baseSome; + if (guard && isIterateeCall(collection, predicate, guard)) { + predicate = undefined; + } + return func(collection, baseIteratee(predicate, 3)); + } + + /** + * Creates an array of elements, sorted in ascending order by the results of + * running each element in a collection thru each iteratee. This method + * performs a stable sort, that is, it preserves the original sort order of + * equal elements. The iteratees are invoked with one argument: (value). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Collection + * @param {Array|Object} collection The collection to iterate over. + * @param {...(Function|Function[])} [iteratees=[_.identity]] + * The iteratees to sort by. + * @returns {Array} Returns the new sorted array. + * @example + * + * var users = [ + * { 'user': 'fred', 'age': 48 }, + * { 'user': 'barney', 'age': 36 }, + * { 'user': 'fred', 'age': 40 }, + * { 'user': 'barney', 'age': 34 } + * ]; + * + * _.sortBy(users, [function(o) { return o.user; }]); + * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] + * + * _.sortBy(users, ['user', 'age']); + * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] + */ + var sortBy = baseRest(function (collection, iteratees) { + if (collection == null) { + return []; + } + var length = iteratees.length; + if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { + iteratees = []; + } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { + iteratees = [iteratees[0]]; + } + return baseOrderBy(collection, baseFlatten(iteratees, 1), []); }); - } - - /** - * The base implementation of `_.pickBy` without support for iteratee shorthands. - * - * @private - * @param {Object} object The source object. - * @param {string[]} paths The property paths to pick. - * @param {Function} predicate The function invoked per property. - * @returns {Object} Returns the new object. - */ - function basePickBy(object, paths, predicate) { - var index = -1, - length = paths.length, - result = {}; - - while (++index < length) { - var path = paths[index], - value = baseGet(object, path); - - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; - } - - /** - * A specialized version of `baseProperty` which supports deep paths. - * - * @private - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - */ - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); + + /*------------------------------------------------------------------------*/ + + /** + * Gets the timestamp of the number of milliseconds that have elapsed since + * the Unix epoch (1 January 1970 00:00:00 UTC). + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Date + * @returns {number} Returns the timestamp. + * @example + * + * _.defer(function(stamp) { + * console.log(_.now() - stamp); + * }, _.now()); + * // => Logs the number of milliseconds it took for the deferred invocation. + */ + var now = function () { + return root.Date.now(); }; - } - - /** - * The base implementation of `_.random` without support for returning - * floating-point numbers. - * - * @private - * @param {number} lower The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the random number. - */ - function baseRandom(lower, upper) { - return lower + nativeFloor(nativeRandom() * (upper - lower + 1)); - } - - /** - * The base implementation of `_.range` and `_.rangeRight` which doesn't - * coerce arguments. - * - * @private - * @param {number} start The start of the range. - * @param {number} end The end of the range. - * @param {number} step The value to increment or decrement by. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Array} Returns the range of numbers. - */ - function baseRange(start, end, step, fromRight) { - var index = -1, - length = nativeMax(nativeCeil((end - start) / (step || 1)), 0), - result = Array(length); - - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - /** - * The base implementation of `_.rest` which doesn't validate or coerce arguments. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - */ - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ''); - } - - /** - * The base implementation of `_.set`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize path creation. - * @returns {Object} Returns `object`. - */ - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - - var index = -1, - length = path.length, - lastIndex = length - 1, - nested = object; - - while (nested != null && ++index < length) { - var key = toKey(path[index]), - newValue = value; - - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : undefined; - if (newValue === undefined) { - newValue = isObject(objValue) - ? objValue - : (isIndex(path[index + 1]) ? [] : {}); - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - - /** - * The base implementation of `setData` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - /** - * The base implementation of `setToString` without support for hot loop shorting. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, 'toString', { - 'configurable': true, - 'enumerable': false, - 'value': constant(string), - 'writable': true - }); - }; - - /** - * The base implementation of `_.slice` without an iteratee call guard. - * - * @private - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function baseSlice(array, start, end) { - var index = -1, - length = array.length; - - if (start < 0) { - start = -start > length ? 0 : (length + start); - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : ((end - start) >>> 0); - start >>>= 0; - - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - /** - * The base implementation of `_.some` without support for iteratee shorthands. - * - * @private - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} predicate The function invoked per iteration. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - */ - function baseSome(collection, predicate) { - var result; - - baseEach(collection, function(value, index, collection) { - result = predicate(value, index, collection); - return !result; - }); - return !!result; - } - - /** - * The base implementation of `_.toString` which doesn't convert nullish - * values to empty strings. - * - * @private - * @param {*} value The value to process. - * @returns {string} Returns the string. - */ - function baseToString(value) { - // Exit early for strings to avoid a performance hit in some environments. - if (typeof value == 'string') { - return value; - } - if (isArray(value)) { - // Recursively convert values (susceptible to call stack limits). - return arrayMap(value, baseToString) + ''; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ''; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * The base implementation of `_.uniqBy` without support for iteratee shorthands. - * - * @private - * @param {Array} array The array to inspect. - * @param {Function} [iteratee] The iteratee invoked per element. - * @param {Function} [comparator] The comparator invoked per element. - * @returns {Array} Returns the new duplicate free array. - */ - function baseUniq(array, iteratee, comparator) { - var index = -1, - includes = arrayIncludes, - length = array.length, - isCommon = true, - result = [], - seen = result; - - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } - else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache; - } - else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], - computed = iteratee ? iteratee(value) : value; - - value = (comparator || value !== 0) ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } + + /*------------------------------------------------------------------------*/ + + /** + * The opposite of `_.before`; this method creates a function that invokes + * `func` once it's called `n` or more times. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {number} n The number of calls before `func` is invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var saves = ['profile', 'settings']; + * + * var done = _.after(saves.length, function() { + * console.log('done saving!'); + * }); + * + * _.forEach(saves, function(type) { + * asyncSave({ 'type': type, 'complete': done }); + * }); + * // => Logs 'done saving!' after the two async saves have completed. + */ + function after(n, func) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } - else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - /** - * The base implementation of `_.unset`. - * - * @private - * @param {Object} object The object to modify. - * @param {Array|string} path The property path to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - */ - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; - } - - /** - * The base implementation of `wrapperValue` which returns the result of - * performing a sequence of actions on the unwrapped `value`, where each - * successive action is supplied the return value of the previous. - * - * @private - * @param {*} value The unwrapped value. - * @param {Array} actions Actions to perform to resolve the unwrapped value. - * @returns {*} Returns the resolved value. - */ - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result, action) { - return action.func.apply(action.thisArg, arrayPush([result], action.args)); - }, result); - } - - /** - * This base implementation of `_.zipObject` which assigns values using `assignFunc`. - * - * @private - * @param {Array} props The property identifiers. - * @param {Array} values The property values. - * @param {Function} assignFunc The function to assign values. - * @returns {Object} Returns the new object. - */ - function baseZipObject(props, values, assignFunc) { - var index = -1, - length = props.length, - valsLength = values.length, - result = {}; - - while (++index < length) { - var value = index < valsLength ? values[index] : undefined; - assignFunc(result, props[index], value); - } - return result; - } - - /** - * Casts `value` to an empty array if it's not an array like object. - * - * @private - * @param {*} value The value to inspect. - * @returns {Array|Object} Returns the cast array-like object. - */ - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - /** - * Casts `value` to a path array if it's not one. - * - * @private - * @param {*} value The value to inspect. - * @param {Object} [object] The object to query keys on. - * @returns {Array} Returns the cast property path array. - */ - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); - } - - /** - * Casts `array` to a slice if it's needed. - * - * @private - * @param {Array} array The array to inspect. - * @param {number} start The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the cast slice. - */ - function castSlice(array, start, end) { - var length = array.length; - end = end === undefined ? length : end; - return (!start && end >= length) ? array : baseSlice(array, start, end); - } - - /** - * Creates a clone of `buffer`. - * - * @private - * @param {Buffer} buffer The buffer to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Buffer} Returns the cloned buffer. - */ - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, - result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - - buffer.copy(result); - return result; - } - - /** - * Creates a clone of `arrayBuffer`. - * - * @private - * @param {ArrayBuffer} arrayBuffer The array buffer to clone. - * @returns {ArrayBuffer} Returns the cloned array buffer. - */ - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - /** - * Creates a clone of `dataView`. - * - * @private - * @param {Object} dataView The data view to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned data view. - */ - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - /** - * Creates a clone of `regexp`. - * - * @private - * @param {Object} regexp The regexp to clone. - * @returns {Object} Returns the cloned regexp. - */ - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - /** - * Creates a clone of the `symbol` object. - * - * @private - * @param {Object} symbol The symbol object to clone. - * @returns {Object} Returns the cloned symbol object. - */ - function cloneSymbol(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; - } - - /** - * Creates a clone of `typedArray`. - * - * @private - * @param {Object} typedArray The typed array to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the cloned typed array. - */ - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - /** - * Compares values to sort them in ascending order. - * - * @private - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {number} Returns the sort order indicator for `value`. - */ - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== undefined, - valIsNull = value === null, - valIsReflexive = value === value, - valIsSymbol = isSymbol(value); - - var othIsDefined = other !== undefined, - othIsNull = other === null, - othIsReflexive = other === other, - othIsSymbol = isSymbol(other); - - if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) || - (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) || - (valIsNull && othIsDefined && othIsReflexive) || - (!valIsDefined && othIsReflexive) || - !valIsReflexive) { - return 1; - } - if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) || - (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) || - (othIsNull && valIsDefined && valIsReflexive) || - (!othIsDefined && valIsReflexive) || - !othIsReflexive) { - return -1; - } - } - return 0; - } - - /** - * Used by `_.orderBy` to compare multiple properties of a value to another - * and stable sort them. - * - * If `orders` is unspecified, all values are sorted in ascending order. Otherwise, - * specify an order of "desc" for descending or "asc" for ascending sort order - * of corresponding values. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {boolean[]|string[]} orders The order to sort by for each property. - * @returns {number} Returns the sort order indicator for `object`. - */ - function compareMultiple(object, other, orders) { - var index = -1, - objCriteria = object.criteria, - othCriteria = other.criteria, - length = objCriteria.length, - ordersLength = orders.length; - - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == 'desc' ? -1 : 1); - } - } - // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications - // that causes it, under certain circumstances, to provide the same value for - // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247 - // for more details. - // - // This also ensures a stable sort in V8 and other engines. - // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details. - return object.index - other.index; - } - - /** - * Creates an array that is the composition of partially applied arguments, - * placeholders, and provided arguments into a single array of arguments. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to prepend to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersLength = holders.length, - leftIndex = -1, - leftLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(leftLength + rangeLength), - isUncurried = !isCurried; - - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - /** - * This function is like `composeArgs` except that the arguments composition - * is tailored for `_.partialRight`. - * - * @private - * @param {Array} args The provided arguments. - * @param {Array} partials The arguments to append to those provided. - * @param {Array} holders The `partials` placeholder indexes. - * @params {boolean} [isCurried] Specify composing for a curried function. - * @returns {Array} Returns the new array of composed arguments. - */ - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, - argsLength = args.length, - holdersIndex = -1, - holdersLength = holders.length, - rightIndex = -1, - rightLength = partials.length, - rangeLength = nativeMax(argsLength - holdersLength, 0), - result = Array(rangeLength + rightLength), - isUncurried = !isCurried; - - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - /** - * Copies the values of `source` to `array`. - * - * @private - * @param {Array} source The array to copy values from. - * @param {Array} [array=[]] The array to copy values to. - * @returns {Array} Returns `array`. - */ - function copyArray(source, array) { - var index = -1, - length = source.length; - - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - /** - * Copies properties of `source` to `object`. - * - * @private - * @param {Object} source The object to copy properties from. - * @param {Array} props The property identifiers to copy. - * @param {Object} [object={}] The object to copy properties to. - * @param {Function} [customizer] The function to customize copied values. - * @returns {Object} Returns `object`. - */ - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - - var index = -1, - length = props.length; - - while (++index < length) { - var key = props[index]; - - var newValue = customizer - ? customizer(object[key], source[key], key, object, source) - : undefined; - - if (newValue === undefined) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - /** - * Copies own symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - /** - * Copies own and inherited symbols of `source` to `object`. - * - * @private - * @param {Object} source The object to copy symbols from. - * @param {Object} [object={}] The object to copy symbols to. - * @returns {Object} Returns `object`. - */ - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } - - /** - * Creates a function like `_.groupBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} [initializer] The accumulator object initializer. - * @returns {Function} Returns the new aggregator function. - */ - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, - accumulator = initializer ? initializer() : {}; - - return func(collection, setter, baseIteratee(iteratee, 2), accumulator); - }; - } - - /** - * Creates a function like `_.assign`. - * - * @private - * @param {Function} assigner The function to assign values. - * @returns {Function} Returns the new assigner function. - */ - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, - length = sources.length, - customizer = length > 1 ? sources[length - 1] : undefined, - guard = length > 2 ? sources[2] : undefined; - - customizer = (assigner.length > 3 && typeof customizer == 'function') - ? (length--, customizer) - : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? undefined : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; + n = toInteger(n); + return function () { + if (--n < 1) { + return func.apply(this, arguments); + } + }; + } + + /** + * Creates a function that invokes `func`, with the `this` binding and arguments + * of the created function, while it's called less than `n` times. Subsequent + * calls to the created function return the result of the last `func` invocation. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {number} n The number of calls at which `func` is no longer invoked. + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * jQuery(element).on('click', _.before(5, addContactToList)); + * // => Allows adding up to 4 contacts to the list. + */ + function before(n, func) { + var result; + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + n = toInteger(n); + return function () { + if (--n > 0) { + result = func.apply(this, arguments); + } + if (n <= 1) { + func = undefined; + } + return result; + }; + } + + /** + * Creates a function that invokes `func` with the `this` binding of `thisArg` + * and `partials` prepended to the arguments it receives. + * + * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, + * may be used as a placeholder for partially applied arguments. + * + * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" + * property of bound functions. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to bind. + * @param {*} thisArg The `this` binding of `func`. + * @param {...*} [partials] The arguments to be partially applied. + * @returns {Function} Returns the new bound function. + * @example + * + * function greet(greeting, punctuation) { + * return greeting + ' ' + this.user + punctuation; + * } + * + * var object = { 'user': 'fred' }; + * + * var bound = _.bind(greet, object, 'hi'); + * bound('!'); + * // => 'hi fred!' + * + * // Bound with placeholders. + * var bound = _.bind(greet, object, _, '!'); + * bound('hi'); + * // => 'hi fred!' + */ + var bind = baseRest(function (func, thisArg, partials) { + var bitmask = WRAP_BIND_FLAG; + if (partials.length) { + var holders = replaceHolders(partials, getHolder(bind)); + bitmask |= WRAP_PARTIAL_FLAG; + } + return createWrap(func, bitmask, thisArg, partials, holders); }); - } - - /** - * Creates a `baseEach` or `baseEachRight` function. - * - * @private - * @param {Function} eachFunc The function to iterate over a collection. - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, - index = fromRight ? length : -1, - iterable = Object(collection); - - while ((fromRight ? index-- : ++index < length)) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - /** - * Creates a base function for methods like `_.forIn` and `_.forOwn`. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new base function. - */ - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, - iterable = Object(object), - props = keysFunc(object), - length = props.length; - - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the optional `this` - * binding of `thisArg`. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - /** - * Creates a function that produces an instance of `Ctor` regardless of - * whether it was invoked as part of a `new` expression or by `call` or `apply`. - * - * @private - * @param {Function} Ctor The constructor to wrap. - * @returns {Function} Returns the new wrapped function. - */ - function createCtor(Ctor) { - return function() { - // Use a `switch` statement to work with class constructors. See - // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist - // for more details. - var args = arguments; - switch (args.length) { - case 0: return new Ctor; - case 1: return new Ctor(args[0]); - case 2: return new Ctor(args[0], args[1]); - case 3: return new Ctor(args[0], args[1], args[2]); - case 4: return new Ctor(args[0], args[1], args[2], args[3]); - case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), - result = Ctor.apply(thisBinding, args); - - // Mimic the constructor's `return` behavior. - // See https://es5.github.io/#x13.2.2 for more details. - return isObject(result) ? result : thisBinding; - }; - } - - /** - * Creates a function that wraps `func` to enable currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {number} arity The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length, - placeholder = getHolder(wrapper); - - while (index--) { - args[index] = arguments[index]; - } - var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder) - ? [] - : replaceHolders(args, placeholder); - - length -= holders.length; - if (length < arity) { - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, undefined, - args, holders, undefined, undefined, arity - length); - } - var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - - /** - * Creates a `_.find` or `_.findLast` function. - * - * @private - * @param {Function} findIndexFunc The function to find the collection index. - * @returns {Function} Returns the new find function. - */ - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate, 3); - collection = keys(collection); - predicate = function(key) { return iteratee(iterable[key], key, iterable); }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined; - }; - } - - /** - * Creates a function that wraps `func` to invoke it with optional `this` - * binding of `thisArg`, partial application, and currying. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [partialsRight] The arguments to append to those provided - * to the new function. - * @param {Array} [holdersRight] The `partialsRight` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG, - isBind = bitmask & WRAP_BIND_FLAG, - isBindKey = bitmask & WRAP_BIND_KEY_FLAG, - isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), - isFlip = bitmask & WRAP_FLIP_FLAG, - Ctor = isBindKey ? undefined : createCtor(func); - - function wrapper() { - var length = arguments.length, - args = Array(length), - index = length; - - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), - holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry( - func, bitmask, createHybrid, wrapper.placeholder, thisArg, - args, newHolders, argPos, ary, arity - length - ); - } - var thisBinding = isBind ? thisArg : this, - fn = isBindKey ? thisBinding[func] : func; - - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - /** - * Creates a function like `_.invertBy`. - * - * @private - * @param {Function} setter The function to set accumulator values. - * @param {Function} toIteratee The function to resolve iteratees. - * @returns {Function} Returns the new inverter function. - */ - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - /** - * Creates a function that wraps `func` to invoke it with the `this` binding - * of `thisArg` and `partials` prepended to the arguments it receives. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {*} thisArg The `this` binding of `func`. - * @param {Array} partials The arguments to prepend to those provided to - * the new function. - * @returns {Function} Returns the new wrapped function. - */ - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG, - Ctor = createCtor(func); - - function wrapper() { - var argsIndex = -1, - argsLength = arguments.length, - leftIndex = -1, - leftLength = partials.length, - args = Array(leftLength + argsLength), - fn = (this && this !== root && this instanceof wrapper) ? Ctor : func; - - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - /** - * Creates a `_.range` or `_.rangeRight` function. - * - * @private - * @param {boolean} [fromRight] Specify iterating from right to left. - * @returns {Function} Returns the new range function. - */ - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != 'number' && isIterateeCall(start, end, step)) { - end = step = undefined; - } - // Ensure the sign of `-0` is preserved. - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === undefined ? (start < end ? 1 : -1) : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - /** - * Creates a function that wraps `func` to continue currying. - * - * @private - * @param {Function} func The function to wrap. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @param {Function} wrapFunc The function to create the `func` wrapper. - * @param {*} placeholder The placeholder value. - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to prepend to those provided to - * the new function. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG, - newHolders = isCurry ? holders : undefined, - newHoldersRight = isCurry ? undefined : holders, - newPartials = isCurry ? partials : undefined, - newPartialsRight = isCurry ? undefined : partials; - - bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG); - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG); - - if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) { - bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG); - } - var newData = [ - func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, - newHoldersRight, argPos, ary, arity - ]; - var result = wrapFunc.apply(undefined, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } - - /** - * Creates a set object of `values`. - * - * @private - * @param {Array} values The values to add to the set. - * @returns {Object} Returns the new set. - */ - var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) { - return new Set(values); - }; - - /** - * Creates a function that either curries or invokes `func` with optional - * `this` binding and partially applied arguments. - * - * @private - * @param {Function|string} func The function or method name to wrap. - * @param {number} bitmask The bitmask flags. - * 1 - `_.bind` - * 2 - `_.bindKey` - * 4 - `_.curry` or `_.curryRight` of a bound function - * 8 - `_.curry` - * 16 - `_.curryRight` - * 32 - `_.partial` - * 64 - `_.partialRight` - * 128 - `_.rearg` - * 256 - `_.ary` - * 512 - `_.flip` - * @param {*} [thisArg] The `this` binding of `func`. - * @param {Array} [partials] The arguments to be partially applied. - * @param {Array} [holders] The `partials` placeholder indexes. - * @param {Array} [argPos] The argument positions of the new function. - * @param {number} [ary] The arity cap of `func`. - * @param {number} [arity] The arity of `func`. - * @returns {Function} Returns the new wrapped function. - */ - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG; - if (!isBindKey && typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG); - partials = holders = undefined; - } - ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0); - arity = arity === undefined ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) { - var partialsRight = partials, - holdersRight = holders; - - partials = holders = undefined; - } - var data = isBindKey ? undefined : getData(func); - - var newData = [ - func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, - argPos, ary, arity - ]; + /** + * Creates a debounced function that delays invoking `func` until after `wait` + * milliseconds have elapsed since the last time the debounced function was + * invoked. The debounced function comes with a `cancel` method to cancel + * delayed `func` invocations and a `flush` method to immediately invoke them. + * Provide `options` to indicate whether `func` should be invoked on the + * leading and/or trailing edge of the `wait` timeout. The `func` is invoked + * with the last arguments provided to the debounced function. Subsequent + * calls to the debounced function return the result of the last `func` + * invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the debounced function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.debounce` and `_.throttle`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to debounce. + * @param {number} [wait=0] The number of milliseconds to delay. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=false] + * Specify invoking on the leading edge of the timeout. + * @param {number} [options.maxWait] + * The maximum time `func` is allowed to be delayed before it's invoked. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new debounced function. + * @example + * + * // Avoid costly calculations while the window size is in flux. + * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); + * + * // Invoke `sendMail` when clicked, debouncing subsequent calls. + * jQuery(element).on('click', _.debounce(sendMail, 300, { + * 'leading': true, + * 'trailing': false + * })); + * + * // Ensure `batchLog` is invoked once after 1 second of debounced calls. + * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); + * var source = new EventSource('/stream'); + * jQuery(source).on('message', debounced); + * + * // Cancel the trailing debounced invocation. + * jQuery(window).on('popstate', debounced.cancel); + */ + function debounce(func, wait, options) { + var lastArgs, + lastThis, + maxWait, + result, + timerId, + lastCallTime, + lastInvokeTime = 0, + leading = false, + maxing = false, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + wait = toNumber(wait) || 0; + if (isObject(options)) { + leading = !!options.leading; + maxing = 'maxWait' in options; + maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === undefined - ? (isBindKey ? 0 : func.length) - : nativeMax(newData[9] - length, 0); - - if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) { - bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(undefined, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } - - /** - * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source - * objects into destination objects that are passed thru. - * - * @private - * @param {*} objValue The destination value. - * @param {*} srcValue The source value. - * @param {string} key The key of the property to merge. - * @param {Object} object The parent object of `objValue`. - * @param {Object} source The parent object of `srcValue`. - * @param {Object} [stack] Tracks traversed source values and their merged - * counterparts. - * @returns {*} Returns the value to assign. - */ - function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - // Recursively merge objects and arrays (susceptible to call stack limits). - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack); - stack['delete'](srcValue); - } - return objValue; - } - - /** - * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain - * objects. - * - * @private - * @param {*} value The value to inspect. - * @param {string} key The key of the property to inspect. - * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`. - */ - function customOmitClone(value) { - return isPlainObject(value) ? undefined : value; - } - - /** - * A specialized version of `baseIsEqualDeep` for arrays with support for - * partial deep comparisons. - * - * @private - * @param {Array} array The array to compare. - * @param {Array} other The other array to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `array` and `other` objects. - * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`. - */ - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - arrLength = array.length, - othLength = other.length; - - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - // Assume cyclic values are equal. - var stacked = stack.get(array); - if (stacked && stack.get(other)) { - return stacked == other; - } - var index = -1, - result = true, - seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined; - - stack.set(array, other); - stack.set(other, array); - - // Ignore non-index properties. - while (++index < arrLength) { - var arrValue = array[index], - othValue = other[index]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, arrValue, index, other, array, stack) - : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== undefined) { - if (compared) { - continue; - } - result = false; - break; - } - // Recursively compare arrays (susceptible to call stack limits). - if (seen) { - if (!arraySome(other, function(othValue, othIndex) { - if (!cacheHas(seen, othIndex) && - (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!( - arrValue === othValue || - equalFunc(arrValue, othValue, bitmask, customizer, stack) - )) { - result = false; - break; - } - } - stack['delete'](array); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseIsEqualDeep` for comparing objects of - * the same `toStringTag`. - * - * **Note:** This function only supports comparing values with tags of - * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {string} tag The `toStringTag` of the objects to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if ((object.byteLength != other.byteLength) || - (object.byteOffset != other.byteOffset)) { - return false; - } - object = object.buffer; - other = other.buffer; - - case arrayBufferTag: - if ((object.byteLength != other.byteLength) || - !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; + function invokeFunc(time) { + var args = lastArgs, + thisArg = lastThis; + + lastArgs = lastThis = undefined; + lastInvokeTime = time; + result = func.apply(thisArg, args); + return result; } - return true; - case boolTag: - case dateTag: - case numberTag: - // Coerce booleans to `1` or `0` and dates to milliseconds. - // Invalid dates are coerced to `NaN`. - return eq(+object, +other); + function leadingEdge(time) { + // Reset any `maxWait` timer. + lastInvokeTime = time; + // Start the timer for the trailing edge. + timerId = setTimeout(timerExpired, wait); + // Invoke the leading edge. + return leading ? invokeFunc(time) : result; + } - case errorTag: - return object.name == other.name && object.message == other.message; + function remainingWait(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime, + timeWaiting = wait - timeSinceLastCall; - case regexpTag: - case stringTag: - // Coerce regexes to strings and treat strings, primitives and objects, - // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring - // for more details. - return object == (other + ''); + return maxing + ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) + : timeWaiting; + } - case mapTag: - var convert = mapToArray; + function shouldInvoke(time) { + var timeSinceLastCall = time - lastCallTime, + timeSinceLastInvoke = time - lastInvokeTime; - case setTag: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG; - convert || (convert = setToArray); + // Either this is the first call, activity has stopped and we're at the + // trailing edge, the system time has gone backwards and we're treating + // it as the trailing edge, or we've hit the `maxWait` limit. + return (lastCallTime === undefined || (timeSinceLastCall >= wait) || + (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); + } - if (object.size != other.size && !isPartial) { - return false; + function timerExpired() { + var time = now(); + if (shouldInvoke(time)) { + return trailingEdge(time); + } + // Restart the timer. + timerId = setTimeout(timerExpired, remainingWait(time)); } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked) { - return stacked == other; + + function trailingEdge(time) { + timerId = undefined; + + // Only invoke if we have `lastArgs` which means `func` has been + // debounced at least once. + if (trailing && lastArgs) { + return invokeFunc(time); + } + lastArgs = lastThis = undefined; + return result; } - bitmask |= COMPARE_UNORDERED_FLAG; - // Recursively compare objects (susceptible to call stack limits). - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack['delete'](object); - return result; + function cancel() { + if (timerId !== undefined) { + clearTimeout(timerId); + } + lastInvokeTime = 0; + lastArgs = lastCallTime = lastThis = timerId = undefined; + } - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - /** - * A specialized version of `baseIsEqualDeep` for objects with support for - * partial deep comparisons. - * - * @private - * @param {Object} object The object to compare. - * @param {Object} other The other object to compare. - * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details. - * @param {Function} customizer The function to customize comparisons. - * @param {Function} equalFunc The function to determine equivalents of values. - * @param {Object} stack Tracks traversed `object` and `other` objects. - * @returns {boolean} Returns `true` if the objects are equivalent, else `false`. - */ - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG, - objProps = getAllKeys(object), - objLength = objProps.length, - othProps = getAllKeys(other), - othLength = othProps.length; - - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) { - return false; - } - } - // Assume cyclic values are equal. - var stacked = stack.get(object); - if (stacked && stack.get(other)) { - return stacked == other; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], - othValue = other[key]; - - if (customizer) { - var compared = isPartial - ? customizer(othValue, objValue, key, other, object, stack) - : customizer(objValue, othValue, key, object, other, stack); - } - // Recursively compare objects (susceptible to call stack limits). - if (!(compared === undefined - ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack)) - : compared - )) { - result = false; - break; - } - skipCtor || (skipCtor = key == 'constructor'); - } - if (result && !skipCtor) { - var objCtor = object.constructor, - othCtor = other.constructor; - - // Non `Object` object instances with different constructors are not equal. - if (objCtor != othCtor && - ('constructor' in object && 'constructor' in other) && - !(typeof objCtor == 'function' && objCtor instanceof objCtor && - typeof othCtor == 'function' && othCtor instanceof othCtor)) { - result = false; - } - } - stack['delete'](object); - stack['delete'](other); - return result; - } - - /** - * A specialized version of `baseRest` which flattens the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @returns {Function} Returns the new function. - */ - function flatRest(func) { - return setToString(overRest(func, undefined, flatten), func + ''); - } - - /** - * Creates an array of own enumerable property names and symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - /** - * Creates an array of own and inherited enumerable property names and - * symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names and symbols. - */ - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - /** - * Gets metadata for `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {*} Returns the metadata for `func`. - */ - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - /** - * Gets the name of `func`. - * - * @private - * @param {Function} func The function to query. - * @returns {string} Returns the function name. - */ - function getFuncName(func) { - var result = (func.name + ''), - array = realNames[result], - length = hasOwnProperty.call(realNames, result) ? array.length : 0; - - while (length--) { - var data = array[length], - otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - /** - * Gets the argument placeholder value for `func`. - * - * @private - * @param {Function} func The function to inspect. - * @returns {*} Returns the placeholder value. - */ - function getHolder(func) { - var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func; - return object.placeholder; - } - - /** - * Gets the data for `map`. - * - * @private - * @param {Object} map The map to query. - * @param {string} key The reference key. - * @returns {*} Returns the map data. - */ - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) - ? data[typeof key == 'string' ? 'string' : 'hash'] - : data.map; - } - - /** - * Gets the property names, values, and compare flags of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the match data of `object`. - */ - function getMatchData(object) { - var result = keys(object), - length = result.length; - - while (length--) { - var key = result[length], - value = object[key]; - - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - /** - * Gets the native function at `key` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {string} key The key of the method to get. - * @returns {*} Returns the function if it's native, else `undefined`. - */ - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : undefined; - } - - /** - * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the raw `toStringTag`. - */ - function getRawTag(value) { - var isOwn = hasOwnProperty.call(value, symToStringTag), - tag = value[symToStringTag]; - - try { - value[symToStringTag] = undefined; - var unmasked = true; - } catch (e) {} - - var result = nativeObjectToString.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag] = tag; - } else { - delete value[symToStringTag]; - } - } - return result; - } - - /** - * Creates an array of the own enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbols = !nativeGetSymbols ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); + function flush() { + return timerId === undefined ? result : trailingEdge(now()); + } + + function debounced() { + var time = now(), + isInvoking = shouldInvoke(time); + + lastArgs = arguments; + lastThis = this; + lastCallTime = time; + + if (isInvoking) { + if (timerId === undefined) { + return leadingEdge(lastCallTime); + } + if (maxing) { + // Handle invocations in a tight loop. + timerId = setTimeout(timerExpired, wait); + return invokeFunc(lastCallTime); + } + } + if (timerId === undefined) { + timerId = setTimeout(timerExpired, wait); + } + return result; + } + + debounced.cancel = cancel; + debounced.flush = flush; + return debounced; + } + + /** + * Defers invoking the `func` until the current call stack has cleared. Any + * additional arguments are provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to defer. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.defer(function(text) { + * console.log(text); + * }, 'deferred'); + * // => Logs 'deferred' after one millisecond. + */ + var defer = baseRest(function (func, args) { + return baseDelay(func, 1, args); }); - }; - - /** - * Creates an array of the own and inherited enumerable symbols of `object`. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of symbols. - */ - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - /** - * Gets the `toStringTag` of `value`. - * - * @private - * @param {*} value The value to query. - * @returns {string} Returns the `toStringTag`. - */ - var getTag = baseGetTag; - - // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6. - if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) || - (Map && getTag(new Map) != mapTag) || - (Promise && getTag(Promise.resolve()) != promiseTag) || - (Set && getTag(new Set) != setTag) || - (WeakMap && getTag(new WeakMap) != weakMapTag)) { - getTag = function(value) { - var result = baseGetTag(value), - Ctor = result == objectTag ? value.constructor : undefined, - ctorString = Ctor ? toSource(Ctor) : ''; - - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: return dataViewTag; - case mapCtorString: return mapTag; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag; - case weakMapCtorString: return weakMapTag; - } - } - return result; - }; - } - - /** - * Gets the view, applying any `transforms` to the `start` and `end` positions. - * - * @private - * @param {number} start The start of the view. - * @param {number} end The end of the view. - * @param {Array} transforms The transformations to apply to the view. - * @returns {Object} Returns an object containing the `start` and `end` - * positions of the view. - */ - function getView(start, end, transforms) { - var index = -1, - length = transforms.length; - - while (++index < length) { - var data = transforms[index], - size = data.size; - - switch (data.type) { - case 'drop': start += size; break; - case 'dropRight': end -= size; break; - case 'take': end = nativeMin(end, start + size); break; - case 'takeRight': start = nativeMax(start, end - size); break; - } - } - return { 'start': start, 'end': end }; - } - - /** - * Extracts wrapper details from the `source` body comment. - * - * @private - * @param {string} source The source to inspect. - * @returns {Array} Returns the wrapper details. - */ - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - - /** - * Checks if `path` exists on `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @param {Function} hasFunc The function to check properties. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - */ - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - - var index = -1, - length = path.length, - result = false; - - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && - (isArray(object) || isArguments(object)); - } - - /** - * Initializes an array clone. - * - * @private - * @param {Array} array The array to clone. - * @returns {Array} Returns the initialized clone. - */ - function initCloneArray(array) { - var length = array.length, - result = new array.constructor(length); - - // Add properties assigned by `RegExp#exec`. - if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - /** - * Initializes an object clone. - * - * @private - * @param {Object} object The object to clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneObject(object) { - return (typeof object.constructor == 'function' && !isPrototype(object)) - ? baseCreate(getPrototype(object)) - : {}; - } - - /** - * Initializes an object clone based on its `toStringTag`. - * - * **Note:** This function only supports cloning values with tags of - * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`. - * - * @private - * @param {Object} object The object to clone. - * @param {string} tag The `toStringTag` of the object to clone. - * @param {boolean} [isDeep] Specify a deep clone. - * @returns {Object} Returns the initialized clone. - */ - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag: - return cloneArrayBuffer(object); - - case boolTag: - case dateTag: - return new Ctor(+object); - - case dataViewTag: - return cloneDataView(object, isDeep); - - case float32Tag: case float64Tag: - case int8Tag: case int16Tag: case int32Tag: - case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag: - return cloneTypedArray(object, isDeep); - - case mapTag: - return new Ctor; - - case numberTag: - case stringTag: - return new Ctor(object); - - case regexpTag: - return cloneRegExp(object); - - case setTag: - return new Ctor; - - case symbolTag: - return cloneSymbol(object); - } - } - - /** - * Inserts wrapper `details` in a comment at the top of the `source` body. - * - * @private - * @param {string} source The source to modify. - * @returns {Array} details The details to insert. - * @returns {string} Returns the modified source. - */ - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex]; - details = details.join(length > 2 ? ', ' : ' '); - return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n'); - } - - /** - * Checks if `value` is a flattenable `arguments` object or array. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is flattenable, else `false`. - */ - function isFlattenable(value) { - return isArray(value) || isArguments(value) || - !!(spreadableSymbol && value && value[spreadableSymbol]); - } - - /** - * Checks if `value` is a valid array-like index. - * - * @private - * @param {*} value The value to check. - * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index. - * @returns {boolean} Returns `true` if `value` is a valid index, else `false`. - */ - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER : length; - - return !!length && - (type == 'number' || - (type != 'symbol' && reIsUint.test(value))) && - (value > -1 && value % 1 == 0 && value < length); - } - - /** - * Checks if the given arguments are from an iteratee call. - * - * @private - * @param {*} value The potential iteratee value argument. - * @param {*} index The potential iteratee index or key argument. - * @param {*} object The potential iteratee object argument. - * @returns {boolean} Returns `true` if the arguments are from an iteratee call, - * else `false`. - */ - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == 'number' - ? (isArrayLike(object) && isIndex(index, object.length)) - : (type == 'string' && index in object) - ) { - return eq(object[index], value); - } - return false; - } - - /** - * Checks if `value` is a property name and not a property path. - * - * @private - * @param {*} value The value to check. - * @param {Object} [object] The object to query keys on. - * @returns {boolean} Returns `true` if `value` is a property name, else `false`. - */ - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == 'number' || type == 'symbol' || type == 'boolean' || - value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || - (object != null && value in Object(object)); - } - - /** - * Checks if `value` is suitable for use as unique object key. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is suitable, else `false`. - */ - function isKeyable(value) { - var type = typeof value; - return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean') - ? (value !== '__proto__') - : (value === null); - } - - /** - * Checks if `func` has a lazy counterpart. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` has a lazy counterpart, - * else `false`. - */ - function isLaziable(func) { - var funcName = getFuncName(func), - other = lodash[funcName]; - - if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - /** - * Checks if `func` has its source masked. - * - * @private - * @param {Function} func The function to check. - * @returns {boolean} Returns `true` if `func` is masked, else `false`. - */ - function isMasked(func) { - return !!maskSrcKey && (maskSrcKey in func); - } - - /** - * Checks if `value` is likely a prototype object. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a prototype, else `false`. - */ - function isPrototype(value) { - var Ctor = value && value.constructor, - proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto; - - return value === proto; - } - - /** - * Checks if `value` is suitable for strict equality comparisons, i.e. `===`. - * - * @private - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` if suitable for strict - * equality comparisons, else `false`. - */ - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - /** - * A specialized version of `matchesProperty` for source values suitable - * for strict equality comparisons, i.e. `===`. - * - * @private - * @param {string} key The key of the property to get. - * @param {*} srcValue The value to match. - * @returns {Function} Returns the new spec function. - */ - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && - (srcValue !== undefined || (key in Object(object))); - }; - } - - /** - * A specialized version of `_.memoize` which clears the memoized function's - * cache when it exceeds `MAX_MEMOIZE_SIZE`. - * - * @private - * @param {Function} func The function to have its output memoized. - * @returns {Function} Returns the new memoized function. - */ - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; + + /** + * Invokes `func` after `wait` milliseconds. Any additional arguments are + * provided to `func` when it's invoked. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to delay. + * @param {number} wait The number of milliseconds to delay invocation. + * @param {...*} [args] The arguments to invoke `func` with. + * @returns {number} Returns the timer id. + * @example + * + * _.delay(function(text) { + * console.log(text); + * }, 1000, 'later'); + * // => Logs 'later' after one second. + */ + var delay = baseRest(function (func, wait, args) { + return baseDelay(func, toNumber(wait) || 0, args); }); - var cache = result.cache; - return result; - } - - /** - * Merges the function metadata of `source` into `data`. - * - * Merging metadata reduces the number of wrappers used to invoke a function. - * This is possible because methods like `_.bind`, `_.curry`, and `_.partial` - * may be applied regardless of execution order. Methods like `_.ary` and - * `_.rearg` modify function arguments, making the order in which they are - * executed important, preventing the merging of metadata. However, we make - * an exception for a safe combined case where curried functions have `_.ary` - * and or `_.rearg` applied. - * - * @private - * @param {Array} data The destination metadata. - * @param {Array} source The source metadata. - * @returns {Array} Returns `data`. - */ - function mergeData(data, source) { - var bitmask = data[1], - srcBitmask = source[1], - newBitmask = bitmask | srcBitmask, - isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG); - - var isCombo = - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) || - ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) || - ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG)); - - // Exit early if metadata can't be merged. - if (!(isCommon || isCombo)) { - return data; - } - // Use source `thisArg` if available. - if (srcBitmask & WRAP_BIND_FLAG) { - data[2] = source[2]; - // Set when currying a bound function. - newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG; - } - // Compose partial arguments. - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - // Compose partial right arguments. - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - // Use source `argPos` if available. - value = source[7]; - if (value) { - data[7] = value; - } - // Use source `ary` if it's smaller. - if (srcBitmask & WRAP_ARY_FLAG) { - data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]); - } - // Use source `arity` if one is not provided. - if (data[9] == null) { - data[9] = source[9]; - } - // Use source `func` and merge bitmasks. - data[0] = source[0]; - data[1] = newBitmask; - - return data; - } - - /** - * This function is like - * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * except that it includes inherited enumerable properties. - * - * @private - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - */ - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - /** - * Converts `value` to a string using `Object.prototype.toString`. - * - * @private - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - */ - function objectToString(value) { - return nativeObjectToString.call(value); - } - - /** - * A specialized version of `baseRest` which transforms the rest array. - * - * @private - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @param {Function} transform The rest array transform. - * @returns {Function} Returns the new function. - */ - function overRest(func, start, transform) { - start = nativeMax(start === undefined ? (func.length - 1) : start, 0); - return function() { - var args = arguments, - index = -1, - length = nativeMax(args.length - start, 0), - array = Array(length); - - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - /** - * Gets the parent value at `path` of `object`. - * - * @private - * @param {Object} object The object to query. - * @param {Array} path The path to get the parent value of. - * @returns {*} Returns the parent value. - */ - function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - - /** - * Reorder `array` according to the specified indexes where the element at - * the first index is assigned as the first element, the element at - * the second index is assigned as the second element, and so on. - * - * @private - * @param {Array} array The array to reorder. - * @param {Array} indexes The arranged array indexes. - * @returns {Array} Returns `array`. - */ - function reorder(array, indexes) { - var arrLength = array.length, - length = nativeMin(indexes.length, arrLength), - oldArray = copyArray(array); - - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined; - } - return array; - } - - /** - * Sets metadata for `func`. - * - * **Note:** If this function becomes hot, i.e. is invoked a lot in a short - * period of time, it will trip its breaker and transition to an identity - * function to avoid garbage collection pauses in V8. See - * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070) - * for more details. - * - * @private - * @param {Function} func The function to associate metadata with. - * @param {*} data The metadata. - * @returns {Function} Returns `func`. - */ - var setData = shortOut(baseSetData); - - /** - * Sets the `toString` method of `func` to return `string`. - * - * @private - * @param {Function} func The function to modify. - * @param {Function} string The `toString` result. - * @returns {Function} Returns `func`. - */ - var setToString = shortOut(baseSetToString); - - /** - * Sets the `toString` method of `wrapper` to mimic the source of `reference` - * with wrapper details in a comment at the top of the source body. - * - * @private - * @param {Function} wrapper The function to modify. - * @param {Function} reference The reference function. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Function} Returns `wrapper`. - */ - function setWrapToString(wrapper, reference, bitmask) { - var source = (reference + ''); - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - - /** - * Creates a function that'll short out and invoke `identity` instead - * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN` - * milliseconds. - * - * @private - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new shortable function. - */ - function shortOut(func) { - var count = 0, - lastCalled = 0; - - return function() { - var stamp = nativeNow(), - remaining = HOT_SPAN - (stamp - lastCalled); - - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(undefined, arguments); + /** + * Creates a function that memoizes the result of `func`. If `resolver` is + * provided, it determines the cache key for storing the result based on the + * arguments provided to the memoized function. By default, the first argument + * provided to the memoized function is used as the map cache key. The `func` + * is invoked with the `this` binding of the memoized function. + * + * **Note:** The cache is exposed as the `cache` property on the memoized + * function. Its creation may be customized by replacing the `_.memoize.Cache` + * constructor with one whose instances implement the + * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) + * method interface of `clear`, `delete`, `get`, `has`, and `set`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to have its output memoized. + * @param {Function} [resolver] The function to resolve the cache key. + * @returns {Function} Returns the new memoized function. + * @example + * + * var object = { 'a': 1, 'b': 2 }; + * var other = { 'c': 3, 'd': 4 }; + * + * var values = _.memoize(_.values); + * values(object); + * // => [1, 2] + * + * values(other); + * // => [3, 4] + * + * object.a = 2; + * values(object); + * // => [1, 2] + * + * // Modify the result cache. + * values.cache.set(object, ['a', 'b']); + * values(object); + * // => ['a', 'b'] + * + * // Replace `_.memoize.Cache`. + * _.memoize.Cache = WeakMap; + */ + function memoize(func, resolver) { + if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { + throw new TypeError(FUNC_ERROR_TEXT); + } + var memoized = function () { + var args = arguments, + key = resolver ? resolver.apply(this, args) : args[0], + cache = memoized.cache; + + if (cache.has(key)) { + return cache.get(key); + } + var result = func.apply(this, args); + memoized.cache = cache.set(key, result) || cache; + return result; + }; + memoized.cache = new (memoize.Cache || MapCache); + return memoized; + } + + // Expose `MapCache`. + memoize.Cache = MapCache; + + /** + * Creates a function that negates the result of the predicate `func`. The + * `func` predicate is invoked with the `this` binding and arguments of the + * created function. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Function + * @param {Function} predicate The predicate to negate. + * @returns {Function} Returns the new negated function. + * @example + * + * function isEven(n) { + * return n % 2 == 0; + * } + * + * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); + * // => [1, 3, 5] + */ + function negate(predicate) { + if (typeof predicate != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + return function () { + var args = arguments; + switch (args.length) { + case 0: + return !predicate.call(this); + case 1: + return !predicate.call(this, args[0]); + case 2: + return !predicate.call(this, args[0], args[1]); + case 3: + return !predicate.call(this, args[0], args[1], args[2]); + } + return !predicate.apply(this, args); + }; + } + + /** + * Creates a function that is restricted to invoking `func` once. Repeat calls + * to the function return the value of the first invocation. The `func` is + * invoked with the `this` binding and arguments of the created function. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to restrict. + * @returns {Function} Returns the new restricted function. + * @example + * + * var initialize = _.once(createApplication); + * initialize(); + * initialize(); + * // => `createApplication` is invoked once + */ + function once(func) { + return before(2, func); + } + + /** + * Creates a function that invokes `func` with the `this` binding of the + * created function and arguments from `start` and beyond provided as + * an array. + * + * **Note:** This method is based on the + * [rest parameter](https://mdn.io/rest_parameters). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Function + * @param {Function} func The function to apply a rest parameter to. + * @param {number} [start=func.length-1] The start position of the rest parameter. + * @returns {Function} Returns the new function. + * @example + * + * var say = _.rest(function(what, names) { + * return what + ' ' + _.initial(names).join(', ') + + * (_.size(names) > 1 ? ', & ' : '') + _.last(names); + * }); + * + * say('hello', 'fred', 'barney', 'pebbles'); + * // => 'hello fred, barney, & pebbles' + */ + function rest(func, start) { + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + start = start === undefined ? start : toInteger(start); + return baseRest(func, start); + } + + /** + * Creates a throttled function that only invokes `func` at most once per + * every `wait` milliseconds. The throttled function comes with a `cancel` + * method to cancel delayed `func` invocations and a `flush` method to + * immediately invoke them. Provide `options` to indicate whether `func` + * should be invoked on the leading and/or trailing edge of the `wait` + * timeout. The `func` is invoked with the last arguments provided to the + * throttled function. Subsequent calls to the throttled function return the + * result of the last `func` invocation. + * + * **Note:** If `leading` and `trailing` options are `true`, `func` is + * invoked on the trailing edge of the timeout only if the throttled function + * is invoked more than once during the `wait` timeout. + * + * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred + * until to the next tick, similar to `setTimeout` with a timeout of `0`. + * + * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) + * for details over the differences between `_.throttle` and `_.debounce`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Function + * @param {Function} func The function to throttle. + * @param {number} [wait=0] The number of milliseconds to throttle invocations to. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.leading=true] + * Specify invoking on the leading edge of the timeout. + * @param {boolean} [options.trailing=true] + * Specify invoking on the trailing edge of the timeout. + * @returns {Function} Returns the new throttled function. + * @example + * + * // Avoid excessively updating the position while scrolling. + * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); + * + * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. + * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); + * jQuery(element).on('click', throttled); + * + * // Cancel the trailing throttled invocation. + * jQuery(window).on('popstate', throttled.cancel); + */ + function throttle(func, wait, options) { + var leading = true, + trailing = true; + + if (typeof func != 'function') { + throw new TypeError(FUNC_ERROR_TEXT); + } + if (isObject(options)) { + leading = 'leading' in options ? !!options.leading : leading; + trailing = 'trailing' in options ? !!options.trailing : trailing; + } + return debounce(func, wait, { + 'leading': leading, + 'maxWait': wait, + 'trailing': trailing + }); + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a shallow clone of `value`. + * + * **Note:** This method is loosely based on the + * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) + * and supports cloning arrays, array buffers, booleans, date objects, maps, + * numbers, `Object` objects, regexes, sets, strings, symbols, and typed + * arrays. The own enumerable properties of `arguments` objects are cloned + * as plain objects. An empty object is returned for uncloneable values such + * as error objects, functions, DOM nodes, and WeakMaps. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to clone. + * @returns {*} Returns the cloned value. + * @see _.cloneDeep + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var shallow = _.clone(objects); + * console.log(shallow[0] === objects[0]); + * // => true + */ + function clone(value) { + return baseClone(value, CLONE_SYMBOLS_FLAG); + } + + /** + * This method is like `_.clone` except that it recursively clones `value`. + * + * @static + * @memberOf _ + * @since 1.0.0 + * @category Lang + * @param {*} value The value to recursively clone. + * @returns {*} Returns the deep cloned value. + * @see _.clone + * @example + * + * var objects = [{ 'a': 1 }, { 'b': 2 }]; + * + * var deep = _.cloneDeep(objects); + * console.log(deep[0] === objects[0]); + * // => false + */ + function cloneDeep(value) { + return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); + } + + /** + * Performs a + * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) + * comparison between two values to determine if they are equivalent. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.eq(object, object); + * // => true + * + * _.eq(object, other); + * // => false + * + * _.eq('a', 'a'); + * // => true + * + * _.eq('a', Object('a')); + * // => false + * + * _.eq(NaN, NaN); + * // => true + */ + function eq(value, other) { + return value === other || (value !== value && other !== other); + } + + /** + * Checks if `value` is likely an `arguments` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an `arguments` object, + * else `false`. + * @example + * + * _.isArguments(function() { return arguments; }()); + * // => true + * + * _.isArguments([1, 2, 3]); + * // => false + */ + var isArguments = baseIsArguments(function () { + return arguments; + }()) ? baseIsArguments : function (value) { + return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && + !propertyIsEnumerable.call(value, 'callee'); }; - } - - /** - * Converts `string` to a property path array. - * - * @private - * @param {string} string The string to convert. - * @returns {Array} Returns the property path array. - */ - var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46 /* . */) { - result.push(''); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match)); - }); - return result; - }); - - /** - * Converts `value` to a string key if it's not a string or symbol. - * - * @private - * @param {*} value The value to inspect. - * @returns {string|symbol} Returns the key. - */ - function toKey(value) { - if (typeof value == 'string' || isSymbol(value)) { - return value; - } - var result = (value + ''); - return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result; - } - - /** - * Converts `func` to its source code. - * - * @private - * @param {Function} func The function to convert. - * @returns {string} Returns the source code. - */ - function toSource(func) { - if (func != null) { - try { - return funcToString.call(func); - } catch (e) {} - try { - return (func + ''); - } catch (e) {} - } - return ''; - } - - /** - * Updates wrapper `details` based on `bitmask` flags. - * - * @private - * @returns {Array} details The details to modify. - * @param {number} bitmask The bitmask flags. See `createWrap` for more details. - * @returns {Array} Returns `details`. - */ - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = '_.' + pair[0]; - if ((bitmask & pair[1]) && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - - /** - * Creates a clone of `wrapper`. - * - * @private - * @param {Object} wrapper The wrapper to clone. - * @returns {Object} Returns the cloned wrapper. - */ - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an array with all falsey values removed. The values `false`, `null`, - * `0`, `""`, `undefined`, and `NaN` are falsey. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to compact. - * @returns {Array} Returns the new array of filtered values. - * @example - * - * _.compact([0, 1, false, 2, '', 3]); - * // => [1, 2, 3] - */ - function compact(array) { - var index = -1, - length = array == null ? 0 : array.length, - resIndex = 0, - result = []; - - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - /** - * Creates a new array concatenating `array` with any additional arrays - * and/or values. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to concatenate. - * @param {...*} [values] The values to concatenate. - * @returns {Array} Returns the new concatenated array. - * @example - * - * var array = [1]; - * var other = _.concat(array, 2, [3], [[4]]); - * - * console.log(other); - * // => [1, 2, 3, [4]] - * - * console.log(array); - * // => [1] - */ - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), - array = arguments[0], - index = length; - - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - /** - * Creates an array of `array` values not included in the other given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * **Note:** Unlike `_.pullAll`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...Array} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.without, _.xor - * @example - * - * _.difference([2, 1], [2, 3]); - * // => [1] - */ - var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) - : []; - }); - - /** - * Creates a slice of `array` with `n` elements dropped from the beginning. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to drop. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.drop([1, 2, 3]); - * // => [2, 3] - * - * _.drop([1, 2, 3], 2); - * // => [3] - * - * _.drop([1, 2, 3], 5); - * // => [] - * - * _.drop([1, 2, 3], 0); - * // => [1, 2, 3] - */ - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * This method is like `_.find` except that it returns the index of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': false }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': true } - * ]; - * - * _.findIndex(users, function(o) { return o.user == 'barney'; }); - * // => 0 - * - * // The `_.matches` iteratee shorthand. - * _.findIndex(users, { 'user': 'fred', 'active': false }); - * // => 1 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findIndex(users, ['active', false]); - * // => 0 - * - * // The `_.property` iteratee shorthand. - * _.findIndex(users, 'active'); - * // => 2 - */ - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index); - } - - /** - * This method is like `_.findIndex` except that it iterates over elements - * of `collection` from right to left. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=array.length-1] The index to search from. - * @returns {number} Returns the index of the found element, else `-1`. - * @example - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false }, - * { 'user': 'pebbles', 'active': false } - * ]; - * - * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; }); - * // => 2 - * - * // The `_.matches` iteratee shorthand. - * _.findLastIndex(users, { 'user': 'barney', 'active': true }); - * // => 0 - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastIndex(users, ['active', false]); - * // => 2 - * - * // The `_.property` iteratee shorthand. - * _.findLastIndex(users, 'active'); - * // => 0 - */ - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== undefined) { - index = toInteger(fromIndex); - index = fromIndex < 0 - ? nativeMax(length + index, 0) - : nativeMin(index, length - 1); - } - return baseFindIndex(array, baseIteratee(predicate, 3), index, true); - } - - /** - * Flattens `array` a single level deep. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flatten([1, [2, [3, [4]], 5]]); - * // => [1, 2, [3, [4]], 5] - */ - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - - /** - * Recursively flattens `array`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to flatten. - * @returns {Array} Returns the new flattened array. - * @example - * - * _.flattenDeep([1, [2, [3, [4]], 5]]); - * // => [1, 2, 3, 4, 5] - */ - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY) : []; - } - - /** - * Gets the first element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias first - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the first element of `array`. - * @example - * - * _.head([1, 2, 3]); - * // => 1 - * - * _.head([]); - * // => undefined - */ - function head(array) { - return (array && array.length) ? array[0] : undefined; - } - - /** - * Gets the index at which the first occurrence of `value` is found in `array` - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. If `fromIndex` is negative, it's used as the - * offset from the end of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {*} value The value to search for. - * @param {number} [fromIndex=0] The index to search from. - * @returns {number} Returns the index of the matched value, else `-1`. - * @example - * - * _.indexOf([1, 2, 1, 2], 2); - * // => 1 - * - * // Search from the `fromIndex`. - * _.indexOf([1, 2, 1, 2], 2, 2); - * // => 3 - */ - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - /** - * Gets all but the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.initial([1, 2, 3]); - * // => [1, 2] - */ - function initial(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; - } - - /** - * Creates an array of unique values that are included in all given arrays - * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. The order and references of result values are - * determined by the first array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of intersecting values. - * @example - * - * _.intersection([2, 1], [2, 3]); - * // => [2] - */ - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return (mapped.length && mapped[0] === arrays[0]) - ? baseIntersection(mapped) - : []; - }); - - /** - * Gets the last element of `array`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @returns {*} Returns the last element of `array`. - * @example - * - * _.last([1, 2, 3]); - * // => 3 - */ - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : undefined; - } - - /** - * Reverses `array` so that the first element becomes the last, the second - * element becomes the second to last, and so on. - * - * **Note:** This method mutates `array` and is based on - * [`Array#reverse`](https://mdn.io/Array/reverse). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to modify. - * @returns {Array} Returns `array`. - * @example - * - * var array = [1, 2, 3]; - * - * _.reverse(array); - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } - - /** - * Creates a slice of `array` from `start` up to, but not including, `end`. - * - * **Note:** This method is used instead of - * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are - * returned. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to slice. - * @param {number} [start=0] The start position. - * @param {number} [end=array.length] The end position. - * @returns {Array} Returns the slice of `array`. - */ - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (end && typeof end != 'number' && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } - else { - start = start == null ? 0 : toInteger(start); - end = end === undefined ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - /** - * Creates a slice of `array` with `n` elements taken from the beginning. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.take([1, 2, 3]); - * // => [1] - * - * _.take([1, 2, 3], 2); - * // => [1, 2] - * - * _.take([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.take([1, 2, 3], 0); - * // => [] - */ - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - /** - * Creates a slice of `array` with `n` elements taken from the end. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Array - * @param {Array} array The array to query. - * @param {number} [n=1] The number of elements to take. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Array} Returns the slice of `array`. - * @example - * - * _.takeRight([1, 2, 3]); - * // => [3] - * - * _.takeRight([1, 2, 3], 2); - * // => [2, 3] - * - * _.takeRight([1, 2, 3], 5); - * // => [1, 2, 3] - * - * _.takeRight([1, 2, 3], 0); - * // => [] - */ - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = (guard || n === undefined) ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - /** - * Creates an array of unique values, in order, from all given arrays using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to inspect. - * @returns {Array} Returns the new array of combined values. - * @example - * - * _.union([2], [1, 2]); - * // => [2, 1] - */ - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - /** - * Creates a duplicate-free version of an array, using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons, in which only the first occurrence of each element - * is kept. The order of result values is determined by the order they occur - * in the array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniq([2, 1, 2]); - * // => [2, 1] - */ - function uniq(array) { - return (array && array.length) ? baseUniq(array) : []; - } - - /** - * This method is like `_.uniq` except that it accepts `iteratee` which is - * invoked for each element in `array` to generate the criterion by which - * uniqueness is computed. The order of result values is determined by the - * order they occur in the array. The iteratee is invoked with one argument: - * (value). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Array} Returns the new duplicate free array. - * @example - * - * _.uniqBy([2.1, 1.2, 2.3], Math.floor); - * // => [2.1, 1.2] - * - * // The `_.property` iteratee shorthand. - * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); - * // => [{ 'x': 1 }, { 'x': 2 }] - */ - function uniqBy(array, iteratee) { - return (array && array.length) ? baseUniq(array, baseIteratee(iteratee, 2)) : []; - } - - /** - * This method is like `_.zip` except that it accepts an array of grouped - * elements and creates an array regrouping the elements to their pre-zip - * configuration. - * - * @static - * @memberOf _ - * @since 1.2.0 - * @category Array - * @param {Array} array The array of grouped elements to process. - * @returns {Array} Returns the new array of regrouped elements. - * @example - * - * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - * - * _.unzip(zipped); - * // => [['a', 'b'], [1, 2], [true, false]] - */ - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax(group.length, length); + + /** + * Checks if `value` is classified as an `Array` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array, else `false`. + * @example + * + * _.isArray([1, 2, 3]); + * // => true + * + * _.isArray(document.body.children); + * // => false + * + * _.isArray('abc'); + * // => false + * + * _.isArray(_.noop); + * // => false + */ + var isArray = Array.isArray; + + /** + * Checks if `value` is array-like. A value is considered array-like if it's + * not a function and has a `value.length` that's an integer greater than or + * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is array-like, else `false`. + * @example + * + * _.isArrayLike([1, 2, 3]); + * // => true + * + * _.isArrayLike(document.body.children); + * // => true + * + * _.isArrayLike('abc'); + * // => true + * + * _.isArrayLike(_.noop); + * // => false + */ + function isArrayLike(value) { + return value != null && isLength(value.length) && !isFunction(value); + } + + /** + * This method is like `_.isArrayLike` except that it also checks if `value` + * is an object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an array-like object, + * else `false`. + * @example + * + * _.isArrayLikeObject([1, 2, 3]); + * // => true + * + * _.isArrayLikeObject(document.body.children); + * // => true + * + * _.isArrayLikeObject('abc'); + * // => false + * + * _.isArrayLikeObject(_.noop); + * // => false + */ + function isArrayLikeObject(value) { + return isObjectLike(value) && isArrayLike(value); + } + + /** + * Checks if `value` is classified as a boolean primitive or object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. + * @example + * + * _.isBoolean(false); + * // => true + * + * _.isBoolean(null); + * // => false + */ + function isBoolean(value) { + return value === true || value === false || + (isObjectLike(value) && baseGetTag(value) == boolTag); + } + + /** + * Checks if `value` is a buffer. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. + * @example + * + * _.isBuffer(new Buffer(2)); + * // => true + * + * _.isBuffer(new Uint8Array(2)); + * // => false + */ + var isBuffer = nativeIsBuffer || stubFalse; + + /** + * Checks if `value` is classified as a `Date` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a date object, else `false`. + * @example + * + * _.isDate(new Date); + * // => true + * + * _.isDate('Mon April 23 2012'); + * // => false + */ + var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; + + /** + * Checks if `value` is an empty object, collection, map, or set. + * + * Objects are considered empty if they have no own enumerable string keyed + * properties. + * + * Array-like values such as `arguments` objects, arrays, buffers, strings, or + * jQuery-like collections are considered empty if they have a `length` of `0`. + * Similarly, maps and sets are considered empty if they have a `size` of `0`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is empty, else `false`. + * @example + * + * _.isEmpty(null); + * // => true + * + * _.isEmpty(true); + * // => true + * + * _.isEmpty(1); + * // => true + * + * _.isEmpty([1, 2, 3]); + * // => false + * + * _.isEmpty({ 'a': 1 }); + * // => false + */ + function isEmpty(value) { + if (value == null) { + return true; + } + if (isArrayLike(value) && + (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || + isBuffer(value) || isTypedArray(value) || isArguments(value))) { + return !value.length; + } + var tag = getTag(value); + if (tag == mapTag || tag == setTag) { + return !value.size; + } + if (isPrototype(value)) { + return !baseKeys(value).length; + } + for (var key in value) { + if (hasOwnProperty.call(value, key)) { + return false; + } + } return true; - } + } + + /** + * Performs a deep comparison between two values to determine if they are + * equivalent. + * + * **Note:** This method supports comparing arrays, array buffers, booleans, + * date objects, error objects, maps, numbers, `Object` objects, regexes, + * sets, strings, symbols, and typed arrays. `Object` objects are compared + * by their own, not inherited, enumerable properties. Functions and DOM + * nodes are compared by strict equality, i.e. `===`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to compare. + * @param {*} other The other value to compare. + * @returns {boolean} Returns `true` if the values are equivalent, else `false`. + * @example + * + * var object = { 'a': 1 }; + * var other = { 'a': 1 }; + * + * _.isEqual(object, other); + * // => true + * + * object === other; + * // => false + */ + function isEqual(value, other) { + return baseIsEqual(value, other); + } + + /** + * Checks if `value` is a finite primitive number. + * + * **Note:** This method is based on + * [`Number.isFinite`](https://mdn.io/Number/isFinite). + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. + * @example + * + * _.isFinite(3); + * // => true + * + * _.isFinite(Number.MIN_VALUE); + * // => true + * + * _.isFinite(Infinity); + * // => false + * + * _.isFinite('3'); + * // => false + */ + function isFinite(value) { + return typeof value == 'number' && nativeIsFinite(value); + } + + /** + * Checks if `value` is classified as a `Function` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a function, else `false`. + * @example + * + * _.isFunction(_); + * // => true + * + * _.isFunction(/abc/); + * // => false + */ + function isFunction(value) { + if (!isObject(value)) { + return false; + } + // The use of `Object#toString` avoids issues with the `typeof` operator + // in Safari 9 which returns 'object' for typed arrays and other constructors. + var tag = baseGetTag(value); + return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; + } + + /** + * Checks if `value` is a valid array-like length. + * + * **Note:** This method is loosely based on + * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. + * @example + * + * _.isLength(3); + * // => true + * + * _.isLength(Number.MIN_VALUE); + * // => false + * + * _.isLength(Infinity); + * // => false + * + * _.isLength('3'); + * // => false + */ + function isLength(value) { + return typeof value == 'number' && + value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; + } + + /** + * Checks if `value` is the + * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) + * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(_.noop); + * // => true + * + * _.isObject(null); + * // => false + */ + function isObject(value) { + var type = typeof value; + return value != null && (type == 'object' || type == 'function'); + } + + /** + * Checks if `value` is object-like. A value is object-like if it's not `null` + * and has a `typeof` result of "object". + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is object-like, else `false`. + * @example + * + * _.isObjectLike({}); + * // => true + * + * _.isObjectLike([1, 2, 3]); + * // => true + * + * _.isObjectLike(_.noop); + * // => false + * + * _.isObjectLike(null); + * // => false + */ + function isObjectLike(value) { + return value != null && typeof value == 'object'; + } + + /** + * Checks if `value` is classified as a `Map` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a map, else `false`. + * @example + * + * _.isMap(new Map); + * // => true + * + * _.isMap(new WeakMap); + * // => false + */ + var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; + + /** + * Checks if `value` is `NaN`. + * + * **Note:** This method is based on + * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as + * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for + * `undefined` and other non-number values. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. + * @example + * + * _.isNaN(NaN); + * // => true + * + * _.isNaN(new Number(NaN)); + * // => true + * + * isNaN(undefined); + * // => true + * + * _.isNaN(undefined); + * // => false + */ + function isNaN(value) { + // An `NaN` primitive is the only value that is not equal to itself. + // Perform the `toStringTag` check first to avoid errors with some + // ActiveX objects in IE. + return isNumber(value) && value != +value; + } + + /** + * Checks if `value` is `null`. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `null`, else `false`. + * @example + * + * _.isNull(null); + * // => true + * + * _.isNull(void 0); + * // => false + */ + function isNull(value) { + return value === null; + } + + /** + * Checks if `value` is classified as a `Number` primitive or object. + * + * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are + * classified as numbers, use the `_.isFinite` method. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a number, else `false`. + * @example + * + * _.isNumber(3); + * // => true + * + * _.isNumber(Number.MIN_VALUE); + * // => true + * + * _.isNumber(Infinity); + * // => true + * + * _.isNumber('3'); + * // => false + */ + function isNumber(value) { + return typeof value == 'number' || + (isObjectLike(value) && baseGetTag(value) == numberTag); + } + + /** + * Checks if `value` is a plain object, that is, an object created by the + * `Object` constructor or one with a `[[Prototype]]` of `null`. + * + * @static + * @memberOf _ + * @since 0.8.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * _.isPlainObject(new Foo); + * // => false + * + * _.isPlainObject([1, 2, 3]); + * // => false + * + * _.isPlainObject({ 'x': 0, 'y': 0 }); + * // => true + * + * _.isPlainObject(Object.create(null)); + * // => true + */ + function isPlainObject(value) { + if (!isObjectLike(value) || baseGetTag(value) != objectTag) { + return false; + } + var proto = getPrototype(value); + if (proto === null) { + return true; + } + var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; + return typeof Ctor == 'function' && Ctor instanceof Ctor && + funcToString.call(Ctor) == objectCtorString; + } + + /** + * Checks if `value` is classified as a `RegExp` object. + * + * @static + * @memberOf _ + * @since 0.1.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. + * @example + * + * _.isRegExp(/abc/); + * // => true + * + * _.isRegExp('/abc/'); + * // => false + */ + var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; + + /** + * Checks if `value` is classified as a `Set` object. + * + * @static + * @memberOf _ + * @since 4.3.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a set, else `false`. + * @example + * + * _.isSet(new Set); + * // => true + * + * _.isSet(new WeakSet); + * // => false + */ + var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; + + /** + * Checks if `value` is classified as a `String` primitive or object. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a string, else `false`. + * @example + * + * _.isString('abc'); + * // => true + * + * _.isString(1); + * // => false + */ + function isString(value) { + return typeof value == 'string' || + (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); + } + + /** + * Checks if `value` is classified as a `Symbol` primitive or object. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. + * @example + * + * _.isSymbol(Symbol.iterator); + * // => true + * + * _.isSymbol('abc'); + * // => false + */ + function isSymbol(value) { + return typeof value == 'symbol' || + (isObjectLike(value) && baseGetTag(value) == symbolTag); + } + + /** + * Checks if `value` is classified as a typed array. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. + * @example + * + * _.isTypedArray(new Uint8Array); + * // => true + * + * _.isTypedArray([]); + * // => false + */ + var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; + + /** + * Checks if `value` is `undefined`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. + * @example + * + * _.isUndefined(void 0); + * // => true + * + * _.isUndefined(null); + * // => false + */ + function isUndefined(value) { + return value === undefined; + } + + /** + * Converts `value` to an array. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Lang + * @param {*} value The value to convert. + * @returns {Array} Returns the converted array. + * @example + * + * _.toArray({ 'a': 1, 'b': 2 }); + * // => [1, 2] + * + * _.toArray('abc'); + * // => ['a', 'b', 'c'] + * + * _.toArray(1); + * // => [] + * + * _.toArray(null); + * // => [] + */ + function toArray(value) { + if (!value) { + return []; + } + if (isArrayLike(value)) { + return isString(value) ? stringToArray(value) : copyArray(value); + } + if (symIterator && value[symIterator]) { + return iteratorToArray(value[symIterator]()); + } + var tag = getTag(value), + func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); + + return func(value); + } + + /** + * Converts `value` to a finite number. + * + * @static + * @memberOf _ + * @since 4.12.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted number. + * @example + * + * _.toFinite(3.2); + * // => 3.2 + * + * _.toFinite(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toFinite(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toFinite('3.2'); + * // => 3.2 + */ + function toFinite(value) { + if (!value) { + return value === 0 ? value : 0; + } + value = toNumber(value); + if (value === INFINITY || value === -INFINITY) { + var sign = (value < 0 ? -1 : 1); + return sign * MAX_INTEGER; + } + return value === value ? value : 0; + } + + /** + * Converts `value` to an integer. + * + * **Note:** This method is loosely based on + * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {number} Returns the converted integer. + * @example + * + * _.toInteger(3.2); + * // => 3 + * + * _.toInteger(Number.MIN_VALUE); + * // => 0 + * + * _.toInteger(Infinity); + * // => 1.7976931348623157e+308 + * + * _.toInteger('3.2'); + * // => 3 + */ + function toInteger(value) { + var result = toFinite(value), + remainder = result % 1; + + return result === result ? (remainder ? result - remainder : result) : 0; + } + + /** + * Converts `value` to a number. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to process. + * @returns {number} Returns the number. + * @example + * + * _.toNumber(3.2); + * // => 3.2 + * + * _.toNumber(Number.MIN_VALUE); + * // => 5e-324 + * + * _.toNumber(Infinity); + * // => Infinity + * + * _.toNumber('3.2'); + * // => 3.2 + */ + function toNumber(value) { + if (typeof value == 'number') { + return value; + } + if (isSymbol(value)) { + return NAN; + } + if (isObject(value)) { + var other = typeof value.valueOf == 'function' ? value.valueOf() : value; + value = isObject(other) ? (other + '') : other; + } + if (typeof value != 'string') { + return value === 0 ? value : +value; + } + value = value.replace(reTrim, ''); + var isBinary = reIsBinary.test(value); + return (isBinary || reIsOctal.test(value)) + ? freeParseInt(value.slice(2), isBinary ? 2 : 8) + : (reIsBadHex.test(value) ? NAN : +value); + } + + /** + * Converts `value` to a plain object flattening inherited enumerable string + * keyed properties of `value` to own properties of the plain object. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {Object} Returns the converted plain object. + * @example + * + * function Foo() { + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.assign({ 'a': 1 }, new Foo); + * // => { 'a': 1, 'b': 2 } + * + * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); + * // => { 'a': 1, 'b': 2, 'c': 3 } + */ + function toPlainObject(value) { + return copyObject(value, keysIn(value)); + } + + /** + * Converts `value` to a string. An empty string is returned for `null` + * and `undefined` values. The sign of `-0` is preserved. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Lang + * @param {*} value The value to convert. + * @returns {string} Returns the converted string. + * @example + * + * _.toString(null); + * // => '' + * + * _.toString(-0); + * // => '-0' + * + * _.toString([1, 2, 3]); + * // => '1,2,3' + */ + function toString(value) { + return value == null ? '' : baseToString(value); + } + + /*------------------------------------------------------------------------*/ + + /** + * This method is like `_.assign` except that it iterates over own and + * inherited source properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @alias extend + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.assign + * @example + * + * function Foo() { + * this.a = 1; + * } + * + * function Bar() { + * this.c = 3; + * } + * + * Foo.prototype.b = 2; + * Bar.prototype.d = 4; + * + * _.assignIn({ 'a': 0 }, new Foo, new Bar); + * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } + */ + var assignIn = createAssigner(function (object, source) { + copyObject(source, keysIn(source), object); }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); + + /** + * Creates an object that inherits from the `prototype` object. If a + * `properties` object is given, its own enumerable string keyed properties + * are assigned to the created object. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Object + * @param {Object} prototype The object to inherit from. + * @param {Object} [properties] The properties to assign to the object. + * @returns {Object} Returns the new object. + * @example + * + * function Shape() { + * this.x = 0; + * this.y = 0; + * } + * + * function Circle() { + * Shape.call(this); + * } + * + * Circle.prototype = _.create(Shape.prototype, { + * 'constructor': Circle + * }); + * + * var circle = new Circle; + * circle instanceof Circle; + * // => true + * + * circle instanceof Shape; + * // => true + */ + function create(prototype, properties) { + var result = baseCreate(prototype); + return properties == null ? result : baseAssign(result, properties); + } + + /** + * Assigns own and inherited enumerable string keyed properties of source + * objects to the destination object for all destination properties that + * resolve to `undefined`. Source objects are applied from left to right. + * Once a property is set, additional values of the same property are ignored. + * + * **Note:** This method mutates `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaultsDeep + * @example + * + * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); + * // => { 'a': 1, 'b': 2 } + */ + var defaults = baseRest(function (object, sources) { + object = Object(object); + + var index = -1; + var length = sources.length; + var guard = length > 2 ? sources[2] : undefined; + + if (guard && isIterateeCall(sources[0], sources[1], guard)) { + length = 1; + } + + while (++index < length) { + var source = sources[index]; + var props = keysIn(source); + var propsIndex = -1; + var propsLength = props.length; + + while (++propsIndex < propsLength) { + var key = props[propsIndex]; + var value = object[key]; + + if (value === undefined || + (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { + object[key] = source[key]; + } + } + } + + return object; }); - } - - /** - * Creates an array excluding all given values using - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * for equality comparisons. - * - * **Note:** Unlike `_.pull`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {Array} array The array to inspect. - * @param {...*} [values] The values to exclude. - * @returns {Array} Returns the new array of filtered values. - * @see _.difference, _.xor - * @example - * - * _.without([2, 1, 2, 3], 1, 2); - * // => [3] - */ - var without = baseRest(function(array, values) { - return isArrayLikeObject(array) - ? baseDifference(array, values) - : []; - }); - - /** - * Creates an array of grouped elements, the first of which contains the - * first elements of the given arrays, the second of which contains the - * second elements of the given arrays, and so on. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Array - * @param {...Array} [arrays] The arrays to process. - * @returns {Array} Returns the new array of grouped elements. - * @example - * - * _.zip(['a', 'b'], [1, 2], [true, false]); - * // => [['a', 1, true], ['b', 2, false]] - */ - var zip = baseRest(unzip); - - /** - * This method is like `_.fromPairs` except that it accepts two arrays, - * one of property identifiers and one of corresponding values. - * - * @static - * @memberOf _ - * @since 0.4.0 - * @category Array - * @param {Array} [props=[]] The property identifiers. - * @param {Array} [values=[]] The property values. - * @returns {Object} Returns the new object. - * @example - * - * _.zipObject(['a', 'b'], [1, 2]); - * // => { 'a': 1, 'b': 2 } - */ - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a `lodash` wrapper instance that wraps `value` with explicit method - * chain sequences enabled. The result of such sequences must be unwrapped - * with `_#value`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Seq - * @param {*} value The value to wrap. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'pebbles', 'age': 1 } - * ]; - * - * var youngest = _ - * .chain(users) - * .sortBy('age') - * .map(function(o) { - * return o.user + ' is ' + o.age; - * }) - * .head() - * .value(); - * // => 'pebbles is 1' - */ - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - /** - * This method invokes `interceptor` and returns `value`. The interceptor - * is invoked with one argument; (value). The purpose of this method is to - * "tap into" a method chain sequence in order to modify intermediate results. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns `value`. - * @example - * - * _([1, 2, 3]) - * .tap(function(array) { - * // Mutate input array. - * array.pop(); - * }) - * .reverse() - * .value(); - * // => [2, 1] - */ - function tap(value, interceptor) { - interceptor(value); - return value; - } - - /** - * This method is like `_.tap` except that it returns the result of `interceptor`. - * The purpose of this method is to "pass thru" values replacing intermediate - * results in a method chain sequence. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Seq - * @param {*} value The value to provide to `interceptor`. - * @param {Function} interceptor The function to invoke. - * @returns {*} Returns the result of `interceptor`. - * @example - * - * _(' abc ') - * .chain() - * .trim() - * .thru(function(value) { - * return [value]; - * }) - * .value(); - * // => ['abc'] - */ - function thru(value, interceptor) { - return interceptor(value); - } - - /** - * This method is the wrapper version of `_.at`. - * - * @name at - * @memberOf _ - * @since 1.0.0 - * @category Seq - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _(object).at(['a[0].b.c', 'a[1]']).value(); - * // => [3, 4] - */ - var wrapperAt = flatRest(function(paths) { - var length = paths.length, - start = length ? paths[0] : 0, - value = this.__wrapped__, - interceptor = function(object) { return baseAt(object, paths); }; - - if (length > 1 || this.__actions__.length || - !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - 'func': thru, - 'args': [interceptor], - 'thisArg': undefined + + /** + * This method is like `_.defaults` except that it recursively assigns + * default properties. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.10.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @see _.defaults + * @example + * + * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); + * // => { 'a': { 'b': 2, 'c': 3 } } + */ + var defaultsDeep = baseRest(function (args) { + args.push(undefined, customDefaultsMerge); + return apply(mergeWith, undefined, args); }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(undefined); - } - return array; + + /** + * This method is like `_.find` except that it returns the key of the first + * element `predicate` returns truthy for instead of the element itself. + * + * @static + * @memberOf _ + * @since 1.1.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findKey(users, function(o) { return o.age < 40; }); + * // => 'barney' (iteration order is not guaranteed) + * + * // The `_.matches` iteratee shorthand. + * _.findKey(users, { 'age': 1, 'active': true }); + * // => 'pebbles' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findKey(users, 'active'); + * // => 'barney' + */ + function findKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); + } + + /** + * This method is like `_.findKey` except that it iterates over elements of + * a collection in the opposite order. + * + * @static + * @memberOf _ + * @since 2.0.0 + * @category Object + * @param {Object} object The object to inspect. + * @param {Function} [predicate=_.identity] The function invoked per iteration. + * @returns {string|undefined} Returns the key of the matched element, + * else `undefined`. + * @example + * + * var users = { + * 'barney': { 'age': 36, 'active': true }, + * 'fred': { 'age': 40, 'active': false }, + * 'pebbles': { 'age': 1, 'active': true } + * }; + * + * _.findLastKey(users, function(o) { return o.age < 40; }); + * // => returns 'pebbles' assuming `_.findKey` returns 'barney' + * + * // The `_.matches` iteratee shorthand. + * _.findLastKey(users, { 'age': 36, 'active': true }); + * // => 'barney' + * + * // The `_.matchesProperty` iteratee shorthand. + * _.findLastKey(users, ['active', false]); + * // => 'fred' + * + * // The `_.property` iteratee shorthand. + * _.findLastKey(users, 'active'); + * // => 'pebbles' + */ + function findLastKey(object, predicate) { + return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); + } + + /** + * Gets the value at `path` of `object`. If the resolved value is + * `undefined`, the `defaultValue` is returned in its place. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to get. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.get(object, 'a[0].b.c'); + * // => 3 + * + * _.get(object, ['a', '0', 'b', 'c']); + * // => 3 + * + * _.get(object, 'a.b.c', 'default'); + * // => 'default' + */ + function get(object, path, defaultValue) { + var result = object == null ? undefined : baseGet(object, path); + return result === undefined ? defaultValue : result; + } + + /** + * Checks if `path` is a direct property of `object`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = { 'a': { 'b': 2 } }; + * var other = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.has(object, 'a'); + * // => true + * + * _.has(object, 'a.b'); + * // => true + * + * _.has(object, ['a', 'b']); + * // => true + * + * _.has(other, 'a'); + * // => false + */ + function has(object, path) { + return object != null && hasPath(object, path, baseHas); + } + + /** + * Checks if `path` is a direct or inherited property of `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path to check. + * @returns {boolean} Returns `true` if `path` exists, else `false`. + * @example + * + * var object = _.create({ 'a': _.create({ 'b': 2 }) }); + * + * _.hasIn(object, 'a'); + * // => true + * + * _.hasIn(object, 'a.b'); + * // => true + * + * _.hasIn(object, ['a', 'b']); + * // => true + * + * _.hasIn(object, 'b'); + * // => false + */ + function hasIn(object, path) { + return object != null && hasPath(object, path, baseHasIn); + } + + /** + * Creates an object composed of the inverted keys and values of `object`. + * If `object` contains duplicate values, subsequent values overwrite + * property assignments of previous values. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Object + * @param {Object} object The object to invert. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invert(object); + * // => { '1': 'c', '2': 'b' } + */ + var invert = createInverter(function (result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + result[value] = key; + }, constant(identity)); + + /** + * This method is like `_.invert` except that the inverted object is generated + * from the results of running each element of `object` thru `iteratee`. The + * corresponding inverted value of each inverted key is an array of keys + * responsible for generating the inverted value. The iteratee is invoked + * with one argument: (value). + * + * @static + * @memberOf _ + * @since 4.1.0 + * @category Object + * @param {Object} object The object to invert. + * @param {Function} [iteratee=_.identity] The iteratee invoked per element. + * @returns {Object} Returns the new inverted object. + * @example + * + * var object = { 'a': 1, 'b': 2, 'c': 1 }; + * + * _.invertBy(object); + * // => { '1': ['a', 'c'], '2': ['b'] } + * + * _.invertBy(object, function(value) { + * return 'group' + value; + * }); + * // => { 'group1': ['a', 'c'], 'group2': ['b'] } + */ + var invertBy = createInverter(function (result, value, key) { + if (value != null && + typeof value.toString != 'function') { + value = nativeObjectToString.call(value); + } + + if (hasOwnProperty.call(result, value)) { + result[value].push(key); + } else { + result[value] = [key]; + } + }, baseIteratee); + + /** + * Creates an array of the own enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. See the + * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) + * for more details. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keys(new Foo); + * // => ['a', 'b'] (iteration order is not guaranteed) + * + * _.keys('hi'); + * // => ['0', '1'] + */ + function keys(object) { + return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); + } + + /** + * Creates an array of the own and inherited enumerable property names of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property names. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.keysIn(new Foo); + * // => ['a', 'b', 'c'] (iteration order is not guaranteed) + */ + function keysIn(object) { + return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); + } + + /** + * This method is like `_.assign` except that it recursively merges own and + * inherited enumerable string keyed properties of source objects into the + * destination object. Source properties that resolve to `undefined` are + * skipped if a destination value exists. Array and plain object properties + * are merged recursively. Other objects and value types are overridden by + * assignment. Source objects are applied from left to right. Subsequent + * sources overwrite property assignments of previous sources. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 0.5.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} [sources] The source objects. + * @returns {Object} Returns `object`. + * @example + * + * var object = { + * 'a': [{ 'b': 2 }, { 'd': 4 }] + * }; + * + * var other = { + * 'a': [{ 'c': 3 }, { 'e': 5 }] + * }; + * + * _.merge(object, other); + * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } + */ + var merge = createAssigner(function (object, source, srcIndex) { + baseMerge(object, source, srcIndex); }); - }); - - /** - * Creates a `lodash` wrapper instance with explicit method chain sequences enabled. - * - * @name chain - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 } - * ]; - * - * // A sequence without explicit chaining. - * _(users).head(); - * // => { 'user': 'barney', 'age': 36 } - * - * // A sequence with explicit chaining. - * _(users) - * .chain() - * .head() - * .pick('user') - * .value(); - * // => { 'user': 'barney' } - */ - function wrapperChain() { - return chain(this); - } - - /** - * Executes the chain sequence and returns the wrapped result. - * - * @name commit - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2]; - * var wrapped = _(array).push(3); - * - * console.log(array); - * // => [1, 2] - * - * wrapped = wrapped.commit(); - * console.log(array); - * // => [1, 2, 3] - * - * wrapped.last(); - * // => 3 - * - * console.log(array); - * // => [1, 2, 3] - */ - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - /** - * Gets the next value on a wrapped object following the - * [iterator protocol](https://mdn.io/iteration_protocols#iterator). - * - * @name next - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the next iterator value. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped.next(); - * // => { 'done': false, 'value': 1 } - * - * wrapped.next(); - * // => { 'done': false, 'value': 2 } - * - * wrapped.next(); - * // => { 'done': true, 'value': undefined } - */ - function wrapperNext() { - if (this.__values__ === undefined) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, - value = done ? undefined : this.__values__[this.__index__++]; - - return { 'done': done, 'value': value }; - } - - /** - * Enables the wrapper to be iterable. - * - * @name Symbol.iterator - * @memberOf _ - * @since 4.0.0 - * @category Seq - * @returns {Object} Returns the wrapper object. - * @example - * - * var wrapped = _([1, 2]); - * - * wrapped[Symbol.iterator]() === wrapped; - * // => true - * - * Array.from(wrapped); - * // => [1, 2] - */ - function wrapperToIterator() { - return this; - } - - /** - * Creates a clone of the chain sequence planting `value` as the wrapped value. - * - * @name plant - * @memberOf _ - * @since 3.2.0 - * @category Seq - * @param {*} value The value to plant. - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * function square(n) { - * return n * n; - * } - * - * var wrapped = _([1, 2]).map(square); - * var other = wrapped.plant([3, 4]); - * - * other.value(); - * // => [9, 16] - * - * wrapped.value(); - * // => [1, 4] - */ - function wrapperPlant(value) { - var result, - parent = this; - - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = undefined; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - /** - * This method is the wrapper version of `_.reverse`. - * - * **Note:** This method mutates the wrapped array. - * - * @name reverse - * @memberOf _ - * @since 0.1.0 - * @category Seq - * @returns {Object} Returns the new `lodash` wrapper instance. - * @example - * - * var array = [1, 2, 3]; - * - * _(array).reverse().value() - * // => [3, 2, 1] - * - * console.log(array); - * // => [3, 2, 1] - */ - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - 'func': thru, - 'args': [reverse], - 'thisArg': undefined - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - /** - * Executes the chain sequence to resolve the unwrapped value. - * - * @name value - * @memberOf _ - * @since 0.1.0 - * @alias toJSON, valueOf - * @category Seq - * @returns {*} Returns the resolved unwrapped value. - * @example - * - * _([1, 2, 3]).value(); - * // => [1, 2, 3] - */ - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The corresponding value of - * each key is the number of times the key was returned by `iteratee`. The - * iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.countBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': 1, '6': 2 } - * - * // The `_.property` iteratee shorthand. - * _.countBy(['one', 'two', 'three'], 'length'); - * // => { '3': 2, '5': 1 } - */ - var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); - - /** - * Checks if `predicate` returns truthy for **all** elements of `collection`. - * Iteration is stopped once `predicate` returns falsey. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * **Note:** This method returns `true` for - * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because - * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of - * elements of empty collections. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if all elements pass the predicate check, - * else `false`. - * @example - * - * _.every([true, 1, null, 'yes'], Boolean); - * // => false - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.every(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.every(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.every(users, 'active'); - * // => false - */ - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning an array of all elements - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * **Note:** Unlike `_.remove`, this method returns a new array. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.reject - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * _.filter(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, { 'age': 36, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.filter(users, 'active'); - * // => objects for ['barney'] - */ - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate, 3)); - } - - /** - * Iterates over elements of `collection`, returning the first element - * `predicate` returns truthy for. The predicate is invoked with three - * arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param {number} [fromIndex=0] The index to search from. - * @returns {*} Returns the matched element, else `undefined`. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false }, - * { 'user': 'pebbles', 'age': 1, 'active': true } - * ]; - * - * _.find(users, function(o) { return o.age < 40; }); - * // => object for 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.find(users, { 'age': 1, 'active': true }); - * // => object for 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.find(users, ['active', false]); - * // => object for 'fred' - * - * // The `_.property` iteratee shorthand. - * _.find(users, 'active'); - * // => object for 'barney' - */ - var find = createFind(findIndex); - - /** - * Iterates over elements of `collection` and invokes `iteratee` for each element. - * The iteratee is invoked with three arguments: (value, index|key, collection). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * **Note:** As with other "Collections" methods, objects with a "length" - * property are iterated like arrays. To avoid this behavior use `_.forIn` - * or `_.forOwn` for object iteration. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @alias each - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array|Object} Returns `collection`. - * @see _.forEachRight - * @example - * - * _.forEach([1, 2], function(value) { - * console.log(value); - * }); - * // => Logs `1` then `2`. - * - * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, baseIteratee(iteratee, 3)); - } - - /** - * Creates an object composed of keys generated from the results of running - * each element of `collection` thru `iteratee`. The order of grouped values - * is determined by the order they occur in `collection`. The corresponding - * value of each key is an array of elements responsible for generating the - * key. The iteratee is invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The iteratee to transform keys. - * @returns {Object} Returns the composed aggregate object. - * @example - * - * _.groupBy([6.1, 4.2, 6.3], Math.floor); - * // => { '4': [4.2], '6': [6.1, 6.3] } - * - * // The `_.property` iteratee shorthand. - * _.groupBy(['one', 'two', 'three'], 'length'); - * // => { '3': ['one', 'two'], '5': ['three'] } - */ - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); - - /** - * Creates an array of values by running each element in `collection` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`. - * - * The guarded methods are: - * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`, - * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`, - * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`, - * `template`, `trim`, `trimEnd`, `trimStart`, and `words` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new mapped array. - * @example - * - * function square(n) { - * return n * n; - * } - * - * _.map([4, 8], square); - * // => [16, 64] - * - * _.map({ 'a': 4, 'b': 8 }, square); - * // => [16, 64] (iteration order is not guaranteed) - * - * var users = [ - * { 'user': 'barney' }, - * { 'user': 'fred' } - * ]; - * - * // The `_.property` iteratee shorthand. - * _.map(users, 'user'); - * // => ['barney', 'fred'] - */ - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, baseIteratee(iteratee, 3)); - } - - /** - * Reduces `collection` to a value which is the accumulated result of running - * each element in `collection` thru `iteratee`, where each successive - * invocation is supplied the return value of the previous. If `accumulator` - * is not given, the first element of `collection` is used as the initial - * value. The iteratee is invoked with four arguments: - * (accumulator, value, index|key, collection). - * - * Many lodash methods are guarded to work as iteratees for methods like - * `_.reduce`, `_.reduceRight`, and `_.transform`. - * - * The guarded methods are: - * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`, - * and `sortBy` - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The initial value. - * @returns {*} Returns the accumulated value. - * @see _.reduceRight - * @example - * - * _.reduce([1, 2], function(sum, n) { - * return sum + n; - * }, 0); - * // => 3 - * - * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * return result; - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed) - */ - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, - initAccum = arguments.length < 3; - - return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach); - } - - /** - * The opposite of `_.filter`; this method returns the elements of `collection` - * that `predicate` does **not** return truthy for. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {Array} Returns the new filtered array. - * @see _.filter - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': false }, - * { 'user': 'fred', 'age': 40, 'active': true } - * ]; - * - * _.reject(users, function(o) { return !o.active; }); - * // => objects for ['fred'] - * - * // The `_.matches` iteratee shorthand. - * _.reject(users, { 'age': 40, 'active': true }); - * // => objects for ['barney'] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.reject(users, ['active', false]); - * // => objects for ['fred'] - * - * // The `_.property` iteratee shorthand. - * _.reject(users, 'active'); - * // => objects for ['barney'] - */ - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(baseIteratee(predicate, 3))); - } - - /** - * Gets the size of `collection` by returning its length for array-like - * values or the number of own enumerable string keyed properties for objects. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object|string} collection The collection to inspect. - * @returns {number} Returns the collection size. - * @example - * - * _.size([1, 2, 3]); - * // => 3 - * - * _.size({ 'a': 1, 'b': 2 }); - * // => 2 - * - * _.size('pebbles'); - * // => 7 - */ - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - - /** - * Checks if `predicate` returns truthy for **any** element of `collection`. - * Iteration is stopped once `predicate` returns truthy. The predicate is - * invoked with three arguments: (value, index|key, collection). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {boolean} Returns `true` if any element passes the predicate check, - * else `false`. - * @example - * - * _.some([null, 0, 'yes', false], Boolean); - * // => true - * - * var users = [ - * { 'user': 'barney', 'active': true }, - * { 'user': 'fred', 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.some(users, { 'user': 'barney', 'active': false }); - * // => false - * - * // The `_.matchesProperty` iteratee shorthand. - * _.some(users, ['active', false]); - * // => true - * - * // The `_.property` iteratee shorthand. - * _.some(users, 'active'); - * // => true - */ - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = undefined; - } - return func(collection, baseIteratee(predicate, 3)); - } - - /** - * Creates an array of elements, sorted in ascending order by the results of - * running each element in a collection thru each iteratee. This method - * performs a stable sort, that is, it preserves the original sort order of - * equal elements. The iteratees are invoked with one argument: (value). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Collection - * @param {Array|Object} collection The collection to iterate over. - * @param {...(Function|Function[])} [iteratees=[_.identity]] - * The iteratees to sort by. - * @returns {Array} Returns the new sorted array. - * @example - * - * var users = [ - * { 'user': 'fred', 'age': 48 }, - * { 'user': 'barney', 'age': 36 }, - * { 'user': 'fred', 'age': 40 }, - * { 'user': 'barney', 'age': 34 } - * ]; - * - * _.sortBy(users, [function(o) { return o.user; }]); - * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]] - * - * _.sortBy(users, ['user', 'age']); - * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]] - */ - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - /*------------------------------------------------------------------------*/ - - /** - * Gets the timestamp of the number of milliseconds that have elapsed since - * the Unix epoch (1 January 1970 00:00:00 UTC). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Date - * @returns {number} Returns the timestamp. - * @example - * - * _.defer(function(stamp) { - * console.log(_.now() - stamp); - * }, _.now()); - * // => Logs the number of milliseconds it took for the deferred invocation. - */ - var now = function() { - return root.Date.now(); - }; - - /*------------------------------------------------------------------------*/ - - /** - * The opposite of `_.before`; this method creates a function that invokes - * `func` once it's called `n` or more times. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {number} n The number of calls before `func` is invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var saves = ['profile', 'settings']; - * - * var done = _.after(saves.length, function() { - * console.log('done saving!'); - * }); - * - * _.forEach(saves, function(type) { - * asyncSave({ 'type': type, 'complete': done }); - * }); - * // => Logs 'done saving!' after the two async saves have completed. - */ - function after(n, func) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - /** - * Creates a function that invokes `func`, with the `this` binding and arguments - * of the created function, while it's called less than `n` times. Subsequent - * calls to the created function return the result of the last `func` invocation. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {number} n The number of calls at which `func` is no longer invoked. - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * jQuery(element).on('click', _.before(5, addContactToList)); - * // => Allows adding up to 4 contacts to the list. - */ - function before(n, func) { - var result; - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = undefined; - } - return result; - }; - } - - /** - * Creates a function that invokes `func` with the `this` binding of `thisArg` - * and `partials` prepended to the arguments it receives. - * - * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds, - * may be used as a placeholder for partially applied arguments. - * - * **Note:** Unlike native `Function#bind`, this method doesn't set the "length" - * property of bound functions. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to bind. - * @param {*} thisArg The `this` binding of `func`. - * @param {...*} [partials] The arguments to be partially applied. - * @returns {Function} Returns the new bound function. - * @example - * - * function greet(greeting, punctuation) { - * return greeting + ' ' + this.user + punctuation; - * } - * - * var object = { 'user': 'fred' }; - * - * var bound = _.bind(greet, object, 'hi'); - * bound('!'); - * // => 'hi fred!' - * - * // Bound with placeholders. - * var bound = _.bind(greet, object, _, '!'); - * bound('hi'); - * // => 'hi fred!' - */ - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - - /** - * Creates a debounced function that delays invoking `func` until after `wait` - * milliseconds have elapsed since the last time the debounced function was - * invoked. The debounced function comes with a `cancel` method to cancel - * delayed `func` invocations and a `flush` method to immediately invoke them. - * Provide `options` to indicate whether `func` should be invoked on the - * leading and/or trailing edge of the `wait` timeout. The `func` is invoked - * with the last arguments provided to the debounced function. Subsequent - * calls to the debounced function return the result of the last `func` - * invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the debounced function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.debounce` and `_.throttle`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to debounce. - * @param {number} [wait=0] The number of milliseconds to delay. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=false] - * Specify invoking on the leading edge of the timeout. - * @param {number} [options.maxWait] - * The maximum time `func` is allowed to be delayed before it's invoked. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new debounced function. - * @example - * - * // Avoid costly calculations while the window size is in flux. - * jQuery(window).on('resize', _.debounce(calculateLayout, 150)); - * - * // Invoke `sendMail` when clicked, debouncing subsequent calls. - * jQuery(element).on('click', _.debounce(sendMail, 300, { - * 'leading': true, - * 'trailing': false - * })); - * - * // Ensure `batchLog` is invoked once after 1 second of debounced calls. - * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 }); - * var source = new EventSource('/stream'); - * jQuery(source).on('message', debounced); - * - * // Cancel the trailing debounced invocation. - * jQuery(window).on('popstate', debounced.cancel); - */ - function debounce(func, wait, options) { - var lastArgs, - lastThis, - maxWait, - result, - timerId, - lastCallTime, - lastInvokeTime = 0, - leading = false, - maxing = false, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = 'maxWait' in options; - maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - - function invokeFunc(time) { - var args = lastArgs, - thisArg = lastThis; - - lastArgs = lastThis = undefined; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - - function leadingEdge(time) { - // Reset any `maxWait` timer. - lastInvokeTime = time; - // Start the timer for the trailing edge. - timerId = setTimeout(timerExpired, wait); - // Invoke the leading edge. - return leading ? invokeFunc(time) : result; - } - - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime, - timeWaiting = wait - timeSinceLastCall; - - return maxing - ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) - : timeWaiting; - } - - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, - timeSinceLastInvoke = time - lastInvokeTime; - - // Either this is the first call, activity has stopped and we're at the - // trailing edge, the system time has gone backwards and we're treating - // it as the trailing edge, or we've hit the `maxWait` limit. - return (lastCallTime === undefined || (timeSinceLastCall >= wait) || - (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait)); - } - - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - // Restart the timer. - timerId = setTimeout(timerExpired, remainingWait(time)); - } - - function trailingEdge(time) { - timerId = undefined; - - // Only invoke if we have `lastArgs` which means `func` has been - // debounced at least once. - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = undefined; - return result; - } - - function cancel() { - if (timerId !== undefined) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = undefined; - } - - function flush() { - return timerId === undefined ? result : trailingEdge(now()); - } - - function debounced() { - var time = now(), - isInvoking = shouldInvoke(time); - - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - - if (isInvoking) { - if (timerId === undefined) { - return leadingEdge(lastCallTime); - } - if (maxing) { - // Handle invocations in a tight loop. - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === undefined) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - /** - * Defers invoking the `func` until the current call stack has cleared. Any - * additional arguments are provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to defer. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.defer(function(text) { - * console.log(text); - * }, 'deferred'); - * // => Logs 'deferred' after one millisecond. - */ - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - /** - * Invokes `func` after `wait` milliseconds. Any additional arguments are - * provided to `func` when it's invoked. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to delay. - * @param {number} wait The number of milliseconds to delay invocation. - * @param {...*} [args] The arguments to invoke `func` with. - * @returns {number} Returns the timer id. - * @example - * - * _.delay(function(text) { - * console.log(text); - * }, 1000, 'later'); - * // => Logs 'later' after one second. - */ - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - /** - * Creates a function that memoizes the result of `func`. If `resolver` is - * provided, it determines the cache key for storing the result based on the - * arguments provided to the memoized function. By default, the first argument - * provided to the memoized function is used as the map cache key. The `func` - * is invoked with the `this` binding of the memoized function. - * - * **Note:** The cache is exposed as the `cache` property on the memoized - * function. Its creation may be customized by replacing the `_.memoize.Cache` - * constructor with one whose instances implement the - * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object) - * method interface of `clear`, `delete`, `get`, `has`, and `set`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to have its output memoized. - * @param {Function} [resolver] The function to resolve the cache key. - * @returns {Function} Returns the new memoized function. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * var other = { 'c': 3, 'd': 4 }; - * - * var values = _.memoize(_.values); - * values(object); - * // => [1, 2] - * - * values(other); - * // => [3, 4] - * - * object.a = 2; - * values(object); - * // => [1, 2] - * - * // Modify the result cache. - * values.cache.set(object, ['a', 'b']); - * values(object); - * // => ['a', 'b'] - * - * // Replace `_.memoize.Cache`. - * _.memoize.Cache = WeakMap; - */ - function memoize(func, resolver) { - if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, - key = resolver ? resolver.apply(this, args) : args[0], - cache = memoized.cache; - - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache); - return memoized; - } - - // Expose `MapCache`. - memoize.Cache = MapCache; - - /** - * Creates a function that negates the result of the predicate `func`. The - * `func` predicate is invoked with the `this` binding and arguments of the - * created function. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Function - * @param {Function} predicate The predicate to negate. - * @returns {Function} Returns the new negated function. - * @example - * - * function isEven(n) { - * return n % 2 == 0; - * } - * - * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven)); - * // => [1, 3, 5] - */ - function negate(predicate) { - if (typeof predicate != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - - /** - * Creates a function that is restricted to invoking `func` once. Repeat calls - * to the function return the value of the first invocation. The `func` is - * invoked with the `this` binding and arguments of the created function. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to restrict. - * @returns {Function} Returns the new restricted function. - * @example - * - * var initialize = _.once(createApplication); - * initialize(); - * initialize(); - * // => `createApplication` is invoked once - */ - function once(func) { - return before(2, func); - } - - /** - * Creates a function that invokes `func` with the `this` binding of the - * created function and arguments from `start` and beyond provided as - * an array. - * - * **Note:** This method is based on the - * [rest parameter](https://mdn.io/rest_parameters). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Function - * @param {Function} func The function to apply a rest parameter to. - * @param {number} [start=func.length-1] The start position of the rest parameter. - * @returns {Function} Returns the new function. - * @example - * - * var say = _.rest(function(what, names) { - * return what + ' ' + _.initial(names).join(', ') + - * (_.size(names) > 1 ? ', & ' : '') + _.last(names); - * }); - * - * say('hello', 'fred', 'barney', 'pebbles'); - * // => 'hello fred, barney, & pebbles' - */ - function rest(func, start) { - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - start = start === undefined ? start : toInteger(start); - return baseRest(func, start); - } - - /** - * Creates a throttled function that only invokes `func` at most once per - * every `wait` milliseconds. The throttled function comes with a `cancel` - * method to cancel delayed `func` invocations and a `flush` method to - * immediately invoke them. Provide `options` to indicate whether `func` - * should be invoked on the leading and/or trailing edge of the `wait` - * timeout. The `func` is invoked with the last arguments provided to the - * throttled function. Subsequent calls to the throttled function return the - * result of the last `func` invocation. - * - * **Note:** If `leading` and `trailing` options are `true`, `func` is - * invoked on the trailing edge of the timeout only if the throttled function - * is invoked more than once during the `wait` timeout. - * - * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred - * until to the next tick, similar to `setTimeout` with a timeout of `0`. - * - * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/) - * for details over the differences between `_.throttle` and `_.debounce`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Function - * @param {Function} func The function to throttle. - * @param {number} [wait=0] The number of milliseconds to throttle invocations to. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.leading=true] - * Specify invoking on the leading edge of the timeout. - * @param {boolean} [options.trailing=true] - * Specify invoking on the trailing edge of the timeout. - * @returns {Function} Returns the new throttled function. - * @example - * - * // Avoid excessively updating the position while scrolling. - * jQuery(window).on('scroll', _.throttle(updatePosition, 100)); - * - * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes. - * var throttled = _.throttle(renewToken, 300000, { 'trailing': false }); - * jQuery(element).on('click', throttled); - * - * // Cancel the trailing throttled invocation. - * jQuery(window).on('popstate', throttled.cancel); - */ - function throttle(func, wait, options) { - var leading = true, - trailing = true; - - if (typeof func != 'function') { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = 'leading' in options ? !!options.leading : leading; - trailing = 'trailing' in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - 'leading': leading, - 'maxWait': wait, - 'trailing': trailing + + /** + * This method is like `_.merge` except that it accepts `customizer` which + * is invoked to produce the merged values of the destination and source + * properties. If `customizer` returns `undefined`, merging is handled by the + * method instead. The `customizer` is invoked with six arguments: + * (objValue, srcValue, key, object, source, stack). + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The destination object. + * @param {...Object} sources The source objects. + * @param {Function} customizer The function to customize assigned values. + * @returns {Object} Returns `object`. + * @example + * + * function customizer(objValue, srcValue) { + * if (_.isArray(objValue)) { + * return objValue.concat(srcValue); + * } + * } + * + * var object = { 'a': [1], 'b': [2] }; + * var other = { 'a': [3], 'b': [4] }; + * + * _.mergeWith(object, other, customizer); + * // => { 'a': [1, 3], 'b': [2, 4] } + */ + var mergeWith = createAssigner(function (object, source, srcIndex, customizer) { + baseMerge(object, source, srcIndex, customizer); }); - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * Checks if `value` is classified as a `Symbol` primitive or object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. - * @example - * - * _.isSymbol(Symbol.iterator); - * // => true - * - * _.isSymbol('abc'); - * // => false - */ - function isSymbol(value) { - return typeof value == 'symbol' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a string. An empty string is returned for `null` - * and `undefined` values. The sign of `-0` is preserved. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.toString(null); - * // => '' - * - * _.toString(-0); - * // => '-0' - * - * _.toString([1, 2, 3]); - * // => '1,2,3' - */ - function toString(value) { - return value == null ? '' : baseToString(value); - } - - /*------------------------------------------------------------------------*/ - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function(args) { - args.push(undefined, customDefaultsMerge); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate, 3), baseForOwnRight); - } - - /** - * Gets the value at `path` of `object`. If the resolved value is - * `undefined`, the `defaultValue` is returned in its place. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to get. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.get(object, 'a[0].b.c'); - * // => 3 - * - * _.get(object, ['a', '0', 'b', 'c']); - * // => 3 - * - * _.get(object, 'a.b.c', 'default'); - * // => 'default' - */ - function get(object, path, defaultValue) { - var result = object == null ? undefined : baseGet(object, path); - return result === undefined ? defaultValue : result; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, baseIteratee); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function(object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; + + /** + * The opposite of `_.pick`; this method creates an object composed of the + * own and inherited enumerable property paths of `object` that are not omitted. + * + * **Note:** This method is considerably slower than `_.pick`. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to omit. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omit(object, ['a', 'c']); + * // => { 'b': '2' } + */ + var omit = flatRest(function (object, paths) { + var result = {}; + if (object == null) { + return result; + } + var isDeep = false; + paths = arrayMap(paths, function (path) { + path = castPath(path, object); + isDeep || (isDeep = path.length > 1); + return path; + }); + copyObject(object, getAllKeysIn(object), result); + if (isDeep) { + result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); + } + var length = paths.length; + while (length--) { + baseUnset(result, paths[length]); + } + return result; }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(baseIteratee(predicate))); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; + + /** + * The opposite of `_.pickBy`; this method creates an object composed of + * the own and inherited enumerable string keyed properties of `object` that + * `predicate` doesn't return truthy for. The predicate is invoked with two + * arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.omitBy(object, _.isNumber); + * // => { 'b': '2' } + */ + function omitBy(object, predicate) { + return pickBy(object, negate(baseIteratee(predicate))); + } + + /** + * Creates an object composed of the picked `object` properties. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The source object. + * @param {...(string|string[])} [paths] The property paths to pick. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pick(object, ['a', 'c']); + * // => { 'a': 1, 'c': 3 } + */ + var pick = flatRest(function (object, paths) { + return object == null ? {} : basePick(object, paths); }); - predicate = baseIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); + + /** + * Creates an object composed of the `object` properties `predicate` returns + * truthy for. The predicate is invoked with two arguments: (value, key). + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Object + * @param {Object} object The source object. + * @param {Function} [predicate=_.identity] The function invoked per property. + * @returns {Object} Returns the new object. + * @example + * + * var object = { 'a': 1, 'b': '2', 'c': 3 }; + * + * _.pickBy(object, _.isNumber); + * // => { 'a': 1, 'c': 3 } + */ + function pickBy(object, predicate) { + if (object == null) { + return {}; + } + var props = arrayMap(getAllKeysIn(object), function (prop) { + return [prop]; + }); + predicate = baseIteratee(predicate); + return basePickBy(object, props, function (value, path) { + return predicate(value, path[0]); + }); + } + + /** + * This method is like `_.get` except that if the resolved value is a + * function it's invoked with the `this` binding of its parent object and + * its result is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @param {Array|string} path The path of the property to resolve. + * @param {*} [defaultValue] The value returned for `undefined` resolved values. + * @returns {*} Returns the resolved value. + * @example + * + * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; + * + * _.result(object, 'a[0].b.c1'); + * // => 3 + * + * _.result(object, 'a[0].b.c2'); + * // => 4 + * + * _.result(object, 'a[0].b.c3', 'default'); + * // => 'default' + * + * _.result(object, 'a[0].b.c3', _.constant('default')); + * // => 'default' + */ + function result(object, path, defaultValue) { + path = castPath(path, object); + + var index = -1, + length = path.length; + + // Ensure the loop is entered when path is empty. + if (!length) { + length = 1; + object = undefined; + } + while (++index < length) { + var value = object == null ? undefined : object[toKey(path[index])]; + if (value === undefined) { + index = length; + value = defaultValue; + } + object = isFunction(value) ? value.call(object) : value; + } + return object; + } + + /** + * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, + * it's created. Arrays are created for missing index properties while objects + * are created for all other missing properties. Use `_.setWith` to customize + * `path` creation. + * + * **Note:** This method mutates `object`. + * + * @static + * @memberOf _ + * @since 3.7.0 + * @category Object + * @param {Object} object The object to modify. + * @param {Array|string} path The path of the property to set. + * @param {*} value The value to set. + * @returns {Object} Returns `object`. + * @example + * + * var object = { 'a': [{ 'b': { 'c': 3 } }] }; + * + * _.set(object, 'a[0].b.c', 4); + * console.log(object.a[0].b.c); + * // => 4 + * + * _.set(object, ['x', '0', 'y', 'z'], 5); + * console.log(object.x[0].y.z); + * // => 5 + */ + function set(object, path, value) { + return object == null ? object : baseSet(object, path, value); + } + + /** + * Creates an array of the own enumerable string keyed property values of `object`. + * + * **Note:** Non-object values are coerced to objects. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Object + * @param {Object} object The object to query. + * @returns {Array} Returns the array of property values. + * @example + * + * function Foo() { + * this.a = 1; + * this.b = 2; + * } + * + * Foo.prototype.c = 3; + * + * _.values(new Foo); + * // => [1, 2] (iteration order is not guaranteed) + * + * _.values('hi'); + * // => ['h', 'i'] + */ + function values(object) { + return object == null ? [] : baseValues(object, keys(object)); + } + + /*------------------------------------------------------------------------*/ + + /** + * Clamps `number` within the inclusive `lower` and `upper` bounds. + * + * @static + * @memberOf _ + * @since 4.0.0 + * @category Number + * @param {number} number The number to clamp. + * @param {number} [lower] The lower bound. + * @param {number} upper The upper bound. + * @returns {number} Returns the clamped number. + * @example + * + * _.clamp(-10, -5, 5); + * // => -5 + * + * _.clamp(10, -5, 5); + * // => 5 + */ + function clamp(number, lower, upper) { + if (upper === undefined) { + upper = lower; + lower = undefined; + } + if (upper !== undefined) { + upper = toNumber(upper); + upper = upper === upper ? upper : 0; + } + if (lower !== undefined) { + lower = toNumber(lower); + lower = lower === lower ? lower : 0; + } + return baseClamp(toNumber(number), lower, upper); + } + + /** + * Produces a random number between the inclusive `lower` and `upper` bounds. + * If only one argument is provided a number between `0` and the given number + * is returned. If `floating` is `true`, or either `lower` or `upper` are + * floats, a floating-point number is returned instead of an integer. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @memberOf _ + * @since 0.7.0 + * @category Number + * @param {number} [lower=0] The lower bound. + * @param {number} [upper=1] The upper bound. + * @param {boolean} [floating] Specify returning a floating-point number. + * @returns {number} Returns the random number. + * @example + * + * _.random(0, 5); + * // => an integer between 0 and 5 + * + * _.random(5); + * // => also an integer between 0 and 5 + * + * _.random(5, true); + * // => a floating-point number between 0 and 5 + * + * _.random(1.2, 5.2); + * // => a floating-point number between 1.2 and 5.2 + */ + function random(lower, upper, floating) { + if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { + upper = floating = undefined; + } + if (floating === undefined) { + if (typeof upper == 'boolean') { + floating = upper; + upper = undefined; + } else if (typeof lower == 'boolean') { + floating = lower; + lower = undefined; + } + } + if (lower === undefined && upper === undefined) { + lower = 0; + upper = 1; + } else { + lower = toFinite(lower); + if (upper === undefined) { + upper = lower; + lower = 0; + } else { + upper = toFinite(upper); + } + } + if (lower > upper) { + var temp = lower; + lower = upper; + upper = temp; + } + if (floating || lower % 1 || upper % 1) { + var rand = nativeRandom(); + return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); + } + return baseRandom(lower, upper); + } + + /*------------------------------------------------------------------------*/ + + /** + * Converts the characters "&", "<", ">", '"', and "'" in `string` to their + * corresponding HTML entities. + * + * **Note:** No other characters are escaped. To escape additional + * characters use a third-party library like [_he_](https://mths.be/he). + * + * Though the ">" character is escaped for symmetry, characters like + * ">" and "/" don't need escaping in HTML and have no special meaning + * unless they're part of a tag or unquoted attribute value. See + * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) + * (under "semi-related fun fact") for more details. + * + * When working with HTML you should always + * [quote attribute values](http://wonko.com/post/html-escaping) to reduce + * XSS vectors. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category String + * @param {string} [string=''] The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function escape(string) { + string = toString(string); + return (string && reHasUnescapedHtml.test(string)) + ? string.replace(reUnescapedHtml, escapeHtmlChar) + : string; + } + + /** + * Removes leading and trailing whitespace or specified characters from `string`. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category String + * @param {string} [string=''] The string to trim. + * @param {string} [chars=whitespace] The characters to trim. + * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. + * @returns {string} Returns the trimmed string. + * @example + * + * _.trim(' abc '); + * // => 'abc' + * + * _.trim('-_-abc-_-', '_-'); + * // => 'abc' + * + * _.map([' foo ', ' bar '], _.trim); + * // => ['foo', 'bar'] + */ + function trim(string, chars, guard) { + string = toString(string); + if (string && (guard || chars === undefined)) { + return string.replace(reTrim, ''); + } + if (!string || !(chars = baseToString(chars))) { + return string; + } + var strSymbols = stringToArray(string), + chrSymbols = stringToArray(chars), + start = charsStartIndex(strSymbols, chrSymbols), + end = charsEndIndex(strSymbols, chrSymbols) + 1; + + return castSlice(strSymbols, start, end).join(''); + } + + /** + * The inverse of `_.escape`; this method converts the HTML entities + * `&`, `<`, `>`, `"`, and `'` in `string` to + * their corresponding characters. + * + * **Note:** No other HTML entities are unescaped. To unescape additional + * HTML entities use a third-party library like [_he_](https://mths.be/he). + * + * @static + * @memberOf _ + * @since 0.6.0 + * @category String + * @param {string} [string=''] The string to unescape. + * @returns {string} Returns the unescaped string. + * @example + * + * _.unescape('fred, barney, & pebbles'); + * // => 'fred, barney, & pebbles' + */ + function unescape(string) { + string = toString(string); + return (string && reHasEscapedHtml.test(string)) + ? string.replace(reEscapedHtml, unescapeHtmlChar) + : string; + } + + /*------------------------------------------------------------------------*/ + + /** + * Creates a function that returns `value`. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {*} value The value to return from the new function. + * @returns {Function} Returns the new constant function. + * @example + * + * var objects = _.times(2, _.constant({ 'a': 1 })); + * + * console.log(objects); + * // => [{ 'a': 1 }, { 'a': 1 }] + * + * console.log(objects[0] === objects[1]); + * // => true + */ + function constant(value) { + return function () { + return value; + }; + } + + /** + * This method returns the first argument it receives. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {*} value Any value. + * @returns {*} Returns `value`. + * @example + * + * var object = { 'a': 1 }; + * + * console.log(_.identity(object) === object); + * // => true + */ + function identity(value) { + return value; + } + + /** + * Creates a function that invokes `func` with the arguments of the created + * function. If `func` is a property name, the created function returns the + * property value for a given element. If `func` is an array or object, the + * created function returns `true` for elements that contain the equivalent + * source properties, otherwise it returns `false`. + * + * @static + * @since 4.0.0 + * @memberOf _ + * @category Util + * @param {*} [func=_.identity] The value to convert to a callback. + * @returns {Function} Returns the callback. + * @example + * + * var users = [ + * { 'user': 'barney', 'age': 36, 'active': true }, + * { 'user': 'fred', 'age': 40, 'active': false } + * ]; + * + * // The `_.matches` iteratee shorthand. + * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); + * // => [{ 'user': 'barney', 'age': 36, 'active': true }] + * + * // The `_.matchesProperty` iteratee shorthand. + * _.filter(users, _.iteratee(['user', 'fred'])); + * // => [{ 'user': 'fred', 'age': 40 }] + * + * // The `_.property` iteratee shorthand. + * _.map(users, _.iteratee('user')); + * // => ['barney', 'fred'] + * + * // Create custom iteratee shorthands. + * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { + * return !_.isRegExp(func) ? iteratee(func) : function(string) { + * return func.test(string); + * }; + * }); + * + * _.filter(['abc', 'def'], /ef/); + * // => ['def'] + */ + function iteratee(func) { + return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); + } + + /** + * Creates a function that performs a partial deep comparison between a given + * object and `source`, returning `true` if the given object has equivalent + * property values, else `false`. + * + * **Note:** The created function is equivalent to `_.isMatch` with `source` + * partially applied. + * + * Partial comparisons will match empty array and empty object `source` + * values against any array or object value, respectively. See `_.isEqual` + * for a list of supported value comparisons. + * + * @static + * @memberOf _ + * @since 3.0.0 + * @category Util + * @param {Object} source The object of property values to match. + * @returns {Function} Returns the new spec function. + * @example + * + * var objects = [ + * { 'a': 1, 'b': 2, 'c': 3 }, + * { 'a': 4, 'b': 5, 'c': 6 } + * ]; + * + * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); + * // => [{ 'a': 4, 'b': 5, 'c': 6 }] + */ + function matches(source) { + return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); + } + + /** + * Adds all own enumerable string keyed function properties of a source + * object to the destination object. If `object` is a function, then methods + * are added to its prototype as well. + * + * **Note:** Use `_.runInContext` to create a pristine `lodash` function to + * avoid conflicts caused by modifying the original. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {Function|Object} [object=lodash] The destination object. + * @param {Object} source The object of functions to add. + * @param {Object} [options={}] The options object. + * @param {boolean} [options.chain=true] Specify whether mixins are chainable. + * @returns {Function|Object} Returns `object`. + * @example + * + * function vowels(string) { + * return _.filter(string, function(v) { + * return /[aeiou]/i.test(v); + * }); + * } + * + * _.mixin({ 'vowels': vowels }); + * _.vowels('fred'); + * // => ['e'] + * + * _('fred').vowels().value(); + * // => ['e'] + * + * _.mixin({ 'vowels': vowels }, { 'chain': false }); + * _('fred').vowels(); + * // => ['e'] + */ + function mixin(object, source, options) { + var props = keys(source), + methodNames = baseFunctions(source, props); + + if (options == null && + !(isObject(source) && (methodNames.length || !props.length))) { + options = source; + source = object; + object = this; + methodNames = baseFunctions(source, keys(source)); + } + var chain = !(isObject(options) && 'chain' in options) || !!options.chain, + isFunc = isFunction(object); + + arrayEach(methodNames, function (methodName) { + var func = source[methodName]; + object[methodName] = func; + if (isFunc) { + object.prototype[methodName] = function () { + var chainAll = this.__chain__; + if (chain || chainAll) { + var result = object(this.__wrapped__), + actions = result.__actions__ = copyArray(this.__actions__); + + actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); + result.__chain__ = chainAll; + return result; + } + return func.apply(object, arrayPush([this.value()], arguments)); + }; + } + }); + + return object; + } + + /** + * Reverts the `_` variable to its previous value and returns a reference to + * the `lodash` function. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @returns {Function} Returns the `lodash` function. + * @example + * + * var lodash = _.noConflict(); + */ + function noConflict() { + if (root._ === this) { + root._ = oldDash; + } + return this; + } + + /** + * This method returns `undefined`. + * + * @static + * @memberOf _ + * @since 2.3.0 + * @category Util + * @example + * + * _.times(2, _.noop); + * // => [undefined, undefined] + */ + function noop() { + // No operation performed. + } + + /** + * Creates a function that returns the value at `path` of a given object. + * + * @static + * @memberOf _ + * @since 2.4.0 + * @category Util + * @param {Array|string} path The path of the property to get. + * @returns {Function} Returns the new accessor function. + * @example + * + * var objects = [ + * { 'a': { 'b': 2 } }, + * { 'a': { 'b': 1 } } + * ]; + * + * _.map(objects, _.property('a.b')); + * // => [2, 1] + * + * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); + * // => [1, 2] + */ + function property(path) { + return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); + } + + /** + * Creates an array of numbers (positive and/or negative) progressing from + * `start` up to, but not including, `end`. A step of `-1` is used if a negative + * `start` is specified without an `end` or `step`. If `end` is not specified, + * it's set to `start` with `start` then set to `0`. + * + * **Note:** JavaScript follows the IEEE-754 standard for resolving + * floating-point values which can produce unexpected results. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {number} [start=0] The start of the range. + * @param {number} end The end of the range. + * @param {number} [step=1] The value to increment or decrement by. + * @returns {Array} Returns the range of numbers. + * @see _.inRange, _.rangeRight + * @example + * + * _.range(4); + * // => [0, 1, 2, 3] + * + * _.range(-4); + * // => [0, -1, -2, -3] + * + * _.range(1, 5); + * // => [1, 2, 3, 4] + * + * _.range(0, 20, 5); + * // => [0, 5, 10, 15] + * + * _.range(0, -4, -1); + * // => [0, -1, -2, -3] + * + * _.range(1, 4, 0); + * // => [1, 1, 1] + * + * _.range(0); + * // => [] + */ + var range = createRange(); + + /** + * This method returns a new empty array. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {Array} Returns the new empty array. + * @example + * + * var arrays = _.times(2, _.stubArray); + * + * console.log(arrays); + * // => [[], []] + * + * console.log(arrays[0] === arrays[1]); + * // => false + */ + function stubArray() { + return []; + } + + /** + * This method returns `false`. + * + * @static + * @memberOf _ + * @since 4.13.0 + * @category Util + * @returns {boolean} Returns `false`. + * @example + * + * _.times(2, _.stubFalse); + * // => [false, false] + */ + function stubFalse() { + return false; + } + + /** + * Generates a unique ID. If `prefix` is given, the ID is appended to it. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Util + * @param {string} [prefix=''] The value to prefix the ID with. + * @returns {string} Returns the unique ID. + * @example + * + * _.uniqueId('contact_'); + * // => 'contact_104' + * + * _.uniqueId(); + * // => '105' + */ + function uniqueId(prefix) { + var id = ++idCounter; + return toString(prefix) + id; + } + + /*------------------------------------------------------------------------*/ + + /** + * Computes the maximum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the maximum value. + * @example + * + * _.max([4, 2, 8, 6]); + * // => 8 + * + * _.max([]); + * // => undefined + */ + function max(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseGt) + : undefined; + } + + /** + * Computes the minimum value of `array`. If `array` is empty or falsey, + * `undefined` is returned. + * + * @static + * @since 0.1.0 + * @memberOf _ + * @category Math + * @param {Array} array The array to iterate over. + * @returns {*} Returns the minimum value. + * @example + * + * _.min([4, 2, 8, 6]); + * // => 2 + * + * _.min([]); + * // => undefined + */ + function min(array) { + return (array && array.length) + ? baseExtremum(array, identity, baseLt) + : undefined; + } + + /*------------------------------------------------------------------------*/ + + // Add methods that return wrapped values in chain sequences. + lodash.after = after; + lodash.assignIn = assignIn; + lodash.before = before; + lodash.bind = bind; + lodash.chain = chain; + lodash.chunk = chunk; + lodash.compact = compact; + lodash.concat = concat; + lodash.countBy = countBy; + lodash.create = create; + lodash.debounce = debounce; + lodash.defaults = defaults; + lodash.defaultsDeep = defaultsDeep; + lodash.defer = defer; + lodash.delay = delay; + lodash.difference = difference; + lodash.drop = drop; + lodash.filter = filter; + lodash.flatten = flatten; + lodash.flattenDeep = flattenDeep; + lodash.groupBy = groupBy; + lodash.initial = initial; + lodash.intersection = intersection; + lodash.invert = invert; + lodash.invertBy = invertBy; + lodash.iteratee = iteratee; + lodash.keys = keys; + lodash.map = map; + lodash.matches = matches; + lodash.merge = merge; + lodash.mixin = mixin; + lodash.negate = negate; + lodash.omit = omit; + lodash.omitBy = omitBy; + lodash.once = once; + lodash.pick = pick; + lodash.range = range; + lodash.reject = reject; + lodash.rest = rest; + lodash.set = set; + lodash.slice = slice; + lodash.sortBy = sortBy; + lodash.take = take; + lodash.takeRight = takeRight; + lodash.tap = tap; + lodash.throttle = throttle; + lodash.thru = thru; + lodash.toArray = toArray; + lodash.union = union; + lodash.uniq = uniq; + lodash.uniqBy = uniqBy; + lodash.unzip = unzip; + lodash.values = values; + lodash.without = without; + lodash.zip = zip; + lodash.zipObject = zipObject; + + // Add aliases. + lodash.extend = assignIn; + + // Add methods to `lodash.prototype`. + mixin(lodash, lodash); + + /*------------------------------------------------------------------------*/ + + // Add methods that return unwrapped values in chain sequences. + lodash.clamp = clamp; + lodash.clone = clone; + lodash.cloneDeep = cloneDeep; + lodash.escape = escape; + lodash.every = every; + lodash.find = find; + lodash.findIndex = findIndex; + lodash.findKey = findKey; + lodash.findLastIndex = findLastIndex; + lodash.findLastKey = findLastKey; + lodash.forEach = forEach; + lodash.get = get; + lodash.has = has; + lodash.head = head; + lodash.identity = identity; + lodash.indexOf = indexOf; + lodash.isArguments = isArguments; + lodash.isArray = isArray; + lodash.isArrayLike = isArrayLike; + lodash.isBoolean = isBoolean; + lodash.isDate = isDate; + lodash.isEmpty = isEmpty; + lodash.isEqual = isEqual; + lodash.isFinite = isFinite; + lodash.isFunction = isFunction; + lodash.isNaN = isNaN; + lodash.isNull = isNull; + lodash.isNumber = isNumber; + lodash.isObject = isObject; + lodash.isPlainObject = isPlainObject; + lodash.isRegExp = isRegExp; + lodash.isString = isString; + lodash.isUndefined = isUndefined; + lodash.last = last; + lodash.max = max; + lodash.min = min; + lodash.noConflict = noConflict; + lodash.noop = noop; + lodash.random = random; + lodash.reduce = reduce; + lodash.result = result; + lodash.size = size; + lodash.some = some; + lodash.trim = trim; + lodash.unescape = unescape; + lodash.uniqueId = uniqueId; + + // Add aliases. + lodash.each = forEach; + lodash.first = head; + + mixin(lodash, (function () { + var source = {}; + baseForOwn(lodash, function (func, methodName) { + if (!hasOwnProperty.call(lodash.prototype, methodName)) { + source[methodName] = func; + } + }); + return source; + }()), { 'chain': false }); + + /*------------------------------------------------------------------------*/ + + /** + * The semantic version number. + * + * @static + * @memberOf _ + * @type {string} + */ + lodash.VERSION = VERSION; + + // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. + arrayEach(['drop', 'take'], function (methodName, index) { + LazyWrapper.prototype[methodName] = function (n) { + n = n === undefined ? 1 : nativeMax(toInteger(n), 0); + + var result = (this.__filtered__ && !index) + ? new LazyWrapper(this) + : this.clone(); + + if (result.__filtered__) { + result.__takeCount__ = nativeMin(n, result.__takeCount__); + } else { + result.__views__.push({ + 'size': nativeMin(n, MAX_ARRAY_LENGTH), + 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') + }); + } + return result; + }; + + LazyWrapper.prototype[methodName + 'Right'] = function (n) { + return this.reverse()[methodName](n).reverse(); + }; }); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = castPath(path, object); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - length = 1; - object = undefined; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Removes leading and trailing whitespace or specified characters from `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to trim. - * @param {string} [chars=whitespace] The characters to trim. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the trimmed string. - * @example - * - * _.trim(' abc '); - * // => 'abc' - * - * _.trim('-_-abc-_-', '_-'); - * // => 'abc' - * - * _.map([' foo ', ' bar '], _.trim); - * // => ['foo', 'bar'] - */ - function trim(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === undefined)) { - return string.replace(reTrim, ''); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), - chrSymbols = stringToArray(chars), - start = charsStartIndex(strSymbols, chrSymbols), - end = charsEndIndex(strSymbols, chrSymbols) + 1; - - return castSlice(strSymbols, start, end).join(''); - } - - /** - * The inverse of `_.escape`; this method converts the HTML entities - * `&`, `<`, `>`, `"`, and `'` in `string` to - * their corresponding characters. - * - * **Note:** No other HTML entities are unescaped. To unescape additional - * HTML entities use a third-party library like [_he_](https://mths.be/he). - * - * @static - * @memberOf _ - * @since 0.6.0 - * @category String - * @param {string} [string=''] The string to unescape. - * @returns {string} Returns the unescaped string. - * @example - * - * _.unescape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function unescape(string) { - string = toString(string); - return (string && reHasEscapedHtml.test(string)) - ? string.replace(reEscapedHtml, unescapeHtmlChar) - : string; - } - - /*------------------------------------------------------------------------*/ - - /** - * Creates a function that returns `value`. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {*} value The value to return from the new function. - * @returns {Function} Returns the new constant function. - * @example - * - * var objects = _.times(2, _.constant({ 'a': 1 })); - * - * console.log(objects); - * // => [{ 'a': 1 }, { 'a': 1 }] - * - * console.log(objects[0] === objects[1]); - * // => true - */ - function constant(value) { - return function() { - return value; - }; - } - - /** - * This method returns the first argument it receives. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {*} value Any value. - * @returns {*} Returns `value`. - * @example - * - * var object = { 'a': 1 }; - * - * console.log(_.identity(object) === object); - * // => true - */ - function identity(value) { - return value; - } - - /** - * Creates a function that invokes `func` with the arguments of the created - * function. If `func` is a property name, the created function returns the - * property value for a given element. If `func` is an array or object, the - * created function returns `true` for elements that contain the equivalent - * source properties, otherwise it returns `false`. - * - * @static - * @since 4.0.0 - * @memberOf _ - * @category Util - * @param {*} [func=_.identity] The value to convert to a callback. - * @returns {Function} Returns the callback. - * @example - * - * var users = [ - * { 'user': 'barney', 'age': 36, 'active': true }, - * { 'user': 'fred', 'age': 40, 'active': false } - * ]; - * - * // The `_.matches` iteratee shorthand. - * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true })); - * // => [{ 'user': 'barney', 'age': 36, 'active': true }] - * - * // The `_.matchesProperty` iteratee shorthand. - * _.filter(users, _.iteratee(['user', 'fred'])); - * // => [{ 'user': 'fred', 'age': 40 }] - * - * // The `_.property` iteratee shorthand. - * _.map(users, _.iteratee('user')); - * // => ['barney', 'fred'] - * - * // Create custom iteratee shorthands. - * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) { - * return !_.isRegExp(func) ? iteratee(func) : function(string) { - * return func.test(string); - * }; - * }); - * - * _.filter(['abc', 'def'], /ef/); - * // => ['def'] - */ - function iteratee(func) { - return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG)); - } - - /** - * Creates a function that performs a partial deep comparison between a given - * object and `source`, returning `true` if the given object has equivalent - * property values, else `false`. - * - * **Note:** The created function is equivalent to `_.isMatch` with `source` - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Util - * @param {Object} source The object of property values to match. - * @returns {Function} Returns the new spec function. - * @example - * - * var objects = [ - * { 'a': 1, 'b': 2, 'c': 3 }, - * { 'a': 4, 'b': 5, 'c': 6 } - * ]; - * - * _.filter(objects, _.matches({ 'a': 4, 'c': 6 })); - * // => [{ 'a': 4, 'b': 5, 'c': 6 }] - */ - function matches(source) { - return baseMatches(baseClone(source, CLONE_DEEP_FLAG)); - } - - /** - * Adds all own enumerable string keyed function properties of a source - * object to the destination object. If `object` is a function, then methods - * are added to its prototype as well. - * - * **Note:** Use `_.runInContext` to create a pristine `lodash` function to - * avoid conflicts caused by modifying the original. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {Function|Object} [object=lodash] The destination object. - * @param {Object} source The object of functions to add. - * @param {Object} [options={}] The options object. - * @param {boolean} [options.chain=true] Specify whether mixins are chainable. - * @returns {Function|Object} Returns `object`. - * @example - * - * function vowels(string) { - * return _.filter(string, function(v) { - * return /[aeiou]/i.test(v); - * }); - * } - * - * _.mixin({ 'vowels': vowels }); - * _.vowels('fred'); - * // => ['e'] - * - * _('fred').vowels().value(); - * // => ['e'] - * - * _.mixin({ 'vowels': vowels }, { 'chain': false }); - * _('fred').vowels(); - * // => ['e'] - */ - function mixin(object, source, options) { - var props = keys(source), - methodNames = baseFunctions(source, props); - - if (options == null && - !(isObject(source) && (methodNames.length || !props.length))) { - options = source; - source = object; - object = this; - methodNames = baseFunctions(source, keys(source)); - } - var chain = !(isObject(options) && 'chain' in options) || !!options.chain, - isFunc = isFunction(object); - - arrayEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), - actions = result.__actions__ = copyArray(this.__actions__); - - actions.push({ 'func': func, 'args': arguments, 'thisArg': object }); - result.__chain__ = chainAll; + + // Add `LazyWrapper` methods that accept an `iteratee` value. + arrayEach(['filter', 'map', 'takeWhile'], function (methodName, index) { + var type = index + 1, + isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; + + LazyWrapper.prototype[methodName] = function (iteratee) { + var result = this.clone(); + result.__iteratees__.push({ + 'iteratee': getIteratee(iteratee, 3), + 'type': type + }); + result.__filtered__ = result.__filtered__ || isFilter; return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); }; - } }); - return object; - } - - /** - * Reverts the `_` variable to its previous value and returns a reference to - * the `lodash` function. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @returns {Function} Returns the `lodash` function. - * @example - * - * var lodash = _.noConflict(); - */ - function noConflict() { - if (root._ === this) { - root._ = oldDash; - } - return this; - } - - /** - * This method returns `undefined`. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Util - * @example - * - * _.times(2, _.noop); - * // => [undefined, undefined] - */ - function noop() { - // No operation performed. - } - - /** - * Creates a function that returns the value at `path` of a given object. - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Util - * @param {Array|string} path The path of the property to get. - * @returns {Function} Returns the new accessor function. - * @example - * - * var objects = [ - * { 'a': { 'b': 2 } }, - * { 'a': { 'b': 1 } } - * ]; - * - * _.map(objects, _.property('a.b')); - * // => [2, 1] - * - * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b'); - * // => [1, 2] - */ - function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); - } - - /** - * Creates an array of numbers (positive and/or negative) progressing from - * `start` up to, but not including, `end`. A step of `-1` is used if a negative - * `start` is specified without an `end` or `step`. If `end` is not specified, - * it's set to `start` with `start` then set to `0`. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @param {number} [step=1] The value to increment or decrement by. - * @returns {Array} Returns the range of numbers. - * @see _.inRange, _.rangeRight - * @example - * - * _.range(4); - * // => [0, 1, 2, 3] - * - * _.range(-4); - * // => [0, -1, -2, -3] - * - * _.range(1, 5); - * // => [1, 2, 3, 4] - * - * _.range(0, 20, 5); - * // => [0, 5, 10, 15] - * - * _.range(0, -4, -1); - * // => [0, -1, -2, -3] - * - * _.range(1, 4, 0); - * // => [1, 1, 1] - * - * _.range(0); - * // => [] - */ - var range = createRange(); - - /** - * This method returns a new empty array. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {Array} Returns the new empty array. - * @example - * - * var arrays = _.times(2, _.stubArray); - * - * console.log(arrays); - * // => [[], []] - * - * console.log(arrays[0] === arrays[1]); - * // => false - */ - function stubArray() { - return []; - } - - /** - * This method returns `false`. - * - * @static - * @memberOf _ - * @since 4.13.0 - * @category Util - * @returns {boolean} Returns `false`. - * @example - * - * _.times(2, _.stubFalse); - * // => [false, false] - */ - function stubFalse() { - return false; - } - - /** - * Generates a unique ID. If `prefix` is given, the ID is appended to it. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Util - * @param {string} [prefix=''] The value to prefix the ID with. - * @returns {string} Returns the unique ID. - * @example - * - * _.uniqueId('contact_'); - * // => 'contact_104' - * - * _.uniqueId(); - * // => '105' - */ - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - - /*------------------------------------------------------------------------*/ - - /** - * Computes the maximum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the maximum value. - * @example - * - * _.max([4, 2, 8, 6]); - * // => 8 - * - * _.max([]); - * // => undefined - */ - function max(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseGt) - : undefined; - } - - /** - * Computes the minimum value of `array`. If `array` is empty or falsey, - * `undefined` is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Math - * @param {Array} array The array to iterate over. - * @returns {*} Returns the minimum value. - * @example - * - * _.min([4, 2, 8, 6]); - * // => 2 - * - * _.min([]); - * // => undefined - */ - function min(array) { - return (array && array.length) - ? baseExtremum(array, identity, baseLt) - : undefined; - } - - /*------------------------------------------------------------------------*/ - - // Add methods that return wrapped values in chain sequences. - lodash.after = after; - lodash.assignIn = assignIn; - lodash.before = before; - lodash.bind = bind; - lodash.chain = chain; - lodash.compact = compact; - lodash.concat = concat; - lodash.countBy = countBy; - lodash.create = create; - lodash.debounce = debounce; - lodash.defaults = defaults; - lodash.defaultsDeep = defaultsDeep; - lodash.defer = defer; - lodash.delay = delay; - lodash.difference = difference; - lodash.drop = drop; - lodash.filter = filter; - lodash.flatten = flatten; - lodash.flattenDeep = flattenDeep; - lodash.groupBy = groupBy; - lodash.initial = initial; - lodash.intersection = intersection; - lodash.invert = invert; - lodash.invertBy = invertBy; - lodash.iteratee = iteratee; - lodash.keys = keys; - lodash.map = map; - lodash.matches = matches; - lodash.merge = merge; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.omit = omit; - lodash.omitBy = omitBy; - lodash.once = once; - lodash.pick = pick; - lodash.range = range; - lodash.reject = reject; - lodash.rest = rest; - lodash.set = set; - lodash.slice = slice; - lodash.sortBy = sortBy; - lodash.take = take; - lodash.takeRight = takeRight; - lodash.tap = tap; - lodash.throttle = throttle; - lodash.thru = thru; - lodash.toArray = toArray; - lodash.union = union; - lodash.uniq = uniq; - lodash.uniqBy = uniqBy; - lodash.unzip = unzip; - lodash.values = values; - lodash.without = without; - lodash.zip = zip; - lodash.zipObject = zipObject; - - // Add aliases. - lodash.extend = assignIn; - - // Add methods to `lodash.prototype`. - mixin(lodash, lodash); - - /*------------------------------------------------------------------------*/ - - // Add methods that return unwrapped values in chain sequences. - lodash.clamp = clamp; - lodash.clone = clone; - lodash.cloneDeep = cloneDeep; - lodash.escape = escape; - lodash.every = every; - lodash.find = find; - lodash.findIndex = findIndex; - lodash.findKey = findKey; - lodash.findLastIndex = findLastIndex; - lodash.findLastKey = findLastKey; - lodash.forEach = forEach; - lodash.get = get; - lodash.has = has; - lodash.head = head; - lodash.identity = identity; - lodash.indexOf = indexOf; - lodash.isArguments = isArguments; - lodash.isArray = isArray; - lodash.isArrayLike = isArrayLike; - lodash.isBoolean = isBoolean; - lodash.isDate = isDate; - lodash.isEmpty = isEmpty; - lodash.isEqual = isEqual; - lodash.isFinite = isFinite; - lodash.isFunction = isFunction; - lodash.isNaN = isNaN; - lodash.isNull = isNull; - lodash.isNumber = isNumber; - lodash.isObject = isObject; - lodash.isPlainObject = isPlainObject; - lodash.isRegExp = isRegExp; - lodash.isString = isString; - lodash.isUndefined = isUndefined; - lodash.last = last; - lodash.max = max; - lodash.min = min; - lodash.noConflict = noConflict; - lodash.noop = noop; - lodash.random = random; - lodash.reduce = reduce; - lodash.result = result; - lodash.size = size; - lodash.some = some; - lodash.trim = trim; - lodash.unescape = unescape; - lodash.uniqueId = uniqueId; - - // Add aliases. - lodash.each = forEach; - lodash.first = head; - - mixin(lodash, (function() { - var source = {}; - baseForOwn(lodash, function(func, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func; - } + // Add `LazyWrapper` methods for `_.head` and `_.last`. + arrayEach(['head', 'last'], function (methodName, index) { + var takeName = 'take' + (index ? 'Right' : ''); + + LazyWrapper.prototype[methodName] = function () { + return this[takeName](1).value()[0]; + }; + }); + + // Add `LazyWrapper` methods for `_.initial` and `_.tail`. + arrayEach(['initial', 'tail'], function (methodName, index) { + var dropName = 'drop' + (index ? '' : 'Right'); + + LazyWrapper.prototype[methodName] = function () { + return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); + }; }); - return source; - }()), { 'chain': false }); - - /*------------------------------------------------------------------------*/ - - /** - * The semantic version number. - * - * @static - * @memberOf _ - * @type {string} - */ - lodash.VERSION = VERSION; - - // Add `LazyWrapper` methods for `_.drop` and `_.take` variants. - arrayEach(['drop', 'take'], function(methodName, index) { - LazyWrapper.prototype[methodName] = function(n) { - n = n === undefined ? 1 : nativeMax(toInteger(n), 0); - - var result = (this.__filtered__ && !index) - ? new LazyWrapper(this) - : this.clone(); - - if (result.__filtered__) { - result.__takeCount__ = nativeMin(n, result.__takeCount__); - } else { - result.__views__.push({ - 'size': nativeMin(n, MAX_ARRAY_LENGTH), - 'type': methodName + (result.__dir__ < 0 ? 'Right' : '') - }); - } - return result; + + LazyWrapper.prototype.compact = function () { + return this.filter(identity); }; - LazyWrapper.prototype[methodName + 'Right'] = function(n) { - return this.reverse()[methodName](n).reverse(); + LazyWrapper.prototype.find = function (predicate) { + return this.filter(predicate).head(); }; - }); - - // Add `LazyWrapper` methods that accept an `iteratee` value. - arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) { - var type = index + 1, - isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; - - LazyWrapper.prototype[methodName] = function(iteratee) { - var result = this.clone(); - result.__iteratees__.push({ - 'iteratee': getIteratee(iteratee, 3), - 'type': type - }); - result.__filtered__ = result.__filtered__ || isFilter; - return result; + + LazyWrapper.prototype.findLast = function (predicate) { + return this.reverse().find(predicate); }; - }); - // Add `LazyWrapper` methods for `_.head` and `_.last`. - arrayEach(['head', 'last'], function(methodName, index) { - var takeName = 'take' + (index ? 'Right' : ''); + LazyWrapper.prototype.invokeMap = baseRest(function (path, args) { + if (typeof path == 'function') { + return new LazyWrapper(this); + } + return this.map(function (value) { + return baseInvoke(value, path, args); + }); + }); - LazyWrapper.prototype[methodName] = function() { - return this[takeName](1).value()[0]; + LazyWrapper.prototype.reject = function (predicate) { + return this.filter(negate(getIteratee(predicate))); }; - }); - // Add `LazyWrapper` methods for `_.initial` and `_.tail`. - arrayEach(['initial', 'tail'], function(methodName, index) { - var dropName = 'drop' + (index ? '' : 'Right'); + LazyWrapper.prototype.slice = function (start, end) { + start = toInteger(start); - LazyWrapper.prototype[methodName] = function() { - return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); + var result = this; + if (result.__filtered__ && (start > 0 || end < 0)) { + return new LazyWrapper(result); + } + if (start < 0) { + result = result.takeRight(-start); + } else if (start) { + result = result.drop(start); + } + if (end !== undefined) { + end = toInteger(end); + result = end < 0 ? result.dropRight(-end) : result.take(end - start); + } + return result; }; - }); - LazyWrapper.prototype.compact = function() { - return this.filter(identity); - }; + LazyWrapper.prototype.takeRightWhile = function (predicate) { + return this.reverse().takeWhile(predicate).reverse(); + }; - LazyWrapper.prototype.find = function(predicate) { - return this.filter(predicate).head(); - }; + LazyWrapper.prototype.toArray = function () { + return this.take(MAX_ARRAY_LENGTH); + }; - LazyWrapper.prototype.findLast = function(predicate) { - return this.reverse().find(predicate); - }; + // Add `LazyWrapper` methods to `lodash.prototype`. + baseForOwn(LazyWrapper.prototype, function (func, methodName) { + var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), + isTaker = /^(?:head|last)$/.test(methodName), + lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], + retUnwrapped = isTaker || /^find/.test(methodName); - LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { - if (typeof path == 'function') { - return new LazyWrapper(this); - } - return this.map(function(value) { - return baseInvoke(value, path, args); + if (!lodashFunc) { + return; + } + lodash.prototype[methodName] = function () { + var value = this.__wrapped__, + args = isTaker ? [1] : arguments, + isLazy = value instanceof LazyWrapper, + iteratee = args[0], + useLazy = isLazy || isArray(value); + + var interceptor = function (value) { + var result = lodashFunc.apply(lodash, arrayPush([value], args)); + return (isTaker && chainAll) ? result[0] : result; + }; + + if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { + // Avoid lazy use if the iteratee has a "length" value other than `1`. + isLazy = useLazy = false; + } + var chainAll = this.__chain__, + isHybrid = !!this.__actions__.length, + isUnwrapped = retUnwrapped && !chainAll, + onlyLazy = isLazy && !isHybrid; + + if (!retUnwrapped && useLazy) { + value = onlyLazy ? value : new LazyWrapper(this); + var result = func.apply(value, args); + result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); + return new LodashWrapper(result, chainAll); + } + if (isUnwrapped && onlyLazy) { + return func.apply(this, args); + } + result = this.thru(interceptor); + return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; + }; }); - }); - - LazyWrapper.prototype.reject = function(predicate) { - return this.filter(negate(getIteratee(predicate))); - }; - - LazyWrapper.prototype.slice = function(start, end) { - start = toInteger(start); - - var result = this; - if (result.__filtered__ && (start > 0 || end < 0)) { - return new LazyWrapper(result); - } - if (start < 0) { - result = result.takeRight(-start); - } else if (start) { - result = result.drop(start); - } - if (end !== undefined) { - end = toInteger(end); - result = end < 0 ? result.dropRight(-end) : result.take(end - start); - } - return result; - }; - - LazyWrapper.prototype.takeRightWhile = function(predicate) { - return this.reverse().takeWhile(predicate).reverse(); - }; - - LazyWrapper.prototype.toArray = function() { - return this.take(MAX_ARRAY_LENGTH); - }; - - // Add `LazyWrapper` methods to `lodash.prototype`. - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), - isTaker = /^(?:head|last)$/.test(methodName), - lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName], - retUnwrapped = isTaker || /^find/.test(methodName); - - if (!lodashFunc) { - return; - } - lodash.prototype[methodName] = function() { - var value = this.__wrapped__, - args = isTaker ? [1] : arguments, - isLazy = value instanceof LazyWrapper, - iteratee = args[0], - useLazy = isLazy || isArray(value); - - var interceptor = function(value) { - var result = lodashFunc.apply(lodash, arrayPush([value], args)); - return (isTaker && chainAll) ? result[0] : result; - }; - - if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) { - // Avoid lazy use if the iteratee has a "length" value other than `1`. - isLazy = useLazy = false; - } - var chainAll = this.__chain__, - isHybrid = !!this.__actions__.length, - isUnwrapped = retUnwrapped && !chainAll, - onlyLazy = isLazy && !isHybrid; - - if (!retUnwrapped && useLazy) { - value = onlyLazy ? value : new LazyWrapper(this); - var result = func.apply(value, args); - result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined }); - return new LodashWrapper(result, chainAll); - } - if (isUnwrapped && onlyLazy) { - return func.apply(this, args); - } - result = this.thru(interceptor); - return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result; - }; - }); - - // Add `Array` methods to `lodash.prototype`. - arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) { - var func = arrayProto[methodName], - chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', - retUnwrapped = /^(?:pop|shift)$/.test(methodName); - - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value) { - return func.apply(isArray(value) ? value : [], args); - }); - }; - }); - - // Map minified method names to their real names. - baseForOwn(LazyWrapper.prototype, function(func, methodName) { - var lodashFunc = lodash[methodName]; - if (lodashFunc) { - var key = (lodashFunc.name + ''), - names = realNames[key] || (realNames[key] = []); - - names.push({ 'name': methodName, 'func': lodashFunc }); - } - }); - - realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ - 'name': 'wrapper', - 'func': undefined - }]; - - // Add methods to `LazyWrapper`. - LazyWrapper.prototype.clone = lazyClone; - LazyWrapper.prototype.reverse = lazyReverse; - LazyWrapper.prototype.value = lazyValue; - - // Add lazy aliases. - lodash.prototype.first = lodash.prototype.head; - - if (symIterator) { - lodash.prototype[symIterator] = wrapperToIterator; - } - - /*--------------------------------------------------------------------------*/ - - // Some AMD build optimizers, like r.js, check for condition patterns like: - if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { - // Expose Lodash on the global object to prevent errors when Lodash is - // loaded by a script tag in the presence of an AMD loader. - // See http://requirejs.org/docs/errors.html#mismatch for more details. - // Use `_.noConflict` to remove Lodash from the global object. - BI._ = lodash; - - // Define as an anonymous module so, through path mapping, it can be - // referenced as the "underscore" module. - define(function() { - return lodash; + + // Add `Array` methods to `lodash.prototype`. + arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function (methodName) { + var func = arrayProto[methodName], + chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru', + retUnwrapped = /^(?:pop|shift)$/.test(methodName); + + lodash.prototype[methodName] = function () { + var args = arguments; + if (retUnwrapped && !this.__chain__) { + var value = this.value(); + return func.apply(isArray(value) ? value : [], args); + } + return this[chainName](function (value) { + return func.apply(isArray(value) ? value : [], args); + }); + }; }); - } - // Check for `exports` after `define` in case a build optimizer adds it. - else if (freeModule) { - // Export for Node.js. - (freeModule.exports = lodash)._ = lodash; - // Export for CommonJS support. - freeExports._ = lodash; - } - else { - // Export to the global object. - BI._ = lodash; - } + + // Map minified method names to their real names. + baseForOwn(LazyWrapper.prototype, function (func, methodName) { + var lodashFunc = lodash[methodName]; + if (lodashFunc) { + var key = (lodashFunc.name + ''), + names = realNames[key] || (realNames[key] = []); + + names.push({ 'name': methodName, 'func': lodashFunc }); + } + }); + + realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{ + 'name': 'wrapper', + 'func': undefined + }]; + + // Add methods to `LazyWrapper`. + LazyWrapper.prototype.clone = lazyClone; + LazyWrapper.prototype.reverse = lazyReverse; + LazyWrapper.prototype.value = lazyValue; + + // Add lazy aliases. + lodash.prototype.first = lodash.prototype.head; + + if (symIterator) { + lodash.prototype[symIterator] = wrapperToIterator; + } + + /*--------------------------------------------------------------------------*/ + + // Some AMD build optimizers, like r.js, check for condition patterns like: + if (typeof define == 'function' && typeof define.amd == 'object' && define.amd) { + // Expose Lodash on the global object to prevent errors when Lodash is + // loaded by a script tag in the presence of an AMD loader. + // See http://requirejs.org/docs/errors.html#mismatch for more details. + // Use `_.noConflict` to remove Lodash from the global object. + BI._ = lodash; + + // Define as an anonymous module so, through path mapping, it can be + // referenced as the "underscore" module. + define(function () { + return lodash; + }); + } + // Check for `exports` after `define` in case a build optimizer adds it. + else if (freeModule) { + // Export for Node.js. + (freeModule.exports = lodash)._ = lodash; + // Export for CommonJS support. + freeExports._ = lodash; + } else { + // Export to the global object. + BI._ = lodash; + } }.call(this)); diff --git a/src/core/2.base.js b/src/core/2.base.js index 7071eb3e1..36291cee2 100644 --- a/src/core/2.base.js +++ b/src/core/2.base.js @@ -526,7 +526,7 @@ return obj != null && obj == obj.window; }, - isPromise: function(obj) { + isPromise: function (obj) { return !!obj && (BI.isObject(obj) || BI.isFunction(obj)) && BI.isFunction(obj.then); } }); @@ -651,7 +651,7 @@ }); // 通用方法 - BI._.each(["uniqueId", "result", "chain", "iteratee", "escape", "unescape", "before", "after"], function (name) { + BI._.each(["uniqueId", "result", "chain", "iteratee", "escape", "unescape", "before", "after", "chunk"], function (name) { BI[name] = function () { return BI._[name].apply(BI._, arguments); }; From c2fcb6dca9a5f51d7e65b905574599c54af02e00 Mon Sep 17 00:00:00 2001 From: zsmj Date: Mon, 15 Aug 2022 18:35:08 +0800 Subject: [PATCH 102/161] =?UTF-8?q?=E6=97=A0JIRA=20node=E7=9A=84once?= =?UTF-8?q?=E6=94=B9=E7=94=B1options=E6=8E=A7=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/single/button/button.node.js | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/base/single/button/button.node.js b/src/base/single/button/button.node.js index 8e17a4ea5..23403f1b9 100644 --- a/src/base/single/button/button.node.js +++ b/src/base/single/button/button.node.js @@ -11,7 +11,8 @@ BI.NodeButton = BI.inherit(BI.BasicButton, { var conf = BI.NodeButton.superclass._defaultConfig.apply(this, arguments); return BI.extend(conf, { _baseCls: (conf._baseCls || "") + " bi-node", - open: false + open: false, + once: false, }); }, @@ -27,10 +28,6 @@ BI.NodeButton = BI.inherit(BI.BasicButton, { this.setOpened(!this.isOpened()); }, - isOnce: function () { - return false; - }, - isOpened: function () { return !!this.options.open; }, From 6754c9be665f05338776d77b864ef30d9ee4b99b Mon Sep 17 00:00:00 2001 From: data Date: Tue, 16 Aug 2022 09:29:26 +0800 Subject: [PATCH 103/161] auto upgrade version to 2.0.20220816092910 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index c19f537f9..7aeeb2aaf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220815172431", + "version": "2.0.20220816092910", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", @@ -85,4 +85,4 @@ }, "author": "fanruan", "license": "MIT" -} +} \ No newline at end of file From 419224bb6945bc636ec30789632d6ce4604711ed Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Tue, 16 Aug 2022 10:00:22 +0800 Subject: [PATCH 104/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/combination/combo.js | 4 +- src/base/combination/switcher.js | 6 +- src/base/pager/pager.js | 6 +- src/base/single/__test__/text.test.js | 27 ++- src/base/single/a/__test__/a.test.js | 11 +- src/base/single/a/a.js | 9 +- src/base/single/bar/bar.loading.js | 21 +-- .../button/buttons/__test__/button.test.js | 18 +- src/base/single/button/buttons/button.icon.js | 13 +- .../single/button/buttons/button.image.js | 11 +- src/base/single/button/buttons/button.js | 24 +-- src/base/single/button/buttons/button.text.js | 7 +- .../button/listitem/blankiconicontextitem.js | 17 +- .../button/listitem/blankicontexticonitem.js | 17 +- .../button/listitem/blankicontextitem.js | 15 +- .../button/listitem/icontexticonitem.js | 15 +- .../single/button/listitem/icontextitem.js | 13 +- .../single/button/listitem/texticonitem.js | 13 +- src/base/single/button/listitem/textitem.js | 9 +- src/base/single/editor/editor.textarea.js | 14 +- src/base/single/input/file.js | 156 ++++++++++-------- 21 files changed, 224 insertions(+), 202 deletions(-) diff --git a/src/base/combination/combo.js b/src/base/combination/combo.js index 23e05c8b8..5fc2f8008 100644 --- a/src/base/combination/combo.js +++ b/src/base/combination/combo.js @@ -95,7 +95,7 @@ element: this, }, BI.LogicFactory.createLogic("vertical", BI.extend(o.logic, { items: [ - { el: this.combo, } + { el: this.combo } ], })))); o.isDefaultInit && (this._assertPopupView()); @@ -160,7 +160,7 @@ this._assertPopupViewRender(); this.fireEvent(BI.Combo.EVENT_BEFORE_POPUPVIEW); // popupVisible是为了获取其宽高, 放到可视范围之外以防止在IE下闪一下 - this.popupView.css({ left: -999999999, top: -99999999, }); + this.popupView.css({ left: -999999999, top: -99999999 }); this.popupView.visible(); BI.each(needHideWhenAnotherComboOpen, function (i, combo) { if (i !== self.getName()) { diff --git a/src/base/combination/switcher.js b/src/base/combination/switcher.js index 3f5bd4936..419711595 100644 --- a/src/base/combination/switcher.js +++ b/src/base/combination/switcher.js @@ -65,7 +65,7 @@ BI.Switcher = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.switcher, } + { el: this.switcher } ], }); o.isDefaultInit && (this._assertPopupView()); @@ -138,7 +138,7 @@ BI.Switcher = BI.inherit(BI.Widget, { if (!this._created) { this.popupView = BI.createWidget(o.popup, { type: "bi.button_group", - element: o.adapter && BI.Maskers.create(this.getName(), o.adapter, BI.extend({ container: this, }, o.masker)), + element: o.adapter && BI.Maskers.create(this.getName(), o.adapter, BI.extend({ container: this }, o.masker)), cls: "switcher-popup", layouts: [{ type: "bi.vertical", @@ -159,7 +159,7 @@ BI.Switcher = BI.inherit(BI.Widget, { scrolly: false, element: this, items: [ - { el: this.popupView, } + { el: this.popupView } ], }); } diff --git a/src/base/pager/pager.js b/src/base/pager/pager.js index 757d5632b..129db1b8d 100644 --- a/src/base/pager/pager.js +++ b/src/base/pager/pager.js @@ -158,14 +158,14 @@ BI.Pager = BI.inherit(BI.Widget, { view.push((function () { if (BI.isKey(next)) { if (pages === false) { - return { text: next, value: "next", disabled: o.hasNext(curr) === false, }; + return { text: next, value: "next", disabled: o.hasNext(curr) === false }; } return (dict.flow && curr === pages) ? - { text: next, value: "next", disabled: true, } + { text: next, value: "next", disabled: true } : - { text: next, value: "next", disabled: !(curr !== pages && next || dict.flow), }; + { text: next, value: "next", disabled: !(curr !== pages && next || dict.flow) }; } return { diff --git a/src/base/single/__test__/text.test.js b/src/base/single/__test__/text.test.js index 9549b2d7e..bea099e8d 100644 --- a/src/base/single/__test__/text.test.js +++ b/src/base/single/__test__/text.test.js @@ -2,13 +2,12 @@ * Created by windy on 2018/01/23. */ describe("TextTest", function () { - /** * test_author_windy */ it("setText", function () { var text = BI.Test.createWidget({ - type: "bi.text" + type: "bi.text", }); text.setText("AAA"); expect(text.element.text()).to.equal("AAA"); @@ -20,9 +19,9 @@ describe("TextTest", function () { */ it("setStyle", function () { var text = BI.Test.createWidget({ - type: "bi.text" + type: "bi.text", }); - text.setStyle({"color": "red"}); + text.setStyle({ "color": "red" }); expect(text.element.getStyle("color")).to.equal("rgb(255, 0, 0)"); text.destroy(); }); @@ -34,7 +33,7 @@ describe("TextTest", function () { var text = BI.Test.createWidget({ type: "bi.text", text: "AAA", - highLight: true + highLight: true, }); expect(text.element.getStyle("color")).to.equal("rgb(54, 133, 242)"); text.destroy(); @@ -47,7 +46,7 @@ describe("TextTest", function () { var text = BI.Test.createWidget({ type: "bi.text", text: "我是要标红的A", - keyword: "A" + keyword: "A", }); expect(text.element.children(".bi-keyword-red-mark").length).to.not.equal(0); text.destroy(); @@ -61,7 +60,7 @@ describe("TextTest", function () { var text = BI.Test.createWidget({ type: "bi.text", text: "AAA", - highLight: true + highLight: true, }); text.unHighLight(); expect(text.element.getStyle("color")).to.not.equal("rgb(54, 133, 242)"); @@ -75,7 +74,7 @@ describe("TextTest", function () { var text = BI.Test.createWidget({ type: "bi.text", text: "我是要标红的A", - keyword: "A" + keyword: "A", }); text.unRedMark(); expect(text.element.children(".bi-keyword-red-mark").length).to.equal(0); @@ -103,7 +102,7 @@ describe("TextTest", function () { type: "bi.text", text: "我是要标红的A", vgap: 10, - hgap: 10 + hgap: 10, }); expect(text.element.css("padding")).to.equal("10px"); text.destroy(); @@ -129,7 +128,7 @@ describe("TextTest", function () { type: "bi.text", text: "我是A", lineHeight: 12, - height: 24 + height: 24, }); expect(text.element.css("height")).to.equal("24px"); expect(text.element.css("line-height")).to.equal("12px"); @@ -145,7 +144,7 @@ describe("TextTest", function () { text: "我是A", handler: function () { text.setText("handler"); - } + }, }); BI.nextTick(function () { text.text.element.click(); @@ -162,7 +161,7 @@ describe("TextTest", function () { var text = BI.Test.createWidget({ type: "bi.text", text: "", - value: "aaaa" + value: "aaaa", }); expect(text.element.text()).to.equal(""); text.destroy(); @@ -174,7 +173,7 @@ describe("TextTest", function () { it("text的value属性1", function () { var text = BI.Test.createWidget({ type: "bi.text", - value: "aaaa" + value: "aaaa", }); expect(text.element.text()).to.equal("aaaa"); text.destroy(); @@ -187,7 +186,7 @@ describe("TextTest", function () { var text = BI.Test.createWidget({ type: "bi.text", text: null, - value: "aaaa" + value: "aaaa", }); expect(text.element.text()).to.equal(""); text.destroy(); diff --git a/src/base/single/a/__test__/a.test.js b/src/base/single/a/__test__/a.test.js index 6a78187c2..77cdd5f40 100644 --- a/src/base/single/a/__test__/a.test.js +++ b/src/base/single/a/__test__/a.test.js @@ -2,16 +2,15 @@ * Created by windy on 2018/01/23. */ describe("ALinkTest", function () { - /** * test_author_windy */ it("A初始化测试", function () { var a = BI.Test.createWidget({ type: "bi.a", - text: "CCC" + text: "CCC", }); - expect(a.element.is('a')).to.equal(true); + expect(a.element.is("a")).to.equal(true); a.destroy(); }); @@ -23,10 +22,10 @@ describe("ALinkTest", function () { type: "bi.a", text: "DDD", el: { - type: "bi.label" - } + type: "bi.label", + }, }); - expect(a.element.is('a') && a.element.hasClass("bi-label")).to.equal(true); + expect(a.element.is("a") && a.element.hasClass("bi-label")).to.equal(true); a.destroy(); }); }); diff --git a/src/base/single/a/a.js b/src/base/single/a/a.js index 2bab1ea6d..9159f0a46 100644 --- a/src/base/single/a/a.js +++ b/src/base/single/a/a.js @@ -9,25 +9,26 @@ BI.A = BI.inherit(BI.Text, { _defaultConfig: function () { var conf = BI.A.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-a display-block", href: "", target: "_blank", el: null, - tagName: "a" + tagName: "a", }); }, render: function () { var o = this.options; BI.A.superclass.render.apply(this, arguments); - this.element.attr({href: o.href, target: o.target}); + this.element.attr({ href: o.href, target: o.target }); if (o.el) { BI.createWidget(o.el, { - element: this + element: this, }); } - } + }, }); BI.shortcut("bi.a", BI.A); diff --git a/src/base/single/bar/bar.loading.js b/src/base/single/bar/bar.loading.js index 27b54cd69..801331b15 100644 --- a/src/base/single/bar/bar.loading.js +++ b/src/base/single/bar/bar.loading.js @@ -6,10 +6,11 @@ BI.LoadingBar = BI.inherit(BI.Single, { _defaultConfig: function () { var conf = BI.LoadingBar.superclass._defaultConfig.apply(this, arguments); - return BI.extend( conf, { + + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-loading-bar bi-tips", height: 30, - handler: BI.emptyFn + handler: BI.emptyFn, }); }, @@ -20,7 +21,7 @@ BI.LoadingBar = BI.inherit(BI.Single, { cls: "loading-text bi-list-item-simple", text: BI.i18nText("BI-Load_More"), width: 120, - handler: this.options.handler + handler: this.options.handler, }); this.loaded.on(BI.Controller.EVENT_CHANGE, function (type) { self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); @@ -30,26 +31,26 @@ BI.LoadingBar = BI.inherit(BI.Single, { type: "bi.layout", width: this.options.height, height: this.options.height, - cls: "loading-background cursor-default" + cls: "loading-background cursor-default", }); var loaded = BI.createWidget({ type: "bi.center_adapt", - items: [this.loaded] + items: [this.loaded], }); var loading = BI.createWidget({ type: "bi.center_adapt", - items: [this.loading] + items: [this.loading], }); this.cardLayout = BI.createWidget({ type: "bi.card", element: this, items: [{ el: loaded, - cardName: "loaded" + cardName: "loaded", }, { el: loading, - cardName: "loading" - }] + cardName: "loading", + }], }); this.invisible(); }, @@ -74,7 +75,7 @@ BI.LoadingBar = BI.inherit(BI.Single, { setLoading: function () { this._reset(); this.cardLayout.showCardByName("loading"); - } + }, }); BI.shortcut("bi.loading_bar", BI.LoadingBar); diff --git a/src/base/single/button/buttons/__test__/button.test.js b/src/base/single/button/buttons/__test__/button.test.js index 2ef4e0c82..b5d9865d2 100644 --- a/src/base/single/button/buttons/__test__/button.test.js +++ b/src/base/single/button/buttons/__test__/button.test.js @@ -2,7 +2,6 @@ * Created by windy on 2018/01/23. */ describe("ButtonTest", function () { - /** * test_author_windy */ @@ -12,7 +11,7 @@ describe("ButtonTest", function () { text: "CCC", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { button.element.click(); @@ -20,7 +19,6 @@ describe("ButtonTest", function () { button.destroy(); done(); }); - }); @@ -34,7 +32,7 @@ describe("ButtonTest", function () { trigger: "mousedown", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { button.element.mousedown(); @@ -42,7 +40,6 @@ describe("ButtonTest", function () { button.destroy(); done(); }); - }); /** @@ -55,7 +52,7 @@ describe("ButtonTest", function () { trigger: "mouseup", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { button.element.mousedown(); @@ -64,7 +61,6 @@ describe("ButtonTest", function () { button.destroy(); done(); }); - }); /** @@ -77,7 +73,7 @@ describe("ButtonTest", function () { trigger: "dblclick", handler: function () { this.setText("click"); - } + }, }); BI.nextTick(function () { button.element.dblclick(); @@ -85,7 +81,6 @@ describe("ButtonTest", function () { button.destroy(); done(); }); - }); /** @@ -101,8 +96,8 @@ describe("ButtonTest", function () { eventName: BI.Button.EVENT_CHANGE, action: function () { clickNum++; - } - }] + }, + }], }); BI.nextTick(function () { button.element.mousedown(); @@ -112,6 +107,5 @@ describe("ButtonTest", function () { done(); }, 360); }); - }); }); diff --git a/src/base/single/button/buttons/button.icon.js b/src/base/single/button/buttons/button.icon.js index 3def60551..82048a029 100644 --- a/src/base/single/button/buttons/button.icon.js +++ b/src/base/single/button/buttons/button.icon.js @@ -6,6 +6,7 @@ BI.IconButton = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.IconButton.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { _baseCls: (conf._baseCls || "") + " bi-icon-button horizon-center", hgap: 0, @@ -15,19 +16,19 @@ BI.IconButton = BI.inherit(BI.BasicButton, { lgap: 0, rgap: 0, iconWidth: null, - iconHeight: null + iconHeight: null, }); }, render: function () { var o = this.options; this.element.css({ - textAlign: "center" + textAlign: "center", }); this.icon = BI.createWidget({ type: "bi.icon", width: o.iconWidth, - height: o.iconHeight + height: o.iconHeight, }); if (BI.isNumber(o.height) && o.height > 0 && BI.isNull(o.iconWidth) && BI.isNull(o.iconHeight)) { this.element.css("lineHeight", o.height / BI.pixRatio + BI.pixUnit); @@ -40,7 +41,7 @@ BI.IconButton = BI.inherit(BI.BasicButton, { rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, - items: [this.icon] + items: [this.icon], }); } else { this.element.css("lineHeight", "1"); @@ -53,7 +54,7 @@ BI.IconButton = BI.inherit(BI.BasicButton, { rgap: o.rgap, tgap: o.tgap, bgap: o.bgap, - items: [this.icon] + items: [this.icon], }); } }, @@ -63,7 +64,7 @@ BI.IconButton = BI.inherit(BI.BasicButton, { if (this.isValid()) { this.fireEvent(BI.IconButton.EVENT_CHANGE, this); } - } + }, }); BI.IconButton.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.icon_button", BI.IconButton); diff --git a/src/base/single/button/buttons/button.image.js b/src/base/single/button/buttons/button.image.js index 58be4351e..6eeeffbf1 100644 --- a/src/base/single/button/buttons/button.image.js +++ b/src/base/single/button/buttons/button.image.js @@ -8,11 +8,12 @@ BI.ImageButton = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.ImageButton.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-image-button", src: "", iconWidth: "100%", - iconHeight: "100%" + iconHeight: "100%", }); }, @@ -22,20 +23,20 @@ BI.ImageButton = BI.inherit(BI.BasicButton, { type: "bi.img", width: o.iconWidth, height: o.iconHeight, - src: o.src + src: o.src, }); if (BI.isNumber(o.iconWidth) || BI.isNumber(o.iconHeight)) { BI.createWidget({ type: "bi.center_adapt", element: this, - items: [this.image] + items: [this.image], }); } else { BI.createWidget({ type: "bi.adaptive", element: this, items: [this.image], - scrollable: false + scrollable: false, }); } }, @@ -80,7 +81,7 @@ BI.ImageButton = BI.inherit(BI.BasicButton, { if (this.isValid()) { this.fireEvent(BI.ImageButton.EVENT_CHANGE, this); } - } + }, }); BI.ImageButton.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.image_button", BI.ImageButton); diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index 8f46112ca..63b667aaa 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -16,7 +16,7 @@ BI.Button = BI.inherit(BI.BasicButton, { _const: { - iconWidth: 18 + iconWidth: 18, }, _defaultConfig: function (props) { @@ -37,7 +37,7 @@ return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-button" + ((BI.isIE() && BI.isIE9Below()) ? " hack" : ""), attributes: { - tabIndex: 1 + tabIndex: 1, }, minWidth: clearMinWidth ? 0 : 80, height: isVertical(props.iconPosition) ? adaptiveHeight : 24, @@ -63,7 +63,7 @@ lgap: 0, rgap: 0, iconGap: 0, - iconPosition: "left" + iconPosition: "left", }); }, @@ -99,7 +99,7 @@ // 不设置,自定义按钮无法居中 iconWidth: o.iconWidth, iconHeight: o.iconHeight, - invisible: iconInvisible + invisible: iconInvisible, }); // 用于 whiteSpace var textWidth = iconInvisible && o.width ? o.width - o.hgap * 2 : null; @@ -116,21 +116,21 @@ textHeight: textHeight, height: lineHeight, value: o.value, - title: null + title: null, }); var layoutType = "bi.horizontal"; var gapContainer = { lgap: o.iconPosition === "left" && o.text ? o.iconGap : 0, rgap: o.iconPosition === "right" ? o.iconGap : 0, tgap: o.iconPosition === "top" ? o.iconGap : 0, - bgap: o.iconPosition === "bottom" ? o.iconGap : 0 + bgap: o.iconPosition === "bottom" ? o.iconGap : 0, }; - var items = [this.icon, BI.extend({el: this.text}, gapContainer)]; + var items = [this.icon, BI.extend({ el: this.text }, gapContainer)]; if (isVertical(o.iconPosition)) { layoutType = "bi.vertical"; } if (o.iconPosition === "right" || o.iconPosition === "bottom") { - items = [BI.extend({el: this.text}, gapContainer), this.icon]; + items = [BI.extend({ el: this.text }, gapContainer), this.icon]; } // bi.center_adapt 作用:让 hgap 不影响 iconGap。 BI.createWidget({ @@ -142,8 +142,8 @@ type: layoutType, horizontalAlign: "center", verticalAlign: "middle", - items: items - }] + items: items, + }], }); var classArr = ["block", "clear", "ghost", "plain", "loading", "light"]; @@ -155,7 +155,7 @@ }); if (o.minWidth > 0) { - this.element.css({"min-width": o.minWidth / BI.pixRatio + BI.pixUnit}); + this.element.css({ "min-width": o.minWidth / BI.pixRatio + BI.pixUnit }); } }, @@ -232,7 +232,7 @@ unHighLight: function () { this.text.unHighLight.apply(this.text, arguments); - } + }, }); BI.shortcut("bi.button", BI.Button); BI.Button.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/base/single/button/buttons/button.text.js b/src/base/single/button/buttons/button.text.js index bbb3e0e50..38470c291 100644 --- a/src/base/single/button/buttons/button.text.js +++ b/src/base/single/button/buttons/button.text.js @@ -8,6 +8,7 @@ BI.TextButton = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.TextButton.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-text-button", textAlign: "center", @@ -18,7 +19,7 @@ BI.TextButton = BI.inherit(BI.BasicButton, { lgap: 0, rgap: 0, vgap: 0, - py: "" + py: "", }); }, @@ -40,7 +41,7 @@ BI.TextButton = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, py: o.py, - keyword: o.keyword + keyword: o.keyword, }); }, @@ -83,7 +84,7 @@ BI.TextButton = BI.inherit(BI.BasicButton, { text = BI.isArray(text) ? text.join(",") : text; this.text.setValue(text); } - } + }, }); BI.TextButton.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.text_button", BI.TextButton); diff --git a/src/base/single/button/listitem/blankiconicontextitem.js b/src/base/single/button/listitem/blankiconicontextitem.js index 2f1531835..1f6419008 100644 --- a/src/base/single/button/listitem/blankiconicontextitem.js +++ b/src/base/single/button/listitem/blankiconicontextitem.js @@ -9,6 +9,7 @@ BI.BlankIconIconTextItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.BlankIconIconTextItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-blank-icon-icon-text-item", iconCls1: "", @@ -19,7 +20,7 @@ BI.BlankIconIconTextItem = BI.inherit(BI.BasicButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -31,21 +32,21 @@ BI.BlankIconIconTextItem = BI.inherit(BI.BasicButton, { columnSize: [o.blankWidth, o.leftIconWrapperWidth || o.height, o.rightIconWrapperWidth || o.height, "fill"], items: [{ type: "bi.layout", - width: o.blankWidth + width: o.blankWidth, }, { type: "bi.icon_label", cls: o.iconCls1, width: o.leftIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { type: "bi.icon_label", cls: o.iconCls2, width: o.rightIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { el: { type: "bi.label", @@ -60,9 +61,9 @@ BI.BlankIconIconTextItem = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } - }] + height: o.height, + }, + }], }; }, @@ -111,7 +112,7 @@ BI.BlankIconIconTextItem = BI.inherit(BI.BasicButton, { unHighLight: function () { this.text.unHighLight.apply(this.text, arguments); - } + }, }); BI.BlankIconIconTextItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.blank_icon_icon_text_item", BI.BlankIconIconTextItem); diff --git a/src/base/single/button/listitem/blankicontexticonitem.js b/src/base/single/button/listitem/blankicontexticonitem.js index aeb876e9c..34dc9e7d8 100644 --- a/src/base/single/button/listitem/blankicontexticonitem.js +++ b/src/base/single/button/listitem/blankicontexticonitem.js @@ -10,6 +10,7 @@ BI.BlankIconTextIconItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.BlankIconTextIconItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-blank-icon-text-icon-item", iconCls1: "", @@ -20,7 +21,7 @@ BI.BlankIconTextIconItem = BI.inherit(BI.BasicButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -32,14 +33,14 @@ BI.BlankIconTextIconItem = BI.inherit(BI.BasicButton, { columnSize: [o.blankWidth, o.leftIconWrapperWidth || o.height, "fill", o.rightIconWrapperWidth || o.height], items: [{ type: "bi.layout", - width: o.blankWidth + width: o.blankWidth, }, { type: "bi.icon_label", cls: o.iconCls1, width: o.leftIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { el: { type: "bi.label", @@ -54,16 +55,16 @@ BI.BlankIconTextIconItem = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } + height: o.height, + }, }, { type: "bi.icon_label", cls: o.iconCls2, width: o.rightIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight - }] + iconHeight: o.iconHeight, + }], }; }, @@ -106,7 +107,7 @@ BI.BlankIconTextIconItem = BI.inherit(BI.BasicButton, { getText: function () { return this.text.getText(); - } + }, }); BI.BlankIconTextIconItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.blank_icon_text_icon_item", BI.BlankIconTextIconItem); diff --git a/src/base/single/button/listitem/blankicontextitem.js b/src/base/single/button/listitem/blankicontextitem.js index 158d05bf6..08f13d22d 100644 --- a/src/base/single/button/listitem/blankicontextitem.js +++ b/src/base/single/button/listitem/blankicontextitem.js @@ -9,6 +9,7 @@ BI.BlankIconTextItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.BlankIconTextItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-blank-icon-text-item", blankWidth: 0, @@ -18,7 +19,7 @@ BI.BlankIconTextItem = BI.inherit(BI.BasicButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -30,14 +31,14 @@ BI.BlankIconTextItem = BI.inherit(BI.BasicButton, { columnSize: [o.blankWidth, o.iconWrapperWidth || o.height, "fill"], items: [{ type: "bi.layout", - width: o.blankWidth + width: o.blankWidth, }, { type: "bi.icon_label", cls: o.iconCls, width: o.iconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { el: { type: "bi.label", @@ -53,9 +54,9 @@ BI.BlankIconTextItem = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } - }] + height: o.height, + }, + }], }; }, @@ -98,7 +99,7 @@ BI.BlankIconTextItem = BI.inherit(BI.BasicButton, { unHighLight: function () { this.text.unHighLight.apply(this.text, arguments); - } + }, }); BI.BlankIconTextItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.blank_icon_text_item", BI.BlankIconTextItem); diff --git a/src/base/single/button/listitem/icontexticonitem.js b/src/base/single/button/listitem/icontexticonitem.js index 4658bc471..425f47d90 100644 --- a/src/base/single/button/listitem/icontexticonitem.js +++ b/src/base/single/button/listitem/icontexticonitem.js @@ -10,6 +10,7 @@ BI.IconTextIconItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.IconTextIconItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-icon-text-icon-item", iconCls1: "", @@ -19,7 +20,7 @@ BI.IconTextIconItem = BI.inherit(BI.BasicButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -35,7 +36,7 @@ BI.IconTextIconItem = BI.inherit(BI.BasicButton, { width: o.leftIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { el: { type: "bi.label", @@ -50,16 +51,16 @@ BI.IconTextIconItem = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } + height: o.height, + }, }, { type: "bi.icon_label", cls: o.iconCls2, width: o.rightIconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight - }] + iconHeight: o.iconHeight, + }], }; }, @@ -102,7 +103,7 @@ BI.IconTextIconItem = BI.inherit(BI.BasicButton, { getText: function () { return this.text.getText(); - } + }, }); BI.IconTextIconItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.icon_text_icon_item", BI.IconTextIconItem); diff --git a/src/base/single/button/listitem/icontextitem.js b/src/base/single/button/listitem/icontextitem.js index a54da86f4..8fff16335 100644 --- a/src/base/single/button/listitem/icontextitem.js +++ b/src/base/single/button/listitem/icontextitem.js @@ -9,6 +9,7 @@ BI.IconTextItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.IconTextItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-icon-text-item", direction: BI.Direction.Left, @@ -19,7 +20,7 @@ BI.IconTextItem = BI.inherit(BI.BasicButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -35,7 +36,7 @@ BI.IconTextItem = BI.inherit(BI.BasicButton, { width: o.iconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight + iconHeight: o.iconHeight, }, { el: { type: "bi.label", @@ -51,9 +52,9 @@ BI.IconTextItem = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } - }] + height: o.height, + }, + }], }; }, @@ -96,7 +97,7 @@ BI.IconTextItem = BI.inherit(BI.BasicButton, { unHighLight: function () { this.text.unHighLight.apply(this.text, arguments); - } + }, }); BI.IconTextItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.icon_text_item", BI.IconTextItem); diff --git a/src/base/single/button/listitem/texticonitem.js b/src/base/single/button/listitem/texticonitem.js index a423195d4..a0ece74e6 100644 --- a/src/base/single/button/listitem/texticonitem.js +++ b/src/base/single/button/listitem/texticonitem.js @@ -10,6 +10,7 @@ BI.TextIconItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.TextIconItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-text-icon-item", iconWrapperWidth: null, @@ -19,7 +20,7 @@ BI.TextIconItem = BI.inherit(BI.BasicButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -44,16 +45,16 @@ BI.TextIconItem = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, keyword: o.keyword, - height: o.height - } + height: o.height, + }, }, { type: "bi.icon_label", cls: o.iconCls, width: o.iconWrapperWidth || o.height, height: o.height, iconWidth: o.iconWidth, - iconHeight: o.iconHeight - }] + iconHeight: o.iconHeight, + }], }; }, @@ -96,7 +97,7 @@ BI.TextIconItem = BI.inherit(BI.BasicButton, { unHighLight: function () { this.text.unHighLight.apply(this.text, arguments); - } + }, }); BI.TextIconItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.text_icon_item", BI.TextIconItem); diff --git a/src/base/single/button/listitem/textitem.js b/src/base/single/button/listitem/textitem.js index ffbcc1efd..c4c810295 100644 --- a/src/base/single/button/listitem/textitem.js +++ b/src/base/single/button/listitem/textitem.js @@ -10,6 +10,7 @@ BI.TextItem = BI.inherit(BI.BasicButton, { _defaultConfig: function () { var conf = BI.TextItem.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-text-item", textAlign: "left", @@ -17,7 +18,7 @@ BI.TextItem = BI.inherit(BI.BasicButton, { textHgap: 0, textVgap: 0, textLgap: 0, - textRgap: 0 + textRgap: 0, }); }, @@ -28,7 +29,7 @@ BI.TextItem = BI.inherit(BI.BasicButton, { element: this, textAlign: o.textAlign, whiteSpace: o.whiteSpace, - textHeight: o.whiteSpace == "nowrap" ? o.height : o.textHeight, + textHeight: o.whiteSpace === "nowrap" ? o.height : o.textHeight, height: o.height, hgap: o.textHgap, vgap: o.textVgap, @@ -37,7 +38,7 @@ BI.TextItem = BI.inherit(BI.BasicButton, { text: o.text, value: o.value, keyword: o.keyword, - py: o.py + py: o.py, }); }, @@ -80,7 +81,7 @@ BI.TextItem = BI.inherit(BI.BasicButton, { getText: function () { return this.text.getText(); - } + }, }); BI.TextItem.EVENT_CHANGE = "EVENT_CHANGE"; BI.shortcut("bi.text_item", BI.TextItem); diff --git a/src/base/single/editor/editor.textarea.js b/src/base/single/editor/editor.textarea.js index 67a197ddd..9f91b0ce4 100644 --- a/src/base/single/editor/editor.textarea.js +++ b/src/base/single/editor/editor.textarea.js @@ -39,13 +39,13 @@ BI.TextAreaEditor = BI.inherit(BI.Single, { items: [{ el: { type: "bi.adaptive", - items: [this.content] + items: [this.content], }, left: 4, right: 4, top: 2, - bottom: 2 - }] + bottom: 2, + }], }); this.content.element.on("input propertychange", function (e) { @@ -139,8 +139,8 @@ BI.TextAreaEditor = BI.inherit(BI.Single, { el: this.watermark, left: 0, top: 0, - right: 0 - }] + right: 0, + }], }); } else { this.watermark.setText(o.watermark); @@ -221,7 +221,7 @@ BI.TextAreaEditor = BI.inherit(BI.Single, { this.style = style; this.element.css(style); this.content.element.css(BI.extend({}, style, { - color: style.color || BI.DOM.getContrastColor(BI.DOM.isRGBColor(style.backgroundColor) ? BI.DOM.rgb2hex(style.backgroundColor) : style.backgroundColor) + color: style.color || BI.DOM.getContrastColor(BI.DOM.isRGBColor(style.backgroundColor) ? BI.DOM.rgb2hex(style.backgroundColor) : style.backgroundColor), })); }, @@ -243,7 +243,7 @@ BI.TextAreaEditor = BI.inherit(BI.Single, { _setEnable: function (b) { BI.TextAreaEditor.superclass._setEnable.apply(this, [b]); this.content && (this.content.element[0].disabled = !b); - } + }, }); BI.TextAreaEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.TextAreaEditor.EVENT_BLUR = "EVENT_BLUR"; diff --git a/src/base/single/input/file.js b/src/base/single/input/file.js index ff211e6f1..5de5309c3 100644 --- a/src/base/single/input/file.js +++ b/src/base/single/input/file.js @@ -6,24 +6,24 @@ * @extends BI.Single * @abstract */ -(function (document) { - +((function (document) { /** * @description normalize input.files. create if not present, add item method if not present * @param Object generated wrap object * @return Object the wrap object itself */ - var F = (function (item) { + var F = ((function (item) { return function (input) { var files = input.files || [input]; if (!files.item) { files.item = item; } + return files; }; })(function (i) { return this[i]; - }); + })); var event = { @@ -37,10 +37,12 @@ add: document.addEventListener ? function (node, name, callback) { node.addEventListener(name, callback, false); + return this; } : function (node, name, callback) { node.attachEvent("on" + name, callback); + return this; }, @@ -54,10 +56,12 @@ del: document.removeEventListener ? function (node, name, callback) { node.removeEventListener(name, callback, false); + return this; } : function (node, name, callback) { node.detachEvent("on" + name, callback); + return this; }, @@ -77,11 +81,16 @@ } return false; - } + }, }; var sendFile = (function (toString) { - var multipart = function (boundary, name, file) { + var split = "onabort.onerror.onloadstart.onprogress".split("."), + length = split.length, + CRLF = "\r\n", + xhr = XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP"), + sendFile; + function multipart(boundary, name, file) { return "--".concat( boundary, CRLF, "Content-Disposition: form-data; name=\"", name, "\"; filename=\"", _global.encodeURIComponent(file.fileName), "\"", CRLF, @@ -90,15 +99,11 @@ file.getAsBinary(), CRLF, "--", boundary, "--", CRLF ); - }, - isFunction = function (Function) { + } + function isFunction (Function) { return toString.call(Function) === "[object Function]"; - }, - split = "onabort.onerror.onloadstart.onprogress".split("."), - length = split.length, - CRLF = "\r\n", - xhr = XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP"), - sendFile; + } + // FireFox 3+, Safari 4 beta (Chrome 2 beta file is buggy and will not work) if (xhr.upload || xhr.sendAsBinary) { @@ -108,14 +113,15 @@ if (isFunction(handler.onerror)) { handler.onerror(); } - return; + +return; } for (var xhr = new XMLHttpRequest, upload = xhr.upload || { addEventListener: function (event, callback) { this["on" + event] = callback; - } + }, }, i = 0; i < length; @@ -129,7 +135,7 @@ handler[event](rpe, xhr); } }; - })(split[i]), + }(split[i])), false ); } @@ -174,49 +180,53 @@ }; xhr.onreadystatechange = function () { switch (xhr.readyState) { - case 2: - case 3: + case 2: + case 3: if (rpe.total <= rpe.loaded) { rpe.loaded = rpe.total; } upload.onprogress(rpe); break; - case 4: + case 4: clearInterval(rpe.interval); rpe.interval = 0; rpe.loaded = rpe.total; upload.onprogress(rpe); if (199 < xhr.status && xhr.status < 400) { - upload["onload"]({}); + upload.onload({}); var attachO = BI.jsonDecode(xhr.responseText); attachO.filename = handler.file.fileName; - if (handler.file.type.indexOf("image") != -1) { + if (handler.file.type.indexOf("image") !== -1) { attachO.attach_type = "image"; } handler.attach_array[current] = attachO; } else { - upload["onerror"]({}); + upload.onerror({}); } break; + default: + break; } }; upload.onloadstart(rpe); } else { xhr.onreadystatechange = function () { switch (xhr.readyState) { - case 4: + case 4: var attachO = BI.jsonDecode(xhr.responseText); - if (handler.file.type.indexOf("image") != -1) { + if (handler.file.type.indexOf("image") !== -1) { attachO.attach_type = "image"; } attachO.filename = handler.file.fileName; - if (handler.maxLength == 1) { + if (handler.maxLength === 1) { handler.attach_array[0] = attachO; // handler.attach_array.push(attachO); } else { handler.attach_array[current] = attachO; } break; + default: + break; } }; if (isFunction(upload.onloadstart)) { @@ -235,11 +245,11 @@ form.append("FileData", handler.file); xhr.send(form); } - return handler; + +return handler; }; - } - // Internet Explorer, Opera, others - else { + } else { + // Internet Explorer, Opera, others sendFile = function (handler, maxSize, width, height) { var current = handler.current; var url = handler.url.concat(-1 === handler.url.indexOf("?") ? "?" : "&", "AjaxUploadFrame=true"), @@ -251,9 +261,10 @@ if (isFunction(handler.onprogress)) { handler.onprogress(rpe, {}); } - }, 100) + }, 100), }, - onload = function () { + target = ["AjaxUpload", (new Date).getTime(), String(Math.random()).substring(2)].join("_"); + function onload() { iframe.onreadystatechange = iframe.onload = iframe.onerror = null; form.parentNode.removeChild(form); form = null; @@ -262,7 +273,7 @@ try { var responseText = (iframe.contentWindow.document || iframe.contentWindow.contentDocument).body.innerHTML; var attachO = BI.jsonDecode(responseText); - if (handler.file.type.indexOf("image") != -1) { + if (handler.file.type.indexOf("image") !== -1) { attachO.attach_type = "image"; } @@ -273,7 +284,7 @@ } catch (e) { attachO.filename = handler.file.fileName; } - if (handler.maxLength == 1) { + if (handler.maxLength === 1) { handler.attach_array[0] = attachO; } else { handler.attach_array[current] = attachO; @@ -286,8 +297,8 @@ if (isFunction(handler.onload)) { handler.onload(rpe, { responseText: responseText }); } - }, - target = ["AjaxUpload", (new Date).getTime(), String(Math.random()).substring(2)].join("_"); + } + try { // IE < 8 does not accept enctype attribute ... var form = document.createElement("
    "), iframe = handler.iframe || (handler.iframe = document.createElement("")); @@ -320,8 +331,8 @@ loading: 2, interactive: 3, loaded: 4, - complete: 4 - }[iframe.readyState] || 1 + complete: 4, + }[iframe.readyState] || 1, }); } }; @@ -342,13 +353,12 @@ }; } xhr = null; - return sendFile; - })(Object.prototype.toString); - - var sendFiles = function (handler, maxSize, width, height) { + +return sendFile; + }(Object.prototype.toString)); + function sendFiles(handler, maxSize, width, height) { var length = handler.files.length, - i = 0, onload = handler.onload, onloadstart = handler.onloadstart; handler.current = 0; @@ -401,11 +411,12 @@ } }; } + return handler; - }; + } - var r1 = /\.([^.]+)$/; // .png - var r2 = /\/([^/]+)$/; // image/png + var r1 = /\.([^.]+)$/; // .png + var r2 = /\/([^/]+)$/; // image/png /** * 校验文件类型是否合法,同时兼容旧版形式 @@ -413,7 +424,7 @@ * @param fileType * @returns {boolean} */ - var fileTypeValidate = function (fileName, fileType) { + function fileTypeValidate(fileName, fileType) { if (!fileType) { return true; } @@ -421,25 +432,29 @@ if (mimes[0] === fileType) { mimes = (fileType + "").split(";"); } + return BI.some(mimes, function (index, mime) { var matches; - if (matches = mime.match(r1)) { + matches = mime.match(r1); + if (matches) { return fileName.toLowerCase().indexOf(matches[1]) > -1; } - if (matches = mime.match(r2)) { + matches = mime.match(r2); + if (matches) { return matches[1] === "*" ? true : fileName.toLowerCase().indexOf(matches[1]) > -1; } }); - }; + } BI.File = BI.inherit(BI.Widget, { _defaultConfig: function () { var conf = BI.File.superclass._defaultConfig.apply(this, arguments); + return BI.extend(conf, { baseCls: (conf.baseCls || "") + " bi-file display-block", tagName: "input", attributes: { - type: "file" + type: "file", }, name: "", url: "", @@ -452,7 +467,7 @@ }, render: function () { - var self = this, o = this.options; + var o = this.options; if (o.multiple === true) { this.element.attr("multiple", "multiple"); } @@ -498,7 +513,7 @@ file: this.file, total: rpe.total, loaded: rpe.loaded, - simulation: rpe.simulation + simulation: rpe.simulation, }); }; @@ -522,19 +537,21 @@ if (200 > xhr.status || xhr.status > 399) { BI.Msg.toast(BI.i18nText("BI-Upload_File_Error"), { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR); + return; } var error = BI.some(_wrap.attach_array, function (index, attach) { if (attach.errorCode) { BI.Msg.toast(BI.i18nText(attach.errorMsg), { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR, attach); + return true; } }); !error && self.fireEvent(BI.File.EVENT_UPLOADED); }; _wrap.url = o.url; - _wrap.fileType = o.accept; // 文件类型限制 + _wrap.fileType = o.accept; // 文件类型限制 _wrap.attach_array = []; _wrap.attach_names = []; _wrap.attachNum = 0; @@ -548,35 +565,34 @@ var files = F(wrap.dom.input); if (o.maxLength !== -1 && o.maxLength < files.length) { self.fireEvent(BI.File.EVENT_ERROR, { - errorType: 2 + errorType: 2, }); } else { for (var i = 0; i < files.length; i++) { var item = files.item(i); var tempFile = item.value || item.name; var value = item.fileName || (item.fileName = tempFile.split("\\").pop()), - ext = -1 !== value.indexOf(".") ? value.split(".").pop().toLowerCase() : "unknown", size = item.fileSize || item.size; var validateFileType = fileTypeValidate(value, wrap.fileType); if (!validateFileType) { // 文件类型不支持 BI.Msg.toast(o.errorText({ errorType: 0, - file: item + file: item, }) || BI.i18nText("BI-Upload_File_Type_Error", wrap.fileType), { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR, { errorType: 0, - file: item + file: item, }); } else if (wrap.maxSize !== -1 && size && wrap.maxSize < size) { // 文件大小不支持 BI.Msg.toast(o.errorText({ errorType: 1, - file: item + file: item, }) || BI.i18nText("BI-Upload_File_Size_Error", Math.ceil(wrap.maxSize / 1024 / 1024)), { level: "error" }); self.fireEvent(BI.File.EVENT_ERROR, { errorType: 1, - file: item + file: item, }); } else { wrap.files.unshift(item); @@ -584,18 +600,19 @@ } } wrap.files.length > 0 && self.fireEvent(BI.File.EVENT_CHANGE, { - files: wrap.files + files: wrap.files, }); input.value = ""; wrap.dom.input.parentNode.replaceChild(input, wrap.dom.input); wrap.dom.input = input; event.add(wrap.dom.input, "change", arguments.callee); }); + return wrap; }, _wrap: function () { - var self = this, o = this.options; + var o = this.options; // be sure input accept multiple files var input = this.element[0]; if (o.multiple === true) { @@ -608,14 +625,14 @@ // DOM namespace dom: { - input: input, // input file - disabled: false // internal use, checks input file state + input: input, // input file + disabled: false, // internal use, checks input file state }, - name: input.name, // name to send for each file ($_FILES[{name}] in the server) + name: input.name, // name to send for each file ($_FILES[{name}] in the server) // maxSize is the maximum amount of bytes for each file maxSize: o.maxSize ? o.maxSize >> 0 : -1, maxLength: o.maxLength, - files: [], // file list + files: [], // file list // remove every file from the noswfupload component clean: function () { @@ -632,6 +649,7 @@ } } sendFiles(this, this.maxSize); + return this; }, @@ -651,7 +669,7 @@ this.dom.disabled = true; this.dom.input.setAttribute("disabled", "disabled"); } - } + }, }); }, @@ -710,7 +728,7 @@ } else { this.element.attr("disabled", "disabled"); } - } + }, }); BI.File.EVENT_CHANGE = "EVENT_CHANGE"; BI.File.EVENT_UPLOADSTART = "EVENT_UPLOADSTART"; @@ -718,4 +736,4 @@ BI.File.EVENT_PROGRESS = "EVENT_PROGRESS"; BI.File.EVENT_UPLOADED = "EVENT_UPLOADED"; BI.shortcut("bi.file", BI.File); -})(_global.document || {}); +})(_global.document || {})); From 10acbec4dc149c760c4fcd4ef5a9c6d135e9f419 Mon Sep 17 00:00:00 2001 From: zsmj Date: Tue, 16 Aug 2022 10:38:05 +0800 Subject: [PATCH 105/161] =?UTF-8?q?KERNEL-11286=20feat:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A1=86value,text,defaultText=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E8=A7=84=E5=88=99=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widget/multiselect/multiselect.combo.js | 2 +- .../multiselect/multiselect.combo.nobar.js | 2 +- .../trigger/editor/editor.patch.js | 4 +-- .../trigger/searcher.multiselect.js | 2 +- src/widget/multitree/multi.tree.combo.js | 1 - .../multitree/multi.tree.insert.combo.js | 33 ++++++++++--------- src/widget/multitree/multi.tree.list.combo.js | 1 - 7 files changed, 22 insertions(+), 23 deletions(-) diff --git a/src/widget/multiselect/multiselect.combo.js b/src/widget/multiselect/multiselect.combo.js index 23d5385b8..c370a48ee 100644 --- a/src/widget/multiselect/multiselect.combo.js +++ b/src/widget/multiselect/multiselect.combo.js @@ -47,7 +47,7 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { allowEdit: o.allowEdit, height: o.height - (o.simple ? 1 : 2), text: o.text, - // adapter: this.popup, + defaultText: o.defaultText, masker: { offset: { left: 0, diff --git a/src/widget/multiselect/multiselect.combo.nobar.js b/src/widget/multiselect/multiselect.combo.nobar.js index a72519750..0fe10f947 100644 --- a/src/widget/multiselect/multiselect.combo.nobar.js +++ b/src/widget/multiselect/multiselect.combo.nobar.js @@ -43,7 +43,7 @@ BI.MultiSelectNoBarCombo = BI.inherit(BI.Single, { type: "bi.multi_select_trigger", height: o.height - (o.simple ? 1 : 2), text: o.text, - // adapter: this.popup, + defaultText: o.defaultText, masker: { offset: { left: 0, diff --git a/src/widget/multiselect/trigger/editor/editor.patch.js b/src/widget/multiselect/trigger/editor/editor.patch.js index d19bac9bb..bec2ae7db 100644 --- a/src/widget/multiselect/trigger/editor/editor.patch.js +++ b/src/widget/multiselect/trigger/editor/editor.patch.js @@ -30,7 +30,7 @@ BI.SelectPatchEditor = BI.inherit(BI.Widget, { watermark: o.watermark, allowBlank: true, value: o.value, - defaultText: o.text, + defaultText: o.defaultText, text: o.text, tipType: o.tipType, warningTitle: o.warningTitle, @@ -211,4 +211,4 @@ BI.SelectPatchEditor.EVENT_CHANGE = "EVENT_CHANGE"; BI.SelectPatchEditor.EVENT_FOCUS = "EVENT_FOCUS"; BI.SelectPatchEditor.EVENT_BLUR = "EVENT_BLUR"; -BI.shortcut("bi.select_patch_editor", BI.SelectPatchEditor); \ No newline at end of file +BI.shortcut("bi.select_patch_editor", BI.SelectPatchEditor); diff --git a/src/widget/multiselect/trigger/searcher.multiselect.js b/src/widget/multiselect/trigger/searcher.multiselect.js index 433f31920..5744cd1de 100644 --- a/src/widget/multiselect/trigger/searcher.multiselect.js +++ b/src/widget/multiselect/trigger/searcher.multiselect.js @@ -15,7 +15,7 @@ BI.MultiSelectSearcher = BI.inherit(BI.Widget, { valueFormatter: BI.emptyFn, adapter: null, masker: {}, - text: BI.i18nText("BI-Basic_Please_Select"), + defaultText: BI.i18nText("BI-Basic_Please_Select"), itemHeight: 24 }); }, diff --git a/src/widget/multitree/multi.tree.combo.js b/src/widget/multitree/multi.tree.combo.js index 3b55ee15c..f222e6f6e 100644 --- a/src/widget/multitree/multi.tree.combo.js +++ b/src/widget/multitree/multi.tree.combo.js @@ -32,7 +32,6 @@ BI.MultiTreeCombo = BI.inherit(BI.Single, { text: o.text, defaultText: o.defaultText, watermark: o.watermark, - // adapter: this.popup, masker: { offset: { left: 0, diff --git a/src/widget/multitree/multi.tree.insert.combo.js b/src/widget/multitree/multi.tree.insert.combo.js index 9694b3556..5159c60dd 100644 --- a/src/widget/multitree/multi.tree.insert.combo.js +++ b/src/widget/multitree/multi.tree.insert.combo.js @@ -23,14 +23,16 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { var isInit = false; var want2showCounter = false; - this.storeValue = {value: o.value || {}}; + this.storeValue = { value: o.value || {} }; this.trigger = BI.createWidget({ type: "bi.multi_select_trigger", allowEdit: o.allowEdit, height: o.height - (o.simple ? 1 : 2), valueFormatter: o.valueFormatter, - // adapter: this.popup, + text: o.text, + defaultText: o.defaultText, + watermark: o.watermark, masker: { offset: { left: 0, @@ -41,8 +43,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { }, searcher: { type: "bi.multi_tree_searcher", - text: o.text, - watermark: o.watermark, + itemsCreator: o.itemsCreator, popup: { type: "bi.multi_tree_search_insert_pane", @@ -59,7 +60,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { }] } }, - value: {value: o.value || {}} + value: { value: o.value || {} } }); @@ -121,7 +122,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { maxWidth: o.isNeedAdjustWidth ? "auto" : 500, }, isNeedAdjustWidth: o.isNeedAdjustWidth, - value: {value: o.value || {}}, + value: { value: o.value || {} }, hideChecker: function (e) { return triggerBtn.element.find(e.target).length === 0 && self.numberCounter.element.find(e.target).length === 0; @@ -147,12 +148,12 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { }); this.trigger.on(BI.MultiSelectTrigger.EVENT_START, function () { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; this.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); }); this.trigger.on(BI.MultiSelectTrigger.EVENT_STOP, function () { - self.storeValue = {value: this.getValue()}; + self.storeValue = { value: this.getValue() }; self.combo.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); BI.nextTick(function () { @@ -167,11 +168,11 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { self.fireEvent(BI.MultiTreeInsertCombo.EVENT_SEARCHING); }); - function showCounter () { + function showCounter() { if (isSearching()) { - self.storeValue = {value: self.trigger.getValue()}; + self.storeValue = { value: self.trigger.getValue() }; } else if (isPopupView()) { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; } self.trigger.setValue(self.storeValue); self.numberCounter.setValue(self.storeValue); @@ -185,7 +186,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { var checked = this.getSearcher().hasChecked(); var val = { type: BI.Selection.Multi, - value: checked ? {1: 1} : {} + value: checked ? { 1: 1 } : {} }; this.getSearcher().setState(checked ? BI.Selection.Multi : BI.Selection.None); self.numberCounter.setButtonChecked(val); @@ -197,7 +198,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { return; } if (change === true) { - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; change = false; } self.combo.setValue(self.storeValue); @@ -212,9 +213,9 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { } else { if (isPopupView()) { self._stopEditing(); - self.storeValue = {value: self.combo.getValue()}; + self.storeValue = { value: self.combo.getValue() }; if (clear === true) { - self.storeValue = {value: {}}; + self.storeValue = { value: {} }; } self.fireEvent(BI.MultiTreeInsertCombo.EVENT_CONFIRM); } @@ -322,7 +323,7 @@ BI.MultiTreeInsertCombo = BI.inherit(BI.Single, { this.numberCounter.setButtonChecked(this.storeValue); }, - _stopEditing: function() { + _stopEditing: function () { this.trigger.stopEditing(); this.numberCounter.hideView(); }, diff --git a/src/widget/multitree/multi.tree.list.combo.js b/src/widget/multitree/multi.tree.list.combo.js index 559d6cf9c..a4fd16c72 100644 --- a/src/widget/multitree/multi.tree.list.combo.js +++ b/src/widget/multitree/multi.tree.list.combo.js @@ -35,7 +35,6 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { watermark: o.watermark, height: o.height - (o.simple ? 1 : 2), valueFormatter: o.valueFormatter, - // adapter: this.popup, masker: { offset: { left: 0, From dffc885cf90d9b4549cae84d346c688b021087c6 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 16 Aug 2022 10:57:47 +0800 Subject: [PATCH 106/161] auto upgrade version to 2.0.20220816105709 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7aeeb2aaf..fccc9cb31 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220816092910", + "version": "2.0.20220816105709", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 63aba7eebb095c5d1fbac3cf37915c32e13cab00 Mon Sep 17 00:00:00 2001 From: zsmj Date: Tue, 16 Aug 2022 11:28:54 +0800 Subject: [PATCH 107/161] =?UTF-8?q?KERNEL-11286=20feat:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A1=86value,text,defaultText=E5=B1=9E=E6=80=A7?= =?UTF-8?q?=E8=A7=84=E5=88=99=E7=BB=9F=E4=B8=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/editor/editor.state.js | 4 ++-- src/case/editor/editor.state.simple.js | 3 ++- src/case/trigger/trigger.text.select.js | 2 +- src/widget/multiselect/multiselect.insert.combo.js | 3 ++- src/widget/multiselect/multiselect.insert.trigger.js | 5 +++-- .../multiselect/trigger/searcher.multiselect.insert.js | 2 +- src/widget/multitree/multi.tree.list.combo.js | 6 ++---- src/widget/multitree/trigger/searcher.list.multi.tree.js | 2 +- 8 files changed, 14 insertions(+), 13 deletions(-) diff --git a/src/case/editor/editor.state.js b/src/case/editor/editor.state.js index d1e11b20a..e9d3900bd 100644 --- a/src/case/editor/editor.state.js +++ b/src/case/editor/editor.state.js @@ -21,8 +21,8 @@ BI.StateEditor = BI.inherit(BI.Widget, { watermark: "", errorText: "", height: 24, - defaultText: "", // 默认显示值,默认显示值与显示值的区别是默认显示值标记灰色 - text: BI.i18nText("BI-Basic_Unrestricted"), // 显示值 + defaultText: BI.i18nText("BI-Basic_Unrestricted"), // 默认显示值,默认显示值与显示值的区别是默认显示值标记灰色 + text: "", // 显示值 el: {} }); }, diff --git a/src/case/editor/editor.state.simple.js b/src/case/editor/editor.state.simple.js index ec895996b..4d17ab30e 100644 --- a/src/case/editor/editor.state.simple.js +++ b/src/case/editor/editor.state.simple.js @@ -22,7 +22,8 @@ BI.SimpleStateEditor = BI.inherit(BI.Widget, { watermark: "", errorText: "", height: 24, - text: BI.i18nText("BI-Basic_Unrestricted") + text: "", + defaultText: BI.i18nText("BI-Basic_Unrestricted"), }); }, diff --git a/src/case/trigger/trigger.text.select.js b/src/case/trigger/trigger.text.select.js index 1a74e7130..57cfadcb9 100644 --- a/src/case/trigger/trigger.text.select.js +++ b/src/case/trigger/trigger.text.select.js @@ -64,7 +64,7 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { if (result.length > 0) { return { textCls: "", - text: o.valueFormatter(val) || result.join(","), + text: o.valueFormatter(val) ?? result.join(","), }; } else { var text = BI.isFunction(o.text) ? o.text() : o.text; diff --git a/src/widget/multiselect/multiselect.insert.combo.js b/src/widget/multiselect/multiselect.insert.combo.js index b1b4a202e..329c0f3f9 100644 --- a/src/widget/multiselect/multiselect.insert.combo.js +++ b/src/widget/multiselect/multiselect.insert.combo.js @@ -43,6 +43,7 @@ BI.MultiSelectInsertCombo = BI.inherit(BI.Single, { height: o.height - (o.simple ? 1 : 2), text: o.text, watermark: o.watermark, + defaultText: o.defaultText, // adapter: this.popup, masker: { offset: { @@ -55,7 +56,7 @@ BI.MultiSelectInsertCombo = BI.inherit(BI.Single, { valueFormatter: o.valueFormatter, itemsCreator: BI.bind(this._itemsCreator4Trigger, this), itemHeight: o.itemHeight, - value: o.value + value: this.storeValue, }); this.trigger.on(BI.MultiSelectInsertTrigger.EVENT_FOCUS, function () { diff --git a/src/widget/multiselect/multiselect.insert.trigger.js b/src/widget/multiselect/multiselect.insert.trigger.js index f0cf6054c..b04aebd07 100644 --- a/src/widget/multiselect/multiselect.insert.trigger.js +++ b/src/widget/multiselect/multiselect.insert.trigger.js @@ -37,6 +37,7 @@ BI.MultiSelectInsertTrigger = BI.inherit(BI.Trigger, { type: "bi.multi_select_insert_searcher", height: o.height, text: o.text, + defaultText: o.defaultText, itemsCreator: o.itemsCreator, valueFormatter: o.valueFormatter, itemHeight: o.itemHeight, @@ -109,7 +110,7 @@ BI.MultiSelectInsertTrigger = BI.inherit(BI.Trigger, { /** * 重新调整numberCounter的空白占位符 */ - refreshPlaceHolderWidth: function(width) { + refreshPlaceHolderWidth: function (width) { this.wrapper.attr("items")[1].width = width; this.wrapper.resize(); }, @@ -150,4 +151,4 @@ BI.MultiSelectInsertTrigger.EVENT_BEFORE_COUNTER_POPUPVIEW = "EVENT_BEFORE_COUNT BI.MultiSelectInsertTrigger.EVENT_FOCUS = "EVENT_FOCUS"; BI.MultiSelectInsertTrigger.EVENT_BLUR = "EVENT_BLUR"; -BI.shortcut("bi.multi_select_insert_trigger", BI.MultiSelectInsertTrigger); \ No newline at end of file +BI.shortcut("bi.multi_select_insert_trigger", BI.MultiSelectInsertTrigger); diff --git a/src/widget/multiselect/trigger/searcher.multiselect.insert.js b/src/widget/multiselect/trigger/searcher.multiselect.insert.js index 36b3a115f..bf77db1e7 100644 --- a/src/widget/multiselect/trigger/searcher.multiselect.insert.js +++ b/src/widget/multiselect/trigger/searcher.multiselect.insert.js @@ -16,7 +16,6 @@ BI.MultiSelectInsertSearcher = BI.inherit(BI.Widget, { valueFormatter: BI.emptyFn, adapter: null, masker: {}, - text: BI.i18nText("BI-Basic_Please_Select"), watermark: BI.i18nText("BI-Basic_Search_And_Patch_Paste"), }); }, @@ -29,6 +28,7 @@ BI.MultiSelectInsertSearcher = BI.inherit(BI.Widget, { watermark: o.watermark, height: o.height, text: o.text, + defaultText: o.defaultText, listeners: [{ eventName: BI.MultiSelectEditor.EVENT_FOCUS, action: function () { diff --git a/src/widget/multitree/multi.tree.list.combo.js b/src/widget/multitree/multi.tree.list.combo.js index a4fd16c72..e22c5a7e0 100644 --- a/src/widget/multitree/multi.tree.list.combo.js +++ b/src/widget/multitree/multi.tree.list.combo.js @@ -15,7 +15,6 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { allowInsertValue: true, isNeedAdjustWidth: true, text: "", - defaultText: "", }); }, @@ -76,8 +75,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { itemsCreator: o.itemsCreator } }, - value: { value: o.value || {} } - + value: this.storeValue }); this.combo = BI.createWidget({ @@ -141,7 +139,7 @@ BI.MultiTreeListCombo = BI.inherit(BI.Single, { maxWidth: o.isNeedAdjustWidth ? "auto" : 500, }, isNeedAdjustWidth: o.isNeedAdjustWidth, - value: { value: o.value || {} }, + value: this.storeValue, hideChecker: function (e) { return triggerBtn.element.find(e.target).length === 0 && self.numberCounter.element.find(e.target).length === 0; diff --git a/src/widget/multitree/trigger/searcher.list.multi.tree.js b/src/widget/multitree/trigger/searcher.list.multi.tree.js index 1d213127a..8c54afe63 100644 --- a/src/widget/multitree/trigger/searcher.list.multi.tree.js +++ b/src/widget/multitree/trigger/searcher.list.multi.tree.js @@ -8,7 +8,7 @@ BI.MultiListTreeSearcher = BI.inherit(BI.Widget, { _defaultConfig: function () { return BI.extend(BI.MultiListTreeSearcher.superclass._defaultConfig.apply(this, arguments), { - baseCls: "bi-multi-tree-searcher", + baseCls: "bi-multi-list-tree-searcher", itemsCreator: BI.emptyFn, valueFormatter: function (v) { return v; From adf265507037d042d8ceb0fd9b95dfc283abc41e Mon Sep 17 00:00:00 2001 From: zsmj Date: Tue, 16 Aug 2022 12:30:59 +0800 Subject: [PATCH 108/161] =?UTF-8?q?REPORT-77978=20fix:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A0=91=E6=B0=B4=E5=8D=B0=E8=A1=A8=E7=8E=B0=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/trigger/trigger.text.select.js | 11 ++++++++++- .../multilayersingletree.combo.js | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/case/trigger/trigger.text.select.js b/src/case/trigger/trigger.text.select.js index 57cfadcb9..52d3878fb 100644 --- a/src/case/trigger/trigger.text.select.js +++ b/src/case/trigger/trigger.text.select.js @@ -53,7 +53,16 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { _digest: function (val, items) { var o = this.options; val = BI.isArray(val) ? val[0] : val; + + // 提升valueFormatter的优先级 + if (o.valueFormatter !== BI.emptyFn && BI.isFunction(o.valueFormatter)) { + return { + text: o.valueFormatter(val), + }; + } + var result = []; + var formatItems = BI.Tree.transformToArrayFormat(items); BI.each(formatItems, function (i, item) { if (val === item.value && !BI.contains(result, item.text || item.value)) { @@ -64,7 +73,7 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { if (result.length > 0) { return { textCls: "", - text: o.valueFormatter(val) ?? result.join(","), + text: result.join(","), }; } else { var text = BI.isFunction(o.text) ? o.text() : o.text; diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index ba67f0c3a..8f5272545 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -200,6 +200,7 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { self.textTrigger = _ref; }, text: o.text, + defaultText: o.defaultText, height: o.height, items: o.items, value: o.value, From 830d2333b7d407b0e90a8f296e21b91d79a469ed Mon Sep 17 00:00:00 2001 From: data Date: Tue, 16 Aug 2022 13:56:33 +0800 Subject: [PATCH 109/161] auto upgrade version to 2.0.20220816135604 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fccc9cb31..90fb3efea 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220816105709", + "version": "2.0.20220816135604", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From c7650ce8bcce7303a4a8e0a3e3c6f4b5371e8ec4 Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Tue, 16 Aug 2022 14:10:09 +0800 Subject: [PATCH 110/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/single/input/file.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/base/single/input/file.js b/src/base/single/input/file.js index 5de5309c3..4ea51047e 100644 --- a/src/base/single/input/file.js +++ b/src/base/single/input/file.js @@ -114,7 +114,7 @@ handler.onerror(); } -return; + return; } for (var xhr = new XMLHttpRequest, @@ -246,7 +246,7 @@ return; xhr.send(form); } -return handler; + return handler; }; } else { // Internet Explorer, Opera, others @@ -354,7 +354,7 @@ return handler; } xhr = null; -return sendFile; + return sendFile; }(Object.prototype.toString)); function sendFiles(handler, maxSize, width, height) { From 981103f70fe5ec7958e185ab83ef7a0a3871269d Mon Sep 17 00:00:00 2001 From: data Date: Tue, 16 Aug 2022 14:36:53 +0800 Subject: [PATCH 111/161] auto upgrade version to 2.0.20220816143611 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 90fb3efea..d7ca43c32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220816135604", + "version": "2.0.20220816143611", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From ff378ed006bb513e8a10bef152c6edb107508874 Mon Sep 17 00:00:00 2001 From: treecat Date: Tue, 16 Aug 2022 15:46:24 +0800 Subject: [PATCH 112/161] =?UTF-8?q?KERNEL-9408=20feat:=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E5=8F=AF=E4=BB=A5=E8=87=AA=E5=AE=9A=E4=B9=89=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/base/button/demo.button.js | 144 ++++++++++++++--------- src/base/single/button/buttons/button.js | 60 +++++++--- 2 files changed, 131 insertions(+), 73 deletions(-) diff --git a/demo/js/base/button/demo.button.js b/demo/js/base/button/demo.button.js index 1f2eeec0a..420a47d77 100644 --- a/demo/js/base/button/demo.button.js +++ b/demo/js/base/button/demo.button.js @@ -1,6 +1,29 @@ +(function () { + var JokerIcon = BI.inherit(BI.Widget, { + render: function () { + var self = this; + + return { + type: "bi.label", + cls: "anim-rotate", + ref: function(ref) { + self.text = ref; + }, + }; + }, + loading: function () { + this.text.setText("🤡"); + }, + loaded: function () { + this.text.setText(""); + }, + }); + BI.shortcut("demo.joker.icon", JokerIcon); +}()); + Demo.Button = BI.inherit(BI.Widget, { props: { - baseCls: "demo-button" + baseCls: "demo-button", }, render: function () { var items = [{ @@ -16,187 +39,187 @@ Demo.Button = BI.inherit(BI.Widget, { setTimeout(() => { this.loaded(); }, 5 * 1000); - } + }, }, { type: "bi.button", text: "表示成功状态按钮", level: "success", - height: 30 + height: 30, }, { type: "bi.button", text: "表示警告状态的按钮", level: "warning", - height: 30 + height: 30, }, { type: "bi.button", text: "表示错误状态的按钮", level: "error", - height: 30 + height: 30, }, { type: "bi.button", text: "表示忽略状态的按钮", level: "ignore", - height: 30 + height: 30, }, { type: "bi.button", text: "普通灰化按钮", disabled: true, level: "success", - height: 30 + height: 30, }, { type: "bi.button", text: "忽略状态灰化按钮", disabled: true, level: "ignore", - height: 30 + height: 30, }, { type: "bi.button", text: "带图标的按钮", // level: 'ignore', iconCls: "close-font", - height: 30 + height: 30, }, { type: "bi.button", text: "一般按钮", block: true, level: "common", - height: 30 + height: 30, }, { type: "bi.button", text: "表示成功状态按钮", block: true, level: "success", - height: 30 + height: 30, }, { type: "bi.button", text: "表示警告状态的按钮", block: true, level: "warning", - height: 30 + height: 30, }, { type: "bi.button", text: "表示忽略状态的按钮", block: true, level: "ignore", - height: 30 + height: 30, }, { type: "bi.button", text: "普通灰化按钮", block: true, disabled: true, level: "success", - height: 30 + height: 30, }, { type: "bi.button", text: "忽略状态灰化按钮", block: true, disabled: true, level: "ignore", - height: 30 + height: 30, }, { type: "bi.button", text: "带图标的按钮", block: true, // level: 'ignore', iconCls: "close-font", - height: 30 + height: 30, }, { type: "bi.button", text: "一般按钮", clear: true, level: "common", - height: 30 + height: 30, }, { type: "bi.button", text: "表示成功状态按钮", clear: true, level: "success", - height: 30 + height: 30, }, { type: "bi.button", text: "表示警告状态的按钮", clear: true, level: "warning", - height: 30 + height: 30, }, { type: "bi.button", text: "表示忽略状态的按钮", clear: true, level: "ignore", - height: 30 + height: 30, }, { type: "bi.button", text: "普通灰化按钮", clear: true, disabled: true, level: "success", - height: 30 + height: 30, }, { type: "bi.button", text: "忽略状态灰化按钮", clear: true, disabled: true, level: "ignore", - height: 30 + height: 30, }, { type: "bi.button", text: "带图标的按钮", clear: true, // level: 'ignore', iconCls: "close-font", - height: 30 + height: 30, }, { type: "bi.text_button", text: "文字按钮", - height: 30 + height: 30, }, { type: "bi.button", text: "幽灵按钮(common)", ghost: true, - height: 30 + height: 30, }, { type: "bi.button", iconCls: "plus-font", text: "幽灵按钮(common)", ghost: true, - height: 30 + height: 30, }, { type: "bi.button", iconCls: "plus-font", text: "幽灵按钮(common)", ghost: true, level: "warning", - height: 30 + height: 30, }, { type: "bi.button", iconCls: "plus-font", text: "幽灵按钮(common)", ghost: true, level: "error", - height: 30 + height: 30, }, { type: "bi.button", iconCls: "plus-font", text: "幽灵按钮(common)", ghost: true, level: "success", - height: 30 + height: 30, }, { type: "bi.button", text: "幽灵按钮(common)灰化", disabled: true, ghost: true, - height: 30 + height: 30, }, { type: "bi.button", text: "弹出bubble", bubble: function () { - return BI.parseInt(Math.random() * 100) % 10 + "提示" + return BI.parseInt(Math.random() * 100) % 10 + "提示"; }, handler: function () { BI.Msg.toast("1111"); }, - height: 30 + height: 30, }, { type: "bi.button", text: "自动撑开", @@ -206,76 +229,76 @@ Demo.Button = BI.inherit(BI.Widget, { iconGap: 64, vgap: 16, hgap: 100, - iconPosition: "bottom" + iconPosition: "bottom", }, { type: "bi.button", text: "图标在下面的按钮", iconCls: "close-font", - iconPosition: "bottom" + iconPosition: "bottom", }, { type: "bi.button", text: "图标在左边的按钮", iconCls: "close-font", - iconPosition: "left" + iconPosition: "left", }, { type: "bi.button", text: "图标在右边的按钮", iconCls: "close-font", - iconPosition: "right" + iconPosition: "right", }, { type: "bi.button", text: "浅色的一般按钮", iconCls: "plus-font", - light: true + light: true, }, { type: "bi.button", text: "浅色的成功按钮", level: "success", iconCls: "plus-font", - light: true + light: true, }, { type: "bi.button", text: "浅色的警告按钮", level: "warning", iconCls: "plus-font", - light: true + light: true, }, { type: "bi.button", iconCls: "plus-font", text: "浅色的失败按钮", level: "error", cls: "hover-mask", - light: true + light: true, }, { type: "bi.button", iconCls: "plus-font", text: "朴素的按钮", level: "common", - plain: true + plain: true, }, { type: "bi.button", iconCls: "plus-font", text: "朴素的按钮", level: "success", - plain: true + plain: true, }, { type: "bi.button", iconCls: "plus-font", text: "朴素的按钮", level: "error", - plain: true + plain: true, }, { type: "bi.button", iconCls: "plus-font", text: "朴素的按钮", level: "warning", - plain: true + plain: true, }, { type: "bi.button", iconCls: "plus-font", text: "朴素的按钮", level: "ignore", - plain: true + plain: true, }, { type: "bi.button", iconCls: "plus-font", @@ -286,7 +309,7 @@ Demo.Button = BI.inherit(BI.Widget, { iconCls: "plus-font", text: "朴素的按钮", plain: true, - disabled: true + disabled: true, }, { type: "bi.button", iconCls: "plus-font", @@ -299,7 +322,7 @@ Demo.Button = BI.inherit(BI.Widget, { } this.setIcon(arr[this.i]); }, - height: 24 + height: 24, }, { type: "bi.button", text: "带加载的按钮", @@ -309,7 +332,7 @@ Demo.Button = BI.inherit(BI.Widget, { setTimeout(() => { this.loaded(); }, 5 * 1000); - } + }, }, { type: "bi.button", text: "带加载的按钮", @@ -320,7 +343,7 @@ Demo.Button = BI.inherit(BI.Widget, { setTimeout(() => { this.loaded(); }, 5 * 1000); - } + }, }, { type: "bi.button", clear: true, @@ -332,14 +355,27 @@ Demo.Button = BI.inherit(BI.Widget, { setTimeout(() => { this.loaded(); }, 5 * 1000); - } + }, }, { type: "bi.button", text: "加载中的按钮", loading: true, handler() { console.log("我是无法被触发的!"); - } + }, + }, { + type: "bi.button", + text: "自定义图标按钮(点我修改)", + icon: { + type: "demo.joker.icon", + }, + handler() { + console.log("触发点击事件"); + this.loading(); + setTimeout(() => { + this.loaded(); + }, 5 * 1000); + }, }]; return { @@ -349,10 +385,10 @@ Demo.Button = BI.inherit(BI.Widget, { hgap: 20, items: BI.map(items, function (index, value) { return { - el: value + el: value, }; - }) + }), }; - } + }, }); BI.shortcut("demo.button", Demo.Button); diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index 63b667aaa..d15051be5 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -62,6 +62,7 @@ bgap: 0, lgap: 0, rgap: 0, + icon: "", iconGap: 0, iconPosition: "left", }); @@ -90,17 +91,30 @@ } var iconInvisible = !o.loading && !o.iconCls; - this.icon = BI.createWidget({ - type: "bi.icon_label", - cls: o.loading ? loadingCls : o.iconCls, - width: this._const.iconWidth, - height: lineHeight, - lineHeight: lineHeight, - // 不设置,自定义按钮无法居中 - iconWidth: o.iconWidth, - iconHeight: o.iconHeight, - invisible: iconInvisible, - }); + if (BI.isObject(o.icon) && BI.isString(o.icon.type)) { + // FineUI 自定义 icon + this.icon = BI.createWidget(o.icon); + o.loading ? (this.icon.loading && this.icon.loading()) + : (this.icon.loaded && this.icon.loaded()); + } else { + // ReactUI 自定义的 icon + if (!o.loading && BI.isObject(o.icon)) { + this.icon = o.icon; + } else { + this.icon = BI.createWidget({ + type: "bi.icon_label", + cls: o.loading ? loadingCls : (o.iconCls || o.icon), + width: this._const.iconWidth, + height: lineHeight, + lineHeight: lineHeight, + // 不设置,自定义按钮无法居中 + iconWidth: o.iconWidth, + iconHeight: o.iconHeight, + invisible: iconInvisible, + }); + } + } + // 用于 whiteSpace var textWidth = iconInvisible && o.width ? o.width - o.hgap * 2 : null; if (BI.isNotNull(o.textWidth)) { @@ -179,23 +193,31 @@ return this.isLoading(); }, - isLoading() { + isLoading: function () { return this._loading === undefined ? this.options.loading : this._loading; }, - loading: function (loading) { + loading: function () { this._loading = true; this.element.addClass("loading"); - // loadingCls 可以覆盖 iconCls 所以不需要移除 iconCls - this.icon.element.addClass(loadingCls); - this.icon.setVisible(true); + if (this.icon.loading) { + this.icon.loading(); + } else { + // loadingCls 可以覆盖 iconCls 所以不需要移除 iconCls + this.icon.element.addClass(loadingCls); + this.icon.setVisible(true); + } }, - loaded() { + loaded: function () { this._loading = false; this.element.removeClass("loading"); - this.icon.element.removeClass(loadingCls); - this.icon.setVisible(!!this.options.iconCls); + if (this.icon.loaded) { + this.icon.loaded(); + } else { + this.icon.element.removeClass(loadingCls); + this.icon.setVisible(!!this.options.iconCls); + } }, setText: function (text) { From b7219418544c2f3aa6ddb090824fedc50d0a261b Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Tue, 16 Aug 2022 15:53:05 +0800 Subject: [PATCH 113/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 3 ++- src/base/single/input/file.js | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/.eslintrc b/.eslintrc index 3fbfc3524..3269a3eae 100644 --- a/.eslintrc +++ b/.eslintrc @@ -14,7 +14,8 @@ "Fix": true, "module": true, "Demo": true, - "_global": true + "_global": true, + "ActiveXObject": true }, "parser": "@typescript-eslint/parser", "parserOptions": { diff --git a/src/base/single/input/file.js b/src/base/single/input/file.js index 4ea51047e..570526f36 100644 --- a/src/base/single/input/file.js +++ b/src/base/single/input/file.js @@ -251,7 +251,7 @@ } else { // Internet Explorer, Opera, others sendFile = function (handler, maxSize, width, height) { - var current = handler.current; + var current = handler.current, iframe, form; var url = handler.url.concat(-1 === handler.url.indexOf("?") ? "?" : "&", "AjaxUploadFrame=true"), rpe = { loaded: 1, total: 100, simulation: true, interval: setInterval(function () { @@ -499,9 +499,9 @@ if (this.file.fileSize !== -1) { // simulation property indicates when the progress event is fake if (rpe.simulation) { - + // empty } else { - + // empty } } else { // if fileSIze is -1 browser is using an iframe because it does From 6895777066f3f522075255eac5c8ca0ef539dac1 Mon Sep 17 00:00:00 2001 From: treecat Date: Tue, 16 Aug 2022 16:35:29 +0800 Subject: [PATCH 114/161] =?UTF-8?q?KERNEL-9408=20fix:=E4=BF=AE=E6=94=B9?= =?UTF-8?q?=E5=85=B6=E5=AE=83=E6=A1=86=E6=9E=B6=E5=AE=9E=E7=8E=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87=E7=9A=84=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/base/button/demo.button.js | 6 ++++++ src/base/single/button/buttons/button.js | 11 ++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/demo/js/base/button/demo.button.js b/demo/js/base/button/demo.button.js index 420a47d77..39b27b716 100644 --- a/demo/js/base/button/demo.button.js +++ b/demo/js/base/button/demo.button.js @@ -376,6 +376,12 @@ Demo.Button = BI.inherit(BI.Widget, { this.loaded(); }, 5 * 1000); }, + }, { + type: "bi.button", + text: "图标的实现交给其他框架", + icon(element) { + element.append("🧙"); + }, }]; return { diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index d15051be5..f9aa8586e 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -91,15 +91,16 @@ } var iconInvisible = !o.loading && !o.iconCls; - if (BI.isObject(o.icon) && BI.isString(o.icon.type)) { - // FineUI 自定义 icon + if (BI.isPlainObject(o.icon)) { this.icon = BI.createWidget(o.icon); o.loading ? (this.icon.loading && this.icon.loading()) : (this.icon.loaded && this.icon.loaded()); } else { - // ReactUI 自定义的 icon - if (!o.loading && BI.isObject(o.icon)) { - this.icon = o.icon; + if (!o.loading && BI.isFunction(o.icon)) { + this.icon = BI.createWidget({ + type: "bi.layout", + }); + o.icon(this.icon.element); } else { this.icon = BI.createWidget({ type: "bi.icon_label", From 3755aca7b4a8866ed9b7e77e6c787a5ca10cd40c Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Tue, 16 Aug 2022 16:40:10 +0800 Subject: [PATCH 115/161] =?UTF-8?q?KERNEL-12408:base=E4=B8=ADeslint?= =?UTF-8?q?=E7=9A=84=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .eslintrc | 3 +-- src/base/single/input/file.js | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/.eslintrc b/.eslintrc index 3269a3eae..3fbfc3524 100644 --- a/.eslintrc +++ b/.eslintrc @@ -14,8 +14,7 @@ "Fix": true, "module": true, "Demo": true, - "_global": true, - "ActiveXObject": true + "_global": true }, "parser": "@typescript-eslint/parser", "parserOptions": { diff --git a/src/base/single/input/file.js b/src/base/single/input/file.js index 570526f36..867756a7c 100644 --- a/src/base/single/input/file.js +++ b/src/base/single/input/file.js @@ -88,7 +88,7 @@ var split = "onabort.onerror.onloadstart.onprogress".split("."), length = split.length, CRLF = "\r\n", - xhr = XMLHttpRequest ? new XMLHttpRequest : new ActiveXObject("Microsoft.XMLHTTP"), + xhr = new XMLHttpRequest, sendFile; function multipart(boundary, name, file) { return "--".concat( From f5aea7544bcaedafbbbccdb05e465ecbaa4ab9e0 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 16 Aug 2022 17:25:26 +0800 Subject: [PATCH 116/161] auto upgrade version to 2.0.20220816172514 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d7ca43c32..103ff88ee 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220816143611", + "version": "2.0.20220816172514", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From e487760d6c8eb131aea96518869568f3c09c6914 Mon Sep 17 00:00:00 2001 From: treecat Date: Wed, 17 Aug 2022 11:01:00 +0800 Subject: [PATCH 117/161] =?UTF-8?q?KERNEL-9408=20fix:=E6=8C=89=E9=92=AE?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=9B=BE=E6=A0=87=E7=9A=84=E6=9C=80?= =?UTF-8?q?=E7=BB=88=E5=AE=9E=E7=8E=B0=E6=96=B9=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/base/button/demo.button.js | 6 ---- src/base/single/button/buttons/button.js | 39 +++++++++--------------- 2 files changed, 15 insertions(+), 30 deletions(-) diff --git a/demo/js/base/button/demo.button.js b/demo/js/base/button/demo.button.js index 39b27b716..420a47d77 100644 --- a/demo/js/base/button/demo.button.js +++ b/demo/js/base/button/demo.button.js @@ -376,12 +376,6 @@ Demo.Button = BI.inherit(BI.Widget, { this.loaded(); }, 5 * 1000); }, - }, { - type: "bi.button", - text: "图标的实现交给其他框架", - icon(element) { - element.append("🧙"); - }, }]; return { diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index f9aa8586e..7a8ba672d 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -91,29 +91,20 @@ } var iconInvisible = !o.loading && !o.iconCls; - if (BI.isPlainObject(o.icon)) { + if (BI.isPlainObject(o.icon) && !o.loading) { this.icon = BI.createWidget(o.icon); - o.loading ? (this.icon.loading && this.icon.loading()) - : (this.icon.loaded && this.icon.loaded()); } else { - if (!o.loading && BI.isFunction(o.icon)) { - this.icon = BI.createWidget({ - type: "bi.layout", - }); - o.icon(this.icon.element); - } else { - this.icon = BI.createWidget({ - type: "bi.icon_label", - cls: o.loading ? loadingCls : (o.iconCls || o.icon), - width: this._const.iconWidth, - height: lineHeight, - lineHeight: lineHeight, - // 不设置,自定义按钮无法居中 - iconWidth: o.iconWidth, - iconHeight: o.iconHeight, - invisible: iconInvisible, - }); - } + this.icon = BI.createWidget({ + type: "bi.icon_label", + cls: o.loading ? loadingCls : (o.iconCls || o.icon), + width: this._const.iconWidth, + height: lineHeight, + lineHeight: lineHeight, + // 不设置,自定义按钮无法居中 + iconWidth: o.iconWidth, + iconHeight: o.iconHeight, + invisible: iconInvisible, + }); } // 用于 whiteSpace @@ -140,12 +131,12 @@ tgap: o.iconPosition === "top" ? o.iconGap : 0, bgap: o.iconPosition === "bottom" ? o.iconGap : 0, }; - var items = [this.icon, BI.extend({ el: this.text }, gapContainer)]; + var items = [this.icon, BI.extend({el: this.text}, gapContainer)]; if (isVertical(o.iconPosition)) { layoutType = "bi.vertical"; } if (o.iconPosition === "right" || o.iconPosition === "bottom") { - items = [BI.extend({ el: this.text }, gapContainer), this.icon]; + items = [BI.extend({el: this.text}, gapContainer), this.icon]; } // bi.center_adapt 作用:让 hgap 不影响 iconGap。 BI.createWidget({ @@ -170,7 +161,7 @@ }); if (o.minWidth > 0) { - this.element.css({ "min-width": o.minWidth / BI.pixRatio + BI.pixUnit }); + this.element.css({"min-width": o.minWidth / BI.pixRatio + BI.pixUnit}); } }, From e775c5c346a66865d62abbf3bea1769688ea2d15 Mon Sep 17 00:00:00 2001 From: zsmj Date: Wed, 17 Aug 2022 20:56:55 +0800 Subject: [PATCH 118/161] =?UTF-8?q?KERNEL-12470=20feat:=20bi.text=5Fvalue?= =?UTF-8?q?=5Fcombo=E9=80=BB=E8=BE=91=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/case/combo/demo.text_value_combo.js | 93 ++++++++++---- .../combo/textvaluecombo/combo.textvalue.js | 119 ++++++++++++------ src/case/trigger/trigger.text.select.js | 2 +- src/less/base/combo/combo.textvalue.less | 24 ++++ 4 files changed, 174 insertions(+), 64 deletions(-) create mode 100644 src/less/base/combo/combo.textvalue.less diff --git a/demo/js/case/combo/demo.text_value_combo.js b/demo/js/case/combo/demo.text_value_combo.js index 77414af38..50e3fea43 100644 --- a/demo/js/case/combo/demo.text_value_combo.js +++ b/demo/js/case/combo/demo.text_value_combo.js @@ -6,7 +6,7 @@ Demo.TextValueCombo = BI.inherit(BI.Widget, { baseCls: "" }, render: function () { - var combo, wrapper; + var combo1, combo2; var items = [{ text: "MVC-1", @@ -30,8 +30,8 @@ Demo.TextValueCombo = BI.inherit(BI.Widget, { items: [ this.createCombo("无初始值,带提示文字", { type: "bi.text_value_combo", - ref: function () { - combo = this; + ref: (ref) => { + this.combo1 = ref; }, defaultText: "请选择", width: 300, @@ -100,16 +100,18 @@ Demo.TextValueCombo = BI.inherit(BI.Widget, { } ] }), - this.createCombo("有初始值,value不匹配,自动标红,可以清空", { + this.createCombo("有初始值,value不匹配,自动标红,指定标红文字", { type: "bi.text_value_combo", ref: function () { combo = this; }, - defaultText: "请选择", width: 300, + text: "MVC-111", value: 111, items: items, allowClear: true, + defaultText: "请选择", + warningTitle: "value值不合法", listeners: [ { eventName: BI.TextValueCombo.EVENT_CHANGE, @@ -119,23 +121,67 @@ Demo.TextValueCombo = BI.inherit(BI.Widget, { } ] }), - this.createCombo("有初始值,value不匹配,自动标红,指定标红文字", { - type: "bi.text_value_combo", - ref: function () { - combo = this; - }, - width: 300, - text: "MVC-111", - value: 111, - items: items, - allowClear: true, - defaultText: "df", - listeners: [ + this.createCombo("无初始值,外部受控调用setValue", { + type: "bi.vertical", + items: [ { - eventName: BI.TextValueCombo.EVENT_CHANGE, - action: function () { - console.log(this.getValue()); - } + type: "bi.text_value_combo", + ref: function () { + combo1 = this; + }, + width: 300, + items: items, + allowClear: true, + defaultText: "请选择", + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }, { + el: { + type: "bi.button", + text: "setValue(1)", + handler: function () { + combo1.setValue(); + }, + }, + vgap: 10, + } + ] + }), + this.createCombo("无初始值,外部受控调用setStatus", { + type: "bi.vertical", + items: [ + { + type: "bi.text_value_combo", + ref: function () { + combo2 = this; + }, + width: 300, + items: items, + allowClear: true, + defaultText: "请选择", + listeners: [ + { + eventName: BI.TextValueCombo.EVENT_CHANGE, + action: function () { + console.log(this.getValue()); + } + } + ] + }, { + el: { + type: "bi.button", + text: "setStatus()", + handler: function () { + combo2.setStatus("error"); + }, + }, + vgap: 10, } ] }) @@ -155,8 +201,9 @@ Demo.TextValueCombo = BI.inherit(BI.Widget, { }, bgap: 10 }, { - el: combo - } + el: combo, + bgap: 10, + }, ] }; } diff --git a/src/case/combo/textvaluecombo/combo.textvalue.js b/src/case/combo/textvaluecombo/combo.textvalue.js index e29d6c094..f59714c1f 100644 --- a/src/case/combo/textvaluecombo/combo.textvalue.js +++ b/src/case/combo/textvaluecombo/combo.textvalue.js @@ -14,6 +14,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { value: "", defaultText: "", allowClear: false, + status: "success", // success | warning | error }); }, @@ -28,90 +29,128 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { self.populate(newValue); }) : o.items; BI.TextValueCombo.superclass._init.apply(this, arguments); - this.trigger = BI.createWidget({ + }, + + render: function () { + + const o = this.options; + + const trigger = { type: "bi.select_text_trigger", + ref: ref => this.trigger = ref, cls: "text-value-trigger", items: o.items, height: o.height, text: o.text, value: o.value, - warningTitle: o.warningTitle, + title: () => { + if (this.options.status === "error") { + return { + level: "warning", + text: o.warningTitle, + }; + } + return { + level: "success", + }; + }, allowClear: o.allowClear, defaultText: o.defaultText, listeners: [ { eventName: BI.SelectTextTrigger.EVENT_CLEAR, - action: function () { - self._clear(); - self.fireEvent(BI.TextValueCombo.EVENT_CHANGE); + action: () => { + this._clear(); + this.fireEvent(BI.TextValueCombo.EVENT_CHANGE); } } ], - }); - this.popup = BI.createWidget({ + }; + const popup = { type: "bi.text_value_combo_popup", + ref: ref => this.popup = ref, chooseType: o.chooseType, value: o.value, - items: o.items - }); - this.popup.on(BI.TextValueComboPopup.EVENT_CHANGE, function () { - self.setValue(self.popup.getValue()); - self.textIconCombo.hideView(); - self.fireEvent(BI.TextValueCombo.EVENT_CHANGE, arguments); - }); - this.popup.on(BI.Controller.EVENT_CHANGE, function () { - self.fireEvent(BI.Controller.EVENT_CHANGE, arguments); - }); - this.textIconCombo = BI.createWidget({ + items: o.items, + listeners: [ + { + eventName: BI.TextValueComboPopup.EVENT_CHANGE, + action: (...args) => { + this.setValue(this.popup.getValue()); + this.combo.hideView(); + this.fireEvent(BI.TextValueCombo.EVENT_CHANGE, args); + } + }, { + eventName: BI.Controller.EVENT_CHANGE, + action: (...args) => { + this.fireEvent(BI.Controller.EVENT_CHANGE, args); + } + } + ] + }; + + return { type: "bi.combo", + ref: ref => this.combo = ref, container: o.container, direction: o.direction, - element: this, adjustLength: 2, - el: this.trigger, + el: trigger, popup: { - el: this.popup, + el: popup, maxHeight: 240, minHeight: 25 } - }); + }; + }, + + mounted: function () { + const o = this.options; if (BI.isKey(o.value)) { this._checkError(o.value); } }, _clear: function () { - this.trigger.setValue(); - this.popup.setValue(); - this.element.removeClass("error"); - this.trigger.element.removeClass("error"); + this.combo.setValue(); + this.setStatus("success"); }, _checkError: function (v) { - v = BI.isArray(v) ? v[0] : v; - var tipType = null; + + if (BI.isNull(v)) { + this.setStatus("success"); + return; + } + + var vals = BI.isArray(v) ? v : [v]; + var result = BI.find(this.options.items, function (idx, item) { - return v === item.value; + return BI.contains(vals, item.value); }); + if (BI.isNull(result)) { - if (this.isEnabled()) { - tipType = "warning"; - } - this.element.addClass("error"); - this.trigger.element.addClass("error"); + this.setStatus("error"); } else { - this.element.removeClass("error"); - this.trigger.element.removeClass("error"); + this.setStatus("success"); } - this.trigger.setTipType(tipType); + }, + + clear: function () { + this._clear(); }, setValue: function (v) { - this.trigger.setValue(v); - this.popup.setValue(v); + this.combo.setValue(v); this._checkError(v); }, + setStatus: function (status) { + this.element.removeClass(`bi-status-${this.options.status}`); + this.element.addClass(`bi-status-${status}`); + this.options.status = status; + }, + getValue: function () { var value = this.popup.getValue(); return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]); @@ -119,7 +158,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { populate: function (items) { this.options.items = items; - this.textIconCombo.populate(items); + this.combo.populate(items); } }); BI.TextValueCombo.EVENT_CHANGE = "EVENT_CHANGE"; diff --git a/src/case/trigger/trigger.text.select.js b/src/case/trigger/trigger.text.select.js index 52d3878fb..3be2d7757 100644 --- a/src/case/trigger/trigger.text.select.js +++ b/src/case/trigger/trigger.text.select.js @@ -36,7 +36,7 @@ BI.SelectTextTrigger = BI.inherit(BI.Trigger, { textTgap: o.textTgap, textBgap: o.textBgap, tipType: o.tipType, - warningTitle: o.warningTitle, + title: null, allowClear: o.allowClear, listeners: [ { diff --git a/src/less/base/combo/combo.textvalue.less b/src/less/base/combo/combo.textvalue.less new file mode 100644 index 000000000..89329e60f --- /dev/null +++ b/src/less/base/combo/combo.textvalue.less @@ -0,0 +1,24 @@ +@import "../../index.less"; + +.bi-text-value-combo { + //将来统一变成combo的特性 + &.bi-status-error { + &.bi-border, &.bi-border-bottom { + border-color: @border-color-negative; + } + + .bi-trigger .select-text-label { + color: @color-bi-text-error-text-trigger; + } + } + + &.bi-status-warning { + &.bi-border, &.bi-border-bottom { + border-color: @border-color-warning; + } + + .bi-trigger .select-text-label { + color: @font-color-warning; + } + } +} From f96fd2a45b9062e6f13c61ec562f5d17acc79503 Mon Sep 17 00:00:00 2001 From: data Date: Thu, 18 Aug 2022 09:08:28 +0800 Subject: [PATCH 119/161] auto upgrade version to 2.0.20220818090810 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 103ff88ee..7a4c8c9c9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220816172514", + "version": "2.0.20220818090810", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 6432871fc1ff0373ea04c6addd867c756747542c Mon Sep 17 00:00:00 2001 From: data Date: Thu, 18 Aug 2022 10:35:23 +0800 Subject: [PATCH 120/161] auto upgrade version to 2.0.20220818103515 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7a4c8c9c9..b40437a05 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220818090810", + "version": "2.0.20220818103515", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 701ab5576fb0476d87bc0638361e88a85cde37c8 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 18 Aug 2022 14:59:58 +0800 Subject: [PATCH 121/161] =?UTF-8?q?=E6=97=A0JIRA=20fix:=20=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6=E5=8F=82=E6=95=B0=E5=86=99=E9=94=99=E4=BA=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/combo/textvaluecombo/combo.textvalue.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/case/combo/textvaluecombo/combo.textvalue.js b/src/case/combo/textvaluecombo/combo.textvalue.js index f59714c1f..b7f25ea50 100644 --- a/src/case/combo/textvaluecombo/combo.textvalue.js +++ b/src/case/combo/textvaluecombo/combo.textvalue.js @@ -78,12 +78,12 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { action: (...args) => { this.setValue(this.popup.getValue()); this.combo.hideView(); - this.fireEvent(BI.TextValueCombo.EVENT_CHANGE, args); + this.fireEvent(BI.TextValueCombo.EVENT_CHANGE, ...args); } }, { eventName: BI.Controller.EVENT_CHANGE, action: (...args) => { - this.fireEvent(BI.Controller.EVENT_CHANGE, args); + this.fireEvent(BI.Controller.EVENT_CHANGE, ...args); } } ] From 157a59b07066a3ed020af488a7d1072d2d42c535 Mon Sep 17 00:00:00 2001 From: data Date: Thu, 18 Aug 2022 15:35:12 +0800 Subject: [PATCH 122/161] auto upgrade version to 2.0.20220818153502 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b40437a05..4c270ebd9 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220818103515", + "version": "2.0.20220818153502", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From cf819306fd173e55d4713b71d6ab8ef384160910 Mon Sep 17 00:00:00 2001 From: treecat Date: Fri, 19 Aug 2022 10:38:50 +0800 Subject: [PATCH 123/161] =?UTF-8?q?KERNEL-9408=20fix:=E8=A7=A3=E5=86=B3but?= =?UTF-8?q?ton=E7=9A=84icon=E5=B1=9E=E6=80=A7=E6=9C=89=E6=97=B6=E5=A4=B1?= =?UTF-8?q?=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/single/button/buttons/button.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index 7a8ba672d..11762c86d 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -90,7 +90,7 @@ } } - var iconInvisible = !o.loading && !o.iconCls; + var iconInvisible = !o.loading && !o.iconCls && !o.icon; if (BI.isPlainObject(o.icon) && !o.loading) { this.icon = BI.createWidget(o.icon); } else { From 67bc8f8aefd40b4a24760dabdfb8ef7c2c71e5de Mon Sep 17 00:00:00 2001 From: Kira Date: Fri, 19 Aug 2022 11:09:51 +0800 Subject: [PATCH 124/161] =?UTF-8?q?JSY-21914=20fix:=20=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/combo/textvaluecombo/combo.textvalue.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/case/combo/textvaluecombo/combo.textvalue.js b/src/case/combo/textvaluecombo/combo.textvalue.js index b7f25ea50..97113ee49 100644 --- a/src/case/combo/textvaluecombo/combo.textvalue.js +++ b/src/case/combo/textvaluecombo/combo.textvalue.js @@ -152,7 +152,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { }, getValue: function () { - var value = this.popup.getValue(); + var value = this.combo.getValue(); return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]); }, From b37406b60d38dc0eb25ba042490d2bd930e84d7c Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 19 Aug 2022 11:10:28 +0800 Subject: [PATCH 125/161] =?UTF-8?q?KERNEL-12033=20feat:=20=E5=A4=8D?= =?UTF-8?q?=E9=80=89=E5=88=97=E8=A1=A8=E6=B7=BB=E5=8A=A0itemFormatter?= =?UTF-8?q?=E5=B1=9E=E6=80=A7,=E6=94=AF=E6=8C=81=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E8=8A=82=E7=82=B9=E7=B1=BB=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widget/multiselect/multiselect.combo.js | 2 ++ src/widget/multiselect/multiselect.loader.js | 21 +++++++++++-------- .../multiselect/multiselect.loader.nobar.js | 18 +++++++++------- .../multiselect/multiselect.popup.view.js | 1 + .../multiselect.popup.view.nobar.js | 1 + .../search/multiselect.search.loader.js | 2 +- 6 files changed, 28 insertions(+), 17 deletions(-) diff --git a/src/widget/multiselect/multiselect.combo.js b/src/widget/multiselect/multiselect.combo.js index c370a48ee..00b035096 100644 --- a/src/widget/multiselect/multiselect.combo.js +++ b/src/widget/multiselect/multiselect.combo.js @@ -57,6 +57,7 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { }, }, valueFormatter: o.valueFormatter, + itemFormatter: o.itemFormatter, itemsCreator: BI.bind(this._itemsCreator4Trigger, this), itemHeight: o.itemHeight, value: this.storeValue, @@ -162,6 +163,7 @@ BI.MultiSelectCombo = BI.inherit(BI.Single, { itemsCreator: o.itemsCreator, itemHeight: o.itemHeight, valueFormatter: o.valueFormatter, + itemFormatter: o.itemFormatter, onLoaded: function () { BI.nextTick(function () { self.combo.adjustWidth(); diff --git a/src/widget/multiselect/multiselect.loader.js b/src/widget/multiselect/multiselect.loader.js index 3dc7229bb..7c45c68c1 100644 --- a/src/widget/multiselect/multiselect.loader.js +++ b/src/widget/multiselect/multiselect.loader.js @@ -64,7 +64,6 @@ BI.MultiSelectLoader = BI.inherit(BI.Widget, { value: v, title: txt, selected: self.storeValue.type === BI.Selection.Multi, - ...opts.itemFormatter(v), }; }); if (BI.isKey(self._startValue) && !BI.contains(self.storeValue.value, self._startValue)) { @@ -74,7 +73,6 @@ BI.MultiSelectLoader = BI.inherit(BI.Widget, { value: startValue, title: txt, selected: true, - ...opts.itemFormatter(startValue), }); } firstItems = self._createItems(json); @@ -111,13 +109,18 @@ BI.MultiSelectLoader = BI.inherit(BI.Widget, { _createItems: function (items) { var allSelected = this.isAllSelected(); - return BI.createItems(items, { - type: "bi.multi_select_item", - logic: this.options.logic, - cls: "bi-list-item-active", - height: this.options.itemHeight || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, - selected: allSelected, - iconWrapperWidth: 36 + var itemFormatter = this.options.itemFormatter; + return BI.map(items, (i, item) => { + return { + type: "bi.multi_select_item", + logic: this.options.logic, + cls: "bi-list-item-active", + height: this.options.itemHeight || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, + selected: allSelected, + iconWrapperWidth: 36, + ...item, + ...itemFormatter(item), + }; }); }, diff --git a/src/widget/multiselect/multiselect.loader.nobar.js b/src/widget/multiselect/multiselect.loader.nobar.js index d7744d042..6d9852a35 100644 --- a/src/widget/multiselect/multiselect.loader.nobar.js +++ b/src/widget/multiselect/multiselect.loader.nobar.js @@ -113,12 +113,16 @@ BI.MultiSelectNoBarLoader = BI.inherit(BI.Widget, { }, _createItems: function (items) { - return BI.createItems(items, { - type: "bi.multi_select_item", - cls: "bi-list-item-active", - logic: this.options.logic, - height: this.options.itemHeight || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, - iconWrapperWidth: 36 + return BI.map(items, (index, item) => { + return { + type: "bi.multi_select_item", + cls: "bi-list-item-active", + logic: this.options.logic, + height: this.options.itemHeight || BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, + iconWrapperWidth: 36, + ...item, + ...this.options.itemFormatter(item), + }; }); }, @@ -168,7 +172,7 @@ BI.MultiSelectNoBarLoader = BI.inherit(BI.Widget, { }, resetHeight: function (h) { - this.button_group.element.css({"max-height": h / BI.pixRatio + BI.pixUnit}); + this.button_group.element.css({ "max-height": h / BI.pixRatio + BI.pixUnit }); }, resetWidth: function () { diff --git a/src/widget/multiselect/multiselect.popup.view.js b/src/widget/multiselect/multiselect.popup.view.js index cefe9f0b2..1e11376d2 100644 --- a/src/widget/multiselect/multiselect.popup.view.js +++ b/src/widget/multiselect/multiselect.popup.view.js @@ -27,6 +27,7 @@ BI.MultiSelectPopupView = BI.inherit(BI.Widget, { itemsCreator: opts.itemsCreator, itemHeight: opts.itemHeight, valueFormatter: opts.valueFormatter, + itemFormatter: opts.itemFormatter, onLoaded: opts.onLoaded, value: opts.value }); diff --git a/src/widget/multiselect/multiselect.popup.view.nobar.js b/src/widget/multiselect/multiselect.popup.view.nobar.js index 9132ae5ee..c0007f85a 100644 --- a/src/widget/multiselect/multiselect.popup.view.nobar.js +++ b/src/widget/multiselect/multiselect.popup.view.nobar.js @@ -27,6 +27,7 @@ BI.MultiSelectNoBarPopupView = BI.inherit(BI.Widget, { itemsCreator: opts.itemsCreator, itemHeight: opts.itemHeight, valueFormatter: opts.valueFormatter, + itemFormatter: opts.itemFormatter, onLoaded: opts.onLoaded, value: opts.value }); diff --git a/src/widget/multiselect/search/multiselect.search.loader.js b/src/widget/multiselect/search/multiselect.search.loader.js index 07d4cfbea..89e4cb318 100644 --- a/src/widget/multiselect/search/multiselect.search.loader.js +++ b/src/widget/multiselect/search/multiselect.search.loader.js @@ -128,7 +128,7 @@ BI.MultiSelectSearchLoader = BI.inherit(BI.Widget, { title: v.text, value: v.value, selected: src.type === BI.Selection.All, - ...o.itemFormatter(v.value), + ...o.itemFormatter(v), }; }); }, From 250414dc23f483025f26fa6c8954fac76497dc50 Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 19 Aug 2022 11:22:10 +0800 Subject: [PATCH 126/161] =?UTF-8?q?JSY-21914=20fix:=20=E5=A4=84=E7=90=86?= =?UTF-8?q?=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/combo/textvaluecombo/combo.textvalue.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/case/combo/textvaluecombo/combo.textvalue.js b/src/case/combo/textvaluecombo/combo.textvalue.js index b7f25ea50..dc39d1b1e 100644 --- a/src/case/combo/textvaluecombo/combo.textvalue.js +++ b/src/case/combo/textvaluecombo/combo.textvalue.js @@ -98,6 +98,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { el: trigger, popup: { el: popup, + value: o.value, maxHeight: 240, minHeight: 25 } @@ -152,7 +153,7 @@ BI.TextValueCombo = BI.inherit(BI.Widget, { }, getValue: function () { - var value = this.popup.getValue(); + var value = this.combo.getValue(); return BI.isNull(value) ? [] : (BI.isArray(value) ? value : [value]); }, From b616c6796f0ab9cfe30c4182cfb744729caa734e Mon Sep 17 00:00:00 2001 From: data Date: Fri, 19 Aug 2022 11:35:34 +0800 Subject: [PATCH 127/161] auto upgrade version to 2.0.20220819113527 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4c270ebd9..313842244 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220818153502", + "version": "2.0.20220819113527", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 3bd01018903bc8504296bd943fd8ea31d128f89b Mon Sep 17 00:00:00 2001 From: data Date: Fri, 19 Aug 2022 11:45:38 +0800 Subject: [PATCH 128/161] auto upgrade version to 2.0.20220819114527 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 313842244..4ceb09229 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220819113527", + "version": "2.0.20220819114527", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From be7f7bfff96cc55f840bd0b328911263df1bf68c Mon Sep 17 00:00:00 2001 From: data Date: Fri, 19 Aug 2022 14:06:50 +0800 Subject: [PATCH 129/161] auto upgrade version to 2.0.20220819140607 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4ceb09229..0f1dab006 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220819114527", + "version": "2.0.20220819140607", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 9229f853809c62825782f59d3d0aee4e71e66f1c Mon Sep 17 00:00:00 2001 From: iapyang Date: Fri, 19 Aug 2022 15:32:36 +0800 Subject: [PATCH 130/161] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0loader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/webpack-fui-worker-plugin/worker-loader.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index dd47d0b70..ea5d86459 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -67,6 +67,11 @@ function loader() { entryOnly: true, }).apply(childCompiler); + // 去除源码中的less css引用 + new webpack.IgnorePlugin({ + resourceRegExp: /\.(css|less)$/, + }).apply(childCompiler); + const subCache = `subcache ${__dirname} ${workerEntry}`; childCompiler.hooks.compilation.tap(WorkerLoaderName, compilation => { if (compilation.cache) { From 00801cc9d84de37f0eadb59c7c3a6cf0b2972c69 Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 19 Aug 2022 17:46:18 +0800 Subject: [PATCH 131/161] =?UTF-8?q?=E6=97=A0JIRA=20fix:=20bug=20fix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/list/listview.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/base/list/listview.js b/src/base/list/listview.js index 4b12aa855..7028132bc 100644 --- a/src/base/list/listview.js +++ b/src/base/list/listview.js @@ -72,9 +72,11 @@ BI.ListView = BI.inherit(BI.Widget, { var index = (this.cache[this.renderedIndex] && (this.cache[this.renderedIndex].index + o.blockSize)) || 0; var cnt = this.renderedIndex + 1; var lastHeight; - function getElementHeight () { + + function getElementHeight() { return self.container.element.height(); } + lastHeight = getElementHeight(); while ((lastHeight) < minContentHeight && index < o.items.length) { var items = o.items.slice(index, index + o.blockSize); @@ -90,6 +92,7 @@ BI.ListView = BI.inherit(BI.Widget, { this.renderedIndex = cnt; cnt++; index += o.blockSize; + lastHeight = getElementHeight(); } }, From dffe33b79b9f4a092c0573fa8c9676885708ef74 Mon Sep 17 00:00:00 2001 From: data Date: Sat, 20 Aug 2022 14:47:05 +0800 Subject: [PATCH 132/161] auto upgrade version to 2.0.20220820144639 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 0f1dab006..d53ee0e50 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220819140607", + "version": "2.0.20220820144639", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From f421fd3f9398a1189fd10a3dcffbc056591c2d2b Mon Sep 17 00:00:00 2001 From: data Date: Mon, 22 Aug 2022 11:26:27 +0800 Subject: [PATCH 133/161] auto upgrade version to 2.0.20220822112610 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d53ee0e50..9e7bb1d7f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220820144639", + "version": "2.0.20220822112610", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 35ebf877448e975aaab0e49ef316c7557b00a7c0 Mon Sep 17 00:00:00 2001 From: iapyang Date: Mon, 22 Aug 2022 14:34:38 +0800 Subject: [PATCH 134/161] =?UTF-8?q?chore:=20=E5=8E=BB=E9=99=A4worker?= =?UTF-8?q?=E4=B8=ADcss=20less=E7=9A=84=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/webpack-fui-worker-plugin/empty.js | 0 .../webpack-fui-worker-plugin/worker-loader.js | 17 ++++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) create mode 100644 plugins/webpack-fui-worker-plugin/empty.js diff --git a/plugins/webpack-fui-worker-plugin/empty.js b/plugins/webpack-fui-worker-plugin/empty.js new file mode 100644 index 000000000..e69de29bb diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index ea5d86459..3dcb8de6c 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -68,9 +68,20 @@ function loader() { }).apply(childCompiler); // 去除源码中的less css引用 - new webpack.IgnorePlugin({ - resourceRegExp: /\.(css|less)$/, - }).apply(childCompiler); + const regExp = /\.(css|less)$/; + + new webpack.NormalModuleReplacementPlugin( + regExp, + result => { + if (regExp.test(result.request)) { + result.request = resolve(__dirname, './empty.js'); + } + + if (regExp.test(result.resource)) { + result.resource = resolve(__dirname, './empty.js'); + } + }, + ).apply(childCompiler); const subCache = `subcache ${__dirname} ${workerEntry}`; childCompiler.hooks.compilation.tap(WorkerLoaderName, compilation => { From b64fed301d8b60483109f9e04ae0e3efe99e889a Mon Sep 17 00:00:00 2001 From: chaos0156 <429018715@qq.com> Date: Mon, 22 Aug 2022 16:10:29 +0800 Subject: [PATCH 135/161] KERNEL-12408 fix:bug fix --- src/base/list/virtualgrouplist.js | 1 + src/base/list/virtuallist.js | 1 + src/base/single/input/file.js | 4 ++-- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/base/list/virtualgrouplist.js b/src/base/list/virtualgrouplist.js index def972327..a1836ba94 100644 --- a/src/base/list/virtualgrouplist.js +++ b/src/base/list/virtualgrouplist.js @@ -102,6 +102,7 @@ BI.VirtualGroupList = BI.inherit(BI.Widget, { this.renderedIndex = cnt; cnt++; index += o.blockSize; + lastHeight = this.renderedIndex === -1 ? 0 : getElementHeight(); } }, diff --git a/src/base/list/virtuallist.js b/src/base/list/virtuallist.js index 89a79ed4f..2715008cb 100644 --- a/src/base/list/virtuallist.js +++ b/src/base/list/virtuallist.js @@ -85,6 +85,7 @@ BI.VirtualList = BI.inherit(BI.Widget, { this.renderedIndex = cnt; cnt++; index += o.blockSize; + lastHeight = getElementHeight(); } }, diff --git a/src/base/single/input/file.js b/src/base/single/input/file.js index 867756a7c..290970141 100644 --- a/src/base/single/input/file.js +++ b/src/base/single/input/file.js @@ -116,8 +116,7 @@ return; } - for (var - xhr = new XMLHttpRequest, + for (var xhr = new XMLHttpRequest, upload = xhr.upload || { addEventListener: function (event, callback) { this["on" + event] = callback; @@ -129,6 +128,7 @@ ) { upload.addEventListener( split[i].substring(2), + // eslint-disable-next-line no-loop-func (function (event) { return function (rpe) { if (isFunction(handler[event])) { From b0d173c7ea72bbba25e9700d3d3da5e7a2943241 Mon Sep 17 00:00:00 2001 From: data Date: Mon, 22 Aug 2022 19:36:16 +0800 Subject: [PATCH 136/161] auto upgrade version to 2.0.20220822193554 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9e7bb1d7f..451d2e059 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220822112610", + "version": "2.0.20220822193554", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 5a3fd3cbc443913e1ea165ae100e0fbc374c47e9 Mon Sep 17 00:00:00 2001 From: Wilson Zhang <3412520089@qq.com> Date: Mon, 22 Aug 2022 20:45:00 +0800 Subject: [PATCH 137/161] =?UTF-8?q?BI-111465=20fix:=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E4=B8=8B=E6=8B=89combo=E9=81=AE=E6=8C=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/case/combo/iconcombo/combo.icon.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/case/combo/iconcombo/combo.icon.js b/src/case/combo/iconcombo/combo.icon.js index 8cb821a1e..6c0f45c51 100644 --- a/src/case/combo/iconcombo/combo.icon.js +++ b/src/case/combo/iconcombo/combo.icon.js @@ -21,7 +21,8 @@ BI.IconCombo = BI.inherit(BI.Widget, { adjustYOffset: 0, offsetStyle: "left", chooseType: BI.ButtonGroup.CHOOSE_TYPE_SINGLE, - isShowDown: true + isShowDown: true, + hideWhenAnotherComboOpen: false }); }, @@ -71,6 +72,7 @@ BI.IconCombo = BI.inherit(BI.Widget, { adjustYOffset: o.adjustYOffset, offsetStyle: o.offsetStyle, el: this.trigger, + hideWhenAnotherComboOpen: o.hideWhenAnotherComboOpen, popup: { el: this.popup, maxWidth: o.maxWidth, From 2d14af6ac46f1852ae10b6f3ca4d5e374244029a Mon Sep 17 00:00:00 2001 From: data Date: Tue, 23 Aug 2022 10:21:04 +0800 Subject: [PATCH 138/161] auto upgrade version to 2.0.20220823102020 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 451d2e059..c768cdb74 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220822193554", + "version": "2.0.20220823102020", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 42642a4c4a839d6217b580bd0b7a53a250a9b813 Mon Sep 17 00:00:00 2001 From: Wilson Zhang <3412520089@qq.com> Date: Tue, 23 Aug 2022 12:31:27 +0800 Subject: [PATCH 139/161] =?UTF-8?q?BI-111127=20feat:BI=E7=BC=93=E5=AD=98?= =?UTF-8?q?=E5=90=8C=E6=AD=A56.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widget/multiselect/multiselect.loader.nobar.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/widget/multiselect/multiselect.loader.nobar.js b/src/widget/multiselect/multiselect.loader.nobar.js index 6d9852a35..d865b6d6b 100644 --- a/src/widget/multiselect/multiselect.loader.nobar.js +++ b/src/widget/multiselect/multiselect.loader.nobar.js @@ -18,7 +18,8 @@ BI.MultiSelectNoBarLoader = BI.inherit(BI.Widget, { valueFormatter: BI.emptyFn, itemsCreator: BI.emptyFn, itemHeight: BI.SIZE_CONSANTS.LIST_ITEM_HEIGHT, - onLoaded: BI.emptyFn + onLoaded: BI.emptyFn, + itemFormatter: BI.emptyFn, }); }, From d7cb6c261541321e75b1a9f775fb6f4f0310472b Mon Sep 17 00:00:00 2001 From: data Date: Tue, 23 Aug 2022 12:54:50 +0800 Subject: [PATCH 140/161] auto upgrade version to 2.0.20220823125441 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index c768cdb74..dae99c96e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220823102020", + "version": "2.0.20220823125441", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From d61ff68c61cea10b5a8097f74ca9fcc66e124d4f Mon Sep 17 00:00:00 2001 From: "Jimmy.Chai" Date: Tue, 23 Aug 2022 16:56:26 +0800 Subject: [PATCH 141/161] =?UTF-8?q?BI-110928=20=E6=9B=B4=E6=96=B0=E5=9B=BE?= =?UTF-8?q?=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/font/iconfont.eot | Bin 235132 -> 237068 bytes dist/font/iconfont.svg | 130 ++++++++++++++++++--------------------- dist/font/iconfont.ttf | Bin 234964 -> 236900 bytes dist/font/iconfont.woff | Bin 114020 -> 115876 bytes dist/font/iconfont.woff2 | Bin 86524 -> 88224 bytes 5 files changed, 61 insertions(+), 69 deletions(-) diff --git a/dist/font/iconfont.eot b/dist/font/iconfont.eot index 3ddfa699967d6b19956e0c97588bba9dabae1aad..a44223c9d18a9281c378465aa1dd2ca4d30f5ef5 100644 GIT binary patch delta 25940 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 C_An#> delta 23268 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 - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -28,33 +62,27 @@ - + - - - - - - - + - + - + - + - + @@ -70,7 +98,7 @@ - + @@ -130,8 +158,6 @@ - - @@ -258,12 +284,8 @@ - - - - @@ -288,12 +310,6 @@ - - - - - - @@ -316,8 +332,6 @@ - - @@ -374,12 +388,6 @@ - - - - - - @@ -388,10 +396,6 @@ - - - - @@ -410,16 +414,8 @@ - - - - - - - - @@ -472,8 +468,6 @@ - - @@ -598,11 +592,11 @@ - + - + @@ -742,7 +736,7 @@ - + @@ -882,9 +876,9 @@ - + - + @@ -892,7 +886,7 @@ - + @@ -912,7 +906,7 @@ - + @@ -972,11 +966,11 @@ - + - + @@ -994,11 +988,11 @@ - + - + @@ -1020,7 +1014,7 @@ - + @@ -1076,8 +1070,6 @@ - - @@ -1504,7 +1496,7 @@ - + @@ -1518,7 +1510,7 @@ - + @@ -1674,9 +1666,9 @@ - + - + @@ -1718,7 +1710,7 @@ - + @@ -1734,7 +1726,7 @@ - + @@ -1912,7 +1904,7 @@ - + diff --git a/dist/font/iconfont.ttf b/dist/font/iconfont.ttf index 3a9bb3bd3450051ae525695b66aa52d63169e196..57fff7cd5dc23853713062e8afaf4e6a7aa050e9 100644 GIT binary patch delta 25990 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 CT}`I| delta 23315 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 T-na8ji(R|^4{Uggl>h($CZUk# literal 114020 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�Ri=UqjAe^unMXI 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

    vV&OL&ZP(5A}Znl;_p}Le^r4Jh|fbLLUFX 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

    f50s~}U&QdzU!b4E-!-CV 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 N!^0ayO%Jyb{|$Ue7}o#* literal 86524 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

    uaw0qAv$u8PXZ-U{{a9J1#H3q From b7b5b4f078436ee455912f16d2c59fbc44fe7716 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 23 Aug 2022 19:15:12 +0800 Subject: [PATCH 142/161] auto upgrade version to 2.0.20220823191436 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dae99c96e..ec67dfae7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220823125441", + "version": "2.0.20220823191436", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From d45a818b0d1caf691cd103e639dba72dc4f365a1 Mon Sep 17 00:00:00 2001 From: data Date: Tue, 23 Aug 2022 23:16:25 +0800 Subject: [PATCH 143/161] auto upgrade version to 2.0.20220823231616 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ec67dfae7..1cf5da8c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220823191436", + "version": "2.0.20220823231616", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 74b4acd025c7fde797b6cc99233247e9d4b233f7 Mon Sep 17 00:00:00 2001 From: iapyang Date: Wed, 24 Aug 2022 16:30:23 +0800 Subject: [PATCH 144/161] =?UTF-8?q?chore:=20=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/webpack-fui-worker-plugin/worker-loader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index 3dcb8de6c..556bb6056 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -6,6 +6,7 @@ const webpack = require('webpack'); const loaderUtils = require('loader-utils'); const SingleEntryPlugin = require('webpack/lib/SingleEntryPlugin'); const { WorkerLoaderName, FileNamePrefix } = require('./constants'); +const { resolve } = require('path'); // 正常 loader 处理逻辑 function loader() { From aa34e6aea8d72c690ff14107010f0e1ba0390417 Mon Sep 17 00:00:00 2001 From: data Date: Wed, 24 Aug 2022 16:56:42 +0800 Subject: [PATCH 145/161] auto upgrade version to 2.0.20220824165610 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1cf5da8c7..a376ba370 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220823231616", + "version": "2.0.20220824165610", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From e8ca05094b0170b73cd94941e6015e6b1c5dff02 Mon Sep 17 00:00:00 2001 From: zsmj Date: Wed, 24 Aug 2022 17:04:31 +0800 Subject: [PATCH 146/161] =?UTF-8?q?DESIGN-4402=20fix:=20=E5=A4=8D=E9=80=89?= =?UTF-8?q?=E6=A0=91=E8=A7=86=E8=A7=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/less/base/tree/ztree.less | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/less/base/tree/ztree.less b/src/less/base/tree/ztree.less index c4a8b6097..9291efa27 100644 --- a/src/less/base/tree/ztree.less +++ b/src/less/base/tree/ztree.less @@ -79,16 +79,14 @@ vertical-align: top; display: inline-block; - .tree-node-text { - &:not(.disabled) { - &:hover { - .background-color(@color-bi-background-highlight, 10%); - } + &:not(.disabled) { + &:hover { + .background-color(@color-bi-background-highlight, 10%); + } - &:active { - color: @color-bi-text-highlight; - .background-color(@color-bi-background-highlight, 15%); - } + &:active { + color: @color-bi-text-highlight; + .background-color(@color-bi-background-highlight, 15%); } } } @@ -150,17 +148,12 @@ .ztree li span.icon { display: inline-block; - vertical-align: top; text-align: center; - width: 24px; - height: 24px; - line-height: 24px; -} - -.ztree li span.icon { - width: 32px; - height: 32px; - line-height: 32px; + width: 16px; + height: 16px; + line-height: 16px; + padding: 0 2px; + vertical-align: middle; } .ztree li span.button { From 95d499d156c88726457e8e99af8a7373fa9c59e9 Mon Sep 17 00:00:00 2001 From: data Date: Wed, 24 Aug 2022 17:56:14 +0800 Subject: [PATCH 147/161] auto upgrade version to 2.0.20220824175535 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a376ba370..618409294 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220824165610", + "version": "2.0.20220824175535", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 9d8ef216d6a59de2b9a946dfefc220cf53780715 Mon Sep 17 00:00:00 2001 From: iapyang Date: Thu, 25 Aug 2022 11:28:06 +0800 Subject: [PATCH 148/161] =?UTF-8?q?chore:=20=E4=BF=AE=E6=94=B9loader?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- plugins/webpack-fui-worker-plugin/worker-loader.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/plugins/webpack-fui-worker-plugin/worker-loader.js b/plugins/webpack-fui-worker-plugin/worker-loader.js index 556bb6056..23be31927 100644 --- a/plugins/webpack-fui-worker-plugin/worker-loader.js +++ b/plugins/webpack-fui-worker-plugin/worker-loader.js @@ -115,16 +115,18 @@ function loader() { null, // 插入代码的转译和压缩由主构建配置的 babel/ts loader 处理, 不需要 worker-worker 来处理 // 添加 @ts-nocheck 避免 ts-check 报错 + // 修复export const 下 const不会被转译的问题 `// @ts-nocheck const blob = new Blob([${JSON.stringify(compilation.assets[entry].source())}]); - export const workerUrl = window.URL.createObjectURL(blob); + const workerUrl = window.URL.createObjectURL(blob); + export default workerUrl; ` ) : callback( null, `// @ts-nocheck const servicePath = __webpack_public_path__ + ${JSON.stringify(entry)}; - export const workerUrl = servicePath; + export default servicePath; ` ) }); From 009e6d2424b662c9997c953d9bf84fa164615ae0 Mon Sep 17 00:00:00 2001 From: data Date: Thu, 25 Aug 2022 11:56:19 +0800 Subject: [PATCH 149/161] auto upgrade version to 2.0.20220825115604 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 618409294..e2a448481 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220824175535", + "version": "2.0.20220825115604", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From f2da6ac7d6cdca0991a404eba5999ec5ac0d46f1 Mon Sep 17 00:00:00 2001 From: windy Date: Thu, 25 Aug 2022 13:49:24 +0800 Subject: [PATCH 150/161] =?UTF-8?q?BI-107557=20=E5=8D=95=E9=80=89=E4=B8=8B?= =?UTF-8?q?=E6=8B=89null=E5=80=BC=E6=98=BE=E7=A4=BA=E5=A4=84=E7=90=86=20&&?= =?UTF-8?q?=20=E6=9B=B4=E6=96=B0=E5=9B=BE=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bi.lessconfig.json | 4 +- dist/font/iconfont.eot | Bin 237068 -> 231936 bytes dist/font/iconfont.svg | 76 +++++------------- dist/font/iconfont.ttf | Bin 236900 -> 231768 bytes dist/font/iconfont.woff | Bin 115876 -> 112836 bytes dist/font/iconfont.woff2 | Bin 88224 -> 85844 bytes .../trigger/searcher.singleselect.js | 3 +- 7 files changed, 25 insertions(+), 58 deletions(-) diff --git a/bi.lessconfig.json b/bi.lessconfig.json index 563eaed07..7de7350ae 100644 --- a/bi.lessconfig.json +++ b/bi.lessconfig.json @@ -38,5 +38,7 @@ "@color-bi-color-toast-normal": "#2C60DB", "@color-bi-color-toast-text": "#000A19", "@color-bi-text-header-background": "rgba(9, 30, 64, 0.9)", - "@color-bi-text-header-background-theme-dark": "rgba(255, 255, 255, 0.9)" + "@color-bi-text-header-background-theme-dark": "rgba(255, 255, 255, 0.9)", + "@font-down-triangle": "e70b", + "@font-date": "e733" } \ No newline at end of file diff --git a/dist/font/iconfont.eot b/dist/font/iconfont.eot index a44223c9d18a9281c378465aa1dd2ca4d30f5ef5..9bf13298071510736d8657495e717b65e8326e2f 100644 GIT binary patch delta 13489 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 PG$ABr%$*PhmQ(pZXHQLg delta 18604 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 N1)Zz!p5rb``9IENoAUqw diff --git a/dist/font/iconfont.svg b/dist/font/iconfont.svg index 88dafb457..d2d51982b 100644 --- a/dist/font/iconfont.svg +++ b/dist/font/iconfont.svg @@ -432,50 +432,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -886,13 +850,13 @@ - + - + @@ -1020,31 +984,31 @@ - + - + - + - + - + @@ -1056,71 +1020,71 @@ - + - + - + - + - + - + - + - + - + - + - + - + @@ -1660,7 +1624,7 @@ - + diff --git a/dist/font/iconfont.ttf b/dist/font/iconfont.ttf index 57fff7cd5dc23853713062e8afaf4e6a7aa050e9..75f0d4f573654ee420665c5eb00f552957c227c0 100644 GIT binary patch delta 13602 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 delta 18481 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 diff --git a/dist/font/iconfont.woff b/dist/font/iconfont.woff index f86675aa2d3a30c2c98b390abd5a3c40c7caab1b..92c2c1a5326f5c08b7b7b5fcd05f74a2bfcdba55 100644 GIT binary patch delta 90098 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

    !;_;=rBy6FkGe$Z&E{I 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

    60000mEmxud diff --git a/dist/font/iconfont.woff2 b/dist/font/iconfont.woff2 index 06408f2fa49f5893c31b2ccf4f29f258d61d56c6..0ef218ef395af9d0e16f9221bd524ef9586783da 100644 GIT binary patch literal 85844 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�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�Ri=UqjAe^unMXI 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

    vV&OL&ZP(5A}Znl;_p}Le^r4Jh|fbLLUFX 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

    f50s~}U&QdzU!b4E-!-CV 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 N!^0ayO%Jyb{|$Ue7}o#* diff --git a/src/widget/singleselect/trigger/searcher.singleselect.js b/src/widget/singleselect/trigger/searcher.singleselect.js index aa5ece93b..a5674b8f1 100644 --- a/src/widget/singleselect/trigger/searcher.singleselect.js +++ b/src/widget/singleselect/trigger/searcher.singleselect.js @@ -125,9 +125,10 @@ BI.SingleSelectSearcher = BI.inherit(BI.Widget, { setState: function (v) { var o = this.options; - if (BI.isNull(v)) { + if (BI.isUndefined(v)) { this.editor.setState(BI.Selection.None); } else { + v = v || ""; this.editor.setState(o.valueFormatter(v + "") || (v + "")); } }, From 54aad3d9c55e862bce0a3ec507fcd973eead3183 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 25 Aug 2022 15:34:47 +0800 Subject: [PATCH 151/161] =?UTF-8?q?KERNEL-12552=20feat:=20=E4=B8=8D?= =?UTF-8?q?=E6=89=A7=E8=A1=8CBI.init()=EF=BC=8C=E5=BE=88=E5=A4=9A=E6=96=B9?= =?UTF-8?q?=E6=B3=95=E8=B0=83=E7=94=A8=E4=BC=9A=E5=87=BA=E7=8E=B0=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/base/0.base.js | 20 ++++----- src/core/{plugin.js => 6.plugin.js} | 0 src/core/platform/web/config.js | 70 ++++++++++++++--------------- 3 files changed, 44 insertions(+), 46 deletions(-) rename src/core/{plugin.js => 6.plugin.js} (100%) diff --git a/src/base/0.base.js b/src/base/0.base.js index a8aa11a21..1100c0709 100644 --- a/src/base/0.base.js +++ b/src/base/0.base.js @@ -1,11 +1,9 @@ -BI.prepares.push(function () { - BI.Resizers = new BI.ResizeController(); - BI.Layers = new BI.LayerController(); - BI.Maskers = new BI.MaskersController(); - BI.Bubbles = new BI.BubblesController(); - BI.Tooltips = new BI.TooltipsController(); - BI.Popovers = new BI.PopoverController(); - BI.Drawers = new BI.DrawerController(); - BI.Broadcasts = new BI.BroadcastController(); - BI.StyleLoaders = new BI.StyleLoaderManager(); -}); +BI.Resizers = new BI.ResizeController(); +BI.Layers = new BI.LayerController(); +BI.Maskers = new BI.MaskersController(); +BI.Bubbles = new BI.BubblesController(); +BI.Tooltips = new BI.TooltipsController(); +BI.Popovers = new BI.PopoverController(); +BI.Drawers = new BI.DrawerController(); +BI.Broadcasts = new BI.BroadcastController(); +BI.StyleLoaders = new BI.StyleLoaderManager(); diff --git a/src/core/plugin.js b/src/core/6.plugin.js similarity index 100% rename from src/core/plugin.js rename to src/core/6.plugin.js diff --git a/src/core/platform/web/config.js b/src/core/platform/web/config.js index 9c4ba840c..6a955a27e 100644 --- a/src/core/platform/web/config.js +++ b/src/core/platform/web/config.js @@ -1,5 +1,5 @@ // 工程配置 -BI.prepares.push(function () { +!(function () { // 注册布局 // adapt类布局优先级规则 // 1、支持flex的浏览器下使用flex布局 @@ -39,16 +39,16 @@ BI.prepares.push(function () { // return BI.extend({}, ob, {type: "bi.table_adapt"}); // } if (supportFlex) { - return BI.extend({}, ob, {type: "bi.flex_horizontal"}); + return BI.extend({}, ob, { type: "bi.flex_horizontal" }); } return BI.extend({ scrollx: true - }, ob, {type: "bi.inline"}); + }, ob, { type: "bi.inline" }); }); BI.Plugin.configWidget("bi.vertical", function (ob) { if (ob.horizontalAlign === BI.HorizontalAlign.Left || ob.horizontalAlign === BI.HorizontalAlign.Right) { if (isSupportFlex()) { - return BI.extend({}, ob, {type: "bi.flex_vertical"}); + return BI.extend({}, ob, { type: "bi.flex_vertical" }); } return BI.extend({}, ob, { horizontalAlign: BI.HorizontalAlign.Stretch, @@ -88,14 +88,14 @@ BI.prepares.push(function () { if ((ob.scrollable !== true && ob.scrollx !== true) || ob.horizontalAlign === BI.HorizontalAlign.Stretch) { return BI.extend({ verticalAlign: BI.VerticalAlign.Top - }, ob, {type: "bi.horizontal_float_fill"}); + }, ob, { type: "bi.horizontal_float_fill" }); } return BI.extend({ horizontalAlign: BI.HorizontalAlign.Stretch - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); } if (BI.Providers.getProvider("bi.provider.system").getResponsiveMode()) { - return BI.extend({}, ob, {type: "bi.responsive_inline"}); + return BI.extend({}, ob, { type: "bi.responsive_inline" }); } return ob; }); @@ -104,9 +104,9 @@ BI.prepares.push(function () { // var isAdapt = !ob.horizontalAlign || ob.horizontalAlign === BI.HorizontalAlign.Center || ob.horizontalAlign === BI.HorizontalAlign.Stretch; // if (!isAdapt || justOneItem) { if (supportFlex) { - return BI.extend({}, ob, {type: "bi.flex_center_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_center_adapt" }); } - return BI.extend({}, ob, {type: "bi.inline_center_adapt"}); + return BI.extend({}, ob, { type: "bi.inline_center_adapt" }); // } // return ob; }); @@ -115,9 +115,9 @@ BI.prepares.push(function () { // var isAdapt = ob.horizontalAlign === BI.HorizontalAlign.Center || ob.horizontalAlign === BI.HorizontalAlign.Stretch; // if (!isAdapt || justOneItem) { if (supportFlex) { - return BI.extend({}, ob, {type: "bi.flex_vertical_center_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_vertical_center_adapt" }); } - return BI.extend({}, ob, {type: "bi.inline_vertical_adapt"}); + return BI.extend({}, ob, { type: "bi.inline_vertical_adapt" }); // } // return ob; }); @@ -126,7 +126,7 @@ BI.prepares.push(function () { var isAdapt = !ob.horizontalAlign || ob.horizontalAlign === BI.HorizontalAlign.Center || ob.horizontalAlign === BI.HorizontalAlign.Stretch; var verticalAlignTop = !ob.verticalAlign || ob.verticalAlign === BI.VerticalAlign.TOP; if (verticalAlignTop && justOneItem) { - return BI.extend({}, ob, {type: "bi.horizontal_auto"}); + return BI.extend({}, ob, { type: "bi.horizontal_auto" }); } var supportFlex = isSupportFlex(); // 在横向自适应场景下我们需要使用table的自适应撑出滚动条的特性(flex处理不了这种情况) @@ -134,24 +134,24 @@ BI.prepares.push(function () { if (isAdapt) { return BI.extend({ horizontalAlign: BI.HorizontalAlign.Center - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); } if (supportFlex) { return BI.extend({ horizontalAlign: BI.HorizontalAlign.Center, scrollx: false - }, ob, {type: "bi.flex_horizontal"}); + }, ob, { type: "bi.flex_horizontal" }); } return BI.extend({ horizontalAlign: BI.HorizontalAlign.Center - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); }); BI.Plugin.configWidget("bi.horizontal_float", function (ob) { if (isSupportFlex()) { - return BI.extend({}, ob, {type: "bi.flex_horizontal_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_horizontal_adapt" }); } if (ob.items && ob.items.length <= 1) { - return BI.extend({}, ob, {type: "bi.inline_horizontal_adapt"}); + return BI.extend({}, ob, { type: "bi.inline_horizontal_adapt" }); } return ob; }); @@ -162,16 +162,16 @@ BI.prepares.push(function () { horizontalAlign: BI.HorizontalAlign.Stretch, verticalAlign: BI.VerticalAlign.Stretch, scrollx: false - }, ob, {type: "bi.flex_horizontal"}); + }, ob, { type: "bi.flex_horizontal" }); } if ((ob.horizontalAlign && ob.horizontalAlign !== BI.HorizontalAlign.Stretch) || (ob.scrollable === true || ob.scrollx === true)) { // 宽度不受限,要用table布局 return BI.extend({ horizontalAlign: BI.HorizontalAlign.Stretch, verticalAlign: BI.VerticalAlign.Stretch - }, ob, {type: "bi.table_adapt"}); + }, ob, { type: "bi.table_adapt" }); } - return BI.extend({}, ob, {type: "bi.horizontal_float_fill"}); + return BI.extend({}, ob, { type: "bi.horizontal_float_fill" }); }); BI.Plugin.configWidget("bi.vertical_fill", function (ob) { if (isSupportFlex()) { @@ -179,7 +179,7 @@ BI.prepares.push(function () { horizontalAlign: BI.HorizontalAlign.Stretch, verticalAlign: BI.VerticalAlign.Stretch, scrolly: false - }, ob, {type: "bi.flex_vertical"}); + }, ob, { type: "bi.flex_vertical" }); } if (ob.scrollable === true || ob.scrollx === true || ob.scrolly === true) { // 有滚动条,降级到table布局处理 @@ -204,18 +204,18 @@ BI.prepares.push(function () { } if (hasAuto) { // 有自动高的时候 - return BI.extend({}, ob, {type: "bi.vtape_auto"}); + return BI.extend({}, ob, { type: "bi.vtape_auto" }); } - return BI.extend({}, ob, {type: "bi.vtape"}); + return BI.extend({}, ob, { type: "bi.vtape" }); }); BI.Plugin.configWidget("bi.horizontal_sticky", function (ob) { if (!isSupportSticky) { - return BI.extend({ scrollx: true }, ob, {type: "bi.horizontal_fill"}); + return BI.extend({ scrollx: true }, ob, { type: "bi.horizontal_fill" }); } }); BI.Plugin.configWidget("bi.vertical_sticky", function (ob) { if (!isSupportSticky) { - return BI.extend({ scrolly: true }, ob, {type: "bi.vertical_fill"}); + return BI.extend({ scrolly: true }, ob, { type: "bi.vertical_fill" }); } }); @@ -223,7 +223,7 @@ BI.prepares.push(function () { if (isSupportFlex()) { // IE下其实也是可以使用flex布局的,只要排除掉出现滚动条的情况 // if (!BI.isIE() || (ob.scrollable !== true && ob.scrolly !== true)) { - return BI.extend({}, ob, {type: "bi.flex_left_right_vertical_adapt"}); + return BI.extend({}, ob, { type: "bi.flex_left_right_vertical_adapt" }); // } } return ob; @@ -232,40 +232,40 @@ BI.prepares.push(function () { if (ob.scrollable === true || ob.scrollx !== false) { if (ob.hgap > 0 || ob.lgap > 0 || ob.rgap > 0) { if (BI.Providers.getProvider("bi.provider.system").getResponsiveMode()) { - return BI.extend({}, ob, {type: "bi.responsive_flex_scrollable_horizontal"}); + return BI.extend({}, ob, { type: "bi.responsive_flex_scrollable_horizontal" }); } - return BI.extend({}, ob, {type: "bi.flex_scrollable_horizontal"}); + return BI.extend({}, ob, { type: "bi.flex_scrollable_horizontal" }); } } if (BI.Providers.getProvider("bi.provider.system").getResponsiveMode()) { - return BI.extend({}, ob, {type: "bi.responsive_flex_horizontal"}); + return BI.extend({}, ob, { type: "bi.responsive_flex_horizontal" }); } }); BI.Plugin.configWidget("bi.flex_vertical", function (ob) { if (ob.scrollable === true || ob.scrollx === true) { if (ob.hgap > 0 || ob.lgap > 0 || ob.rgap > 0) { - return BI.extend({}, ob, {type: "bi.flex_scrollable_vertical"}); + return BI.extend({}, ob, { type: "bi.flex_scrollable_vertical" }); } } }); BI.Plugin.configWidget("bi.table", function (ob) { if (!isSupportGrid()) { - return BI.extend({}, ob, {type: "bi.td"}); + return BI.extend({}, ob, { type: "bi.td" }); } return ob; }); BI.Plugin.configWidget("bi.radio", function (ob) { if (BI.isIE() && BI.getIEVersion() <= 9) { - return BI.extend({}, ob, {type: "bi.image_radio"}); + return BI.extend({}, ob, { type: "bi.image_radio" }); } return ob; }); BI.Plugin.configWidget("bi.checkbox", function (ob) { if (BI.isIE() && BI.getIEVersion() <= 9) { - return BI.extend({}, ob, {type: "bi.image_checkbox"}); + return BI.extend({}, ob, { type: "bi.image_checkbox" }); } return ob; }); @@ -274,6 +274,6 @@ BI.prepares.push(function () { if (BI.isIE() && BI.getIEVersion() < 9) { return ob; } - return BI.extend({}, ob, {type: "bi.half_button"}); + return BI.extend({}, ob, { type: "bi.half_button" }); }); -}); +}()); From 0be960ba8699e3c2e15a721878945160ad6b90fa Mon Sep 17 00:00:00 2001 From: data Date: Thu, 25 Aug 2022 16:36:17 +0800 Subject: [PATCH 152/161] auto upgrade version to 2.0.20220825163610 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e2a448481..40a867ace 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220825115604", + "version": "2.0.20220825163610", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From df542cf009f675c616ebbd63aa708a1bfcb12129 Mon Sep 17 00:00:00 2001 From: zsmj Date: Thu, 25 Aug 2022 17:16:56 +0800 Subject: [PATCH 153/161] =?UTF-8?q?DESIGN-4402=20fix:=20=E5=A4=8D=E9=80=89?= =?UTF-8?q?=E6=A0=91=E8=A7=86=E8=A7=89=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/less/base/tree/ztree.less | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/less/base/tree/ztree.less b/src/less/base/tree/ztree.less index 9291efa27..4591f64ec 100644 --- a/src/less/base/tree/ztree.less +++ b/src/less/base/tree/ztree.less @@ -92,7 +92,7 @@ } .ztree.solid li a { - height: 32px; + height: 30px; } .ztree li a.curSelectedNode { @@ -143,7 +143,7 @@ } .ztree.solid li span { - line-height: 32px; + line-height: 30px; } .ztree li span.icon { @@ -282,8 +282,8 @@ } .ztree.solid li span.button.switch { - width: 32px; - height: 32px + width: 30px; + height: 30px } .ztree li span.button.switch.noline_open { From 916867ef3ad9cf9907498f2cd6af1127c469c8e5 Mon Sep 17 00:00:00 2001 From: data Date: Thu, 25 Aug 2022 19:47:29 +0800 Subject: [PATCH 154/161] auto upgrade version to 2.0.20220825194716 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 40a867ace..7dfdb8a98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220825163610", + "version": "2.0.20220825194716", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From fe111c9a96152a2c833876974f1875b7583f4e96 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 26 Aug 2022 09:04:51 +0800 Subject: [PATCH 155/161] auto upgrade version to 2.0.20220826090446 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 7dfdb8a98..bbd65a828 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220825194716", + "version": "2.0.20220826090446", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From ca4346814e26283c3180fe63f0dcc4a7c7b6ddfc Mon Sep 17 00:00:00 2001 From: treecat Date: Fri, 26 Aug 2022 09:40:29 +0800 Subject: [PATCH 156/161] =?UTF-8?q?=E6=97=A0JIRA=20fix:=E6=8C=89=E9=92=AE?= =?UTF-8?q?=20textAlign=20=E5=A4=B1=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/js/base/button/demo.button.js | 5 +++++ src/base/single/button/buttons/button.js | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/demo/js/base/button/demo.button.js b/demo/js/base/button/demo.button.js index 420a47d77..651d98e4a 100644 --- a/demo/js/base/button/demo.button.js +++ b/demo/js/base/button/demo.button.js @@ -376,6 +376,11 @@ Demo.Button = BI.inherit(BI.Widget, { this.loaded(); }, 5 * 1000); }, + }, { + type: "bi.button", + text: "文字偏左的按钮", + textAlign: "left", + width: 200, }]; return { diff --git a/src/base/single/button/buttons/button.js b/src/base/single/button/buttons/button.js index 11762c86d..94b590f84 100644 --- a/src/base/single/button/buttons/button.js +++ b/src/base/single/button/buttons/button.js @@ -141,6 +141,7 @@ // bi.center_adapt 作用:让 hgap 不影响 iconGap。 BI.createWidget({ type: "bi.center_adapt", + horizontalAlign: o.textAlign, element: this, hgap: o.hgap, vgap: o.vgap, @@ -161,7 +162,7 @@ }); if (o.minWidth > 0) { - this.element.css({"min-width": o.minWidth / BI.pixRatio + BI.pixUnit}); + this.element.css({ "min-width": o.minWidth / BI.pixRatio + BI.pixUnit }); } }, From d6c98091d53f86061ed68ae2cfff97e633c0b30f Mon Sep 17 00:00:00 2001 From: data Date: Fri, 26 Aug 2022 11:08:09 +0800 Subject: [PATCH 157/161] auto upgrade version to 2.0.20220826110757 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bbd65a828..6e476c7c6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220826090446", + "version": "2.0.20220826110757", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 8791b6d4073271e29945cc5409c30966426499a6 Mon Sep 17 00:00:00 2001 From: zsmj Date: Fri, 26 Aug 2022 13:54:55 +0800 Subject: [PATCH 158/161] =?UTF-8?q?REPORT-77978=20fix:=20=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E6=A0=91=E6=B0=B4=E5=8D=B0=E8=A1=A8=E7=8E=B0=E5=BC=82?= =?UTF-8?q?=E5=B8=B8=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/widget/multilayerselecttree/multilayerselecttree.combo.js | 3 +-- .../multilayerselecttree/multilayerselecttree.trigger.js | 2 +- src/widget/multilayersingletree/multilayersingletree.combo.js | 3 +-- .../multilayersingletree/multilayersingletree.trigger.js | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/widget/multilayerselecttree/multilayerselecttree.combo.js b/src/widget/multilayerselecttree/multilayerselecttree.combo.js index 9f5a4afcb..e748ee1c5 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.combo.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.combo.js @@ -13,7 +13,6 @@ BI.MultiLayerSelectTreeCombo = BI.inherit(BI.Widget, { defaultText: "", itemsCreator: BI.emptyFn, items: [], - value: "", allowEdit: false, allowSearchValue: false, allowInsertValue: false, @@ -289,4 +288,4 @@ BI.MultiLayerSelectTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiLayerSelectTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSelectTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; BI.MultiLayerSelectTreeCombo.EVENT_CLICK_ITEM = "EVENT_CLICK_ITEM"; -BI.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo); \ No newline at end of file +BI.shortcut("bi.multilayer_select_tree_combo", BI.MultiLayerSelectTreeCombo); diff --git a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js index c094bac9e..08f9f9a9e 100644 --- a/src/widget/multilayerselecttree/multilayerselecttree.trigger.js +++ b/src/widget/multilayerselecttree/multilayerselecttree.trigger.js @@ -42,7 +42,7 @@ BI.MultiLayerSelectTreeTrigger = BI.inherit(BI.Trigger, { self.editor = this; }, defaultText: o.defaultText, - text: this._digest(o.value), + text: BI.isKey(o.value) ? this._digest(o.value) : o.text, value: o.value, height: o.height, tipText: "", diff --git a/src/widget/multilayersingletree/multilayersingletree.combo.js b/src/widget/multilayersingletree/multilayersingletree.combo.js index f6a8d2718..364f1e008 100644 --- a/src/widget/multilayersingletree/multilayersingletree.combo.js +++ b/src/widget/multilayersingletree/multilayersingletree.combo.js @@ -16,7 +16,6 @@ BI.MultiLayerSingleTreeCombo = BI.inherit(BI.Widget, { defaultText: "", itemsCreator: BI.emptyFn, items: [], - value: "", allowEdit: false, allowSearchValue: false, allowInsertValue: false, @@ -263,4 +262,4 @@ BI.MultiLayerSingleTreeCombo.EVENT_FOCUS = "EVENT_FOCUS"; BI.MultiLayerSingleTreeCombo.EVENT_CHANGE = "EVENT_CHANGE"; BI.MultiLayerSingleTreeCombo.EVENT_STOP = "EVENT_STOP"; BI.MultiLayerSingleTreeCombo.EVENT_BEFORE_POPUPVIEW = "EVENT_BEFORE_POPUPVIEW"; -BI.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo); \ No newline at end of file +BI.shortcut("bi.multilayer_single_tree_combo", BI.MultiLayerSingleTreeCombo); diff --git a/src/widget/multilayersingletree/multilayersingletree.trigger.js b/src/widget/multilayersingletree/multilayersingletree.trigger.js index 1ede397e2..b4f5c8dd9 100644 --- a/src/widget/multilayersingletree/multilayersingletree.trigger.js +++ b/src/widget/multilayersingletree/multilayersingletree.trigger.js @@ -42,7 +42,7 @@ BI.MultiLayerSingleTreeTrigger = BI.inherit(BI.Trigger, { self.editor = this; }, defaultText: o.defaultText, - text: this._digest(o.value), + text: BI.isKey(o.value) ? this._digest(o.value) : o.text, value: o.value, height: o.height, tipText: "", From 2b8262ad0dd47424eba6e7c4be4c549e6ae3cbc9 Mon Sep 17 00:00:00 2001 From: data Date: Fri, 26 Aug 2022 17:18:20 +0800 Subject: [PATCH 159/161] auto upgrade version to 2.0.20220826171804 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6e476c7c6..5adececaa 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220826110757", + "version": "2.0.20220826171804", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts", From 271815c4cedaa6684a9eba11620c67857ef893a5 Mon Sep 17 00:00:00 2001 From: guy Date: Fri, 26 Aug 2022 17:36:06 +0800 Subject: [PATCH 160/161] bugfix: bug --- src/base/single/1.text.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/base/single/1.text.js b/src/base/single/1.text.js index 50aebf841..2eb0fe1df 100644 --- a/src/base/single/1.text.js +++ b/src/base/single/1.text.js @@ -65,7 +65,7 @@ tagName: "span", }); this.text.element.click(function (e) { - o.handler.call(self, self.getValue(), self, e); + !o.disabled && o.invalid && o.handler.call(self, self.getValue(), self, e); }); BI.createWidget({ type: "bi.default", From fd638f25a79d74f4fd30421bc08c44ce1184d04a Mon Sep 17 00:00:00 2001 From: data Date: Fri, 26 Aug 2022 17:57:13 +0800 Subject: [PATCH 161/161] auto upgrade version to 2.0.20220826175704 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 5adececaa..6ccd9486e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fineui", - "version": "2.0.20220826171804", + "version": "2.0.20220826175704", "description": "fineui", "main": "dist/fineui_without_conflict.min.js", "types": "dist/lib/index.d.ts",