{"version":3,"sources":["bootsrap-multiselect.js","cookiechoices.js"],"names":["root","factory","define","amd","require","specified","jQuery","ko","this","$","Multiselect","select","options","$select","mergeOptions","extend","data","attr","nonSelectedText","originalOptions","clone","query","searchTimeout","lastToggledInput","multiple","onChange","proxy","onSelectAll","onDeselectAll","onDropdownShow","onDropdownHide","onDropdownShown","onDropdownHidden","onInitialized","onFiltering","buildContainer","buildButton","buildDropdown","buildSelectAll","buildDropdownOptions","buildFilter","updateButtonText","updateSelectAll","enableClickableOptGroups","updateOptGroups","wasDisabled","prop","disableIfEmpty","length","disable","wrap","after","$container","bindingHandlers","multiselect","init","element","valueAccessor","allBindings","viewModel","bindingContext","$element","config","toJS","has","get","isObservable","computed","read","setTimeout","ms","updateOriginalOptions","disposeWhenNodeIsRemoved","value","rateLimit","notifyWhenChangesStop","selectedOptions","setEnabled","enable","utils","domNodeDisposal","addDisposeCallback","update","prototype","defaults","buttonText","disabledText","allSelectedText","selectAllNumber","numberDisplayed","nSelectedText","selected","delimiter","delimiterText","each","label","undefined","text","substr","buttonTitle","checkboxName","option","optionLabel","optionClass","checked","event","$filter","enableHTML","buttonClass","inheritClass","buttonWidth","buttonContainer","dropRight","dropUp","selectedClass","maxHeight","includeSelectAllOption","includeSelectAllIfMoreThan","selectAllText","selectAllValue","selectAllName","selectAllJustVisible","enableFiltering","enableCaseInsensitiveFiltering","enableFullValueFiltering","enableCollapsibleOptGroups","filterPlaceholder","filterBehavior","includeFilterClearBtn","preventInputChangeEvent","templates","button","ul","filter","filterClearBtn","li","divider","liGroup","constructor","on","$button","addClass","css","width","overflow","text-overflow","tabindex","prepend","$ul","max-height","overflow-y","overflow-x","height","Math","min","moveCalc","margin-top","append","children","index","tag","toLowerCase","createOptgroup","createDivider","createOptionValue","off","$target","target","isSelectAllOption","val","closest","removeClass","$option","getOptionByValue","$optionsNotThis","not","$checkboxesNotThis","selectAll","deselectAll","click","change","e","shiftKey","stopPropagation","is","preventDefault","find","from","parents","to","tmp","range","slice","toggleClass","i","j","$checkbox","trigger","blur","keyCode","hasClass","$items","$current","eq","focus","$li","$inputs","nextUntil","$options","input","push","visible","hide","show","classes","inputType","$label","html","name","parent","$divider","group","toString","hasSelectAll","includeSelectAllDivider","enableFilterLength","max","clearBtn","clearTimeout","which","asyncFunction","currentGroup","currentGroupVisible","filterCandidate","showElement","valueToMatch","trim","substring","indexOf","destroy","remove","refresh","inputs","$elem","$input","selectValues","triggerOnChange","isArray","getInputByValue","clearSelection","deselect","deselectValues","justVisible","triggerOnSelectAll","allLis","visibleLis","triggerOnDeselectAll","rebuild","dataprovider","groupCounter","empty","$tag","disabled","array","callback","forEach","subOption","attributes","title","key","class","setOptions","$groups","notTriggerOnSelectAll","allBoxes","allBoxesLength","checkedBoxesLength","selectAllLi","selectAllInput","getSelected","valueToCompare","checkboxes","checkbox","timeout","self","args","Array","call","arguments","apply","window","setAllSelectedText","fn","parameter","extraOptions","Constructor","cookieChoices","cookieName","cookieConsentId","dismissLinkId","dismissIconId","_createHeaderElement","cookieText","dismissText","linkText","linkHref","styles","dismissIcon","butterBarStyles","cookieConsentElement","document","createElement","wrapper","style","cssText","id","appendChild","_createConsentText","_createInformationLink","_createDismissLink","href","_setElementText","body","textContent","innerText","consentText","dismissLink","marginLeft","infoLink","_dismissLinkClick","expiryDate","Date","setFullYear","getFullYear","cookie","toGMTString","_removeCookieConsent","_showCookieConsent","isDialog","match","RegExp","consentElement","glassPanel","content","dialog","display","textAlign","marginTop","_createDialogElement","fragment","createDocumentFragment","cloneNode","getElementById","onclick","cookieChoiceElement","parentNode","removeChild","exports","showCookieBar","position","language","showCookieConsentBar","showCookieConsentDialog"],"mappings":"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","file":"main.min.js","sourcesContent":["/**\r\n * Bootstrap Multiselect (http://davidstutz.de/bootstrap-multiselect/)\r\n *\r\n * Apache License, Version 2.0:\r\n * Copyright (c) 2012 - 2017 David Stutz\r\n *\r\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not\r\n * use this file except in compliance with the License. You may obtain a\r\n * copy of the License at http://www.apache.org/licenses/LICENSE-2.0\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\r\n * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\r\n * License for the specific language governing permissions and limitations\r\n * under the License.\r\n *\r\n * BSD 3-Clause License:\r\n * Copyright (c) 2012 - 2017 David Stutz\r\n * All rights reserved.\r\n *\r\n * Redistribution and use in source and binary forms, with or without\r\n * modification, are permitted provided that the following conditions are met:\r\n * - Redistributions of source code must retain the above copyright notice,\r\n * this list of conditions and the following disclaimer.\r\n * - Redistributions in binary form must reproduce the above copyright notice,\r\n * this list of conditions and the following disclaimer in the documentation\r\n * and/or other materials provided with the distribution.\r\n * - Neither the name of David Stutz nor the names of its contributors may be\r\n * used to endorse or promote products derived from this software without\r\n * specific prior written permission.\r\n *\r\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\r\n * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,\r\n * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\r\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR\r\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\r\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\r\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;\r\n * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\r\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR\r\n * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF\r\n * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\r\n */\r\n(function (root, factory) {\r\n // check to see if 'knockout' AMD module is specified if using requirejs\r\n if (typeof define === 'function' && define.amd &&\r\n typeof require === 'function' && typeof require.specified === 'function' && require.specified('knockout')) {\r\n\r\n // AMD. Register as an anonymous module.\r\n define(['jquery', 'knockout'], factory);\r\n } else {\r\n // Browser globals\r\n factory(root.jQuery, root.ko);\r\n }\r\n})(this, function ($, ko) {\r\n \"use strict\";// jshint ;_;\r\n\r\n if (typeof ko !== 'undefined' && ko.bindingHandlers && !ko.bindingHandlers.multiselect) {\r\n ko.bindingHandlers.multiselect = {\r\n after: ['options', 'value', 'selectedOptions', 'enable', 'disable'],\r\n\r\n init: function(element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n var $element = $(element);\r\n var config = ko.toJS(valueAccessor());\r\n\r\n $element.multiselect(config);\r\n\r\n if (allBindings.has('options')) {\r\n var options = allBindings.get('options');\r\n if (ko.isObservable(options)) {\r\n ko.computed({\r\n read: function() {\r\n options();\r\n setTimeout(function() {\r\n var ms = $element.data('multiselect');\r\n if (ms)\r\n ms.updateOriginalOptions();//Not sure how beneficial this is.\r\n $element.multiselect('rebuild');\r\n }, 1);\r\n },\r\n disposeWhenNodeIsRemoved: element\r\n });\r\n }\r\n }\r\n\r\n //value and selectedOptions are two-way, so these will be triggered even by our own actions.\r\n //It needs some way to tell if they are triggered because of us or because of outside change.\r\n //It doesn't loop but it's a waste of processing.\r\n if (allBindings.has('value')) {\r\n var value = allBindings.get('value');\r\n if (ko.isObservable(value)) {\r\n ko.computed({\r\n read: function() {\r\n value();\r\n setTimeout(function() {\r\n $element.multiselect('refresh');\r\n }, 1);\r\n },\r\n disposeWhenNodeIsRemoved: element\r\n }).extend({ rateLimit: 100, notifyWhenChangesStop: true });\r\n }\r\n }\r\n\r\n //Switched from arrayChange subscription to general subscription using 'refresh'.\r\n //Not sure performance is any better using 'select' and 'deselect'.\r\n if (allBindings.has('selectedOptions')) {\r\n var selectedOptions = allBindings.get('selectedOptions');\r\n if (ko.isObservable(selectedOptions)) {\r\n ko.computed({\r\n read: function() {\r\n selectedOptions();\r\n setTimeout(function() {\r\n $element.multiselect('refresh');\r\n }, 1);\r\n },\r\n disposeWhenNodeIsRemoved: element\r\n }).extend({ rateLimit: 100, notifyWhenChangesStop: true });\r\n }\r\n }\r\n\r\n var setEnabled = function (enable) {\r\n setTimeout(function () {\r\n if (enable)\r\n $element.multiselect('enable');\r\n else\r\n $element.multiselect('disable');\r\n });\r\n };\r\n\r\n if (allBindings.has('enable')) {\r\n var enable = allBindings.get('enable');\r\n if (ko.isObservable(enable)) {\r\n ko.computed({\r\n read: function () {\r\n setEnabled(enable());\r\n },\r\n disposeWhenNodeIsRemoved: element\r\n }).extend({ rateLimit: 100, notifyWhenChangesStop: true });\r\n } else {\r\n setEnabled(enable);\r\n }\r\n }\r\n\r\n if (allBindings.has('disable')) {\r\n var disable = allBindings.get('disable');\r\n if (ko.isObservable(disable)) {\r\n ko.computed({\r\n read: function () {\r\n setEnabled(!disable());\r\n },\r\n disposeWhenNodeIsRemoved: element\r\n }).extend({ rateLimit: 100, notifyWhenChangesStop: true });\r\n } else {\r\n setEnabled(!disable);\r\n }\r\n }\r\n\r\n ko.utils.domNodeDisposal.addDisposeCallback(element, function() {\r\n $element.multiselect('destroy');\r\n });\r\n },\r\n\r\n update: function(element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n var $element = $(element);\r\n var config = ko.toJS(valueAccessor());\r\n\r\n $element.multiselect('setOptions', config);\r\n $element.multiselect('rebuild');\r\n }\r\n };\r\n }\r\n\r\n function forEach(array, callback) {\r\n for (var index = 0; index < array.length; ++index) {\r\n callback(array[index], index);\r\n }\r\n }\r\n\r\n /**\r\n * Constructor to create a new multiselect using the given select.\r\n *\r\n * @param {jQuery} select\r\n * @param {Object} options\r\n * @returns {Multiselect}\r\n */\r\n function Multiselect(select, options) {\r\n\r\n this.$select = $(select);\r\n this.options = this.mergeOptions($.extend({}, options, this.$select.data()));\r\n\r\n // Placeholder via data attributes\r\n if (this.$select.attr(\"data-placeholder\")) {\r\n this.options.nonSelectedText = this.$select.data(\"placeholder\");\r\n }\r\n\r\n // Initialization.\r\n // We have to clone to create a new reference.\r\n this.originalOptions = this.$select.clone()[0].options;\r\n this.query = '';\r\n this.searchTimeout = null;\r\n this.lastToggledInput = null;\r\n\r\n this.options.multiple = this.$select.attr('multiple') === \"multiple\";\r\n this.options.onChange = $.proxy(this.options.onChange, this);\r\n this.options.onSelectAll = $.proxy(this.options.onSelectAll, this);\r\n this.options.onDeselectAll = $.proxy(this.options.onDeselectAll, this);\r\n this.options.onDropdownShow = $.proxy(this.options.onDropdownShow, this);\r\n this.options.onDropdownHide = $.proxy(this.options.onDropdownHide, this);\r\n this.options.onDropdownShown = $.proxy(this.options.onDropdownShown, this);\r\n this.options.onDropdownHidden = $.proxy(this.options.onDropdownHidden, this);\r\n this.options.onInitialized = $.proxy(this.options.onInitialized, this);\r\n this.options.onFiltering = $.proxy(this.options.onFiltering, this);\r\n\r\n // Build select all if enabled.\r\n this.buildContainer();\r\n this.buildButton();\r\n this.buildDropdown();\r\n this.buildSelectAll();\r\n this.buildDropdownOptions();\r\n this.buildFilter();\r\n\r\n this.updateButtonText();\r\n this.updateSelectAll(true);\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n\r\n this.options.wasDisabled = this.$select.prop('disabled');\r\n if (this.options.disableIfEmpty && $('option', this.$select).length <= 0) {\r\n this.disable();\r\n }\r\n\r\n this.$select.wrap('').after(this.$container);\r\n this.options.onInitialized(this.$select, this.$container);\r\n }\r\n\r\n Multiselect.prototype = {\r\n\r\n defaults: {\r\n /**\r\n * Default text function will either print 'None selected' in case no\r\n * option is selected or a list of the selected options up to a length\r\n * of 3 selected options.\r\n *\r\n * @param {jQuery} options\r\n * @param {jQuery} select\r\n * @returns {String}\r\n */\r\n buttonText: function(options, select) {\r\n if (this.disabledText.length > 0\r\n && (select.prop('disabled') || (options.length == 0 && this.disableIfEmpty))) {\r\n\r\n return this.disabledText;\r\n }\r\n else if (options.length === 0) {\r\n return this.nonSelectedText;\r\n }\r\n else if (this.allSelectedText\r\n && options.length === $('option', $(select)).length\r\n && $('option', $(select)).length !== 1\r\n && this.multiple) {\r\n\r\n if (this.selectAllNumber) {\r\n return this.allSelectedText + ' (' + options.length + ')';\r\n }\r\n else {\r\n return this.allSelectedText;\r\n }\r\n }\r\n else if (this.numberDisplayed != 0 && options.length > this.numberDisplayed) {\r\n return options.length + ' ' + this.nSelectedText;\r\n }\r\n else {\r\n var selected = '';\r\n var delimiter = this.delimiterText;\r\n\r\n options.each(function() {\r\n var label = ($(this).attr('label') !== undefined) ? $(this).attr('label') : $(this).text();\r\n selected += label + delimiter;\r\n });\r\n\r\n return selected.substr(0, selected.length - this.delimiterText.length);\r\n }\r\n },\r\n /**\r\n * Updates the title of the button similar to the buttonText function.\r\n *\r\n * @param {jQuery} options\r\n * @param {jQuery} select\r\n * @returns {@exp;selected@call;substr}\r\n */\r\n buttonTitle: function(options, select) {\r\n if (options.length === 0) {\r\n return this.nonSelectedText;\r\n }\r\n else {\r\n var selected = '';\r\n var delimiter = this.delimiterText;\r\n\r\n options.each(function () {\r\n var label = ($(this).attr('label') !== undefined) ? $(this).attr('label') : $(this).text();\r\n selected += label + delimiter;\r\n });\r\n return selected.substr(0, selected.length - this.delimiterText.length);\r\n }\r\n },\r\n checkboxName: function(option) {\r\n return false; // no checkbox name\r\n },\r\n /**\r\n * Create a label.\r\n *\r\n * @param {jQuery} element\r\n * @returns {String}\r\n */\r\n optionLabel: function(element){\r\n return $(element).attr('label') || $(element).text();\r\n },\r\n /**\r\n * Create a class.\r\n *\r\n * @param {jQuery} element\r\n * @returns {String}\r\n */\r\n optionClass: function(element) {\r\n return $(element).attr('class') || '';\r\n },\r\n /**\r\n * Triggered on change of the multiselect.\r\n *\r\n * Not triggered when selecting/deselecting options manually.\r\n *\r\n * @param {jQuery} option\r\n * @param {Boolean} checked\r\n */\r\n onChange : function(option, checked) {\r\n\r\n },\r\n /**\r\n * Triggered when the dropdown is shown.\r\n *\r\n * @param {jQuery} event\r\n */\r\n onDropdownShow: function(event) {\r\n\r\n },\r\n /**\r\n * Triggered when the dropdown is hidden.\r\n *\r\n * @param {jQuery} event\r\n */\r\n onDropdownHide: function(event) {\r\n\r\n },\r\n /**\r\n * Triggered after the dropdown is shown.\r\n *\r\n * @param {jQuery} event\r\n */\r\n onDropdownShown: function(event) {\r\n\r\n },\r\n /**\r\n * Triggered after the dropdown is hidden.\r\n *\r\n * @param {jQuery} event\r\n */\r\n onDropdownHidden: function(event) {\r\n\r\n },\r\n /**\r\n * Triggered on select all.\r\n */\r\n onSelectAll: function() {\r\n\r\n },\r\n /**\r\n * Triggered on deselect all.\r\n */\r\n onDeselectAll: function() {\r\n\r\n },\r\n /**\r\n * Triggered after initializing.\r\n *\r\n * @param {jQuery} $select\r\n * @param {jQuery} $container\r\n */\r\n onInitialized: function($select, $container) {\r\n\r\n },\r\n /**\r\n * Triggered on filtering.\r\n *\r\n * @param {jQuery} $filter\r\n */\r\n onFiltering: function($filter) {\r\n\r\n },\r\n enableHTML: false,\r\n buttonClass: 'btn btn-default',\r\n inheritClass: false,\r\n buttonWidth: 'auto',\r\n buttonContainer: '
',\r\n dropRight: false,\r\n dropUp: false,\r\n selectedClass: 'active',\r\n // Maximum height of the dropdown menu.\r\n // If maximum height is exceeded a scrollbar will be displayed.\r\n maxHeight: false,\r\n includeSelectAllOption: false,\r\n includeSelectAllIfMoreThan: 0,\r\n selectAllText: ' Select all',\r\n selectAllValue: 'multiselect-all',\r\n selectAllName: false,\r\n selectAllNumber: true,\r\n selectAllJustVisible: true,\r\n enableFiltering: false,\r\n enableCaseInsensitiveFiltering: false,\r\n enableFullValueFiltering: false,\r\n enableClickableOptGroups: false,\r\n enableCollapsibleOptGroups: false,\r\n filterPlaceholder: 'Search',\r\n // possible options: 'text', 'value', 'both'\r\n filterBehavior: 'text',\r\n includeFilterClearBtn: true,\r\n preventInputChangeEvent: false,\r\n nonSelectedText: 'None selected',\r\n nSelectedText: 'selected',\r\n allSelectedText: 'All selected',\r\n numberDisplayed: 3,\r\n disableIfEmpty: false,\r\n disabledText: '',\r\n delimiterText: ', ',\r\n templates: {\r\n button: '',\r\n ul: '',\r\n filter: '
  • ',\r\n filterClearBtn: '',\r\n li: '
  • ',\r\n divider: '
  • ',\r\n liGroup: '
  • '\r\n }\r\n },\r\n\r\n constructor: Multiselect,\r\n\r\n /**\r\n * Builds the container of the multiselect.\r\n */\r\n buildContainer: function() {\r\n this.$container = $(this.options.buttonContainer);\r\n this.$container.on('show.bs.dropdown', this.options.onDropdownShow);\r\n this.$container.on('hide.bs.dropdown', this.options.onDropdownHide);\r\n this.$container.on('shown.bs.dropdown', this.options.onDropdownShown);\r\n this.$container.on('hidden.bs.dropdown', this.options.onDropdownHidden);\r\n },\r\n\r\n /**\r\n * Builds the button of the multiselect.\r\n */\r\n buildButton: function() {\r\n this.$button = $(this.options.templates.button).addClass(this.options.buttonClass);\r\n if (this.$select.attr('class') && this.options.inheritClass) {\r\n this.$button.addClass(this.$select.attr('class'));\r\n }\r\n // Adopt active state.\r\n if (this.$select.prop('disabled')) {\r\n this.disable();\r\n }\r\n else {\r\n this.enable();\r\n }\r\n\r\n // Manually add button width if set.\r\n if (this.options.buttonWidth && this.options.buttonWidth !== 'auto') {\r\n this.$button.css({\r\n 'width' : '100%', //this.options.buttonWidth,\r\n 'overflow' : 'hidden',\r\n 'text-overflow' : 'ellipsis'\r\n });\r\n this.$container.css({\r\n 'width': this.options.buttonWidth\r\n });\r\n }\r\n\r\n // Keep the tab index from the select.\r\n var tabindex = this.$select.attr('tabindex');\r\n if (tabindex) {\r\n this.$button.attr('tabindex', tabindex);\r\n }\r\n\r\n this.$container.prepend(this.$button);\r\n },\r\n\r\n /**\r\n * Builds the ul representing the dropdown menu.\r\n */\r\n buildDropdown: function() {\r\n\r\n // Build ul.\r\n this.$ul = $(this.options.templates.ul);\r\n\r\n if (this.options.dropRight) {\r\n this.$ul.addClass('pull-right');\r\n }\r\n\r\n // Set max height of dropdown menu to activate auto scrollbar.\r\n if (this.options.maxHeight) {\r\n // TODO: Add a class for this option to move the css declarations.\r\n this.$ul.css({\r\n 'max-height': this.options.maxHeight + 'px',\r\n 'overflow-y': 'auto',\r\n 'overflow-x': 'hidden'\r\n });\r\n }\r\n\r\n if (this.options.dropUp) {\r\n\r\n var height = Math.min(this.options.maxHeight, $('option[data-role!=\"divider\"]', this.$select).length*26 + $('option[data-role=\"divider\"]', this.$select).length*19 + (this.options.includeSelectAllOption ? 26 : 0) + (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering ? 44 : 0));\r\n var moveCalc = height + 34;\r\n\r\n this.$ul.css({\r\n 'max-height': height + 'px',\r\n 'overflow-y': 'auto',\r\n 'overflow-x': 'hidden',\r\n 'margin-top': \"-\" + moveCalc + 'px'\r\n });\r\n }\r\n\r\n this.$container.append(this.$ul);\r\n },\r\n\r\n /**\r\n * Build the dropdown options and binds all necessary events.\r\n *\r\n * Uses createDivider and createOptionValue to create the necessary options.\r\n */\r\n buildDropdownOptions: function() {\r\n\r\n this.$select.children().each($.proxy(function(index, element) {\r\n\r\n var $element = $(element);\r\n // Support optgroups and options without a group simultaneously.\r\n var tag = $element.prop('tagName')\r\n .toLowerCase();\r\n\r\n if ($element.prop('value') === this.options.selectAllValue) {\r\n return;\r\n }\r\n\r\n if (tag === 'optgroup') {\r\n this.createOptgroup(element);\r\n }\r\n else if (tag === 'option') {\r\n\r\n if ($element.data('role') === 'divider') {\r\n this.createDivider();\r\n }\r\n else {\r\n this.createOptionValue(element);\r\n }\r\n\r\n }\r\n\r\n // Other illegal tags will be ignored.\r\n }, this));\r\n\r\n // Bind the change event on the dropdown elements.\r\n $(this.$ul).off('change', 'li:not(.multiselect-group) input[type=\"checkbox\"], li:not(.multiselect-group) input[type=\"radio\"]');\r\n $(this.$ul).on('change', 'li:not(.multiselect-group) input[type=\"checkbox\"], li:not(.multiselect-group) input[type=\"radio\"]', $.proxy(function(event) {\r\n var $target = $(event.target);\r\n\r\n var checked = $target.prop('checked') || false;\r\n var isSelectAllOption = $target.val() === this.options.selectAllValue;\r\n\r\n // Apply or unapply the configured selected class.\r\n if (this.options.selectedClass) {\r\n if (checked) {\r\n $target.closest('li')\r\n .addClass(this.options.selectedClass);\r\n }\r\n else {\r\n $target.closest('li')\r\n .removeClass(this.options.selectedClass);\r\n }\r\n }\r\n\r\n // Get the corresponding option.\r\n var value = $target.val();\r\n var $option = this.getOptionByValue(value);\r\n\r\n var $optionsNotThis = $('option', this.$select).not($option);\r\n var $checkboxesNotThis = $('input', this.$container).not($target);\r\n\r\n if (isSelectAllOption) {\r\n\r\n if (checked) {\r\n this.selectAll(this.options.selectAllJustVisible, true);\r\n }\r\n else {\r\n this.deselectAll(this.options.selectAllJustVisible, true);\r\n }\r\n }\r\n else {\r\n if (checked) {\r\n $option.prop('selected', true);\r\n\r\n if (this.options.multiple) {\r\n // Simply select additional option.\r\n $option.prop('selected', true);\r\n }\r\n else {\r\n // Unselect all other options and corresponding checkboxes.\r\n if (this.options.selectedClass) {\r\n $($checkboxesNotThis).closest('li').removeClass(this.options.selectedClass);\r\n }\r\n\r\n $($checkboxesNotThis).prop('checked', false);\r\n $optionsNotThis.prop('selected', false);\r\n\r\n // It's a single selection, so close.\r\n this.$button.click();\r\n }\r\n\r\n if (this.options.selectedClass === \"active\") {\r\n $optionsNotThis.closest(\"a\").css(\"outline\", \"\");\r\n }\r\n }\r\n else {\r\n // Unselect option.\r\n $option.prop('selected', false);\r\n }\r\n\r\n // To prevent select all from firing onChange: #575\r\n this.options.onChange($option, checked);\r\n\r\n // Do not update select all or optgroups on select all change!\r\n this.updateSelectAll();\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n }\r\n\r\n this.$select.change();\r\n this.updateButtonText();\r\n\r\n if(this.options.preventInputChangeEvent) {\r\n return false;\r\n }\r\n }, this));\r\n\r\n $('li a', this.$ul).on('mousedown', function(e) {\r\n if (e.shiftKey) {\r\n // Prevent selecting text by Shift+click\r\n return false;\r\n }\r\n });\r\n\r\n $(this.$ul).on('touchstart click', 'li a', $.proxy(function(event) {\r\n event.stopPropagation();\r\n\r\n var $target = $(event.target);\r\n\r\n if (event.shiftKey && this.options.multiple) {\r\n if($target.is(\"label\")){ // Handles checkbox selection manually (see https://github.com/davidstutz/bootstrap-multiselect/issues/431)\r\n event.preventDefault();\r\n $target = $target.find(\"input\");\r\n $target.prop(\"checked\", !$target.prop(\"checked\"));\r\n }\r\n var checked = $target.prop('checked') || false;\r\n\r\n if (this.lastToggledInput !== null && this.lastToggledInput !== $target) { // Make sure we actually have a range\r\n var from = this.$ul.find(\"li:visible\").index($target.parents(\"li\"));\r\n var to = this.$ul.find(\"li:visible\").index(this.lastToggledInput.parents(\"li\"));\r\n\r\n if (from > to) { // Swap the indices\r\n var tmp = to;\r\n to = from;\r\n from = tmp;\r\n }\r\n\r\n // Make sure we grab all elements since slice excludes the last index\r\n ++to;\r\n\r\n // Change the checkboxes and underlying options\r\n var range = this.$ul.find(\"li\").not(\".multiselect-filter-hidden\").slice(from, to).find(\"input\");\r\n\r\n range.prop('checked', checked);\r\n\r\n if (this.options.selectedClass) {\r\n range.closest('li')\r\n .toggleClass(this.options.selectedClass, checked);\r\n }\r\n\r\n for (var i = 0, j = range.length; i < j; i++) {\r\n var $checkbox = $(range[i]);\r\n\r\n var $option = this.getOptionByValue($checkbox.val());\r\n\r\n $option.prop('selected', checked);\r\n }\r\n }\r\n\r\n // Trigger the select \"change\" event\r\n $target.trigger(\"change\");\r\n }\r\n\r\n // Remembers last clicked option\r\n if($target.is(\"input\") && !$target.closest(\"li\").is(\".multiselect-item\")){\r\n this.lastToggledInput = $target;\r\n }\r\n\r\n $target.blur();\r\n }, this));\r\n\r\n // Keyboard support.\r\n this.$container.off('keydown.multiselect').on('keydown.multiselect', $.proxy(function(event) {\r\n if ($('input[type=\"text\"]', this.$container).is(':focus')) {\r\n return;\r\n }\r\n\r\n if (event.keyCode === 9 && this.$container.hasClass('open')) {\r\n this.$button.click();\r\n }\r\n else {\r\n var $items = $(this.$container).find(\"li:not(.divider):not(.disabled) a\").filter(\":visible\");\r\n\r\n if (!$items.length) {\r\n return;\r\n }\r\n\r\n var index = $items.index($items.filter(':focus'));\r\n \r\n // Navigation up.\r\n if (event.keyCode === 38 && index > 0) {\r\n index--;\r\n }\r\n // Navigate down.\r\n else if (event.keyCode === 40 && index < $items.length - 1) {\r\n index++;\r\n }\r\n else if (!~index) {\r\n index = 0;\r\n }\r\n\r\n var $current = $items.eq(index);\r\n $current.focus();\r\n\r\n if (event.keyCode === 32 || event.keyCode === 13) {\r\n var $checkbox = $current.find('input');\r\n\r\n $checkbox.prop(\"checked\", !$checkbox.prop(\"checked\"));\r\n $checkbox.change();\r\n }\r\n\r\n event.stopPropagation();\r\n event.preventDefault();\r\n }\r\n }, this));\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n $(\"li.multiselect-group input\", this.$ul).on(\"change\", $.proxy(function(event) {\r\n event.stopPropagation();\r\n\r\n var $target = $(event.target);\r\n var checked = $target.prop('checked') || false;\r\n\r\n var $li = $(event.target).closest('li');\r\n var $group = $li.nextUntil(\"li.multiselect-group\")\r\n .not('.multiselect-filter-hidden')\r\n .not('.disabled');\r\n\r\n var $inputs = $group.find(\"input\");\r\n\r\n var values = [];\r\n var $options = [];\r\n\r\n if (this.options.selectedClass) {\r\n if (checked) {\r\n $li.addClass(this.options.selectedClass);\r\n }\r\n else {\r\n $li.removeClass(this.options.selectedClass);\r\n }\r\n }\r\n\r\n $.each($inputs, $.proxy(function(index, input) {\r\n var value = $(input).val();\r\n var $option = this.getOptionByValue(value);\r\n\r\n if (checked) {\r\n $(input).prop('checked', true);\r\n $(input).closest('li')\r\n .addClass(this.options.selectedClass);\r\n\r\n $option.prop('selected', true);\r\n }\r\n else {\r\n $(input).prop('checked', false);\r\n $(input).closest('li')\r\n .removeClass(this.options.selectedClass);\r\n\r\n $option.prop('selected', false);\r\n }\r\n\r\n $options.push(this.getOptionByValue(value));\r\n }, this))\r\n\r\n // Cannot use select or deselect here because it would call updateOptGroups again.\r\n\r\n this.options.onChange($options, checked);\r\n\r\n this.$select.change();\r\n this.updateButtonText();\r\n this.updateSelectAll();\r\n }, this));\r\n }\r\n\r\n if (this.options.enableCollapsibleOptGroups && this.options.multiple) {\r\n $(\"li.multiselect-group .caret-container\", this.$ul).on(\"click\", $.proxy(function(event) {\r\n var $li = $(event.target).closest('li');\r\n var $inputs = $li.nextUntil(\"li.multiselect-group\")\r\n .not('.multiselect-filter-hidden');\r\n\r\n var visible = true;\r\n $inputs.each(function() {\r\n visible = visible && $(this).is(':visible');\r\n });\r\n\r\n if (visible) {\r\n $inputs.hide()\r\n .addClass('multiselect-collapsible-hidden');\r\n }\r\n else {\r\n $inputs.show()\r\n .removeClass('multiselect-collapsible-hidden');\r\n }\r\n }, this));\r\n\r\n $(\"li.multiselect-all\", this.$ul).css('background', '#f3f3f3').css('border-bottom', '1px solid #eaeaea');\r\n $(\"li.multiselect-all > a > label.checkbox\", this.$ul).css('padding', '3px 20px 3px 35px');\r\n $(\"li.multiselect-group > a > input\", this.$ul).css('margin', '4px 0px 5px -20px');\r\n }\r\n },\r\n\r\n /**\r\n * Create an option using the given select option.\r\n *\r\n * @param {jQuery} element\r\n */\r\n createOptionValue: function(element) {\r\n var $element = $(element);\r\n if ($element.is(':selected')) {\r\n $element.prop('selected', true);\r\n }\r\n\r\n // Support the label attribute on options.\r\n var label = this.options.optionLabel(element);\r\n var classes = this.options.optionClass(element);\r\n var value = $element.val();\r\n var inputType = this.options.multiple ? \"checkbox\" : \"radio\";\r\n\r\n var $li = $(this.options.templates.li);\r\n var $label = $('label', $li);\r\n $label.addClass(inputType);\r\n $li.addClass(classes);\r\n\r\n if (this.options.enableHTML) {\r\n $label.html(\" \" + label);\r\n }\r\n else {\r\n $label.text(\" \" + label);\r\n }\r\n\r\n var $checkbox = $('').attr('type', inputType);\r\n\r\n var name = this.options.checkboxName($element);\r\n if (name) {\r\n $checkbox.attr('name', name);\r\n }\r\n\r\n $label.prepend($checkbox);\r\n\r\n var selected = $element.prop('selected') || false;\r\n $checkbox.val(value);\r\n\r\n if (value === this.options.selectAllValue) {\r\n $li.addClass(\"multiselect-item multiselect-all\");\r\n $checkbox.parent().parent()\r\n .addClass('multiselect-all');\r\n }\r\n\r\n $label.attr('title', $element.attr('title'));\r\n\r\n this.$ul.append($li);\r\n\r\n if ($element.is(':disabled')) {\r\n $checkbox.attr('disabled', 'disabled')\r\n .prop('disabled', true)\r\n .closest('a')\r\n .attr(\"tabindex\", \"-1\")\r\n .closest('li')\r\n .addClass('disabled');\r\n }\r\n\r\n $checkbox.prop('checked', selected);\r\n\r\n if (selected && this.options.selectedClass) {\r\n $checkbox.closest('li')\r\n .addClass(this.options.selectedClass);\r\n }\r\n },\r\n\r\n /**\r\n * Creates a divider using the given select option.\r\n *\r\n * @param {jQuery} element\r\n */\r\n createDivider: function(element) {\r\n var $divider = $(this.options.templates.divider);\r\n this.$ul.append($divider);\r\n },\r\n\r\n /**\r\n * Creates an optgroup.\r\n *\r\n * @param {jQuery} group\r\n */\r\n createOptgroup: function(group) {\r\n var label = $(group).attr(\"label\");\r\n var value = $(group).attr(\"value\");\r\n var $li = $('
  • ');\r\n\r\n var classes = this.options.optionClass(group);\r\n $li.addClass(classes);\r\n\r\n if (this.options.enableHTML) {\r\n $('label b', $li).html(\" \" + label);\r\n }\r\n else {\r\n $('label b', $li).text(\" \" + label);\r\n }\r\n\r\n if (this.options.enableCollapsibleOptGroups && this.options.multiple) {\r\n $('a', $li).append('');\r\n }\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n $('a label', $li).prepend('');\r\n }\r\n\r\n if ($(group).is(':disabled')) {\r\n $li.addClass('disabled');\r\n }\r\n\r\n this.$ul.append($li);\r\n\r\n $(\"option\", group).each($.proxy(function($, group) {\r\n this.createOptionValue(group);\r\n }, this))\r\n },\r\n\r\n /**\r\n * Build the select all.\r\n *\r\n * Checks if a select all has already been created.\r\n */\r\n buildSelectAll: function() {\r\n if (typeof this.options.selectAllValue === 'number') {\r\n this.options.selectAllValue = this.options.selectAllValue.toString();\r\n }\r\n\r\n var alreadyHasSelectAll = this.hasSelectAll();\r\n\r\n if (!alreadyHasSelectAll && this.options.includeSelectAllOption && this.options.multiple\r\n && $('option', this.$select).length > this.options.includeSelectAllIfMoreThan) {\r\n\r\n // Check whether to add a divider after the select all.\r\n if (this.options.includeSelectAllDivider) {\r\n this.$ul.prepend($(this.options.templates.divider));\r\n }\r\n\r\n var $li = $(this.options.templates.li);\r\n $('label', $li).addClass(\"checkbox\");\r\n\r\n if (this.options.enableHTML) {\r\n $('label', $li).html(\" \" + this.options.selectAllText);\r\n }\r\n else {\r\n $('label', $li).text(\" \" + this.options.selectAllText);\r\n }\r\n\r\n if (this.options.selectAllName) {\r\n $('label', $li).prepend('');\r\n }\r\n else {\r\n $('label', $li).prepend('');\r\n }\r\n\r\n var $checkbox = $('input', $li);\r\n $checkbox.val(this.options.selectAllValue);\r\n\r\n $li.addClass(\"multiselect-item multiselect-all\");\r\n $checkbox.parent().parent()\r\n .addClass('multiselect-all');\r\n\r\n this.$ul.prepend($li);\r\n\r\n $checkbox.prop('checked', false);\r\n }\r\n },\r\n\r\n /**\r\n * Builds the filter.\r\n */\r\n buildFilter: function() {\r\n\r\n // Build filter if filtering OR case insensitive filtering is enabled and the number of options exceeds (or equals) enableFilterLength.\r\n if (this.options.enableFiltering || this.options.enableCaseInsensitiveFiltering) {\r\n var enableFilterLength = Math.max(this.options.enableFiltering, this.options.enableCaseInsensitiveFiltering);\r\n\r\n if (this.$select.find('option').length >= enableFilterLength) {\r\n\r\n this.$filter = $(this.options.templates.filter);\r\n $('input', this.$filter).attr('placeholder', this.options.filterPlaceholder);\r\n\r\n // Adds optional filter clear button\r\n if(this.options.includeFilterClearBtn) {\r\n var clearBtn = $(this.options.templates.filterClearBtn);\r\n clearBtn.on('click', $.proxy(function(event){\r\n clearTimeout(this.searchTimeout);\r\n\r\n this.query = '';\r\n this.$filter.find('.multiselect-search').val('');\r\n $('li', this.$ul).show().removeClass('multiselect-filter-hidden');\r\n\r\n this.updateSelectAll();\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n\r\n }, this));\r\n this.$filter.find('.input-group').append(clearBtn);\r\n }\r\n\r\n this.$ul.prepend(this.$filter);\r\n\r\n this.$filter.val(this.query).on('click', function(event) {\r\n event.stopPropagation();\r\n }).on('input keydown', $.proxy(function(event) {\r\n // Cancel enter key default behaviour\r\n if (event.which === 13) {\r\n event.preventDefault();\r\n }\r\n\r\n // This is useful to catch \"keydown\" events after the browser has updated the control.\r\n clearTimeout(this.searchTimeout);\r\n\r\n this.searchTimeout = this.asyncFunction($.proxy(function() {\r\n\r\n if (this.query !== event.target.value) {\r\n this.query = event.target.value;\r\n\r\n var currentGroup, currentGroupVisible;\r\n $.each($('li', this.$ul), $.proxy(function(index, element) {\r\n var value = $('input', element).length > 0 ? $('input', element).val() : \"\";\r\n var text = $('label', element).text();\r\n\r\n var filterCandidate = '';\r\n if ((this.options.filterBehavior === 'text')) {\r\n filterCandidate = text;\r\n }\r\n else if ((this.options.filterBehavior === 'value')) {\r\n filterCandidate = value;\r\n }\r\n else if (this.options.filterBehavior === 'both') {\r\n filterCandidate = text + '\\n' + value;\r\n }\r\n\r\n if (value !== this.options.selectAllValue && text) {\r\n\r\n // By default lets assume that element is not\r\n // interesting for this search.\r\n var showElement = false;\r\n\r\n if (this.options.enableCaseInsensitiveFiltering) {\r\n filterCandidate = filterCandidate.toLowerCase();\r\n this.query = this.query.toLowerCase();\r\n }\r\n\r\n if (this.options.enableFullValueFiltering && this.options.filterBehavior !== 'both') {\r\n var valueToMatch = filterCandidate.trim().substring(0, this.query.length);\r\n if (this.query.indexOf(valueToMatch) > -1) {\r\n showElement = true;\r\n }\r\n }\r\n else if (filterCandidate.indexOf(this.query) > -1) {\r\n showElement = true;\r\n }\r\n\r\n // Toggle current element (group or group item) according to showElement boolean.\r\n if(!showElement){\r\n $(element).css('display', 'none');\r\n $(element).addClass('multiselect-filter-hidden');\r\n }\r\n if(showElement){\r\n $(element).css('display', 'block');\r\n $(element).removeClass('multiselect-filter-hidden');\r\n }\r\n\r\n // Differentiate groups and group items.\r\n if ($(element).hasClass('multiselect-group')) {\r\n // Remember group status.\r\n currentGroup = element;\r\n currentGroupVisible = showElement;\r\n }\r\n else {\r\n // Show group name when at least one of its items is visible.\r\n if (showElement) {\r\n $(currentGroup).show()\r\n .removeClass('multiselect-filter-hidden');\r\n }\r\n\r\n // Show all group items when group name satisfies filter.\r\n if (!showElement && currentGroupVisible) {\r\n $(element).show()\r\n .removeClass('multiselect-filter-hidden');\r\n }\r\n }\r\n }\r\n }, this));\r\n }\r\n\r\n this.updateSelectAll();\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n\r\n this.options.onFiltering(event.target);\r\n\r\n }, this), 300, this);\r\n }, this));\r\n }\r\n }\r\n },\r\n\r\n /**\r\n * Unbinds the whole plugin.\r\n */\r\n destroy: function() {\r\n this.$container.remove();\r\n this.$select.show();\r\n\r\n // reset original state\r\n this.$select.prop('disabled', this.options.wasDisabled);\r\n\r\n this.$select.data('multiselect', null);\r\n },\r\n\r\n /**\r\n * Refreshs the multiselect based on the selected options of the select.\r\n */\r\n refresh: function () {\r\n var inputs = {};\r\n $('li input', this.$ul).each(function() {\r\n inputs[$(this).val()] = $(this);\r\n });\r\n\r\n $('option', this.$select).each($.proxy(function (index, element) {\r\n var $elem = $(element);\r\n var $input = inputs[$(element).val()];\r\n\r\n if ($elem.is(':selected')) {\r\n $input.prop('checked', true);\r\n\r\n if (this.options.selectedClass) {\r\n $input.closest('li')\r\n .addClass(this.options.selectedClass);\r\n }\r\n }\r\n else {\r\n $input.prop('checked', false);\r\n\r\n if (this.options.selectedClass) {\r\n $input.closest('li')\r\n .removeClass(this.options.selectedClass);\r\n }\r\n }\r\n\r\n if ($elem.is(\":disabled\")) {\r\n $input.attr('disabled', 'disabled')\r\n .prop('disabled', true)\r\n .closest('li')\r\n .addClass('disabled');\r\n }\r\n else {\r\n $input.prop('disabled', false)\r\n .closest('li')\r\n .removeClass('disabled');\r\n }\r\n }, this));\r\n\r\n this.updateButtonText();\r\n this.updateSelectAll();\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n },\r\n\r\n /**\r\n * Select all options of the given values.\r\n *\r\n * If triggerOnChange is set to true, the on change event is triggered if\r\n * and only if one value is passed.\r\n *\r\n * @param {Array} selectValues\r\n * @param {Boolean} triggerOnChange\r\n */\r\n select: function(selectValues, triggerOnChange) {\r\n if(!$.isArray(selectValues)) {\r\n selectValues = [selectValues];\r\n }\r\n\r\n for (var i = 0; i < selectValues.length; i++) {\r\n var value = selectValues[i];\r\n\r\n if (value === null || value === undefined) {\r\n continue;\r\n }\r\n\r\n var $option = this.getOptionByValue(value);\r\n var $checkbox = this.getInputByValue(value);\r\n\r\n if($option === undefined || $checkbox === undefined) {\r\n continue;\r\n }\r\n\r\n if (!this.options.multiple) {\r\n this.deselectAll(false);\r\n }\r\n\r\n if (this.options.selectedClass) {\r\n $checkbox.closest('li')\r\n .addClass(this.options.selectedClass);\r\n }\r\n\r\n $checkbox.prop('checked', true);\r\n $option.prop('selected', true);\r\n\r\n if (triggerOnChange) {\r\n this.options.onChange($option, true);\r\n }\r\n }\r\n\r\n this.updateButtonText();\r\n this.updateSelectAll();\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n },\r\n\r\n /**\r\n * Clears all selected items.\r\n */\r\n clearSelection: function () {\r\n this.deselectAll(false);\r\n this.updateButtonText();\r\n this.updateSelectAll();\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n },\r\n\r\n /**\r\n * Deselects all options of the given values.\r\n *\r\n * If triggerOnChange is set to true, the on change event is triggered, if\r\n * and only if one value is passed.\r\n *\r\n * @param {Array} deselectValues\r\n * @param {Boolean} triggerOnChange\r\n */\r\n deselect: function(deselectValues, triggerOnChange) {\r\n if(!$.isArray(deselectValues)) {\r\n deselectValues = [deselectValues];\r\n }\r\n\r\n for (var i = 0; i < deselectValues.length; i++) {\r\n var value = deselectValues[i];\r\n\r\n if (value === null || value === undefined) {\r\n continue;\r\n }\r\n\r\n var $option = this.getOptionByValue(value);\r\n var $checkbox = this.getInputByValue(value);\r\n\r\n if($option === undefined || $checkbox === undefined) {\r\n continue;\r\n }\r\n\r\n if (this.options.selectedClass) {\r\n $checkbox.closest('li')\r\n .removeClass(this.options.selectedClass);\r\n }\r\n\r\n $checkbox.prop('checked', false);\r\n $option.prop('selected', false);\r\n\r\n if (triggerOnChange) {\r\n this.options.onChange($option, false);\r\n }\r\n }\r\n\r\n this.updateButtonText();\r\n this.updateSelectAll();\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n },\r\n\r\n /**\r\n * Selects all enabled & visible options.\r\n *\r\n * If justVisible is true or not specified, only visible options are selected.\r\n *\r\n * @param {Boolean} justVisible\r\n * @param {Boolean} triggerOnSelectAll\r\n */\r\n selectAll: function (justVisible, triggerOnSelectAll) {\r\n\r\n var justVisible = typeof justVisible === 'undefined' ? true : justVisible;\r\n var allLis = $(\"li:not(.divider):not(.disabled):not(.multiselect-group)\", this.$ul);\r\n var visibleLis = $(\"li:not(.divider):not(.disabled):not(.multiselect-group):not(.multiselect-filter-hidden):not(.multiselect-collapisble-hidden)\", this.$ul).filter(':visible');\r\n\r\n if(justVisible) {\r\n $('input:enabled' , visibleLis).prop('checked', true);\r\n visibleLis.addClass(this.options.selectedClass);\r\n\r\n $('input:enabled' , visibleLis).each($.proxy(function(index, element) {\r\n var value = $(element).val();\r\n var option = this.getOptionByValue(value);\r\n $(option).prop('selected', true);\r\n }, this));\r\n }\r\n else {\r\n $('input:enabled' , allLis).prop('checked', true);\r\n allLis.addClass(this.options.selectedClass);\r\n\r\n $('input:enabled' , allLis).each($.proxy(function(index, element) {\r\n var value = $(element).val();\r\n var option = this.getOptionByValue(value);\r\n $(option).prop('selected', true);\r\n }, this));\r\n }\r\n\r\n $('li input[value=\"' + this.options.selectAllValue + '\"]', this.$ul).prop('checked', true);\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n\r\n if (triggerOnSelectAll) {\r\n this.options.onSelectAll();\r\n }\r\n },\r\n\r\n /**\r\n * Deselects all options.\r\n *\r\n * If justVisible is true or not specified, only visible options are deselected.\r\n *\r\n * @param {Boolean} justVisible\r\n */\r\n deselectAll: function (justVisible, triggerOnDeselectAll) {\r\n\r\n var justVisible = typeof justVisible === 'undefined' ? true : justVisible;\r\n var allLis = $(\"li:not(.divider):not(.disabled):not(.multiselect-group)\", this.$ul);\r\n var visibleLis = $(\"li:not(.divider):not(.disabled):not(.multiselect-group):not(.multiselect-filter-hidden):not(.multiselect-collapisble-hidden)\", this.$ul).filter(':visible');\r\n\r\n if(justVisible) {\r\n $('input[type=\"checkbox\"]:enabled' , visibleLis).prop('checked', false);\r\n visibleLis.removeClass(this.options.selectedClass);\r\n\r\n $('input[type=\"checkbox\"]:enabled' , visibleLis).each($.proxy(function(index, element) {\r\n var value = $(element).val();\r\n var option = this.getOptionByValue(value);\r\n $(option).prop('selected', false);\r\n }, this));\r\n }\r\n else {\r\n $('input[type=\"checkbox\"]:enabled' , allLis).prop('checked', false);\r\n allLis.removeClass(this.options.selectedClass);\r\n\r\n $('input[type=\"checkbox\"]:enabled' , allLis).each($.proxy(function(index, element) {\r\n var value = $(element).val();\r\n var option = this.getOptionByValue(value);\r\n $(option).prop('selected', false);\r\n }, this));\r\n }\r\n\r\n $('li input[value=\"' + this.options.selectAllValue + '\"]', this.$ul).prop('checked', false);\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n\r\n if (triggerOnDeselectAll) {\r\n this.options.onDeselectAll();\r\n }\r\n },\r\n\r\n /**\r\n * Rebuild the plugin.\r\n *\r\n * Rebuilds the dropdown, the filter and the select all option.\r\n */\r\n rebuild: function() {\r\n this.$ul.html('');\r\n\r\n // Important to distinguish between radios and checkboxes.\r\n this.options.multiple = this.$select.attr('multiple') === \"multiple\";\r\n\r\n this.buildSelectAll();\r\n this.buildDropdownOptions();\r\n this.buildFilter();\r\n\r\n this.updateButtonText();\r\n this.updateSelectAll(true);\r\n\r\n if (this.options.enableClickableOptGroups && this.options.multiple) {\r\n this.updateOptGroups();\r\n }\r\n\r\n if (this.options.disableIfEmpty && $('option', this.$select).length <= 0) {\r\n this.disable();\r\n }\r\n else {\r\n this.enable();\r\n }\r\n\r\n if (this.options.dropRight) {\r\n this.$ul.addClass('pull-right');\r\n }\r\n },\r\n\r\n /**\r\n * The provided data will be used to build the dropdown.\r\n */\r\n dataprovider: function(dataprovider) {\r\n\r\n var groupCounter = 0;\r\n var $select = this.$select.empty();\r\n\r\n $.each(dataprovider, function (index, option) {\r\n var $tag;\r\n\r\n if ($.isArray(option.children)) { // create optiongroup tag\r\n groupCounter++;\r\n\r\n $tag = $('').attr({\r\n label: option.label || 'Group ' + groupCounter,\r\n disabled: !!option.disabled\r\n });\r\n\r\n forEach(option.children, function(subOption) { // add children option tags\r\n var attributes = {\r\n value: subOption.value,\r\n label: subOption.label || subOption.value,\r\n title: subOption.title,\r\n selected: !!subOption.selected,\r\n disabled: !!subOption.disabled\r\n };\r\n\r\n //Loop through attributes object and add key-value for each attribute\r\n for (var key in subOption.attributes) {\r\n attributes['data-' + key] = subOption.attributes[key];\r\n }\r\n //Append original attributes + new data attributes to option\r\n $tag.append($('