{"version":3,"file":"selects-BcvwTZ6L.js","sources":["../../../node_modules/@selectize/selectize/dist/js/selectize.js","../../../app/frontend/javascript/components/selects.js"],"sourcesContent":["/**\n * Selectize (v0.15.2)\n * https://selectize.dev\n *\n * Copyright (c) 2013-2015 Brian Reavis & contributors\n * Copyright (c) 2020-2023 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 \n * @author Ris Adams \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';\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 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 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$.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\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 ) {\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\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\nvar MicroPlugin = {};\nMicroPlugin.mixin = function (Interface) {\n\n Interface.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 (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\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 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 Interface.define = function (name, fn) {\n Interface.plugins[name] = {\n 'name': name,\n 'fn': fn\n };\n };\n};\n\nconst nanoid = (t = 21) => crypto.getRandomValues(new Uint8Array(t))\n .reduce(((t, e) =>\n t += (e &= 63) < 36 ? e.toString(36) :\n e < 62 ? (e - 26).toString(36).toUpperCase()\n : e > 62 ? \"-\" : \"_\"), \"\");\n\n\nvar Sifter = function (items, settings) {\n this.items = items;\n this.settings = settings || { diacritics: true };\n};\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\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\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 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 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\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 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 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 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 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\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\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 fn_score = options.score || self.getScoreFunction(search);\n\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 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\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\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 || 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̈ƝɲȠƞᵰᶇɳȵɴNnŊŋ]',\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 i18nChars = '';\n var lookup = {};\n for (k in DIACRITICS) {\n if (DIACRITICS.hasOwnProperty(k)) {\n chunk = DIACRITICS[k].substring(2, DIACRITICS[k].length - 1);\n i18nChars += 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('[' + i18nChars + ']', 'g');\n return function (str) {\n return str.replace(regexp, function (i18nChar) {\n return lookup[i18nChar];\n }).toLowerCase();\n };\n})();\n\nvar IS_MAC = uaDetect(\"macOS\", /Mac/);\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;\nvar TAG_SELECT = 1;\nvar TAG_INPUT = 2;\n\nvar SUPPORTS_VALIDITY_API = !uaDetect(\"Android\", /android/i) && !!document.createElement('input').validity;\n\nvar isset = function (object) {\n return typeof object !== 'undefined';\n};\n\nvar isArray = Array.isArray || function (vArg) {\n return Object.prototype.toString.call(vArg) === '[object Array]';\n}\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\nvar escape_html = function (str) {\n return (str + '')\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"');\n};\n\nvar escape_replace = function (str) {\n return (str + '').replace(/\\$/g, '$$$$');\n};\n\nvar hook = {};\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\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\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\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\nvar debounce_events = function (self, types, fn) {\n var type;\n var trigger = self.trigger;\n var event_args = {};\n\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 fn.apply(self, []);\n self.trigger = trigger;\n\n for (type in event_args) {\n if (event_args.hasOwnProperty(type)) {\n trigger.apply(self, event_args[type]);\n }\n }\n};\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\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\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\nvar measureString = function (str, $parent) {\n if (!str) {\n return 0;\n }\n\n if (!Selectize.$testInput) {\n Selectize.$testInput = $('').css({\n position: 'absolute',\n width: 'auto',\n padding: 0,\n whiteSpace: 'pre'\n });\n\n $('
').css({\n position: 'absolute',\n width: 0,\n height: 0,\n overflow: 'hidden'\n }).attr({\n 'aria-hidden': true\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\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) || \n (keyCode >= 65 && keyCode <= 90) || \n (keyCode >= 96 && keyCode <= 111) || \n (keyCode >= 186 && keyCode <= 222) || \n keyCode === 32 \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 var width = $input.attr('readonly') ? 0 : 4;\n placeholder = $input.attr('placeholder');\n if (placeholder) {\n placeholderWidth = measureString(placeholder, $input) + width;\n } else {\n placeholderWidth = 0;\n }\n\n width = Math.max(measureString(value, $input), placeholderWidth) + width;\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 if (console.group) console.group();\n console.error(options.explanation);\n if (console.group) console.groupEnd();\n }\n};\n\nvar isJSON = function (data) {\n try {\n JSON.parse(data);\n } catch (e) {\n return false;\n }\n return true;\n};\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 Selectize = function($input, settings) {\n\tvar key, i, n, dir, input, self = this;\n\tinput = $input[0];\n\tinput.selectize = self;\n\n\tvar computedStyle = window.getComputedStyle && window.getComputedStyle(input, null);\n\tdir = computedStyle ? computedStyle.getPropertyValue('direction') : input.currentStyle && input.currentStyle.direction;\n dir = dir || $input.parents('[dir]:first').attr('dir') || '';\n\n self.settings = {};\n\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\tself.sifter = new Sifter(this.options, {diacritics: settings.diacritics});\n\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\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\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\nMicroEvent.mixin(Selectize);\nMicroPlugin.mixin(Selectize);\n\n$.extend(Selectize.prototype, {\n\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 var noArrowClass;\n\n\t\tinputMode = self.settings.mode;\n classes = $input.attr('class') || '';\n noArrowClass = settings.showArrow ? '' : ' no-arrow';\n\n $wrapper = $('
').addClass(settings.wrapperClass).addClass(classes + ' selectize-control').addClass(inputMode);\n\t\t$control = $('
').addClass(settings.inputClass + noArrowClass + ' selectize-input items').appendTo($wrapper);\n\t\t$control_input = $('').appendTo($control).attr('tabindex', $input.is(':disabled') ? '-1' : self.tabIndex);\n\t\t$dropdown_parent = $(settings.dropdownParent || $wrapper);\n\t\t$dropdown = $('
').addClass(settings.dropdownClass).addClass(inputMode + ' selectize-dropdown').hide().appendTo($dropdown_parent);\n\t\t$dropdown_content = $('
').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 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\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\tblur : function() { return self.onBlur.apply(self, arguments); },\n\t\t\tfocus : function() { 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\tif (\n\t\t\t\t\te.target === self.$dropdown[0] ||\n\t\t\t\t\tself.$dropdown.has(e.target).length)\n\t\t\t\t{\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (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 var inputPlaceholder = $('
');\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\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\tif (settings.preload === true) {\n\t\t\tself.onSearchChange('');\n\t\t}\n\n\t},\n\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 '
' + data.html + '
';\n\t\t\t},\n\t\t\t'optgroup_header': function(data, escape) {\n\t\t\t\treturn '
' + escape(data[field_optgroup]) + '
';\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 '' + escape(data[field_label]) + '
';\n\t\t\t},\n\t\t\t'item': function(data, escape) {\n\t\t\t\treturn '
' + escape(data[field_label]) + '
';\n\t\t\t},\n\t\t\t'option_create': function(data, escape) {\n\t\t\t\treturn '
Add ' + escape(data.input) + '
';\n\t\t\t}\n\t\t};\n\n\t\tself.settings.render = $.extend({}, templates, self.settings.render);\n\t},\n\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\tonClick: function(e) {\n\t\tvar self = this;\n\n if (self.isDropdownClosing) {\n return;\n }\n\n\t\tif (!self.isFocused || !self.isOpen) {\n\t\t\tself.focus();\n\t\t\te.preventDefault();\n\t\t}\n\t},\n\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\tif (!defaultPrevented) {\n window.setTimeout(function () {\n if (!self.isOpen) {\n self.focus();\n }\n }, 0);\n\t\t\t}\n\t\t}\n\t\tif ($target !== self.$control_input[0] || self.$control_input.val() === '') {\n\t\t\tif (self.settings.mode === 'single') {\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 && $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 = $target;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.lastOpenTarget = $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\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\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\tif (self.settings.splitOn) {\n\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\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\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\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\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\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\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\tonBlur: function(e, dest) {\n\t\tvar self = this;\n\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\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\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\tonOptionHover: function(e) {\n\t\tif (this.ignoreHover) return;\n\t\tthis.setActiveOption(e.currentTarget, false);\n\t},\n\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\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\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\tgetTextboxValue: function() {\n\t\tvar $input = this.$control_input;\n\t\treturn $input.val();\n\t},\n\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\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\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\tsetMaxItems: function(value){\n\t\tif(value === 0) value = null; \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\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\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\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\tself.hideInput();\n\t\tif (!this.isFocused) {\n\t\t\tself.focus();\n\t\t}\n\t},\n\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\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\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\tshowInput: function() {\n\t\tthis.$control_input.css({opacity: 1, position: 'relative', left: 0});\n\t\tthis.isInputHidden = false;\n\t},\n\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\tblur: function(dest) {\n\t\tthis.$control_input[0].blur();\n\t\tthis.onBlur(null, dest);\n\t\treturn this;\n\t},\n\n\tgetScoreFunction: function(query) {\n\t\treturn this.sifter.getScoreFunction(query, this.getSearchOptions());\n\t},\n\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\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\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 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\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\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\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\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\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\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\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\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\tif (!self.settings.hideSelected) {\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\t\t}\n\n\t\tif (self.settings.dropdownSize.sizeType !== 'auto' && self.isOpen) {\n\t\t\tself.setupDropdownHeight();\n\t\t}\n\n\t\tself.positionDropdown();\n\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\tself.hasOptions = results.items.length > 0 || ( has_create_option && self.settings.showAddOptionOnCreate ) || self.settings.setFirstOptionActive;\n\n\t\tif (self.hasOptions) {\n \t\tif (results.items.length > 0) {\n\t\t\t$active_before = active_before && self.getOption(active_before);\n\t\t\tif (results.query !== \"\" && self.settings.setFirstOptionActive) {\n\t\t\t$active = $dropdown_content.find('[data-selectable]:first')\n\t\t\t} else if (results.query !== \"\" && $active_before && $active_before.length) {\n\t\t\t$active = $active_before;\n\t\t\t} else if (self.settings.mode === 'single' && self.items.length) {\n\t\t\t$active = self.getOption(self.items[0]);\n\t\t\t}\n\t\t\tif (!$active || !$active.length) {\n\t\t\tif ($create && !self.settings.addPrecedence) {\n\t\t\t\t$active = self.getAdjacentOption($create, 1);\n\t\t\t} else {\n\t\t\t\t$active = $dropdown_content.find('[data-selectable]:first');\n\t\t\t}\n\t\t\t}\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\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\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\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\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\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\tclearOptionGroups: function() {\n\t\tthis.optgroups = {};\n\t\tthis.renderCache = {};\n\t\tthis.trigger('optgroup_clear');\n\t},\n\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\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\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\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\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\tself.lastQuery = null;\n\n\t\tif (self.isOpen) {\n\t\t\tself.refreshOptions(false);\n\t\t}\n\t},\n\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\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\tgetOption: function(value) {\n\t\treturn this.getElementWithValue(value, this.$dropdown_content.find('[data-selectable]'));\n\t},\n\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\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\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\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\tgetItem: function(value) {\n\t\treturn this.getElementWithValue(value, this.$control.children());\n\t},\n\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\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\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\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\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\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\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\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\trefreshState: function() {\n\t\tthis.refreshValidityState();\n\t\tthis.refreshClasses();\n\t},\n\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\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\tisFull: function() {\n\t\treturn this.settings.maxItems !== null && this.items.length >= this.settings.maxItems;\n\t},\n\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('');\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=\"' + escape_html(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('');\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\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\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\t\tself.$dropdown.css({ visibility: 'hidden', display: 'block' });\n\t\tself.setupDropdownHeight();\n self.positionDropdown();\n\t\tself.$dropdown.css({visibility: 'visible'});\n\t\tself.trigger('dropdown_open', self.$dropdown);\n\t},\n\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\tif (self.isBlurring) {\n\t\t\t\tself.$control_input[0].blur(); \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\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 = this.$wrapper[0].style.width !== 'fit-content' ? this.settings.dropdownParent === 'body' ? 'max-content' : '100%' : 'max-content';\n\t\tif (this.settings.minWidth && this.settings.minWidth > w)\n\t\t{\n\t\t\tw = this.settings.minWidth;\n\t\t}\n\n if (this.settings.dropdownParent !== 'body' && w === 'max-content' && $control.outerWidth(true) >= this.$dropdown.outerWidth(true)) {\n w = '100%';\n }\n\n this.$dropdown.css({\n\t\t\twidth : w,\n minWidth : $control.outerWidth(true),\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 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 (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 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\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\tinsertAtCaret: function($el) {\n\t\tvar caret = Math.min(this.caretPos, this.items.length);\n var el = $el[0];\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\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\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\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\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\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\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\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\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\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\tlock: function() {\n\t\tthis.close();\n\t\tthis.isLocked = true;\n\t\tthis.refreshState();\n\t},\n\n\tunlock: function() {\n\t\tthis.isLocked = false;\n\t\tthis.refreshState();\n\t},\n\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\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\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\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\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\thtml = $(self.settings.render[templateName].apply(this, [data, escape_html]));\n\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\tif (cache) {\n\t\t\tself.renderCache[templateName][value] = html[0];\n\t\t}\n\n\t\treturn html[0];\n\t},\n\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\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, \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, \n\n scrollDuration: 60,\n deselectBehavior: '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: false, \n normalize: 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',\n sizeValue: 'auto',\n },\n\n ignoreOnDropwdownHeight: 'img, i',\n search: true,\n showArrow: true,\n\n render: {\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 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 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 (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('' + 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; \n const controlPosTop = this.$control.get(0).getBoundingClientRect().top;\n const wrapperHeight = this.$wrapper.height();\n const controlPosBottom = self.$control.get(0).getBoundingClientRect().bottom\n const position =\n controlPosTop + dropdownHeight + wrapperHeight > window.innerHeight &&\n controlPosBottom - dropdownHeight - wrapperHeight >= 0 ?\n POSITION.top :\n POSITION.bottom;\n let w = this.$wrapper[0].style.width !== 'fit-content' ? this.settings.dropdownParent === 'body' ? 'max-content' : '100%' : 'max-content';\n const styles = {\n width: w,\n minWidth : $control.outerWidth(true),\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 if (this.settings.dropdownParent !== 'body' && w === 'max-content' && $control.outerWidth(true) >= this.$dropdown.outerWidth(true)) {\n w = '100%';\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\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 self.$control_input.attr({ name: nanoid(21), autocomplete: nanoid(21) });\n };\n })();\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 ' ' + data.label + ''\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\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.addClass('dragging');\n\t\t\t\t},\n\t\t\t\tstop: function() {\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\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'
' +\n\t\t\t\t\t'
' +\n\t\t\t\t\t\t'' + data.title + '' +\n\t\t\t\t\t\t'×' +\n\t\t\t\t\t'
' +\n\t\t\t\t'
'\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\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 = '
';\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\nSelectize.define('read-only', function(options){\n\tvar self = this;\n\tthis.setup = (function() {\n\t\tvar original = self.setup;\n\t\treturn function() {\n\t\t\toriginal.apply(this, arguments);\n\t\t\tif(this.$dropdown.hasClass(\"read-only\"))this.$control_input.attr('readonly', 'readonly');\n\t\t};\n\t})();\n\tthis.readonly = (function() {\n\t\treturn function(state) {\n\t\t\tif(state){\n\t\t\t\tthis.$control_input.attr('readonly', 'readonly');\n\t\t\t\tthis.$dropdown.addClass(\"read-only\")\n\t\t\t}\n\t\t\telse{\n\t\t\t\tthis.$control_input.removeAttr('readonly');\n\t\t\t\tthis.$dropdown.removeClass(\"read-only\")\n\t\t\t}\n\t\t};\n\t})();\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 = '' + options.label + '';\n\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\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\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\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('' + ($items.length - limit) + '')\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","// TODO: Add to this documentation\n//\n// data-autosubmit: Causes a change in the select box to autosubmit it's form\n\nimport $ from \"jquery\"\nimport selectize from '@selectize/selectize/dist/js/selectize'\nimport Loader from \"@/javascript/components/loader\"\nimport { SelectizeToggler } from \"@/javascript/components/toggling\"\nimport reportError from \"@/javascript/components/errors\"\n\nconst originalSelectize = $.fn.selectize\n\n// var getParents\nconst MAX_DROPDOWN_HEIGHT = 400\nconst DROPDOWN_DIRECTION_BREAKPOINT = 250\n\nconst getParents = (elem) => {\n const result = []\n\n while ((elem = elem.parentNode) !== document.body) {\n result.push(elem)\n }\n return result\n}\n\nexport default function Selectize (element, givenOptions) {\n return new Promise((resolve, _reject) => {\n const options = {}\n options.dropdownParent = 'body'\n if(!element.classList.contains('with-search')) {\n options.search = false\n }\n if(!options.hasOwnProperty('createOnBlur')) {\n options.createOnBlur = true\n }\n if(element.classList.contains('allow-add')) {\n options.create = true\n }\n options.sortField = element.dataset.sortField\n\n if(givenOptions && givenOptions.render) {\n options.render = givenOptions.render\n delete givenOptions.render\n } else {\n options.render = {}\n }\n\n if (element.dataset.autocomplete && element.dataset.autocompleteUrl) {\n options.load = function(query, callback) {\n if(!query.length){\n return\n }\n\n const url = new URL(element.dataset.autocompleteUrl, window.location.origin)\n url.searchParams.set('q', query)\n\n return fetch(url)\n .then((response) => response.json())\n .then((data) => callback(data) )\n .catch((error) => {\n reportError(error)\n callback()\n })\n }\n\n options.onLoad = function () {\n this.loadedSearches = {}\n this.renderCache = {}\n this.$wrapper.removeClass(this.settings.loadingClass)\n }\n }\n\n options.render['item'] ||= function (data, escape) {\n let result = '
' + escape(data[this.settings.labelField])\n if(this.settings.mode === 'multi') {\n result += ''\n }\n result += '
'\n return result\n }\n\n Object.entries(givenOptions).forEach((entry) => {\n const [key, value] = entry\n options[key] = value\n })\n\n options.onChange = function (event) {\n this.$input[0].dispatchEvent(new Event('change', {bubbles: true}))\n }\n\n options.onInitialize = function () {\n this.on('dropdown_open', () => {\n if(this.scrollingSorted) {\n return\n }\n\n getParents(this.$wrapper[0]).forEach((element) => {\n element.addEventListener('scroll', () => {\n const wrapperBounds = this.$wrapper[0].getBoundingClientRect()\n const elementBounds = element.getBoundingClientRect()\n if(wrapperBounds.bottom < elementBounds.top ||\n wrapperBounds.top > elementBounds.bottom) {\n this.close()\n\n } else {\n this.positionDropdown()\n }\n })\n })\n\n this.scrollingSorted = true\n })\n\n new OptionToggler(element).bind()\n resolve(this)\n }\n\n originalSelectize.apply($(element), [options])\n\n if(element.classList.contains('nokeyboard')) {\n element.selectize.$control_input[0].readOnly = true\n }\n\n element.selectize.$control_input[0].autocomplete = 'new-password'\n\n if(element.dataset.autosubmit) {\n element.selectize.on('change', (_newValue) => {\n if(element.form) {\n element.form.requestSubmit()\n }\n })\n }\n })\n}\n\n$.fn.selectize = (options) => {\n this.forEach((elem) => {\n Selectize(elem, options)\n })\n return this\n}\n\nObject.entries(originalSelectize).forEach((entry) => {\n const [prop, value] = entry\n\n if(originalSelectize.hasOwnProperty(prop)) {\n $.fn.selectize[prop] = value\n }\n})\n\n$(document).on('click', '.selectize-control.multi .item .remove', function () {\n const $this = $(this)\n const selectize = $this.closest('.selectize-control').siblings('select')[0].selectize\n if(selectize.isDisabled) {\n return\n }\n\n selectize.removeItem($this.closest('.item').attr('data-value'))\n selectize.showInput()\n selectize.positionDropdown()\n selectize.refreshOptions(true)\n})\n\nLoader.functional((container, resolve) => {\n Promise.all(\n [...container.querySelectorAll('select')]\n .filter((element) => !element.classList.contains('no-js'))\n .map((element) => Selectize(element, {search: true}))\n ).then(resolve)\n})\n\nselectize.prototype.updateDropDownPosition = function () {\n const dropdown = this.$dropdown[0]\n const rect = dropdown.getBoundingClientRect()\n const maxHeight = window.innerHeight - rect.top\n\n if(maxHeight < MAX_DROPDOWN_HEIGHT && maxHeight > DROPDOWN_DIRECTION_BREAKPOINT) {\n this.topPositioned = false\n this.$dropdown_content[0].style.setProperty('max-height', `${maxHeight}px`)\n return\n }\n\n this.topPositioned = dropdown.getBoundingClientRect().bottom > window.innerHeight\n}\n\nconst originalPostionDropdown = selectize.prototype.positionDropdown\nselectize.prototype.positionDropdown = function () {\n originalPostionDropdown.apply(this, [])\n const dropdown = this.$dropdown[0]\n const originControl = this.$control[0]\n const originControlWidth = originControl.offsetWidth\n this.$dropdown_content[0].style.removeProperty('max-height')\n const extraWidth = getComputedStyle(dropdown).getPropertyValue('--extra-width')\n\n this.updateDropDownPosition()\n\n if(this.topPositioned) {\n const newTop = parseInt(dropdown.style.top) - this.$dropdown.height() - this.$control.outerHeight(true) - 4;\n dropdown.style.setProperty('top', newTop + 'px')\n }\n\n if(extraWidth && originControlWidth) {\n dropdown.style.setProperty('width', 'calc(' + originControlWidth + 'px + ' + extraWidth + ')')\n } else {\n dropdown.style.setProperty('width', originControlWidth + 'px')\n }\n}\n\nconst originalRefreshOptions = selectize.prototype.refreshOptions\nselectize.prototype.refreshOptions = function () {\n const result = originalRefreshOptions.apply(this, arguments)\n this.positionDropdown()\n return result\n}\n\n// Bind a toggler for select option that have `data-toggle=''`\n//\n// This can be used to have a select option that toggles multiple elements when selected\nclass OptionToggler {\n constructor (select) {\n this.select = select\n }\n\n bind () {\n const elemsToValues = new ElementsToValues\n const children = this.select.selectize.revertSettings.$children\n const options = [...children.find('option').add(children.filter('option'))] // Find options in optgroups too\n\n options\n .filter((option) => option.dataset.toggle)\n .forEach((option) => {\n elemsToValues.add(option.dataset.toggle, option.value)\n })\n\n Object.entries(elemsToValues.mapping).forEach((entry) => {\n const [elem, values] = entry\n const toggledContent = document.querySelector(elem)\n new SelectizeToggler(this.select, toggledContent, null, {values: values})\n })\n }\n}\n\n// Used to flatten the mapping of CSS selectors to toggle to selected options.\n//\n// This is because the elements to be toggled can be on multiple select options\n// in different combinations and we only want one toggler per toggled element,\n// or they will fight each other\nclass ElementsToValues {\n constructor () {\n this.mapping = {}\n }\n\n add (selector, value) {\n selector.split(',').forEach((newSelector) => {\n newSelector = newSelector.trim()\n this.mapping[newSelector] ||= []\n this.mapping[newSelector].push(value)\n })\n }\n}\n\n// Non-selectize logic\n// This is the logic for selects that are not selectize\n\ndocument.addEventListener('change', (e) => {\n const target = e.target\n if(!target.matches('select.no-js')) { return }\n\n if(target.dataset.autosubmit && target.form) {\n target.form.requestSubmit()\n }\n})\n"],"names":["root","factory","module","require$$0","this","$","highlight","$element","pattern","regex","node","skip","pos","match","spannode","middlebit","middleclone","i","parent","MicroEvent","event","fct","n","events","destObject","props","MicroPlugin","Interface","plugins","key","self","queue","isArray","name","plugin","fn","nanoid","t","e","Sifter","items","settings","query","respect_word_boundaries","trim","letter","tokens","words","escape_regex","DIACRITICS","object","callback","iterator","is_array","search","options","fields","token_count","nesting","scoreValue","value","token","score","scoreObject","field_count","data","getattr","sum","field","fields_count","multiplier","multipliers","get_field","implicit_score","sort","result","a","b","cmp","extend","option_fields","option_sort","option_sort_empty","fn_sort","fn_score","item","id","asciifold","k","obj","names","str","chunk","i18nChars","lookup","regexp","i18nChar","IS_MAC","uaDetect","KEY_A","KEY_RETURN","KEY_ESC","KEY_LEFT","KEY_UP","KEY_P","KEY_RIGHT","KEY_DOWN","KEY_N","KEY_BACKSPACE","KEY_DELETE","KEY_SHIFT","KEY_CMD","KEY_CTRL","KEY_TAB","TAG_SELECT","TAG_INPUT","SUPPORTS_VALIDITY_API","isset","vArg","hash_key","escape_html","hook","method","original","once","called","debounce","delay","timeout","args","debounce_events","types","type","trigger","event_args","watchChildEvent","$parent","selector","child","getInputSelection","input","sel","selLen","transferStyles","$from","$to","properties","styles","measureString","Selectize","autoGrow","$input","currentWidth","update","keyCode","printable","width","placeholder","placeholderWidth","shift","character","selection","domToString","d","tmp","isJSON","platform","re","dir","computedStyle","eventNS","$window","$document","$wrapper","$control","$control_input","$dropdown","$dropdown_content","$dropdown_parent","inputMode","classes","classes_plugins","inputId","noArrowClass","delimiterEscaped","inputPlaceholder","inputChildren","field_label","field_value","field_optgroup","templates","escape","callbacks","defaultPrevented","$target","pastedText","splitInput","$next","$prev","wasFocused","dest","deactivate","results","changed","silent","$item","eventName","idx","begin","end","swap","$last","$option","scroll","animate","height_menu","height_item","y","scroll_top","scroll_bottom","calculateScore","triggerDropdown","j","groups","groups_order","option","option_html","optgroup","optgroups","html","html_children","has_create_option","$active","$active_before","$create","active_before","regGroup","a_order","b_order","$item_new","value_new","index_item","cache_items","cache_options","order_old","$options","direction","index","$els","textContent","ignoreCase","eleTextContent","values","childNodes","control","value_next","wasFull","caret","setup","create","output","invalid","isFull","isLocked","opts","existing","fresh","old","label","offset","w","height","$items","totalHeight","marginTop","marginBottom","separatorHeight","paddingTop","paddingBottom","$el","el","target","option_select","$option_select","$tail","tail","valueLength","cursorAtEdge","$adj","$children","$child","revertSettings","templateName","cache","filter","settings_user","defaults","attr_data","field_disabled","field_optgroup_label","field_optgroup_value","init_textbox","settings_element","data_raw","init_select","tagName","optionsMap","readData","allData","addOption","group","arr","addGroup","$optgroup","instance","tag_name","input_html","POSITION","dropdownHeight","controlPosTop","wrapperHeight","controlPosBottom","position","styleToAdd","originalBlur","$matchedItem","sortable","ui","active","getScrollbarWidth","div","doc","equalizeSizes","height_max","width_last","width_parent","$optgroups","state","multiClose","thisRef","append","html_container","html_element","render_item","originalFocus","limit","originalSelectize","MAX_DROPDOWN_HEIGHT","DROPDOWN_DIRECTION_BREAKPOINT","getParents","elem","element","givenOptions","resolve","_reject","url","response","error","reportError","_a","entry","wrapperBounds","elementBounds","OptionToggler","_newValue","prop","$this","selectize","Loader","container","dropdown","rect","maxHeight","originalPostionDropdown","originControlWidth","extraWidth","newTop","originalRefreshOptions","select","elemsToValues","ElementsToValues","children","toggledContent","SelectizeToggler","newSelector"],"mappings":"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","x_google_ignoreList":[0]}