{"version":3,"file":"tail.select-Alo9bfeH.js","sources":["../../../node_modules/tail.select.js/js/tail.select.js"],"sourcesContent":["/*\r\n | tail.select - The vanilla solution to make your HTML select fields AWESOME!\r\n | @file ./js/tail.select.js\r\n | @author wolffe \r\n | @author SamBrishes \r\n | @version 0.5.23\r\n |\r\n | @website https://github.com/wolffe/tail.select.js\r\n | @license X11 / MIT License\r\n | @copyright Copyright © 2020 - 2023 wolffe \r\n | @copyright Copyright © 2014 - 2019 SamBrishes, pytesNET \r\n */\r\n;(function(root, factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n define(function () {\r\n return factory(root);\r\n });\r\n } else if (typeof module === \"object\" && module.exports) {\r\n module.exports = factory(root);\r\n } else {\r\n if (typeof root.tail === \"undefined\") {\r\n root.tail = {};\r\n }\r\n root.tail.select = factory(root);\r\n\r\n // jQuery Support\r\n if (typeof jQuery !== \"undefined\") {\r\n jQuery.fn.tailselect = function (o) {\r\n var r = [], i;\r\n this.each(function () {\r\n if ((i = tail.select(this, o)) !== false) {\r\n r.push(i);\r\n }\r\n });\r\n return (r.length === 1) ? r[0] : (r.length === 0) ? false : r;\r\n };\r\n }\r\n\r\n // MooTools Support\r\n if (typeof(MooTools) != \"undefined\") {\r\n Element.implement({\r\n tailselect: function (o) {\r\n return new tail.select(this, o);\r\n }\r\n });\r\n }\r\n }\r\n}(window, function (root) {\r\n \"use strict\";\r\n var w = root, d = root.document;\r\n\r\n // Internal Helper Methods\r\n function cHAS(el, name) {\r\n return (el && \"classList\" in el) ? el.classList.contains(name) : false;\r\n }\r\n function cADD(el, name) {\r\n return (el && \"classList\" in el) ? el.classList.add(name) : undefined;\r\n }\r\n function cREM(el, name) {\r\n return (el && \"classList\" in el) ? el.classList.remove(name) : undefined;\r\n }\r\n function trigger(el, event, opt) {\r\n if (CustomEvent && CustomEvent.name) {\r\n var ev = new CustomEvent(event, opt);\r\n } else {\r\n var ev = d.createEvent(\"CustomEvent\");\r\n ev.initCustomEvent(event, !!opt.bubbles, !!opt.cancelable, opt.detail);\r\n }\r\n return el.dispatchEvent(ev);\r\n }\r\n function clone(obj, rep) {\r\n if (typeof Object.assign === \"function\") {\r\n return Object.assign({}, obj, rep || {});\r\n }\r\n var clone = Object.constructor();\r\n for (var key in obj) {\r\n clone[key] = (key in rep) ? rep[key] : obj[key];\r\n }\r\n return clone;\r\n }\r\n function create(tag, classes) {\r\n var r = d.createElement(tag);\r\n r.className = (classes && classes.join) ? classes.join(\" \") : classes || \"\";\r\n return r;\r\n }\r\n\r\n /*\r\n | SELECT CONSTRUCTOR\r\n | @since 0.5.12 [0.3.0]\r\n */\r\n var select = function(el, config) {\r\n el = (typeof(el) == \"string\") ? d.querySelectorAll(el) : el;\r\n if (el instanceof NodeList || el instanceof HTMLCollection || el instanceof Array) {\r\n for (var _r = [], l = el.length, i = 0; i < l; i++) {\r\n _r.push(new select(el[i], clone(config, {})));\r\n }\r\n return (_r.length === 1) ? _r[0] : ((_r.length === 0) ? false : _r);\r\n }\r\n if (!(el instanceof Element) || !(this instanceof select)) {\r\n return !(el instanceof Element) ? false : new select(el, config);\r\n }\r\n\r\n // Check Element\r\n if (select.inst[el.getAttribute(\"data-tail-select\")]) {\r\n return select.inst[el.getAttribute(\"data-tail-select\")];\r\n }\r\n if (el.getAttribute(\"data-select\")) {\r\n var test = JSON.parse(el.getAttribute(\"data-select\").replace(/\\'/g, '\"'));\r\n if (test instanceof Object) {\r\n config = clone(config, test); // This is a unofficial function ;3\r\n }\r\n }\r\n\r\n // Get Element Options\r\n var placeholder = el.getAttribute(\"placeholder\") || el.getAttribute(\"data-placeholder\"),\r\n fb1 = \"bindSourceSelect\", fb2 = \"sourceHide\"; // Fallbacks\r\n config = (typeof(config) == \"object\") ? config : {};\r\n config.multiple = (\"multiple\" in config) ? config.multiple : el.multiple;\r\n config.disabled = (\"disabled\" in config) ? config.disabled : el.disabled;\r\n config.placeholder = placeholder || config.placeholder || null;\r\n config.width = (config.width === \"auto\") ? el.offsetWidth + 50 : config.width;\r\n config.sourceBind = (fb1 in config) ? config[fb1] : config.sourceBind || false;\r\n config.sourceHide = (fb2 in config) ? config[fb2] : config.sourceHide || true;\r\n config.multiLimit = (config.multiLimit >= 0) ? config.multiLimit : Infinity;\r\n\r\n // Init Instance\r\n this.e = el;\r\n this.id = ++select.count;\r\n this.con = clone(select.defaults, config);\r\n this.events = {};\r\n select.inst[\"tail-\" + this.id] = this;\r\n\r\n var ret = this.init().bind();\r\n\r\n return ret;\r\n }, options;\r\n select.count = 0;\r\n select.inst = {};\r\n\r\n /*\r\n | STORAGE :: DEFAULT OPTIONS\r\n */\r\n select.defaults = {\r\n animate: true, // [0.3.0] Boolean\r\n classNames: null, // [0.2.0] Boolean, String, Array, null\r\n csvOutput: false, // [0.3.4] Boolean\r\n csvSeparator: \",\", // [0.3.4] String\r\n descriptions: false, // [0.3.0] Boolean\r\n deselect: false, // [0.3.0] Boolean\r\n disabled: false, // [0.5.0] Boolean\r\n height: 350, // [0.2.0] Integer, null\r\n hideDisabled: false, // [0.3.0] Boolean\r\n hideSelected: false, // [0.3.0] Boolean\r\n items: {}, // [0.3.0] Object\r\n locale: \"en\", // [0.5.0] String\r\n linguisticRules: { // [0.5.9] Object\r\n \"е\": \"ё\",\r\n \"a\": \"ä\",\r\n \"o\": \"ö\",\r\n \"u\": \"ü\",\r\n \"ss\": \"ß\"\r\n },\r\n multiple: false, // [0.2.0] Boolean\r\n multiLimit: Infinity, // [0.3.0] Integer, Infinity\r\n multiPinSelected: false, // [0.5.0] Boolean\r\n multiContainer: false, // [0.3.0] Boolean, String\r\n multiShowCount: true, // [0.3.0] Boolean\r\n multiShowLimit: false, // [0.5.0] Boolean\r\n multiSelectAll: false, // [0.4.0] Boolean\r\n multiSelectGroup: true, // [0.4.0] Boolean\r\n openAbove: null, // [0.3.0] Boolean, null\r\n placeholder: null, // [0.2.0] String, null\r\n search: false, // [0.3.0] Boolean\r\n searchConfig: [ // [0.5.13] Array\r\n \"text\", \"value\"\r\n ],\r\n searchFocus: true, // [0.3.0] Boolean\r\n searchMarked: true, // [0.3.0] Boolean\r\n searchMinLength: 1, // [0.5.13] Integer\r\n searchDisabled: true, // [0.5.5] Boolean\r\n sortItems: false, // [0.3.0] String, Function, false\r\n sortGroups: false, // [0.3.0] String, Function, false\r\n sourceBind: false, // [0.5.0] Boolean\r\n sourceHide: true, // [0.5.0] Boolean\r\n startOpen: false, // [0.3.0] Boolean\r\n stayOpen: false, // [0.3.0] Boolean\r\n width: null, // [0.2.0] Integer, String, null\r\n cbComplete: undefined, // [0.5.0] Function\r\n cbEmpty: undefined, // [0.5.0] Function\r\n cbLoopItem: undefined, // [0.4.0] Function\r\n cbLoopGroup: undefined // [0.4.0] Function\r\n };\r\n\r\n /*\r\n | STORAGE :: STRINGS\r\n */\r\n select.strings = {\r\n en: {\r\n all: \"All\",\r\n none: \"None\",\r\n empty: \"No Options available\",\r\n emptySearch: \"No Options found\",\r\n limit: \"You can't select more Options\",\r\n placeholder: \"Select an Option...\",\r\n placeholderMulti: \"Select up to :limit Options...\",\r\n search: \"Type in to search...\",\r\n disabled: \"This Field is disabled\"\r\n },\r\n modify: function(locale, id, string) {\r\n if (!(locale in this)) {\r\n return false;\r\n }\r\n if ((id instanceof Object)) {\r\n for (var key in id) {\r\n this.modify(locale, key, id[key]);\r\n }\r\n } else {\r\n this[locale][id] = (typeof(string) == \"string\") ? string : this[locale][id];\r\n }\r\n return true;\r\n },\r\n register: function(locale, object) {\r\n if (typeof(locale) != \"string\" || !(object instanceof Object)) {\r\n return false;\r\n }\r\n this[locale] = object;\r\n return true;\r\n }\r\n };\r\n\r\n /*\r\n | TAIL.SELECT HANDLER\r\n */\r\n select.prototype = {\r\n /*\r\n | INTERNAL :: TRANSLATE\r\n | @since 0.5.8 [0.5.8]\r\n */\r\n _e: function(string, replace, def) {\r\n if (!(string in this.__)) {\r\n return (!def)? string: def;\r\n }\r\n\r\n var string = this.__[string];\r\n if (typeof(string) === \"function\") {\r\n string = string.call(this, replace);\r\n }\r\n if (typeof(replace) === \"object\") {\r\n for (var key in replace) {\r\n string = string.replace(key, replace[key]);\r\n }\r\n }\r\n return string;\r\n },\r\n\r\n /*\r\n | INTERNAL :: INIT SELECT FIELD\r\n | @since 0.5.13 [0.3.0]\r\n */\r\n init: function() {\r\n var self = this, classes = [\"tail-select\"], con = this.con,\r\n regexp = /^[0-9.]+(?:cm|mm|in|px|pt|pc|em|ex|ch|rem|vw|vh|vmin|vmax|\\%)$/i;\r\n\r\n // Init ClassNames\r\n var c = (con.classNames === true) ? this.e.className : con.classNames;\r\n classes.push((c && c.push) ? c.join(\" \") : (c && c.split) ? c : \"no-classes\");\r\n if(con.hideSelected){ classes.push(\"hide-selected\"); }\r\n if(con.hideDisabled){ classes.push(\"hide-disabled\"); }\r\n if(con.multiLimit == 0){ classes.push(\"disabled\"); }\r\n if(con.multiple){ classes.push(\"multiple\"); }\r\n if(con.deselect){ classes.push(\"deselect\"); }\r\n if(con.disabled){ classes.push(\"disabled\"); }\r\n\r\n // Init Variables\r\n this.__ = clone(select.strings.en, select.strings[con.locale] || {});\r\n this._init = true;\r\n this._query = false;\r\n this.select = create(\"DIV\", classes);\r\n this.label = create(\"DIV\", \"select-label\");\r\n this.dropdown = create(\"DIV\", \"select-dropdown\");\r\n this.search = create(\"DIV\", \"dropdown-search\");\r\n this.csvInput = create(\"INPUT\", \"select-search\");\r\n\r\n // Build :: Select\r\n if(this.e.getAttribute(\"tabindex\") !== null){\r\n this.select.setAttribute(\"tabindex\", this.e.getAttribute(\"tabindex\"));\r\n } else {\r\n this.select.setAttribute(\"tabindex\", 0);\r\n }\r\n if(con.width && regexp.test(con.width)){\r\n this.select.style.width = con.width;\r\n } else if(con.width && !isNaN(parseFloat(con.width, 10))){\r\n this.select.style.width = con.width + \"px\";\r\n }\r\n\r\n // Build :: Label\r\n this.label.addEventListener(\"click\", function(event){\r\n self.toggle.call(self, self.con.animate);\r\n });\r\n this.select.appendChild(this.label);\r\n\r\n // Build :: Dropdown\r\n if(!isNaN(parseInt(con.height, 10))){\r\n this.dropdown.style.maxHeight = parseInt(con.height, 10) + \"px\";\r\n }\r\n if(con.search){\r\n this.search.innerHTML = '';\r\n this.search.children[0].placeholder = this._e(\"search\");\r\n this.search.children[0].addEventListener(\"input\", function(event){\r\n self.query.call(self, (this.value.length > con.searchMinLength)? this.value: undefined);\r\n });\r\n this.dropdown.appendChild(this.search);\r\n }\r\n this.select.appendChild(this.dropdown);\r\n\r\n // Build :: CSV Input\r\n this.csvInput.type = \"hidden\";\r\n if(con.csvOutput){\r\n this.csvInput.name = this.e.name;\r\n this.e.removeAttribute(\"name\");\r\n this.select.appendChild(this.csvInput);\r\n }\r\n\r\n // Prepare Container\r\n if(con.multiple && con.multiContainer){\r\n if(d.querySelector(con.multiContainer)){\r\n this.container = d.querySelector(con.multiContainer);\r\n this.container.className += \" tail-select-container\";\r\n } else if(con.multiContainer === true){\r\n this.container = this.label;\r\n this.container.className += \" tail-select-container\";\r\n }\r\n }\r\n\r\n // Prepare Options\r\n this.options = new options(this.e, this);\r\n for(var l = this.e.options.length, i = 0; i < l; i++){\r\n this.options.set(this.e.options[i], false);\r\n }\r\n for(var key in con.items){\r\n if(typeof(con.items[key]) == \"string\"){\r\n con.items[key] = {value: con.items[key]};\r\n }\r\n this.options.add(con.items[key].key || key, con.items[key].value,\r\n con.items[key].group, con.items[key].selected,\r\n con.items[key].disabled, con.items[key].description);\r\n }\r\n this.query();\r\n\r\n // Append and Return\r\n if(this.e.nextElementSibling){\r\n this.e.parentElement.insertBefore(this.select, this.e.nextElementSibling);\r\n } else {\r\n this.e.parentElement.appendChild(this.select);\r\n }\r\n if(con.sourceHide){\r\n if(this.e.style.display == \"none\"){\r\n this.select.style.display = \"none\";\r\n this.e.setAttribute(\"data-select-hidden\", \"display\");\r\n } else if(this.e.style.visibility == \"hidden\"){\r\n this.select.style.visibiltiy = \"hidden\";\r\n this.e.setAttribute(\"data-select-hidden\", \"visibility\");\r\n } else {\r\n this.e.style.display = \"none\";\r\n this.e.setAttribute(\"data-select-hidden\", \"0\");\r\n }\r\n }\r\n this.e.setAttribute(\"data-tail-select\", \"tail-\" + this.id);\r\n if(self.con.startOpen){\r\n this.open(con.animate);\r\n }\r\n (con.cbComplete || function(){ }).call(this, this.select);\r\n\r\n return (this._init = false)? this: this;\r\n },\r\n\r\n /*\r\n | INTERNAL :: EVENT LISTENER\r\n | @since 0.5.13 [0.3.0]\r\n */\r\n bind: function(){\r\n var self = this;\r\n\r\n /* Seems to be last call from init */\r\n if (typeof this.options_initial === 'undefined') {\r\n var init_selected = [];\r\n\r\n for (var idx = 0; idx < this.options.selected.length; ++idx) {\r\n init_selected.push(this.options.selected[idx]);\r\n }\r\n\r\n this.options_initial = {\r\n selected: init_selected\r\n }\r\n }\r\n\r\n // Keys Listener\r\n d.addEventListener(\"keydown\", function(event){\r\n var key = (event.keyCode || event.which), opt, inner, e, temp, tmp;\r\n var space = (key == 32 && self.select === document.activeElement);\r\n if(!space && (!cHAS(self.select, \"active\") || [13, 27, 38, 40].indexOf(key) < 0)){\r\n return false;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n // Space\r\n if(key === 32){\r\n return self.open(self.con.animate);\r\n }\r\n\r\n // Enter || Escape\r\n if(key == 13){\r\n if((opt = self.dropdown.querySelector(\".dropdown-option.hover:not(.disabled)\"))){\r\n if (opt.classList.contains(\"selected\")) {\r\n self.options.unselect.call(self.options, opt);\r\n } else {\r\n self.options.select.call(self.options, opt);\r\n }\r\n }\r\n }\r\n if(key == 27 || key == 13){\r\n return self.close(self.con.animate);\r\n }\r\n\r\n // Top || Down\r\n if((opt = self.dropdown.querySelector(\".dropdown-option.hover:not(.disabled)\"))){\r\n cREM(opt, \"hover\"); e = [((key == 40)? \"next\": \"previous\") + \"ElementSibling\"];\r\n do {\r\n if((temp = opt[e]) !== null && opt.tagName == \"LI\"){\r\n opt = temp;\r\n } else if((temp = opt.parentElement[e]) !== null && temp.children.length > 0 && temp.tagName == \"UL\"){\r\n opt = temp.children[(key == 40)? 0: temp.children.length-1];\r\n } else {\r\n opt = false;\r\n }\r\n if(opt && (!cHAS(opt, \"dropdown-option\") || cHAS(opt, \"disabled\"))){\r\n continue;\r\n }\r\n break;\r\n } while(true);\r\n }\r\n if(!opt && key == 40){\r\n opt = self.dropdown.querySelector(\".dropdown-option:not(.disabled)\");\r\n } else if(!opt && key == 38){\r\n tmp = self.dropdown.querySelectorAll(\".dropdown-option:not(.disabled)\");\r\n opt = tmp[tmp.length - 1];\r\n }\r\n if(opt && (inner = self.dropdown.querySelector(\".dropdown-inner\"))){\r\n var pos = (function(el){\r\n var _r = {top: el.offsetTop, height: el.offsetHeight};\r\n while((el = el.parentElement) != inner){\r\n _r.top += el.offsetTop;\r\n }\r\n return _r;\r\n })(opt);\r\n cADD(opt, \"hover\");\r\n inner.scrollTop = Math.max(0, pos.top - (pos.height * 2));\r\n }\r\n return true;\r\n });\r\n\r\n // Close\r\n d.addEventListener(\"click\", function(ev){\r\n if(!cHAS(self.select, \"active\") || cHAS(self.select, \"idle\")){ return false; }\r\n if(self.con.stayOpen === true){ return false; }\r\n\r\n var targets = [self.e, self.select, self.container];\r\n for(var l = targets.length, i = 0; i < l; i++){\r\n if(targets[i] && (targets[i].contains(ev.target) || targets[i] == ev.target)){\r\n return false;\r\n }\r\n if(!ev.target.parentElement){ return false; }\r\n }\r\n return self.close.call(self, self.con.animate);\r\n });\r\n\r\n // Bind Source Select\r\n if(!this.con.sourceBind){\r\n return true;\r\n }\r\n this.e.addEventListener(\"change\", function(event){\r\n if(event.detail != undefined){\r\n return false;\r\n }\r\n event.preventDefault();\r\n event.stopPropagation();\r\n if(!this.multiple && this.selectedIndex){\r\n self.options.select.call(self.options, this.options[this.selectedIndex]);\r\n } else {\r\n var u = [].concat(self.options.selected);\r\n var s = [].filter.call(this.querySelectorAll(\"option:checked\"), function(item){\r\n if(u.indexOf(item) >= 0){\r\n u.splice(u.indexOf(item), 1);\r\n return false;\r\n }\r\n return true;\r\n });\r\n self.options.walk.call(self.options, \"unselect\", u);\r\n self.options.walk.call(self.options, \"select\", s);\r\n }\r\n });\r\n return true;\r\n },\r\n\r\n /*\r\n | INTERNAL :: INTERNAL CALLBACK\r\n | @since 0.5.14 [0.3.0]\r\n */\r\n callback: function(item, state, _force){\r\n var rkey = item.key.replace(/('|\\\\)/g, \"\\\\$1\"),\r\n rgrp = item.group.replace(/('|\\\\)/g, \"\\\\$1\"),\r\n rsel = \"[data-key='\" + rkey + \"'][data-group='\" + rgrp + \"']\";\r\n if(state == \"rebuild\"){ return this.query(); }\r\n\r\n // Set Element-Item States\r\n var element = this.dropdown.querySelector(rsel);\r\n if(element && [\"select\", \"disable\"].indexOf(state) >= 0){\r\n cADD(element, (state == \"select\"? \"selected\": \"disabled\"));\r\n } else if(element && [\"unselect\", \"enable\"].indexOf(state) >= 0){\r\n cREM(element, (state == \"unselect\"? \"selected\": \"disabled\"));\r\n }\r\n\r\n // Handle\r\n this.update(item);\r\n return (_force === true)? true: this.trigger(\"change\", item, state);\r\n },\r\n\r\n /*\r\n | INTERNAL :: TRIGGER EVENT HANDLER\r\n | @since 0.5.2 [0.4.0]\r\n */\r\n trigger: function(event){\r\n if(this._init){ return false; }\r\n var obj = {bubbles: false, cancelable: true, detail: {args: arguments, self: this}};\r\n if(event == \"change\" && arguments[2] && arguments[2].indexOf(\"select\") >= 0){\r\n trigger(this.e, \"input\", obj);\r\n trigger(this.e, \"change\", obj);\r\n }\r\n trigger(this.select, \"tail::\" + event, obj);\r\n\r\n var args = [], pass;\r\n Array.prototype.map.call(arguments, function(item, i){\r\n if(i > 0){ args.push(item); }\r\n });\r\n (this.events[event] || []).forEach(function(item){\r\n pass = [].concat(args);\r\n pass.push(item.args || null);\r\n (item.cb || function(){ }).apply(obj.detail.self, pass);\r\n });\r\n return true;\r\n },\r\n\r\n /*\r\n | INTERNAL :: CALCULATE DROPDOWN\r\n | @since 0.5.4 [0.5.0]\r\n */\r\n calc: function(){\r\n var clone = this.dropdown.cloneNode(true), height = this.con.height, search = 0,\r\n inner = this.dropdown.querySelector(\".dropdown-inner\");\r\n\r\n // Calculate Dropdown Height\r\n clone = this.dropdown.cloneNode(true);\r\n clone.style.cssText = \"height:auto;min-height:auto;max-height:none;opacity:0;display:block;visibility:hidden;\";\r\n clone.style.maxHeight = this.con.height + \"px\";\r\n clone.className += \" cloned\";\r\n this.dropdown.parentElement.appendChild(clone);\r\n height = (height > clone.clientHeight)? clone.clientHeight: height;\r\n if(this.con.search){\r\n search = clone.querySelector(\".dropdown-search\").clientHeight;\r\n }\r\n this.dropdown.parentElement.removeChild(clone);\r\n\r\n // Calculate Viewport\r\n var pos = this.select.getBoundingClientRect(),\r\n bottom = w.innerHeight-(pos.top+pos.height),\r\n view = ((height+search) > bottom)? pos.top > bottom: false;\r\n if(this.con.openAbove === true || (this.con.openAbove !== false && view)){\r\n view = true, height = Math.min((height), pos.top-10);\r\n cADD(this.select, \"open-top\");\r\n } else {\r\n view = false, height = Math.min((height), bottom-10);\r\n cREM(this.select, \"open-top\");\r\n }\r\n if(inner){\r\n this.dropdown.style.maxHeight = height + \"px\";\r\n inner.style.maxHeight = (height-search) + \"px\";\r\n }\r\n return this;\r\n },\r\n\r\n /*\r\n | API :: QUERY OPTIONS\r\n | @since 0.5.13 [0.5.0]\r\n */\r\n query: function(search, conf){\r\n var item, tp, ul, li, a1, a2; // Pre-Definition\r\n var self = this, con = this.con, g = \"getAttribute\"; // Shorties\r\n var root = create(\"DIV\", \"dropdown-inner\"), // Contexts\r\n func = (!search)? \"walker\": \"finder\",\r\n args = (!search)? [con.sortItems, con.sortGroups]: [search, conf];\r\n\r\n // Option Walker\r\n this._query = (typeof(search) == \"string\")? search: false;\r\n while(item = this.options[func].apply(this.options, args)){\r\n if(!ul || (ul && ul[g](\"data-group\") !== item.group)){\r\n tp = (con.cbLoopGroup || this.cbGroup).call(this, item.group, search, root);\r\n if(tp instanceof Element){\r\n ul = tp;\r\n ul.setAttribute(\"data-group\", item.group);\r\n root.appendChild(ul);\r\n } else { break; }\r\n }\r\n\r\n // Create Item\r\n if((li = (con.cbLoopItem || this.cbItem).call(this, item, ul, search, root)) === null){\r\n continue;\r\n }\r\n if(li === false){ break; }\r\n li.setAttribute(\"data-key\", item.key);\r\n li.setAttribute(\"data-group\", item.group);\r\n li.addEventListener(\"click\", function(event){\r\n if(!this.hasAttribute(\"data-key\")){ return false; }\r\n var key = this[g](\"data-key\"), group = this[g](\"data-group\") || \"#\";\r\n if(self.options.toggle.call(self.options, key, group)){\r\n if(self.con.stayOpen === false && !self.con.multiple){\r\n self.close.call(self, self.con.animate);\r\n }\r\n }\r\n });\r\n ul.appendChild(li);\r\n }\r\n\r\n // Empty\r\n var count = root.querySelectorAll(\"*[data-key]\").length;\r\n if(count == 0){\r\n (this.con.cbEmpty || function(element){\r\n var li = create(\"SPAN\", \"dropdown-empty\");\r\n li.innerText = this._e(\"empty\");\r\n element.appendChild(li);\r\n }).call(this, root, search);\r\n }\r\n\r\n // Select All\r\n if(count > 0 && con.multiple && con.multiLimit == Infinity && con.multiSelectAll){\r\n a1 = create(\"BUTTON\", \"tail-all\"), a2 = create(\"BUTTON\", \"tail-none\");\r\n a1.innerText = this._e(\"all\");\r\n a1.addEventListener(\"click\", function(event){\r\n event.preventDefault();\r\n var options = self.dropdown.querySelectorAll(\".dropdown-inner .dropdown-option\");\r\n self.options.walk.call(self.options, \"select\", options);\r\n })\r\n a2.innerText = this._e(\"none\");\r\n a2.addEventListener(\"click\", function(event){\r\n event.preventDefault();\r\n var options = self.dropdown.querySelectorAll(\".dropdown-inner .dropdown-option\");\r\n self.options.walk.call(self.options, \"unselect\", options);\r\n })\r\n\r\n // Add Element\r\n li = create(\"SPAN\", \"dropdown-action\");\r\n li.appendChild(a1);\r\n li.appendChild(a2);\r\n root.insertBefore(li, root.children[0]);\r\n }\r\n\r\n // Add and Return\r\n var data = this.dropdown.querySelector(\".dropdown-inner\");\r\n this.dropdown[(data? \"replace\": \"append\") + \"Child\"](root, data);\r\n if(cHAS(this.select, \"active\")){\r\n this.calc();\r\n }\r\n return this.updateCSV().updateLabel();\r\n },\r\n\r\n /*\r\n | API :: CALLBACK -> CREATE GROUP\r\n | @since 0.5.8 [0.4.0]\r\n */\r\n cbGroup: function(group, search){\r\n var ul = create(\"UL\", \"dropdown-optgroup\"), self = this, a1, a2;\r\n if(group == \"#\"){ return ul; }\r\n ul.innerHTML = '
  • ' + group + '
  • ';\r\n if(this.con.multiple && this.con.multiLimit == Infinity && this.con.multiSelectAll){\r\n a1 = create(\"BUTTON\", \"tail-none\"), a2 = create(\"BUTTON\", \"tail-all\");\r\n a1.innerText = this._e(\"none\");\r\n a1.addEventListener(\"click\", function(event){\r\n event.preventDefault();\r\n var grp = this.parentElement.parentElement.getAttribute(\"data-group\");\r\n self.options.all.call(self.options, \"unselect\", grp);\r\n });\r\n a2.innerText = this._e(\"all\");\r\n a2.addEventListener(\"click\", function(event){\r\n event.preventDefault();\r\n var grp = this.parentElement.parentElement.getAttribute(\"data-group\");\r\n self.options.all.call(self.options, \"select\", grp);\r\n });\r\n ul.children[0].appendChild(a1);\r\n ul.children[0].appendChild(a2);\r\n }\r\n return ul;\r\n },\r\n\r\n /*\r\n | API :: CALLBACK -> CREATE ITEM\r\n | @since 0.5.13 [0.4.0]\r\n */\r\n cbItem: function(item, optgroup, search){\r\n var li = create(\"LI\", \"dropdown-option\" + (item.selected? \" selected\": \"\") + (item.disabled? \" disabled\": \"\"));\r\n li.title = item.option.title;\r\n\r\n // Inner Text\r\n if(search && search.length > 0 && this.con.searchMarked){\r\n search = this.options.applyLinguisticRules(search);\r\n li.innerHTML = item.value.replace(new RegExp(\"(\" + search + \")\", \"i\"), \"$1\");\r\n } else {\r\n li.innerText = item.value;\r\n }\r\n\r\n // Inner Description\r\n if(this.con.descriptions && item.description){\r\n li.innerHTML += '' + item.description + '';\r\n }\r\n return li;\r\n },\r\n\r\n /*\r\n | API :: UPDATE EVERYTHING\r\n | @since 0.5.0 [0.5.0]\r\n */\r\n update: function(item){\r\n return this.updateLabel().updateContainer(item).updatePin(item).updateCSV(item);\r\n },\r\n\r\n /*\r\n | API :: UPDATE LABEL\r\n | @since 0.5.8 [0.5.0]\r\n */\r\n updateLabel: function(label){\r\n if(this.container == this.label && this.options.selected.length > 0){\r\n if(this.label.querySelector(\".label-inner\")){\r\n this.label.removeChild(this.label.querySelector(\".label-inner\"));\r\n }\r\n if(this.label.querySelector(\".label-count\")){\r\n this.label.removeChild(this.label.querySelector(\".label-count\"));\r\n }\r\n return this;\r\n }\r\n var c = this.con, len = this.options.selected.length, limit;\r\n if(typeof(label) != \"string\"){\r\n if(c.disabled){\r\n label = \"disabled\";\r\n } else if(this.dropdown.querySelectorAll(\"*[data-key]\").length == 0){\r\n label = \"empty\" + (cHAS(this.select, \"in-search\")? \"Search\": \"\");\r\n } else if(c.multiLimit <= len){\r\n label = \"limit\";\r\n } else if(!c.multiple && this.options.selected.length > 0){\r\n label = this.options.selected[0].innerText;\r\n } else if(typeof(c.placeholder) == \"string\"){\r\n label = c.placeholder;\r\n } else {\r\n label = \"placeholder\" + (c.multiple && c.multiLimit < Infinity? \"Multi\": \"\");\r\n }\r\n }\r\n\r\n // Set HTML\r\n label = this._e(label, {\":limit\": c.multiLimit}, label);\r\n label = '' + label + '',\r\n limit = (c.multiShowLimit && c.multiLimit < Infinity);\r\n if(c.multiple && c.multiShowCount){\r\n var selected_class = (len) ? 'label-count--selected' : '';\r\n\r\n label = ':c' + label;\r\n label = label.replace(\":c\", len + (limit? (\" / \" + c.multiLimit): \"\"));\r\n }\r\n this.label.innerHTML = label;\r\n return this;\r\n },\r\n\r\n /*\r\n | API :: UPDATE CONTAINER\r\n | @since 0.5.0 [0.5.0]\r\n */\r\n updateContainer: function(item){\r\n if(!this.container || !this.con.multiContainer){\r\n return this;\r\n }\r\n var s = \"[data-group='\" + item.group + \"'][data-key='\" + item.key + \"']\";\r\n if(this.container.querySelector(s)){\r\n if(!item.selected){\r\n this.container.removeChild(this.container.querySelector(s));\r\n }\r\n return this;\r\n }\r\n\r\n // Create Item\r\n if(item.selected){\r\n var self = this, hndl = create(\"DIV\", \"select-handle\");\r\n hndl.innerText = item.value;\r\n hndl.setAttribute(\"data-key\", item.key);\r\n hndl.setAttribute(\"data-group\", item.group);\r\n hndl.addEventListener(\"click\", function(event){\r\n event.preventDefault();\r\n event.stopPropagation();\r\n var key = this.getAttribute(\"data-key\"), grp = this.getAttribute(\"data-group\");\r\n self.options.unselect.call(self.options, key, grp);\r\n });\r\n this.container.appendChild(hndl);\r\n }\r\n return this;\r\n },\r\n\r\n /*\r\n | API :: UPDATE PIN POSITION\r\n | @since 0.5.3 [0.5.0]\r\n */\r\n updatePin: function(item){\r\n var inner = this.dropdown.querySelector(\".dropdown-inner ul\"),\r\n option = \"li[data-key='\" + item.key + \"'][data-group='\" + item.group + \"']\";\r\n if(!this.con.multiPinSelected || !inner || this._query !== false){\r\n return this;\r\n }\r\n\r\n // Create Item\r\n option = this.dropdown.querySelector(option);\r\n if(item.selected){\r\n inner.insertBefore(option, inner.children[0]);\r\n } else {\r\n var grp = this.dropdown.querySelector(\"ul[data-group='\" + item.group + \"']\"),\r\n prev = this.options[item.index-1], found = false;\r\n while(prev && prev.group == item.group){\r\n if(found = grp.querySelector(\"li[data-key='\" + prev.key + \"']\")){\r\n break;\r\n }\r\n prev = this.options[prev.index-1];\r\n }\r\n if(found && found.nextElementSibling){\r\n grp.insertBefore(option, found.nextElementSibling);\r\n } else {\r\n grp.appendChild(option);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n /*\r\n | API :: UPDATE CSV INPUT\r\n | @since 0.5.0 [0.5.0]\r\n */\r\n updateCSV: function(item){\r\n if(!this.csvInput || !this.con.csvOutput){\r\n return this;\r\n }\r\n for(var selected = [], l = this.options.selected.length, i = 0; i < l; i++){\r\n selected.push(this.options.selected[i].value);\r\n }\r\n this.csvInput.value = selected.join(this.con.csvSeparator || \",\");\r\n return this;\r\n },\r\n\r\n /*\r\n | PUBLIC :: OPEN DROPDOWN\r\n | @since 0.5.0 [0.3.0]\r\n */\r\n open: function(animate){\r\n if(cHAS(this.select, \"active\") || cHAS(this.select, \"idle\") || this.con.disabled){\r\n return false;\r\n }\r\n this.calc();\r\n\r\n // Final Function\r\n var final = function(){\r\n cADD(self.select, \"active\");\r\n cREM(self.select, \"idle\");\r\n this.dropdown.style.height = \"auto\";\r\n this.dropdown.style.overflow = \"visible\";\r\n this.label.removeAttribute(\"style\");\r\n if(this.con.search && this.con.searchFocus){\r\n this.dropdown.querySelector(\"input\").focus();\r\n }\r\n this.trigger.call(this, \"open\");\r\n }, self = this, e = this.dropdown.style;\r\n\r\n // Open\r\n if(animate !== false){\r\n this.label.style.zIndex = 25;\r\n this.dropdown.style.cssText += \"height:0;display:block;overflow:hidden;\";\r\n cADD(self.select, \"idle\");\r\n (function animate(){\r\n var h = parseInt(e.height, 10), m = parseInt(e.maxHeight, 10);\r\n if(h >= m){\r\n return final.call(self);\r\n }\r\n e.height = ((h+50 > m)? m: h+50) + \"px\";\r\n setTimeout(animate, 20);\r\n })();\r\n } else {\r\n e.cssText = \"height:\" + e.maxHeight + \";display:block;overflow:hidden;\";\r\n final.call(this);\r\n }\r\n return this;\r\n },\r\n\r\n /*\r\n | PUBLIC :: CLOSE DROPDOWN\r\n | @since 0.5.0 [0.3.0]\r\n */\r\n close: function(animate){\r\n if(!cHAS(this.select, \"active\") || cHAS(this.select, \"idle\")){\r\n return false;\r\n }\r\n var final = function(){\r\n cREM(this.select, \"active\");\r\n cREM(this.select, \"idle\");\r\n this.dropdown.removeAttribute(\"style\");\r\n this.dropdown.querySelector(\".dropdown-inner\").removeAttribute(\"style\");\r\n this.trigger.call(this, \"close\");\r\n }, self = this, e = this.dropdown;\r\n\r\n // Close\r\n if(animate !== false){\r\n cADD(this.select, \"idle\");\r\n this.dropdown.style.overflow = \"hidden\";\r\n (function animate(){\r\n if((parseInt(e.offsetHeight, 10)-50) <= 0){\r\n return final.call(self);\r\n }\r\n e.style.height = (parseInt(e.offsetHeight, 10)-50) + \"px\";\r\n setTimeout(animate, 20);\r\n })();\r\n } else {\r\n final.call(this);\r\n }\r\n return this;\r\n },\r\n\r\n /*\r\n | PUBLIC :: TOGGLE DROPDOWN\r\n | @since 0.5.0 [0.3.0]\r\n */\r\n toggle: function(animate){\r\n if(cHAS(this.select, \"active\")){\r\n return this.close(animate);\r\n }\r\n return !cHAS(this.select, \"idle\")? this.open(animate): this;\r\n },\r\n\r\n /*\r\n | PUBLIC :: REMOVE SELECT\r\n | @since 0.5.3 [0.3.0]\r\n */\r\n remove: function(){\r\n this.e.removeAttribute(\"data-tail-select\");\r\n if(this.e.hasAttribute(\"data-select-hidden\")){\r\n if(this.e.getAttribute(\"data-select-hidden\") == \"0\"){\r\n this.e.style.removeProperty(\"display\");\r\n }\r\n this.e.removeAttribute(\"data-select-hidden\");\r\n }\r\n Array.prototype.map.call(this.e.querySelectorAll(\"[data-select-option='add']\"), function(item){\r\n item.parentElement.removeChild(item);\r\n })\r\n Array.prototype.map.call(this.e.querySelectorAll(\"[data-select-optgroup='add']\"), function(item){\r\n item.parentElement.removeChild(item);\r\n })\r\n this.e.name = (this.csvInput.hasAttribute(\"name\"))? this.csvInput.name: this.e.name;\r\n if(this.select.parentElement){\r\n this.select.parentElement.removeChild(this.select);\r\n }\r\n if(this.container){\r\n var handles = this.container.querySelectorAll(\".select-handle\");\r\n for(var l = handles.length, i = 0; i < l; i++){\r\n this.container.removeChild(handles[i]);\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n /*\r\n | PUBLIC :: RELOAD SELECT\r\n | @since 0.5.0 [0.3.0]\r\n */\r\n reload: function(){\r\n return this.remove().init();\r\n },\r\n\r\n /*\r\n | PUBLIC :: RELOAD SELECT\r\n | @since 0.5.20 [0.3.0]\r\n */\r\n reset: function(){\r\n /* Set all to unselected */\r\n for(var idx = 0; idx < this.options.element.length; ++idx){\r\n this.options.element[idx].selected = false;\r\n this.options.unselect(this.options.element[idx].value, \"#\", true);\r\n }\r\n\r\n /* Restore initial selection */\r\n for(var idx = 0; idx < this.options_initial.selected.length; ++idx){\r\n this.options_initial.selected[idx].selected = true;\r\n this.options.select(this.options_initial.selected[idx].value, \"#\", true);\r\n }\r\n\r\n /* Reset input field */\r\n this.dropdown.querySelector('input').value = '';\r\n this.query.call(this, '');\r\n },\r\n\r\n /*\r\n | PUBLIC :: GET|SET CONFIG\r\n | @since 0.5.15 [0.4.0]\r\n */\r\n config: function(key, value, rebuild){\r\n if(key instanceof Object){\r\n for(var k in key){ this.config(k, key[k], false); }\r\n return this.reload()? this.con: this.con;\r\n }\r\n if(typeof(key) == \"undefined\"){\r\n return this.con;\r\n } else if(!(key in this.con)){\r\n return false;\r\n }\r\n\r\n // Set | Return\r\n if(typeof(value) == \"undefined\"){\r\n return this.con[key];\r\n }\r\n this.con[key] = value;\r\n if(rebuild !== false){\r\n this.reload();\r\n }\r\n return this;\r\n },\r\n enable: function(update){\r\n cREM(this.select, \"disabled\");\r\n this.e.disabled = false;\r\n this.con.disabled = false;\r\n return (update === false)? this: this.reload();\r\n },\r\n disable: function(update){\r\n cADD(this.select, \"disabled\");\r\n this.e.disabled = true;\r\n this.con.disabled = true;\r\n return (update === false)? this: this.reload();\r\n },\r\n\r\n /*\r\n | PUBLIC :: CUSTOM EVENT LISTENER\r\n | @since 0.5.0 [0.4.0]\r\n */\r\n on: function(event, callback, args){\r\n if([\"open\", \"close\", \"change\"].indexOf(event) < 0 || typeof(callback) != \"function\"){\r\n return false;\r\n }\r\n if(!(event in this.events)){\r\n this.events[event] = [];\r\n }\r\n this.events[event].push({cb: callback, args: (args instanceof Array)? args: []});\r\n return this;\r\n },\r\n\r\n /*\r\n | PUBLIC :: VALUE\r\n | @since 0.5.13 [0.5.13]\r\n */\r\n value: function(){\r\n if(this.options.selected.length == 0){\r\n return null;\r\n }\r\n if(this.con.multiple){\r\n return this.options.selected.map(function(opt){\r\n return opt.value;\r\n });\r\n }\r\n return this.options.selected[0].value;\r\n }\r\n };\r\n\r\n /*\r\n | OPTIONS CONSTRUCTOR\r\n | @since 0.5.12 [0.3.0]\r\n */\r\n options = select.options = function(select, parent){\r\n if(!(this instanceof options)){\r\n return new options(select, parent);\r\n }\r\n this.self = parent;\r\n this.element = select;\r\n this.length = 0;\r\n this.selected = [];\r\n this.disabled = [];\r\n this.items = {\"#\": {}};\r\n this.groups = {};\r\n return this;\r\n }\r\n\r\n /*\r\n | TAIL.OPTIONS HANDLER\r\n */\r\n options.prototype = {\r\n /*\r\n | INTERNAL :: REPLACE TYPOs\r\n | @since 0.5.0 [0.3.0]\r\n */\r\n _r: function(state){\r\n return state.replace(\"disabled\", \"disable\").replace(\"enabled\", \"enable\")\r\n .replace(\"selected\", \"select\").replace(\"unselected\", \"unselect\");\r\n },\r\n\r\n /*\r\n | GET AN EXISTING OPTION\r\n | @since 0.5.7 [0.3.0]\r\n */\r\n get: function(key, grp){\r\n var g = \"getAttribute\";\r\n if(typeof(key) == \"object\" && key.key && key.group){\r\n grp = key.group || grp;\r\n key = key.key;\r\n } else if(key instanceof Element){\r\n if(key.tagName == \"OPTION\"){\r\n grp = key.parentElement.label || \"#\";\r\n key = key.value || key.innerText;\r\n } else if(key.hasAttribute(\"data-key\")){\r\n grp = key[g](\"data-group\") || key.parentElement[g](\"data-group\") || \"#\";\r\n key = key[g](\"data-key\");\r\n }\r\n } else if(typeof(key) != \"string\"){\r\n return false;\r\n }\r\n key = (/^[0-9]+$/.test(key))? \"_\" + key: key;\r\n return (grp in this.items)? this.items[grp][key]: false;\r\n },\r\n\r\n /*\r\n | SET AN EXISTING OPTION\r\n | @since 0.5.15 [0.3.0]\r\n */\r\n set: function(opt, rebuild){\r\n var key = opt.value || opt.innerText, grp = opt.parentElement.label || \"#\";\r\n if(!(grp in this.items)){\r\n this.items[grp] = {};\r\n this.groups[grp] = opt.parentElement;\r\n }\r\n if(key in this.items[grp]){\r\n return false;\r\n }\r\n var id = (/^[0-9]+$/.test(key))? \"_\" + key: key;\r\n\r\n // Validate Selection\r\n var con = this.self.con;\r\n if(con.multiple && this.selected.length >= con.multiLimit){\r\n opt.selected = false;\r\n }\r\n if(opt.selected && con.deselect && (!opt.hasAttribute(\"selected\") || con.multiLimit == 0)){\r\n opt.selected = false;\r\n opt.parentElement.selectedIndex = -1;\r\n }\r\n\r\n // Sanitize Description\r\n if(opt.hasAttribute(\"data-description\")){\r\n var span = create(\"SPAN\");\r\n span.innerHTML = opt.getAttribute(\"data-description\");\r\n opt.setAttribute(\"data-description\", span.innerHTML);\r\n }\r\n\r\n // Add Item\r\n this.items[grp][id] = {\r\n key: key,\r\n value: opt.text,\r\n description: opt.getAttribute(\"data-description\") || null,\r\n group: grp,\r\n option: opt,\r\n optgroup: (grp != \"#\")? this.groups[grp]: undefined,\r\n selected: opt.selected,\r\n disabled: opt.disabled,\r\n hidden: opt.hidden || false\r\n };\r\n this.length++;\r\n if(opt.selected){ this.select(this.items[grp][id]); }\r\n if(opt.disabled){ this.disable(this.items[grp][id]); }\r\n return (rebuild)? this.self.callback(this.items[grp][key], \"rebuild\"): true;\r\n },\r\n\r\n /*\r\n | CREATE A NEW OPTION\r\n | @since 0.5.13 [0.3.0]\r\n */\r\n add: function(key, value, group, selected, disabled, description, rebuild){\r\n if(key instanceof Object){\r\n for(var k in key){\r\n this.add(key[k].key || k, key[k].value, key[k].group, key[k].selected, key[k].disabled, key[k].description, false);\r\n }\r\n return this.self.query();\r\n }\r\n if(this.get(key, group)){\r\n return false;\r\n }\r\n\r\n // Check Group\r\n group = (typeof(group) == \"string\")? group: \"#\";\r\n if(group !== \"#\" && !(group in this.groups)){\r\n var optgroup = create(\"OPTGROUP\");\r\n optgroup.label = group;\r\n optgroup.setAttribute(\"data-select-optgroup\", \"add\");\r\n this.element.appendChild(optgroup);\r\n this.items[group] = {};\r\n this.groups[group] = optgroup;\r\n }\r\n\r\n // Validate Selection\r\n if(this.self.con.multiple && this.selected.length >= this.self.con.multiLimit){\r\n selected = false;\r\n }\r\n disabled = !!disabled;\r\n\r\n // Create Option\r\n var option = d.createElement(\"OPTION\");\r\n option.value = key;\r\n option.selected = selected;\r\n option.disabled = disabled;\r\n option.innerText = value;\r\n option.setAttribute(\"data-select-option\", \"add\");\r\n if(description && description.length > 0){\r\n option.setAttribute(\"data-description\", description);\r\n }\r\n\r\n // Add Option and Return\r\n ((group == \"#\")? this.element: this.groups[group]).appendChild(option);\r\n return this.set(option, rebuild);\r\n },\r\n\r\n /*\r\n | MOVE AN EXISTING OPTION\r\n | @since 0.5.0 [0.5.0]\r\n */\r\n move: function(item, group, new_group, rebuild){\r\n if(!(item = this.get(item, group))){ return false; }\r\n\r\n // Create Group\r\n if(new_group !== \"#\" && !(new_group in this.groups)){\r\n var optgroup = create(\"OPTGROUP\");\r\n optgroup.label = new_group;\r\n this.element.appendChild(optgroup);\r\n this.items[new_group] = {};\r\n this.groups[new_group] = optgroup;\r\n this.groups[new_group].appendChild(item.option);\r\n }\r\n\r\n // Move To Group\r\n delete this.items[item.group][item.key];\r\n item.group = new_group;\r\n item.optgroup = this.groups[new_group] || undefined;\r\n this.items[new_group][item.key] = item;\r\n return (rebuild)? this.self.query(): true;\r\n },\r\n\r\n /*\r\n | REMOVE AN EXISTING OPTION\r\n | @since 0.5.7 [0.3.0]\r\n */\r\n remove: function(item, group, rebuild){\r\n if(!(item = this.get(item, group))){ return false; }\r\n if(item.selected){ this.unselect(item); }\r\n if(item.disabled){ this.enable(item); }\r\n\r\n // Remove Data\r\n item.option.parentElement.removeChild(item.option);\r\n var id = (/^[0-9]+$/.test(item.key))? \"_\" + item.key: item.key;\r\n delete this.items[item.group][id];\r\n this.length--;\r\n\r\n // Remove Optgroup\r\n if(Object.keys(this.items[item.group]).length === 0){\r\n delete this.items[item.group];\r\n delete this.groups[item.group];\r\n }\r\n return (rebuild)? this.self.query(): true;\r\n },\r\n\r\n /*\r\n | CHECK AN EXISTING OPTION\r\n | @since 0.5.0 [0.3.0]\r\n */\r\n is: function(state, key, group){\r\n var state = this._r(state), item = this.get(key, group);\r\n if(!item || [\"select\", \"unselect\", \"disable\", \"enable\"].indexOf(state) < 0){\r\n return null;\r\n }\r\n if(state == \"disable\" || state == \"enable\"){\r\n return (state == \"disable\")? item.disabled: !item.disabled;\r\n } else if(state == \"select\" || state == \"unselect\"){\r\n return (state == \"select\")? item.selected: !item.selected;\r\n }\r\n return false;\r\n },\r\n\r\n /*\r\n | INTERACT WITH AN OPTION\r\n | @since 0.5.3 [0.3.0]\r\n */\r\n handle: function(state, key, group, _force){\r\n var item = this.get(key, group), state = this._r(state);\r\n if(!item || [\"select\", \"unselect\", \"disable\", \"enable\"].indexOf(state) < 0){\r\n return null;\r\n }\r\n\r\n // Disable || Enable\r\n if(state == \"disable\" || state == \"enable\"){\r\n if(!(item.option in this.disabled) && state == \"disable\"){\r\n this.disabled.push(item.option);\r\n } else if((item.option in this.disabled) && state == \"enable\"){\r\n this.disabled.splice(this.disabled.indexOf(item.option), 1);\r\n }\r\n item.disabled = (state == \"disable\");\r\n item.option.disabled = (state == \"disable\");\r\n return this.self.callback.call(this.self, item, state);\r\n }\r\n\r\n // Select || Unselect\r\n var dis = (cHAS(this.self.select, \"disabled\") || item.disabled || item.option.disabled),\r\n lmt = (this.self.con.multiple && this.self.con.multiLimit <= this.selected.length),\r\n sgl = (!this.self.con.multiple && this.selected.indexOf(item.option) > 0),\r\n del = (this.self.con.multiLimit == 0 && this.self.con.deselect == true),\r\n uns = (!this.self.con.multiple && !this.self.con.deselect && _force !== true);\r\n if(state == \"select\"){\r\n if(dis || lmt || del || sgl){\r\n return false;\r\n }\r\n if(!this.self.con.multiple){\r\n for(var i in this.selected){\r\n this.unselect(this.selected[i], undefined, true);\r\n }\r\n }\r\n if(this.selected.indexOf(item.option) < 0){\r\n this.selected.push(item.option);\r\n }\r\n } else if(state == \"unselect\"){\r\n if(dis || uns){\r\n return false;\r\n }\r\n this.selected.splice(this.selected.indexOf(item.option), 1);\r\n }\r\n item.selected = (state == \"select\");\r\n item.option.selected = (state == \"select\");\r\n item.option[(state.length > 6? \"remove\": \"set\") + \"Attribute\"](\"selected\", \"selected\");\r\n return this.self.callback.call(this.self, item, state, _force);\r\n },\r\n enable: function(key, group){\r\n return this.handle(\"enable\", key, group, false);\r\n },\r\n disable: function(key, group){\r\n return this.handle(\"disable\", key, group, false);\r\n },\r\n select: function(key, group){\r\n return this.handle(\"select\", key, group, false);\r\n },\r\n unselect: function(key, group, _force){\r\n return this.handle(\"unselect\", key, group, _force);\r\n },\r\n toggle: function(item, group){\r\n if(!(item = this.get(item, group))){ return false; }\r\n return this.handle((item.selected? \"unselect\": \"select\"), item, group, false);\r\n },\r\n\r\n /*\r\n | INVERT CURRENT \r\n | @since 0.5.15 [0.3.0]\r\n */\r\n invert: function(state){\r\n state = this._r(state);\r\n if([\"enable\", \"disable\"].indexOf(state) >= 0){\r\n var invert = this.disabled, action = (state == \"enable\")? \"disable\": \"enable\";\r\n } else if([\"select\", \"unselect\"].indexOf(state) >= 0){\r\n var invert = this.selected, action = (state == \"select\")? \"unselect\": \"select\";\r\n }\r\n var convert = Array.prototype.filter.call(this, function(element){\r\n return !(element in invert);\r\n }), self = this;\r\n\r\n // Loop\r\n [].concat(invert).forEach(function(item){\r\n self.handle.call(self, action, item);\r\n });\r\n [].concat(convert).forEach(function(item){\r\n self.handle.call(self, state, item);\r\n });\r\n return true;\r\n },\r\n\r\n /*\r\n | SET ON ALL OPTIONs\r\n | @since 0.5.0 [0.5.0]\r\n */\r\n all: function(state, group){\r\n var self = this, list = this;\r\n if(group in this.items){\r\n list = Object.keys(this.items[group]);\r\n } else if([\"unselect\", \"enable\"].indexOf(state) >= 0){\r\n list = [].concat((state == \"unselect\")? this.selected: this.disabled);\r\n }\r\n Array.prototype.forEach.call(list, function(item){\r\n self.handle.call(self, state, item, group, false);\r\n });\r\n return true;\r\n },\r\n\r\n /*\r\n | SET FOR A BUNCH OF OPTIONs\r\n | @since 0.5.4 [0.5.3]\r\n */\r\n walk: function(state, items, args){\r\n if(items instanceof Array || items.length){\r\n for(var l = items.length, i = 0; i < l; i++){\r\n this.handle.apply(this, [state, items[i], null].concat(args));\r\n }\r\n } else if(items instanceof Object){\r\n var self = this;\r\n if(items.forEach){\r\n items.forEach(function(value){\r\n self.handle.apply(self, [state, value, null].concat(args));\r\n });\r\n } else {\r\n for(var key in items){\r\n if(typeof(items[key]) != \"string\" && typeof(items[key]) != \"number\" && !(items[key] instanceof Element)){\r\n continue;\r\n }\r\n this.handle.apply(this, [state, items[key], (key in this.items? key: null)]).concat(args);\r\n }\r\n }\r\n }\r\n return this;\r\n },\r\n\r\n /*\r\n | APPLY LINGUSTIC RULES\r\n | @since 0.5.13 [0.5.13]\r\n */\r\n applyLinguisticRules: function(search, casesensitive){\r\n var rules = this.self.con.linguisticRules, values = [];\r\n \r\n // Prepare Rules\r\n Object.keys(rules).forEach(function(key){ \r\n values.push(\"(\" + key + \"|[\" + rules[key] + \"])\");\r\n });\r\n if(casesensitive){\r\n values = values.concat(values.map(function(s){ return s.toUpperCase(); })); \r\n }\r\n\r\n return search.replace(new RegExp(values.join(\"|\"), (casesensitive)? \"g\": \"ig\"), function(m){\r\n return values[[].indexOf.call(arguments, m, 1) - 1];\r\n });\r\n },\r\n \r\n\r\n /*\r\n | FIND SOME OPTIONs - ARRAY EDITION\r\n | @since 0.5.15 [0.3.0]\r\n */\r\n find: function(search, config){\r\n var self = this, matches, has = {};\r\n \r\n // Get Config\r\n if(!config){\r\n config = this.self.con.searchConfig;\r\n }\r\n\r\n // Config Callback\r\n if(typeof config === \"function\"){\r\n matches = config.bind(this, search);\r\n }\r\n\r\n // Config Handler\r\n else {\r\n config = (config instanceof Array)? config: [config];\r\n config.forEach(function(c){\r\n if(typeof(c) === \"string\"){ has[c] = true; }\r\n });\r\n has.any = (!has.any)? has.attributes && has.value: has.any;\r\n \r\n // Cleanup & Prepare\r\n if(!has.regex || has.text){\r\n search = search.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\r\n }\r\n if(!has.exactglyphes){\r\n search = this.self.options.applyLinguisticRules(search, has.case);\r\n }\r\n if(has.word){\r\n search = '\\\\b' + search + '\\\\b';\r\n }\r\n\r\n // Search\r\n var regex = new RegExp(search, (!has.case)? \"mi\": \"m\"),\r\n sfunc = function(opt){ return regex.test(opt.text || opt.value); };\r\n \r\n // Handle\r\n if(has.any){\r\n matches = function(opt){ return sfunc(opt) || [].some.call(opt.attributes, sfunc); };\r\n } else if(has.attributes){\r\n matches = function(opt){ return [].some.call(opt.attributes, sfunc); };\r\n } else {\r\n matches = sfunc;\r\n }\r\n\r\n if(!this.self.con.searchDisabled){\r\n var temp = matches;\r\n matches = function(opt){ return !opt.disabled && temp(opt); };\r\n }\r\n }\r\n\r\n // Hammer Time\r\n return [].filter.call(this.self.e.options, matches).map(function(opt){\r\n return opt.hidden? false: self.get(opt) \r\n });\r\n },\r\n\r\n /*\r\n | FIND SOME OPTIONs - WALKER EDITION\r\n | @since 0.5.5 [0.3.0]\r\n */\r\n finder: function(search, config){\r\n if(this._finderLoop === undefined){\r\n this._finderLoop = this.find(search, config);\r\n }\r\n var item;\r\n while((item = this._finderLoop.shift()) !== undefined){\r\n return item;\r\n }\r\n delete this._finderLoop;\r\n return false;\r\n },\r\n\r\n /*\r\n | NEW OPTIONS WALKER\r\n | @since 0.5.15 [0.4.0]\r\n */\r\n walker: function(orderi, orderg){\r\n if(typeof(this._inLoop) != \"undefined\" && this._inLoop){\r\n if(this._inItems.length > 0){\r\n do {\r\n var temp = this.items[this._inGroup][this._inItems.shift()];\r\n } while(temp.hidden === true);\r\n return temp;\r\n }\r\n\r\n // Sort Items\r\n if(this._inGroups.length > 0){\r\n while(this._inGroups.length > 0){\r\n var group = this._inGroups.shift();\r\n if(!(group in this.items)){\r\n return false;\r\n }\r\n\r\n var keys = Object.keys(this.items[group]);\r\n if(keys.length > 0){\r\n break;\r\n }\r\n }\r\n if(orderi == \"ASC\"){\r\n keys.sort();\r\n } else if(orderi == \"DESC\"){\r\n keys.sort().reverse();\r\n } else if(typeof(orderi) == \"function\"){\r\n keys = orderi.call(this, keys);\r\n }\r\n this._inItems = keys;\r\n this._inGroup = group;\r\n return this.walker(null, null);\r\n }\r\n\r\n // Delete and Exit\r\n delete this._inLoop;\r\n delete this._inItems;\r\n delete this._inGroup;\r\n delete this._inGroups;\r\n return false;\r\n }\r\n\r\n // Sort Groups\r\n var groups = Object.keys(this.groups) || [];\r\n if(orderg == \"ASC\"){\r\n groups.sort();\r\n } else if(orderg == \"DESC\"){\r\n groups.sort().reverse();\r\n } else if(typeof(orderg) == \"function\"){\r\n groups = orderg.call(this, groups);\r\n }\r\n groups.unshift(\"#\");\r\n\r\n // Init Loop\r\n this._inLoop = true;\r\n this._inItems = [];\r\n this._inGroups = groups;\r\n return this.walker(orderi, null);\r\n }\r\n };\r\n\r\n // Return\r\n return select;\r\n}));\r\n"],"names":["root","factory","module","o","r","i","w","d","cHAS","el","name","cADD","cREM","trigger","event","opt","ev","clone","obj","rep","key","create","tag","classes","select","config","_r","l","test","placeholder","fb1","fb2","ret","options","locale","id","string","object","replace","def","self","con","regexp","c","init_selected","idx","inner","e","temp","tmp","space","pos","targets","u","s","item","state","_force","rkey","rgrp","rsel","element","args","pass","height","search","bottom","view","conf","tp","ul","li","a1","a2","g","func","group","count","data","grp","optgroup","label","len","limit","selected_class","hndl","option","prev","found","selected","animate","final","h","m","handles","value","rebuild","k","update","callback","parent","span","disabled","description","new_group","dis","lmt","sgl","del","uns","invert","action","convert","list","items","casesensitive","rules","values","matches","has","regex","sfunc","orderi","orderg","keys","groups"],"mappings":"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","x_google_ignoreList":[0]}