{"version":3,"sources":["webpack:////Users/owenli/Documents/workspace/awi-wool-fe/node_modules/@selectize/selectize/dist/js/selectize.js"],"names":["__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","__webpack_require__","undefined","$","highlight","$element","pattern","length","regex","RegExp","node","skip","nodeType","pos","data","search","match","spannode","document","createElement","className","middlebit","splitText","middleclone","cloneNode","appendChild","parentNode","replaceChild","childNodes","test","tagName","i","each","this","fn","removeHighlight","find","firstChild","nodeName","parent","normalize","end","MicroEvent","prototype","on","event","fct","_events","push","off","n","arguments","splice","indexOf","trigger","events","apply","Array","slice","call","mixin","destObject","props","MicroPlugin","Interface","plugins","initializePlugins","key","queue","names","settings","requested","loaded","utils","isArray","name","options","hasOwnProperty","require","shift","loadPlugin","plugin","Error","define","vArg","Object","toString","Sifter","items","diacritics","tokenize","query","respect_word_boundaries","trim","String","toLowerCase","letter","tokens","words","split","escape_regex","DIACRITICS","replace","string","iterator","object","callback","is_array","forEach","getScoreFunction","fields","token_count","nesting","prepareSearch","field_count","scoreValue","value","token","score","scoreObject","getattr","sum","conjunction","getSortFunction","self","field","fields_count","multiplier","multipliers","get_field","implicit_score","sort","sort_empty","result","id","unshift","direction","a","b","cmp","option_fields","extend","option_sort","option_sort_empty","total","fn_sort","fn_score","item","filter","limit","asciifold","k","obj","str","c","d","e","f","g","h","j","l","o","p","q","r","s","t","u","v","w","x","y","z","chunk","foreignletters","lookup","substring","charAt","regexp","foreignletter","uaDetect","platform","re","navigator","userAgentData","userAgent","IS_MAC","KEY_CMD","KEY_CTRL","SUPPORTS_VALIDITY_API","validity","isset","hash_key","escape_html","hook","before","method","original","after","debounce_events","types","type","event_args","getInputSelection","input","start","selectionStart","selectionEnd","selection","focus","sel","createRange","selLen","text","moveStart","measureString","$parent","Selectize","$testInput","css","position","width","padding","whiteSpace","height","overflow","append","appendTo","$from","$to","properties","styles","transferStyles","$input","dir","selectize","delay","timeout","computedStyle","window","getComputedStyle","getPropertyValue","currentStyle","parents","attr","order","tabIndex","tagType","rtl","eventNS","count","highlightedValue","isBlurring","isOpen","isDisabled","isRequired","is","isInvalid","isLocked","isFocused","isInputHidden","isSetup","isShiftDown","isCmdDown","isCtrlDown","ignoreFocus","ignoreBlur","ignoreHover","hasOptions","currentResults","lastValue","lastValidValue","lastOpenTarget","caretPos","loading","loadedSearches","isDropdownClosing","$activeOption","$activeItems","optgroups","userOptions","renderCache","onSearchChange","loadThrottle","args","clearTimeout","setTimeout","sifter","registerOption","registerOptionGroup","mode","maxItems","hideSelected","setupCallbacks","setupTemplates","setup","$wrapper","$control","$control_input","$dropdown","$dropdown_content","$dropdown_parent","inputMode","classes","classes_plugins","inputId","selector","$window","$document","addClass","wrapperClass","inputClass","dropdownParent","dropdownClass","hide","dropdownContentClass","copyClassesToDropdown","style","join","placeholder","splitOn","delimiter","delimiterEscaped","stopImmediatePropagation","onOptionHover","onOptionSelect","onItemSelect","child","target","currentTarget","currentWidth","update","keyCode","printable","placeholderWidth","character","metaKey","altKey","force","val","shiftKey","fromCharCode","toUpperCase","Math","max","triggerHandler","autoGrow","mousedown","onMouseDown","click","onClick","openOnFocus","stopPropagation","keydown","onKeyDown","keypress","onKeyPress","onInput","resize","positionDropdown","onFocus","paste","onPaste","has","blur","inputPlaceholder","inputChildren","children","detach","replaceWith","revertSettings","$children","tabindex","setValue","preventDefault","refreshState","updateOriginalInput","refreshItems","updatePlaceholder","disable","onChange","preload","field_label","labelField","field_value","valueField","field_optgroup","optgroupLabelField","templates","optgroup","html","optgroup_header","escape","option","option_create","render","callbacks","initialize","change","item_add","item_remove","clear","option_add","option_remove","option_clear","optgroup_add","optgroup_remove","optgroup_clear","dropdown_open","dropdown_close","load","dropdown_item_activate","dropdown_item_deactivate","defaultPrevented","isDefaultPrevented","close","open","setActiveItem","refreshOptions","getValue","isFull","pastedText","splitInput","createItem","which","create","selectAll","ctrlKey","$next","getAdjacentOption","setActiveOption","$prev","advanceSelection","selectOnTab","showAddOptionOnCreate","deleteSelection","wasFocused","showInput","onBlur","dest","deactivate","setTextboxValue","setCaret","createOnBlur","$target","hasClass","closeAfterSelect","lastQuery","addItem","getOption","loadingClass","results","addOption","removeClass","getTextboxValue","silent","addItems","setMaxItems","$item","eventName","idx","begin","swap","$last","hideInput","$option","scroll","animate","height_menu","height_item","scroll_top","scroll_bottom","outerHeight","scrollTop","offset","top","stop","scrollDuration","opacity","left","getSearchOptions","sortField","searchField","searchConjunction","calculateScore","triggerDropdown","groups","groups_order","option_html","html_children","has_create_option","$active","$active_before","$create","tmp","active_before","maxOptions","min","optgroupField","regGroup","optionGroupRegister","createDocumentFragment","lockOptgroupOrder","$order","innerHTML","dom","dropdownSize","sizeType","setupDropdownHeight","canCreate","prepend","setFirstOptionActive","addPrecedence","optgroupValueField","addOptionGroup","removeOptionGroup","clearOptionGroups","updateOption","$item_new","value_new","index_item","cache_items","cache_options","order_old","getItem","removeOption","removeItem","clearOptions","getElementWithValue","getFirstOption","$options","eq","index","$els","getAttribute","getElementWithTextContent","textContent","ignoreCase","eleTextContent","getFirstItemMatchedByTextContent","values","buffer","isPending","control","insertBefore","value_next","wasFull","insertAtCaret","remove","persist","caret","lock","called","formatValueToKey","unlock","output","refreshValidityState","refreshClasses","invalid","prop","toggleClass","isEmptyObject","opts","existing","fresh","old","label","get","map","removeAttr","visibility","display","getBoundingClientRect","minWidth","sizeValue","$items","not","ignoreOnDropwdownHeight","totalHeight","marginTop","marginBottom","separatorHeight","Number","borderTopWidth","maxHeight","$el","el","option_select","$option_select","$tail","deselectBehavior","onDelete","pop","tail","valueLength","advanceCaret","$adj","$child","enable","destroy","show","removeData","body","templateName","cache","disabledField","clearCache","createFilter","defaults","allowEmptyOption","showEmptyOptionInDropdown","emptyOptionLabel","closeDropdownThreshold","dataAttr","settings_user","attr_data","field_disabled","field_optgroup_label","field_optgroup_value","init_select","settings_element","optionsMap","readData","allData","JSON","parse","isJSON","assign","group","arr","addGroup","$optgroup","tag_name","input_html","data_raw","init_textbox","support","POSITION","dropdownHeight","innerHeight","outerWidth","styleToAdd","bottom","originalBlur","$matchedItem","autocomplete","autofill","title","$button_clear","sortable","forcePlaceholderSize","disabled","ui","helper","active","headerClass","titleRowClass","labelClass","closeClass","$dropdown_header","equalizeWidth","equalizeHeight","closest","prev","next","getScrollbarWidth","div","doc","offsetWidth","clientWidth","removeChild","equalizeSizes","height_max","width_last","width_parent","$optgroups","innerWidth","round","thisRef","render_item","html_container","html_element","multiClose","originalFocus","select","tagLimit","toArray","exports","module"],"mappings":"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","file":"vendors~block-43.1bd94366870a71a61540.js","sourcesContent":["/**\n * Selectize (v0.15.2)\n * https://selectize.dev\n *\n * Copyright (c) 2013-2015 Brian Reavis & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n * @author Ris Adams <selectize@risadams.com>\n */\n(function (root, factory) {\n if (typeof define === 'function' && define.amd) {\n define(['jquery'], factory);\n } else if (typeof module === 'object' && typeof module.exports === 'object') {\n module.exports = factory(require('jquery'));\n } else {\n root.Selectize = factory(root.jQuery);\n }\n}(this, function ($) {\n 'use strict';\n/**\n * highlight v3 | MIT license | Johann Burkard <jb@eaio.com>\n * Highlights arbitrary terms in a node.\n *\n * - Modified by Marshal <beatgates@gmail.com> 2011-6-24 (added regex)\n * - Modified by Brian Reavis <brian@thirdroute.com> 2012-8-27 (cleanup)\n */\n\nvar highlight = function ($element, pattern) {\n if (typeof pattern === 'string' && !pattern.length) return;\n var regex = (typeof pattern === 'string') ? new RegExp(pattern, 'i') : pattern;\n\n var highlight = function (node) {\n var skip = 0;\n // Wrap matching part of text node with highlighting <span>, e.g.\n // Soccer -> <span class=\"highlight\">Soc</span>cer for regex = /soc/i\n if (node.nodeType === 3) {\n var pos = node.data.search(regex);\n if (pos >= 0 && node.data.length > 0) {\n var match = node.data.match(regex);\n var spannode = document.createElement('span');\n spannode.className = 'highlight';\n var middlebit = node.splitText(pos);\n var endbit = middlebit.splitText(match[0].length);\n var middleclone = middlebit.cloneNode(true);\n spannode.appendChild(middleclone);\n middlebit.parentNode.replaceChild(spannode, middlebit);\n skip = 1;\n }\n }\n // Recurse element node, looking for child text nodes to highlight, unless element\n // is childless, <script>, <style>, or already highlighted: <span class=\"highlight\">\n else if (node.nodeType === 1 && node.childNodes && !/(script|style)/i.test(node.tagName) && (node.className !== 'highlight' || node.tagName !== 'SPAN')) {\n for (var i = 0; i < node.childNodes.length; ++i) {\n i += highlight(node.childNodes[i]);\n }\n }\n return skip;\n };\n\n return $element.each(function () {\n highlight(this);\n });\n};\n\n/**\n * removeHighlight fn copied from highlight v5 and\n * edited to remove with() and pass js strict mode\n */\n$.fn.removeHighlight = function () {\n return this.find(\"span.highlight\").each(function () {\n this.parentNode.firstChild.nodeName;\n var parent = this.parentNode;\n parent.replaceChild(this.firstChild, this);\n parent.normalize();\n }).end();\n};\n\n/**\n * MicroEvent - to make any js object an event emitter\n *\n * - pure javascript - server compatible, browser compatible\n * - don't rely on the browser doms\n * - super simple - you get it immediately, no mystery, no magic involved\n *\n * @author Jerome Etienne (https://github.com/jeromeetienne)\n */\n\nvar MicroEvent = function () { };\nMicroEvent.prototype = {\n on: function (event, fct) {\n this._events = this._events || {};\n this._events[event] = this._events[event] || [];\n this._events[event].push(fct);\n },\n off: function (event, fct) {\n var n = arguments.length;\n if (n === 0) return delete this._events;\n if (n === 1) return delete this._events[event];\n\n this._events = this._events || {};\n if (event in this._events === false) return;\n this._events[event].splice(this._events[event].indexOf(fct), 1);\n },\n trigger: function (event /* , args... */) {\n const events = this._events = this._events || {};\n if (event in events === false) return;\n for (var i = 0; i < events[event].length; i++) {\n events[event][i].apply(this, Array.prototype.slice.call(arguments, 1));\n }\n }\n};\n\n/**\n * Mixin will delegate all MicroEvent.js function in the destination object.\n *\n * - MicroEvent.mixin(Foobar) will make Foobar able to use MicroEvent\n *\n * @param {object} the object which will support MicroEvent\n */\nMicroEvent.mixin = function (destObject) {\n var props = ['on', 'off', 'trigger'];\n for (var i = 0; i < props.length; i++) {\n destObject.prototype[props[i]] = MicroEvent.prototype[props[i]];\n }\n};\n\n/**\n * microplugin.js\n * Copyright (c) 2013 Brian Reavis & contributors\n * Copyright (c) 2022 Selectize Team & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n * @author Ris Adams <selectize@risadams.com>\n */\n\nvar MicroPlugin = {};\nMicroPlugin.mixin = function (Interface) {\n Interface.plugins = {};\n\n /**\n * Initializes the listed plugins (with options).\n * Acceptable formats:\n *\n * List (without options):\n * ['a', 'b', 'c']\n *\n * List (with options):\n * [{'name': 'a', options: {}}, {'name': 'b', options: {}}]\n *\n * Hash (with options):\n * {'a': { ... }, 'b': { ... }, 'c': { ... }}\n *\n * @param {mixed} plugins\n */\n Interface.prototype.initializePlugins = function (plugins) {\n var i, n, key;\n var self = this;\n var queue = [];\n\n self.plugins = {\n names: [],\n settings: {},\n requested: {},\n loaded: {}\n };\n\n if (utils.isArray(plugins)) {\n for (i = 0, n = plugins.length; i < n; i++) {\n if (typeof plugins[i] === 'string') {\n queue.push(plugins[i]);\n } else {\n self.plugins.settings[plugins[i].name] = plugins[i].options;\n queue.push(plugins[i].name);\n }\n }\n } else if (plugins) {\n for (key in plugins) {\n if (plugins.hasOwnProperty(key)) {\n self.plugins.settings[key] = plugins[key];\n queue.push(key);\n }\n }\n }\n\n while (queue.length) {\n self.require(queue.shift());\n }\n };\n\n Interface.prototype.loadPlugin = function (name) {\n var self = this;\n var plugins = self.plugins;\n var plugin = Interface.plugins[name];\n\n if (!Interface.plugins.hasOwnProperty(name)) {\n throw new Error('Unable to find \"' + name + '\" plugin');\n }\n\n plugins.requested[name] = true;\n plugins.loaded[name] = plugin.fn.apply(self, [self.plugins.settings[name] || {}]);\n plugins.names.push(name);\n };\n\n /**\n * Initializes a plugin.\n *\n * @param {string} name\n */\n Interface.prototype.require = function (name) {\n var self = this;\n var plugins = self.plugins;\n\n if (!self.plugins.loaded.hasOwnProperty(name)) {\n if (plugins.requested[name]) {\n throw new Error('Plugin has circular dependency (\"' + name + '\")');\n }\n self.loadPlugin(name);\n }\n\n return plugins.loaded[name];\n };\n\n /**\n * Registers a plugin.\n *\n * @param {string} name\n * @param {function} fn\n */\n Interface.define = function (name, fn) {\n Interface.plugins[name] = {\n 'name': name,\n 'fn': fn\n };\n };\n};\n\nvar utils = {\n isArray: Array.isArray || function (vArg) {\n return Object.prototype.toString.call(vArg) === '[object Array]';\n }\n};\n\n\n/**\n * sifter.js\n * Copyright (c) 2013–2020 Brian Reavis & contributors\n* Copyright (c) 2022 Selectize Team & contributors\n*\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n * @author Ris Adams <selectize@risadams.com>\n */\n\n/**\n * Textually searches arrays and hashes of objects\n * by property (or multiple properties). Designed\n * specifically for autocomplete.\n *\n * @constructor\n * @param {array|object} items\n * @param {object} items\n */\nvar Sifter = function (items, settings) {\n this.items = items;\n this.settings = settings || { diacritics: true };\n};\n\n/**\n * Splits a search string into an array of individual\n * regexps to be used to match results.\n *\n * @param {string} query\n * @returns {array}\n */\nSifter.prototype.tokenize = function (query, respect_word_boundaries) {\n query = trim(String(query || '').toLowerCase());\n if (!query || !query.length) return [];\n\n var i, n, regex, letter;\n var tokens = [];\n var words = query.split(/ +/);\n\n for (i = 0, n = words.length; i < n; i++) {\n regex = escape_regex(words[i]);\n if (this.settings.diacritics) {\n for (letter in DIACRITICS) {\n if (DIACRITICS.hasOwnProperty(letter)) {\n regex = regex.replace(new RegExp(letter, 'g'), DIACRITICS[letter]);\n }\n }\n }\n if (respect_word_boundaries) regex = \"\\\\b\" + regex\n tokens.push({\n string: words[i],\n regex: new RegExp(regex, 'i')\n });\n }\n\n return tokens;\n};\n\n/**\n * Iterates over arrays and hashes.\n *\n * ```\n * this.iterator(this.items, function(item, id) {\n * // invoked for each item\n * });\n * ```\n *\n * @param {array|object} object\n */\nSifter.prototype.iterator = function (object, callback) {\n var iterator;\n if (is_array(object)) {\n iterator = Array.prototype.forEach || function (callback) {\n for (var i = 0, n = this.length; i < n; i++) {\n callback(this[i], i, this);\n }\n };\n } else {\n iterator = function (callback) {\n for (var key in this) {\n if (this.hasOwnProperty(key)) {\n callback(this[key], key, this);\n }\n }\n };\n }\n\n iterator.apply(object, [callback]);\n};\n\n/**\n * Returns a function to be used to score individual results.\n *\n * Good matches will have a higher score than poor matches.\n * If an item is not a match, 0 will be returned by the function.\n *\n * @param {object|string} search\n * @param {object} options (optional)\n * @returns {function}\n */\nSifter.prototype.getScoreFunction = function (search, options) {\n var self, fields, tokens, token_count, nesting;\n\n self = this;\n search = self.prepareSearch(search, options);\n tokens = search.tokens;\n fields = search.options.fields;\n token_count = tokens.length;\n nesting = search.options.nesting;\n\n /**\n * Calculates how close of a match the\n * given value is against a search token.\n *\n * @param {mixed} value\n * @param {object} token\n * @return {number}\n */\n var scoreValue = function (value, token) {\n var score, pos;\n\n if (!value) return 0;\n value = String(value || '');\n pos = value.search(token.regex);\n if (pos === -1) return 0;\n score = token.string.length / value.length;\n if (pos === 0) score += 0.5;\n return score;\n };\n\n /**\n * Calculates the score of an object\n * against the search query.\n *\n * @param {object} token\n * @param {object} data\n * @return {number}\n */\n var scoreObject = (function () {\n var field_count = fields.length;\n if (!field_count) {\n return function () { return 0; };\n }\n if (field_count === 1) {\n return function (token, data) {\n return scoreValue(getattr(data, fields[0], nesting), token);\n };\n }\n return function (token, data) {\n for (var i = 0, sum = 0; i < field_count; i++) {\n sum += scoreValue(getattr(data, fields[i], nesting), token);\n }\n return sum / field_count;\n };\n })();\n\n if (!token_count) {\n return function () { return 0; };\n }\n if (token_count === 1) {\n return function (data) {\n return scoreObject(tokens[0], data);\n };\n }\n\n if (search.options.conjunction === 'and') {\n return function (data) {\n var score;\n for (var i = 0, sum = 0; i < token_count; i++) {\n score = scoreObject(tokens[i], data);\n if (score <= 0) return 0;\n sum += score;\n }\n return sum / token_count;\n };\n } else {\n return function (data) {\n for (var i = 0, sum = 0; i < token_count; i++) {\n sum += scoreObject(tokens[i], data);\n }\n return sum / token_count;\n };\n }\n};\n\n/**\n * Returns a function that can be used to compare two\n * results, for sorting purposes. If no sorting should\n * be performed, `null` will be returned.\n *\n * @param {string|object} search\n * @param {object} options\n * @return function(a,b)\n */\nSifter.prototype.getSortFunction = function (search, options) {\n var i, n, self, field, fields, fields_count, multiplier, multipliers, get_field, implicit_score, sort;\n\n self = this;\n search = self.prepareSearch(search, options);\n sort = (!search.query && options.sort_empty) || options.sort;\n\n /**\n * Fetches the specified sort field value\n * from a search result item.\n *\n * @param {string} name\n * @param {object} result\n * @return {mixed}\n */\n get_field = function (name, result) {\n if (name === '$score') return result.score;\n return getattr(self.items[result.id], name, options.nesting);\n };\n\n // parse options\n fields = [];\n if (sort) {\n for (i = 0, n = sort.length; i < n; i++) {\n if (search.query || sort[i].field !== '$score') {\n fields.push(sort[i]);\n }\n }\n }\n\n // the \"$score\" field is implied to be the primary\n // sort field, unless it's manually specified\n if (search.query) {\n implicit_score = true;\n for (i = 0, n = fields.length; i < n; i++) {\n if (fields[i].field === '$score') {\n implicit_score = false;\n break;\n }\n }\n if (implicit_score) {\n fields.unshift({ field: '$score', direction: 'desc' });\n }\n } else {\n for (i = 0, n = fields.length; i < n; i++) {\n if (fields[i].field === '$score') {\n fields.splice(i, 1);\n break;\n }\n }\n }\n\n multipliers = [];\n for (i = 0, n = fields.length; i < n; i++) {\n multipliers.push(fields[i].direction === 'desc' ? -1 : 1);\n }\n\n // build function\n fields_count = fields.length;\n if (!fields_count) {\n return null;\n } else if (fields_count === 1) {\n field = fields[0].field;\n multiplier = multipliers[0];\n return function (a, b) {\n return multiplier * cmp(\n get_field(field, a),\n get_field(field, b)\n );\n };\n } else {\n return function (a, b) {\n var i, result, a_value, b_value, field;\n for (i = 0; i < fields_count; i++) {\n field = fields[i].field;\n result = multipliers[i] * cmp(\n get_field(field, a),\n get_field(field, b)\n );\n if (result) return result;\n }\n return 0;\n };\n }\n};\n\n/**\n * Parses a search query and returns an object\n * with tokens and fields ready to be populated\n * with results.\n *\n * @param {string} query\n * @param {object} options\n * @returns {object}\n */\nSifter.prototype.prepareSearch = function (query, options) {\n if (typeof query === 'object') return query;\n\n options = extend({}, options);\n\n var option_fields = options.fields;\n var option_sort = options.sort;\n var option_sort_empty = options.sort_empty;\n\n if (option_fields && !is_array(option_fields)) options.fields = [option_fields];\n if (option_sort && !is_array(option_sort)) options.sort = [option_sort];\n if (option_sort_empty && !is_array(option_sort_empty)) options.sort_empty = [option_sort_empty];\n\n return {\n options: options,\n query: String(query || '').toLowerCase(),\n tokens: this.tokenize(query, options.respect_word_boundaries),\n total: 0,\n items: []\n };\n};\n\n/**\n * Searches through all items and returns a sorted array of matches.\n *\n * The `options` parameter can contain:\n *\n * - fields {string|array}\n * - sort {array}\n * - score {function}\n * - filter {bool}\n * - limit {integer}\n *\n * Returns an object containing:\n *\n * - options {object}\n * - query {string}\n * - tokens {array}\n * - total {int}\n * - items {array}\n *\n * @param {string} query\n * @param {object} options\n * @returns {object}\n */\nSifter.prototype.search = function (query, options) {\n var self = this, value, score, search, calculateScore;\n var fn_sort;\n var fn_score;\n\n search = this.prepareSearch(query, options);\n options = search.options;\n query = search.query;\n\n // generate result scoring function\n fn_score = options.score || self.getScoreFunction(search);\n\n // perform search and sort\n if (query.length) {\n self.iterator(self.items, function (item, id) {\n score = fn_score(item);\n if (options.filter === false || score > 0) {\n search.items.push({ 'score': score, 'id': id });\n }\n });\n } else {\n self.iterator(self.items, function (item, id) {\n search.items.push({ 'score': 1, 'id': id });\n });\n }\n\n fn_sort = self.getSortFunction(search, options);\n if (fn_sort) search.items.sort(fn_sort);\n\n // apply limits\n search.total = search.items.length;\n if (typeof options.limit === 'number') {\n search.items = search.items.slice(0, options.limit);\n }\n\n return search;\n};\n\n// utilities\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nvar cmp = function (a, b) {\n if (typeof a === 'number' && typeof b === 'number') {\n return a > b ? 1 : (a < b ? -1 : 0);\n }\n a = asciifold(String(a || ''));\n b = asciifold(String(b || ''));\n if (a > b) return 1;\n if (b > a) return -1;\n return 0;\n};\n\nvar extend = function (a, b) {\n var i, n, k, object;\n for (i = 1, n = arguments.length; i < n; i++) {\n object = arguments[i];\n if (!object) continue;\n for (k in object) {\n if (object.hasOwnProperty(k)) {\n a[k] = object[k];\n }\n }\n }\n return a;\n};\n\n/**\n * A property getter resolving dot-notation\n * @param {Object} obj The root object to fetch property on\n * @param {String} name The optionally dotted property name to fetch\n * @param {Boolean} nesting Handle nesting or not\n * @return {Object} The resolved property value\n */\nvar getattr = function (obj, name, nesting) {\n if (!obj || !name) return;\n if (!nesting) return obj[name];\n var names = name.split(\".\");\n while (names.length && (obj = obj[names.shift()]));\n return obj;\n};\n\nvar trim = function (str) {\n return (str + '').replace(/^\\s+|\\s+$|/g, '');\n};\n\nvar escape_regex = function (str) {\n return (str + '').replace(/([.?*+^$[\\]\\\\(){}|-])/g, '\\\\$1');\n};\n\nvar is_array = Array.isArray || (typeof $ !== 'undefined' && $.isArray) || function (object) {\n return Object.prototype.toString.call(object) === '[object Array]';\n};\n\nvar DIACRITICS = {\n 'a': '[aḀá¸Ä‚ăÂâÇǎȺⱥȦȧẠạÄäÀà ÃáĀÄÃãÅåąĄÃąĄ]',\n 'b': '[bâ¢Î²Î’B฿ðŒá›’]',\n 'c': '[cĆćĈĉČÄÄŠÄ‹CÌ„c̄ÇçḈḉȻȼƇƈɕᴄCc]',\n 'd': '[dÄŽÄḊḋá¸á¸‘Ḍá¸á¸’ḓḎá¸ÄÄ‘D̦d̦ƉɖƊɗƋƌáµá¶á¶‘ȡᴅDdð]',\n 'e': '[eÉéÈèÊêḘḙĚěĔĕẼẽḚḛẺẻĖėËëĒēȨȩĘęᶒɆɇȄȅẾếỀá»á»„ễỂểḜá¸á¸–ḗḔḕȆȇẸẹỆệⱸᴇEeɘÇÆÆε]',\n 'f': '[fƑƒḞḟ]',\n 'g': '[gɢ₲ǤǥĜÄÄžÄŸÄ¢Ä£Æ“É Ä Ä¡]',\n 'h': '[hĤĥĦħḨḩẖẖḤḥḢḣɦʰǶƕ]',\n 'i': '[iÃÃÌìĬÄÎîÇÇÃïḮḯĨĩĮįĪīỈỉȈȉȊȋỊịḬá¸Æ—ɨɨ̆ᵻᶖİiIıɪIi]',\n 'j': '[jȷĴĵɈɉÊɟʲ]',\n 'k': '[kƘƙê€êḰḱǨǩḲḳḴḵκϰâ‚]',\n 'l': '[lÅłĽľĻļĹĺḶḷḸḹḼḽḺḻĿŀȽƚⱠⱡⱢɫɬᶅÉȴʟLl]',\n 'n': '[nŃńǸǹŇňÑñṄṅŅņṆṇṊṋṈṉN̈n̈ÆÉ²È Æžáµ°á¶‡É³ÈµÉ´ï¼®ï½ŽÅŠÅ‹]',\n 'o': '[oØøÖöÓóÒòÔôǑǒÅÅ‘ÅŽÅȮȯỌá»ÆŸÉµÆ ơỎá»ÅŒÅÕõǪǫȌÈÕ•Ö…]',\n 'p': '[pṔṕṖṗⱣᵽƤƥᵱ]',\n 'q': '[qê–ê—Ê ÉŠÉ‹ê˜ê™q̃]',\n 'r': '[rŔŕɌÉŘřŖŗṘṙÈȑȒȓṚṛⱤɽ]',\n 's': '[sŚśṠṡṢṣꞨꞩŜÅŠšŞşȘșS̈s̈]',\n 't': '[tŤťṪṫŢţṬá¹Æ®ÊˆÈšÈ›á¹°á¹±á¹®á¹¯Æ¬Æ]',\n 'u': '[uŬÅɄʉỤụÜüÚúÙùÛûǓǔŰűŬÅƯưỦủŪūŨũŲųȔȕ∪]',\n 'v': '[vṼṽṾṿƲʋêžêŸâ±±Ê‹]',\n 'w': '[wẂẃẀáºÅ´Åµáº„ẅẆẇẈẉ]',\n 'x': '[xẌáºáºŠáº‹Ï‡]',\n 'y': '[yÃýỲỳŶŷŸÿỸỹẎáºá»´á»µÉŽÉƳƴ]',\n 'z': '[zŹźáºáº‘ŽžŻżẒẓẔẕƵƶ]'\n};\n\nvar asciifold = (function () {\n var i, n, k, chunk;\n var foreignletters = '';\n var lookup = {};\n for (k in DIACRITICS) {\n if (DIACRITICS.hasOwnProperty(k)) {\n chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);\n foreignletters += chunk;\n for (i = 0, n = chunk.length; i < n; i++) {\n lookup[chunk.charAt(i)] = k;\n }\n }\n }\n var regexp = new RegExp('[' + foreignletters + ']', 'g');\n return function (str) {\n return str.replace(regexp, function (foreignletter) {\n return lookup[foreignletter];\n }).toLowerCase();\n };\n})();\n\n\n\t// export\n\t// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nfunction uaDetect(platform, re) {\n if (navigator.userAgentData) {\n return platform === navigator.userAgentData.platform;\n }\n\n return re.test(navigator.userAgent);\n}\n\nvar IS_MAC = uaDetect(\"macOS\", /Mac/);\n\nvar KEY_A = 65;\nvar KEY_COMMA = 188;\nvar KEY_RETURN = 13;\nvar KEY_ESC = 27;\nvar KEY_LEFT = 37;\nvar KEY_UP = 38;\nvar KEY_P = 80;\nvar KEY_RIGHT = 39;\nvar KEY_DOWN = 40;\nvar KEY_N = 78;\nvar KEY_BACKSPACE = 8;\nvar KEY_DELETE = 46;\nvar KEY_SHIFT = 16;\nvar KEY_CMD = IS_MAC ? 91 : 17;\nvar KEY_CTRL = IS_MAC ? 18 : 17;\nvar KEY_TAB = 9;\n\nvar TAG_SELECT = 1;\nvar TAG_INPUT = 2;\n\n// for now, android support in general is too spotty to support validity\nvar SUPPORTS_VALIDITY_API = !uaDetect(\"Android\", /android/i) && !!document.createElement('input').validity;\n\n/**\n * Determines if the provided value has been defined.\n *\n * @param {mixed} object\n * @returns {boolean}\n */\nvar isset = function (object) {\n return typeof object !== 'undefined';\n};\n\n/**\n * Converts a scalar to its best string representation\n * for hash keys and HTML attribute values.\n *\n * Transformations:\n * 'str' -> 'str'\n * null -> ''\n * undefined -> ''\n * true -> '1'\n * false -> '0'\n * 0 -> '0'\n * 1 -> '1'\n *\n * @param {string} value\n * @returns {string|null}\n */\nvar hash_key = function (value) {\n if (typeof value === 'undefined' || value === null) return null;\n if (typeof value === 'boolean') return value ? '1' : '0';\n return value + '';\n};\n\n/**\n * Escapes a string for use within HTML.\n *\n * @param {string} str\n * @returns {string}\n */\nvar escape_html = function (str) {\n return (str + '')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g, '"');\n};\n\n/**\n * Escapes \"$\" characters in replacement strings.\n *\n * @param {string} str\n * @returns {string}\n */\nvar escape_replace = function (str) {\n return (str + '').replace(/\\$/g, '$$$$');\n};\n\nvar hook = {};\n\n/**\n * Wraps `method` on `self` so that `fn`\n * is invoked before the original method.\n *\n * @param {object} self\n * @param {string} method\n * @param {function} fn\n */\nhook.before = function (self, method, fn) {\n var original = self[method];\n self[method] = function () {\n fn.apply(self, arguments);\n return original.apply(self, arguments);\n };\n};\n\n/**\n * Wraps `method` on `self` so that `fn`\n * is invoked after the original method.\n *\n * @param {object} self\n * @param {string} method\n * @param {function} fn\n */\nhook.after = function (self, method, fn) {\n var original = self[method];\n self[method] = function () {\n var result = original.apply(self, arguments);\n fn.apply(self, arguments);\n return result;\n };\n};\n\n/**\n * Wraps `fn` so that it can only be invoked once.\n *\n * @param {function} fn\n * @returns {function}\n */\nvar once = function (fn) {\n var called = false;\n return function () {\n if (called) return;\n called = true;\n fn.apply(this, arguments);\n };\n};\n\n/**\n * Wraps `fn` so that it can only be called once\n * every `delay` milliseconds (invoked on the falling edge).\n *\n * @param {function} fn\n * @param {int} delay\n * @returns {function}\n */\nvar debounce = function (fn, delay) {\n var timeout;\n return function () {\n var self = this;\n var args = arguments;\n window.clearTimeout(timeout);\n timeout = window.setTimeout(function () {\n fn.apply(self, args);\n }, delay);\n };\n};\n\n/**\n * Debounce all fired events types listed in `types`\n * while executing the provided `fn`.\n *\n * @param {object} self\n * @param {array} types\n * @param {function} fn\n */\nvar debounce_events = function (self, types, fn) {\n var type;\n var trigger = self.trigger;\n var event_args = {};\n\n // override trigger method\n self.trigger = function () {\n var type = arguments[0];\n if (types.indexOf(type) !== -1) {\n event_args[type] = arguments;\n } else {\n return trigger.apply(self, arguments);\n }\n };\n\n // invoke provided function\n fn.apply(self, []);\n self.trigger = trigger;\n\n // trigger queued events\n for (type in event_args) {\n if (event_args.hasOwnProperty(type)) {\n trigger.apply(self, event_args[type]);\n }\n }\n};\n\n/**\n * A workaround for http://bugs.jquery.com/ticket/6696\n *\n * @param {object} $parent - Parent element to listen on.\n * @param {string} event - Event name.\n * @param {string} selector - Descendant selector to filter by.\n * @param {function} fn - Event handler.\n */\nvar watchChildEvent = function ($parent, event, selector, fn) {\n $parent.on(event, selector, function (e) {\n var child = e.target;\n while (child && child.parentNode !== $parent[0]) {\n child = child.parentNode;\n }\n e.currentTarget = child;\n return fn.apply(this, [e]);\n });\n};\n\n/**\n * Determines the current selection within a text input control.\n * Returns an object containing:\n * - start\n * - length\n *\n * @param {object} input\n * @returns {object}\n */\nvar getInputSelection = function (input) {\n var result = {};\n if (input === undefined) {\n console.warn('WARN getInputSelection cannot locate input control');\n return result;\n }\n if ('selectionStart' in input) {\n result.start = input.selectionStart;\n result.length = input.selectionEnd - result.start;\n } else if (document.selection) {\n input.focus();\n var sel = document.selection.createRange();\n var selLen = document.selection.createRange().text.length;\n sel.moveStart('character', -input.value.length);\n result.start = sel.text.length - selLen;\n result.length = selLen;\n }\n return result;\n};\n\n/**\n * Copies CSS properties from one element to another.\n *\n * @param {object} $from\n * @param {object} $to\n * @param {array} properties\n */\nvar transferStyles = function ($from, $to, properties) {\n var i, n, styles = {};\n if (properties) {\n for (i = 0, n = properties.length; i < n; i++) {\n styles[properties[i]] = $from.css(properties[i]);\n }\n } else {\n styles = $from.css();\n }\n $to.css(styles);\n};\n\n/**\n * Measures the width of a string within a\n * parent element (in pixels).\n *\n * @param {string} str\n * @param {object} $parent\n * @returns {int}\n */\nvar measureString = function (str, $parent) {\n if (!str) {\n return 0;\n }\n\n if (!Selectize.$testInput) {\n Selectize.$testInput = $('<span />').css({\n position: 'absolute',\n width: 'auto',\n padding: 0,\n whiteSpace: 'pre'\n });\n\n $('<div />').css({\n position: 'absolute',\n width: 0,\n height: 0,\n overflow: 'hidden'\n }).append(Selectize.$testInput).appendTo('body');\n }\n\n Selectize.$testInput.text(str);\n\n transferStyles($parent, Selectize.$testInput, [\n 'letterSpacing',\n 'fontSize',\n 'fontFamily',\n 'fontWeight',\n 'textTransform'\n ]);\n\n return Selectize.$testInput.width();\n};\n\n/**\n * Sets up an input to grow horizontally as the user\n * types. If the value is changed manually, you can\n * trigger the \"update\" handler to resize:\n *\n * $input.trigger('update');\n *\n * @param {object} $input\n */\nvar autoGrow = function ($input) {\n var currentWidth = null;\n\n var update = function (e, options) {\n var value, keyCode, printable, width;\n var placeholder, placeholderWidth;\n var shift, character, selection;\n e = e || window.event || {};\n options = options || {};\n\n if (e.metaKey || e.altKey) return;\n if (!options.force && $input.data('grow') === false) return;\n\n value = $input.val();\n if (e.type && e.type.toLowerCase() === 'keydown') {\n keyCode = e.keyCode;\n printable = (\n (keyCode >= 48 && keyCode <= 57) || // 0-9\n (keyCode >= 65 && keyCode <= 90) || // a-z\n (keyCode >= 96 && keyCode <= 111) || // numpad 0-9, numeric operators\n (keyCode >= 186 && keyCode <= 222) || // semicolon, equal, comma, dash, etc.\n keyCode === 32 // space\n );\n\n if (keyCode === KEY_DELETE || keyCode === KEY_BACKSPACE) {\n selection = getInputSelection($input[0]);\n if (selection.length) {\n value = value.substring(0, selection.start) + value.substring(selection.start + selection.length);\n } else if (keyCode === KEY_BACKSPACE && selection.start) {\n value = value.substring(0, selection.start - 1) + value.substring(selection.start + 1);\n } else if (keyCode === KEY_DELETE && typeof selection.start !== 'undefined') {\n value = value.substring(0, selection.start) + value.substring(selection.start + 1);\n }\n } else if (printable) {\n shift = e.shiftKey;\n character = String.fromCharCode(e.keyCode);\n if (shift) character = character.toUpperCase();\n else character = character.toLowerCase();\n value += character;\n }\n }\n\n placeholder = $input.attr('placeholder');\n if (placeholder) {\n placeholderWidth = measureString(placeholder, $input) + 4;\n } else {\n placeholderWidth = 0;\n }\n\n width = Math.max(measureString(value, $input), placeholderWidth) + 4;\n if (width !== currentWidth) {\n currentWidth = width;\n $input.width(width);\n $input.triggerHandler('resize');\n }\n };\n\n $input.on('keydown keyup update blur', update);\n update();\n};\n\nvar domToString = function (d) {\n var tmp = document.createElement('div');\n\n tmp.appendChild(d.cloneNode(true));\n\n return tmp.innerHTML;\n};\n\nvar logError = function (message, options) {\n if (!options) options = {};\n var component = \"Selectize\";\n\n console.error(component + \": \" + message)\n\n if (options.explanation) {\n // console.group is undefined in <IE11\n if (console.group) console.group();\n console.error(options.explanation);\n if (console.group) console.groupEnd();\n }\n};\n\n/**\n *\n * @param {any} data Data to testing\n * @returns {Boolean} true if is an JSON object\n */\nvar isJSON = function (data) {\n try {\n JSON.parse(str);\n } catch (e) {\n return false;\n }\n return true;\n};\n\nvar Selectize = function($input, settings) {\n\tvar key, i, n, dir, input, self = this;\n\tinput = $input[0];\n\tinput.selectize = self;\n\n\t// detect rtl environment\n\tvar computedStyle = window.getComputedStyle && window.getComputedStyle(input, null);\n\tdir = computedStyle ? computedStyle.getPropertyValue('direction') : input.currentStyle && input.currentStyle.direction;\n\tdir = dir || $input.parents('[dir]:first').attr('dir') || '';\n\n\t// setup default state\n\t$.extend(self, {\n\t\torder : 0,\n\t\tsettings : settings,\n\t\t$input : $input,\n\t\ttabIndex : $input.attr('tabindex') || '',\n\t\ttagType : input.tagName.toLowerCase() === 'select' ? TAG_SELECT : TAG_INPUT,\n\t\trtl : /rtl/i.test(dir),\n\n\t\teventNS : '.selectize' + (++Selectize.count),\n\t\thighlightedValue : null,\n\t\tisBlurring : false,\n\t\tisOpen : false,\n\t\tisDisabled : false,\n\t\tisRequired : $input.is('[required]'),\n\t\tisInvalid : false,\n\t\tisLocked : false,\n\t\tisFocused : false,\n\t\tisInputHidden : false,\n\t\tisSetup : false,\n\t\tisShiftDown : false,\n\t\tisCmdDown : false,\n\t\tisCtrlDown : false,\n\t\tignoreFocus : false,\n\t\tignoreBlur : false,\n\t\tignoreHover : false,\n\t\thasOptions : false,\n\t\tcurrentResults : null,\n\t\tlastValue : '',\n\t\tlastValidValue : '',\n\t\tlastOpenTarget : false,\n\t\tcaretPos : 0,\n\t\tloading : 0,\n\t\tloadedSearches : {},\n isDropdownClosing: false,\n\n\t\t$activeOption : null,\n\t\t$activeItems : [],\n\n\t\toptgroups : {},\n\t\toptions : {},\n\t\tuserOptions : {},\n\t\titems : [],\n\t\trenderCache : {},\n\t\tonSearchChange : settings.loadThrottle === null ? self.onSearchChange : debounce(self.onSearchChange, settings.loadThrottle)\n\t});\n\n\t// search system\n\tself.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\n\t// build options table\n\tif (self.settings.options) {\n\t\tfor (i = 0, n = self.settings.options.length; i < n; i++) {\n\t\t\tself.registerOption(self.settings.options[i]);\n\t\t}\n\t\tdelete self.settings.options;\n }\n\n\t// build optgroup table\n\tif (self.settings.optgroups) {\n\t\tfor (i = 0, n = self.settings.optgroups.length; i < n; i++) {\n\t\t\tself.registerOptionGroup(self.settings.optgroups[i]);\n\t\t}\n\t\tdelete self.settings.optgroups;\n\t}\n\n\t// option-dependent defaults\n\tself.settings.mode = self.settings.mode || (self.settings.maxItems === 1 ? 'single' : 'multi');\n\tif (typeof self.settings.hideSelected !== 'boolean') {\n\t\tself.settings.hideSelected = self.settings.mode === 'multi';\n\t}\n\n\tself.initializePlugins(self.settings.plugins);\n\tself.setupCallbacks();\n\tself.setupTemplates();\n\tself.setup();\n};\n\n// mixins\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\nMicroEvent.mixin(Selectize);\nMicroPlugin.mixin(Selectize);\n\n// methods\n// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -\n\n$.extend(Selectize.prototype, {\n\n\t/**\n\t * Creates all elements and sets up event bindings.\n\t */\n\tsetup: function() {\n\t\tvar self = this;\n\t\tvar settings = self.settings;\n\t\tvar eventNS = self.eventNS;\n\t\tvar $window = $(window);\n\t\tvar $document = $(document);\n\t\tvar $input = self.$input;\n\n\t\tvar $wrapper;\n\t\tvar $control;\n\t\tvar $control_input;\n\t\tvar $dropdown;\n\t\tvar $dropdown_content;\n\t\tvar $dropdown_parent;\n\t\tvar inputMode;\n\t\tvar timeout_blur;\n\t\tvar timeout_focus;\n\t\tvar classes;\n\t\tvar classes_plugins;\n\t\tvar inputId;\n\n\t\tinputMode = self.settings.mode;\n\t\tclasses = $input.attr('class') || '';\n\n $wrapper = $('<div>').addClass(settings.wrapperClass).addClass(classes + ' selectize-control').addClass(inputMode);\n\t\t$control = $('<div>').addClass(settings.inputClass + ' selectize-input items').appendTo($wrapper);\n\t\t$control_input = $('<input type=\"select-one\" autocomplete=\"new-password\" autofill=\"no\" />').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex);\n\t\t$dropdown_parent = $(settings.dropdownParent || $wrapper);\n\t\t$dropdown = $('<div>').addClass(settings.dropdownClass).addClass(inputMode + ' selectize-dropdown').hide().appendTo($dropdown_parent);\n\t\t$dropdown_content = $('<div>').addClass(settings.dropdownContentClass + ' selectize-dropdown-content').attr('tabindex', '-1').appendTo($dropdown);\n\n\t\tif(inputId = $input.attr('id')) {\n\t\t\t$control_input.attr('id', inputId + '-selectized');\n\t\t\t$(\"label[for='\"+inputId+\"']\").attr('for', inputId + '-selectized');\n\t\t}\n\n\t\tif(self.settings.copyClassesToDropdown) {\n\t\t\t$dropdown.addClass(classes);\n\t\t}\n\n\t\t$wrapper.css({\n\t\t\twidth: $input[0].style.width\n\t\t});\n\n\t\tif (self.plugins.names.length) {\n\t\t\tclasses_plugins = 'plugin-' + self.plugins.names.join(' plugin-');\n\t\t\t$wrapper.addClass(classes_plugins);\n\t\t\t$dropdown.addClass(classes_plugins);\n\t\t}\n\n\t\tif ((settings.maxItems === null || settings.maxItems > 1) && self.tagType === TAG_SELECT) {\n\t\t\t$input.attr('multiple', 'multiple');\n\t\t}\n\n\t\tif (self.settings.placeholder) {\n\t\t\t$control_input.attr('placeholder', settings.placeholder);\n\t\t}\n\n // to have an identical rendering to a simple select (usefull for mobile device and do not open keyboard)\n if (!self.settings.search) {\n $control_input.attr('readonly', true);\n\t $control_input.attr('inputmode', 'none');\n $control.css('cursor', 'pointer');\n }\n\n\t\t// if splitOn was not passed in, construct it from the delimiter to allow pasting universally\n\t\tif (!self.settings.splitOn && self.settings.delimiter) {\n\t\t\tvar delimiterEscaped = self.settings.delimiter.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n\t\t\tself.settings.splitOn = new RegExp('\\\\s*' + delimiterEscaped + '+\\\\s*');\n\t\t}\n\n\t\tif ($input.attr('autocorrect')) {\n\t\t\t$control_input.attr('autocorrect', $input.attr('autocorrect'));\n\t\t}\n\n\t\tif ($input.attr('autocapitalize')) {\n\t\t\t$control_input.attr('autocapitalize', $input.attr('autocapitalize'));\n\t\t}\n\t\tif ($input.is('input')) {\n\t\t\t$control_input[0].type = $input[0].type;\n\t\t}\n\n\t\tself.$wrapper = $wrapper;\n\t\tself.$control = $control;\n\t\tself.$control_input = $control_input;\n\t\tself.$dropdown = $dropdown;\n\t\tself.$dropdown_content = $dropdown_content;\n\n\t\t$dropdown.on('mouseenter mousedown mouseup click', '[data-disabled]>[data-selectable]', function(e) { e.stopImmediatePropagation(); });\n\t\t$dropdown.on('mouseenter', '[data-selectable]', function() { return self.onOptionHover.apply(self, arguments); });\n\t\t$dropdown.on('mouseup click', '[data-selectable]', function() { return self.onOptionSelect.apply(self, arguments); });\n\t\twatchChildEvent($control, 'mouseup', '*:not(input)', function() { return self.onItemSelect.apply(self, arguments); });\n\t\tautoGrow($control_input);\n\n\t\t$control.on({\n\t\t\tmousedown : function() { return self.onMouseDown.apply(self, arguments); },\n\t\t\tclick : function() { return self.onClick.apply(self, arguments); }\n\t\t});\n\n\t\t$control_input.on({\n\t\t\tmousedown : function(e) {\n\t\t\t\tif (self.$control_input.val() !== '' || self.settings.openOnFocus) {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeydown : function() { return self.onKeyDown.apply(self, arguments); },\n\t\t\tkeypress : function() { return self.onKeyPress.apply(self, arguments); },\n\t\t\tinput : function() { return self.onInput.apply(self, arguments); },\n\t\t\tresize : function() { self.positionDropdown.apply(self, []); },\n\t\t\t// blur : function() { return self.onBlur.apply(self, arguments); },\n\t\t\tfocus : function() { self.ignoreBlur = false; return self.onFocus.apply(self, arguments); },\n\t\t\tpaste : function() { return self.onPaste.apply(self, arguments); }\n\t\t});\n\n\t\t$document.on('keydown' + eventNS, function(e) {\n\t\t\tself.isCmdDown = e[IS_MAC ? 'metaKey' : 'ctrlKey'];\n\t\t\tself.isCtrlDown = e[IS_MAC ? 'altKey' : 'ctrlKey'];\n\t\t\tself.isShiftDown = e.shiftKey;\n\t\t});\n\n\t\t$document.on('keyup' + eventNS, function(e) {\n\t\t\tif (e.keyCode === KEY_CTRL) self.isCtrlDown = false;\n\t\t\tif (e.keyCode === KEY_SHIFT) self.isShiftDown = false;\n\t\t\tif (e.keyCode === KEY_CMD) self.isCmdDown = false;\n\t\t});\n\n\t\t$document.on('mousedown' + eventNS, function(e) {\n\t\t\tif (self.isFocused) {\n\t\t\t\t// prevent events on the dropdown scrollbar from causing the control to blur\n\t\t\t\tif (e.target === self.$dropdown[0] || e.target.parentNode === self.$dropdown[0]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t// blur on click outside\n\t\t\t\t// do not blur if the dropdown is clicked\n\t\t\t\tif (!self.$dropdown.has(e.target).length && e.target !== self.$control[0]) {\n\t\t\t\t\tself.blur(e.target);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\t$window.on(['scroll' + eventNS, 'resize' + eventNS].join(' '), function() {\n\t\t\tif (self.isOpen) {\n\t\t\t\tself.positionDropdown.apply(self, arguments);\n\t\t\t}\n\t\t});\n\t\t$window.on('mousemove' + eventNS, function() {\n self.ignoreHover = self.settings.ignoreHover;\n\t\t});\n\n\t\t// store original children and tab index so that they can be\n\t\t// restored when the destroy() method is called.\n\t\t// Detach children outside of DOM to prevent slowdown on large selects\n var inputPlaceholder = $('<div></div>');\n\t\tvar inputChildren = $input.children().detach();\n\n $input.replaceWith(inputPlaceholder);\n inputPlaceholder.replaceWith($input);\n\n this.revertSettings = {\n\t\t\t$children : inputChildren,\n\t\t\ttabindex : $input.attr('tabindex')\n\t\t};\n\n\t\t$input.attr('tabindex', -1).hide().after(self.$wrapper);\n\n\t\tif (Array.isArray(settings.items)) {\n\t\t\tself.lastValidValue = settings.items;\n\t\t\tself.setValue(settings.items);\n\t\t\tdelete settings.items;\n\t\t}\n\n\t\t// feature detect for the validation API\n\t\tif (SUPPORTS_VALIDITY_API) {\n\t\t\t$input.on('invalid' + eventNS, function(e) {\n\t\t\t\te.preventDefault();\n\t\t\t\tself.isInvalid = true;\n\t\t\t\tself.refreshState();\n\t\t\t});\n\t\t}\n\n\t\tself.updateOriginalInput();\n\t\tself.refreshItems();\n\t\tself.refreshState();\n\t\tself.updatePlaceholder();\n\t\tself.isSetup = true;\n\n\t\tif ($input.is(':disabled')) {\n\t\t\tself.disable();\n\t\t}\n\n\t\tself.on('change', this.onChange);\n\n\t\t$input.data('selectize', self);\n\t\t$input.addClass('selectized');\n\t\tself.trigger('initialize');\n\n\t\t// preload options\n\t\tif (settings.preload === true) {\n\t\t\tself.onSearchChange('');\n\t\t}\n\n\t},\n\n\t/**\n\t * Sets up default rendering functions.\n\t */\n\tsetupTemplates: function() {\n\t\tvar self = this;\n\t\tvar field_label = self.settings.labelField;\n\t\tvar field_value = self.settings.valueField;\n\t\tvar field_optgroup = self.settings.optgroupLabelField;\n\n\t\tvar templates = {\n\t\t\t'optgroup': function(data) {\n\t\t\t\treturn '<div class=\"optgroup\">' + data.html + '</div>';\n\t\t\t},\n\t\t\t'optgroup_header': function(data, escape) {\n\t\t\t\treturn '<div class=\"optgroup-header\">' + escape(data[field_optgroup]) + '</div>';\n\t\t\t},\n\t\t\t'option': function(data, escape) {\n var classes = data.classes ? ' ' + data.classes : '';\n classes += data[field_value] === '' ? ' selectize-dropdown-emptyoptionlabel' : '';\n\n var styles = data.styles ? ' style=\"' + data.styles + '\"': '';\n\t\t\t\treturn '<div' + styles + ' class=\"option' + classes + '\">' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'item': function(data, escape) {\n\t\t\t\treturn '<div class=\"item\">' + escape(data[field_label]) + '</div>';\n\t\t\t},\n\t\t\t'option_create': function(data, escape) {\n\t\t\t\treturn '<div class=\"create\">Add <strong>' + escape(data.input) + '</strong>…</div>';\n\t\t\t}\n\t\t};\n\n\t\tself.settings.render = $.extend({}, templates, self.settings.render);\n\t},\n\n\t/**\n\t * Maps fired events to callbacks provided\n\t * in the settings used when creating the control.\n\t */\n\tsetupCallbacks: function() {\n\t\tvar key, fn, callbacks = {\n\t\t\t'initialize' : 'onInitialize',\n\t\t\t'change' : 'onChange',\n\t\t\t'item_add' : 'onItemAdd',\n\t\t\t'item_remove' : 'onItemRemove',\n\t\t\t'clear' : 'onClear',\n\t\t\t'option_add' : 'onOptionAdd',\n\t\t\t'option_remove' : 'onOptionRemove',\n\t\t\t'option_clear' : 'onOptionClear',\n\t\t\t'optgroup_add' : 'onOptionGroupAdd',\n\t\t\t'optgroup_remove' : 'onOptionGroupRemove',\n\t\t\t'optgroup_clear' : 'onOptionGroupClear',\n\t\t\t'dropdown_open' : 'onDropdownOpen',\n\t\t\t'dropdown_close' : 'onDropdownClose',\n\t\t\t'type' : 'onType',\n\t\t\t'load' : 'onLoad',\n\t\t\t'focus' : 'onFocus',\n\t\t\t'blur' : 'onBlur',\n\t\t\t'dropdown_item_activate' : 'onDropdownItemActivate',\n\t\t\t'dropdown_item_deactivate' : 'onDropdownItemDeactivate'\n\t\t};\n\n\t\tfor (key in callbacks) {\n\t\t\tif (callbacks.hasOwnProperty(key)) {\n\t\t\t\tfn = this.settings[callbacks[key]];\n\t\t\t\tif (fn) this.on(key, fn);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Triggered when the main control element\n\t * has a click event.\n\t *\n\t * @param {PointerEvent} e\n\t * @return {boolean}\n\t */\n\tonClick: function(e) {\n\t\tvar self = this;\n\n // if the dropdown is closing due to a mousedown, we don't want to\n // refocus the element.\n if (self.isDropdownClosing) {\n return;\n }\n\n\t\t// necessary for mobile webkit devices (manual focus triggering\n\t\t// is ignored unless invoked within a click event)\n // also necessary to reopen a dropdown that has been closed by\n // closeAfterSelect\n\t\tif (!self.isFocused || !self.isOpen) {\n\t\t\tself.focus();\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\n\t/**\n\t * Triggered when the main control element\n\t * has a mouse down event.\n\t *\n\t * @param {object} e\n\t * @return {boolean}\n\t */\n\tonMouseDown: function(e) {\n\t\tvar self = this;\n\t\tvar defaultPrevented = e.isDefaultPrevented();\n\t\tvar $target = $(e.target);\n\n\t\tif (!self.isFocused) {\n\t\t\t// give control focus\n\t\t\tif (!defaultPrevented) {\n\t\t\t\twindow.setTimeout(function() {\n\t\t\t\t\tself.focus();\n\t\t\t\t}, 0);\n\t\t\t}\n\t\t}\n\t\t// retain focus by preventing native handling. if the\n\t\t// event target is the input it should not be modified.\n\t\t// otherwise, text selection within the input won't work.\n\t\tif (e.target !== self.$control_input[0] || self.$control_input.val() === '') {\n\t\t\tif (self.settings.mode === 'single') {\n\t\t\t\t// toggle dropdown\n\t\t\t\tself.isOpen ? self.close() : self.open();\n\t\t\t} else {\n\t\t\t\tif (!defaultPrevented) {\n\t\t\t\t\t\tself.setActiveItem(null);\n\t\t\t\t}\n\t\t\t\tif (!self.settings.openOnFocus) {\n\t\t\t\t\tif (self.isOpen && e.target === self.lastOpenTarget) {\n\t\t\t\t\t\tself.close();\n\t\t\t\t\t\tself.lastOpenTarget = false;\n\t\t\t\t\t} else if (!self.isOpen) {\n\t\t\t\t\t\tself.refreshOptions();\n\t\t\t\t\t\tself.open();\n\t\t\t\t\t\tself.lastOpenTarget = e.target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.lastOpenTarget = e.target;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t},\n\n\t/**\n\t * Triggered when the value of the control has been changed.\n\t * This should propagate the event to the original DOM\n\t * input / select element.\n\t */\n\tonChange: function() {\n\t\tvar self = this;\n\t\tif (self.getValue() !== \"\") {\n\t\t\tself.lastValidValue = self.getValue();\n\t\t}\n\t\tthis.$input.trigger('input');\n\t\tthis.$input.trigger('change');\n\t},\n\n\t/**\n\t * Triggered on <input> paste.\n\t *\n\t * @param {object} e\n\t * @returns {boolean}\n\t */\n\tonPaste: function(e) {\n\t\tvar self = this;\n\n\t\tif (self.isFull() || self.isInputHidden || self.isLocked) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\n\t\t// If a regex or string is included, this will split the pasted\n\t\t// input and create Items for each separate value\n\t\tif (self.settings.splitOn) {\n\n\t\t\t// Wait for pasted text to be recognized in value\n\t\t\tsetTimeout(function() {\n\t\t\t\tvar pastedText = self.$control_input.val();\n\t\t\t\tif(!pastedText.match(self.settings.splitOn)){ return }\n\n\t\t\t\tvar splitInput = pastedText\n\t\t\t\t\t.trim()\n\t\t\t\t\t.split(self.settings.splitOn);\n\t\t\t\tfor (var i = 0, n = splitInput.length; i < n; i++) {\n\t\t\t\t\tself.createItem(splitInput[i]);\n\t\t\t\t}\n\t\t\t}, 0);\n\t\t}\n\t},\n\n\t/**\n\t * Triggered on <input> keypress.\n\t *\n\t * @param {object} e\n\t * @returns {boolean}\n\t */\n\tonKeyPress: function(e) {\n\t\tif (this.isLocked) return e && e.preventDefault();\n\t\tvar character = String.fromCharCode(e.keyCode || e.which);\n\t\tif (this.settings.create && this.settings.mode === 'multi' && character === this.settings.delimiter) {\n\t\t\tthis.createItem();\n\t\t\te.preventDefault();\n\t\t\treturn false;\n\t\t}\n\t},\n\n\t/**\n\t * Triggered on <input> keydown.\n\t *\n\t * @param {object} e\n\t * @returns {boolean}\n\t */\n\tonKeyDown: function(e) {\n\t\tvar isInput = e.target === this.$control_input[0];\n\t\tvar self = this;\n\n\t\tif (self.isLocked) {\n\t\t\tif (e.keyCode !== KEY_TAB) {\n\t\t\t\te.preventDefault();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tswitch (e.keyCode) {\n\t\t\tcase KEY_A:\n\t\t\t\tif (self.isCmdDown) {\n\t\t\t\t\tself.selectAll();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase KEY_ESC:\n\t\t\t\tif (self.isOpen) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase KEY_N:\n\t\t\t\tif (!e.ctrlKey || e.altKey) break;\n\t\t\tcase KEY_DOWN:\n\t\t\t\tif (!self.isOpen && self.hasOptions) {\n\t\t\t\t\tself.open();\n\t\t\t\t} else if (self.$activeOption) {\n\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\tvar $next = self.getAdjacentOption(self.$activeOption, 1);\n\t\t\t\t\tif ($next.length) self.setActiveOption($next, true, true);\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\tcase KEY_P:\n\t\t\t\tif (!e.ctrlKey || e.altKey) break;\n\t\t\tcase KEY_UP:\n\t\t\t\tif (self.$activeOption) {\n\t\t\t\t\tself.ignoreHover = true;\n\t\t\t\t\tvar $prev = self.getAdjacentOption(self.$activeOption, -1);\n\t\t\t\t\tif ($prev.length) self.setActiveOption($prev, true, true);\n\t\t\t\t}\n\t\t\t\te.preventDefault();\n\t\t\t\treturn;\n\t\t\tcase KEY_RETURN:\n\t\t\t\tif (self.isOpen && self.$activeOption) {\n\t\t\t\t\tself.onOptionSelect({currentTarget: self.$activeOption});\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase KEY_LEFT:\n\t\t\t\tself.advanceSelection(-1, e);\n\t\t\t\treturn;\n\t\t\tcase KEY_RIGHT:\n\t\t\t\tself.advanceSelection(1, e);\n\t\t\t\treturn;\n\t\t\tcase KEY_TAB:\n\t\t\t\tif (self.settings.selectOnTab && self.isOpen && self.$activeOption) {\n\t\t\t\t\tself.onOptionSelect({currentTarget: self.$activeOption});\n\n\t\t\t\t\t// Default behaviour is to jump to the next field, we only want this\n\t\t\t\t\t// if the current field doesn't accept any more entries\n\t\t\t\t\tif (!self.isFull()) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.settings.create && self.createItem() && self.settings.showAddOptionOnCreate) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\tcase KEY_BACKSPACE:\n\t\t\tcase KEY_DELETE:\n\t\t\t\tself.deleteSelection(e);\n\t\t\t\treturn;\n\t\t}\n\n\t\tif ((self.isFull() || self.isInputHidden) && !(IS_MAC ? e.metaKey : e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\treturn;\n\t\t}\n\t},\n\n\t/**\n\t * Triggered on <input> input.\n\t *\n\t * @param {object} e\n\t * @returns {boolean}\n\t */\n\tonInput: function(e) {\n\t\tvar self = this;\n\n\t\tvar value = self.$control_input.val() || '';\n\t\tif (self.lastValue !== value) {\n\t\t\tself.lastValue = value;\n\t\t\tself.onSearchChange(value);\n\t\t\tself.refreshOptions();\n\t\t\tself.trigger('type', value);\n\t\t}\n\t},\n\n\t/**\n\t * Invokes the user-provide option provider / loader.\n\t *\n\t * Note: this function is debounced in the Selectize\n\t * constructor (by `settings.loadThrottle` milliseconds)\n\t *\n\t * @param {string} value\n\t */\n\tonSearchChange: function(value) {\n\t\tvar self = this;\n\t\tvar fn = self.settings.load;\n\t\tif (!fn) return;\n\t\tif (self.loadedSearches.hasOwnProperty(value)) return;\n\t\tself.loadedSearches[value] = true;\n\t\tself.load(function(callback) {\n\t\t\tfn.apply(self, [value, callback]);\n\t\t});\n\t},\n\n\t/**\n\t * Triggered on <input> focus.\n\t *\n\t * @param {FocusEvent} e (optional)\n\t * @returns {boolean}\n\t */\n\tonFocus: function(e) {\n\t\tvar self = this;\n\t\tvar wasFocused = self.isFocused;\n\n\t\tif (self.isDisabled) {\n\t\t\tself.blur();\n\t\t\te && e.preventDefault();\n\t\t\treturn false;\n\t\t}\n\n\t\tif (self.ignoreFocus) return;\n\t\tself.isFocused = true;\n\t\tif (self.settings.preload === 'focus') self.onSearchChange('');\n\n\t\tif (!wasFocused) self.trigger('focus');\n\n\t\tif (!self.$activeItems.length) {\n\t\t\tself.showInput();\n\t\t\tself.setActiveItem(null);\n\t\t\tself.refreshOptions(!!self.settings.openOnFocus);\n\t\t}\n\n\t\tself.refreshState();\n\t},\n\n\t/**\n\t * Triggered on <input> blur.\n\t *\n\t * @param {object} e\n\t * @param {Element} dest\n\t */\n\tonBlur: function(e, dest) {\n\t\tvar self = this;\n\t\tif (!self.isFocused) return;\n\t\tself.isFocused = false;\n\n\t\tif (self.ignoreFocus) {\n\t\t\treturn;\n\t\t}\n\t\t// Bug fix do not blur dropdown here\n\t\t// else if (!self.ignoreBlur && document.activeElement === self.$dropdown_content[0]) {\n\t\t// \t// necessary to prevent IE closing the dropdown when the scrollbar is clicked\n\t\t// \tself.ignoreBlur = true;\n\t\t// \tself.onFocus(e);\n\t\t// \treturn;\n\t\t// }\n\n\t\tvar deactivate = function() {\n\t\t\tself.close();\n\t\t\tself.setTextboxValue('');\n\t\t\tself.setActiveItem(null);\n\t\t\tself.setActiveOption(null);\n\t\t\tself.setCaret(self.items.length);\n\t\t\tself.refreshState();\n\n\t\t\t// IE11 bug: element still marked as active\n\t\t\tdest && dest.focus && dest.focus();\n\n\t\t\tself.isBlurring = false;\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.trigger('blur');\n\t\t};\n\n\t\tself.isBlurring = true;\n\t\tself.ignoreFocus = true;\n\t\tif (self.settings.create && self.settings.createOnBlur) {\n\t\t\tself.createItem(null, false, deactivate);\n\t\t} else {\n\t\t\tdeactivate();\n\t\t}\n\t},\n\n\t/**\n\t * Triggered when the user rolls over\n\t * an option in the autocomplete dropdown menu.\n\t *\n\t * @param {object} e\n\t * @returns {boolean}\n\t */\n\tonOptionHover: function(e) {\n\t\tif (this.ignoreHover) return;\n\t\tthis.setActiveOption(e.currentTarget, false);\n\t},\n\n\t/**\n\t * Triggered when the user clicks on an option\n\t * in the autocomplete dropdown menu.\n\t *\n\t * @param {object} e\n\t * @returns {boolean}\n\t */\n\tonOptionSelect: function(e) {\n\t\tvar value, $target, $option, self = this;\n\n\t\tif (e.preventDefault) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t$target = $(e.currentTarget);\n\t\tif ($target.hasClass('create')) {\n\t\t\tself.createItem(null, function() {\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t}\n\t\t\t});\n\t\t} else {\n\t\t\tvalue = $target.attr('data-value');\n\t\t\tif (typeof value !== 'undefined') {\n\t\t\t\tself.lastQuery = null;\n\t\t\t\tself.setTextboxValue('');\n\t\t\t\tself.addItem(value);\n\t\t\t\tif (self.settings.closeAfterSelect) {\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.settings.hideSelected && e.type && /mouse/.test(e.type)) {\n\t\t\t\t\tself.setActiveOption(self.getOption(value));\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Triggered when the user clicks on an item\n\t * that has been selected.\n\t *\n\t * @param {object} e\n\t * @returns {boolean}\n\t */\n\tonItemSelect: function(e) {\n\t\tvar self = this;\n\n\t\tif (self.isLocked) return;\n\t\tif (self.settings.mode === 'multi') {\n\t\t\te.preventDefault();\n\t\t\tself.setActiveItem(e.currentTarget, e);\n\t\t}\n\t},\n\n\t/**\n\t * Invokes the provided method that provides\n\t * results to a callback---which are then added\n\t * as options to the control.\n\t *\n\t * @param {function} fn\n\t */\n\tload: function(fn) {\n\t\tvar self = this;\n\t\tvar $wrapper = self.$wrapper.addClass(self.settings.loadingClass);\n\n\t\tself.loading++;\n\t\tfn.apply(self, [function(results) {\n\t\t\tself.loading = Math.max(self.loading - 1, 0);\n\t\t\tif (results && results.length) {\n\t\t\t\tself.addOption(results);\n\t\t\t\tself.refreshOptions(self.isFocused && !self.isInputHidden);\n\t\t\t}\n\t\t\tif (!self.loading) {\n\t\t\t\t$wrapper.removeClass(self.settings.loadingClass);\n\t\t\t}\n\t\t\tself.trigger('load', results);\n\t\t}]);\n\t},\n\n\t/**\n\t * Gets the value of input field of the control.\n\t *\n\t * @returns {string} value\n\t */\n\tgetTextboxValue: function() {\n\t\tvar $input = this.$control_input;\n\t\treturn $input.val();\n\t},\n\n\t/**\n\t * Sets the input field of the control to the specified value.\n\t *\n\t * @param {string} value\n\t */\n\tsetTextboxValue: function(value) {\n\t\tvar $input = this.$control_input;\n\t\tvar changed = $input.val() !== value;\n\t\tif (changed) {\n\t\t\t$input.val(value).triggerHandler('update');\n\t\t\tthis.lastValue = value;\n\t\t}\n\t},\n\n\t/**\n\t * Returns the value of the control. If multiple items\n\t * can be selected (e.g. <select multiple>), this returns\n\t * an array. If only one item can be selected, this\n\t * returns a string.\n\t *\n\t * @returns {mixed}\n\t */\n\tgetValue: function() {\n\t\tif (this.tagType === TAG_SELECT && this.$input.attr('multiple')) {\n\t\t\treturn this.items;\n\t\t} else {\n\t\t\treturn this.items.join(this.settings.delimiter);\n\t\t}\n\t},\n\n\t/**\n\t * Resets the selected items to the given value.\n\t *\n\t * @param {Array<String|Number>} value\n\t */\n\tsetValue: function(value, silent) {\n\t\tconst items = Array.isArray(value) ? value : [value];\n\t\tif (items.join('') === this.items.join('')) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events, function() {\n\t\t\tthis.clear(silent);\n\t\t\tthis.addItems(value, silent);\n\t\t});\n\t},\n\n\t/**\n\t * Resets the number of max items to the given value\n\t *\n\t * @param {number} value\n\t */\n\tsetMaxItems: function(value){\n\t\tif(value === 0) value = null; //reset to unlimited items.\n\t\tthis.settings.maxItems = value;\n\t\tthis.settings.mode = this.settings.mode || (this.settings.maxItems === 1 ? 'single' : 'multi');\n\t\tthis.refreshState();\n\t},\n\n\t/**\n\t * Sets the selected item.\n\t *\n\t * @param {object} $item\n\t * @param {object} e (optional)\n\t */\n\tsetActiveItem: function($item, e) {\n\t\tvar self = this;\n\t\tvar eventName;\n\t\tvar i, idx, begin, end, item, swap;\n\t\tvar $last;\n\n\t\tif (self.settings.mode === 'single') return;\n\t\t$item = $($item);\n\n\t\t// clear the active selection\n\t\tif (!$item.length) {\n\t\t\t$(self.$activeItems).removeClass('active');\n\t\t\tself.$activeItems = [];\n\t\t\tif (self.isFocused) {\n\t\t\t\tself.showInput();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\t// modify selection\n\t\teventName = e && e.type.toLowerCase();\n\n\t\tif (eventName === 'mousedown' && self.isShiftDown && self.$activeItems.length) {\n\t\t\t$last = self.$control.children('.active:last');\n\t\t\tbegin = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$last[0]]);\n\t\t\tend = Array.prototype.indexOf.apply(self.$control[0].childNodes, [$item[0]]);\n\t\t\tif (begin > end) {\n\t\t\t\tswap = begin;\n\t\t\t\tbegin = end;\n\t\t\t\tend = swap;\n\t\t\t}\n\t\t\tfor (i = begin; i <= end; i++) {\n\t\t\t\titem = self.$control[0].childNodes[i];\n\t\t\t\tif (self.$activeItems.indexOf(item) === -1) {\n\t\t\t\t\t$(item).addClass('active');\n\t\t\t\t\tself.$activeItems.push(item);\n\t\t\t\t}\n\t\t\t}\n\t\t\te.preventDefault();\n\t\t} else if ((eventName === 'mousedown' && self.isCtrlDown) || (eventName === 'keydown' && this.isShiftDown)) {\n\t\t\tif ($item.hasClass('active')) {\n\t\t\t\tidx = self.$activeItems.indexOf($item[0]);\n\t\t\t\tself.$activeItems.splice(idx, 1);\n\t\t\t\t$item.removeClass('active');\n\t\t\t} else {\n\t\t\t\tself.$activeItems.push($item.addClass('active')[0]);\n\t\t\t}\n\t\t} else {\n\t\t\t$(self.$activeItems).removeClass('active');\n\t\t\tself.$activeItems = [$item.addClass('active')[0]];\n\t\t}\n\n\t\t// ensure control has focus\n\t\tself.hideInput();\n\t\tif (!this.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t},\n\n\t/**\n\t * Sets the selected item in the dropdown menu\n\t * of available options.\n\t *\n\t * @param {object} $object\n\t * @param {boolean} scroll\n\t * @param {boolean} animate\n\t */\n\tsetActiveOption: function($option, scroll, animate) {\n\t\tvar height_menu, height_item, y;\n\t\tvar scroll_top, scroll_bottom;\n\t\tvar self = this;\n\n\t\tif (self.$activeOption) {\n\t\t\tself.$activeOption.removeClass('active');\n\t\t\tself.trigger('dropdown_item_deactivate', self.$activeOption.attr('data-value'));\n\t\t}\n\t\tself.$activeOption = null;\n\n\t\t$option = $($option);\n\t\tif (!$option.length) return;\n\n\t\tself.$activeOption = $option.addClass('active');\n\t\tif (self.isOpen) self.trigger('dropdown_item_activate', self.$activeOption.attr('data-value'));\n\n\t\tif (scroll || !isset(scroll)) {\n\n\t\t\theight_menu = self.$dropdown_content.height();\n\t\t\theight_item = self.$activeOption.outerHeight(true);\n\t\t\tscroll = self.$dropdown_content.scrollTop() || 0;\n\t\t\ty = self.$activeOption.offset().top - self.$dropdown_content.offset().top + scroll;\n\t\t\tscroll_top = y;\n\t\t\tscroll_bottom = y - height_menu + height_item;\n\n\t\t\tif (y + height_item > height_menu + scroll) {\n\t\t\t\tself.$dropdown_content.stop().animate({scrollTop: scroll_bottom}, animate ? self.settings.scrollDuration : 0);\n\t\t\t} else if (y < scroll) {\n\t\t\t\tself.$dropdown_content.stop().animate({scrollTop: scroll_top}, animate ? self.settings.scrollDuration : 0);\n\t\t\t}\n\n\t\t}\n\t},\n\n\t/**\n\t * Selects all items (CTRL + A).\n\t */\n\tselectAll: function() {\n\t\tvar self = this;\n\t\tif (self.settings.mode === 'single') return;\n\n\t\tself.$activeItems = Array.prototype.slice.apply(self.$control.children(':not(input)').addClass('active'));\n\t\tif (self.$activeItems.length) {\n\t\t\tself.hideInput();\n\t\t\tself.close();\n\t\t}\n\t\tself.focus();\n\t},\n\n\t/**\n\t * Hides the input element out of view, while\n\t * retaining its focus.\n\t */\n\thideInput: function() {\n\t\tvar self = this;\n\n\t\tself.setTextboxValue('');\n\t\tself.$control_input.css({opacity: 0, position: 'absolute', left: self.rtl ? 10000 : 0});\n\t\tself.isInputHidden = true;\n\t},\n\n\t/**\n\t * Restores input visibility.\n\t */\n\tshowInput: function() {\n\t\tthis.$control_input.css({opacity: 1, position: 'relative', left: 0});\n\t\tthis.isInputHidden = false;\n\t},\n\n\t/**\n\t * Gives the control focus.\n\t */\n\tfocus: function() {\n\t\tvar self = this;\n\t\tif (self.isDisabled) return self;\n\n\t\tself.ignoreFocus = true;\n\t\tself.$control_input[0].focus();\n\t\twindow.setTimeout(function() {\n\t\t\tself.ignoreFocus = false;\n\t\t\tself.onFocus();\n\t\t}, 0);\n\t\treturn self;\n\t},\n\n\t/**\n\t * Forces the control out of focus.\n\t *\n\t * @param {Element} dest\n\t */\n\tblur: function(dest) {\n\t\tthis.$control_input[0].blur();\n\t\tthis.onBlur(null, dest);\n\t\treturn this;\n\t},\n\n\t/**\n\t * Returns a function that scores an object\n\t * to show how good of a match it is to the\n\t * provided query.\n\t *\n\t * @param {string} query\n\t * @param {object} options\n\t * @return {function}\n\t */\n\tgetScoreFunction: function(query) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t},\n\n\t/**\n\t * Returns search options for sifter (the system\n\t * for scoring and sorting results).\n\t *\n\t * @see https://github.com/brianreavis/sifter.js\n\t * @return {object}\n\t */\n\tgetSearchOptions: function() {\n\t\tvar settings = this.settings;\n\t\tvar sort = settings.sortField;\n\t\tif (typeof sort === 'string') {\n\t\t\tsort = [{field: sort}];\n\t\t}\n\n\t\treturn {\n\t\t\tfields : settings.searchField,\n\t\t\tconjunction : settings.searchConjunction,\n\t\t\tsort : sort,\n\t\t\tnesting : settings.nesting,\n filter : settings.filter,\n respect_word_boundaries : settings.respect_word_boundaries\n\t\t};\n\t},\n\n\t/**\n\t * Searches through available options and returns\n\t * a sorted array of matches.\n\t *\n\t * Returns an object containing:\n\t *\n\t * - query {string}\n\t * - tokens {array}\n\t * - total {int}\n\t * - items {array}\n\t *\n\t * @param {string} query\n\t * @returns {object}\n\t */\n\tsearch: function(query) {\n\t\tvar i, value, score, result, calculateScore;\n\t\tvar self = this;\n\t\tvar settings = self.settings;\n\t\tvar options = this.getSearchOptions();\n\n\t\t// validate user-provided result scoring function\n\t\tif (settings.score) {\n\t\t\tcalculateScore = self.settings.score.apply(this, [query]);\n\t\t\tif (typeof calculateScore !== 'function') {\n\t\t\t\tthrow new Error('Selectize \"score\" setting must be a function that returns a function');\n\t\t\t}\n\t\t}\n\n\t\t// perform search\n if (query !== self.lastQuery) {\n if (settings.normalize) query = query.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\");\n\t\t\tself.lastQuery = query;\n\t\t\tresult = self.sifter.search(query, $.extend(options, {score: calculateScore}));\n\t\t\tself.currentResults = result;\n\t\t} else {\n\t\t\tresult = $.extend(true, {}, self.currentResults);\n\t\t}\n\n\t\t// filter out selected items\n\t\tif (settings.hideSelected) {\n\t\t\tfor (i = result.items.length - 1; i >= 0; i--) {\n\t\t\t\tif (self.items.indexOf(hash_key(result.items[i].id)) !== -1) {\n\t\t\t\t\tresult.items.splice(i, 1);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t},\n\n\t/**\n\t * Refreshes the list of available options shown\n\t * in the autocomplete dropdown menu.\n\t *\n\t * @param {boolean} triggerDropdown\n\t */\n\trefreshOptions: function(triggerDropdown) {\n\t\tvar i, j, k, n, groups, groups_order, option, option_html, optgroup, optgroups, html, html_children, has_create_option;\n\t\tvar $active, $active_before, $create;\n\n\t\tif (typeof triggerDropdown === 'undefined') {\n\t\t\ttriggerDropdown = true;\n\t\t}\n\n\t\tvar self = this;\n\t\tvar query = (self.$control_input.val()).trim();\n\t\tvar results = self.search(query);\n\t\tvar $dropdown_content = self.$dropdown_content;\n\t\tvar active_before = self.$activeOption && hash_key(self.$activeOption.attr('data-value'));\n\n\t\t// build markup\n\t\tn = results.items.length;\n\t\tif (typeof self.settings.maxOptions === 'number') {\n\t\t\tn = Math.min(n, self.settings.maxOptions);\n\t\t}\n\n\t\t// render and group available options individually\n\t\tgroups = {};\n\t\tgroups_order = [];\n\n\t\tfor (i = 0; i < n; i++) {\n\t\t\toption = self.options[results.items[i].id];\n\t\t\toption_html = self.render('option', option);\n\t\t\toptgroup = option[self.settings.optgroupField] || '';\n\t\t\toptgroups = Array.isArray(optgroup) ? optgroup : [optgroup];\n\n\t\t\tfor (j = 0, k = optgroups && optgroups.length; j < k; j++) {\n\t\t\t\toptgroup = optgroups[j];\n\t\t\t\tif (!self.optgroups.hasOwnProperty(optgroup) && typeof self.settings.optionGroupRegister === 'function') {\n\t\t\t\t\tvar regGroup;\n\t\t\t\t\tif (regGroup = self.settings.optionGroupRegister.apply(self, [optgroup])) {\n\t\t\t\t\t\tself.registerOptionGroup(regGroup);\n\t\t\t\t\t}\n\t\t\t\t}\n if (!self.optgroups.hasOwnProperty(optgroup)) {\n\t\t\t\t\toptgroup = '';\n\t\t\t\t}\n\t\t\t\tif (!groups.hasOwnProperty(optgroup)) {\n\t\t\t\t\tgroups[optgroup] = document.createDocumentFragment();\n\t\t\t\t\tgroups_order.push(optgroup);\n\t\t\t\t}\n\t\t\t\tgroups[optgroup].appendChild(option_html);\n\t\t\t}\n\t\t}\n\n\t\t// sort optgroups\n\t\tif (this.settings.lockOptgroupOrder) {\n\t\t\tgroups_order.sort(function(a, b) {\n\t\t\t\tvar a_order = self.optgroups[a] && self.optgroups[a].$order || 0;\n\t\t\t\tvar b_order = self.optgroups[b] && self.optgroups[b].$order || 0;\n\t\t\t\treturn a_order - b_order;\n\t\t\t});\n\t\t}\n\n\t\t// render optgroup headers & join groups\n\t\thtml = document.createDocumentFragment();\n\t\tfor (i = 0, n = groups_order.length; i < n; i++) {\n\t\t\toptgroup = groups_order[i];\n\t\t\tif (self.optgroups.hasOwnProperty(optgroup) && groups[optgroup].childNodes.length) {\n\t\t\t\t// render the optgroup header and options within it,\n\t\t\t\t// then pass it to the wrapper template\n\t\t\t\thtml_children = document.createDocumentFragment();\n\t\t\t\thtml_children.appendChild(self.render('optgroup_header', self.optgroups[optgroup]));\n\t\t\t\thtml_children.appendChild(groups[optgroup]);\n\n\t\t\t\thtml.appendChild(self.render('optgroup', $.extend({}, self.optgroups[optgroup], {\n\t\t\t\t\thtml: domToString(html_children),\n\t\t\t\t\tdom: html_children\n\t\t\t\t})));\n\t\t\t} else {\n\t\t\t\thtml.appendChild(groups[optgroup]);\n\t\t\t}\n\t\t}\n\n\t\t$dropdown_content.html(html);\n\n\t\t// highlight matching terms inline\n\t\tif (self.settings.highlight) {\n\t\t\t$dropdown_content.removeHighlight();\n\t\t\tif (results.query.length && results.tokens.length) {\n\t\t\t\tfor (i = 0, n = results.tokens.length; i < n; i++) {\n\t\t\t\t\thighlight($dropdown_content, results.tokens[i].regex);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// add \"selected\" class to selected options\n\t\tif (!self.settings.hideSelected) {\n\t\t\t// clear selection on all previously selected elements first\n\t\t\tself.$dropdown.find('.selected').removeClass('selected');\n\n\t\t\tfor (i = 0, n = self.items.length; i < n; i++) {\n\t\t\t\tself.getOption(self.items[i]).addClass('selected');\n\t\t\t}\n }\n\n if (self.settings.dropdownSize.sizeType !== 'auto' && self.isOpen) {\n self.setupDropdownHeight();\n }\n\n\t\t// add create option\n\t\thas_create_option = self.canCreate(query);\n\t\tif (has_create_option) {\n\t\t\tif(self.settings.showAddOptionOnCreate) {\n\t\t\t\t$dropdown_content.prepend(self.render('option_create', {input: query}));\n\t\t\t\t$create = $($dropdown_content[0].childNodes[0]);\n\t\t\t}\n\t\t}\n\n\t\t// activate\n\t\tself.hasOptions = results.items.length > 0 || ( has_create_option && self.settings.showAddOptionOnCreate ) || self.settings.setFirstOptionActive;\n\t\tif (self.hasOptions) {\n if (results.items.length > 0) {\n $active_before = active_before && self.getOption(active_before);\n if (results.query !== \"\" && self.settings.setFirstOptionActive) {\n $active = $dropdown_content.find('[data-selectable]:first')\n } else if (results.query !== \"\" && $active_before && $active_before.length) {\n $active = $active_before;\n } else if (self.settings.mode === 'single' && self.items.length) {\n $active = self.getOption(self.items[0]);\n }\n if (!$active || !$active.length) {\n if ($create && !self.settings.addPrecedence) {\n $active = self.getAdjacentOption($create, 1);\n } else {\n $active = $dropdown_content.find('[data-selectable]:first');\n }\n }\n\t\t\t} else {\n\t\t\t\t$active = $create;\n\t\t\t}\n\t\t\tself.setActiveOption($active);\n\t\t\tif (triggerDropdown && !self.isOpen) { self.open(); }\n\t\t} else {\n\t\t\tself.setActiveOption(null);\n\t\t\tif (triggerDropdown && self.isOpen) { self.close(); }\n\t\t}\n\t},\n\n\t/**\n\t * Adds an available option. If it already exists,\n\t * nothing will happen. Note: this does not refresh\n\t * the options list dropdown (use `refreshOptions`\n\t * for that).\n\t *\n\t * Usage:\n\t *\n\t * this.addOption(data)\n\t *\n\t * @param {object|array} data\n\t */\n\taddOption: function(data) {\n\t\tvar i, n, value, self = this;\n\n\t\tif (Array.isArray(data)) {\n\t\t\tfor (i = 0, n = data.length; i < n; i++) {\n\t\t\t\tself.addOption(data[i]);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tif (value = self.registerOption(data)) {\n\t\t\tself.userOptions[value] = true;\n\t\t\tself.lastQuery = null;\n\t\t\tself.trigger('option_add', value, data);\n\t\t}\n\t},\n\n\t/**\n\t * Registers an option to the pool of options.\n\t *\n\t * @param {object} data\n\t * @return {boolean|string}\n\t */\n\tregisterOption: function(data) {\n\t\tvar key = hash_key(data[this.settings.valueField]);\n\t\tif (typeof key === 'undefined' || key === null || this.options.hasOwnProperty(key)) return false;\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.options[key] = data;\n\t\treturn key;\n\t},\n\n\t/**\n\t * Registers an option group to the pool of option groups.\n\t *\n\t * @param {object} data\n\t * @return {boolean|string}\n\t */\n\tregisterOptionGroup: function(data) {\n\t\tvar key = hash_key(data[this.settings.optgroupValueField]);\n\t\tif (!key) return false;\n\n\t\tdata.$order = data.$order || ++this.order;\n\t\tthis.optgroups[key] = data;\n\t\treturn key;\n\t},\n\n\t/**\n\t * Registers a new optgroup for options\n\t * to be bucketed into.\n\t *\n\t * @param {string} id\n\t * @param {object} data\n\t */\n\taddOptionGroup: function(id, data) {\n\t\tdata[this.settings.optgroupValueField] = id;\n\t\tif (id = this.registerOptionGroup(data)) {\n\t\t\tthis.trigger('optgroup_add', id, data);\n\t\t}\n\t},\n\n\t/**\n\t * Removes an existing option group.\n\t *\n\t * @param {string} id\n\t */\n\tremoveOptionGroup: function(id) {\n\t\tif (this.optgroups.hasOwnProperty(id)) {\n\t\t\tdelete this.optgroups[id];\n\t\t\tthis.renderCache = {};\n\t\t\tthis.trigger('optgroup_remove', id);\n\t\t}\n\t},\n\n\t/**\n\t * Clears all existing option groups.\n\t */\n\tclearOptionGroups: function() {\n\t\tthis.optgroups = {};\n\t\tthis.renderCache = {};\n\t\tthis.trigger('optgroup_clear');\n\t},\n\n\t/**\n\t * Updates an option available for selection. If\n\t * it is visible in the selected items or options\n\t * dropdown, it will be re-rendered automatically.\n\t *\n\t * @param {string} value\n\t * @param {object} data\n\t */\n\tupdateOption: function(value, data) {\n\t\tvar self = this;\n\t\tvar $item, $item_new;\n\t\tvar value_new, index_item, cache_items, cache_options, order_old;\n\n\t\tvalue = hash_key(value);\n\t\tvalue_new = hash_key(data[self.settings.valueField]);\n\n\t\t// sanity checks\n\t\tif (value === null) return;\n\t\tif (!self.options.hasOwnProperty(value)) return;\n\t\tif (typeof value_new !== 'string') throw new Error('Value must be set in option data');\n\n\t\torder_old = self.options[value].$order;\n\n\t\t// update references\n\t\tif (value_new !== value) {\n\t\t\tdelete self.options[value];\n\t\t\tindex_item = self.items.indexOf(value);\n\t\t\tif (index_item !== -1) {\n\t\t\t\tself.items.splice(index_item, 1, value_new);\n\t\t\t}\n\t\t}\n\t\tdata.$order = data.$order || order_old;\n\t\tself.options[value_new] = data;\n\n\t\t// invalidate render cache\n\t\tcache_items = self.renderCache['item'];\n\t\tcache_options = self.renderCache['option'];\n\n\t\tif (cache_items) {\n\t\t\tdelete cache_items[value];\n\t\t\tdelete cache_items[value_new];\n\t\t}\n\t\tif (cache_options) {\n\t\t\tdelete cache_options[value];\n\t\t\tdelete cache_options[value_new];\n\t\t}\n\n\t\t// update the item if it's selected\n\t\tif (self.items.indexOf(value_new) !== -1) {\n\t\t\t$item = self.getItem(value);\n\t\t\t$item_new = $(self.render('item', data));\n\t\t\tif ($item.hasClass('active')) $item_new.addClass('active');\n\t\t\t$item.replaceWith($item_new);\n\t\t}\n\n\t\t// invalidate last query because we might have updated the sortField\n\t\tself.lastQuery = null;\n\n\t\t// update dropdown contents\n\t\tif (self.isOpen) {\n\t\t\tself.refreshOptions(false);\n\t\t}\n\t},\n\n\t/**\n\t * Removes a single option.\n\t *\n\t * @param {string} value\n\t * @param {boolean} silent\n\t */\n\tremoveOption: function(value, silent) {\n\t\tvar self = this;\n\t\tvalue = hash_key(value);\n\n\t\tvar cache_items = self.renderCache['item'];\n\t\tvar cache_options = self.renderCache['option'];\n\t\tif (cache_items) delete cache_items[value];\n\t\tif (cache_options) delete cache_options[value];\n\n\t\tdelete self.userOptions[value];\n\t\tdelete self.options[value];\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_remove', value);\n\t\tself.removeItem(value, silent);\n\t},\n\n\t/**\n\t * Clears all options, including all selected items\n\t *\n\t * @param {boolean} silent\n\t */\n\tclearOptions: function(silent) {\n\t\tvar self = this;\n\n\t\tself.loadedSearches = {};\n\t\tself.userOptions = {};\n\t\tself.renderCache = {};\n\t\tvar options = self.options;\n\t\t$.each(self.options, function(key, value) {\n\t\t\tif(self.items.indexOf(key) == -1) {\n\t\t\t\tdelete options[key];\n\t\t\t}\n\t\t});\n\t\tself.options = self.sifter.items = options;\n\t\tself.lastQuery = null;\n\t\tself.trigger('option_clear');\n\t\tself.clear(silent);\n\t},\n\n\t/**\n\t * Returns the jQuery element of the option\n\t * matching the given value.\n\t *\n\t * @param {string} value\n\t * @returns {object}\n\t */\n\tgetOption: function(value) {\n\t\treturn this.getElementWithValue(value, this.$dropdown_content.find('[data-selectable]'));\n\t},\n\n\t/**\n\t * Returns the jQuery element of the first\n\t * selectable option.\n\t *\n\t * @return {object}\n\t */\n\tgetFirstOption: function() {\n\t\tvar $options = this.$dropdown.find('[data-selectable]');\n\t\treturn $options.length > 0 ? $options.eq(0) : $();\n\t},\n\n\t/**\n\t * Returns the jQuery element of the next or\n\t * previous selectable option.\n\t *\n\t * @param {object} $option\n\t * @param {int} direction can be 1 for next or -1 for previous\n\t * @return {object}\n\t */\n\tgetAdjacentOption: function($option, direction) {\n\t\tvar $options = this.$dropdown.find('[data-selectable]');\n\t\tvar index = $options.index($option) + direction;\n\n\t\treturn index >= 0 && index < $options.length ? $options.eq(index) : $();\n\t},\n\n\t/**\n\t * Finds the first element with a \"data-value\" attribute\n\t * that matches the given value.\n\t *\n\t * @param {mixed} value\n\t * @param {object} $els\n\t * @return {object}\n\t */\n\tgetElementWithValue: function(value, $els) {\n\t\tvalue = hash_key(value);\n\n\t\tif (typeof value !== 'undefined' && value !== null) {\n\t\t\tfor (var i = 0, n = $els.length; i < n; i++) {\n\t\t\t\tif ($els[i].getAttribute('data-value') === value) {\n\t\t\t\t\treturn $($els[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn $();\n\t},\n\n\t/**\n\t * Finds the first element with a \"textContent\" property\n\t * that matches the given textContent value.\n\t *\n\t * @param {mixed} textContent\n\t * @param {boolean} ignoreCase\n\t * @param {object} $els\n\t * @return {object}\n\t */\n\tgetElementWithTextContent: function(textContent, ignoreCase ,$els) {\n\t\ttextContent = hash_key(textContent);\n\n\t\tif (typeof textContent !== 'undefined' && textContent !== null) {\n\t\t\tfor (var i = 0, n = $els.length; i < n; i++) {\n\t\t\t\tvar eleTextContent = $els[i].textContent\n\t\t\t\tif (ignoreCase == true) {\n\t\t\t\t\teleTextContent = (eleTextContent !== null) ? eleTextContent.toLowerCase() : null;\n\t\t\t\t\ttextContent = textContent.toLowerCase();\n\t\t\t\t}\n\t\t\t\tif (eleTextContent === textContent) {\n\t\t\t\t\treturn $($els[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn $();\n\t},\n\n\t/**\n\t * Returns the jQuery element of the item\n\t * matching the given value.\n\t *\n\t * @param {string} value\n\t * @returns {object}\n\t */\n\tgetItem: function(value) {\n\t\treturn this.getElementWithValue(value, this.$control.children());\n\t},\n\n\t/**\n\t * Returns the jQuery element of the item\n\t * matching the given textContent.\n\t *\n\t * @param {string} value\n\t * @param {boolean} ignoreCase\n\t * @returns {object}\n\t */\n\tgetFirstItemMatchedByTextContent: function(textContent, ignoreCase) {\n\t\tignoreCase = (ignoreCase !== null && ignoreCase === true) ? true : false;\n\t\treturn this.getElementWithTextContent(textContent, ignoreCase, this.$dropdown_content.find('[data-selectable]'));\n\t},\n\n\t/**\n\t * \"Selects\" multiple items at once. Adds them to the list\n\t * at the current caret position.\n\t *\n\t * @param {string} values\n\t * @param {boolean} silent\n\t */\n\taddItems: function(values, silent) {\n\t\tthis.buffer = document.createDocumentFragment();\n\n\t\tvar childNodes = this.$control[0].childNodes;\n\t\tfor (var i = 0; i < childNodes.length; i++) {\n\t\t\tthis.buffer.appendChild(childNodes[i]);\n\t\t}\n\n\t\tvar items = Array.isArray(values) ? values : [values];\n\t\tfor (var i = 0, n = items.length; i < n; i++) {\n\t\t\tthis.isPending = (i < n - 1);\n\t\t\tthis.addItem(items[i], silent);\n\t\t}\n\n\t\tvar control = this.$control[0];\n\t\tcontrol.insertBefore(this.buffer, control.firstChild);\n\n\t\tthis.buffer = null;\n\t},\n\n\t/**\n\t * \"Selects\" an item. Adds it to the list\n\t * at the current caret position.\n\t *\n\t * @param {string} value\n\t * @param {boolean} silent\n\t */\n\taddItem: function(value, silent) {\n\t\tvar events = silent ? [] : ['change'];\n\n\t\tdebounce_events(this, events, function() {\n\t\t\tvar $item, $option, $options;\n\t\t\tvar self = this;\n\t\t\tvar inputMode = self.settings.mode;\n\t\t\tvar i, active, value_next, wasFull;\n\t\t\tvalue = hash_key(value);\n\n\t\t\tif (self.items.indexOf(value) !== -1) {\n\t\t\t\tif (inputMode === 'single') self.close();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!self.options.hasOwnProperty(value)) return;\n\t\t\tif (inputMode === 'single') self.clear(silent);\n\t\t\tif (inputMode === 'multi' && self.isFull()) return;\n\n $item = $(self.render('item', self.options[value]));\n\t\t\twasFull = self.isFull();\n\t\t\tself.items.splice(self.caretPos, 0, value);\n self.insertAtCaret($item);\n\t\t\tif (!self.isPending || (!wasFull && self.isFull())) {\n\t\t\t\tself.refreshState();\n\t\t\t}\n\n\t\t\tif (self.isSetup) {\n\t\t\t\t$options = self.$dropdown_content.find('[data-selectable]');\n\n\t\t\t\t// update menu / remove the option (if this is not one item being added as part of series)\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\t$option = self.getOption(value);\n\t\t\t\t\tvalue_next = self.getAdjacentOption($option, 1).attr('data-value');\n\t\t\t\t\tself.refreshOptions(self.isFocused && inputMode !== 'single');\n\t\t\t\t\tif (value_next) {\n\t\t\t\t\t\tself.setActiveOption(self.getOption(value_next));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// hide the menu if the maximum number of items have been selected or no options are left\n\t\t\t\tif (!$options.length || self.isFull()) {\n\t\t\t\t\tself.close();\n\t\t\t\t} else if (!self.isPending) {\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\n\t\t\t\tself.updatePlaceholder();\n\t\t\t\tself.trigger('item_add', value, $item);\n\n\t\t\t\tif (!self.isPending) {\n\t\t\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t},\n\n\t/**\n\t * Removes the selected item matching\n\t * the provided value.\n\t *\n\t * @param {string} value\n\t */\n\tremoveItem: function(value, silent) {\n\t\tvar self = this;\n\t\tvar $item, i, idx;\n\n\t\t$item = (value instanceof $) ? value : self.getItem(value);\n\t\tvalue = hash_key($item.attr('data-value'));\n\t\ti = self.items.indexOf(value);\n\n\t\tif (i !== -1) {\n\t\t\tself.trigger('item_before_remove', value, $item);\n\t\t\t$item.remove();\n if ($item.hasClass('active')) {\n $item.removeClass('active');\n\t\t\t\tidx = self.$activeItems.indexOf($item[0]);\n\t\t\t\tself.$activeItems.splice(idx, 1);\n\t\t\t\t$item.removeClass('active');\n\t\t\t}\n\n\t\t\tself.items.splice(i, 1);\n\t\t\tself.lastQuery = null;\n\t\t\tif (!self.settings.persist && self.userOptions.hasOwnProperty(value)) {\n\t\t\t\tself.removeOption(value, silent);\n\t\t\t}\n\n\t\t\tif (i < self.caretPos) {\n\t\t\t\tself.setCaret(self.caretPos - 1);\n\t\t\t}\n\n\t\t\tself.refreshState();\n\t\t\tself.updatePlaceholder();\n\t\t\tself.updateOriginalInput({silent: silent});\n\t\t\tself.positionDropdown();\n\t\t\tself.trigger('item_remove', value, $item);\n\t\t}\n\t},\n\n\t/**\n\t * Invokes the `create` method provided in the\n\t * selectize options that should provide the data\n\t * for the new item, given the user input.\n\t *\n\t * Once this completes, it will be added\n\t * to the item list.\n\t *\n\t * @param {string} value\n\t * @param {boolean} [triggerDropdown]\n\t * @param {function} [callback]\n\t * @return {boolean}\n\t */\n\tcreateItem: function(input, triggerDropdown) {\n\t\tvar self = this;\n\t\tvar caret = self.caretPos;\n\t\tinput = input || (self.$control_input.val() || '').trim();\n\n\t\tvar callback = arguments[arguments.length - 1];\n\t\tif (typeof callback !== 'function') callback = function() {};\n\n\t\tif (typeof triggerDropdown !== 'boolean') {\n\t\t\ttriggerDropdown = true;\n\t\t}\n\n\t\tif (!self.canCreate(input)) {\n\t\t\tcallback();\n\t\t\treturn false;\n\t\t}\n\n\t\tself.lock();\n\n\t\tvar setup = (typeof self.settings.create === 'function') ? this.settings.create : function(input) {\n\t\t\tvar data = {};\n\t\t\tdata[self.settings.labelField] = input;\n\t\t\tvar key = input;\n\t\t\tif ( self.settings.formatValueToKey && typeof self.settings.formatValueToKey === 'function' ) {\n\t\t\t\tkey = self.settings.formatValueToKey.apply(this, [key]);\n\t\t\t\tif (key === null || typeof key === 'undefined' || typeof key === 'object' || typeof key === 'function') {\n\t\t\t\t\tthrow new Error('Selectize \"formatValueToKey\" setting must be a function that returns a value other than object or function.');\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata[self.settings.valueField] = key;\n\t\t\treturn data;\n\t\t};\n\n\t\tvar create = once(function(data) {\n\t\t\tself.unlock();\n\n\t\t\tif (!data || typeof data !== 'object') return callback();\n\t\t\tvar value = hash_key(data[self.settings.valueField]);\n\t\t\tif (typeof value !== 'string') return callback();\n\n\t\t\tself.setTextboxValue('');\n\t\t\tself.addOption(data);\n\t\t\tself.setCaret(caret);\n\t\t\tself.addItem(value);\n\t\t\tself.refreshOptions(triggerDropdown && self.settings.mode !== 'single');\n\t\t\tcallback(data);\n\t\t});\n\n\t\tvar output = setup.apply(this, [input, create]);\n\t\tif (typeof output !== 'undefined') {\n\t\t\tcreate(output);\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Re-renders the selected item lists.\n\t */\n\trefreshItems: function(silent) {\n\t\tthis.lastQuery = null;\n\n\t\tif (this.isSetup) {\n\t\t\tthis.addItem(this.items, silent);\n\t\t}\n\n\t\tthis.refreshState();\n\t\tthis.updateOriginalInput({silent: silent});\n\t},\n\n\t/**\n\t * Updates all state-dependent attributes\n\t * and CSS classes.\n\t */\n\trefreshState: function() {\n\t\tthis.refreshValidityState();\n\t\tthis.refreshClasses();\n\t},\n\n\t/**\n\t * Update the `required` attribute of both input and control input.\n\t *\n\t * The `required` property needs to be activated on the control input\n\t * for the error to be displayed at the right place. `required` also\n\t * needs to be temporarily deactivated on the input since the input is\n\t * hidden and can't show errors.\n\t */\n\trefreshValidityState: function() {\n\t\tif (!this.isRequired) return false;\n\n\t\tvar invalid = !this.items.length;\n\n\t\tthis.isInvalid = invalid;\n\t\tthis.$control_input.prop('required', invalid);\n\t\tthis.$input.prop('required', !invalid);\n\t},\n\n\t/**\n\t * Updates all state-dependent CSS classes.\n\t */\n\trefreshClasses: function() {\n\t\tvar self = this;\n\t\tvar isFull = self.isFull();\n\t\tvar isLocked = self.isLocked;\n\n\t\tself.$wrapper\n\t\t\t.toggleClass('rtl', self.rtl);\n\n\t\tself.$control\n\t\t\t.toggleClass('focus', self.isFocused)\n\t\t\t.toggleClass('disabled', self.isDisabled)\n\t\t\t.toggleClass('required', self.isRequired)\n\t\t\t.toggleClass('invalid', self.isInvalid)\n\t\t\t.toggleClass('locked', isLocked)\n\t\t\t.toggleClass('full', isFull).toggleClass('not-full', !isFull)\n\t\t\t.toggleClass('input-active', self.isFocused && !self.isInputHidden)\n\t\t\t.toggleClass('dropdown-active', self.isOpen)\n\t\t\t.toggleClass('has-options', !$.isEmptyObject(self.options))\n\t\t\t.toggleClass('has-items', self.items.length > 0);\n\n\t\tself.$control_input.data('grow', !isFull && !isLocked);\n\t},\n\n\t/**\n\t * Determines whether or not more items can be added\n\t * to the control without exceeding the user-defined maximum.\n\t *\n\t * @returns {boolean}\n\t */\n\tisFull: function() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t},\n\n\t/**\n\t * Refreshes the original <select> or <input>\n\t * element to reflect the current state.\n\t */\n\tupdateOriginalInput: function(opts) {\n\t\tvar i, n, existing, fresh, old, $options, label, value, values, self = this;\n\t\topts = opts || {};\n\n\t\tif (self.tagType === TAG_SELECT) {\n\t\t\t$options = self.$input.find('option');\n\t\t\texisting = [];\n\t\t\tfresh = [];\n\t\t\told = [];\n\t\t\tvalues = [];\n\n\t\t\t$options.get().forEach(function(option) {\n\t\t\t\texisting.push(option.value);\n\t\t\t});\n\n\t\t\tself.items.forEach(function(item) {\n\t\t\t\tlabel = self.options[item][self.settings.labelField] || '';\n\n\t\t\t\tvalues.push(item);\n\n\t\t\t\tif (existing.indexOf(item) != -1) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tfresh.push('<option value=\"' + escape_html(item) + '\" selected=\"selected\">' + escape_html(label) + '</option>');\n\t\t\t});\n\n\t\t\told = existing.filter(function(value) {\n\t\t\t\treturn values.indexOf(value) < 0;\n\t\t\t}).map(function(value) {\n\t\t\t\treturn 'option[value=\"' + value + '\"]';\n\t\t\t});\n\n\t\t\tif (existing.length - old.length + fresh.length === 0 && !self.$input.attr('multiple')) {\n\t\t\t\tfresh.push('<option value=\"\" selected=\"selected\"></option>');\n\t\t\t}\n\n\t\t\tself.$input.find(old.join(', ')).remove();\n\t\t\tself.$input.append(fresh.join(''));\n\t\t} else {\n\t\t\tself.$input.val(self.getValue());\n\t\t\tself.$input.attr('value',self.$input.val());\n\t\t}\n\n\t\tif (self.isSetup) {\n\t\t\tif (!opts.silent) {\n\t\t\t\tself.trigger('change', self.$input.val());\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Shows/hide the input placeholder depending\n\t * on if there items in the list already.\n\t */\n\tupdatePlaceholder: function() {\n\t\tif (!this.settings.placeholder) return;\n\t\tvar $input = this.$control_input;\n\n\t\tif (this.items.length) {\n\t\t\t$input.removeAttr('placeholder');\n\t\t} else {\n\t\t\t$input.attr('placeholder', this.settings.placeholder);\n\t\t}\n\t\t$input.triggerHandler('update', {force: true});\n\t},\n\n\t/**\n\t * Shows the autocomplete dropdown containing\n\t * the available options.\n\t */\n\topen: function() {\n\t\tvar self = this;\n\n\t\tif (\n self.isLocked ||\n self.isOpen ||\n (self.settings.mode === \"multi\" && self.isFull())\n )\n return;\n\t\tself.focus();\n\t\tself.isOpen = true;\n\t\tself.refreshState();\n self.$dropdown.css({ visibility: 'hidden', display: 'block' });\n self.setupDropdownHeight();\n\t\tself.positionDropdown();\n\t\tself.$dropdown.css({visibility: 'visible'});\n\t\tself.trigger('dropdown_open', self.$dropdown);\n\t},\n\n\t/**\n\t * Closes the autocomplete dropdown menu.\n\t */\n\tclose: function() {\n\t\tvar self = this;\n\t\tvar trigger = self.isOpen;\n\n\t\tif (self.settings.mode === 'single' && self.items.length) {\n\t\t\tself.hideInput();\n\n\t\t\t// Do not trigger blur while inside a blur event,\n\t\t\t// this fixes some weird tabbing behavior in FF and IE.\n\t\t\t// See #1164\n\t\t\tif (self.isBlurring) {\n\t\t\t\tself.$control_input[0].blur(); // close keyboard on iOS\n\t\t\t}\n\t\t}\n\n\t\tself.isOpen = false;\n\t\tself.$dropdown.hide();\n\t\tself.setActiveOption(null);\n\t\tself.refreshState();\n\n\t\tif (trigger) self.trigger('dropdown_close', self.$dropdown);\n\t},\n\n\t/**\n\t * Calculates and applies the appropriate\n\t * position of the dropdown.\n\t */\n\tpositionDropdown: function() {\n\t\tvar $control = this.$control;\n\t\tvar offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position();\n\t\toffset.top += $control.outerHeight(true);\n\t\tvar w = $control[0].getBoundingClientRect().width;\n\t\tif (this.settings.minWidth && this.settings.minWidth > w)\n\t\t{\n\t\t\tw = this.settings.minWidth;\n\t\t}\n\t\tthis.$dropdown.css({\n\t\t\twidth : w,\n\t\t\ttop : offset.top,\n\t\t\tleft : offset.left\n\t\t});\n\t},\n\n setupDropdownHeight: function () {\n if (typeof this.settings.dropdownSize === 'object' && this.settings.dropdownSize.sizeType !== 'auto') {\n var height = this.settings.dropdownSize.sizeValue;\n\n if (this.settings.dropdownSize.sizeType === 'numberItems') {\n // retrieve all items (included optgroup but exept the container .optgroup)\n var $items = this.$dropdown_content.find('*').not('.optgroup, .highlight').not(this.settings.ignoreOnDropwdownHeight);\n var totalHeight = 0;\n var marginTop = 0;\n var marginBottom = 0;\n var separatorHeight = 0;\n\n\n for (var i = 0; i < height; i++) {\n var $item = $($items[i]);\n\n if ($item.length === 0) {\n break;\n }\n\n totalHeight += $item.outerHeight(true);\n // If not selectable, it's an optgroup so we \"ignore\" for count items\n if (typeof $item.data('selectable') == 'undefined') {\n if ($item.hasClass('optgroup-header')) {\n var styles = window.getComputedStyle($item.parent()[0], ':before');\n\n if (styles) {\n marginTop = styles.marginTop ? Number(styles.marginTop.replace(/\\W*(\\w)\\w*/g, '$1')) : 0;\n marginBottom = styles.marginBottom ? Number(styles.marginBottom.replace(/\\W*(\\w)\\w*/g, '$1')) : 0;\n separatorHeight = styles.borderTopWidth ? Number(styles.borderTopWidth.replace(/\\W*(\\w)\\w*/g, '$1')) : 0;\n }\n }\n height++;\n }\n\n }\n\n // Get padding top for add to global height\n var paddingTop = this.$dropdown_content.css('padding-top') ? Number(this.$dropdown_content.css('padding-top').replace(/\\W*(\\w)\\w*/g, '$1')) : 0;\n var paddingBottom = this.$dropdown_content.css('padding-bottom') ? Number(this.$dropdown_content.css('padding-bottom').replace(/\\W*(\\w)\\w*/g, '$1')) : 0;\n\n height = (totalHeight + paddingTop + paddingBottom + marginTop + marginBottom + separatorHeight) + 'px';\n } else if (this.settings.dropdownSize.sizeType !== 'fixedHeight') {\n console.warn('Selectize.js - Value of \"sizeType\" must be \"fixedHeight\" or \"numberItems');\n return;\n }\n\n this.$dropdown_content.css({ height: height, maxHeight: 'none' });\n }\n },\n\n\t/**\n\t * Resets / clears all selected items\n\t * from the control.\n\t *\n\t * @param {boolean} silent\n\t */\n\tclear: function(silent) {\n\t\tvar self = this;\n\n\t\tif (!self.items.length) return;\n\t\tself.$control.children(':not(input)').remove();\n\t\tself.items = [];\n\t\tself.lastQuery = null;\n\t\tself.setCaret(0);\n\t\tself.setActiveItem(null);\n\t\tself.updatePlaceholder();\n\t\tself.updateOriginalInput({silent: silent});\n\t\tself.refreshState();\n\t\tself.showInput();\n\t\tself.trigger('clear');\n\t},\n\n\t/**\n\t * A helper method for inserting an element\n\t * at the current caret position.\n\t *\n\t * @param {object} $el\n\t */\n\tinsertAtCaret: function($el) {\n\t\tvar caret = Math.min(this.caretPos, this.items.length);\n var el = $el[0];\n /**\n * @type {HTMLElement}\n **/\n\t\tvar target = this.buffer || this.$control[0];\n\n\t\tif (caret === 0) {\n\t\t\ttarget.insertBefore(el, target.firstChild);\n\t\t} else {\n\t\t\ttarget.insertBefore(el, target.childNodes[caret]);\n\t\t}\n\n\t\tthis.setCaret(caret + 1);\n\t},\n\n\t/**\n\t * Removes the current selected item(s).\n\t *\n\t * @param {object} e (optional)\n\t * @returns {boolean}\n\t */\n\tdeleteSelection: function(e) {\n\t\tvar i, n, direction, selection, values, caret, option_select, $option_select, $tail;\n\t\tvar self = this;\n\n\t\tdirection = (e && e.keyCode === KEY_BACKSPACE) ? -1 : 1;\n\t\tselection = getInputSelection(self.$control_input[0]);\n\n\t\tif (self.$activeOption && !self.settings.hideSelected) {\n\t\t\tif (typeof self.settings.deselectBehavior === 'string' && self.settings.deselectBehavior === 'top') {\n\t\t\t\toption_select = self.getFirstOption().attr('data-value');\n\t\t\t} else {\n\t\t\t\toption_select = self.getAdjacentOption(self.$activeOption, -1).attr('data-value');\n\t\t\t}\n\t\t}\n\n\t\t// determine items that will be removed\n\t\tvalues = [];\n\n\t\tif (self.$activeItems.length) {\n\t\t\t$tail = self.$control.children('.active:' + (direction > 0 ? 'last' : 'first'));\n\t\t\tcaret = self.$control.children(':not(input)').index($tail);\n\t\t\tif (direction > 0) { caret++; }\n\n\t\t\tfor (i = 0, n = self.$activeItems.length; i < n; i++) {\n\t\t\t\tvalues.push($(self.$activeItems[i]).attr('data-value'));\n\t\t\t}\n\t\t\tif (e) {\n\t\t\t\te.preventDefault();\n\t\t\t\te.stopPropagation();\n\t\t\t}\n\t\t} else if ((self.isFocused || self.settings.mode === 'single') && self.items.length) {\n\t\t\tif (direction < 0 && selection.start === 0 && selection.length === 0) {\n\t\t\t\tvalues.push(self.items[self.caretPos - 1]);\n\t\t\t} else if (direction > 0 && selection.start === self.$control_input.val().length) {\n\t\t\t\tvalues.push(self.items[self.caretPos]);\n\t\t\t}\n\t\t}\n\n\t\t// allow the callback to abort\n\t\tif (!values.length || (typeof self.settings.onDelete === 'function' && self.settings.onDelete.apply(self, [values]) === false)) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// perform removal\n\t\tif (typeof caret !== 'undefined') {\n\t\t\tself.setCaret(caret);\n\t\t}\n\t\twhile (values.length) {\n\t\t\tself.removeItem(values.pop());\n\t\t}\n\n\t\tself.showInput();\n\t\tself.positionDropdown();\n\t\tself.refreshOptions(true);\n\n\t\t// select previous option\n\t\tif (option_select) {\n\t\t\t$option_select = self.getOption(option_select);\n\t\t\tif ($option_select.length) {\n\t\t\t\tself.setActiveOption($option_select);\n\t\t\t}\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t/**\n\t * Selects the previous / next item (depending\n\t * on the `direction` argument).\n\t *\n\t * > 0 - right\n\t * < 0 - left\n\t *\n\t * @param {int} direction\n\t * @param {object} e (optional)\n\t */\n\tadvanceSelection: function(direction, e) {\n\t\tvar tail, selection, idx, valueLength, cursorAtEdge, $tail;\n\t\tvar self = this;\n\n\t\tif (direction === 0) return;\n\t\tif (self.rtl) direction *= -1;\n\n\t\ttail = direction > 0 ? 'last' : 'first';\n\t\tselection = getInputSelection(self.$control_input[0]);\n\n\t\tif (self.isFocused && !self.isInputHidden) {\n\t\t\tvalueLength = self.$control_input.val().length;\n\t\t\tcursorAtEdge = direction < 0\n\t\t\t\t? selection.start === 0 && selection.length === 0\n\t\t\t\t: selection.start === valueLength;\n\n\t\t\tif (cursorAtEdge && !valueLength) {\n\t\t\t\tself.advanceCaret(direction, e);\n\t\t\t}\n\t\t} else {\n\t\t\t$tail = self.$control.children('.active:' + tail);\n\t\t\tif ($tail.length) {\n\t\t\t\tidx = self.$control.children(':not(input)').index($tail);\n\t\t\t\tself.setActiveItem(null);\n\t\t\t\tself.setCaret(direction > 0 ? idx + 1 : idx);\n\t\t\t}\n\t\t}\n\t},\n\n\t/**\n\t * Moves the caret left / right.\n\t *\n\t * @param {int} direction\n\t * @param {object} e (optional)\n\t */\n\tadvanceCaret: function(direction, e) {\n\t\tvar self = this, fn, $adj;\n\n\t\tif (direction === 0) return;\n\n\t\tfn = direction > 0 ? 'next' : 'prev';\n\t\tif (self.isShiftDown) {\n\t\t\t$adj = self.$control_input[fn]();\n\t\t\tif ($adj.length) {\n\t\t\t\tself.hideInput();\n\t\t\t\tself.setActiveItem($adj);\n\t\t\t\te && e.preventDefault();\n\t\t\t}\n\t\t} else {\n\t\t\tself.setCaret(self.caretPos + direction);\n\t\t}\n\t},\n\n\t/**\n\t * Moves the caret to the specified index.\n\t *\n\t * @param {int} i\n\t */\n\tsetCaret: function(i) {\n\t\tvar self = this;\n\n\t\tif (self.settings.mode === 'single') {\n\t\t\ti = self.items.length;\n\t\t} else {\n\t\t\ti = Math.max(0, Math.min(self.items.length, i));\n\t\t}\n\n\t\tif(!self.isPending) {\n\t\t\t// the input must be moved by leaving it in place and moving the\n\t\t\t// siblings, due to the fact that focus cannot be restored once lost\n\t\t\t// on mobile webkit devices\n\t\t\tvar j, n, fn, $children, $child;\n\t\t\t$children = self.$control.children(':not(input)');\n\t\t\tfor (j = 0, n = $children.length; j < n; j++) {\n\t\t\t\t$child = $($children[j]).detach();\n\t\t\t\tif (j < i) {\n\t\t\t\t\tself.$control_input.before($child);\n\t\t\t\t} else {\n\t\t\t\t\tself.$control.append($child);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tself.caretPos = i;\n\t},\n\n\t/**\n\t * Disables user input on the control. Used while\n\t * items are being asynchronously created.\n\t */\n\tlock: function() {\n\t\tthis.close();\n\t\tthis.isLocked = true;\n\t\tthis.refreshState();\n\t},\n\n\t/**\n\t * Re-enables user input on the control.\n\t */\n\tunlock: function() {\n\t\tthis.isLocked = false;\n\t\tthis.refreshState();\n\t},\n\n\t/**\n\t * Disables user input on the control completely.\n\t * While disabled, it cannot receive focus.\n\t */\n\tdisable: function() {\n\t\tvar self = this;\n\t\tself.$input.prop('disabled', true);\n\t\tself.$control_input.prop('disabled', true).prop('tabindex', -1);\n\t\tself.isDisabled = true;\n\t\tself.lock();\n\t},\n\n\t/**\n\t * Enables the control so that it can respond\n\t * to focus and user input.\n\t */\n\tenable: function() {\n\t\tvar self = this;\n\t\tself.$input.prop('disabled', false);\n\t\tself.$control_input.prop('disabled', false).prop('tabindex', self.tabIndex);\n\t\tself.isDisabled = false;\n\t\tself.unlock();\n\t},\n\n\t/**\n\t * Completely destroys the control and\n\t * unbinds all event listeners so that it can\n\t * be garbage collected.\n\t */\n\tdestroy: function() {\n\t\tvar self = this;\n\t\tvar eventNS = self.eventNS;\n\t\tvar revertSettings = self.revertSettings;\n\n\t\tself.trigger('destroy');\n\t\tself.off();\n\t\tself.$wrapper.remove();\n\t\tself.$dropdown.remove();\n\n\t\tself.$input\n\t\t\t.html('')\n\t\t\t.append(revertSettings.$children)\n\t\t\t.removeAttr('tabindex')\n\t\t\t.removeClass('selectized')\n\t\t\t.attr({tabindex: revertSettings.tabindex})\n\t\t\t.show();\n\n\t\tself.$control_input.removeData('grow');\n\t\tself.$input.removeData('selectize');\n\n\t\tif (--Selectize.count == 0 && Selectize.$testInput) {\n\t\t\tSelectize.$testInput.remove();\n\t\t\tSelectize.$testInput = undefined;\n\t\t}\n\n\t\t$(window).off(eventNS);\n\t\t$(document).off(eventNS);\n\t\t$(document.body).off(eventNS);\n\n\t\tdelete self.$input[0].selectize;\n\t},\n\n\t/**\n\t * A helper method for rendering \"item\" and\n\t * \"option\" templates, given the data.\n\t *\n\t * @param {string} templateName\n\t * @param {object} data\n\t * @returns {string}\n\t */\n\trender: function(templateName, data) {\n\t\tvar value, id, label;\n\t\tvar html = '';\n\t\tvar cache = false;\n\t\tvar self = this;\n\t\tvar regex_tag = /^[\\t \\r\\n]*<([a-z][a-z0-9\\-_]*(?:\\:[a-z][a-z0-9\\-_]*)?)/i;\n\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\tvalue = hash_key(data[self.settings.valueField]);\n\t\t\tcache = !!value;\n\t\t}\n\n\t\t// pull markup from cache if it exists\n\t\tif (cache) {\n\t\t\tif (!isset(self.renderCache[templateName])) {\n\t\t\t\tself.renderCache[templateName] = {};\n\t\t\t}\n\t\t\tif (self.renderCache[templateName].hasOwnProperty(value)) {\n\t\t\t\treturn self.renderCache[templateName][value];\n\t\t\t}\n\t\t}\n\n\t\t// render markup\n\t\thtml = $(self.settings.render[templateName].apply(this, [data, escape_html]));\n\n\t\t// add mandatory attributes\n\t\tif (templateName === 'option' || templateName === 'option_create') {\n\t\t\tif (!data[self.settings.disabledField]) {\n\t\t\t\thtml.attr('data-selectable', '');\n\t\t\t}\n\t\t}\n\t\telse if (templateName === 'optgroup') {\n\t\t\tid = data[self.settings.optgroupValueField] || '';\n\t\t\thtml.attr('data-group', id);\n\t\t\tif(data[self.settings.disabledField]) {\n\t\t\t\thtml.attr('data-disabled', '');\n\t\t\t}\n\t\t}\n\t\tif (templateName === 'option' || templateName === 'item') {\n\t\t\thtml.attr('data-value', value || '');\n\t\t}\n\n\t\t// update cache\n\t\tif (cache) {\n\t\t\tself.renderCache[templateName][value] = html[0];\n\t\t}\n\n\t\treturn html[0];\n\t},\n\n\t/**\n\t * Clears the render cache for a template. If\n\t * no template is given, clears all render\n\t * caches.\n\t *\n\t * @param {string} templateName\n\t */\n\tclearCache: function(templateName) {\n\t\tvar self = this;\n\t\tif (typeof templateName === 'undefined') {\n\t\t\tself.renderCache = {};\n\t\t} else {\n\t\t\tdelete self.renderCache[templateName];\n\t\t}\n\t},\n\n\t/**\n\t * Determines whether or not to display the\n\t * create item prompt, given a user input.\n\t *\n\t * @param {string} input\n\t * @return {boolean}\n\t */\n\tcanCreate: function(input) {\n\t\tvar self = this;\n\t\tif (!self.settings.create) return false;\n\t\tvar filter = self.settings.createFilter;\n\t\treturn input.length\n\t\t\t&& (typeof filter !== 'function' || filter.apply(self, [input]))\n\t\t\t&& (typeof filter !== 'string' || new RegExp(filter).test(input))\n\t\t\t&& (!(filter instanceof RegExp) || filter.test(input));\n\t}\n});\n\nSelectize.count = 0;\nSelectize.defaults = {\n options: [],\n optgroups: [],\n\n plugins: [],\n delimiter: ',',\n splitOn: null, // regexp or string for splitting up values from a paste command\n persist: true,\n diacritics: true,\n create: false,\n showAddOptionOnCreate: true,\n createOnBlur: false,\n createFilter: null,\n highlight: true,\n openOnFocus: true,\n maxOptions: 1000,\n maxItems: null,\n hideSelected: null,\n addPrecedence: false,\n selectOnTab: true,\n preload: false,\n allowEmptyOption: false,\n showEmptyOptionInDropdown: false,\n emptyOptionLabel: '--',\n setFirstOptionActive: false,\n closeAfterSelect: false,\n closeDropdownThreshold: 250, // number of ms to prevent reopening of dropdown after mousedown\n\n scrollDuration: 60,\n deselectBehavior: 'previous', //top, previous\n loadThrottle: 300,\n loadingClass: 'loading',\n\n dataAttr: 'data-data',\n optgroupField: 'optgroup',\n valueField: 'value',\n labelField: 'text',\n disabledField: 'disabled',\n optgroupLabelField: 'label',\n optgroupValueField: 'value',\n lockOptgroupOrder: false,\n\n sortField: '$order',\n searchField: ['text'],\n searchConjunction: 'and',\n respect_word_boundaries: true,\n\n mode: null,\n wrapperClass: '',\n inputClass: '',\n dropdownClass: '',\n dropdownContentClass: '',\n\n dropdownParent: null,\n\n copyClassesToDropdown: true,\n dropdownSize: {\n sizeType: 'auto', // 'numberItems' or 'fixedHeight'\n sizeValue: 'auto', // number of items or height value (px is default) or CSS height (px, rem, em, vh)\n },\n normalize: false,\n ignoreOnDropwdownHeight: 'img, i',\n search: true,\n\n /*\n load : null, // function(query, callback) { ... }\n score : null, // function(search) { ... }\n formatValueToKey : null, // function(key) { ... }\n optionGroupRegister : null, // function(optgroup) to register dynamically created option groups\n onInitialize : null, // function() { ... }\n onChange : null, // function(value) { ... }\n onItemAdd : null, // function(value, $item) { ... }\n onItemRemove : null, // function(value, $item) { ... }\n onClear : null, // function() { ... }\n onOptionAdd : null, // function(value, data) { ... }\n onOptionRemove : null, // function(value) { ... }\n onOptionClear : null, // function() { ... }\n onOptionGroupAdd : null, // function(id, data) { ... }\n onOptionGroupRemove : null, // function(id) { ... }\n onOptionGroupClear : null, // function() { ... }\n onDropdownOpen : null, // function($dropdown) { ... }\n onDropdownClose : null, // function($dropdown) { ... }\n onType : null, // function(str) { ... }\n onDelete : null, // function(values) { ... }\n */\n\n render: {\n /*\n item: null,\n optgroup: null,\n optgroup_header: null,\n option: null,\n option_create: null\n */\n }\n};\n\n$.fn.selectize = function (settings_user) {\n var defaults = $.fn.selectize.defaults;\n var settings = $.extend({}, defaults, settings_user);\n var attr_data = settings.dataAttr;\n var field_label = settings.labelField;\n var field_value = settings.valueField;\n var field_disabled = settings.disabledField;\n var field_optgroup = settings.optgroupField;\n var field_optgroup_label = settings.optgroupLabelField;\n var field_optgroup_value = settings.optgroupValueField;\n\n /**\n * Initializes selectize from a <input type=\"text\"> element.\n *\n * @param {JQuery} $input\n * @param {Object} settings_element\n */\n var init_textbox = function ($input, settings_element) {\n var i, n, values, option;\n\n var data_raw = $input.attr(attr_data);\n\n if (!data_raw) {\n var value = ($input.val() || '').trim();\n if (!settings.allowEmptyOption && !value.length) return;\n values = value.split(settings.delimiter);\n for (i = 0, n = values.length; i < n; i++) {\n option = {};\n option[field_label] = values[i];\n option[field_value] = values[i];\n settings_element.options.push(option);\n }\n settings_element.items = values;\n } else {\n settings_element.options = JSON.parse(data_raw);\n for (i = 0, n = settings_element.options.length; i < n; i++) {\n settings_element.items.push(settings_element.options[i][field_value]);\n }\n }\n };\n\n /**\n * Initializes selectize from a <select> element.\n *\n * @param {object} $input\n * @param {object} settings_element\n */\n var init_select = function ($input, settings_element) {\n var i, n, tagName, $children, order = 0;\n var options = settings_element.options;\n var optionsMap = {};\n\n var readData = function ($el) {\n var data = attr_data && $el.attr(attr_data);\n var allData = $el.data();\n var obj = {};\n\n if (typeof data === 'string' && data.length) {\n if (isJSON(data)) {\n Object.assign(obj, JSON.parse(data))\n } else {\n obj[data] = data;\n }\n }\n\n\n Object.assign(obj, allData);\n\n return obj || null;\n };\n\n var addOption = function ($option, group) {\n $option = $($option);\n\n var value = hash_key($option.val());\n if (!value && !settings.allowEmptyOption) return;\n\n // if the option already exists, it's probably been\n // duplicated in another optgroup. in this case, push\n // the current group to the \"optgroup\" property on the\n // existing option so that it's rendered in both places.\n if (optionsMap.hasOwnProperty(value)) {\n if (group) {\n var arr = optionsMap[value][field_optgroup];\n if (!arr) {\n optionsMap[value][field_optgroup] = group;\n } else if (!Array.isArray(arr)) {\n optionsMap[value][field_optgroup] = [arr, group];\n } else {\n arr.push(group);\n }\n }\n return;\n }\n\n var option = readData($option) || {};\n option[field_label] = option[field_label] || $option.text();\n option[field_value] = option[field_value] || value;\n option[field_disabled] = option[field_disabled] || $option.prop('disabled');\n option[field_optgroup] = option[field_optgroup] || group;\n option.styles = $option.attr('style') || '';\n option.classes = $option.attr('class') || '';\n\n optionsMap[value] = option;\n options.push(option);\n\n if ($option.is(':selected')) {\n settings_element.items.push(value);\n }\n };\n\n var addGroup = function ($optgroup) {\n var i, n, id, optgroup, $options;\n\n $optgroup = $($optgroup);\n id = $optgroup.attr('label');\n\n if (id) {\n optgroup = readData($optgroup) || {};\n optgroup[field_optgroup_label] = id;\n optgroup[field_optgroup_value] = id;\n optgroup[field_disabled] = $optgroup.prop('disabled');\n settings_element.optgroups.push(optgroup);\n }\n\n $options = $('option', $optgroup);\n for (i = 0, n = $options.length; i < n; i++) {\n addOption($options[i], id);\n }\n };\n\n settings_element.maxItems = $input.attr('multiple') ? null : 1;\n\n $children = $input.children();\n for (i = 0, n = $children.length; i < n; i++) {\n tagName = $children[i].tagName.toLowerCase();\n if (tagName === 'optgroup') {\n addGroup($children[i]);\n } else if (tagName === 'option') {\n addOption($children[i]);\n }\n }\n };\n\n return this.each(function () {\n if (this.selectize) return;\n\n var instance;\n var $input = $(this);\n var tag_name = this.tagName.toLowerCase();\n var placeholder = $input.attr('placeholder') || $input.attr('data-placeholder');\n if (!placeholder && !settings.allowEmptyOption) {\n placeholder = $input.children('option[value=\"\"]').text();\n }\n if (settings.allowEmptyOption && settings.showEmptyOptionInDropdown && !$input.children('option[value=\"\"]').length) {\n var input_html = $input.html();\n var label = escape_html(settings.emptyOptionLabel || '--');\n $input.html('<option value=\"\">' + label + '</option>' + input_html);\n }\n\n var settings_element = {\n 'placeholder': placeholder,\n 'options': [],\n 'optgroups': [],\n 'items': []\n };\n\n if (tag_name === 'select') {\n init_select($input, settings_element);\n } else {\n init_textbox($input, settings_element);\n }\n\n instance = new Selectize($input, $.extend(true, {}, defaults, settings_element, settings_user));\n instance.settings_user = settings_user;\n });\n};\n\n$.fn.selectize.defaults = Selectize.defaults;\n$.fn.selectize.support = {\n validity: SUPPORTS_VALIDITY_API\n};\n\nSelectize.define(\"auto_position\", function () {\n var self = this;\n\n const POSITION = {\n top: 'top',\n bottom: 'bottom',\n };\n\n self.positionDropdown = (function() {\n return function() {\n const $control = this.$control;\n const offset = this.settings.dropdownParent === 'body' ? $control.offset() : $control.position();\n offset.top += $control.outerHeight(true);\n\n const dropdownHeight = this.$dropdown.prop('scrollHeight') + 5; // 5 - padding value;\n const controlPosTop = this.$control.get(0).getBoundingClientRect().top;\n const wrapperHeight = this.$wrapper.height();\n const position = controlPosTop + dropdownHeight + wrapperHeight > window.innerHeight ? POSITION.top : POSITION.bottom;\n const styles = {\n width: $control.outerWidth(),\n left: offset.left\n };\n\n if (position === POSITION.top) {\n const styleToAdd = { bottom: offset.top, top: 'unset' };\n\n if (this.settings.dropdownParent === 'body') {\n styleToAdd.top = offset.top - this.$dropdown.outerHeight(true) - $control.outerHeight(true);\n styleToAdd.bottom = 'unset';\n }\n Object.assign(styles, styleToAdd);\n this.$dropdown.addClass('selectize-position-top');\n this.$control.addClass('selectize-position-top');\n } else {\n Object.assign(styles, { top: offset.top, bottom: 'unset' });\n this.$dropdown.removeClass('selectize-position-top');\n this.$control.removeClass('selectize-position-top');\n }\n\n this.$dropdown.css(styles);\n };\n }());\n});\n\nSelectize.define('auto_select_on_type', function(options) {\n\tvar self = this;\n\n\tself.onBlur = (function() {\n\t\tvar originalBlur = self.onBlur;\n\t\treturn function(e) {\n\t\t\tvar $matchedItem = self.getFirstItemMatchedByTextContent(self.lastValue, true);\n\t\t\tif (typeof $matchedItem.attr('data-value') !== 'undefined' && self.getValue() !== $matchedItem.attr('data-value'))\n\t\t\t{\n\t\t\t\tself.setValue($matchedItem.attr('data-value'));\n\t\t\t}\n\t\t\treturn originalBlur.apply(this, arguments);\n\t\t}\n\t}());\n});\n\n/**\n * Plugin: \"autofill_disable\" (selectize.js)\n * Copyright (c) 2013 Brian Reavis & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Ris Adams <selectize@risadams.com>\n */\n\nSelectize.define(\"autofill_disable\", function (options) {\n var self = this;\n\n self.setup = (function () {\n var original = self.setup;\n return function () {\n original.apply(self, arguments);\n\n // https://stackoverflow.com/questions/30053167/autocomplete-off-vs-false\n self.$control_input.attr({ autocomplete: \"new-password\", autofill: \"no\" });\n };\n })();\n});\n\n/**\n * Plugin: \"clear_button\" (selectize.js)\n * Copyright (c) 2013 Brian Reavis & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Fabien Winkler <fabien.winkler@outlook.fr>\n */\n\nSelectize.define(\"clear_button\", function (options) {\n var self = this;\n\n options = $.extend(\n {\n title: \"Clear\",\n className: \"clear\",\n label: \"×\",\n html: function (data) {\n return (\n '<a class=\"' + data.className + '\" title=\"' + data.title + '\"> ' + data.label + '</a>'\n );\n },\n },\n options\n );\n\n self.setup = (function () {\n var original = self.setup;\n return function () {\n original.apply(self, arguments);\n self.$button_clear = $(options.html(options));\n\n if (self.settings.mode === \"single\") self.$wrapper.addClass(\"single\");\n\n self.$wrapper.append(self.$button_clear);\n\n if (self.getValue() === \"\" || self.getValue().length === 0) {\n self.$wrapper.find(\".\" + options.className).css(\"display\", \"none\");\n }\n\n self.on(\"change\", function () {\n if (self.getValue() === \"\" || self.getValue().length === 0) {\n self.$wrapper.find(\".\" + options.className).css(\"display\", \"none\");\n } else {\n self.$wrapper.find(\".\" + options.className).css(\"display\", \"\");\n }\n });\n\n self.$wrapper.on(\"click\", \".\" + options.className, function (e) {\n e.preventDefault();\n e.stopImmediatePropagation();\n e.stopPropagation();\n\n if (self.isLocked) return;\n\n self.clear();\n self.$wrapper.find(\".\" + options.className).css(\"display\", \"none\");\n });\n };\n })();\n});\n\n/**\n * Plugin: \"drag_drop\" (selectize.js)\n * Copyright (c) 2013 Brian Reavis & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors*\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nSelectize.define('drag_drop', function(options) {\n\tif (!$.fn.sortable) throw new Error('The \"drag_drop\" plugin requires jQuery UI \"sortable\".');\n\tif (this.settings.mode !== 'multi') return;\n\tvar self = this;\n\n\tself.lock = (function() {\n\t\tvar original = self.lock;\n\t\treturn function() {\n\t\t\tvar sortable = self.$control.data('sortable');\n\t\t\tif (sortable) sortable.disable();\n\t\t\treturn original.apply(self, arguments);\n\t\t};\n\t})();\n\n\tself.unlock = (function() {\n\t\tvar original = self.unlock;\n\t\treturn function() {\n\t\t\tvar sortable = self.$control.data('sortable');\n\t\t\tif (sortable) sortable.enable();\n\t\t\treturn original.apply(self, arguments);\n\t\t};\n\t})();\n\n\tself.setup = (function() {\n\t\tvar original = self.setup;\n\t\treturn function() {\n\t\t\toriginal.apply(this, arguments);\n\n\t\t\tvar $control = self.$control.sortable({\n\t\t\t\titems: '[data-value]',\n\t\t\t\tforcePlaceholderSize: true,\n\t\t\t\tdisabled: self.isLocked,\n\t\t\t\tstart: function(e, ui) {\n\t\t\t\t\tui.placeholder.css('width', ui.helper.css('width'));\n\t\t\t\t\t// $control.css({overflow: 'visible'});\n\t\t\t\t\t$control.addClass('dragging');\n\t\t\t\t},\n\t\t\t\tstop: function() {\n\t\t\t\t\t// $control.css({overflow: 'hidden'});\n\t\t\t\t\t$control.removeClass('dragging');\n\t\t\t\t\tvar active = self.$activeItems ? self.$activeItems.slice() : null;\n\t\t\t\t\tvar values = [];\n\t\t\t\t\t$control.children('[data-value]').each(function() {\n\t\t\t\t\t\tvalues.push($(this).attr('data-value'));\n\t\t\t\t\t});\n\t\t\t\t\tself.isFocused = false;\n\t\t\t\t\tself.setValue(values);\n\t\t\t\t\tself.isFocused = true;\n\t\t\t\t\tself.setActiveItem(active);\n\t\t\t\t\tself.positionDropdown();\n\t\t\t\t}\n\t\t\t});\n\t\t};\n\t})();\n\n});\n\n/**\n * Plugin: \"dropdown_header\" (selectize.js)\n * Copyright (c) 2013 Brian Reavis & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nSelectize.define('dropdown_header', function(options) {\n\tvar self = this;\n\n\toptions = $.extend({\n\t\ttitle : 'Untitled',\n\t\theaderClass : 'selectize-dropdown-header',\n\t\ttitleRowClass : 'selectize-dropdown-header-title',\n\t\tlabelClass : 'selectize-dropdown-header-label',\n\t\tcloseClass : 'selectize-dropdown-header-close',\n\n\t\thtml: function(data) {\n\t\t\treturn (\n\t\t\t\t'<div class=\"' + data.headerClass + '\">' +\n\t\t\t\t\t'<div class=\"' + data.titleRowClass + '\">' +\n\t\t\t\t\t\t'<span class=\"' + data.labelClass + '\">' + data.title + '</span>' +\n\t\t\t\t\t\t'<a href=\"javascript:void(0)\" class=\"' + data.closeClass + '\">×</a>' +\n\t\t\t\t\t'</div>' +\n\t\t\t\t'</div>'\n\t\t\t);\n\t\t}\n\t}, options);\n\n\tself.setup = (function() {\n\t\tvar original = self.setup;\n\t\treturn function() {\n\t\t\toriginal.apply(self, arguments);\n\t\t\tself.$dropdown_header = $(options.html(options));\n self.$dropdown.prepend(self.$dropdown_header);\n self.$dropdown_header.find('.' + options.closeClass).on('click', function () {\n self.close();\n });\n\t\t};\n\t})();\n\n});\n\n/**\n * Plugin: \"optgroup_columns\" (selectize.js)\n * Copyright (c) 2013 Simon Hewitt & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors*\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Simon Hewitt <si@sjhewitt.co.uk>\n */\n\nSelectize.define('optgroup_columns', function(options) {\n\tvar self = this;\n\n\toptions = $.extend({\n\t\tequalizeWidth : true,\n\t\tequalizeHeight : true\n\t}, options);\n\n\tthis.getAdjacentOption = function($option, direction) {\n\t\tvar $options = $option.closest('[data-group]').find('[data-selectable]');\n\t\tvar index = $options.index($option) + direction;\n\n\t\treturn index >= 0 && index < $options.length ? $options.eq(index) : $();\n\t};\n\n\tthis.onKeyDown = (function() {\n\t\tvar original = self.onKeyDown;\n\t\treturn function(e) {\n\t\t\tvar index, $option, $options, $optgroup;\n\n\t\t\tif (this.isOpen && (e.keyCode === KEY_LEFT || e.keyCode === KEY_RIGHT)) {\n\t\t\t\tself.ignoreHover = true;\n\t\t\t\t$optgroup = this.$activeOption.closest('[data-group]');\n\t\t\t\tindex = $optgroup.find('[data-selectable]').index(this.$activeOption);\n\n\t\t\t\tif(e.keyCode === KEY_LEFT) {\n\t\t\t\t\t$optgroup = $optgroup.prev('[data-group]');\n\t\t\t\t} else {\n\t\t\t\t\t$optgroup = $optgroup.next('[data-group]');\n\t\t\t\t}\n\n\t\t\t\t$options = $optgroup.find('[data-selectable]');\n\t\t\t\t$option = $options.eq(Math.min($options.length - 1, index));\n\t\t\t\tif ($option.length) {\n\t\t\t\t\tthis.setActiveOption($option);\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn original.apply(this, arguments);\n\t\t};\n\t})();\n\n\tvar getScrollbarWidth = function() {\n\t\tvar div;\n\t\tvar width = getScrollbarWidth.width;\n\t\tvar doc = document;\n\n\t\tif (typeof width === 'undefined') {\n\t\t\tdiv = doc.createElement('div');\n\t\t\tdiv.innerHTML = '<div style=\"width:50px;height:50px;position:absolute;left:-50px;top:-50px;overflow:auto;\"><div style=\"width:1px;height:100px;\"></div></div>';\n\t\t\tdiv = div.firstChild;\n\t\t\tdoc.body.appendChild(div);\n\t\t\twidth = getScrollbarWidth.width = div.offsetWidth - div.clientWidth;\n\t\t\tdoc.body.removeChild(div);\n\t\t}\n\t\treturn width;\n\t};\n\n\tvar equalizeSizes = function() {\n\t\tvar i, n, height_max, width, width_last, width_parent, $optgroups;\n\n\t\t$optgroups = $('[data-group]', self.$dropdown_content);\n\t\tn = $optgroups.length;\n\t\tif (!n || !self.$dropdown_content.width()) return;\n\n\t\tif (options.equalizeHeight) {\n\t\t\theight_max = 0;\n\t\t\tfor (i = 0; i < n; i++) {\n\t\t\t\theight_max = Math.max(height_max, $optgroups.eq(i).height());\n\t\t\t}\n\t\t\t$optgroups.css({height: height_max});\n\t\t}\n\n\t\tif (options.equalizeWidth) {\n\t\t\twidth_parent = self.$dropdown_content.innerWidth() - getScrollbarWidth();\n\t\t\twidth = Math.round(width_parent / n);\n\t\t\t$optgroups.css({width: width});\n\t\t\tif (n > 1) {\n\t\t\t\twidth_last = width_parent - width * (n - 1);\n\t\t\t\t$optgroups.eq(n - 1).css({width: width_last});\n\t\t\t}\n\t\t}\n\t};\n\n\tif (options.equalizeHeight || options.equalizeWidth) {\n\t\thook.after(this, 'positionDropdown', equalizeSizes);\n\t\thook.after(this, 'refreshOptions', equalizeSizes);\n\t}\n\n\n});\n\n/**\n * Plugin: \"remove_button\" (selectize.js)\n * Copyright (c) 2013 Brian Reavis & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nSelectize.define('remove_button', function (options) {\n if (this.settings.mode === 'single') return;\n\n\toptions = $.extend({\n\t\t\tlabel : '×',\n\t\t\ttitle : 'Remove',\n\t\t\tclassName : 'remove',\n\t\t\tappend : true\n\t\t}, options);\n\n\t\tvar multiClose = function(thisRef, options) {\n\n\t\t\tvar self = thisRef;\n\t\t\tvar html = '<a href=\"javascript:void(0)\" class=\"' + options.className + '\" tabindex=\"-1\" title=\"' + escape_html(options.title) + '\">' + options.label + '</a>';\n\n\t\t\t/**\n\t\t\t * Appends an element as a child (with raw HTML).\n\t\t\t *\n\t\t\t * @param {string} html_container\n\t\t\t * @param {string} html_element\n\t\t\t * @return {string}\n\t\t\t */\n\t\t\tvar append = function(html_container, html_element) {\n\t\t\t\tvar pos = html_container.search(/(<\\/[^>]+>\\s*)$/);\n\t\t\t\treturn html_container.substring(0, pos) + html_element + html_container.substring(pos);\n\t\t\t};\n\n\t\t\tthisRef.setup = (function() {\n\t\t\t\tvar original = self.setup;\n\t\t\t\treturn function() {\n\t\t\t\t\t// override the item rendering method to add the button to each\n\t\t\t\t\tif (options.append) {\n\t\t\t\t\t\tvar render_item = self.settings.render.item;\n\t\t\t\t\t\tself.settings.render.item = function(data) {\n\t\t\t\t\t\t\treturn append(render_item.apply(thisRef, arguments), html);\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\n\t\t\t\t\toriginal.apply(thisRef, arguments);\n\n\t\t\t\t\t// add event listener\n\t\t\t\t\tthisRef.$control.on('click', '.' + options.className, function(e) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif (self.isLocked) return;\n\n\t\t\t\t\t\tvar $item = $(e.currentTarget).parent();\n\t\t\t\t\t\tself.setActiveItem($item);\n\t\t\t\t\t\tif (self.deleteSelection()) {\n\t\t\t\t\t\t\tself.setCaret(self.items.length);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t});\n\n\t\t\t\t};\n\t\t\t})();\n\t\t};\n\n multiClose(this, options);\n});\n\n/**\n * Plugin: \"restore_on_backspace\" (selectize.js)\n * Copyright (c) 2013 Brian Reavis & contributors\n * Copyright (c) 2020-2022 Selectize Team & contributors\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\"); you may not use this\n * file except in compliance with the License. You may obtain a copy of the License at:\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF\n * ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n *\n * @author Brian Reavis <brian@thirdroute.com>\n */\n\nSelectize.define('restore_on_backspace', function(options) {\n\tvar self = this;\n\n\toptions.text = options.text || function(option) {\n\t\treturn option[this.settings.labelField];\n\t};\n\n\tthis.onKeyDown = (function() {\n\t\tvar original = self.onKeyDown;\n\t\treturn function(e) {\n\t\t\tvar index, option;\n\t\t\tif (e.keyCode === KEY_BACKSPACE && this.$control_input.val() === '' && !this.$activeItems.length) {\n\t\t\t\tindex = this.caretPos - 1;\n\t\t\t\tif (index >= 0 && index < this.items.length) {\n\t\t\t\t\toption = this.options[this.items[index]];\n\t\t\t\t\tif (this.deleteSelection(e)) {\n\t\t\t\t\t\tthis.setTextboxValue(options.text.apply(this, [option]));\n\t\t\t\t\t\tthis.refreshOptions(true);\n\t\t\t\t\t}\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn original.apply(this, arguments);\n\t\t};\n\t})();\n});\n\nSelectize.define('select_on_focus', function(options) {\n\tvar self = this;\n\n\tself.on('focus', function() {\n\t\tvar originalFocus = self.onFocus;\n\t\treturn function(e) {\n\t\t\tvar value = self.getItem(self.getValue()).text();\n\t\t\tself.clear();\n\t\t\tself.setTextboxValue(value);\n\t\t\tself.$control_input.select();\n\t\t\tsetTimeout( function () {\n\t\t\t\tif (self.settings.selectOnTab) {\n\t\t\t\t\tself.setActiveOption(self.getFirstItemMatchedByTextContent(value));\n\t\t\t\t}\n\t\t\t\tself.settings.score = null;\n\t\t\t},0);\n\t\t\treturn originalFocus.apply(this, arguments);\n\t\t};\n\t}());\n\n\tself.onBlur = (function() {\n\t\tvar originalBlur = self.onBlur;\n\t\treturn function(e) {\n\t\t\tif (self.getValue() === \"\" && self.lastValidValue !== self.getValue()) {\n\t\t\t\tself.setValue(self.lastValidValue);\n\t\t\t}\n\t\t\tsetTimeout( function () {\n\t\t\t\tself.settings.score = function() {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\treturn 1;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}, 0 );\n\t\t\treturn originalBlur.apply(this, arguments);\n\t\t}\n\t}());\n\tself.settings.score = function() {\n\t\treturn function() { return 1; };\n\t};\n\n});\n\nSelectize.define('tag_limit', function (options) {\n const self = this\n options.tagLimit = options.tagLimit\n this.onBlur = (function (e) {\n const original = self.onBlur\n\n return function (e) {\n original.apply(this, e);\n if (!e)\n return\n const $control = this.$control\n const $items = $control.find('.item')\n const limit = options.tagLimit\n if (limit === undefined || $items.length <= limit)\n return\n\n $items.toArray().forEach(function(item, index) {\n if (index < limit)\n return\n $(item).hide()\n });\n\n $control.append('<span><b>' + ($items.length - limit) + '</b></span>')\n };\n })()\n\n this.onFocus = (function (e) {\n const original = self.onFocus\n\n return function (e) {\n original.apply(this, e);\n if (!e)\n return\n const $control = this.$control\n const $items = $control.find('.item')\n $items.show()\n $control.find('span').remove()\n\n };\n })()\n});\n\n return Selectize;\n}));\n"],"sourceRoot":""}