!(function (t, e) { "function" == typeof define && define.amd && "function" == typeof require && "function" == typeof require.specified && require.specified("knockout") ? define(["jquery", "knockout"], e) : e(t.jQuery, t.ko); })(this, function (t, e) { "use strict"; function i(e, i) { (this.$select = t(e)), (this.options = this.mergeOptions(t.extend({}, i, this.$select.data()))), this.$select.attr("data-placeholder") && (this.options.nonSelectedText = this.$select.data("placeholder")), (this.originalOptions = this.$select.clone()[0].options), (this.query = ""), (this.searchTimeout = null), (this.lastToggledInput = null), (this.options.multiple = "multiple" === this.$select.attr("multiple")), (this.options.onChange = t.proxy(this.options.onChange, this)), (this.options.onSelectAll = t.proxy(this.options.onSelectAll, this)), (this.options.onDeselectAll = t.proxy(this.options.onDeselectAll, this)), (this.options.onDropdownShow = t.proxy(this.options.onDropdownShow, this)), (this.options.onDropdownHide = t.proxy(this.options.onDropdownHide, this)), (this.options.onDropdownShown = t.proxy(this.options.onDropdownShown, this)), (this.options.onDropdownHidden = t.proxy(this.options.onDropdownHidden, this)), (this.options.onInitialized = t.proxy(this.options.onInitialized, this)), (this.options.onFiltering = t.proxy(this.options.onFiltering, this)), this.buildContainer(), this.buildButton(), this.buildDropdown(), this.buildReset(), this.buildSelectAll(), this.buildDropdownOptions(), this.buildFilter(), this.updateButtonText(), this.updateSelectAll(!0), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(), (this.options.wasDisabled = this.$select.prop("disabled")), this.options.disableIfEmpty && t("option", this.$select).length <= 0 && this.disable(), this.$select.wrap('').after(this.$container), this.options.onInitialized(this.$select, this.$container); } void 0 !== e && e.bindingHandlers && !e.bindingHandlers.multiselect && (e.bindingHandlers.multiselect = { after: ["options", "value", "selectedOptions", "enable", "disable"], init: function (i, s, l, o, n) { var a = t(i), p = e.toJS(s()); if ((a.multiselect(p), l.has("options"))) { var h = l.get("options"); e.isObservable(h) && e.computed({ read: function () { h(), setTimeout(function () { var t = a.data("multiselect"); t && t.updateOriginalOptions(), a.multiselect("rebuild"); }, 1); }, disposeWhenNodeIsRemoved: i, }); } if (l.has("value")) { var c = l.get("value"); e.isObservable(c) && e .computed({ read: function () { c(), setTimeout(function () { a.multiselect("refresh"); }, 1); }, disposeWhenNodeIsRemoved: i, }) .extend({ rateLimit: 100, notifyWhenChangesStop: !0 }); } if (l.has("selectedOptions")) { var r = l.get("selectedOptions"); e.isObservable(r) && e .computed({ read: function () { r(), setTimeout(function () { a.multiselect("refresh"); }, 1); }, disposeWhenNodeIsRemoved: i, }) .extend({ rateLimit: 100, notifyWhenChangesStop: !0 }); } var u = function (t) { setTimeout(function () { t ? a.multiselect("enable") : a.multiselect("disable"); }); }; if (l.has("enable")) { var d = l.get("enable"); e.isObservable(d) ? e .computed({ read: function () { u(d()); }, disposeWhenNodeIsRemoved: i, }) .extend({ rateLimit: 100, notifyWhenChangesStop: !0 }) : u(d); } if (l.has("disable")) { var b = l.get("disable"); e.isObservable(b) ? e .computed({ read: function () { u(!b()); }, disposeWhenNodeIsRemoved: i, }) .extend({ rateLimit: 100, notifyWhenChangesStop: !0 }) : u(!b); } e.utils.domNodeDisposal.addDisposeCallback(i, function () { a.multiselect("destroy"); }); }, update: function (i, s, l, o, n) { var a = t(i), p = e.toJS(s()); a.multiselect("setOptions", p), a.multiselect("rebuild"); }, }), (i.prototype = { defaults: { buttonText: function (e, i) { if (this.disabledText.length > 0 && (i.prop("disabled") || (0 == e.length && this.disableIfEmpty))) return this.disabledText; if (0 === e.length) return this.nonSelectedText; if (this.allSelectedText && e.length === t("option", t(i)).length && 1 !== t("option", t(i)).length && this.multiple) return this.selectAllNumber ? this.allSelectedText + " (" + e.length + ")" : this.allSelectedText; if (0 != this.numberDisplayed && e.length > this.numberDisplayed) return e.length + " " + this.nSelectedText; var s = "", l = this.delimiterText; return ( e.each(function () { var e = void 0 !== t(this).attr("label") ? t(this).attr("label") : t(this).text(); s += e + l; }), s.substr(0, s.length - this.delimiterText.length) ); }, buttonTitle: function (e, i) { if (0 === e.length) return this.nonSelectedText; var s = "", l = this.delimiterText; return ( e.each(function () { var e = void 0 !== t(this).attr("label") ? t(this).attr("label") : t(this).text(); s += e + l; }), s.substr(0, s.length - this.delimiterText.length) ); }, checkboxName: function (t) { return !1; }, optionLabel: function (e) { return t(e).attr("label") || t(e).text(); }, optionClass: function (e) { return t(e).attr("class") || ""; }, onChange: function (t, e) {}, onDropdownShow: function (t) {}, onDropdownHide: function (t) {}, onDropdownShown: function (t) {}, onDropdownHidden: function (t) {}, onSelectAll: function () {}, onDeselectAll: function () {}, onInitialized: function (t, e) {}, onFiltering: function (t) {}, enableHTML: !1, buttonClass: "btn btn-default", inheritClass: !1, buttonWidth: "300px", buttonContainer: '
', dropRight: !1, dropUp: !1, selectedClass: "active", maxHeight: !1, includeSelectAllOption: !1, includeSelectAllIfMoreThan: 0, selectAllText: " Select all", selectAllValue: "multiselect-all", selectAllName: !1, selectAllNumber: !0, selectAllJustVisible: !0, enableFiltering: !1, enableCaseInsensitiveFiltering: !1, enableFullValueFiltering: !1, enableClickableOptGroups: !1, enableCollapsibleOptGroups: !1, collapseOptGroupsByDefault: !1, filterPlaceholder: "Search", filterBehavior: "text", includeFilterClearBtn: !0, preventInputChangeEvent: !1, nonSelectedText: "None selected", nSelectedText: "selected", allSelectedText: "All selected", numberDisplayed: 3, disableIfEmpty: !1, disabledText: "", delimiterText: ", ", includeResetOption: !1, includeResetDivider: !1, resetText: "Reset", templates: { button: '', ul: '', filter: '
  • ', filterClearBtn: '', li: '
  • ', divider: '
  • ', liGroup: '
  • ', resetButton: '
  • ', }, }, constructor: i, buildContainer: function () { (this.$container = t(this.options.buttonContainer)), this.$container.on("show.bs.dropdown", this.options.onDropdownShow), this.$container.on("hide.bs.dropdown", this.options.onDropdownHide), this.$container.on("shown.bs.dropdown", this.options.onDropdownShown), this.$container.on("hidden.bs.dropdown", this.options.onDropdownHidden); }, buildButton: function () { (this.$button = t(this.options.templates.button).addClass(this.options.buttonClass)), this.$select.attr("class") && this.options.inheritClass && this.$button.addClass(this.$select.attr("class")), this.$select.prop("disabled") ? this.disable() : this.enable(), this.options.buttonWidth && "auto" !== this.options.buttonWidth && (this.$button.css({ width: "100%", overflow: "hidden", "text-overflow": "ellipsis" }), this.$container.css({ width: this.options.buttonWidth })); var e = this.$select.attr("tabindex"); e && this.$button.attr("tabindex", e), this.$container.prepend(this.$button); }, buildDropdown: function () { if ( ((this.$ul = t(this.options.templates.ul)), this.options.dropRight && this.$ul.addClass("pull-right"), this.options.maxHeight && this.$ul.css({ "max-height": this.options.maxHeight + "px", "overflow-y": "auto", "overflow-x": "hidden" }), this.options.dropUp) ) { var e = Math.min( this.options.maxHeight, 26 * t('option[data-role!="divider"]', this.$select).length + 19 * t('option[data-role="divider"]', this.$select).length + (this.options.includeSelectAllOption ? 26 : 0) + (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering ? 44 : 0) ), i = e + 34; this.$ul.css({ "max-height": e + "px", "overflow-y": "auto", "overflow-x": "hidden", "margin-top": "-" + i + "px" }); } this.$container.append(this.$ul); }, buildDropdownOptions: function () { this.$select.children().each( t.proxy(function (e, i) { var s = t(i), l = s.prop("tagName").toLowerCase(); s.prop("value") !== this.options.selectAllValue && ("optgroup" === l ? this.createOptgroup(i) : "option" === l && ("divider" === s.data("role") ? this.createDivider() : this.createOptionValue(i))); }, this) ), t(this.$ul).off("change", 'li:not(.multiselect-group) input[type="checkbox"], li:not(.multiselect-group) input[type="radio"]'), t(this.$ul).on( "change", 'li:not(.multiselect-group) input[type="checkbox"], li:not(.multiselect-group) input[type="radio"]', t.proxy(function (e) { var i = t(e.target), s = i.prop("checked") || !1, l = i.val() === this.options.selectAllValue; this.options.selectedClass && (s ? i.closest("li").addClass(this.options.selectedClass) : i.closest("li").removeClass(this.options.selectedClass)); var o = i.val(), n = this.getOptionByValue(o), a = t("option", this.$select).not(n), p = t("input", this.$container).not(i); if ( (l ? s ? this.selectAll(this.options.selectAllJustVisible, !0) : this.deselectAll(this.options.selectAllJustVisible, !0) : (s ? (n.prop("selected", !0), this.options.multiple ? n.prop("selected", !0) : (this.options.selectedClass && t(p).closest("li").removeClass(this.options.selectedClass), t(p).prop("checked", !1), a.prop("selected", !1), this.$button.click()), "active" === this.options.selectedClass && a.closest("a").css("outline", "")) : n.prop("selected", !1), this.options.onChange(n, s), this.updateSelectAll(), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups()), this.$select.change(), this.updateButtonText(), this.options.preventInputChangeEvent) ) return !1; }, this) ), t("li a", this.$ul).on("mousedown", function (t) { if (t.shiftKey) return !1; }), t(this.$ul).on( "touchstart click", "li a", t.proxy(function (e) { e.stopPropagation(); var i = t(e.target); if (e.shiftKey && this.options.multiple) { i.is("label") && (e.preventDefault(), (i = i.find("input")).prop("checked", !i.prop("checked"))); var s = i.prop("checked") || !1; if (null !== this.lastToggledInput && this.lastToggledInput !== i) { var l = this.$ul.find("li:visible").index(i.parents("li")), o = this.$ul.find("li:visible").index(this.lastToggledInput.parents("li")); if (l > o) { var n = o; (o = l), (l = n); } ++o; var a = this.$ul.find("li").not(".multiselect-filter-hidden").slice(l, o).find("input"); a.prop("checked", s), this.options.selectedClass && a.closest("li").toggleClass(this.options.selectedClass, s); for (var p = 0, h = a.length; p < h; p++) { var c = t(a[p]); this.getOptionByValue(c.val()).prop("selected", s); } } i.trigger("change"); } i.is("input") && !i.closest("li").is(".multiselect-item") && (this.lastToggledInput = i), i.blur(); }, this) ), this.$container.off("keydown.multiselect").on( "keydown.multiselect", t.proxy(function (e) { if (!t('input[type="text"]', this.$container).is(":focus")) if (9 === e.keyCode && this.$container.hasClass("open")) this.$button.click(); else { var i = t(this.$container).find("li:not(.divider):not(.disabled) a").filter(":visible"); if (!i.length) return; var s = i.index(i.filter(":focus")); 38 === e.keyCode && s > 0 ? s-- : 40 === e.keyCode && s < i.length - 1 ? s++ : ~s || (s = 0); var l = i.eq(s); if ((l.focus(), 32 === e.keyCode || 13 === e.keyCode)) { var o = l.find("input"); o.prop("checked", !o.prop("checked")), o.change(); } e.stopPropagation(), e.preventDefault(); } }, this) ), this.options.enableClickableOptGroups && this.options.multiple && t("li.multiselect-group input", this.$ul).on( "change", t.proxy(function (e) { e.stopPropagation(); var i = t(e.target).prop("checked") || !1, s = t(e.target).closest("li"), l = s.nextUntil("li.multiselect-group").not(".multiselect-filter-hidden").not(".disabled").find("input"), o = []; this.options.selectedClass && (i ? s.addClass(this.options.selectedClass) : s.removeClass(this.options.selectedClass)), t.each( l, t.proxy(function (e, s) { var l = t(s).val(), n = this.getOptionByValue(l); i ? (t(s).prop("checked", !0), t(s).closest("li").addClass(this.options.selectedClass), n.prop("selected", !0)) : (t(s).prop("checked", !1), t(s).closest("li").removeClass(this.options.selectedClass), n.prop("selected", !1)), o.push(this.getOptionByValue(l)); }, this) ), this.options.onChange(o, i), this.$select.change(), this.updateButtonText(), this.updateSelectAll(); }, this) ), this.options.enableCollapsibleOptGroups && this.options.multiple && (t("li.multiselect-group .caret-container", this.$ul).on( "click", t.proxy(function (e) { var i = t(e.target).closest("li").nextUntil("li.multiselect-group").not(".multiselect-filter-hidden"), s = !0; i.each(function () { s = s && !t(this).hasClass("multiselect-collapsible-hidden"); }), s ? i.hide().addClass("multiselect-collapsible-hidden") : i.show().removeClass("multiselect-collapsible-hidden"); }, this) ), t("li.multiselect-all", this.$ul).css("background", "#f3f3f3").css("border-bottom", "1px solid #eaeaea"), t("li.multiselect-all > a > label.checkbox", this.$ul).css("padding", "3px 20px 3px 35px"), t("li.multiselect-group > a > input", this.$ul).css("margin", "4px 0px 5px -20px")); }, createOptionValue: function (e) { var i = t(e); i.is(":selected") && i.prop("selected", !0); var s = this.options.optionLabel(e), l = this.options.optionClass(e), o = i.val(), n = this.options.multiple ? "checkbox" : "radio", a = t(this.options.templates.li), p = t("label", a); p.addClass(n), p.attr("title", s), a.addClass(l), this.options.collapseOptGroupsByDefault && "optgroup" === t(e).parent().prop("tagName").toLowerCase() && (a.addClass("multiselect-collapsible-hidden"), a.hide()), this.options.enableHTML ? p.html(" " + s) : p.text(" " + s); var h = t("").attr("type", n), c = this.options.checkboxName(i); c && h.attr("name", c), p.prepend(h); var r = i.prop("selected") || !1; h.val(o), o === this.options.selectAllValue && (a.addClass("multiselect-item multiselect-all"), h.parent().parent().addClass("multiselect-all")), p.attr("title", i.attr("title")), this.$ul.append(a), i.is(":disabled") && h.attr("disabled", "disabled").prop("disabled", !0).closest("a").attr("tabindex", "-1").closest("li").addClass("disabled"), h.prop("checked", r), r && this.options.selectedClass && h.closest("li").addClass(this.options.selectedClass); }, createDivider: function (e) { var i = t(this.options.templates.divider); this.$ul.append(i); }, createOptgroup: function (e) { var i = t(e).attr("label"), s = t(e).attr("value"), l = t('
  • '), o = this.options.optionClass(e); l.addClass(o), this.options.enableHTML ? t("label b", l).html(" " + i) : t("label b", l).text(" " + i), this.options.enableCollapsibleOptGroups && this.options.multiple && t("a", l).append(''), this.options.enableClickableOptGroups && this.options.multiple && t("a label", l).prepend(''), t(e).is(":disabled") && l.addClass("disabled"), this.$ul.append(l), t("option", e).each( t.proxy(function (t, e) { this.createOptionValue(e); }, this) ); }, buildReset: function () { if (this.options.includeResetOption) { this.options.includeResetDivider && this.$ul.prepend(t(this.options.templates.divider)); var e = t(this.options.templates.resetButton); this.options.enableHTML ? t("a", e).html(this.options.resetText) : t("a", e).text(this.options.resetText), t("a", e).click( t.proxy(function () { this.clearSelection(); }, this) ), this.$ul.prepend(e); } }, buildSelectAll: function () { if ( ("number" == typeof this.options.selectAllValue && (this.options.selectAllValue = this.options.selectAllValue.toString()), !this.hasSelectAll() && this.options.includeSelectAllOption && this.options.multiple && t("option", this.$select).length > this.options.includeSelectAllIfMoreThan) ) { this.options.includeSelectAllDivider && this.$ul.prepend(t(this.options.templates.divider)); var e = t(this.options.templates.li); t("label", e).addClass("checkbox"), this.options.enableHTML ? t("label", e).html(" " + this.options.selectAllText) : t("label", e).text(" " + this.options.selectAllText), this.options.selectAllName ? t("label", e).prepend('') : t("label", e).prepend(''); var i = t("input", e); i.val(this.options.selectAllValue), e.addClass("multiselect-item multiselect-all"), i.parent().parent().addClass("multiselect-all"), this.$ul.prepend(e), i.prop("checked", !1); } }, buildFilter: function () { if (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering) { var e = Math.max(this.options.enableFiltering, this.options.enableCaseInsensitiveFiltering); if (this.$select.find("option").length >= e) { if (((this.$filter = t(this.options.templates.filter)), t("input", this.$filter).attr("placeholder", this.options.filterPlaceholder), this.options.includeFilterClearBtn)) { var i = t(this.options.templates.filterClearBtn); i.on( "click", t.proxy(function (e) { clearTimeout(this.searchTimeout), (this.query = ""), this.$filter.find(".multiselect-search").val(""), t("li", this.$ul).show().removeClass("multiselect-filter-hidden"), this.updateSelectAll(), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(); }, this) ), this.$filter.find(".input-group").append(i); } this.$ul.prepend(this.$filter), this.$filter .val(this.query) .on("click", function (t) { t.stopPropagation(); }) .on( "input keydown", t.proxy(function (e) { 13 === e.which && e.preventDefault(), clearTimeout(this.searchTimeout), (this.searchTimeout = this.asyncFunction( t.proxy(function () { var i, s; this.query !== e.target.value && ((this.query = e.target.value), t.each( t("li", this.$ul), t.proxy(function (e, l) { var o = t("input", l).length > 0 ? t("input", l).val() : "", n = t("label", l).text(), a = ""; if ( ("text" === this.options.filterBehavior ? (a = n) : "value" === this.options.filterBehavior ? (a = o) : "both" === this.options.filterBehavior && (a = n + "\n" + o), o !== this.options.selectAllValue && n) ) { var p = !1; if ( (this.options.enableCaseInsensitiveFiltering && ((a = a.toLowerCase()), (this.query = this.query.toLowerCase())), this.options.enableFullValueFiltering && "both" !== this.options.filterBehavior) ) { var h = a.trim().substring(0, this.query.length); this.query.indexOf(h) > -1 && (p = !0); } else a.indexOf(this.query) > -1 && (p = !0); p || (t(l).css("display", "none"), t(l).addClass("multiselect-filter-hidden")), p && (t(l).css("display", "block"), t(l).removeClass("multiselect-filter-hidden")), t(l).hasClass("multiselect-group") ? ((i = l), (s = p)) : (p && t(i).show().removeClass("multiselect-filter-hidden"), !p && s && t(l).show().removeClass("multiselect-filter-hidden")); } }, this) )); this.updateSelectAll(), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(), this.options.onFiltering(e.target); }, this), 300, this )); }, this) ); } } }, destroy: function () { this.$container.remove(), this.$select.show(), this.$select.prop("disabled", this.options.wasDisabled), this.$select.data("multiselect", null); }, refresh: function () { var e = {}; t("li input", this.$ul).each(function () { e[t(this).val()] = t(this); }), t("option", this.$select).each( t.proxy(function (i, s) { var l = t(s), o = e[t(s).val()]; l.is(":selected") ? (o.prop("checked", !0), this.options.selectedClass && o.closest("li").addClass(this.options.selectedClass)) : (o.prop("checked", !1), this.options.selectedClass && o.closest("li").removeClass(this.options.selectedClass)), l.is(":disabled") ? o.attr("disabled", "disabled").prop("disabled", !0).closest("li").addClass("disabled") : o.prop("disabled", !1).closest("li").removeClass("disabled"); }, this) ), this.updateButtonText(), this.updateSelectAll(), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(); }, select: function (e, i) { t.isArray(e) || (e = [e]); for (var s = 0; s < e.length; s++) { var l = e[s]; if (null != l) { var o = this.getOptionByValue(l), n = this.getInputByValue(l); void 0 !== o && void 0 !== n && (this.options.multiple || this.deselectAll(!1), this.options.selectedClass && n.closest("li").addClass(this.options.selectedClass), n.prop("checked", !0), o.prop("selected", !0), i && this.options.onChange(o, !0)); } } this.updateButtonText(), this.updateSelectAll(), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(); }, clearSelection: function () { this.deselectAll(!1), this.updateButtonText(), this.updateSelectAll(), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(); }, deselect: function (e, i) { t.isArray(e) || (e = [e]); for (var s = 0; s < e.length; s++) { var l = e[s]; if (null != l) { var o = this.getOptionByValue(l), n = this.getInputByValue(l); void 0 !== o && void 0 !== n && (this.options.selectedClass && n.closest("li").removeClass(this.options.selectedClass), n.prop("checked", !1), o.prop("selected", !1), i && this.options.onChange(o, !1)); } } this.updateButtonText(), this.updateSelectAll(), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(); }, selectAll: function (e, i) { e = void 0 === e || e; var s = t("li:not(.divider):not(.disabled):not(.multiselect-group)", this.$ul), l = t("li:not(.divider):not(.disabled):not(.multiselect-group):not(.multiselect-filter-hidden):not(.multiselect-collapisble-hidden)", this.$ul).filter(":visible"); e ? (t("input:enabled", l).prop("checked", !0), l.addClass(this.options.selectedClass), t("input:enabled", l).each( t.proxy(function (e, i) { var s = t(i).val(), l = this.getOptionByValue(s); t(l).prop("selected", !0); }, this) )) : (t("input:enabled", s).prop("checked", !0), s.addClass(this.options.selectedClass), t("input:enabled", s).each( t.proxy(function (e, i) { var s = t(i).val(), l = this.getOptionByValue(s); t(l).prop("selected", !0); }, this) )), t('li input[value="' + this.options.selectAllValue + '"]', this.$ul).prop("checked", !0), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(), i && this.options.onSelectAll(); }, deselectAll: function (e, i) { e = void 0 === e || e; var s = t("li:not(.divider):not(.disabled):not(.multiselect-group)", this.$ul), l = t("li:not(.divider):not(.disabled):not(.multiselect-group):not(.multiselect-filter-hidden):not(.multiselect-collapisble-hidden)", this.$ul).filter(":visible"); e ? (t('input[type="checkbox"]:enabled', l).prop("checked", !1), l.removeClass(this.options.selectedClass), t('input[type="checkbox"]:enabled', l).each( t.proxy(function (e, i) { var s = t(i).val(), l = this.getOptionByValue(s); t(l).prop("selected", !1); }, this) )) : (t('input[type="checkbox"]:enabled', s).prop("checked", !1), s.removeClass(this.options.selectedClass), t('input[type="checkbox"]:enabled', s).each( t.proxy(function (e, i) { var s = t(i).val(), l = this.getOptionByValue(s); t(l).prop("selected", !1); }, this) )), t('li input[value="' + this.options.selectAllValue + '"]', this.$ul).prop("checked", !1), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(), i && this.options.onDeselectAll(); }, rebuild: function () { this.$ul.html(""), (this.options.multiple = "multiple" === this.$select.attr("multiple")), this.buildSelectAll(), this.buildDropdownOptions(), this.buildFilter(), this.updateButtonText(), this.updateSelectAll(!0), this.options.enableClickableOptGroups && this.options.multiple && this.updateOptGroups(), this.options.disableIfEmpty && t("option", this.$select).length <= 0 ? this.disable() : this.enable(), this.options.dropRight && this.$ul.addClass("pull-right"); }, dataprovider: function (e) { var i = 0, s = this.$select.empty(); t.each(e, function (e, l) { var o; if (t.isArray(l.children)) i++, (o = t("").attr({ label: l.label || "Group " + i, disabled: !!l.disabled, value: l.value })), (function (t, e) { for (var i = 0; i < t.length; ++i) e(t[i], i); })(l.children, function (e) { var i = { value: e.value, label: e.label || e.value, title: e.title, selected: !!e.selected, disabled: !!e.disabled }; for (var s in e.attributes) i["data-" + s] = e.attributes[s]; o.append(t("