{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./vendor/assets/libs/bootstrap-select/bootstrap-select.js","webpack:///./node_modules/bootstrap-select/js/bootstrap-select.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","$","DISALLOWED_ATTRIBUTES","uriAttrs","DefaultWhitelist","a","area","b","br","col","code","div","em","hr","h1","h2","h3","h4","h5","h6","img","li","ol","pre","small","span","sub","sup","strong","u","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","allowedAttribute","attr","allowedAttributeList","attrName","nodeName","toLowerCase","inArray","Boolean","nodeValue","match","regExp","filter","index","RegExp","length","sanitizeHtml","unsafeElements","whiteList","sanitizeFn","whitelistKeys","keys","len","elements","querySelectorAll","j","len2","el","elName","indexOf","attributeList","slice","attributes","whitelistedAttributes","concat","k","len3","removeAttribute","parentNode","removeChild","document","createElement","view","elemCtrProto","Element","objCtr","classListGetter","$elem","this","add","classes","Array","arguments","join","addClass","remove","removeClass","toggle","force","toggleClass","contains","hasClass","classListPropDesc","configurable","ex","undefined","number","__defineGetter__","window","toString","startsWith","testElement","classList","_add","DOMTokenList","_remove","forEach","_toggle","token","getSelectedOptions","select","ignoreDisabled","opt","selectedOptions","options","disabled","tagName","push","getSelectValues","multiple","String","$defineProperty","result","error","search","TypeError","string","stringLength","searchString","searchLength","position","pos","Number","start","Math","min","max","charCodeAt","HTMLSelectElement","valHooks","useDefault","_set","set","elem","data","apply","changedArguments","EventIsSupported","Event","e","stringSearch","method","normalize","stringTypes","searchSuccess","stringType","replace","normalizeToBase","toUpperCase","toInteger","parseInt","fn","triggerNative","eventName","event","dispatchEvent","bubbles","createEvent","initEvent","fireEvent","createEventObject","eventType","trigger","deburredLetters","reLatin","reComboMark","deburrLetter","map","escaper","source","testRegexp","replaceRegexp","htmlEscape","test","keyCodeMap","32","48","49","50","51","52","53","54","55","56","57","59","65","66","67","68","69","70","71","72","73","74","75","76","77","78","79","80","81","82","83","84","85","86","87","88","89","90","96","97","98","99","100","101","102","103","104","105","keyCodes","version","success","major","full","dropdown","Constructor","VERSION","split","err","selectId","EVENT_KEY","classNames","DISABLED","DIVIDER","SHOW","DROPUP","MENU","MENURIGHT","MENULEFT","BUTTONCLASS","POPOVERHEADER","ICONBASE","TICKICON","Selector","elementTemplates","subtext","whitespace","createTextNode","fragment","createDocumentFragment","noResults","cloneNode","className","setAttribute","text","checkMark","REGEXP_ARROW","REGEXP_TAB_OR_ESCAPE","generateOption","content","optgroup","nodeType","appendChild","innerHTML","inline","insertAdjacentHTML","useFragment","subtextElement","iconElement","textElement","textContent","icon","iconBase","childNodes","label","display","showNoResults","searchMatch","searchValue","noneResultsText","$menuInner","firstChild","Selectpicker","element","that","$element","$newElement","$button","$menu","selectpicker","main","current","isSearching","keydown","keyHistory","resetKeyHistory","setTimeout","sizeInfo","title","winPad","windowPadding","val","render","refresh","setStyle","selectAll","deselectAll","destroy","show","hide","init","Plugin","option","args","_option","shift","BootstrapVersion","console","warn","toUpdate","DEFAULTS","style","tickIcon","chain","each","$this","is","dataAttributes","dataAttr","config","extend","defaults","template","Function","noneSelectedText","countSelectedText","numSelected","numTotal","maxOptionsText","numAll","numGroup","selectAllText","deselectAllText","doneButton","doneButtonText","multipleSeparator","styleBase","size","selectedTextFormat","width","container","hideDisabled","showSubtext","showIcon","showContent","dropupAuto","header","liveSearch","liveSearchPlaceholder","liveSearchNormalize","liveSearchStyle","actionsBox","showTick","caret","maxOptions","mobile","selectOnTab","dropdownAlignRight","virtualScroll","sanitize","id","prop","autofocus","createDropdown","buildData","after","prependTo","children","$searchbox","find","checkDisabled","clickListener","liveSearchListener","focusedParent","setWidth","selectPosition","on","isVirtual","menuInner","emptyMenu","replaceChild","scrollTop","hasAttribute","off","validity","valid","buildList","multiselectable","inputGroup","parent","drop","searchbox","actionsbox","donebutton","setPositionData","canHighlight","type","height","dividerHeight","dropdownHeaderHeight","liHeight","posinset","createView","setSize","selected","prevActive","active","selectedIndex","liIndex","selectedData","menuInnerHeight","scroll","chunkSize","chunkCount","firstChunk","lastChunk","currentChunk","prevPositions","positionIsDifferent","previousElements","array1","array2","chunks","menuIsDifferent","ceil","round","endOfChunk","position0","position1","activeIndex","prevActiveIndex","defocusItem","visibleElements","setOptionStatus","every","marginTop","marginBottom","menuFragment","toSanitize","visibleElementsLen","elText","elementData","lastChild","sanitized","hasScrollBar","menuInnerInnerWidth","offsetWidth","totalMenuWidth","selectWidth","minWidth","actualMenuWidth","newActive","currentActive","focusItem","updateValue","noScroll","liData","noStyle","setPlaceholder","updateIndex","titleOption","selectTitleOption","titleNotAppended","selectedOption","navigation","performance","getEntriesByType","defaultSelected","insertBefore","readyState","addEventListener","displayedValue","optionSelector","mainData","optID","startIndex","selectOptions","addDivider","previousData","addOption","divider","getAttribute","cssText","inlineStyle","optionClass","optgroupClass","trim","tokens","addOptgroup","previous","next","headerIndex","lastIndex","item","selectData","mainElements","widestOptionLength","buildElement","liElement","combinedLength","widestOption","findLis","showCount","countMax","placeholderSelected","selectedCount","button","buttonInner","querySelector","titleFragment","hasContent","thisData","titleOptions","totalCount","tr8nText","filterExpand","clone","newStyle","status","buttonClass","newElement","previousElementSibling","nextElementSibling","menu","menuInnerInner","dropdownHeader","actions","firstOption","input","body","scrollBarWidth","offsetHeight","headerHeight","searchHeight","actionsHeight","doneButtonHeight","outerHeight","menuStyle","getComputedStyle","menuWidth","menuPadding","vert","paddingTop","css","paddingBottom","borderTopWidth","borderBottomWidth","horiz","paddingLeft","paddingRight","borderLeftWidth","borderRightWidth","menuExtras","marginLeft","marginRight","overflowY","selectHeight","getSelectPosition","containerPos","$window","offset","$container","top","left","selectOffsetTop","selectOffsetBot","selectOffsetLeft","scrollLeft","selectOffsetRight","setMenuSize","isAuto","menuHeight","minHeight","_minHeight","maxHeight","menuInnerMinHeight","estimate","isDropup","divHeight","divLength","dropup","_popper","update","requestAnimationFrame","$selectClone","appendTo","btnWidth","outerWidth","$bsContainer","actualHeight","getPlacement","containerPosition","Default","isDisabled","append","detach","selectedOnly","setDisabled","setSelected","activeIndexIsSet","keepActive","$document","setFocus","checkPopperExists","state","isCreated","keyCode","preventDefault","_menu","hoverLi","parentElement","hoverData","retainActive","clickedData","clickedIndex","prevValue","prevIndex","prevOption","triggerChange","stopPropagation","$option","$optgroup","$optgroupOptions","maxOptionsGrp","maxReached","maxReachedGrp","maxOptionsArr","maxTxt","maxTxtGrp","$notify","currentTarget","target","tabindex","originalEvent","isTrusted","q","cache","cacheArr","searchStyle","_searchStyle","normalizeSearch","cacheLen","liPrev","liSelectedIndex","changeAll","previousSelected","currentSelected","isActive","liActive","activeLi","isToggle","closest","$items","updateScroll","downOnTab","which","isArrowKey","lastIndexOf","liActiveIndex","scrollHeight","matches","cancel","clearTimeout","charAt","matchIndex","focus","before","removeData","old","keydownHandler","bootstrapKeydown","_dataApiKeydownHandler","noConflict","$selectpicker","jQuery"],"mappings":"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OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KAER,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,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","file":"js/vendor/libs/bootstrap-select/bootstrap-select-d2ec94ff80020cb4d4d5.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"https://optimal.seneris.com/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 689);\n","import 'bootstrap-select/js/bootstrap-select.js'\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function ($) {\n 'use strict';\n\n var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n var DefaultWhitelist = {\n // Global attributes allowed on any supplied element below.\n '*': ['class', 'dir', 'id', 'lang', 'role', 'tabindex', 'style', ARIA_ATTRIBUTE_PATTERN],\n a: ['target', 'href', 'title', 'rel'],\n area: [],\n b: [],\n br: [],\n col: [],\n code: [],\n div: [],\n em: [],\n hr: [],\n h1: [],\n h2: [],\n h3: [],\n h4: [],\n h5: [],\n h6: [],\n i: [],\n img: ['src', 'alt', 'title', 'width', 'height'],\n li: [],\n ol: [],\n p: [],\n pre: [],\n s: [],\n small: [],\n span: [],\n sub: [],\n sup: [],\n strong: [],\n u: [],\n ul: []\n };\n /**\r\n * A pattern that recognizes a commonly useful subset of URLs that are safe.\r\n *\r\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\n */\n\n var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n /**\r\n * A pattern that matches safe data URLs. Only matches image, video and audio types.\r\n *\r\n * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\r\n */\n\n var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n function allowedAttribute(attr, allowedAttributeList) {\n var attrName = attr.nodeName.toLowerCase();\n\n if ($.inArray(attrName, allowedAttributeList) !== -1) {\n if ($.inArray(attrName, uriAttrs) !== -1) {\n return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n }\n\n return true;\n }\n\n var regExp = $(allowedAttributeList).filter(function (index, value) {\n return value instanceof RegExp;\n }); // Check if a regular expression validates the attribute.\n\n for (var i = 0, l = regExp.length; i < l; i++) {\n if (attrName.match(regExp[i])) {\n return true;\n }\n }\n\n return false;\n }\n\n function sanitizeHtml(unsafeElements, whiteList, sanitizeFn) {\n if (sanitizeFn && typeof sanitizeFn === 'function') {\n return sanitizeFn(unsafeElements);\n }\n\n var whitelistKeys = Object.keys(whiteList);\n\n for (var i = 0, len = unsafeElements.length; i < len; i++) {\n var elements = unsafeElements[i].querySelectorAll('*');\n\n for (var j = 0, len2 = elements.length; j < len2; j++) {\n var el = elements[j];\n var elName = el.nodeName.toLowerCase();\n\n if (whitelistKeys.indexOf(elName) === -1) {\n el.parentNode.removeChild(el);\n continue;\n }\n\n var attributeList = [].slice.call(el.attributes);\n var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n\n for (var k = 0, len3 = attributeList.length; k < len3; k++) {\n var attr = attributeList[k];\n\n if (!allowedAttribute(attr, whitelistedAttributes)) {\n el.removeAttribute(attr.nodeName);\n }\n }\n }\n }\n } // Polyfill for browsers with no classList support\n // Remove in v2\n\n\n if (!('classList' in document.createElement('_'))) {\n (function (view) {\n if (!('Element' in view)) return;\n\n var classListProp = 'classList',\n protoProp = 'prototype',\n elemCtrProto = view.Element[protoProp],\n objCtr = Object,\n classListGetter = function classListGetter() {\n var $elem = $(this);\n return {\n add: function add(classes) {\n classes = Array.prototype.slice.call(arguments).join(' ');\n return $elem.addClass(classes);\n },\n remove: function remove(classes) {\n classes = Array.prototype.slice.call(arguments).join(' ');\n return $elem.removeClass(classes);\n },\n toggle: function toggle(classes, force) {\n return $elem.toggleClass(classes, force);\n },\n contains: function contains(classes) {\n return $elem.hasClass(classes);\n }\n };\n };\n\n if (objCtr.defineProperty) {\n var classListPropDesc = {\n get: classListGetter,\n enumerable: true,\n configurable: true\n };\n\n try {\n objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n } catch (ex) {\n // IE 8 doesn't support enumerable:true\n // adding undefined to fight this issue https://github.com/eligrey/classList.js/issues/36\n // modernie IE8-MSW7 machine has IE8 8.0.6001.18702 and is affected\n if (ex.number === undefined || ex.number === -0x7FF5EC54) {\n classListPropDesc.enumerable = false;\n objCtr.defineProperty(elemCtrProto, classListProp, classListPropDesc);\n }\n }\n } else if (objCtr[protoProp].__defineGetter__) {\n elemCtrProto.__defineGetter__(classListProp, classListGetter);\n }\n })(window);\n }\n\n var testElement = document.createElement('_');\n testElement.classList.add('c1', 'c2');\n\n if (!testElement.classList.contains('c2')) {\n var _add = DOMTokenList.prototype.add,\n _remove = DOMTokenList.prototype.remove;\n\n DOMTokenList.prototype.add = function () {\n Array.prototype.forEach.call(arguments, _add.bind(this));\n };\n\n DOMTokenList.prototype.remove = function () {\n Array.prototype.forEach.call(arguments, _remove.bind(this));\n };\n }\n\n testElement.classList.toggle('c3', false); // Polyfill for IE 10 and Firefox <24, where classList.toggle does not\n // support the second argument.\n\n if (testElement.classList.contains('c3')) {\n var _toggle = DOMTokenList.prototype.toggle;\n\n DOMTokenList.prototype.toggle = function (token, force) {\n if (1 in arguments && !this.contains(token) === !force) {\n return force;\n } else {\n return _toggle.call(this, token);\n }\n };\n }\n\n testElement = null; // shallow array comparison\n\n function isEqual(array1, array2) {\n return array1.length === array2.length && array1.every(function (element, index) {\n return element === array2[index];\n });\n }\n\n ; // <editor-fold desc=\"Shims\">\n\n if (!String.prototype.startsWith) {\n (function () {\n 'use strict'; // needed to support `apply`/`call` with `undefined`/`null`\n\n var defineProperty = function () {\n // IE 8 only supports `Object.defineProperty` on DOM elements\n try {\n var object = {};\n var $defineProperty = Object.defineProperty;\n var result = $defineProperty(object, object, object) && $defineProperty;\n } catch (error) {}\n\n return result;\n }();\n\n var toString = {}.toString;\n\n var startsWith = function startsWith(search) {\n if (this == null) {\n throw new TypeError();\n }\n\n var string = String(this);\n\n if (search && toString.call(search) == '[object RegExp]') {\n throw new TypeError();\n }\n\n var stringLength = string.length;\n var searchString = String(search);\n var searchLength = searchString.length;\n var position = arguments.length > 1 ? arguments[1] : undefined; // `ToInteger`\n\n var pos = position ? Number(position) : 0;\n\n if (pos != pos) {\n // better `isNaN`\n pos = 0;\n }\n\n var start = Math.min(Math.max(pos, 0), stringLength); // Avoid the `indexOf` call if no match is possible\n\n if (searchLength + start > stringLength) {\n return false;\n }\n\n var index = -1;\n\n while (++index < searchLength) {\n if (string.charCodeAt(start + index) != searchString.charCodeAt(index)) {\n return false;\n }\n }\n\n return true;\n };\n\n if (defineProperty) {\n defineProperty(String.prototype, 'startsWith', {\n 'value': startsWith,\n 'configurable': true,\n 'writable': true\n });\n } else {\n String.prototype.startsWith = startsWith;\n }\n })();\n }\n\n if (!Object.keys) {\n Object.keys = function (o, // object\n k, // key\n r // result array\n ) {\n // initialize object and result\n r = []; // iterate over object keys\n\n for (k in o) {\n // fill result array with non-prototypical keys\n r.hasOwnProperty.call(o, k) && r.push(k);\n } // return result\n\n\n return r;\n };\n }\n\n if (HTMLSelectElement && !HTMLSelectElement.prototype.hasOwnProperty('selectedOptions')) {\n Object.defineProperty(HTMLSelectElement.prototype, 'selectedOptions', {\n get: function get() {\n return this.querySelectorAll(':checked');\n }\n });\n }\n\n function getSelectedOptions(select, ignoreDisabled) {\n var selectedOptions = select.selectedOptions,\n options = [],\n opt;\n\n if (ignoreDisabled) {\n for (var i = 0, len = selectedOptions.length; i < len; i++) {\n opt = selectedOptions[i];\n\n if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n options.push(opt);\n }\n }\n\n return options;\n }\n\n return selectedOptions;\n } // much faster than $.val()\n\n\n function getSelectValues(select, selectedOptions) {\n var value = [],\n options = selectedOptions || select.selectedOptions,\n opt;\n\n for (var i = 0, len = options.length; i < len; i++) {\n opt = options[i];\n\n if (!(opt.disabled || opt.parentNode.tagName === 'OPTGROUP' && opt.parentNode.disabled)) {\n value.push(opt.value);\n }\n }\n\n if (!select.multiple) {\n return !value.length ? null : value[0];\n }\n\n return value;\n } // set data-selected on select element if the value has been programmatically selected\n // prior to initialization of bootstrap-select\n // * consider removing or replacing an alternative method *\n\n\n var valHooks = {\n useDefault: false,\n _set: $.valHooks.select.set\n };\n\n $.valHooks.select.set = function (elem, value) {\n if (value && !valHooks.useDefault) $(elem).data('selected', true);\n return valHooks._set.apply(this, arguments);\n };\n\n var changedArguments = null;\n\n var EventIsSupported = function () {\n try {\n new Event('change');\n return true;\n } catch (e) {\n return false;\n }\n }();\n\n $.fn.triggerNative = function (eventName) {\n var el = this[0],\n event;\n\n if (el.dispatchEvent) {\n // for modern browsers & IE9+\n if (EventIsSupported) {\n // For modern browsers\n event = new Event(eventName, {\n bubbles: true\n });\n } else {\n // For IE since it doesn't support Event constructor\n event = document.createEvent('Event');\n event.initEvent(eventName, true, false);\n }\n\n el.dispatchEvent(event);\n } else if (el.fireEvent) {\n // for IE8\n event = document.createEventObject();\n event.eventType = eventName;\n el.fireEvent('on' + eventName, event);\n } else {\n // fall back to jQuery.trigger\n this.trigger(eventName);\n }\n }; // </editor-fold>\n\n\n function stringSearch(li, searchString, method, normalize) {\n var stringTypes = ['display', 'subtext', 'tokens'],\n searchSuccess = false;\n\n for (var i = 0; i < stringTypes.length; i++) {\n var stringType = stringTypes[i],\n string = li[stringType];\n\n if (string) {\n string = string.toString(); // Strip HTML tags. This isn't perfect, but it's much faster than any other method\n\n if (stringType === 'display') {\n string = string.replace(/<[^>]+>/g, '');\n }\n\n if (normalize) string = normalizeToBase(string);\n string = string.toUpperCase();\n\n if (method === 'contains') {\n searchSuccess = string.indexOf(searchString) >= 0;\n } else {\n searchSuccess = string.startsWith(searchString);\n }\n\n if (searchSuccess) break;\n }\n }\n\n return searchSuccess;\n }\n\n function toInteger(value) {\n return parseInt(value, 10) || 0;\n } // Borrowed from Lodash (_.deburr)\n\n /** Used to map Latin Unicode letters to basic Latin letters. */\n\n\n var deburredLetters = {\n // Latin-1 Supplement block.\n '\\xc0': 'A',\n '\\xc1': 'A',\n '\\xc2': 'A',\n '\\xc3': 'A',\n '\\xc4': 'A',\n '\\xc5': 'A',\n '\\xe0': 'a',\n '\\xe1': 'a',\n '\\xe2': 'a',\n '\\xe3': 'a',\n '\\xe4': 'a',\n '\\xe5': 'a',\n '\\xc7': 'C',\n '\\xe7': 'c',\n '\\xd0': 'D',\n '\\xf0': 'd',\n '\\xc8': 'E',\n '\\xc9': 'E',\n '\\xca': 'E',\n '\\xcb': 'E',\n '\\xe8': 'e',\n '\\xe9': 'e',\n '\\xea': 'e',\n '\\xeb': 'e',\n '\\xcc': 'I',\n '\\xcd': 'I',\n '\\xce': 'I',\n '\\xcf': 'I',\n '\\xec': 'i',\n '\\xed': 'i',\n '\\xee': 'i',\n '\\xef': 'i',\n '\\xd1': 'N',\n '\\xf1': 'n',\n '\\xd2': 'O',\n '\\xd3': 'O',\n '\\xd4': 'O',\n '\\xd5': 'O',\n '\\xd6': 'O',\n '\\xd8': 'O',\n '\\xf2': 'o',\n '\\xf3': 'o',\n '\\xf4': 'o',\n '\\xf5': 'o',\n '\\xf6': 'o',\n '\\xf8': 'o',\n '\\xd9': 'U',\n '\\xda': 'U',\n '\\xdb': 'U',\n '\\xdc': 'U',\n '\\xf9': 'u',\n '\\xfa': 'u',\n '\\xfb': 'u',\n '\\xfc': 'u',\n '\\xdd': 'Y',\n '\\xfd': 'y',\n '\\xff': 'y',\n '\\xc6': 'Ae',\n '\\xe6': 'ae',\n '\\xde': 'Th',\n '\\xfe': 'th',\n '\\xdf': 'ss',\n // Latin Extended-A block.\n \"\\u0100\": 'A',\n \"\\u0102\": 'A',\n \"\\u0104\": 'A',\n \"\\u0101\": 'a',\n \"\\u0103\": 'a',\n \"\\u0105\": 'a',\n \"\\u0106\": 'C',\n \"\\u0108\": 'C',\n \"\\u010A\": 'C',\n \"\\u010C\": 'C',\n \"\\u0107\": 'c',\n \"\\u0109\": 'c',\n \"\\u010B\": 'c',\n \"\\u010D\": 'c',\n \"\\u010E\": 'D',\n \"\\u0110\": 'D',\n \"\\u010F\": 'd',\n \"\\u0111\": 'd',\n \"\\u0112\": 'E',\n \"\\u0114\": 'E',\n \"\\u0116\": 'E',\n \"\\u0118\": 'E',\n \"\\u011A\": 'E',\n \"\\u0113\": 'e',\n \"\\u0115\": 'e',\n \"\\u0117\": 'e',\n \"\\u0119\": 'e',\n \"\\u011B\": 'e',\n \"\\u011C\": 'G',\n \"\\u011E\": 'G',\n \"\\u0120\": 'G',\n \"\\u0122\": 'G',\n \"\\u011D\": 'g',\n \"\\u011F\": 'g',\n \"\\u0121\": 'g',\n \"\\u0123\": 'g',\n \"\\u0124\": 'H',\n \"\\u0126\": 'H',\n \"\\u0125\": 'h',\n \"\\u0127\": 'h',\n \"\\u0128\": 'I',\n \"\\u012A\": 'I',\n \"\\u012C\": 'I',\n \"\\u012E\": 'I',\n \"\\u0130\": 'I',\n \"\\u0129\": 'i',\n \"\\u012B\": 'i',\n \"\\u012D\": 'i',\n \"\\u012F\": 'i',\n \"\\u0131\": 'i',\n \"\\u0134\": 'J',\n \"\\u0135\": 'j',\n \"\\u0136\": 'K',\n \"\\u0137\": 'k',\n \"\\u0138\": 'k',\n \"\\u0139\": 'L',\n \"\\u013B\": 'L',\n \"\\u013D\": 'L',\n \"\\u013F\": 'L',\n \"\\u0141\": 'L',\n \"\\u013A\": 'l',\n \"\\u013C\": 'l',\n \"\\u013E\": 'l',\n \"\\u0140\": 'l',\n \"\\u0142\": 'l',\n \"\\u0143\": 'N',\n \"\\u0145\": 'N',\n \"\\u0147\": 'N',\n \"\\u014A\": 'N',\n \"\\u0144\": 'n',\n \"\\u0146\": 'n',\n \"\\u0148\": 'n',\n \"\\u014B\": 'n',\n \"\\u014C\": 'O',\n \"\\u014E\": 'O',\n \"\\u0150\": 'O',\n \"\\u014D\": 'o',\n \"\\u014F\": 'o',\n \"\\u0151\": 'o',\n \"\\u0154\": 'R',\n \"\\u0156\": 'R',\n \"\\u0158\": 'R',\n \"\\u0155\": 'r',\n \"\\u0157\": 'r',\n \"\\u0159\": 'r',\n \"\\u015A\": 'S',\n \"\\u015C\": 'S',\n \"\\u015E\": 'S',\n \"\\u0160\": 'S',\n \"\\u015B\": 's',\n \"\\u015D\": 's',\n \"\\u015F\": 's',\n \"\\u0161\": 's',\n \"\\u0162\": 'T',\n \"\\u0164\": 'T',\n \"\\u0166\": 'T',\n \"\\u0163\": 't',\n \"\\u0165\": 't',\n \"\\u0167\": 't',\n \"\\u0168\": 'U',\n \"\\u016A\": 'U',\n \"\\u016C\": 'U',\n \"\\u016E\": 'U',\n \"\\u0170\": 'U',\n \"\\u0172\": 'U',\n \"\\u0169\": 'u',\n \"\\u016B\": 'u',\n \"\\u016D\": 'u',\n \"\\u016F\": 'u',\n \"\\u0171\": 'u',\n \"\\u0173\": 'u',\n \"\\u0174\": 'W',\n \"\\u0175\": 'w',\n \"\\u0176\": 'Y',\n \"\\u0177\": 'y',\n \"\\u0178\": 'Y',\n \"\\u0179\": 'Z',\n \"\\u017B\": 'Z',\n \"\\u017D\": 'Z',\n \"\\u017A\": 'z',\n \"\\u017C\": 'z',\n \"\\u017E\": 'z',\n \"\\u0132\": 'IJ',\n \"\\u0133\": 'ij',\n \"\\u0152\": 'Oe',\n \"\\u0153\": 'oe',\n \"\\u0149\": \"'n\",\n \"\\u017F\": 's'\n };\n /** Used to match Latin Unicode letters (excluding mathematical operators). */\n\n var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n /** Used to compose unicode character classes. */\n\n var rsComboMarksRange = \"\\\\u0300-\\\\u036f\",\n reComboHalfMarksRange = \"\\\\ufe20-\\\\ufe2f\",\n rsComboSymbolsRange = \"\\\\u20d0-\\\\u20ff\",\n rsComboMarksExtendedRange = \"\\\\u1ab0-\\\\u1aff\",\n rsComboMarksSupplementRange = \"\\\\u1dc0-\\\\u1dff\",\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange + rsComboMarksExtendedRange + rsComboMarksSupplementRange;\n /** Used to compose unicode capture groups. */\n\n var rsCombo = '[' + rsComboRange + ']';\n /**\r\n * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\r\n * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\r\n */\n\n var reComboMark = RegExp(rsCombo, 'g');\n\n function deburrLetter(key) {\n return deburredLetters[key];\n }\n\n ;\n\n function normalizeToBase(string) {\n string = string.toString();\n return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n } // List of HTML entities for escaping.\n\n\n var escapeMap = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`'\n }; // Functions for escaping and unescaping strings to/from HTML interpolation.\n\n var createEscaper = function createEscaper(map) {\n var escaper = function escaper(match) {\n return map[match];\n }; // Regexes for identifying a key that needs to be escaped.\n\n\n var source = '(?:' + Object.keys(map).join('|') + ')';\n var testRegexp = RegExp(source);\n var replaceRegexp = RegExp(source, 'g');\n return function (string) {\n string = string == null ? '' : '' + string;\n return testRegexp.test(string) ? string.replace(replaceRegexp, escaper) : string;\n };\n };\n\n var htmlEscape = createEscaper(escapeMap);\n /**\r\n * ------------------------------------------------------------------------\r\n * Constants\r\n * ------------------------------------------------------------------------\r\n */\n\n var keyCodeMap = {\n 32: ' ',\n 48: '0',\n 49: '1',\n 50: '2',\n 51: '3',\n 52: '4',\n 53: '5',\n 54: '6',\n 55: '7',\n 56: '8',\n 57: '9',\n 59: ';',\n 65: 'A',\n 66: 'B',\n 67: 'C',\n 68: 'D',\n 69: 'E',\n 70: 'F',\n 71: 'G',\n 72: 'H',\n 73: 'I',\n 74: 'J',\n 75: 'K',\n 76: 'L',\n 77: 'M',\n 78: 'N',\n 79: 'O',\n 80: 'P',\n 81: 'Q',\n 82: 'R',\n 83: 'S',\n 84: 'T',\n 85: 'U',\n 86: 'V',\n 87: 'W',\n 88: 'X',\n 89: 'Y',\n 90: 'Z',\n 96: '0',\n 97: '1',\n 98: '2',\n 99: '3',\n 100: '4',\n 101: '5',\n 102: '6',\n 103: '7',\n 104: '8',\n 105: '9'\n };\n var keyCodes = {\n ESCAPE: 27,\n // KeyboardEvent.which value for Escape (Esc) key\n ENTER: 13,\n // KeyboardEvent.which value for Enter key\n SPACE: 32,\n // KeyboardEvent.which value for space key\n TAB: 9,\n // KeyboardEvent.which value for tab key\n ARROW_UP: 38,\n // KeyboardEvent.which value for up arrow key\n ARROW_DOWN: 40 // KeyboardEvent.which value for down arrow key\n\n };\n var version = {\n success: false,\n major: '3'\n };\n\n try {\n version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n version.major = version.full[0];\n version.success = true;\n } catch (err) {// do nothing\n }\n\n var selectId = 0;\n var EVENT_KEY = '.bs.select';\n var classNames = {\n DISABLED: 'disabled',\n DIVIDER: 'divider',\n SHOW: 'open',\n DROPUP: 'dropup',\n MENU: 'dropdown-menu',\n MENURIGHT: 'dropdown-menu-right',\n MENULEFT: 'dropdown-menu-left',\n // to-do: replace with more advanced template/customization options\n BUTTONCLASS: 'btn-default',\n POPOVERHEADER: 'popover-title',\n ICONBASE: 'glyphicon',\n TICKICON: 'glyphicon-ok'\n };\n var Selector = {\n MENU: '.' + classNames.MENU\n };\n var elementTemplates = {\n div: document.createElement('div'),\n span: document.createElement('span'),\n i: document.createElement('i'),\n subtext: document.createElement('small'),\n a: document.createElement('a'),\n li: document.createElement('li'),\n whitespace: document.createTextNode(\"\\xA0\"),\n fragment: document.createDocumentFragment()\n };\n elementTemplates.noResults = elementTemplates.li.cloneNode(false);\n elementTemplates.noResults.className = 'no-results';\n elementTemplates.a.setAttribute('role', 'option');\n elementTemplates.a.className = 'dropdown-item';\n elementTemplates.subtext.className = 'text-muted';\n elementTemplates.text = elementTemplates.span.cloneNode(false);\n elementTemplates.text.className = 'text';\n elementTemplates.checkMark = elementTemplates.span.cloneNode(false);\n var REGEXP_ARROW = new RegExp(keyCodes.ARROW_UP + '|' + keyCodes.ARROW_DOWN);\n var REGEXP_TAB_OR_ESCAPE = new RegExp('^' + keyCodes.TAB + '$|' + keyCodes.ESCAPE);\n var generateOption = {\n li: function li(content, classes, optgroup) {\n var li = elementTemplates.li.cloneNode(false);\n\n if (content) {\n if (content.nodeType === 1 || content.nodeType === 11) {\n li.appendChild(content);\n } else {\n li.innerHTML = content;\n }\n }\n\n if (typeof classes !== 'undefined' && classes !== '') li.className = classes;\n if (typeof optgroup !== 'undefined' && optgroup !== null) li.classList.add('optgroup-' + optgroup);\n return li;\n },\n a: function a(text, classes, inline) {\n var a = elementTemplates.a.cloneNode(true);\n\n if (text) {\n if (text.nodeType === 11) {\n a.appendChild(text);\n } else {\n a.insertAdjacentHTML('beforeend', text);\n }\n }\n\n if (typeof classes !== 'undefined' && classes !== '') a.classList.add.apply(a.classList, classes.split(/\\s+/));\n if (inline) a.setAttribute('style', inline);\n return a;\n },\n text: function text(options, useFragment) {\n var textElement = elementTemplates.text.cloneNode(false),\n subtextElement,\n iconElement;\n\n if (options.content) {\n textElement.innerHTML = options.content;\n } else {\n textElement.textContent = options.text;\n\n if (options.icon) {\n var whitespace = elementTemplates.whitespace.cloneNode(false); // need to use <i> for icons in the button to prevent a breaking change\n // note: switch to span in next major release\n\n iconElement = (useFragment === true ? elementTemplates.i : elementTemplates.span).cloneNode(false);\n iconElement.className = this.options.iconBase + ' ' + options.icon;\n elementTemplates.fragment.appendChild(iconElement);\n elementTemplates.fragment.appendChild(whitespace);\n }\n\n if (options.subtext) {\n subtextElement = elementTemplates.subtext.cloneNode(false);\n subtextElement.textContent = options.subtext;\n textElement.appendChild(subtextElement);\n }\n }\n\n if (useFragment === true) {\n while (textElement.childNodes.length > 0) {\n elementTemplates.fragment.appendChild(textElement.childNodes[0]);\n }\n } else {\n elementTemplates.fragment.appendChild(textElement);\n }\n\n return elementTemplates.fragment;\n },\n label: function label(options) {\n var textElement = elementTemplates.text.cloneNode(false),\n subtextElement,\n iconElement;\n textElement.innerHTML = options.display;\n\n if (options.icon) {\n var whitespace = elementTemplates.whitespace.cloneNode(false);\n iconElement = elementTemplates.span.cloneNode(false);\n iconElement.className = this.options.iconBase + ' ' + options.icon;\n elementTemplates.fragment.appendChild(iconElement);\n elementTemplates.fragment.appendChild(whitespace);\n }\n\n if (options.subtext) {\n subtextElement = elementTemplates.subtext.cloneNode(false);\n subtextElement.textContent = options.subtext;\n textElement.appendChild(subtextElement);\n }\n\n elementTemplates.fragment.appendChild(textElement);\n return elementTemplates.fragment;\n }\n };\n\n function showNoResults(searchMatch, searchValue) {\n if (!searchMatch.length) {\n elementTemplates.noResults.innerHTML = this.options.noneResultsText.replace('{0}', '\"' + htmlEscape(searchValue) + '\"');\n this.$menuInner[0].firstChild.appendChild(elementTemplates.noResults);\n }\n }\n\n var Selectpicker = function Selectpicker(element, options) {\n var that = this; // bootstrap-select has been initialized - revert valHooks.select.set back to its original function\n\n if (!valHooks.useDefault) {\n $.valHooks.select.set = valHooks._set;\n valHooks.useDefault = true;\n }\n\n this.$element = $(element);\n this.$newElement = null;\n this.$button = null;\n this.$menu = null;\n this.options = options;\n this.selectpicker = {\n main: {},\n search: {},\n current: {},\n // current changes if a search is in progress\n view: {},\n isSearching: false,\n keydown: {\n keyHistory: '',\n resetKeyHistory: {\n start: function start() {\n return setTimeout(function () {\n that.selectpicker.keydown.keyHistory = '';\n }, 800);\n }\n }\n }\n };\n this.sizeInfo = {}; // If we have no title yet, try to pull it from the html title attribute (jQuery doesnt' pick it up as it's not a\n // data-attribute)\n\n if (this.options.title === null) {\n this.options.title = this.$element.attr('title');\n } // Format window padding\n\n\n var winPad = this.options.windowPadding;\n\n if (typeof winPad === 'number') {\n this.options.windowPadding = [winPad, winPad, winPad, winPad];\n } // Expose public methods\n\n\n this.val = Selectpicker.prototype.val;\n this.render = Selectpicker.prototype.render;\n this.refresh = Selectpicker.prototype.refresh;\n this.setStyle = Selectpicker.prototype.setStyle;\n this.selectAll = Selectpicker.prototype.selectAll;\n this.deselectAll = Selectpicker.prototype.deselectAll;\n this.destroy = Selectpicker.prototype.destroy;\n this.remove = Selectpicker.prototype.remove;\n this.show = Selectpicker.prototype.show;\n this.hide = Selectpicker.prototype.hide;\n this.init();\n };\n\n Selectpicker.VERSION = '1.13.17'; // part of this is duplicated in i18n/defaults-en_US.js. Make sure to update both.\n\n Selectpicker.DEFAULTS = {\n noneSelectedText: 'Nothing selected',\n noneResultsText: 'No results matched {0}',\n countSelectedText: function countSelectedText(numSelected, numTotal) {\n return numSelected == 1 ? '{0} item selected' : '{0} items selected';\n },\n maxOptionsText: function maxOptionsText(numAll, numGroup) {\n return [numAll == 1 ? 'Limit reached ({n} item max)' : 'Limit reached ({n} items max)', numGroup == 1 ? 'Group limit reached ({n} item max)' : 'Group limit reached ({n} items max)'];\n },\n selectAllText: 'Select All',\n deselectAllText: 'Deselect All',\n doneButton: false,\n doneButtonText: 'Close',\n multipleSeparator: ', ',\n styleBase: 'btn',\n style: classNames.BUTTONCLASS,\n size: 'auto',\n title: null,\n selectedTextFormat: 'values',\n width: false,\n container: false,\n hideDisabled: false,\n showSubtext: false,\n showIcon: true,\n showContent: true,\n dropupAuto: true,\n header: false,\n liveSearch: false,\n liveSearchPlaceholder: null,\n liveSearchNormalize: false,\n liveSearchStyle: 'contains',\n actionsBox: false,\n iconBase: classNames.ICONBASE,\n tickIcon: classNames.TICKICON,\n showTick: false,\n template: {\n caret: '<span class=\"caret\"></span>'\n },\n maxOptions: false,\n mobile: false,\n selectOnTab: false,\n dropdownAlignRight: false,\n windowPadding: 0,\n virtualScroll: 600,\n display: false,\n sanitize: true,\n sanitizeFn: null,\n whiteList: DefaultWhitelist\n };\n Selectpicker.prototype = {\n constructor: Selectpicker,\n init: function init() {\n var that = this,\n id = this.$element.attr('id');\n selectId++;\n this.selectId = 'bs-select-' + selectId;\n this.$element[0].classList.add('bs-select-hidden');\n this.multiple = this.$element.prop('multiple');\n this.autofocus = this.$element.prop('autofocus');\n\n if (this.$element[0].classList.contains('show-tick')) {\n this.options.showTick = true;\n }\n\n this.$newElement = this.createDropdown();\n this.buildData();\n this.$element.after(this.$newElement).prependTo(this.$newElement);\n this.$button = this.$newElement.children('button');\n this.$menu = this.$newElement.children(Selector.MENU);\n this.$menuInner = this.$menu.children('.inner');\n this.$searchbox = this.$menu.find('input');\n this.$element[0].classList.remove('bs-select-hidden');\n if (this.options.dropdownAlignRight === true) this.$menu[0].classList.add(classNames.MENURIGHT);\n\n if (typeof id !== 'undefined') {\n this.$button.attr('data-id', id);\n }\n\n this.checkDisabled();\n this.clickListener();\n\n if (this.options.liveSearch) {\n this.liveSearchListener();\n this.focusedParent = this.$searchbox[0];\n } else {\n this.focusedParent = this.$menuInner[0];\n }\n\n this.setStyle();\n this.render();\n this.setWidth();\n\n if (this.options.container) {\n this.selectPosition();\n } else {\n this.$element.on('hide' + EVENT_KEY, function () {\n if (that.isVirtual()) {\n // empty menu on close\n var menuInner = that.$menuInner[0],\n emptyMenu = menuInner.firstChild.cloneNode(false); // replace the existing UL with an empty one - this is faster than $.empty() or innerHTML = ''\n\n menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n menuInner.scrollTop = 0;\n }\n });\n }\n\n this.$menu.data('this', this);\n this.$newElement.data('this', this);\n if (this.options.mobile) this.mobile();\n this.$newElement.on({\n 'hide.bs.dropdown': function hideBsDropdown(e) {\n that.$element.trigger('hide' + EVENT_KEY, e);\n },\n 'hidden.bs.dropdown': function hiddenBsDropdown(e) {\n that.$element.trigger('hidden' + EVENT_KEY, e);\n },\n 'show.bs.dropdown': function showBsDropdown(e) {\n that.$element.trigger('show' + EVENT_KEY, e);\n },\n 'shown.bs.dropdown': function shownBsDropdown(e) {\n that.$element.trigger('shown' + EVENT_KEY, e);\n }\n });\n\n if (that.$element[0].hasAttribute('required')) {\n this.$element.on('invalid' + EVENT_KEY, function () {\n that.$button[0].classList.add('bs-invalid');\n that.$element.on('shown' + EVENT_KEY + '.invalid', function () {\n that.$element.val(that.$element.val()) // set the value to hide the validation message in Chrome when menu is opened\n .off('shown' + EVENT_KEY + '.invalid');\n }).on('rendered' + EVENT_KEY, function () {\n // if select is no longer invalid, remove the bs-invalid class\n if (this.validity.valid) that.$button[0].classList.remove('bs-invalid');\n that.$element.off('rendered' + EVENT_KEY);\n });\n that.$button.on('blur' + EVENT_KEY, function () {\n that.$element.trigger('focus').trigger('blur');\n that.$button.off('blur' + EVENT_KEY);\n });\n });\n }\n\n setTimeout(function () {\n that.buildList();\n that.$element.trigger('loaded' + EVENT_KEY);\n });\n },\n createDropdown: function createDropdown() {\n // Options\n // If we are multiple or showTick option is set, then add the show-tick class\n var showTick = this.multiple || this.options.showTick ? ' show-tick' : '',\n multiselectable = this.multiple ? ' aria-multiselectable=\"true\"' : '',\n inputGroup = '',\n autofocus = this.autofocus ? ' autofocus' : '';\n\n if (version.major < 4 && this.$element.parent().hasClass('input-group')) {\n inputGroup = ' input-group-btn';\n } // Elements\n\n\n var drop,\n header = '',\n searchbox = '',\n actionsbox = '',\n donebutton = '';\n\n if (this.options.header) {\n header = '<div class=\"' + classNames.POPOVERHEADER + '\">' + '<button type=\"button\" class=\"close\" aria-hidden=\"true\">×</button>' + this.options.header + '</div>';\n }\n\n if (this.options.liveSearch) {\n searchbox = '<div class=\"bs-searchbox\">' + '<input type=\"search\" class=\"form-control\" autocomplete=\"off\"' + (this.options.liveSearchPlaceholder === null ? '' : ' placeholder=\"' + htmlEscape(this.options.liveSearchPlaceholder) + '\"') + ' role=\"combobox\" aria-label=\"Search\" aria-controls=\"' + this.selectId + '\" aria-autocomplete=\"list\">' + '</div>';\n }\n\n if (this.multiple && this.options.actionsBox) {\n actionsbox = '<div class=\"bs-actionsbox\">' + '<div class=\"btn-group btn-group-sm btn-block\">' + '<button type=\"button\" class=\"actions-btn bs-select-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.selectAllText + '</button>' + '<button type=\"button\" class=\"actions-btn bs-deselect-all btn ' + classNames.BUTTONCLASS + '\">' + this.options.deselectAllText + '</button>' + '</div>' + '</div>';\n }\n\n if (this.multiple && this.options.doneButton) {\n donebutton = '<div class=\"bs-donebutton\">' + '<div class=\"btn-group btn-block\">' + '<button type=\"button\" class=\"btn btn-sm ' + classNames.BUTTONCLASS + '\">' + this.options.doneButtonText + '</button>' + '</div>' + '</div>';\n }\n\n drop = '<div class=\"dropdown bootstrap-select' + showTick + inputGroup + '\">' + '<button type=\"button\" tabindex=\"-1\" class=\"' + this.options.styleBase + ' dropdown-toggle\" ' + (this.options.display === 'static' ? 'data-display=\"static\"' : '') + 'data-toggle=\"dropdown\"' + autofocus + ' role=\"combobox\" aria-owns=\"' + this.selectId + '\" aria-haspopup=\"listbox\" aria-expanded=\"false\">' + '<div class=\"filter-option\">' + '<div class=\"filter-option-inner\">' + '<div class=\"filter-option-inner-inner\"></div>' + '</div> ' + '</div>' + (version.major === '4' ? '' : '<span class=\"bs-caret\">' + this.options.template.caret + '</span>') + '</button>' + '<div class=\"' + classNames.MENU + ' ' + (version.major === '4' ? '' : classNames.SHOW) + '\">' + header + searchbox + actionsbox + '<div class=\"inner ' + classNames.SHOW + '\" role=\"listbox\" id=\"' + this.selectId + '\" tabindex=\"-1\" ' + multiselectable + '>' + '<ul class=\"' + classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '') + '\" role=\"presentation\">' + '</ul>' + '</div>' + donebutton + '</div>' + '</div>';\n return $(drop);\n },\n setPositionData: function setPositionData() {\n this.selectpicker.view.canHighlight = [];\n this.selectpicker.view.size = 0;\n\n for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n var li = this.selectpicker.current.data[i],\n canHighlight = true;\n\n if (li.type === 'divider') {\n canHighlight = false;\n li.height = this.sizeInfo.dividerHeight;\n } else if (li.type === 'optgroup-label') {\n canHighlight = false;\n li.height = this.sizeInfo.dropdownHeaderHeight;\n } else {\n li.height = this.sizeInfo.liHeight;\n }\n\n if (li.disabled) canHighlight = false;\n this.selectpicker.view.canHighlight.push(canHighlight);\n\n if (canHighlight) {\n this.selectpicker.view.size++;\n li.posinset = this.selectpicker.view.size;\n }\n\n li.position = (i === 0 ? 0 : this.selectpicker.current.data[i - 1].position) + li.height;\n }\n },\n isVirtual: function isVirtual() {\n return this.options.virtualScroll !== false && this.selectpicker.main.elements.length >= this.options.virtualScroll || this.options.virtualScroll === true;\n },\n createView: function createView(isSearching, setSize, refresh) {\n var that = this,\n scrollTop = 0,\n active = [],\n selected,\n prevActive;\n this.selectpicker.isSearching = isSearching;\n this.selectpicker.current = isSearching ? this.selectpicker.search : this.selectpicker.main;\n this.setPositionData();\n\n if (setSize) {\n if (refresh) {\n scrollTop = this.$menuInner[0].scrollTop;\n } else if (!that.multiple) {\n var element = that.$element[0],\n selectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n if (typeof selectedIndex === 'number' && that.options.size !== false) {\n var selectedData = that.selectpicker.main.data[selectedIndex],\n position = selectedData && selectedData.position;\n\n if (position) {\n scrollTop = position - (that.sizeInfo.menuInnerHeight + that.sizeInfo.liHeight) / 2;\n }\n }\n }\n }\n\n scroll(scrollTop, true);\n this.$menuInner.off('scroll.createView').on('scroll.createView', function (e, updateValue) {\n if (!that.noScroll) scroll(this.scrollTop, updateValue);\n that.noScroll = false;\n });\n\n function scroll(scrollTop, init) {\n var size = that.selectpicker.current.elements.length,\n chunks = [],\n chunkSize,\n chunkCount,\n firstChunk,\n lastChunk,\n currentChunk,\n prevPositions,\n positionIsDifferent,\n previousElements,\n menuIsDifferent = true,\n isVirtual = that.isVirtual();\n that.selectpicker.view.scrollTop = scrollTop;\n chunkSize = Math.ceil(that.sizeInfo.menuInnerHeight / that.sizeInfo.liHeight * 1.5); // number of options in a chunk\n\n chunkCount = Math.round(size / chunkSize) || 1; // number of chunks\n\n for (var i = 0; i < chunkCount; i++) {\n var endOfChunk = (i + 1) * chunkSize;\n\n if (i === chunkCount - 1) {\n endOfChunk = size;\n }\n\n chunks[i] = [i * chunkSize + (!i ? 0 : 1), endOfChunk];\n if (!size) break;\n\n if (currentChunk === undefined && scrollTop - 1 <= that.selectpicker.current.data[endOfChunk - 1].position - that.sizeInfo.menuInnerHeight) {\n currentChunk = i;\n }\n }\n\n if (currentChunk === undefined) currentChunk = 0;\n prevPositions = [that.selectpicker.view.position0, that.selectpicker.view.position1]; // always display previous, current, and next chunks\n\n firstChunk = Math.max(0, currentChunk - 1);\n lastChunk = Math.min(chunkCount - 1, currentChunk + 1);\n that.selectpicker.view.position0 = isVirtual === false ? 0 : Math.max(0, chunks[firstChunk][0]) || 0;\n that.selectpicker.view.position1 = isVirtual === false ? size : Math.min(size, chunks[lastChunk][1]) || 0;\n positionIsDifferent = prevPositions[0] !== that.selectpicker.view.position0 || prevPositions[1] !== that.selectpicker.view.position1;\n\n if (that.activeIndex !== undefined) {\n prevActive = that.selectpicker.main.elements[that.prevActiveIndex];\n active = that.selectpicker.main.elements[that.activeIndex];\n selected = that.selectpicker.main.elements[that.selectedIndex];\n\n if (init) {\n if (that.activeIndex !== that.selectedIndex) {\n that.defocusItem(active);\n }\n\n that.activeIndex = undefined;\n }\n\n if (that.activeIndex && that.activeIndex !== that.selectedIndex) {\n that.defocusItem(selected);\n }\n }\n\n if (that.prevActiveIndex !== undefined && that.prevActiveIndex !== that.activeIndex && that.prevActiveIndex !== that.selectedIndex) {\n that.defocusItem(prevActive);\n }\n\n if (init || positionIsDifferent) {\n previousElements = that.selectpicker.view.visibleElements ? that.selectpicker.view.visibleElements.slice() : [];\n\n if (isVirtual === false) {\n that.selectpicker.view.visibleElements = that.selectpicker.current.elements;\n } else {\n that.selectpicker.view.visibleElements = that.selectpicker.current.elements.slice(that.selectpicker.view.position0, that.selectpicker.view.position1);\n }\n\n that.setOptionStatus(); // if searching, check to make sure the list has actually been updated before updating DOM\n // this prevents unnecessary repaints\n\n if (isSearching || isVirtual === false && init) menuIsDifferent = !isEqual(previousElements, that.selectpicker.view.visibleElements); // if virtual scroll is disabled and not searching,\n // menu should never need to be updated more than once\n\n if ((init || isVirtual === true) && menuIsDifferent) {\n var menuInner = that.$menuInner[0],\n menuFragment = document.createDocumentFragment(),\n emptyMenu = menuInner.firstChild.cloneNode(false),\n marginTop,\n marginBottom,\n elements = that.selectpicker.view.visibleElements,\n toSanitize = []; // replace the existing UL with an empty one - this is faster than $.empty()\n\n menuInner.replaceChild(emptyMenu, menuInner.firstChild);\n\n for (var i = 0, visibleElementsLen = elements.length; i < visibleElementsLen; i++) {\n var element = elements[i],\n elText,\n elementData;\n\n if (that.options.sanitize) {\n elText = element.lastChild;\n\n if (elText) {\n elementData = that.selectpicker.current.data[i + that.selectpicker.view.position0];\n\n if (elementData && elementData.content && !elementData.sanitized) {\n toSanitize.push(elText);\n elementData.sanitized = true;\n }\n }\n }\n\n menuFragment.appendChild(element);\n }\n\n if (that.options.sanitize && toSanitize.length) {\n sanitizeHtml(toSanitize, that.options.whiteList, that.options.sanitizeFn);\n }\n\n if (isVirtual === true) {\n marginTop = that.selectpicker.view.position0 === 0 ? 0 : that.selectpicker.current.data[that.selectpicker.view.position0 - 1].position;\n marginBottom = that.selectpicker.view.position1 > size - 1 ? 0 : that.selectpicker.current.data[size - 1].position - that.selectpicker.current.data[that.selectpicker.view.position1 - 1].position;\n menuInner.firstChild.style.marginTop = marginTop + 'px';\n menuInner.firstChild.style.marginBottom = marginBottom + 'px';\n } else {\n menuInner.firstChild.style.marginTop = 0;\n menuInner.firstChild.style.marginBottom = 0;\n }\n\n menuInner.firstChild.appendChild(menuFragment); // if an option is encountered that is wider than the current menu width, update the menu width accordingly\n // switch to ResizeObserver with increased browser support\n\n if (isVirtual === true && that.sizeInfo.hasScrollBar) {\n var menuInnerInnerWidth = menuInner.firstChild.offsetWidth;\n\n if (init && menuInnerInnerWidth < that.sizeInfo.menuInnerInnerWidth && that.sizeInfo.totalMenuWidth > that.sizeInfo.selectWidth) {\n menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n } else if (menuInnerInnerWidth > that.sizeInfo.menuInnerInnerWidth) {\n // set to 0 to get actual width of menu\n that.$menu[0].style.minWidth = 0;\n var actualMenuWidth = menuInner.firstChild.offsetWidth;\n\n if (actualMenuWidth > that.sizeInfo.menuInnerInnerWidth) {\n that.sizeInfo.menuInnerInnerWidth = actualMenuWidth;\n menuInner.firstChild.style.minWidth = that.sizeInfo.menuInnerInnerWidth + 'px';\n } // reset to default CSS styling\n\n\n that.$menu[0].style.minWidth = '';\n }\n }\n }\n }\n\n that.prevActiveIndex = that.activeIndex;\n\n if (!that.options.liveSearch) {\n that.$menuInner.trigger('focus');\n } else if (isSearching && init) {\n var index = 0,\n newActive;\n\n if (!that.selectpicker.view.canHighlight[index]) {\n index = 1 + that.selectpicker.view.canHighlight.slice(1).indexOf(true);\n }\n\n newActive = that.selectpicker.view.visibleElements[index];\n that.defocusItem(that.selectpicker.view.currentActive);\n that.activeIndex = (that.selectpicker.current.data[index] || {}).index;\n that.focusItem(newActive);\n }\n }\n\n $(window).off('resize' + EVENT_KEY + '.' + this.selectId + '.createView').on('resize' + EVENT_KEY + '.' + this.selectId + '.createView', function () {\n var isActive = that.$newElement.hasClass(classNames.SHOW);\n if (isActive) scroll(that.$menuInner[0].scrollTop);\n });\n },\n focusItem: function focusItem(li, liData, noStyle) {\n if (li) {\n liData = liData || this.selectpicker.main.data[this.activeIndex];\n var a = li.firstChild;\n\n if (a) {\n a.setAttribute('aria-setsize', this.selectpicker.view.size);\n a.setAttribute('aria-posinset', liData.posinset);\n\n if (noStyle !== true) {\n this.focusedParent.setAttribute('aria-activedescendant', a.id);\n li.classList.add('active');\n a.classList.add('active');\n }\n }\n }\n },\n defocusItem: function defocusItem(li) {\n if (li) {\n li.classList.remove('active');\n if (li.firstChild) li.firstChild.classList.remove('active');\n }\n },\n setPlaceholder: function setPlaceholder() {\n var that = this,\n updateIndex = false;\n\n if (this.options.title && !this.multiple) {\n if (!this.selectpicker.view.titleOption) this.selectpicker.view.titleOption = document.createElement('option'); // this option doesn't create a new <li> element, but does add a new option at the start,\n // so startIndex should increase to prevent having to check every option for the bs-title-option class\n\n updateIndex = true;\n var element = this.$element[0],\n selectTitleOption = false,\n titleNotAppended = !this.selectpicker.view.titleOption.parentNode,\n selectedIndex = element.selectedIndex,\n selectedOption = element.options[selectedIndex],\n navigation = window.performance && window.performance.getEntriesByType('navigation');\n\n if (titleNotAppended) {\n // Use native JS to prepend option (faster)\n this.selectpicker.view.titleOption.className = 'bs-title-option';\n this.selectpicker.view.titleOption.value = ''; // Check if selected or data-selected attribute is already set on an option. If not, select the titleOption option.\n // the selected item may have been changed by user or programmatically before the bootstrap select plugin runs,\n // if so, the select will have the data-selected attribute\n\n selectTitleOption = !selectedOption || selectedIndex === 0 && selectedOption.defaultSelected === false && this.$element.data('selected') === undefined;\n }\n\n if (titleNotAppended || this.selectpicker.view.titleOption.index !== 0) {\n element.insertBefore(this.selectpicker.view.titleOption, element.firstChild);\n } // Set selected *after* appending to select,\n // otherwise the option doesn't get selected in IE\n // set using selectedIndex, as setting the selected attr to true here doesn't work in IE11\n\n\n if (selectTitleOption && navigation.length && navigation[0].type !== 'back_forward') {\n element.selectedIndex = 0;\n } else if (document.readyState !== 'complete') {\n // if navigation type is back_forward, there's a chance the select will have its value set by BFCache\n // wait for that value to be set, then run render again\n window.addEventListener('pageshow', function () {\n if (that.selectpicker.view.displayedValue !== element.value) that.render();\n });\n }\n }\n\n return updateIndex;\n },\n buildData: function buildData() {\n var optionSelector = ':not([hidden]):not([data-hidden=\"true\"])',\n mainData = [],\n optID = 0,\n startIndex = this.setPlaceholder() ? 1 : 0; // append the titleOption if necessary and skip the first option in the loop\n\n if (this.options.hideDisabled) optionSelector += ':not(:disabled)';\n var selectOptions = this.$element[0].querySelectorAll('select > *' + optionSelector);\n\n function addDivider(config) {\n var previousData = mainData[mainData.length - 1]; // ensure optgroup doesn't create back-to-back dividers\n\n if (previousData && previousData.type === 'divider' && (previousData.optID || config.optID)) {\n return;\n }\n\n config = config || {};\n config.type = 'divider';\n mainData.push(config);\n }\n\n function addOption(option, config) {\n config = config || {};\n config.divider = option.getAttribute('data-divider') === 'true';\n\n if (config.divider) {\n addDivider({\n optID: config.optID\n });\n } else {\n var liIndex = mainData.length,\n cssText = option.style.cssText,\n inlineStyle = cssText ? htmlEscape(cssText) : '',\n optionClass = (option.className || '') + (config.optgroupClass || '');\n if (config.optID) optionClass = 'opt ' + optionClass;\n config.optionClass = optionClass.trim();\n config.inlineStyle = inlineStyle;\n config.text = option.textContent;\n config.content = option.getAttribute('data-content');\n config.tokens = option.getAttribute('data-tokens');\n config.subtext = option.getAttribute('data-subtext');\n config.icon = option.getAttribute('data-icon');\n option.liIndex = liIndex;\n config.display = config.content || config.text;\n config.type = 'option';\n config.index = liIndex;\n config.option = option;\n config.selected = !!option.selected;\n config.disabled = config.disabled || !!option.disabled;\n mainData.push(config);\n }\n }\n\n function addOptgroup(index, selectOptions) {\n var optgroup = selectOptions[index],\n // skip placeholder option\n previous = index - 1 < startIndex ? false : selectOptions[index - 1],\n next = selectOptions[index + 1],\n options = optgroup.querySelectorAll('option' + optionSelector);\n if (!options.length) return;\n var config = {\n display: htmlEscape(optgroup.label),\n subtext: optgroup.getAttribute('data-subtext'),\n icon: optgroup.getAttribute('data-icon'),\n type: 'optgroup-label',\n optgroupClass: ' ' + (optgroup.className || '')\n },\n headerIndex,\n lastIndex;\n optID++;\n\n if (previous) {\n addDivider({\n optID: optID\n });\n }\n\n config.optID = optID;\n mainData.push(config);\n\n for (var j = 0, len = options.length; j < len; j++) {\n var option = options[j];\n\n if (j === 0) {\n headerIndex = mainData.length - 1;\n lastIndex = headerIndex + len;\n }\n\n addOption(option, {\n headerIndex: headerIndex,\n lastIndex: lastIndex,\n optID: config.optID,\n optgroupClass: config.optgroupClass,\n disabled: optgroup.disabled\n });\n }\n\n if (next) {\n addDivider({\n optID: optID\n });\n }\n }\n\n for (var len = selectOptions.length, i = startIndex; i < len; i++) {\n var item = selectOptions[i];\n\n if (item.tagName !== 'OPTGROUP') {\n addOption(item, {});\n } else {\n addOptgroup(i, selectOptions);\n }\n }\n\n this.selectpicker.main.data = this.selectpicker.current.data = mainData;\n },\n buildList: function buildList() {\n var that = this,\n selectData = this.selectpicker.main.data,\n mainElements = [],\n widestOptionLength = 0;\n\n if ((that.options.showTick || that.multiple) && !elementTemplates.checkMark.parentNode) {\n elementTemplates.checkMark.className = this.options.iconBase + ' ' + that.options.tickIcon + ' check-mark';\n elementTemplates.a.appendChild(elementTemplates.checkMark);\n }\n\n function buildElement(item) {\n var liElement,\n combinedLength = 0;\n\n switch (item.type) {\n case 'divider':\n liElement = generateOption.li(false, classNames.DIVIDER, item.optID ? item.optID + 'div' : undefined);\n break;\n\n case 'option':\n liElement = generateOption.li(generateOption.a(generateOption.text.call(that, item), item.optionClass, item.inlineStyle), '', item.optID);\n\n if (liElement.firstChild) {\n liElement.firstChild.id = that.selectId + '-' + item.index;\n }\n\n break;\n\n case 'optgroup-label':\n liElement = generateOption.li(generateOption.label.call(that, item), 'dropdown-header' + item.optgroupClass, item.optID);\n break;\n }\n\n item.element = liElement;\n mainElements.push(liElement); // count the number of characters in the option - not perfect, but should work in most cases\n\n if (item.display) combinedLength += item.display.length;\n if (item.subtext) combinedLength += item.subtext.length; // if there is an icon, ensure this option's width is checked\n\n if (item.icon) combinedLength += 1;\n\n if (combinedLength > widestOptionLength) {\n widestOptionLength = combinedLength; // guess which option is the widest\n // use this when calculating menu width\n // not perfect, but it's fast, and the width will be updating accordingly when scrolling\n\n that.selectpicker.view.widestOption = mainElements[mainElements.length - 1];\n }\n }\n\n for (var len = selectData.length, i = 0; i < len; i++) {\n var item = selectData[i];\n buildElement(item);\n }\n\n this.selectpicker.main.elements = this.selectpicker.current.elements = mainElements;\n },\n findLis: function findLis() {\n return this.$menuInner.find('.inner > li');\n },\n render: function render() {\n var that = this,\n element = this.$element[0],\n // ensure titleOption is appended and selected (if necessary) before getting selectedOptions\n placeholderSelected = this.setPlaceholder() && element.selectedIndex === 0,\n selectedOptions = getSelectedOptions(element, this.options.hideDisabled),\n selectedCount = selectedOptions.length,\n button = this.$button[0],\n buttonInner = button.querySelector('.filter-option-inner-inner'),\n multipleSeparator = document.createTextNode(this.options.multipleSeparator),\n titleFragment = elementTemplates.fragment.cloneNode(false),\n showCount,\n countMax,\n hasContent = false;\n button.classList.toggle('bs-placeholder', that.multiple ? !selectedCount : !getSelectValues(element, selectedOptions));\n\n if (!that.multiple && selectedOptions.length === 1) {\n that.selectpicker.view.displayedValue = getSelectValues(element, selectedOptions);\n }\n\n if (this.options.selectedTextFormat === 'static') {\n titleFragment = generateOption.text.call(this, {\n text: this.options.title\n }, true);\n } else {\n showCount = this.multiple && this.options.selectedTextFormat.indexOf('count') !== -1 && selectedCount > 1; // determine if the number of selected options will be shown (showCount === true)\n\n if (showCount) {\n countMax = this.options.selectedTextFormat.split('>');\n showCount = countMax.length > 1 && selectedCount > countMax[1] || countMax.length === 1 && selectedCount >= 2;\n } // only loop through all selected options if the count won't be shown\n\n\n if (showCount === false) {\n if (!placeholderSelected) {\n for (var selectedIndex = 0; selectedIndex < selectedCount; selectedIndex++) {\n if (selectedIndex < 50) {\n var option = selectedOptions[selectedIndex],\n thisData = this.selectpicker.main.data[option.liIndex],\n titleOptions = {};\n\n if (this.multiple && selectedIndex > 0) {\n titleFragment.appendChild(multipleSeparator.cloneNode(false));\n }\n\n if (option.title) {\n titleOptions.text = option.title;\n } else if (thisData) {\n if (thisData.content && that.options.showContent) {\n titleOptions.content = thisData.content.toString();\n hasContent = true;\n } else {\n if (that.options.showIcon) {\n titleOptions.icon = thisData.icon;\n }\n\n if (that.options.showSubtext && !that.multiple && thisData.subtext) titleOptions.subtext = ' ' + thisData.subtext;\n titleOptions.text = option.textContent.trim();\n }\n }\n\n titleFragment.appendChild(generateOption.text.call(this, titleOptions, true));\n } else {\n break;\n }\n } // add ellipsis\n\n\n if (selectedCount > 49) {\n titleFragment.appendChild(document.createTextNode('...'));\n }\n }\n } else {\n var optionSelector = ':not([hidden]):not([data-hidden=\"true\"]):not([data-divider=\"true\"])';\n if (this.options.hideDisabled) optionSelector += ':not(:disabled)'; // If this is a multiselect, and selectedTextFormat is count, then show 1 of 2 selected, etc.\n\n var totalCount = this.$element[0].querySelectorAll('select > option' + optionSelector + ', optgroup' + optionSelector + ' option' + optionSelector).length,\n tr8nText = typeof this.options.countSelectedText === 'function' ? this.options.countSelectedText(selectedCount, totalCount) : this.options.countSelectedText;\n titleFragment = generateOption.text.call(this, {\n text: tr8nText.replace('{0}', selectedCount.toString()).replace('{1}', totalCount.toString())\n }, true);\n }\n }\n\n if (this.options.title == undefined) {\n // use .attr to ensure undefined is returned if title attribute is not set\n this.options.title = this.$element.attr('title');\n } // If the select doesn't have a title, then use the default, or if nothing is set at all, use noneSelectedText\n\n\n if (!titleFragment.childNodes.length) {\n titleFragment = generateOption.text.call(this, {\n text: typeof this.options.title !== 'undefined' ? this.options.title : this.options.noneSelectedText\n }, true);\n } // strip all HTML tags and trim the result, then unescape any escaped tags\n\n\n button.title = titleFragment.textContent.replace(/<[^>]*>?/g, '').trim();\n\n if (this.options.sanitize && hasContent) {\n sanitizeHtml([titleFragment], that.options.whiteList, that.options.sanitizeFn);\n }\n\n buttonInner.innerHTML = '';\n buttonInner.appendChild(titleFragment);\n\n if (version.major < 4 && this.$newElement[0].classList.contains('bs3-has-addon')) {\n var filterExpand = button.querySelector('.filter-expand'),\n clone = buttonInner.cloneNode(true);\n clone.className = 'filter-expand';\n\n if (filterExpand) {\n button.replaceChild(clone, filterExpand);\n } else {\n button.appendChild(clone);\n }\n }\n\n this.$element.trigger('rendered' + EVENT_KEY);\n },\n\n /**\r\n * @param [style]\r\n * @param [status]\r\n */\n setStyle: function setStyle(newStyle, status) {\n var button = this.$button[0],\n newElement = this.$newElement[0],\n style = this.options.style.trim(),\n buttonClass;\n\n if (this.$element.attr('class')) {\n this.$newElement.addClass(this.$element.attr('class').replace(/selectpicker|mobile-device|bs-select-hidden|validate\\[.*\\]/gi, ''));\n }\n\n if (version.major < 4) {\n newElement.classList.add('bs3');\n\n if (newElement.parentNode.classList && newElement.parentNode.classList.contains('input-group') && (newElement.previousElementSibling || newElement.nextElementSibling) && (newElement.previousElementSibling || newElement.nextElementSibling).classList.contains('input-group-addon')) {\n newElement.classList.add('bs3-has-addon');\n }\n }\n\n if (newStyle) {\n buttonClass = newStyle.trim();\n } else {\n buttonClass = style;\n }\n\n if (status == 'add') {\n if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n } else if (status == 'remove') {\n if (buttonClass) button.classList.remove.apply(button.classList, buttonClass.split(' '));\n } else {\n if (style) button.classList.remove.apply(button.classList, style.split(' '));\n if (buttonClass) button.classList.add.apply(button.classList, buttonClass.split(' '));\n }\n },\n liHeight: function liHeight(refresh) {\n if (!refresh && (this.options.size === false || Object.keys(this.sizeInfo).length)) return;\n var newElement = elementTemplates.div.cloneNode(false),\n menu = elementTemplates.div.cloneNode(false),\n menuInner = elementTemplates.div.cloneNode(false),\n menuInnerInner = document.createElement('ul'),\n divider = elementTemplates.li.cloneNode(false),\n dropdownHeader = elementTemplates.li.cloneNode(false),\n li,\n a = elementTemplates.a.cloneNode(false),\n text = elementTemplates.span.cloneNode(false),\n header = this.options.header && this.$menu.find('.' + classNames.POPOVERHEADER).length > 0 ? this.$menu.find('.' + classNames.POPOVERHEADER)[0].cloneNode(true) : null,\n search = this.options.liveSearch ? elementTemplates.div.cloneNode(false) : null,\n actions = this.options.actionsBox && this.multiple && this.$menu.find('.bs-actionsbox').length > 0 ? this.$menu.find('.bs-actionsbox')[0].cloneNode(true) : null,\n doneButton = this.options.doneButton && this.multiple && this.$menu.find('.bs-donebutton').length > 0 ? this.$menu.find('.bs-donebutton')[0].cloneNode(true) : null,\n firstOption = this.$element.find('option')[0];\n this.sizeInfo.selectWidth = this.$newElement[0].offsetWidth;\n text.className = 'text';\n a.className = 'dropdown-item ' + (firstOption ? firstOption.className : '');\n newElement.className = this.$menu[0].parentNode.className + ' ' + classNames.SHOW;\n newElement.style.width = 0; // ensure button width doesn't affect natural width of menu when calculating\n\n if (this.options.width === 'auto') menu.style.minWidth = 0;\n menu.className = classNames.MENU + ' ' + classNames.SHOW;\n menuInner.className = 'inner ' + classNames.SHOW;\n menuInnerInner.className = classNames.MENU + ' inner ' + (version.major === '4' ? classNames.SHOW : '');\n divider.className = classNames.DIVIDER;\n dropdownHeader.className = 'dropdown-header';\n text.appendChild(document.createTextNode(\"\\u200B\"));\n\n if (this.selectpicker.current.data.length) {\n for (var i = 0; i < this.selectpicker.current.data.length; i++) {\n var data = this.selectpicker.current.data[i];\n\n if (data.type === 'option') {\n li = data.element;\n break;\n }\n }\n } else {\n li = elementTemplates.li.cloneNode(false);\n a.appendChild(text);\n li.appendChild(a);\n }\n\n dropdownHeader.appendChild(text.cloneNode(true));\n\n if (this.selectpicker.view.widestOption) {\n menuInnerInner.appendChild(this.selectpicker.view.widestOption.cloneNode(true));\n }\n\n menuInnerInner.appendChild(li);\n menuInnerInner.appendChild(divider);\n menuInnerInner.appendChild(dropdownHeader);\n if (header) menu.appendChild(header);\n\n if (search) {\n var input = document.createElement('input');\n search.className = 'bs-searchbox';\n input.className = 'form-control';\n search.appendChild(input);\n menu.appendChild(search);\n }\n\n if (actions) menu.appendChild(actions);\n menuInner.appendChild(menuInnerInner);\n menu.appendChild(menuInner);\n if (doneButton) menu.appendChild(doneButton);\n newElement.appendChild(menu);\n document.body.appendChild(newElement);\n var liHeight = li.offsetHeight,\n dropdownHeaderHeight = dropdownHeader ? dropdownHeader.offsetHeight : 0,\n headerHeight = header ? header.offsetHeight : 0,\n searchHeight = search ? search.offsetHeight : 0,\n actionsHeight = actions ? actions.offsetHeight : 0,\n doneButtonHeight = doneButton ? doneButton.offsetHeight : 0,\n dividerHeight = $(divider).outerHeight(true),\n // fall back to jQuery if getComputedStyle is not supported\n menuStyle = window.getComputedStyle ? window.getComputedStyle(menu) : false,\n menuWidth = menu.offsetWidth,\n $menu = menuStyle ? null : $(menu),\n menuPadding = {\n vert: toInteger(menuStyle ? menuStyle.paddingTop : $menu.css('paddingTop')) + toInteger(menuStyle ? menuStyle.paddingBottom : $menu.css('paddingBottom')) + toInteger(menuStyle ? menuStyle.borderTopWidth : $menu.css('borderTopWidth')) + toInteger(menuStyle ? menuStyle.borderBottomWidth : $menu.css('borderBottomWidth')),\n horiz: toInteger(menuStyle ? menuStyle.paddingLeft : $menu.css('paddingLeft')) + toInteger(menuStyle ? menuStyle.paddingRight : $menu.css('paddingRight')) + toInteger(menuStyle ? menuStyle.borderLeftWidth : $menu.css('borderLeftWidth')) + toInteger(menuStyle ? menuStyle.borderRightWidth : $menu.css('borderRightWidth'))\n },\n menuExtras = {\n vert: menuPadding.vert + toInteger(menuStyle ? menuStyle.marginTop : $menu.css('marginTop')) + toInteger(menuStyle ? menuStyle.marginBottom : $menu.css('marginBottom')) + 2,\n horiz: menuPadding.horiz + toInteger(menuStyle ? menuStyle.marginLeft : $menu.css('marginLeft')) + toInteger(menuStyle ? menuStyle.marginRight : $menu.css('marginRight')) + 2\n },\n scrollBarWidth;\n menuInner.style.overflowY = 'scroll';\n scrollBarWidth = menu.offsetWidth - menuWidth;\n document.body.removeChild(newElement);\n this.sizeInfo.liHeight = liHeight;\n this.sizeInfo.dropdownHeaderHeight = dropdownHeaderHeight;\n this.sizeInfo.headerHeight = headerHeight;\n this.sizeInfo.searchHeight = searchHeight;\n this.sizeInfo.actionsHeight = actionsHeight;\n this.sizeInfo.doneButtonHeight = doneButtonHeight;\n this.sizeInfo.dividerHeight = dividerHeight;\n this.sizeInfo.menuPadding = menuPadding;\n this.sizeInfo.menuExtras = menuExtras;\n this.sizeInfo.menuWidth = menuWidth;\n this.sizeInfo.menuInnerInnerWidth = menuWidth - menuPadding.horiz;\n this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth;\n this.sizeInfo.scrollBarWidth = scrollBarWidth;\n this.sizeInfo.selectHeight = this.$newElement[0].offsetHeight;\n this.setPositionData();\n },\n getSelectPosition: function getSelectPosition() {\n var that = this,\n $window = $(window),\n pos = that.$newElement.offset(),\n $container = $(that.options.container),\n containerPos;\n\n if (that.options.container && $container.length && !$container.is('body')) {\n containerPos = $container.offset();\n containerPos.top += parseInt($container.css('borderTopWidth'));\n containerPos.left += parseInt($container.css('borderLeftWidth'));\n } else {\n containerPos = {\n top: 0,\n left: 0\n };\n }\n\n var winPad = that.options.windowPadding;\n this.sizeInfo.selectOffsetTop = pos.top - containerPos.top - $window.scrollTop();\n this.sizeInfo.selectOffsetBot = $window.height() - this.sizeInfo.selectOffsetTop - this.sizeInfo.selectHeight - containerPos.top - winPad[2];\n this.sizeInfo.selectOffsetLeft = pos.left - containerPos.left - $window.scrollLeft();\n this.sizeInfo.selectOffsetRight = $window.width() - this.sizeInfo.selectOffsetLeft - this.sizeInfo.selectWidth - containerPos.left - winPad[1];\n this.sizeInfo.selectOffsetTop -= winPad[0];\n this.sizeInfo.selectOffsetLeft -= winPad[3];\n },\n setMenuSize: function setMenuSize(isAuto) {\n this.getSelectPosition();\n\n var selectWidth = this.sizeInfo.selectWidth,\n liHeight = this.sizeInfo.liHeight,\n headerHeight = this.sizeInfo.headerHeight,\n searchHeight = this.sizeInfo.searchHeight,\n actionsHeight = this.sizeInfo.actionsHeight,\n doneButtonHeight = this.sizeInfo.doneButtonHeight,\n divHeight = this.sizeInfo.dividerHeight,\n menuPadding = this.sizeInfo.menuPadding,\n menuInnerHeight,\n menuHeight,\n divLength = 0,\n minHeight,\n _minHeight,\n maxHeight,\n menuInnerMinHeight,\n estimate,\n isDropup;\n\n if (this.options.dropupAuto) {\n // Get the estimated height of the menu without scrollbars.\n // This is useful for smaller menus, where there might be plenty of room\n // below the button without setting dropup, but we can't know\n // the exact height of the menu until createView is called later\n estimate = liHeight * this.selectpicker.current.elements.length + menuPadding.vert;\n isDropup = this.sizeInfo.selectOffsetTop - this.sizeInfo.selectOffsetBot > this.sizeInfo.menuExtras.vert && estimate + this.sizeInfo.menuExtras.vert + 50 > this.sizeInfo.selectOffsetBot; // ensure dropup doesn't change while searching (so menu doesn't bounce back and forth)\n\n if (this.selectpicker.isSearching === true) {\n isDropup = this.selectpicker.dropup;\n }\n\n this.$newElement.toggleClass(classNames.DROPUP, isDropup);\n this.selectpicker.dropup = isDropup;\n }\n\n if (this.options.size === 'auto') {\n _minHeight = this.selectpicker.current.elements.length > 3 ? this.sizeInfo.liHeight * 3 + this.sizeInfo.menuExtras.vert - 2 : 0;\n menuHeight = this.sizeInfo.selectOffsetBot - this.sizeInfo.menuExtras.vert;\n minHeight = _minHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n menuInnerMinHeight = Math.max(_minHeight - menuPadding.vert, 0);\n\n if (this.$newElement.hasClass(classNames.DROPUP)) {\n menuHeight = this.sizeInfo.selectOffsetTop - this.sizeInfo.menuExtras.vert;\n }\n\n maxHeight = menuHeight;\n menuInnerHeight = menuHeight - headerHeight - searchHeight - actionsHeight - doneButtonHeight - menuPadding.vert;\n } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n for (var i = 0; i < this.options.size; i++) {\n if (this.selectpicker.current.data[i].type === 'divider') divLength++;\n }\n\n menuHeight = liHeight * this.options.size + divLength * divHeight + menuPadding.vert;\n menuInnerHeight = menuHeight - menuPadding.vert;\n maxHeight = menuHeight + headerHeight + searchHeight + actionsHeight + doneButtonHeight;\n minHeight = menuInnerMinHeight = '';\n }\n\n this.$menu.css({\n 'max-height': maxHeight + 'px',\n 'overflow': 'hidden',\n 'min-height': minHeight + 'px'\n });\n this.$menuInner.css({\n 'max-height': menuInnerHeight + 'px',\n 'overflow-y': 'auto',\n 'min-height': menuInnerMinHeight + 'px'\n }); // ensure menuInnerHeight is always a positive number to prevent issues calculating chunkSize in createView\n\n this.sizeInfo.menuInnerHeight = Math.max(menuInnerHeight, 1);\n\n if (this.selectpicker.current.data.length && this.selectpicker.current.data[this.selectpicker.current.data.length - 1].position > this.sizeInfo.menuInnerHeight) {\n this.sizeInfo.hasScrollBar = true;\n this.sizeInfo.totalMenuWidth = this.sizeInfo.menuWidth + this.sizeInfo.scrollBarWidth;\n }\n\n if (this.options.dropdownAlignRight === 'auto') {\n this.$menu.toggleClass(classNames.MENURIGHT, this.sizeInfo.selectOffsetLeft > this.sizeInfo.selectOffsetRight && this.sizeInfo.selectOffsetRight < this.sizeInfo.totalMenuWidth - selectWidth);\n }\n\n if (this.dropdown && this.dropdown._popper) this.dropdown._popper.update();\n },\n setSize: function setSize(refresh) {\n this.liHeight(refresh);\n if (this.options.header) this.$menu.css('padding-top', 0);\n\n if (this.options.size !== false) {\n var that = this,\n $window = $(window);\n this.setMenuSize();\n\n if (this.options.liveSearch) {\n this.$searchbox.off('input.setMenuSize propertychange.setMenuSize').on('input.setMenuSize propertychange.setMenuSize', function () {\n return that.setMenuSize();\n });\n }\n\n if (this.options.size === 'auto') {\n $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize').on('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize', function () {\n return that.setMenuSize();\n });\n } else if (this.options.size && this.options.size != 'auto' && this.selectpicker.current.elements.length > this.options.size) {\n $window.off('resize' + EVENT_KEY + '.' + this.selectId + '.setMenuSize' + ' scroll' + EVENT_KEY + '.' + this.selectId + '.setMenuSize');\n }\n }\n\n this.createView(false, true, refresh);\n },\n setWidth: function setWidth() {\n var that = this;\n\n if (this.options.width === 'auto') {\n requestAnimationFrame(function () {\n that.$menu.css('min-width', '0');\n that.$element.on('loaded' + EVENT_KEY, function () {\n that.liHeight();\n that.setMenuSize(); // Get correct width if element is hidden\n\n var $selectClone = that.$newElement.clone().appendTo('body'),\n btnWidth = $selectClone.css('width', 'auto').children('button').outerWidth();\n $selectClone.remove(); // Set width to whatever's larger, button title or longest option\n\n that.sizeInfo.selectWidth = Math.max(that.sizeInfo.totalMenuWidth, btnWidth);\n that.$newElement.css('width', that.sizeInfo.selectWidth + 'px');\n });\n });\n } else if (this.options.width === 'fit') {\n // Remove inline min-width so width can be changed from 'auto'\n this.$menu.css('min-width', '');\n this.$newElement.css('width', '').addClass('fit-width');\n } else if (this.options.width) {\n // Remove inline min-width so width can be changed from 'auto'\n this.$menu.css('min-width', '');\n this.$newElement.css('width', this.options.width);\n } else {\n // Remove inline min-width/width so width can be changed\n this.$menu.css('min-width', '');\n this.$newElement.css('width', '');\n } // Remove fit-width class if width is changed programmatically\n\n\n if (this.$newElement.hasClass('fit-width') && this.options.width !== 'fit') {\n this.$newElement[0].classList.remove('fit-width');\n }\n },\n selectPosition: function selectPosition() {\n this.$bsContainer = $('<div class=\"bs-container\" />');\n\n var that = this,\n $container = $(this.options.container),\n pos,\n containerPos,\n actualHeight,\n getPlacement = function getPlacement($element) {\n var containerPosition = {},\n // fall back to dropdown's default display setting if display is not manually set\n display = that.options.display || ( // Bootstrap 3 doesn't have $.fn.dropdown.Constructor.Default\n $.fn.dropdown.Constructor.Default ? $.fn.dropdown.Constructor.Default.display : false);\n that.$bsContainer.addClass($element.attr('class').replace(/form-control|fit-width/gi, '')).toggleClass(classNames.DROPUP, $element.hasClass(classNames.DROPUP));\n pos = $element.offset();\n\n if (!$container.is('body')) {\n containerPos = $container.offset();\n containerPos.top += parseInt($container.css('borderTopWidth')) - $container.scrollTop();\n containerPos.left += parseInt($container.css('borderLeftWidth')) - $container.scrollLeft();\n } else {\n containerPos = {\n top: 0,\n left: 0\n };\n }\n\n actualHeight = $element.hasClass(classNames.DROPUP) ? 0 : $element[0].offsetHeight; // Bootstrap 4+ uses Popper for menu positioning\n\n if (version.major < 4 || display === 'static') {\n containerPosition.top = pos.top - containerPos.top + actualHeight;\n containerPosition.left = pos.left - containerPos.left;\n }\n\n containerPosition.width = $element[0].offsetWidth;\n that.$bsContainer.css(containerPosition);\n };\n\n this.$button.on('click.bs.dropdown.data-api', function () {\n if (that.isDisabled()) {\n return;\n }\n\n getPlacement(that.$newElement);\n that.$bsContainer.appendTo(that.options.container).toggleClass(classNames.SHOW, !that.$button.hasClass(classNames.SHOW)).append(that.$menu);\n });\n $(window).off('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId).on('resize' + EVENT_KEY + '.' + this.selectId + ' scroll' + EVENT_KEY + '.' + this.selectId, function () {\n var isActive = that.$newElement.hasClass(classNames.SHOW);\n if (isActive) getPlacement(that.$newElement);\n });\n this.$element.on('hide' + EVENT_KEY, function () {\n that.$menu.data('height', that.$menu.height());\n that.$bsContainer.detach();\n });\n },\n setOptionStatus: function setOptionStatus(selectedOnly) {\n var that = this;\n that.noScroll = false;\n\n if (that.selectpicker.view.visibleElements && that.selectpicker.view.visibleElements.length) {\n for (var i = 0; i < that.selectpicker.view.visibleElements.length; i++) {\n var liData = that.selectpicker.current.data[i + that.selectpicker.view.position0],\n option = liData.option;\n\n if (option) {\n if (selectedOnly !== true) {\n that.setDisabled(liData.index, liData.disabled);\n }\n\n that.setSelected(liData.index, option.selected);\n }\n }\n }\n },\n\n /**\r\n * @param {number} index - the index of the option that is being changed\r\n * @param {boolean} selected - true if the option is being selected, false if being deselected\r\n */\n setSelected: function setSelected(index, selected) {\n var li = this.selectpicker.main.elements[index],\n liData = this.selectpicker.main.data[index],\n activeIndexIsSet = this.activeIndex !== undefined,\n thisIsActive = this.activeIndex === index,\n prevActive,\n a,\n // if current option is already active\n // OR\n // if the current option is being selected, it's NOT multiple, and\n // activeIndex is undefined:\n // - when the menu is first being opened, OR\n // - after a search has been performed, OR\n // - when retainActive is false when selecting a new option (i.e. index of the newly selected option is not the same as the current activeIndex)\n keepActive = thisIsActive || selected && !this.multiple && !activeIndexIsSet;\n liData.selected = selected;\n a = li.firstChild;\n\n if (selected) {\n this.selectedIndex = index;\n }\n\n li.classList.toggle('selected', selected);\n\n if (keepActive) {\n this.focusItem(li, liData);\n this.selectpicker.view.currentActive = li;\n this.activeIndex = index;\n } else {\n this.defocusItem(li);\n }\n\n if (a) {\n a.classList.toggle('selected', selected);\n\n if (selected) {\n a.setAttribute('aria-selected', true);\n } else {\n if (this.multiple) {\n a.setAttribute('aria-selected', false);\n } else {\n a.removeAttribute('aria-selected');\n }\n }\n }\n\n if (!keepActive && !activeIndexIsSet && selected && this.prevActiveIndex !== undefined) {\n prevActive = this.selectpicker.main.elements[this.prevActiveIndex];\n this.defocusItem(prevActive);\n }\n },\n\n /**\r\n * @param {number} index - the index of the option that is being disabled\r\n * @param {boolean} disabled - true if the option is being disabled, false if being enabled\r\n */\n setDisabled: function setDisabled(index, disabled) {\n var li = this.selectpicker.main.elements[index],\n a;\n this.selectpicker.main.data[index].disabled = disabled;\n a = li.firstChild;\n li.classList.toggle(classNames.DISABLED, disabled);\n\n if (a) {\n if (version.major === '4') a.classList.toggle(classNames.DISABLED, disabled);\n\n if (disabled) {\n a.setAttribute('aria-disabled', disabled);\n a.setAttribute('tabindex', -1);\n } else {\n a.removeAttribute('aria-disabled');\n a.setAttribute('tabindex', 0);\n }\n }\n },\n isDisabled: function isDisabled() {\n return this.$element[0].disabled;\n },\n checkDisabled: function checkDisabled() {\n if (this.isDisabled()) {\n this.$newElement[0].classList.add(classNames.DISABLED);\n this.$button.addClass(classNames.DISABLED).attr('aria-disabled', true);\n } else {\n if (this.$button[0].classList.contains(classNames.DISABLED)) {\n this.$newElement[0].classList.remove(classNames.DISABLED);\n this.$button.removeClass(classNames.DISABLED).attr('aria-disabled', false);\n }\n }\n },\n clickListener: function clickListener() {\n var that = this,\n $document = $(document);\n $document.data('spaceSelect', false);\n this.$button.on('keyup', function (e) {\n if (/(32)/.test(e.keyCode.toString(10)) && $document.data('spaceSelect')) {\n e.preventDefault();\n $document.data('spaceSelect', false);\n }\n });\n this.$newElement.on('show.bs.dropdown', function () {\n if (version.major > 3 && !that.dropdown) {\n that.dropdown = that.$button.data('bs.dropdown');\n that.dropdown._menu = that.$menu[0];\n }\n });\n this.$button.on('click.bs.dropdown.data-api', function () {\n if (!that.$newElement.hasClass(classNames.SHOW)) {\n that.setSize();\n }\n });\n\n function setFocus() {\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n that.$menuInner.trigger('focus');\n }\n }\n\n function checkPopperExists() {\n if (that.dropdown && that.dropdown._popper && that.dropdown._popper.state.isCreated) {\n setFocus();\n } else {\n requestAnimationFrame(checkPopperExists);\n }\n }\n\n this.$element.on('shown' + EVENT_KEY, function () {\n if (that.$menuInner[0].scrollTop !== that.selectpicker.view.scrollTop) {\n that.$menuInner[0].scrollTop = that.selectpicker.view.scrollTop;\n }\n\n if (version.major > 3) {\n requestAnimationFrame(checkPopperExists);\n } else {\n setFocus();\n }\n }); // ensure posinset and setsize are correct before selecting an option via a click\n\n this.$menuInner.on('mouseenter', 'li a', function (e) {\n var hoverLi = this.parentElement,\n position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n index = Array.prototype.indexOf.call(hoverLi.parentElement.children, hoverLi),\n hoverData = that.selectpicker.current.data[index + position0];\n that.focusItem(hoverLi, hoverData, true);\n });\n this.$menuInner.on('click', 'li a', function (e, retainActive) {\n var $this = $(this),\n element = that.$element[0],\n position0 = that.isVirtual() ? that.selectpicker.view.position0 : 0,\n clickedData = that.selectpicker.current.data[$this.parent().index() + position0],\n clickedIndex = clickedData.index,\n prevValue = getSelectValues(element),\n prevIndex = element.selectedIndex,\n prevOption = element.options[prevIndex],\n triggerChange = true; // Don't close on multi choice menu\n\n if (that.multiple && that.options.maxOptions !== 1) {\n e.stopPropagation();\n }\n\n e.preventDefault(); // Don't run if the select is disabled\n\n if (!that.isDisabled() && !$this.parent().hasClass(classNames.DISABLED)) {\n var option = clickedData.option,\n $option = $(option),\n state = option.selected,\n $optgroup = $option.parent('optgroup'),\n $optgroupOptions = $optgroup.find('option'),\n maxOptions = that.options.maxOptions,\n maxOptionsGrp = $optgroup.data('maxOptions') || false;\n if (clickedIndex === that.activeIndex) retainActive = true;\n\n if (!retainActive) {\n that.prevActiveIndex = that.activeIndex;\n that.activeIndex = undefined;\n }\n\n if (!that.multiple) {\n // Deselect all others if not multi select box\n if (prevOption) prevOption.selected = false;\n option.selected = true;\n that.setSelected(clickedIndex, true);\n } else {\n // Toggle the one we have chosen if we are multi select.\n option.selected = !state;\n that.setSelected(clickedIndex, !state);\n $this.trigger('blur');\n\n if (maxOptions !== false || maxOptionsGrp !== false) {\n var maxReached = maxOptions < getSelectedOptions(element).length,\n maxReachedGrp = maxOptionsGrp < $optgroup.find('option:selected').length;\n\n if (maxOptions && maxReached || maxOptionsGrp && maxReachedGrp) {\n if (maxOptions && maxOptions == 1) {\n element.selectedIndex = -1;\n option.selected = true;\n that.setOptionStatus(true);\n } else if (maxOptionsGrp && maxOptionsGrp == 1) {\n for (var i = 0; i < $optgroupOptions.length; i++) {\n var _option = $optgroupOptions[i];\n _option.selected = false;\n that.setSelected(_option.liIndex, false);\n }\n\n option.selected = true;\n that.setSelected(clickedIndex, true);\n } else {\n var maxOptionsText = typeof that.options.maxOptionsText === 'string' ? [that.options.maxOptionsText, that.options.maxOptionsText] : that.options.maxOptionsText,\n maxOptionsArr = typeof maxOptionsText === 'function' ? maxOptionsText(maxOptions, maxOptionsGrp) : maxOptionsText,\n maxTxt = maxOptionsArr[0].replace('{n}', maxOptions),\n maxTxtGrp = maxOptionsArr[1].replace('{n}', maxOptionsGrp),\n $notify = $('<div class=\"notify\"></div>'); // If {var} is set in array, replace it\n\n /** @deprecated */\n\n if (maxOptionsArr[2]) {\n maxTxt = maxTxt.replace('{var}', maxOptionsArr[2][maxOptions > 1 ? 0 : 1]);\n maxTxtGrp = maxTxtGrp.replace('{var}', maxOptionsArr[2][maxOptionsGrp > 1 ? 0 : 1]);\n }\n\n option.selected = false;\n that.$menu.append($notify);\n\n if (maxOptions && maxReached) {\n $notify.append($('<div>' + maxTxt + '</div>'));\n triggerChange = false;\n that.$element.trigger('maxReached' + EVENT_KEY);\n }\n\n if (maxOptionsGrp && maxReachedGrp) {\n $notify.append($('<div>' + maxTxtGrp + '</div>'));\n triggerChange = false;\n that.$element.trigger('maxReachedGrp' + EVENT_KEY);\n }\n\n setTimeout(function () {\n that.setSelected(clickedIndex, false);\n }, 10);\n $notify[0].classList.add('fadeOut');\n setTimeout(function () {\n $notify.remove();\n }, 1050);\n }\n }\n }\n }\n\n if (!that.multiple || that.multiple && that.options.maxOptions === 1) {\n that.$button.trigger('focus');\n } else if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } // Trigger select 'change'\n\n\n if (triggerChange) {\n if (that.multiple || prevIndex !== element.selectedIndex) {\n // $option.prop('selected') is current option state (selected/unselected). prevValue is the value of the select prior to being changed.\n changedArguments = [option.index, $option.prop('selected'), prevValue];\n that.$element.triggerNative('change');\n }\n }\n }\n });\n this.$menu.on('click', 'li.' + classNames.DISABLED + ' a, .' + classNames.POPOVERHEADER + ', .' + classNames.POPOVERHEADER + ' :not(.close)', function (e) {\n if (e.currentTarget == this) {\n e.preventDefault();\n e.stopPropagation();\n\n if (that.options.liveSearch && !$(e.target).hasClass('close')) {\n that.$searchbox.trigger('focus');\n } else {\n that.$button.trigger('focus');\n }\n }\n });\n this.$menuInner.on('click', '.divider, .dropdown-header', function (e) {\n e.preventDefault();\n e.stopPropagation();\n\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n that.$button.trigger('focus');\n }\n });\n this.$menu.on('click', '.' + classNames.POPOVERHEADER + ' .close', function () {\n that.$button.trigger('click');\n });\n this.$searchbox.on('click', function (e) {\n e.stopPropagation();\n });\n this.$menu.on('click', '.actions-btn', function (e) {\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n that.$button.trigger('focus');\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n if ($(this).hasClass('bs-select-all')) {\n that.selectAll();\n } else {\n that.deselectAll();\n }\n });\n this.$button.on('focus' + EVENT_KEY, function (e) {\n var tabindex = that.$element[0].getAttribute('tabindex'); // only change when button is actually focused\n\n if (tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n // apply select element's tabindex to ensure correct order is followed when tabbing to the next element\n this.setAttribute('tabindex', tabindex); // set element's tabindex to -1 to allow for reverse tabbing\n\n that.$element[0].setAttribute('tabindex', -1);\n that.selectpicker.view.tabindex = tabindex;\n }\n }).on('blur' + EVENT_KEY, function (e) {\n // revert everything to original tabindex\n if (that.selectpicker.view.tabindex !== undefined && e.originalEvent && e.originalEvent.isTrusted) {\n that.$element[0].setAttribute('tabindex', that.selectpicker.view.tabindex);\n this.setAttribute('tabindex', -1);\n that.selectpicker.view.tabindex = undefined;\n }\n });\n this.$element.on('change' + EVENT_KEY, function () {\n that.render();\n that.$element.trigger('changed' + EVENT_KEY, changedArguments);\n changedArguments = null;\n }).on('focus' + EVENT_KEY, function () {\n if (!that.options.mobile) that.$button.trigger('focus');\n });\n },\n liveSearchListener: function liveSearchListener() {\n var that = this;\n this.$button.on('click.bs.dropdown.data-api', function () {\n if (!!that.$searchbox.val()) {\n that.$searchbox.val('');\n }\n });\n this.$searchbox.on('click.bs.dropdown.data-api focus.bs.dropdown.data-api touchend.bs.dropdown.data-api', function (e) {\n e.stopPropagation();\n });\n this.$searchbox.on('input propertychange', function () {\n var searchValue = that.$searchbox.val();\n that.selectpicker.search.elements = [];\n that.selectpicker.search.data = [];\n\n if (searchValue) {\n var i,\n searchMatch = [],\n q = searchValue.toUpperCase(),\n cache = {},\n cacheArr = [],\n searchStyle = that._searchStyle(),\n normalizeSearch = that.options.liveSearchNormalize;\n\n if (normalizeSearch) q = normalizeToBase(q);\n\n for (var i = 0; i < that.selectpicker.main.data.length; i++) {\n var li = that.selectpicker.main.data[i];\n\n if (!cache[i]) {\n cache[i] = stringSearch(li, q, searchStyle, normalizeSearch);\n }\n\n if (cache[i] && li.headerIndex !== undefined && cacheArr.indexOf(li.headerIndex) === -1) {\n if (li.headerIndex > 0) {\n cache[li.headerIndex - 1] = true;\n cacheArr.push(li.headerIndex - 1);\n }\n\n cache[li.headerIndex] = true;\n cacheArr.push(li.headerIndex);\n cache[li.lastIndex + 1] = true;\n }\n\n if (cache[i] && li.type !== 'optgroup-label') cacheArr.push(i);\n }\n\n for (var i = 0, cacheLen = cacheArr.length; i < cacheLen; i++) {\n var index = cacheArr[i],\n prevIndex = cacheArr[i - 1],\n li = that.selectpicker.main.data[index],\n liPrev = that.selectpicker.main.data[prevIndex];\n\n if (li.type !== 'divider' || li.type === 'divider' && liPrev && liPrev.type !== 'divider' && cacheLen - 1 !== i) {\n that.selectpicker.search.data.push(li);\n searchMatch.push(that.selectpicker.main.elements[index]);\n }\n }\n\n that.activeIndex = undefined;\n that.noScroll = true;\n that.$menuInner.scrollTop(0);\n that.selectpicker.search.elements = searchMatch;\n that.createView(true);\n showNoResults.call(that, searchMatch, searchValue);\n } else {\n that.$menuInner.scrollTop(0);\n that.createView(false);\n }\n });\n },\n _searchStyle: function _searchStyle() {\n return this.options.liveSearchStyle || 'contains';\n },\n val: function val(value) {\n var element = this.$element[0];\n\n if (typeof value !== 'undefined') {\n var prevValue = getSelectValues(element);\n changedArguments = [null, null, prevValue];\n this.$element.val(value).trigger('changed' + EVENT_KEY, changedArguments);\n\n if (this.$newElement.hasClass(classNames.SHOW)) {\n if (this.multiple) {\n this.setOptionStatus(true);\n } else {\n var liSelectedIndex = (element.options[element.selectedIndex] || {}).liIndex;\n\n if (typeof liSelectedIndex === 'number') {\n this.setSelected(this.selectedIndex, false);\n this.setSelected(liSelectedIndex, true);\n }\n }\n }\n\n this.render();\n changedArguments = null;\n return this.$element;\n } else {\n return this.$element.val();\n }\n },\n changeAll: function changeAll(status) {\n if (!this.multiple) return;\n if (typeof status === 'undefined') status = true;\n var element = this.$element[0],\n previousSelected = 0,\n currentSelected = 0,\n prevValue = getSelectValues(element);\n element.classList.add('bs-select-hidden');\n\n for (var i = 0, data = this.selectpicker.current.data, len = data.length; i < len; i++) {\n var liData = data[i],\n option = liData.option;\n\n if (option && !liData.disabled && liData.type !== 'divider') {\n if (liData.selected) previousSelected++;\n option.selected = status;\n if (status === true) currentSelected++;\n }\n }\n\n element.classList.remove('bs-select-hidden');\n if (previousSelected === currentSelected) return;\n this.setOptionStatus();\n changedArguments = [null, null, prevValue];\n this.$element.triggerNative('change');\n },\n selectAll: function selectAll() {\n return this.changeAll(true);\n },\n deselectAll: function deselectAll() {\n return this.changeAll(false);\n },\n toggle: function toggle(e) {\n e = e || window.event;\n if (e) e.stopPropagation();\n this.$button.trigger('click.bs.dropdown.data-api');\n },\n keydown: function keydown(e) {\n var $this = $(this),\n isToggle = $this.hasClass('dropdown-toggle'),\n $parent = isToggle ? $this.closest('.dropdown') : $this.closest(Selector.MENU),\n that = $parent.data('this'),\n $items = that.findLis(),\n index,\n isActive,\n liActive,\n activeLi,\n offset,\n updateScroll = false,\n downOnTab = e.which === keyCodes.TAB && !isToggle && !that.options.selectOnTab,\n isArrowKey = REGEXP_ARROW.test(e.which) || downOnTab,\n scrollTop = that.$menuInner[0].scrollTop,\n isVirtual = that.isVirtual(),\n position0 = isVirtual === true ? that.selectpicker.view.position0 : 0; // do nothing if a function key is pressed\n\n if (e.which >= 112 && e.which <= 123) return;\n isActive = that.$newElement.hasClass(classNames.SHOW);\n\n if (!isActive && (isArrowKey || e.which >= 48 && e.which <= 57 || e.which >= 96 && e.which <= 105 || e.which >= 65 && e.which <= 90)) {\n that.$button.trigger('click.bs.dropdown.data-api');\n\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n return;\n }\n }\n\n if (e.which === keyCodes.ESCAPE && isActive) {\n e.preventDefault();\n that.$button.trigger('click.bs.dropdown.data-api').trigger('focus');\n }\n\n if (isArrowKey) {\n // if up or down\n if (!$items.length) return;\n liActive = that.selectpicker.main.elements[that.activeIndex];\n index = liActive ? Array.prototype.indexOf.call(liActive.parentElement.children, liActive) : -1;\n\n if (index !== -1) {\n that.defocusItem(liActive);\n }\n\n if (e.which === keyCodes.ARROW_UP) {\n // up\n if (index !== -1) index--;\n if (index + position0 < 0) index += $items.length;\n\n if (!that.selectpicker.view.canHighlight[index + position0]) {\n index = that.selectpicker.view.canHighlight.slice(0, index + position0).lastIndexOf(true) - position0;\n if (index === -1) index = $items.length - 1;\n }\n } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n // down\n index++;\n if (index + position0 >= that.selectpicker.view.canHighlight.length) index = 0;\n\n if (!that.selectpicker.view.canHighlight[index + position0]) {\n index = index + 1 + that.selectpicker.view.canHighlight.slice(index + position0 + 1).indexOf(true);\n }\n }\n\n e.preventDefault();\n var liActiveIndex = position0 + index;\n\n if (e.which === keyCodes.ARROW_UP) {\n // up\n // scroll to bottom and highlight last option\n if (position0 === 0 && index === $items.length - 1) {\n that.$menuInner[0].scrollTop = that.$menuInner[0].scrollHeight;\n liActiveIndex = that.selectpicker.current.elements.length - 1;\n } else {\n activeLi = that.selectpicker.current.data[liActiveIndex];\n offset = activeLi.position - activeLi.height;\n updateScroll = offset < scrollTop;\n }\n } else if (e.which === keyCodes.ARROW_DOWN || downOnTab) {\n // down\n // scroll to top and highlight first option\n if (index === 0) {\n that.$menuInner[0].scrollTop = 0;\n liActiveIndex = 0;\n } else {\n activeLi = that.selectpicker.current.data[liActiveIndex];\n offset = activeLi.position - that.sizeInfo.menuInnerHeight;\n updateScroll = offset > scrollTop;\n }\n }\n\n liActive = that.selectpicker.current.elements[liActiveIndex];\n that.activeIndex = that.selectpicker.current.data[liActiveIndex].index;\n that.focusItem(liActive);\n that.selectpicker.view.currentActive = liActive;\n if (updateScroll) that.$menuInner[0].scrollTop = offset;\n\n if (that.options.liveSearch) {\n that.$searchbox.trigger('focus');\n } else {\n $this.trigger('focus');\n }\n } else if (!$this.is('input') && !REGEXP_TAB_OR_ESCAPE.test(e.which) || e.which === keyCodes.SPACE && that.selectpicker.keydown.keyHistory) {\n var searchMatch,\n matches = [],\n keyHistory;\n e.preventDefault();\n that.selectpicker.keydown.keyHistory += keyCodeMap[e.which];\n if (that.selectpicker.keydown.resetKeyHistory.cancel) clearTimeout(that.selectpicker.keydown.resetKeyHistory.cancel);\n that.selectpicker.keydown.resetKeyHistory.cancel = that.selectpicker.keydown.resetKeyHistory.start();\n keyHistory = that.selectpicker.keydown.keyHistory; // if all letters are the same, set keyHistory to just the first character when searching\n\n if (/^(.)\\1+$/.test(keyHistory)) {\n keyHistory = keyHistory.charAt(0);\n } // find matches\n\n\n for (var i = 0; i < that.selectpicker.current.data.length; i++) {\n var li = that.selectpicker.current.data[i],\n hasMatch;\n hasMatch = stringSearch(li, keyHistory, 'startsWith', true);\n\n if (hasMatch && that.selectpicker.view.canHighlight[i]) {\n matches.push(li.index);\n }\n }\n\n if (matches.length) {\n var matchIndex = 0;\n $items.removeClass('active').find('a').removeClass('active'); // either only one key has been pressed or they are all the same key\n\n if (keyHistory.length === 1) {\n matchIndex = matches.indexOf(that.activeIndex);\n\n if (matchIndex === -1 || matchIndex === matches.length - 1) {\n matchIndex = 0;\n } else {\n matchIndex++;\n }\n }\n\n searchMatch = matches[matchIndex];\n activeLi = that.selectpicker.main.data[searchMatch];\n\n if (scrollTop - activeLi.position > 0) {\n offset = activeLi.position - activeLi.height;\n updateScroll = true;\n } else {\n offset = activeLi.position - that.sizeInfo.menuInnerHeight; // if the option is already visible at the current scroll position, just keep it the same\n\n updateScroll = activeLi.position > scrollTop + that.sizeInfo.menuInnerHeight;\n }\n\n liActive = that.selectpicker.main.elements[searchMatch];\n that.activeIndex = matches[matchIndex];\n that.focusItem(liActive);\n if (liActive) liActive.firstChild.focus();\n if (updateScroll) that.$menuInner[0].scrollTop = offset;\n $this.trigger('focus');\n }\n } // Select focused option if \"Enter\", \"Spacebar\" or \"Tab\" (when selectOnTab is true) are pressed inside the menu.\n\n\n if (isActive && (e.which === keyCodes.SPACE && !that.selectpicker.keydown.keyHistory || e.which === keyCodes.ENTER || e.which === keyCodes.TAB && that.options.selectOnTab)) {\n if (e.which !== keyCodes.SPACE) e.preventDefault();\n\n if (!that.options.liveSearch || e.which !== keyCodes.SPACE) {\n that.$menuInner.find('.active a').trigger('click', true); // retain active class\n\n $this.trigger('focus');\n\n if (!that.options.liveSearch) {\n // Prevent screen from scrolling if the user hits the spacebar\n e.preventDefault(); // Fixes spacebar selection of dropdown items in FF & IE\n\n $(document).data('spaceSelect', true);\n }\n }\n }\n },\n mobile: function mobile() {\n // ensure mobile is set to true if mobile function is called after init\n this.options.mobile = true;\n this.$element[0].classList.add('mobile-device');\n },\n refresh: function refresh() {\n // update options if data attributes have been changed\n var config = $.extend({}, this.options, this.$element.data());\n this.options = config;\n this.checkDisabled();\n this.buildData();\n this.setStyle();\n this.render();\n this.buildList();\n this.setWidth();\n this.setSize(true);\n this.$element.trigger('refreshed' + EVENT_KEY);\n },\n hide: function hide() {\n this.$newElement.hide();\n },\n show: function show() {\n this.$newElement.show();\n },\n remove: function remove() {\n this.$newElement.remove();\n this.$element.remove();\n },\n destroy: function destroy() {\n this.$newElement.before(this.$element).remove();\n\n if (this.$bsContainer) {\n this.$bsContainer.remove();\n } else {\n this.$menu.remove();\n }\n\n this.$element.off(EVENT_KEY).removeData('selectpicker').removeClass('bs-select-hidden selectpicker');\n $(window).off(EVENT_KEY + '.' + this.selectId);\n }\n }; // SELECTPICKER PLUGIN DEFINITION\n // ==============================\n\n function Plugin(option) {\n // get the args of the outer function..\n var args = arguments; // The arguments of the function are explicitly re-defined from the argument list, because the shift causes them\n // to get lost/corrupted in android 2.3 and IE9 #715 #775\n\n var _option = option;\n [].shift.apply(args); // if the version was not set successfully\n\n if (!version.success) {\n // try to retreive it again\n try {\n version.full = ($.fn.dropdown.Constructor.VERSION || '').split(' ')[0].split('.');\n } catch (err) {\n // fall back to use BootstrapVersion if set\n if (Selectpicker.BootstrapVersion) {\n version.full = Selectpicker.BootstrapVersion.split(' ')[0].split('.');\n } else {\n version.full = [version.major, '0', '0'];\n console.warn('There was an issue retrieving Bootstrap\\'s version. ' + 'Ensure Bootstrap is being loaded before bootstrap-select and there is no namespace collision. ' + 'If loading Bootstrap asynchronously, the version may need to be manually specified via $.fn.selectpicker.Constructor.BootstrapVersion.', err);\n }\n }\n\n version.major = version.full[0];\n version.success = true;\n }\n\n if (version.major === '4') {\n // some defaults need to be changed if using Bootstrap 4\n // check to see if they have already been manually changed before forcing them to update\n var toUpdate = [];\n if (Selectpicker.DEFAULTS.style === classNames.BUTTONCLASS) toUpdate.push({\n name: 'style',\n className: 'BUTTONCLASS'\n });\n if (Selectpicker.DEFAULTS.iconBase === classNames.ICONBASE) toUpdate.push({\n name: 'iconBase',\n className: 'ICONBASE'\n });\n if (Selectpicker.DEFAULTS.tickIcon === classNames.TICKICON) toUpdate.push({\n name: 'tickIcon',\n className: 'TICKICON'\n });\n classNames.DIVIDER = 'dropdown-divider';\n classNames.SHOW = 'show';\n classNames.BUTTONCLASS = 'btn-light';\n classNames.POPOVERHEADER = 'popover-header';\n classNames.ICONBASE = '';\n classNames.TICKICON = 'bs-ok-default';\n\n for (var i = 0; i < toUpdate.length; i++) {\n var option = toUpdate[i];\n Selectpicker.DEFAULTS[option.name] = classNames[option.className];\n }\n }\n\n var value;\n var chain = this.each(function () {\n var $this = $(this);\n\n if ($this.is('select')) {\n var data = $this.data('selectpicker'),\n options = _typeof(_option) == 'object' && _option;\n\n if (!data) {\n var dataAttributes = $this.data();\n\n for (var dataAttr in dataAttributes) {\n if (Object.prototype.hasOwnProperty.call(dataAttributes, dataAttr) && $.inArray(dataAttr, DISALLOWED_ATTRIBUTES) !== -1) {\n delete dataAttributes[dataAttr];\n }\n }\n\n var config = $.extend({}, Selectpicker.DEFAULTS, $.fn.selectpicker.defaults || {}, dataAttributes, options);\n config.template = $.extend({}, Selectpicker.DEFAULTS.template, $.fn.selectpicker.defaults ? $.fn.selectpicker.defaults.template : {}, dataAttributes.template, options.template);\n $this.data('selectpicker', data = new Selectpicker(this, config));\n } else if (options) {\n for (var i in options) {\n if (Object.prototype.hasOwnProperty.call(options, i)) {\n data.options[i] = options[i];\n }\n }\n }\n\n if (typeof _option == 'string') {\n if (data[_option] instanceof Function) {\n value = data[_option].apply(data, args);\n } else {\n value = data.options[_option];\n }\n }\n }\n });\n\n if (typeof value !== 'undefined') {\n // noinspection JSUnusedAssignment\n return value;\n } else {\n return chain;\n }\n }\n\n var old = $.fn.selectpicker;\n $.fn.selectpicker = Plugin;\n $.fn.selectpicker.Constructor = Selectpicker; // SELECTPICKER NO CONFLICT\n // ========================\n\n $.fn.selectpicker.noConflict = function () {\n $.fn.selectpicker = old;\n return this;\n }; // get Bootstrap's keydown event handler for either Bootstrap 4 or Bootstrap 3\n\n\n function keydownHandler() {\n if ($.fn.dropdown) {\n // wait to define until function is called in case Bootstrap isn't loaded yet\n var bootstrapKeydown = $.fn.dropdown.Constructor._dataApiKeydownHandler || $.fn.dropdown.Constructor.prototype.keydown;\n return bootstrapKeydown.apply(this, arguments);\n }\n }\n\n $(document).off('keydown.bs.dropdown.data-api').on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > [data-toggle=\"dropdown\"]', keydownHandler).on('keydown.bs.dropdown.data-api', ':not(.bootstrap-select) > .dropdown-menu', keydownHandler).on('keydown' + EVENT_KEY, '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', Selectpicker.prototype.keydown).on('focusin.modal', '.bootstrap-select [data-toggle=\"dropdown\"], .bootstrap-select [role=\"listbox\"], .bootstrap-select .bs-searchbox input', function (e) {\n e.stopPropagation();\n }); // SELECTPICKER DATA-API\n // =====================\n\n $(window).on('load' + EVENT_KEY + '.data-api', function () {\n $('.selectpicker').each(function () {\n var $selectpicker = $(this);\n Plugin.call($selectpicker, $selectpicker.data());\n });\n });\n})(jQuery);"],"sourceRoot":""}