{"version":3,"sources":["awesomplete.js"],"names":["Suggestion","data","o","Array","isArray","label","value","this","configure","instance","properties","i","initial","attrValue","input","getAttribute","toLowerCase","parseInt","Function","$","expr","con","document","querySelector","$$","slice","call","querySelectorAll","init","forEach","_","me","Awesomplete","count","isOpened","setAttribute","minChars","maxItems","autoFirst","DATA","filter","FILTER_CONTAINS","sort","SORT_BYLENGTH","item","ITEM","replace","REPLACE","index","container","create","className","around","ul","hidden","role","id","inside","status","aria-live","aria-atomic","textContent","_events","evaluate","bind","blur","close","reason","keydown","evt","c","keyCode","opened","selected","preventDefault","select","form","submit","mousedown","click","li","target","test","nodeName","parentNode","button","hasAttribute","list","removeAttribute","all","push","prototype","_list","indexOf","split","children","items","apply","el","disabled","text","trim","activeElement","fire","open","goto","destroy","unbind","insertBefore","removeChild","indexOfAwesomplete","splice","next","length","previous","pos","lis","scrollTop","offsetTop","clientHeight","suggestions","origin","siblingIndex","suggestion","innerHTML","map","appendChild","RegExp","regExpEscape","FILTER_STARTSWITH","a","b","item_id","aria-selected","Object","defineProperty","String","get","toString","valueOf","tag","element","createElement","val","ref","event","callback","addEventListener","removeEventListener","type","createEvent","initEvent","j","dispatchEvent","s","previousElementSibling","Document","readyState","self","module","exports"],"mappings":"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","file":"awesomplete.min.js","sourcesContent":["/**\r\n * Simple, lightweight, usable local autocomplete library for modern browsers\r\n * Because there weren’t enough autocomplete scripts in the world? Because I’m completely insane and have NIH syndrome? Probably both. :P\r\n * @author Lea Verou http://leaverou.github.io/awesomplete\r\n * MIT license\r\n */\r\n\r\n(function () {\r\n\r\nvar _ = function (input, o) {\r\n\tvar me = this;\r\n \r\n // Keep track of number of instances for unique IDs\r\n Awesomplete.count = (Awesomplete.count || 0) + 1;\r\n this.count = Awesomplete.count;\r\n\r\n\t// Setup\r\n\r\n\tthis.isOpened = false;\r\n\r\n\tthis.input = $(input);\r\n\tthis.input.setAttribute(\"autocomplete\", \"off\");\r\n\tthis.input.setAttribute(\"aria-owns\", \"awesomplete_list_\" + this.count);\r\n\tthis.input.setAttribute(\"role\", \"combobox\");\r\n\r\n\to = o || {};\r\n\r\n\tconfigure(this, {\r\n\t\tminChars: 2,\r\n\t\tmaxItems: 10,\r\n\t\tautoFirst: false,\r\n\t\tdata: _.DATA,\r\n\t\tfilter: _.FILTER_CONTAINS,\r\n\t\tsort: o.sort === false ? false : _.SORT_BYLENGTH,\r\n\t\titem: _.ITEM,\r\n\t\treplace: _.REPLACE\r\n\t}, o);\r\n\r\n\tthis.index = -1;\r\n\r\n\t// Create necessary elements\r\n\r\n\tthis.container = $.create(\"div\", {\r\n\t\tclassName: \"awesomplete\",\r\n\t\taround: input\r\n\t});\r\n\r\n\tthis.ul = $.create(\"ul\", {\r\n\t\thidden: \"hidden\",\r\n role: \"listbox\",\r\n id: \"awesomplete_list_\" + this.count,\r\n\t\tinside: this.container\r\n\t});\r\n\r\n\tthis.status = $.create(\"span\", {\r\n\t\tclassName: \"visually-hidden\",\r\n\t\trole: \"status\",\r\n\t\t\"aria-live\": \"assertive\",\r\n \"aria-atomic\": true,\r\n inside: this.container,\r\n textContent: this.minChars != 0 ? (\"Type \" + this.minChars + \" or more characters for results.\") : \"Begin typing for results.\"\r\n\t});\r\n\r\n\t// Bind events\r\n\r\n\tthis._events = {\r\n\t\tinput: {\r\n\t\t\t\"input\": this.evaluate.bind(this),\r\n\t\t\t\"blur\": this.close.bind(this, { reason: \"blur\" }),\r\n\t\t\t\"keydown\": function(evt) {\r\n\t\t\t\tvar c = evt.keyCode;\r\n\r\n\t\t\t\t// If the dropdown `ul` is in view, then act on keydown for the following keys:\r\n\t\t\t\t// Enter / Esc / Up / Down\r\n\t\t\t\tif(me.opened) {\r\n\t\t\t\t\tif (c === 13 && me.selected) { // Enter\r\n\t\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\t\tme.select();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (c === 27) { // Esc\r\n\t\t\t\t\t\tme.close({ reason: \"esc\" });\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse if (c === 38 || c === 40) { // Down/Up arrow\r\n\t\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\t\tme[c === 38? \"previous\" : \"next\"]();\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tform: {\r\n\t\t\t\"submit\": this.close.bind(this, { reason: \"submit\" })\r\n\t\t},\r\n\t\tul: {\r\n\t\t\t// Prevent the default mousedowm, which ensures the input is not blurred.\r\n\t\t\t// The actual selection will happen on click. This also ensures dragging the\r\n\t\t\t// cursor away from the list item will cancel the selection\r\n\t\t\t\"mousedown\": function(evt) {\r\n\t\t\t\tevt.preventDefault();\r\n\t\t\t},\r\n\t\t\t// The click event is fired even if the corresponding mousedown event has called preventDefault\r\n\t\t\t\"click\": function(evt) {\r\n\t\t\t\tvar li = evt.target;\r\n\r\n\t\t\t\tif (li !== this) {\r\n\r\n\t\t\t\t\twhile (li && !/li/i.test(li.nodeName)) {\r\n\t\t\t\t\t\tli = li.parentNode;\r\n\t\t\t\t\t}\r\n\r\n\t\t\t\t\tif (li && evt.button === 0) { // Only select on left click\r\n\t\t\t\t\t\tevt.preventDefault();\r\n\t\t\t\t\t\tme.select(li, evt.target);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t};\r\n\r\n\t$.bind(this.input, this._events.input);\r\n\t$.bind(this.input.form, this._events.form);\r\n\t$.bind(this.ul, this._events.ul);\r\n\r\n\tif (this.input.hasAttribute(\"list\")) {\r\n\t\tthis.list = \"#\" + this.input.getAttribute(\"list\");\r\n\t\tthis.input.removeAttribute(\"list\");\r\n\t}\r\n\telse {\r\n\t\tthis.list = this.input.getAttribute(\"data-list\") || o.list || [];\r\n\t}\r\n\r\n\t_.all.push(this);\r\n};\r\n\r\n_.prototype = {\r\n\tset list(list) {\r\n\t\tif (Array.isArray(list)) {\r\n\t\t\tthis._list = list;\r\n\t\t}\r\n\t\telse if (typeof list === \"string\" && list.indexOf(\",\") > -1) {\r\n\t\t\t\tthis._list = list.split(/\\s*,\\s*/);\r\n\t\t}\r\n\t\telse { // Element or CSS selector\r\n\t\t\tlist = $(list);\r\n\r\n\t\t\tif (list && list.children) {\r\n\t\t\t\tvar items = [];\r\n\t\t\t\tslice.apply(list.children).forEach(function (el) {\r\n\t\t\t\t\tif (!el.disabled) {\r\n\t\t\t\t\t\tvar text = el.textContent.trim();\r\n\t\t\t\t\t\tvar value = el.value || text;\r\n\t\t\t\t\t\tvar label = el.label || text;\r\n\t\t\t\t\t\tif (value !== \"\") {\r\n\t\t\t\t\t\t\titems.push({ label: label, value: value });\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t}\r\n\t\t\t\t});\r\n\t\t\t\tthis._list = items;\r\n\t\t\t}\r\n\t\t}\r\n\r\n\t\tif (document.activeElement === this.input) {\r\n\t\t\tthis.evaluate();\r\n\t\t}\r\n\t},\r\n\r\n\tget selected() {\r\n\t\treturn this.index > -1;\r\n\t},\r\n\r\n\tget opened() {\r\n\t\treturn this.isOpened;\r\n\t},\r\n\r\n\tclose: function (o) {\r\n\t\tif (!this.opened) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.ul.setAttribute(\"hidden\", \"\");\r\n\t\tthis.isOpened = false;\r\n\t\tthis.index = -1;\r\n \r\n\t\tthis.status.setAttribute(\"hidden\", \"\");\r\n\r\n\t\t$.fire(this.input, \"awesomplete-close\", o || {});\r\n\t},\r\n\r\n\topen: function () {\r\n\t\tthis.ul.removeAttribute(\"hidden\");\r\n\t\tthis.isOpened = true;\r\n \r\n\t\tthis.status.removeAttribute(\"hidden\");\r\n\r\n\t\tif (this.autoFirst && this.index === -1) {\r\n\t\t\tthis.goto(0);\r\n\t\t}\r\n\r\n\t\t$.fire(this.input, \"awesomplete-open\");\r\n\t},\r\n\r\n\tdestroy: function() {\r\n\t\t//remove events from the input and its form\r\n\t\t$.unbind(this.input, this._events.input);\r\n\t\t$.unbind(this.input.form, this._events.form);\r\n\r\n\t\t//move the input out of the awesomplete container and remove the container and its children\r\n\t\tvar parentNode = this.container.parentNode;\r\n\r\n\t\tparentNode.insertBefore(this.input, this.container);\r\n\t\tparentNode.removeChild(this.container);\r\n\r\n\t\t//remove autocomplete and aria-autocomplete attributes\r\n\t\tthis.input.removeAttribute(\"autocomplete\");\r\n\t\tthis.input.removeAttribute(\"aria-autocomplete\");\r\n\r\n\t\t//remove this awesomeplete instance from the global array of instances\r\n\t\tvar indexOfAwesomplete = _.all.indexOf(this);\r\n\r\n\t\tif (indexOfAwesomplete !== -1) {\r\n\t\t\t_.all.splice(indexOfAwesomplete, 1);\r\n\t\t}\r\n\t},\r\n\r\n\tnext: function () {\r\n\t\tvar count = this.ul.children.length;\r\n\t\tthis.goto(this.index < count - 1 ? this.index + 1 : (count ? 0 : -1) );\r\n\t},\r\n\r\n\tprevious: function () {\r\n\t\tvar count = this.ul.children.length;\r\n\t\tvar pos = this.index - 1;\r\n\r\n\t\tthis.goto(this.selected && pos !== -1 ? pos : count - 1);\r\n\t},\r\n\r\n\t// Should not be used, highlights specific item without any checks!\r\n\tgoto: function (i) {\r\n\t\tvar lis = this.ul.children;\r\n\r\n\t\tif (this.selected) {\r\n\t\t\tlis[this.index].setAttribute(\"aria-selected\", \"false\");\r\n\t\t}\r\n\r\n\t\tthis.index = i;\r\n\r\n\t\tif (i > -1 && lis.length > 0) {\r\n\t\t\tlis[i].setAttribute(\"aria-selected\", \"true\");\r\n \r\n\t\t\tthis.status.textContent = lis[i].textContent + \", list item \" + (i + 1) + \" of \" + lis.length;\r\n \r\n this.input.setAttribute(\"aria-activedescendant\", this.ul.id + \"_item_\" + this.index);\r\n\r\n\t\t\t// scroll to highlighted element in case parent's height is fixed\r\n\t\t\tthis.ul.scrollTop = lis[i].offsetTop - this.ul.clientHeight + lis[i].clientHeight;\r\n\r\n\t\t\t$.fire(this.input, \"awesomplete-highlight\", {\r\n\t\t\t\ttext: this.suggestions[this.index]\r\n\t\t\t});\r\n\t\t}\r\n\t},\r\n\r\n\tselect: function (selected, origin) {\r\n\t\tif (selected) {\r\n\t\t\tthis.index = $.siblingIndex(selected);\r\n\t\t} else {\r\n\t\t\tselected = this.ul.children[this.index];\r\n\t\t}\r\n\r\n\t\tif (selected) {\r\n\t\t\tvar suggestion = this.suggestions[this.index];\r\n\r\n\t\t\tvar allowed = $.fire(this.input, \"awesomplete-select\", {\r\n\t\t\t\ttext: suggestion,\r\n\t\t\t\torigin: origin || selected\r\n\t\t\t});\r\n\r\n\t\t\tif (allowed) {\r\n\t\t\t\tthis.replace(suggestion);\r\n\t\t\t\tthis.close({ reason: \"select\" });\r\n\t\t\t\t$.fire(this.input, \"awesomplete-selectcomplete\", {\r\n\t\t\t\t\ttext: suggestion\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t}\r\n\t},\r\n\r\n\tevaluate: function() {\r\n\t\tvar me = this;\r\n\t\tvar value = this.input.value;\r\n\r\n\t\tif (value.length >= this.minChars && this._list && this._list.length > 0) {\r\n\t\t\tthis.index = -1;\r\n\t\t\t// Populate list with options that match\r\n\t\t\tthis.ul.innerHTML = \"\";\r\n\r\n\t\t\tthis.suggestions = this._list\r\n\t\t\t\t.map(function(item) {\r\n\t\t\t\t\treturn new Suggestion(me.data(item, value));\r\n\t\t\t\t})\r\n\t\t\t\t.filter(function(item) {\r\n\t\t\t\t\treturn me.filter(item, value);\r\n\t\t\t\t});\r\n\r\n\t\t\tif (this.sort !== false) {\r\n\t\t\t\tthis.suggestions = this.suggestions.sort(this.sort);\r\n\t\t\t}\r\n\r\n\t\t\tthis.suggestions = this.suggestions.slice(0, this.maxItems);\r\n\r\n\t\t\tthis.suggestions.forEach(function(text, index) {\r\n\t\t\t\t\tme.ul.appendChild(me.item(text, value, index));\r\n\t\t\t\t});\r\n\r\n\t\t\tif (this.ul.children.length === 0) {\r\n \r\n this.status.textContent = \"No results found\";\r\n \r\n\t\t\t\tthis.close({ reason: \"nomatches\" });\r\n \r\n\t\t\t} else {\r\n\t\t\t\tthis.open();\r\n \r\n this.status.textContent = this.ul.children.length + \" results found\";\r\n\t\t\t}\r\n\t\t}\r\n\t\telse {\r\n\t\t\tthis.close({ reason: \"nomatches\" });\r\n \r\n this.status.textContent = \"No results found\";\r\n\t\t}\r\n\t}\r\n};\r\n\r\n// Static methods/properties\r\n\r\n_.all = [];\r\n\r\n_.FILTER_CONTAINS = function (text, input) {\r\n\treturn RegExp($.regExpEscape(input.trim()), \"i\").test(text);\r\n};\r\n\r\n_.FILTER_STARTSWITH = function (text, input) {\r\n\treturn RegExp(\"^\" + $.regExpEscape(input.trim()), \"i\").test(text);\r\n};\r\n\r\n_.SORT_BYLENGTH = function (a, b) {\r\n\tif (a.length !== b.length) {\r\n\t\treturn a.length - b.length;\r\n\t}\r\n\r\n\treturn a < b? -1 : 1;\r\n};\r\n\r\n_.ITEM = function (text, input, item_id) {\r\n\tvar html = input.trim() === \"\" ? text : text.replace(RegExp($.regExpEscape(input.trim()), \"gi\"), \"$&\");\r\n\treturn $.create(\"li\", {\r\n\t\tinnerHTML: html,\r\n\t\t\"aria-selected\": \"false\",\r\n \"id\": \"awesomplete_list_\" + this.count + \"_item_\" + item_id\r\n\t});\r\n};\r\n\r\n_.REPLACE = function (text) {\r\n\tthis.input.value = text.value;\r\n};\r\n\r\n_.DATA = function (item/*, input*/) { return item; };\r\n\r\n// Private functions\r\n\r\nfunction Suggestion(data) {\r\n\tvar o = Array.isArray(data)\r\n\t ? { label: data[0], value: data[1] }\r\n\t : typeof data === \"object\" && \"label\" in data && \"value\" in data ? data : { label: data, value: data };\r\n\r\n\tthis.label = o.label || o.value;\r\n\tthis.value = o.value;\r\n}\r\nObject.defineProperty(Suggestion.prototype = Object.create(String.prototype), \"length\", {\r\n\tget: function() { return this.label.length; }\r\n});\r\nSuggestion.prototype.toString = Suggestion.prototype.valueOf = function () {\r\n\treturn \"\" + this.label;\r\n};\r\n\r\nfunction configure(instance, properties, o) {\r\n\tfor (var i in properties) {\r\n\t\tvar initial = properties[i],\r\n\t\t attrValue = instance.input.getAttribute(\"data-\" + i.toLowerCase());\r\n\r\n\t\tif (typeof initial === \"number\") {\r\n\t\t\tinstance[i] = parseInt(attrValue);\r\n\t\t}\r\n\t\telse if (initial === false) { // Boolean options must be false by default anyway\r\n\t\t\tinstance[i] = attrValue !== null;\r\n\t\t}\r\n\t\telse if (initial instanceof Function) {\r\n\t\t\tinstance[i] = null;\r\n\t\t}\r\n\t\telse {\r\n\t\t\tinstance[i] = attrValue;\r\n\t\t}\r\n\r\n\t\tif (!instance[i] && instance[i] !== 0) {\r\n\t\t\tinstance[i] = (i in o)? o[i] : initial;\r\n\t\t}\r\n\t}\r\n}\r\n\r\n// Helpers\r\n\r\nvar slice = Array.prototype.slice;\r\n\r\nfunction $(expr, con) {\r\n\treturn typeof expr === \"string\"? (con || document).querySelector(expr) : expr || null;\r\n}\r\n\r\nfunction $$(expr, con) {\r\n\treturn slice.call((con || document).querySelectorAll(expr));\r\n}\r\n\r\n$.create = function(tag, o) {\r\n\tvar element = document.createElement(tag);\r\n\r\n\tfor (var i in o) {\r\n\t\tvar val = o[i];\r\n\r\n\t\tif (i === \"inside\") {\r\n\t\t\t$(val).appendChild(element);\r\n\t\t}\r\n\t\telse if (i === \"around\") {\r\n\t\t\tvar ref = $(val);\r\n\t\t\tref.parentNode.insertBefore(element, ref);\r\n\t\t\telement.appendChild(ref);\r\n\t\t}\r\n\t\telse if (i in element) {\r\n\t\t\telement[i] = val;\r\n\t\t}\r\n\t\telse {\r\n\t\t\telement.setAttribute(i, val);\r\n\t\t}\r\n\t}\r\n\r\n\treturn element;\r\n};\r\n\r\n$.bind = function(element, o) {\r\n\tif (element) {\r\n\t\tfor (var event in o) {\r\n\t\t\tvar callback = o[event];\r\n\r\n\t\t\tevent.split(/\\s+/).forEach(function (event) {\r\n\t\t\t\telement.addEventListener(event, callback);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\n$.unbind = function(element, o) {\r\n\tif (element) {\r\n\t\tfor (var event in o) {\r\n\t\t\tvar callback = o[event];\r\n\r\n\t\t\tevent.split(/\\s+/).forEach(function(event) {\r\n\t\t\t\telement.removeEventListener(event, callback);\r\n\t\t\t});\r\n\t\t}\r\n\t}\r\n};\r\n\r\n$.fire = function(target, type, properties) {\r\n\tvar evt = document.createEvent(\"HTMLEvents\");\r\n\r\n\tevt.initEvent(type, true, true );\r\n\r\n\tfor (var j in properties) {\r\n\t\tevt[j] = properties[j];\r\n\t}\r\n\r\n\treturn target.dispatchEvent(evt);\r\n};\r\n\r\n$.regExpEscape = function (s) {\r\n\treturn s.replace(/[-\\\\^$*+?.()|[\\]{}]/g, \"\\\\$&\");\r\n};\r\n\r\n$.siblingIndex = function (el) {\r\n\t/* eslint-disable no-cond-assign */\r\n\tfor (var i = 0; el = el.previousElementSibling; i++);\r\n\treturn i;\r\n};\r\n\r\n// Initialization\r\n\r\nfunction init() {\r\n\t$$(\"input.awesomplete\").forEach(function (input) {\r\n\t\tnew _(input);\r\n\t});\r\n}\r\n\r\n// Are we in a browser? Check for Document constructor\r\nif (typeof Document !== \"undefined\") {\r\n\t// DOM already loaded?\r\n\tif (document.readyState !== \"loading\") {\r\n\t\tinit();\r\n\t}\r\n\telse {\r\n\t\t// Wait for it\r\n\t\tdocument.addEventListener(\"DOMContentLoaded\", init);\r\n\t}\r\n}\r\n\r\n_.$ = $;\r\n_.$$ = $$;\r\n\r\n// Make sure to export Awesomplete on self when in a browser\r\nif (typeof self !== \"undefined\") {\r\n\tself.Awesomplete = _;\r\n}\r\n\r\n// Expose Awesomplete as a CJS module\r\nif (typeof module === \"object\" && module.exports) {\r\n\tmodule.exports = _;\r\n}\r\n\r\nreturn _;\r\n\r\n}());\r\n"]}