{"version":3,"sources":["jquery\\typeahead.jquery.js"],"names":["root","factory","define","amd","a0","module","exports","require","this","$","_","isBlankString","str","test","escapeRegExChars","replace","isString","obj","isNumber","isArray","Array","isFunction","isObject","isPlainObject","isUndefined","isElement","nodeType","isJQuery","toStr","s","bind","proxy","each","collection","cb","index","value","map","filter","grep","every","result","key","val","call","some","mixin","extend","identity","x","clone","getIdGenerator","counter","templatify","String","defer","fn","setTimeout","debounce","func","wait","immediate","timeout","later","callNow","context","args","arguments","apply","clearTimeout","throttle","previous","Date","now","remaining","stringify","JSON","guid","_p8","p","Math","random","toString","substr","noop","WWW","defaultClassNames","wrapper","input","hint","menu","dataset","suggestion","selectable","empty","open","cursor","highlight","o","www","classes","css","buildCss","html","buildHtml","selectors","buildSelectors","c","v","k","position","display","top","left","borderColor","boxShadow","opacity","verticalAlign","backgroundColor","inputWithNoHint","zIndex","ltr","right","rtl","EventBus","deprecationMap","el","error","$el","render","cursorchange","select","autocomplete","prototype","_trigger","type","$e","Event","trigger","before","slice","isDefaultPrevented","deprecatedType","EventEmitter","splitter","nextTick","nextTickFn","window","setImmediate","getNextTick","onSync","types","on","onAsync","off","_callbacks","split","shift","callbacks","syncFlush","asyncFlush","getFlush","sync","concat","async","method","bindContext","push","cancelled","i","len","length","doc","defaults","node","pattern","tagName","className","wordsOnly","caseSensitive","diacriticInsensitive","accented","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","regex","patterns","regexStr","escapedPatterns","escapedWord","accent_replacer","join","RegExp","getRegex","traverse","hightlightTextNode","childNode","childNodes","textNode","match","patternNode","wrapperNode","exec","data","createElement","splitText","appendChild","cloneNode","parentNode","replaceChild","chr","toUpperCase","document","Input","specialKeyCodeMap","id","$input","$hint","$menu","attr","role","query","queryWhenFocused","hasFocus","$overflowHelper","visibility","whiteSpace","fontFamily","fontSize","fontStyle","fontVariant","fontWeight","wordSpacing","letterSpacing","textIndent","textRendering","textTransform","insertAfter","_checkLanguageDirection","setHint","getHint","clearHint","clearHintIfInvalid","_updateDescendent","normalizeQuery","_onBlur","resetInputValue","_onFocus","_onKeydown","keyName","which","keyCode","_managePreventDefault","_shouldTrigger","_onInput","_setQuery","getInputValue","preventDefault","withModifier","dir","toLowerCase","silent","areEquivalent","hasDifferentWhitespace","a","b","event","onBlur","onFocus","onKeydown","onInput","focus","blur","getLangDir","getQuery","setQuery","setInputValue","hasQueryChangedSinceLastFocus","valIsPrefixOfHint","indexOf","hasOverflow","is","constraint","width","text","isCursorAtEnd","valueLength","selectionStart","range","selection","createRange","moveStart","destroy","remove","setAriaExpanded","altKey","ctrlKey","metaKey","shiftKey","Dataset","keys","nameGenerator","templates","notFound","source","name","limit","displayFn","getDisplayFn","displayKey","pending","header","footer","userSuggestionTemplate","suggestionTemplate","template","getTemplates","__ttAdapter","_resetLastSuggestion","addClass","extractData","_overwrite","suggestions","_renderSuggestions","_renderPending","_renderNotFound","_empty","_append","$lastSuggestion","_appendSuggestions","$fragment","_getSuggestionsFragment","children","last","prepend","_getHeader","append","_getFooter","after","fragment","that","createDocumentFragment","_injectQuery","_query","update","canceled","syncCalled","rendered","cancel","idx","abs","clear","isEmpty","Menu","$node","_popper","Popper","createPopper","parent","find","placement","datasets","oDataset","first","appendTo","_onSelectableClick","currentTarget","_onRendered","toggleClass","_allDatasetsEmpty","_onCleared","_propagate","_getSelectables","_removeCursor","$selectable","getActiveSelectable","removeClass","_ensureVisible","elTop","elBottom","nodeScrollTop","nodeHeight","outerHeight","scrollTop","height","parseInt","onSelectableClick","setCursor","isOpen","hasClass","close","setLanguageDirection","selectableRelativeToCursor","delta","$selectables","$oldCursor","newIndex","eq","getSelectableData","getTopSelectable","isValidUpdate","Status","options","padding","border","overflow","clip","cleared","words","DefaultMenu","_show","_hide","hide","Typeahead","onFocused","onBlurred","onEnterKeyed","onTabKeyed","onEscKeyed","onUpKeyed","onDownKeyed","onLeftKeyed","onRightKeyed","onQueryChanged","onWhitespaceChanged","eventBus","minLength","enabled","autoselect","active","activate","_hacks","_onSelectableClicked","_onAsyncRequested","_onAsyncCanceled","_onAsyncReceived","_onDatasetRendered","_onDatasetCleared","_onLangDirChanged","activeElement","isActive","hasActive","has","_updateHint","cursorClass","_onFocused","_minLengthMet","_onBlurred","_onEnterKeyed","stopPropagation","_onTabKeyed","_onEscKeyed","_onUpKeyed","moveCursor","_onDownKeyed","_onLeftKeyed","_onRightKeyed","_onQueryChanged","e","_onWhitespaceChanged","_openIfActive","escapedQuery","isEnabled","enable","disable","deactivate","setVal","getVal","$candidate","datasetName","ctx","methods","old","ttEach","$els","typeahead","buildHintFromInput","removeData","backgroundAttachment","backgroundClip","backgroundImage","backgroundOrigin","backgroundPosition","backgroundRepeat","backgroundSize","prop","readonly","required","removeAttr","spellcheck","tabindex","prepInput","attrs","style","$elOrNull","initialize","classNames","attach","$wrapper","defaultHint","defaultMenu","MenuConstructor","d","wrap","t","success","newVal","detach","revert","noConflict"],"mappings":"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","sourcesContent":["/*!\r\n * typeahead.js 1.3.1\r\n * https://github.com/corejavascript/typeahead.js\r\n * Copyright 2013-2021 Twitter, Inc. and other contributors; Licensed MIT\r\n */\r\n\r\n\r\n(function(root, factory) {\r\n if (typeof define === \"function\" && define.amd) {\r\n define([ \"jquery\" ], function(a0) {\r\n return factory(a0);\r\n });\r\n } else if (typeof module === \"object\" && module.exports) {\r\n module.exports = factory(require(\"jquery\"));\r\n } else {\r\n factory(root[\"jQuery\"]);\r\n }\r\n})(this, function($) {\r\n var _ = function() {\r\n \"use strict\";\r\n return {\r\n isBlankString: function(str) {\r\n return !str || /^\\s*$/.test(str);\r\n },\r\n escapeRegExChars: function(str) {\r\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n },\r\n isString: function(obj) {\r\n return typeof obj === \"string\";\r\n },\r\n isNumber: function(obj) {\r\n return typeof obj === \"number\";\r\n },\r\n isArray: Array.isArray,\r\n isFunction: function(obj) {\r\n return typeof obj === \"function\";\r\n },\r\n isObject: $.isPlainObject,\r\n isUndefined: function(obj) {\r\n return typeof obj === \"undefined\";\r\n },\r\n isElement: function(obj) {\r\n return !!(obj && obj.nodeType === 1);\r\n },\r\n isJQuery: function(obj) {\r\n return obj instanceof $;\r\n },\r\n toStr: function toStr(s) {\r\n return _.isUndefined(s) || s === null ? \"\" : s + \"\";\r\n },\r\n bind: $.proxy,\r\n each: function(collection, cb) {\r\n $.each(collection, reverseArgs);\r\n function reverseArgs(index, value) {\r\n return cb(value, index);\r\n }\r\n },\r\n map: $.map,\r\n filter: $.grep,\r\n every: function(obj, test) {\r\n var result = true;\r\n if (!obj) {\r\n return result;\r\n }\r\n $.each(obj, function(key, val) {\r\n if (!(result = test.call(null, val, key, obj))) {\r\n return false;\r\n }\r\n });\r\n return !!result;\r\n },\r\n some: function(obj, test) {\r\n var result = false;\r\n if (!obj) {\r\n return result;\r\n }\r\n $.each(obj, function(key, val) {\r\n if (result = test.call(null, val, key, obj)) {\r\n return false;\r\n }\r\n });\r\n return !!result;\r\n },\r\n mixin: $.extend,\r\n identity: function(x) {\r\n return x;\r\n },\r\n clone: function(obj) {\r\n return $.extend(true, {}, obj);\r\n },\r\n getIdGenerator: function() {\r\n var counter = 0;\r\n return function() {\r\n return counter++;\r\n };\r\n },\r\n templatify: function templatify(obj) {\r\n return $.isFunction(obj) ? obj : template;\r\n function template() {\r\n return String(obj);\r\n }\r\n },\r\n defer: function(fn) {\r\n setTimeout(fn, 0);\r\n },\r\n debounce: function(func, wait, immediate) {\r\n var timeout, result;\r\n return function() {\r\n var context = this, args = arguments, later, callNow;\r\n later = function() {\r\n timeout = null;\r\n if (!immediate) {\r\n result = func.apply(context, args);\r\n }\r\n };\r\n callNow = immediate && !timeout;\r\n clearTimeout(timeout);\r\n timeout = setTimeout(later, wait);\r\n if (callNow) {\r\n result = func.apply(context, args);\r\n }\r\n return result;\r\n };\r\n },\r\n throttle: function(func, wait) {\r\n var context, args, timeout, result, previous, later;\r\n previous = 0;\r\n later = function() {\r\n previous = new Date();\r\n timeout = null;\r\n result = func.apply(context, args);\r\n };\r\n return function() {\r\n var now = new Date(), remaining = wait - (now - previous);\r\n context = this;\r\n args = arguments;\r\n if (remaining <= 0) {\r\n clearTimeout(timeout);\r\n timeout = null;\r\n previous = now;\r\n result = func.apply(context, args);\r\n } else if (!timeout) {\r\n timeout = setTimeout(later, remaining);\r\n }\r\n return result;\r\n };\r\n },\r\n stringify: function(val) {\r\n return _.isString(val) ? val : JSON.stringify(val);\r\n },\r\n guid: function() {\r\n function _p8(s) {\r\n var p = (Math.random().toString(16) + \"000000000\").substr(2, 8);\r\n return s ? \"-\" + p.substr(0, 4) + \"-\" + p.substr(4, 4) : p;\r\n }\r\n return \"tt-\" + _p8() + _p8(true) + _p8(true) + _p8();\r\n },\r\n noop: function() {}\r\n };\r\n }();\r\n var WWW = function() {\r\n \"use strict\";\r\n var defaultClassNames = {\r\n wrapper: \"twitter-typeahead\",\r\n input: \"tt-input\",\r\n hint: \"tt-hint\",\r\n menu: \"tt-menu\",\r\n dataset: \"tt-dataset\",\r\n suggestion: \"tt-suggestion\",\r\n selectable: \"tt-selectable\",\r\n empty: \"tt-empty\",\r\n open: \"tt-open\",\r\n cursor: \"tt-cursor\",\r\n highlight: \"tt-highlight\"\r\n };\r\n return build;\r\n function build(o) {\r\n var www, classes;\r\n classes = _.mixin({}, defaultClassNames, o);\r\n www = {\r\n css: buildCss(),\r\n classes: classes,\r\n html: buildHtml(classes),\r\n selectors: buildSelectors(classes)\r\n };\r\n return {\r\n css: www.css,\r\n html: www.html,\r\n classes: www.classes,\r\n selectors: www.selectors,\r\n mixin: function(o) {\r\n _.mixin(o, www);\r\n }\r\n };\r\n }\r\n function buildHtml(c) {\r\n return {\r\n wrapper: '',\r\n menu: '
'\r\n };\r\n }\r\n function buildSelectors(classes) {\r\n var selectors = {};\r\n _.each(classes, function(v, k) {\r\n selectors[k] = \".\" + v;\r\n });\r\n return selectors;\r\n }\r\n function buildCss() {\r\n var css = {\r\n wrapper: {\r\n position: \"relative\",\r\n display: \"inline-block\"\r\n },\r\n hint: {\r\n position: \"absolute\",\r\n top: \"0\",\r\n left: \"0\",\r\n borderColor: \"transparent\",\r\n boxShadow: \"none\",\r\n opacity: \"1\"\r\n },\r\n input: {\r\n position: \"relative\",\r\n verticalAlign: \"top\",\r\n backgroundColor: \"var(--bs-body-bg)\" //***\r\n },\r\n inputWithNoHint: {\r\n position: \"relative\",\r\n verticalAlign: \"top\"\r\n },\r\n menu: {\r\n position: \"absolute\",\r\n top: \"100%\",\r\n left: \"0\",\r\n zIndex: \"100\",\r\n display: \"none\"\r\n },\r\n ltr: {\r\n left: \"0\",\r\n right: \"auto\"\r\n },\r\n rtl: {\r\n left: \"auto\",\r\n right: \" 0\"\r\n }\r\n };\r\n return css;\r\n }\r\n }();\r\n var EventBus = function() {\r\n \"use strict\";\r\n var namespace, deprecationMap;\r\n namespace = \"typeahead:\";\r\n deprecationMap = {\r\n render: \"rendered\",\r\n cursorchange: \"cursorchanged\",\r\n select: \"selected\",\r\n autocomplete: \"autocompleted\"\r\n };\r\n function EventBus(o) {\r\n if (!o || !o.el) {\r\n $.error(\"EventBus initialized without el\");\r\n }\r\n this.$el = $(o.el);\r\n }\r\n _.mixin(EventBus.prototype, {\r\n _trigger: function(type, args) {\r\n var $e = $.Event(namespace + type);\r\n this.$el.trigger.call(this.$el, $e, args || []);\r\n return $e;\r\n },\r\n before: function(type) {\r\n var args, $e;\r\n args = [].slice.call(arguments, 1);\r\n $e = this._trigger(\"before\" + type, args);\r\n return $e.isDefaultPrevented();\r\n },\r\n trigger: function(type) {\r\n var deprecatedType;\r\n this._trigger(type, [].slice.call(arguments, 1));\r\n if (deprecatedType = deprecationMap[type]) {\r\n this._trigger(deprecatedType, [].slice.call(arguments, 1));\r\n }\r\n }\r\n });\r\n return EventBus;\r\n }();\r\n var EventEmitter = function() {\r\n \"use strict\";\r\n var splitter = /\\s+/, nextTick = getNextTick();\r\n return {\r\n onSync: onSync,\r\n onAsync: onAsync,\r\n off: off,\r\n trigger: trigger\r\n };\r\n function on(method, types, cb, context) {\r\n var type;\r\n if (!cb) {\r\n return this;\r\n }\r\n types = types.split(splitter);\r\n cb = context ? bindContext(cb, context) : cb;\r\n this._callbacks = this._callbacks || {};\r\n while (type = types.shift()) {\r\n this._callbacks[type] = this._callbacks[type] || {\r\n sync: [],\r\n async: []\r\n };\r\n this._callbacks[type][method].push(cb);\r\n }\r\n return this;\r\n }\r\n function onAsync(types, cb, context) {\r\n return on.call(this, \"async\", types, cb, context);\r\n }\r\n function onSync(types, cb, context) {\r\n return on.call(this, \"sync\", types, cb, context);\r\n }\r\n function off(types) {\r\n var type;\r\n if (!this._callbacks) {\r\n return this;\r\n }\r\n types = types.split(splitter);\r\n while (type = types.shift()) {\r\n delete this._callbacks[type];\r\n }\r\n return this;\r\n }\r\n function trigger(types) {\r\n var type, callbacks, args, syncFlush, asyncFlush;\r\n if (!this._callbacks) {\r\n return this;\r\n }\r\n types = types.split(splitter);\r\n args = [].slice.call(arguments, 1);\r\n while ((type = types.shift()) && (callbacks = this._callbacks[type])) {\r\n syncFlush = getFlush(callbacks.sync, this, [ type ].concat(args));\r\n asyncFlush = getFlush(callbacks.async, this, [ type ].concat(args));\r\n syncFlush() && nextTick(asyncFlush);\r\n }\r\n return this;\r\n }\r\n function getFlush(callbacks, context, args) {\r\n return flush;\r\n function flush() {\r\n var cancelled;\r\n for (var i = 0, len = callbacks.length; !cancelled && i < len; i += 1) {\r\n cancelled = callbacks[i].apply(context, args) === false;\r\n }\r\n return !cancelled;\r\n }\r\n }\r\n function getNextTick() {\r\n var nextTickFn;\r\n if (window.setImmediate) {\r\n nextTickFn = function nextTickSetImmediate(fn) {\r\n setImmediate(function() {\r\n fn();\r\n });\r\n };\r\n } else {\r\n nextTickFn = function nextTickSetTimeout(fn) {\r\n setTimeout(function() {\r\n fn();\r\n }, 0);\r\n };\r\n }\r\n return nextTickFn;\r\n }\r\n function bindContext(fn, context) {\r\n return fn.bind ? fn.bind(context) : function() {\r\n fn.apply(context, [].slice.call(arguments, 0));\r\n };\r\n }\r\n }();\r\n var highlight = function(doc) {\r\n \"use strict\";\r\n var defaults = {\r\n node: null,\r\n pattern: null,\r\n tagName: \"strong\",\r\n className: null,\r\n wordsOnly: false,\r\n caseSensitive: false,\r\n diacriticInsensitive: false\r\n };\r\n var accented = {\r\n A: \"[AaªÀ-Åà-åĀ-ąǍǎȀ-ȃȦȧᴬᵃḀḁẚẠ-ảₐ℀℁℻⒜Ⓐⓐ㍱-㍴㎀-㎄㎈㎉㎩-㎯㏂㏊㏟㏿Aa]\",\r\n B: \"[BbᴮᵇḂ-ḇℬ⒝Ⓑⓑ㍴㎅-㎇㏃㏈㏔㏝Bb]\",\r\n C: \"[CcÇçĆ-čᶜ℀ℂ℃℅℆ℭⅭⅽ⒞Ⓒⓒ㍶㎈㎉㎝㎠㎤㏄-㏇Cc]\",\r\n D: \"[DdĎďDŽ-džDZ-dzᴰᵈḊ-ḓⅅⅆⅮⅾ⒟Ⓓⓓ㋏㍲㍷-㍹㎗㎭-㎯㏅㏈Dd]\",\r\n E: \"[EeÈ-Ëè-ëĒ-ěȄ-ȇȨȩᴱᵉḘ-ḛẸ-ẽₑ℡ℯℰⅇ⒠Ⓔⓔ㉐㋍㋎Ee]\",\r\n F: \"[FfᶠḞḟ℉ℱ℻⒡Ⓕⓕ㎊-㎌㎙ff-fflFf]\",\r\n G: \"[GgĜ-ģǦǧǴǵᴳᵍḠḡℊ⒢Ⓖⓖ㋌㋍㎇㎍-㎏㎓㎬㏆㏉㏒㏿Gg]\",\r\n H: \"[HhĤĥȞȟʰᴴḢ-ḫẖℋ-ℎ⒣Ⓗⓗ㋌㍱㎐-㎔㏊㏋㏗Hh]\",\r\n I: \"[IiÌ-Ïì-ïĨ-İIJijǏǐȈ-ȋᴵᵢḬḭỈ-ịⁱℐℑℹⅈⅠ-ⅣⅥ-ⅨⅪⅫⅰ-ⅳⅵ-ⅸⅺⅻ⒤Ⓘⓘ㍺㏌㏕fiffiIi]\",\r\n J: \"[JjIJ-ĵLJ-njǰʲᴶⅉ⒥ⒿⓙⱼJj]\",\r\n K: \"[KkĶķǨǩᴷᵏḰ-ḵK⒦Ⓚⓚ㎄㎅㎉㎏㎑㎘㎞㎢㎦㎪㎸㎾㏀㏆㏍-㏏Kk]\",\r\n L: \"[LlĹ-ŀLJ-ljˡᴸḶḷḺ-ḽℒℓ℡Ⅼⅼ⒧Ⓛⓛ㋏㎈㎉㏐-㏓㏕㏖㏿flfflLl]\",\r\n M: \"[MmᴹᵐḾ-ṃ℠™ℳⅯⅿ⒨Ⓜⓜ㍷-㍹㎃㎆㎎㎒㎖㎙-㎨㎫㎳㎷㎹㎽㎿㏁㏂㏎㏐㏔-㏖㏘㏙㏞㏟Mm]\",\r\n N: \"[NnÑñŃ-ʼnNJ-njǸǹᴺṄ-ṋⁿℕ№⒩Ⓝⓝ㎁㎋㎚㎱㎵㎻㏌㏑Nn]\",\r\n O: \"[OoºÒ-Öò-öŌ-őƠơǑǒǪǫȌ-ȏȮȯᴼᵒỌ-ỏₒ℅№ℴ⒪Ⓞⓞ㍵㏇㏒㏖Oo]\",\r\n P: \"[PpᴾᵖṔ-ṗℙ⒫Ⓟⓟ㉐㍱㍶㎀㎊㎩-㎬㎰㎴㎺㏋㏗-㏚Pp]\",\r\n Q: \"[Qqℚ⒬Ⓠⓠ㏃Qq]\",\r\n R: \"[RrŔ-řȐ-ȓʳᴿᵣṘ-ṛṞṟ₨ℛ-ℝ⒭Ⓡⓡ㋍㍴㎭-㎯㏚㏛Rr]\",\r\n S: \"[SsŚ-šſȘșˢṠ-ṣ₨℁℠⒮Ⓢⓢ㎧㎨㎮-㎳㏛㏜stSs]\",\r\n T: \"[TtŢ-ťȚțᵀᵗṪ-ṱẗ℡™⒯Ⓣⓣ㉐㋏㎔㏏ſtstTt]\",\r\n U: \"[UuÙ-Üù-üŨ-ųƯưǓǔȔ-ȗᵁᵘᵤṲ-ṷỤ-ủ℆⒰Ⓤⓤ㍳㍺Uu]\",\r\n V: \"[VvᵛᵥṼ-ṿⅣ-Ⅷⅳ-ⅷ⒱Ⓥⓥⱽ㋎㍵㎴-㎹㏜㏞Vv]\",\r\n W: \"[WwŴŵʷᵂẀ-ẉẘ⒲Ⓦⓦ㎺-㎿㏝Ww]\",\r\n X: \"[XxˣẊ-ẍₓ℻Ⅸ-Ⅻⅸ-ⅻ⒳Ⓧⓧ㏓Xx]\",\r\n Y: \"[YyÝýÿŶ-ŸȲȳʸẎẏẙỲ-ỹ⒴Ⓨⓨ㏉Yy]\",\r\n Z: \"[ZzŹ-žDZ-dzᶻẐ-ẕℤℨ⒵Ⓩⓩ㎐-㎔Zz]\"\r\n };\r\n return function hightlight(o) {\r\n var regex;\r\n o = _.mixin({}, defaults, o);\r\n if (!o.node || !o.pattern) {\r\n return;\r\n }\r\n o.pattern = _.isArray(o.pattern) ? o.pattern : [ o.pattern ];\r\n regex = getRegex(o.pattern, o.caseSensitive, o.wordsOnly, o.diacriticInsensitive);\r\n traverse(o.node, hightlightTextNode);\r\n function hightlightTextNode(textNode) {\r\n var match, patternNode, wrapperNode;\r\n if (match = regex.exec(textNode.data)) {\r\n wrapperNode = doc.createElement(o.tagName);\r\n o.className && (wrapperNode.className = o.className);\r\n patternNode = textNode.splitText(match.index);\r\n patternNode.splitText(match[0].length);\r\n wrapperNode.appendChild(patternNode.cloneNode(true));\r\n textNode.parentNode.replaceChild(wrapperNode, patternNode);\r\n }\r\n return !!match;\r\n }\r\n function traverse(el, hightlightTextNode) {\r\n var childNode, TEXT_NODE_TYPE = 3;\r\n for (var i = 0; i < el.childNodes.length; i++) {\r\n childNode = el.childNodes[i];\r\n if (childNode.nodeType === TEXT_NODE_TYPE) {\r\n i += hightlightTextNode(childNode) ? 1 : 0;\r\n } else {\r\n traverse(childNode, hightlightTextNode);\r\n }\r\n }\r\n }\r\n };\r\n function accent_replacer(chr) {\r\n return accented[chr.toUpperCase()] || chr;\r\n }\r\n function getRegex(patterns, caseSensitive, wordsOnly, diacriticInsensitive) {\r\n var escapedPatterns = [], regexStr;\r\n for (var i = 0, len = patterns.length; i < len; i++) {\r\n var escapedWord = _.escapeRegExChars(patterns[i]);\r\n if (diacriticInsensitive) {\r\n escapedWord = escapedWord.replace(/\\S/g, accent_replacer);\r\n }\r\n escapedPatterns.push(escapedWord);\r\n }\r\n regexStr = wordsOnly ? \"\\\\b(\" + escapedPatterns.join(\"|\") + \")\\\\b\" : \"(\" + escapedPatterns.join(\"|\") + \")\";\r\n return caseSensitive ? new RegExp(regexStr) : new RegExp(regexStr, \"i\");\r\n }\r\n }(window.document);\r\n var Input = function() {\r\n \"use strict\";\r\n var specialKeyCodeMap;\r\n specialKeyCodeMap = {\r\n 9: \"tab\",\r\n 27: \"esc\",\r\n 37: \"left\",\r\n 39: \"right\",\r\n 13: \"enter\",\r\n 38: \"up\",\r\n 40: \"down\"\r\n };\r\n function Input(o, www) {\r\n var id;\r\n o = o || {};\r\n if (!o.input) {\r\n $.error(\"input is missing\");\r\n }\r\n www.mixin(this);\r\n this.$hint = $(o.hint);\r\n this.$input = $(o.input);\r\n this.$menu = $(o.menu);\r\n id = this.$input.attr(\"id\") || _.guid();\r\n this.$menu.attr(\"id\", id + \"_listbox\");\r\n this.$hint.attr({\r\n \"aria-hidden\": true\r\n });\r\n this.$input.attr({\r\n \"aria-owns\": id + \"_listbox\",\r\n role: \"combobox\",\r\n \"aria-autocomplete\": \"list\",\r\n \"aria-expanded\": false\r\n });\r\n this.query = this.$input.val();\r\n this.queryWhenFocused = this.hasFocus() ? this.query : null;\r\n this.$overflowHelper = buildOverflowHelper(this.$input);\r\n this._checkLanguageDirection();\r\n if (this.$hint.length === 0) {\r\n this.setHint = this.getHint = this.clearHint = this.clearHintIfInvalid = _.noop;\r\n }\r\n this.onSync(\"cursorchange\", this._updateDescendent);\r\n }\r\n Input.normalizeQuery = function(str) {\r\n return _.toStr(str).replace(/^\\s*/g, \"\").replace(/\\s{2,}/g, \" \");\r\n };\r\n _.mixin(Input.prototype, EventEmitter, {\r\n _onBlur: function onBlur() {\r\n this.resetInputValue();\r\n this.trigger(\"blurred\");\r\n },\r\n _onFocus: function onFocus() {\r\n this.queryWhenFocused = this.query;\r\n this.trigger(\"focused\");\r\n },\r\n _onKeydown: function onKeydown($e) {\r\n var keyName = specialKeyCodeMap[$e.which || $e.keyCode];\r\n this._managePreventDefault(keyName, $e);\r\n if (keyName && this._shouldTrigger(keyName, $e)) {\r\n this.trigger(keyName + \"Keyed\", $e);\r\n }\r\n },\r\n _onInput: function onInput() {\r\n this._setQuery(this.getInputValue());\r\n this.clearHintIfInvalid();\r\n this._checkLanguageDirection();\r\n },\r\n _managePreventDefault: function managePreventDefault(keyName, $e) {\r\n var preventDefault;\r\n switch (keyName) {\r\n case \"up\":\r\n case \"down\":\r\n preventDefault = !withModifier($e);\r\n break;\r\n\r\n default:\r\n preventDefault = false;\r\n }\r\n preventDefault && $e.preventDefault();\r\n },\r\n _shouldTrigger: function shouldTrigger(keyName, $e) {\r\n var trigger;\r\n switch (keyName) {\r\n case \"tab\":\r\n trigger = !withModifier($e);\r\n break;\r\n\r\n default:\r\n trigger = true;\r\n }\r\n return trigger;\r\n },\r\n _checkLanguageDirection: function checkLanguageDirection() {\r\n var dir = (this.$input.css(\"direction\") || \"ltr\").toLowerCase();\r\n if (this.dir !== dir) {\r\n this.dir = dir;\r\n this.$hint.attr(\"dir\", dir);\r\n this.trigger(\"langDirChanged\", dir);\r\n }\r\n },\r\n _setQuery: function setQuery(val, silent) {\r\n var areEquivalent, hasDifferentWhitespace;\r\n areEquivalent = areQueriesEquivalent(val, this.query);\r\n hasDifferentWhitespace = areEquivalent ? this.query.length !== val.length : false;\r\n this.query = val;\r\n if (!silent && !areEquivalent) {\r\n this.trigger(\"queryChanged\", this.query);\r\n } else if (!silent && hasDifferentWhitespace) {\r\n this.trigger(\"whitespaceChanged\", this.query);\r\n }\r\n },\r\n _updateDescendent: function updateDescendent(event, id) {\r\n this.$input.attr(\"aria-activedescendant\", id);\r\n },\r\n bind: function() {\r\n var onBlur, onFocus, onKeydown, onInput;\r\n onBlur = _.bind(this._onBlur, this);\r\n onFocus = _.bind(this._onFocus, this);\r\n onKeydown = _.bind(this._onKeydown, this);\r\n onInput = _.bind(this._onInput, this);\r\n this.$input.on(\"blur.tt\", onBlur).on(\"focus.tt\", onFocus).on(\"keydown.tt\", onKeydown);\r\n this.$input.on(\"input.tt\", onInput);\r\n return this;\r\n },\r\n focus: function focus() {\r\n this.$input.focus();\r\n },\r\n blur: function blur() {\r\n this.$input.blur();\r\n },\r\n getLangDir: function getLangDir() {\r\n return this.dir;\r\n },\r\n getQuery: function getQuery() {\r\n return this.query || \"\";\r\n },\r\n setQuery: function setQuery(val, silent) {\r\n this.setInputValue(val);\r\n this._setQuery(val, silent);\r\n },\r\n hasQueryChangedSinceLastFocus: function hasQueryChangedSinceLastFocus() {\r\n return this.query !== this.queryWhenFocused;\r\n },\r\n getInputValue: function getInputValue() {\r\n return this.$input.val();\r\n },\r\n setInputValue: function setInputValue(value) {\r\n this.$input.val(value);\r\n this.clearHintIfInvalid();\r\n this._checkLanguageDirection();\r\n },\r\n resetInputValue: function resetInputValue() {\r\n this.setInputValue(this.query);\r\n },\r\n getHint: function getHint() {\r\n return this.$hint.val();\r\n },\r\n setHint: function setHint(value) {\r\n this.$hint.val(value);\r\n },\r\n clearHint: function clearHint() {\r\n this.setHint(\"\");\r\n },\r\n clearHintIfInvalid: function clearHintIfInvalid() {\r\n var val, hint, valIsPrefixOfHint, isValid;\r\n val = this.getInputValue();\r\n hint = this.getHint();\r\n valIsPrefixOfHint = val !== hint && hint.indexOf(val) === 0;\r\n isValid = val !== \"\" && valIsPrefixOfHint && !this.hasOverflow();\r\n !isValid && this.clearHint();\r\n },\r\n hasFocus: function hasFocus() {\r\n return this.$input.is(\":focus\");\r\n },\r\n hasOverflow: function hasOverflow() {\r\n var constraint = this.$input.width() - 2;\r\n this.$overflowHelper.text(this.getInputValue());\r\n return this.$overflowHelper.width() >= constraint;\r\n },\r\n isCursorAtEnd: function() {\r\n var valueLength, selectionStart, range;\r\n valueLength = this.$input.val().length;\r\n selectionStart = this.$input[0].selectionStart;\r\n if (_.isNumber(selectionStart)) {\r\n return selectionStart === valueLength;\r\n } else if (document.selection) {\r\n range = document.selection.createRange();\r\n range.moveStart(\"character\", -valueLength);\r\n return valueLength === range.text.length;\r\n }\r\n return true;\r\n },\r\n destroy: function destroy() {\r\n this.$hint.off(\".tt\");\r\n this.$input.off(\".tt\");\r\n this.$overflowHelper.remove();\r\n this.$hint = this.$input = this.$overflowHelper = $(\"
\");\r\n },\r\n setAriaExpanded: function setAriaExpanded(value) {\r\n this.$input.attr(\"aria-expanded\", value);\r\n }\r\n });\r\n return Input;\r\n function buildOverflowHelper($input) {\r\n return $('
').css({\r\n                position: \"absolute\",\r\n                visibility: \"hidden\",\r\n                whiteSpace: \"pre\",\r\n                fontFamily: $input.css(\"font-family\"),\r\n                fontSize: $input.css(\"font-size\"),\r\n                fontStyle: $input.css(\"font-style\"),\r\n                fontVariant: $input.css(\"font-variant\"),\r\n                fontWeight: $input.css(\"font-weight\"),\r\n                wordSpacing: $input.css(\"word-spacing\"),\r\n                letterSpacing: $input.css(\"letter-spacing\"),\r\n                textIndent: $input.css(\"text-indent\"),\r\n                textRendering: $input.css(\"text-rendering\"),\r\n                textTransform: $input.css(\"text-transform\")\r\n            }).insertAfter($input);\r\n        }\r\n        function areQueriesEquivalent(a, b) {\r\n            return Input.normalizeQuery(a) === Input.normalizeQuery(b);\r\n        }\r\n        function withModifier($e) {\r\n            return $e.altKey || $e.ctrlKey || $e.metaKey || $e.shiftKey;\r\n        }\r\n    }();\r\n    var Dataset = function() {\r\n        \"use strict\";\r\n        var keys, nameGenerator;\r\n        keys = {\r\n            dataset: \"tt-selectable-dataset\",\r\n            val: \"tt-selectable-display\",\r\n            obj: \"tt-selectable-object\"\r\n        };\r\n        nameGenerator = _.getIdGenerator();\r\n        function Dataset(o, www) {\r\n            o = o || {};\r\n            o.templates = o.templates || {};\r\n            o.templates.notFound = o.templates.notFound || o.templates.empty;\r\n            if (!o.source) {\r\n                $.error(\"missing source\");\r\n            }\r\n            if (!o.node) {\r\n                $.error(\"missing node\");\r\n            }\r\n            if (o.name && !isValidName(o.name)) {\r\n                $.error(\"invalid dataset name: \" + o.name);\r\n            }\r\n            www.mixin(this);\r\n            this.highlight = !!o.highlight;\r\n            this.name = _.toStr(o.name || nameGenerator());\r\n            this.limit = o.limit || 5;\r\n            this.displayFn = getDisplayFn(o.display || o.displayKey);\r\n            this.templates = getTemplates(o.templates, this.displayFn);\r\n            this.source = o.source.__ttAdapter ? o.source.__ttAdapter() : o.source;\r\n            this.async = _.isUndefined(o.async) ? this.source.length > 2 : !!o.async;\r\n            this._resetLastSuggestion();\r\n            this.$el = $(o.node).attr(\"role\", \"presentation\").addClass(this.classes.dataset).addClass(this.classes.dataset + \"-\" + this.name);\r\n        }\r\n        Dataset.extractData = function extractData(el) {\r\n            var $el = $(el);\r\n            if ($el.data(keys.obj)) {\r\n                return {\r\n                    dataset: $el.data(keys.dataset) || \"\",\r\n                    val: $el.data(keys.val) || \"\",\r\n                    obj: $el.data(keys.obj) || null\r\n                };\r\n            }\r\n            return null;\r\n        };\r\n        _.mixin(Dataset.prototype, EventEmitter, {\r\n            _overwrite: function overwrite(query, suggestions) {\r\n                suggestions = suggestions || [];\r\n                if (suggestions.length) {\r\n                    this._renderSuggestions(query, suggestions);\r\n                } else if (this.async && this.templates.pending) {\r\n                    this._renderPending(query);\r\n                } else if (!this.async && this.templates.notFound) {\r\n                    this._renderNotFound(query);\r\n                } else {\r\n                    this._empty();\r\n                }\r\n                this.trigger(\"rendered\", suggestions, false, this.name);\r\n            },\r\n            _append: function append(query, suggestions) {\r\n                suggestions = suggestions || [];\r\n                if (suggestions.length && this.$lastSuggestion.length) {\r\n                    this._appendSuggestions(query, suggestions);\r\n                } else if (suggestions.length) {\r\n                    this._renderSuggestions(query, suggestions);\r\n                } else if (!this.$lastSuggestion.length && this.templates.notFound) {\r\n                    this._renderNotFound(query);\r\n                }\r\n                this.trigger(\"rendered\", suggestions, true, this.name);\r\n            },\r\n            _renderSuggestions: function renderSuggestions(query, suggestions) {\r\n                var $fragment;\r\n                $fragment = this._getSuggestionsFragment(query, suggestions);\r\n                this.$lastSuggestion = $fragment.children().last();\r\n                this.$el.html($fragment).prepend(this._getHeader(query, suggestions)).append(this._getFooter(query, suggestions));\r\n            },\r\n            _appendSuggestions: function appendSuggestions(query, suggestions) {\r\n                var $fragment, $lastSuggestion;\r\n                $fragment = this._getSuggestionsFragment(query, suggestions);\r\n                $lastSuggestion = $fragment.children().last();\r\n                this.$lastSuggestion.after($fragment);\r\n                this.$lastSuggestion = $lastSuggestion;\r\n            },\r\n            _renderPending: function renderPending(query) {\r\n                var template = this.templates.pending;\r\n                this._resetLastSuggestion();\r\n                template && this.$el.html(template({\r\n                    query: query,\r\n                    dataset: this.name\r\n                }));\r\n            },\r\n            _renderNotFound: function renderNotFound(query) {\r\n                var template = this.templates.notFound;\r\n                this._resetLastSuggestion();\r\n                template && this.$el.html(template({\r\n                    query: query,\r\n                    dataset: this.name\r\n                }));\r\n            },\r\n            _empty: function empty() {\r\n                this.$el.empty();\r\n                this._resetLastSuggestion();\r\n            },\r\n            _getSuggestionsFragment: function getSuggestionsFragment(query, suggestions) {\r\n                var that = this, fragment;\r\n                fragment = document.createDocumentFragment();\r\n                _.each(suggestions, function getSuggestionNode(suggestion) {\r\n                    var $el, context;\r\n                    context = that._injectQuery(query, suggestion);\r\n                    $el = $(that.templates.suggestion(context)).data(keys.dataset, that.name).data(keys.obj, suggestion).data(keys.val, that.displayFn(suggestion)).addClass(that.classes.suggestion + \" \" + that.classes.selectable);\r\n                    fragment.appendChild($el[0]);\r\n                });\r\n                this.highlight && highlight({\r\n                    className: this.classes.highlight,\r\n                    node: fragment,\r\n                    pattern: query\r\n                });\r\n                return $(fragment);\r\n            },\r\n            _getFooter: function getFooter(query, suggestions) {\r\n                return this.templates.footer ? this.templates.footer({\r\n                    query: query,\r\n                    suggestions: suggestions,\r\n                    dataset: this.name\r\n                }) : null;\r\n            },\r\n            _getHeader: function getHeader(query, suggestions) {\r\n                return this.templates.header ? this.templates.header({\r\n                    query: query,\r\n                    suggestions: suggestions,\r\n                    dataset: this.name\r\n                }) : null;\r\n            },\r\n            _resetLastSuggestion: function resetLastSuggestion() {\r\n                this.$lastSuggestion = $();\r\n            },\r\n            _injectQuery: function injectQuery(query, obj) {\r\n                return _.isObject(obj) ? _.mixin({\r\n                    _query: query\r\n                }, obj) : obj;\r\n            },\r\n            update: function update(query) {\r\n                var that = this, canceled = false, syncCalled = false, rendered = 0;\r\n                this.cancel();\r\n                this.cancel = function cancel() {\r\n                    canceled = true;\r\n                    that.cancel = $.noop;\r\n                    that.async && that.trigger(\"asyncCanceled\", query, that.name);\r\n                };\r\n                this.source(query, sync, async);\r\n                !syncCalled && sync([]);\r\n                function sync(suggestions) {\r\n                    if (syncCalled) {\r\n                        return;\r\n                    }\r\n                    syncCalled = true;\r\n                    suggestions = (suggestions || []).slice(0, that.limit);\r\n                    rendered = suggestions.length;\r\n                    that._overwrite(query, suggestions);\r\n                    if (rendered < that.limit && that.async) {\r\n                        that.trigger(\"asyncRequested\", query, that.name);\r\n                    }\r\n                }\r\n                function async(suggestions) {\r\n                    suggestions = suggestions || [];\r\n                    if (!canceled && rendered < that.limit) {\r\n                        that.cancel = $.noop;\r\n                        var idx = Math.abs(rendered - that.limit);\r\n                        rendered += idx;\r\n                        that._append(query, suggestions.slice(0, idx));\r\n                        that.async && that.trigger(\"asyncReceived\", query, that.name);\r\n                    }\r\n                }\r\n            },\r\n            cancel: $.noop,\r\n            clear: function clear() {\r\n                this._empty();\r\n                this.cancel();\r\n                this.trigger(\"cleared\");\r\n            },\r\n            isEmpty: function isEmpty() {\r\n                return this.$el.is(\":empty\");\r\n            },\r\n            destroy: function destroy() {\r\n                this.$el = $(\"
\");\r\n }\r\n });\r\n return Dataset;\r\n function getDisplayFn(display) {\r\n display = display || _.stringify;\r\n return _.isFunction(display) ? display : displayFn;\r\n function displayFn(obj) {\r\n return obj[display];\r\n }\r\n }\r\n function getTemplates(templates, displayFn) {\r\n return {\r\n notFound: templates.notFound && _.templatify(templates.notFound),\r\n pending: templates.pending && _.templatify(templates.pending),\r\n header: templates.header && _.templatify(templates.header),\r\n footer: templates.footer && _.templatify(templates.footer),\r\n suggestion: templates.suggestion ? userSuggestionTemplate : suggestionTemplate\r\n };\r\n function userSuggestionTemplate(context) {\r\n var template = templates.suggestion;\r\n return $(template(context)).attr(\"id\", _.guid());\r\n }\r\n function suggestionTemplate(context) {\r\n return $('
').attr(\"id\", _.guid()).text(displayFn(context));\r\n }\r\n }\r\n function isValidName(str) {\r\n return /^[_a-zA-Z0-9-]+$/.test(str);\r\n }\r\n }();\r\n var Menu = function() {\r\n \"use strict\";\r\n function Menu(o, www) {\r\n var that = this;\r\n o = o || {};\r\n if (!o.node) {\r\n $.error(\"node is required\");\r\n }\r\n www.mixin(this);\r\n this.$node = $(o.node);\r\n this._popper = Popper.createPopper(this.$node.parent().find(\".tt-input\")[0], o.node[0], {\r\n placement: this.$node.parent().find(\".tt-input\").attr(\"dir\") == \"rtl\" ? \"bottom-end\" : \"bottom-start\"\r\n });\r\n this.query = null;\r\n this.datasets = _.map(o.datasets, initializeDataset);\r\n function initializeDataset(oDataset) {\r\n var node = that.$node.find(oDataset.node).first();\r\n oDataset.node = node.length ? node : $(\"
\").appendTo(that.$node);\r\n return new Dataset(oDataset, www);\r\n }\r\n }\r\n _.mixin(Menu.prototype, EventEmitter, {\r\n _onSelectableClick: function onSelectableClick($e) {\r\n this.trigger(\"selectableClicked\", $($e.currentTarget));\r\n },\r\n _onRendered: function onRendered(type, dataset, suggestions, async) {\r\n this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\r\n this.trigger(\"datasetRendered\", dataset, suggestions, async);\r\n },\r\n _onCleared: function onCleared() {\r\n this.$node.toggleClass(this.classes.empty, this._allDatasetsEmpty());\r\n this.trigger(\"datasetCleared\");\r\n },\r\n _propagate: function propagate() {\r\n this.trigger.apply(this, arguments);\r\n },\r\n _allDatasetsEmpty: function allDatasetsEmpty() {\r\n return _.every(this.datasets, _.bind(function isDatasetEmpty(dataset) {\r\n var isEmpty = dataset.isEmpty();\r\n this.$node.attr(\"aria-expanded\", !isEmpty);\r\n return isEmpty;\r\n }, this));\r\n },\r\n _getSelectables: function getSelectables() {\r\n return this.$node.find(this.selectors.selectable);\r\n },\r\n _removeCursor: function _removeCursor() {\r\n var $selectable = this.getActiveSelectable();\r\n $selectable && $selectable.removeClass(this.classes.cursor);\r\n },\r\n _ensureVisible: function ensureVisible($el) {\r\n var elTop, elBottom, nodeScrollTop, nodeHeight;\r\n elTop = $el.position().top;\r\n elBottom = elTop + $el.outerHeight(true);\r\n nodeScrollTop = this.$node.scrollTop();\r\n nodeHeight = this.$node.height() + parseInt(this.$node.css(\"paddingTop\"), 10) + parseInt(this.$node.css(\"paddingBottom\"), 10);\r\n if (elTop < 0) {\r\n this.$node.scrollTop(nodeScrollTop + elTop);\r\n } else if (nodeHeight < elBottom) {\r\n this.$node.scrollTop(nodeScrollTop + (elBottom - nodeHeight));\r\n }\r\n },\r\n bind: function() {\r\n var that = this, onSelectableClick;\r\n onSelectableClick = _.bind(this._onSelectableClick, this);\r\n this.$node.on(\"click.tt\", this.selectors.selectable, onSelectableClick);\r\n this.$node.on(\"mouseover\", this.selectors.selectable, function() {\r\n that.setCursor($(this));\r\n });\r\n this.$node.on(\"mouseleave\", function() {\r\n that._removeCursor();\r\n });\r\n _.each(this.datasets, function(dataset) {\r\n dataset.onSync(\"asyncRequested\", that._propagate, that).onSync(\"asyncCanceled\", that._propagate, that).onSync(\"asyncReceived\", that._propagate, that).onSync(\"rendered\", that._onRendered, that).onSync(\"cleared\", that._onCleared, that);\r\n });\r\n return this;\r\n },\r\n isOpen: function isOpen() {\r\n this._popper.update();\r\n return this.$node.hasClass(this.classes.open);\r\n },\r\n open: function open() {\r\n this.$node.scrollTop(0);\r\n this.$node.addClass(this.classes.open);\r\n },\r\n close: function close() {\r\n this.$node.attr(\"aria-expanded\", false);\r\n this.$node.removeClass(this.classes.open);\r\n this._removeCursor();\r\n },\r\n setLanguageDirection: function setLanguageDirection(dir) {\r\n this.$node.attr(\"dir\", dir);\r\n },\r\n selectableRelativeToCursor: function selectableRelativeToCursor(delta) {\r\n var $selectables, $oldCursor, oldIndex, newIndex;\r\n $oldCursor = this.getActiveSelectable();\r\n $selectables = this._getSelectables();\r\n oldIndex = $oldCursor ? $selectables.index($oldCursor) : -1;\r\n newIndex = oldIndex + delta;\r\n newIndex = (newIndex + 1) % ($selectables.length + 1) - 1;\r\n newIndex = newIndex < -1 ? $selectables.length - 1 : newIndex;\r\n return newIndex === -1 ? null : $selectables.eq(newIndex);\r\n },\r\n setCursor: function setCursor($selectable) {\r\n this._removeCursor();\r\n if ($selectable = $selectable && $selectable.first()) {\r\n $selectable.addClass(this.classes.cursor);\r\n this._ensureVisible($selectable);\r\n }\r\n },\r\n getSelectableData: function getSelectableData($el) {\r\n return $el && $el.length ? Dataset.extractData($el) : null;\r\n },\r\n getActiveSelectable: function getActiveSelectable() {\r\n var $selectable = this._getSelectables().filter(this.selectors.cursor).first();\r\n return $selectable.length ? $selectable : null;\r\n },\r\n getTopSelectable: function getTopSelectable() {\r\n var $selectable = this._getSelectables().first();\r\n return $selectable.length ? $selectable : null;\r\n },\r\n update: function update(query) {\r\n var isValidUpdate = query !== this.query;\r\n if (isValidUpdate) {\r\n this.query = query;\r\n _.each(this.datasets, updateDataset);\r\n }\r\n return isValidUpdate;\r\n function updateDataset(dataset) {\r\n dataset.update(query);\r\n }\r\n },\r\n empty: function empty() {\r\n _.each(this.datasets, clearDataset);\r\n this.query = null;\r\n this.$node.addClass(this.classes.empty);\r\n function clearDataset(dataset) {\r\n dataset.clear();\r\n }\r\n },\r\n destroy: function destroy() {\r\n this.$node.off(\".tt\");\r\n this.$node = $(\"
\");\r\n if (this._popper !== null) {\r\n this._popper.destroy();\r\n this._popper = null;\r\n }\r\n _.each(this.datasets, destroyDataset);\r\n function destroyDataset(dataset) {\r\n dataset.destroy();\r\n }\r\n }\r\n });\r\n return Menu;\r\n }();\r\n var Status = function() {\r\n \"use strict\";\r\n function Status(options) {\r\n this.$el = $(\"\", {\r\n role: \"status\",\r\n \"aria-live\": \"polite\"\r\n }).css({\r\n position: \"absolute\",\r\n padding: \"0\",\r\n border: \"0\",\r\n height: \"1px\",\r\n width: \"1px\",\r\n \"margin-bottom\": \"-1px\",\r\n \"margin-right\": \"-1px\",\r\n overflow: \"hidden\",\r\n clip: \"rect(0 0 0 0)\",\r\n \"white-space\": \"nowrap\"\r\n });\r\n options.$input.after(this.$el);\r\n _.each(options.menu.datasets, _.bind(function(dataset) {\r\n if (dataset.onSync) {\r\n dataset.onSync(\"rendered\", _.bind(this.update, this));\r\n dataset.onSync(\"cleared\", _.bind(this.cleared, this));\r\n }\r\n }, this));\r\n }\r\n _.mixin(Status.prototype, {\r\n update: function update(event, suggestions) {\r\n var length = suggestions.length;\r\n var words;\r\n if (length === 1) {\r\n words = {\r\n result: \"result\",\r\n is: \"is\"\r\n };\r\n } else {\r\n words = {\r\n result: \"results\",\r\n is: \"are\"\r\n };\r\n }\r\n this.$el.text(length + \" \" + words.result + \" \" + words.is + \" available, use up and down arrow keys to navigate.\");\r\n },\r\n cleared: function() {\r\n this.$el.text(\"\");\r\n }\r\n });\r\n return Status;\r\n }();\r\n var DefaultMenu = function() {\r\n \"use strict\";\r\n var s = Menu.prototype;\r\n function DefaultMenu() {\r\n Menu.apply(this, [].slice.call(arguments, 0));\r\n }\r\n _.mixin(DefaultMenu.prototype, Menu.prototype, {\r\n open: function open() {\r\n !this._allDatasetsEmpty() && this._show();\r\n return s.open.apply(this, [].slice.call(arguments, 0));\r\n },\r\n close: function close() {\r\n this._hide();\r\n return s.close.apply(this, [].slice.call(arguments, 0));\r\n },\r\n _onRendered: function onRendered() {\r\n if (this._allDatasetsEmpty()) {\r\n this._hide();\r\n } else {\r\n this.isOpen() && this._show();\r\n }\r\n return s._onRendered.apply(this, [].slice.call(arguments, 0));\r\n },\r\n _onCleared: function onCleared() {\r\n if (this._allDatasetsEmpty()) {\r\n this._hide();\r\n } else {\r\n this.isOpen() && this._show();\r\n }\r\n return s._onCleared.apply(this, [].slice.call(arguments, 0));\r\n },\r\n setLanguageDirection: function setLanguageDirection(dir) {\r\n this.$node.css(dir === \"ltr\" ? this.css.ltr : this.css.rtl);\r\n return s.setLanguageDirection.apply(this, [].slice.call(arguments, 0));\r\n },\r\n _hide: function hide() {\r\n this.$node.hide();\r\n },\r\n _show: function show() {\r\n this.$node.css(\"display\", \"block\");\r\n }\r\n });\r\n return DefaultMenu;\r\n }();\r\n var Typeahead = function() {\r\n \"use strict\";\r\n function Typeahead(o, www) {\r\n var onFocused, onBlurred, onEnterKeyed, onTabKeyed, onEscKeyed, onUpKeyed, onDownKeyed, onLeftKeyed, onRightKeyed, onQueryChanged, onWhitespaceChanged;\r\n o = o || {};\r\n if (!o.input) {\r\n $.error(\"missing input\");\r\n }\r\n if (!o.menu) {\r\n $.error(\"missing menu\");\r\n }\r\n if (!o.eventBus) {\r\n $.error(\"missing event bus\");\r\n }\r\n www.mixin(this);\r\n this.eventBus = o.eventBus;\r\n this.minLength = _.isNumber(o.minLength) ? o.minLength : 1;\r\n this.input = o.input;\r\n this.menu = o.menu;\r\n this.enabled = true;\r\n this.autoselect = !!o.autoselect;\r\n this.active = false;\r\n this.input.hasFocus() && this.activate();\r\n this.dir = this.input.getLangDir();\r\n this._hacks();\r\n this.menu.bind().onSync(\"selectableClicked\", this._onSelectableClicked, this).onSync(\"asyncRequested\", this._onAsyncRequested, this).onSync(\"asyncCanceled\", this._onAsyncCanceled, this).onSync(\"asyncReceived\", this._onAsyncReceived, this).onSync(\"datasetRendered\", this._onDatasetRendered, this).onSync(\"datasetCleared\", this._onDatasetCleared, this);\r\n onFocused = c(this, \"activate\", \"open\", \"_onFocused\");\r\n onBlurred = c(this, \"deactivate\", \"_onBlurred\");\r\n onEnterKeyed = c(this, \"isActive\", \"isOpen\", \"_onEnterKeyed\");\r\n onTabKeyed = c(this, \"isActive\", \"isOpen\", \"_onTabKeyed\");\r\n onEscKeyed = c(this, \"isActive\", \"_onEscKeyed\");\r\n onUpKeyed = c(this, \"isActive\", \"open\", \"_onUpKeyed\");\r\n onDownKeyed = c(this, \"isActive\", \"open\", \"_onDownKeyed\");\r\n onLeftKeyed = c(this, \"isActive\", \"isOpen\", \"_onLeftKeyed\");\r\n onRightKeyed = c(this, \"isActive\", \"isOpen\", \"_onRightKeyed\");\r\n onQueryChanged = c(this, \"_openIfActive\", \"_onQueryChanged\");\r\n onWhitespaceChanged = c(this, \"_openIfActive\", \"_onWhitespaceChanged\");\r\n this.input.bind().onSync(\"focused\", onFocused, this).onSync(\"blurred\", onBlurred, this).onSync(\"enterKeyed\", onEnterKeyed, this).onSync(\"tabKeyed\", onTabKeyed, this).onSync(\"escKeyed\", onEscKeyed, this).onSync(\"upKeyed\", onUpKeyed, this).onSync(\"downKeyed\", onDownKeyed, this).onSync(\"leftKeyed\", onLeftKeyed, this).onSync(\"rightKeyed\", onRightKeyed, this).onSync(\"queryChanged\", onQueryChanged, this).onSync(\"whitespaceChanged\", onWhitespaceChanged, this).onSync(\"langDirChanged\", this._onLangDirChanged, this);\r\n }\r\n _.mixin(Typeahead.prototype, {\r\n _hacks: function hacks() {\r\n var $input, $menu;\r\n $input = this.input.$input || $(\"
\");\r\n $menu = this.menu.$node || $(\"
\");\r\n $input.on(\"blur.tt\", function($e) {\r\n var active;\r\n active = document.activeElement;\r\n isActive = $menu.is(active);\r\n hasActive = $menu.has(active).length > 0;\r\n });\r\n $menu.on(\"mousedown.tt\", function($e) {\r\n $e.preventDefault();\r\n });\r\n },\r\n _onSelectableClicked: function onSelectableClicked(type, $el) {\r\n this.select($el);\r\n },\r\n _onDatasetCleared: function onDatasetCleared() {\r\n this._updateHint();\r\n },\r\n _onDatasetRendered: function onDatasetRendered(type, suggestions, async, dataset) {\r\n this._updateHint();\r\n if (this.autoselect) {\r\n var cursorClass = this.selectors.cursor.substr(1);\r\n this.menu.$node.find(this.selectors.suggestion).first().addClass(cursorClass);\r\n }\r\n this.eventBus.trigger(\"render\", suggestions, async, dataset);\r\n },\r\n _onAsyncRequested: function onAsyncRequested(type, dataset, query) {\r\n this.eventBus.trigger(\"asyncrequest\", query, dataset);\r\n },\r\n _onAsyncCanceled: function onAsyncCanceled(type, dataset, query) {\r\n this.eventBus.trigger(\"asynccancel\", query, dataset);\r\n },\r\n _onAsyncReceived: function onAsyncReceived(type, dataset, query) {\r\n this.eventBus.trigger(\"asyncreceive\", query, dataset);\r\n },\r\n _onFocused: function onFocused() {\r\n this._minLengthMet() && this.menu.update(this.input.getQuery());\r\n },\r\n _onBlurred: function onBlurred() {\r\n if (this.input.hasQueryChangedSinceLastFocus()) {\r\n this.eventBus.trigger(\"change\", this.input.getQuery());\r\n }\r\n },\r\n _onEnterKeyed: function onEnterKeyed(type, $e) {\r\n var $selectable;\r\n if ($selectable = this.menu.getActiveSelectable()) {\r\n if (this.select($selectable)) {\r\n $e.preventDefault();\r\n $e.stopPropagation();\r\n }\r\n } else if (this.autoselect) {\r\n if (this.select(this.menu.getTopSelectable())) {\r\n $e.preventDefault();\r\n $e.stopPropagation();\r\n }\r\n }\r\n },\r\n _onTabKeyed: function onTabKeyed(type, $e) {\r\n var $selectable;\r\n if ($selectable = this.menu.getActiveSelectable()) {\r\n this.select($selectable) && $e.preventDefault();\r\n } else if (this.autoselect) {\r\n if ($selectable = this.menu.getTopSelectable()) {\r\n this.autocomplete($selectable) && $e.preventDefault();\r\n }\r\n }\r\n },\r\n _onEscKeyed: function onEscKeyed() {\r\n this.close();\r\n },\r\n _onUpKeyed: function onUpKeyed() {\r\n this.moveCursor(-1);\r\n },\r\n _onDownKeyed: function onDownKeyed() {\r\n this.moveCursor(+1);\r\n },\r\n _onLeftKeyed: function onLeftKeyed() {\r\n if (this.dir === \"rtl\" && this.input.isCursorAtEnd()) {\r\n this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\r\n }\r\n },\r\n _onRightKeyed: function onRightKeyed() {\r\n if (this.dir === \"ltr\" && this.input.isCursorAtEnd()) {\r\n this.autocomplete(this.menu.getActiveSelectable() || this.menu.getTopSelectable());\r\n }\r\n },\r\n _onQueryChanged: function onQueryChanged(e, query) {\r\n this._minLengthMet(query) ? this.menu.update(query) : this.menu.empty();\r\n },\r\n _onWhitespaceChanged: function onWhitespaceChanged() {\r\n this._updateHint();\r\n },\r\n _onLangDirChanged: function onLangDirChanged(e, dir) {\r\n if (this.dir !== dir) {\r\n this.dir = dir;\r\n this.menu.setLanguageDirection(dir);\r\n }\r\n },\r\n _openIfActive: function openIfActive() {\r\n this.isActive() && this.open();\r\n },\r\n _minLengthMet: function minLengthMet(query) {\r\n query = _.isString(query) ? query : this.input.getQuery() || \"\";\r\n return query.length >= this.minLength;\r\n },\r\n _updateHint: function updateHint() {\r\n var $selectable, data, val, query, escapedQuery, frontMatchRegEx, match;\r\n $selectable = this.menu.getTopSelectable();\r\n data = this.menu.getSelectableData($selectable);\r\n val = this.input.getInputValue();\r\n if (data && !_.isBlankString(val) && !this.input.hasOverflow()) {\r\n query = Input.normalizeQuery(val);\r\n escapedQuery = _.escapeRegExChars(query);\r\n frontMatchRegEx = new RegExp(\"^(?:\" + escapedQuery + \")(.+$)\", \"i\");\r\n match = frontMatchRegEx.exec(data.val);\r\n match && this.input.setHint(val + match[1]);\r\n } else {\r\n this.input.clearHint();\r\n }\r\n },\r\n isEnabled: function isEnabled() {\r\n return this.enabled;\r\n },\r\n enable: function enable() {\r\n this.enabled = true;\r\n },\r\n disable: function disable() {\r\n this.enabled = false;\r\n },\r\n isActive: function isActive() {\r\n return this.active;\r\n },\r\n activate: function activate() {\r\n if (this.isActive()) {\r\n return true;\r\n } else if (!this.isEnabled() || this.eventBus.before(\"active\")) {\r\n return false;\r\n } else {\r\n this.active = true;\r\n this.eventBus.trigger(\"active\");\r\n return true;\r\n }\r\n },\r\n deactivate: function deactivate() {\r\n if (!this.isActive()) {\r\n return true;\r\n } else if (this.eventBus.before(\"idle\")) {\r\n return false;\r\n } else {\r\n this.active = false;\r\n this.close();\r\n this.eventBus.trigger(\"idle\");\r\n return true;\r\n }\r\n },\r\n isOpen: function isOpen() {\r\n return this.menu.isOpen();\r\n },\r\n open: function open() {\r\n if (!this.isOpen() && !this.eventBus.before(\"open\")) {\r\n this.input.setAriaExpanded(true);\r\n this.menu.open();\r\n this._updateHint();\r\n this.eventBus.trigger(\"open\");\r\n }\r\n return this.isOpen();\r\n },\r\n close: function close() {\r\n if (this.isOpen() && !this.eventBus.before(\"close\")) {\r\n this.input.setAriaExpanded(false);\r\n this.menu.close();\r\n this.input.clearHint();\r\n this.input.resetInputValue();\r\n this.eventBus.trigger(\"close\");\r\n }\r\n return !this.isOpen();\r\n },\r\n setVal: function setVal(val) {\r\n this.input.setQuery(_.toStr(val));\r\n },\r\n getVal: function getVal() {\r\n return this.input.getQuery();\r\n },\r\n select: function select($selectable) {\r\n var data = this.menu.getSelectableData($selectable);\r\n if (data && !this.eventBus.before(\"select\", data.obj, data.dataset)) {\r\n this.input.setQuery(data.val, true);\r\n this.eventBus.trigger(\"select\", data.obj, data.dataset);\r\n this.close();\r\n return true;\r\n }\r\n return false;\r\n },\r\n autocomplete: function autocomplete($selectable) {\r\n var query, data, isValid;\r\n query = this.input.getQuery();\r\n data = this.menu.getSelectableData($selectable);\r\n isValid = data && query !== data.val;\r\n if (isValid && !this.eventBus.before(\"autocomplete\", data.obj, data.dataset)) {\r\n this.input.setQuery(data.val);\r\n this.eventBus.trigger(\"autocomplete\", data.obj, data.dataset);\r\n return true;\r\n }\r\n return false;\r\n },\r\n moveCursor: function moveCursor(delta) {\r\n var query, $candidate, data, suggestion, datasetName, cancelMove, id;\r\n query = this.input.getQuery();\r\n $candidate = this.menu.selectableRelativeToCursor(delta);\r\n data = this.menu.getSelectableData($candidate);\r\n suggestion = data ? data.obj : null;\r\n datasetName = data ? data.dataset : null;\r\n id = $candidate ? $candidate.attr(\"id\") : null;\r\n this.input.trigger(\"cursorchange\", id);\r\n cancelMove = this._minLengthMet() && this.menu.update(query);\r\n if (!cancelMove && !this.eventBus.before(\"cursorchange\", suggestion, datasetName)) {\r\n this.menu.setCursor($candidate);\r\n if (data) {\r\n if (typeof data.val === \"string\") {\r\n this.input.setInputValue(data.val);\r\n }\r\n } else {\r\n this.input.resetInputValue();\r\n this._updateHint();\r\n }\r\n this.eventBus.trigger(\"cursorchange\", suggestion, datasetName);\r\n return true;\r\n }\r\n return false;\r\n },\r\n destroy: function destroy() {\r\n this.input.destroy();\r\n this.menu.destroy();\r\n }\r\n });\r\n return Typeahead;\r\n function c(ctx) {\r\n var methods = [].slice.call(arguments, 1);\r\n return function() {\r\n var args = [].slice.call(arguments);\r\n _.each(methods, function(method) {\r\n return ctx[method].apply(ctx, args);\r\n });\r\n };\r\n }\r\n }();\r\n (function() {\r\n \"use strict\";\r\n var old, keys, methods;\r\n old = $.fn.typeahead;\r\n keys = {\r\n www: \"tt-www\",\r\n attrs: \"tt-attrs\",\r\n typeahead: \"tt-typeahead\"\r\n };\r\n methods = {\r\n initialize: function initialize(o, datasets) {\r\n var www;\r\n datasets = _.isArray(datasets) ? datasets : [].slice.call(arguments, 1);\r\n o = o || {};\r\n www = WWW(o.classNames);\r\n return this.each(attach);\r\n function attach() {\r\n var $input, $wrapper, $hint, $menu, defaultHint, defaultMenu, eventBus, input, menu, status, typeahead, MenuConstructor;\r\n _.each(datasets, function(d) {\r\n d.highlight = !!o.highlight;\r\n });\r\n $input = $(this);\r\n $wrapper = $(www.html.wrapper);\r\n $hint = $elOrNull(o.hint);\r\n $menu = $elOrNull(o.menu);\r\n defaultHint = o.hint !== false && !$hint;\r\n defaultMenu = o.menu !== false && !$menu;\r\n defaultHint && ($hint = buildHintFromInput($input, www));\r\n defaultMenu && ($menu = $(www.html.menu).css(www.css.menu));\r\n $hint && $hint.val(\"\");\r\n $input = prepInput($input, www);\r\n if (defaultHint || defaultMenu) {\r\n $wrapper.css(www.css.wrapper);\r\n $input.css(defaultHint ? www.css.input : www.css.inputWithNoHint);\r\n $input.wrap($wrapper).parent().prepend(defaultHint ? $hint : null).append(defaultMenu ? $menu : null);\r\n }\r\n MenuConstructor = defaultMenu ? DefaultMenu : Menu;\r\n eventBus = new EventBus({\r\n el: $input\r\n });\r\n input = new Input({\r\n hint: $hint,\r\n input: $input,\r\n menu: $menu\r\n }, www);\r\n menu = new MenuConstructor({\r\n node: $menu,\r\n datasets: datasets\r\n }, www);\r\n status = new Status({\r\n $input: $input,\r\n menu: menu\r\n });\r\n typeahead = new Typeahead({\r\n input: input,\r\n menu: menu,\r\n eventBus: eventBus,\r\n minLength: o.minLength,\r\n autoselect: o.autoselect\r\n }, www);\r\n $input.data(keys.www, www);\r\n $input.data(keys.typeahead, typeahead);\r\n }\r\n },\r\n isEnabled: function isEnabled() {\r\n var enabled;\r\n ttEach(this.first(), function(t) {\r\n enabled = t.isEnabled();\r\n });\r\n return enabled;\r\n },\r\n enable: function enable() {\r\n ttEach(this, function(t) {\r\n t.enable();\r\n });\r\n return this;\r\n },\r\n disable: function disable() {\r\n ttEach(this, function(t) {\r\n t.disable();\r\n });\r\n return this;\r\n },\r\n isActive: function isActive() {\r\n var active;\r\n ttEach(this.first(), function(t) {\r\n active = t.isActive();\r\n });\r\n return active;\r\n },\r\n activate: function activate() {\r\n ttEach(this, function(t) {\r\n t.activate();\r\n });\r\n return this;\r\n },\r\n deactivate: function deactivate() {\r\n ttEach(this, function(t) {\r\n t.deactivate();\r\n });\r\n return this;\r\n },\r\n isOpen: function isOpen() {\r\n var open;\r\n ttEach(this.first(), function(t) {\r\n open = t.isOpen();\r\n });\r\n return open;\r\n },\r\n open: function open() {\r\n ttEach(this, function(t) {\r\n t.open();\r\n });\r\n return this;\r\n },\r\n close: function close() {\r\n ttEach(this, function(t) {\r\n t.close();\r\n });\r\n return this;\r\n },\r\n select: function select(el) {\r\n var success = false, $el = $(el);\r\n ttEach(this.first(), function(t) {\r\n success = t.select($el);\r\n });\r\n return success;\r\n },\r\n autocomplete: function autocomplete(el) {\r\n var success = false, $el = $(el);\r\n ttEach(this.first(), function(t) {\r\n success = t.autocomplete($el);\r\n });\r\n return success;\r\n },\r\n moveCursor: function moveCursoe(delta) {\r\n var success = false;\r\n ttEach(this.first(), function(t) {\r\n success = t.moveCursor(delta);\r\n });\r\n return success;\r\n },\r\n val: function val(newVal) {\r\n var query;\r\n if (!arguments.length) {\r\n ttEach(this.first(), function(t) {\r\n query = t.getVal();\r\n });\r\n return query;\r\n } else {\r\n ttEach(this, function(t) {\r\n t.setVal(_.toStr(newVal));\r\n });\r\n return this;\r\n }\r\n },\r\n destroy: function destroy() {\r\n ttEach(this, function(typeahead, $input) {\r\n revert($input);\r\n typeahead.destroy();\r\n });\r\n return this;\r\n }\r\n };\r\n $.fn.typeahead = function(method) {\r\n if (methods[method]) {\r\n return methods[method].apply(this, [].slice.call(arguments, 1));\r\n } else {\r\n return methods.initialize.apply(this, arguments);\r\n }\r\n };\r\n $.fn.typeahead.noConflict = function noConflict() {\r\n $.fn.typeahead = old;\r\n return this;\r\n };\r\n function ttEach($els, fn) {\r\n $els.each(function() {\r\n var $input = $(this), typeahead;\r\n (typeahead = $input.data(keys.typeahead)) && fn(typeahead, $input);\r\n });\r\n }\r\n function buildHintFromInput($input, www) {\r\n return $input.clone().addClass(www.classes.hint).removeData().css(www.css.hint).css(getBackgroundStyles($input)).prop({\r\n readonly: true,\r\n required: false\r\n }).removeAttr(\"id name placeholder\").removeClass(\"required\").attr({\r\n spellcheck: \"false\",\r\n tabindex: -1\r\n });\r\n }\r\n function prepInput($input, www) {\r\n $input.data(keys.attrs, {\r\n dir: $input.attr(\"dir\"),\r\n autocomplete: $input.attr(\"autocomplete\"),\r\n spellcheck: $input.attr(\"spellcheck\"),\r\n style: $input.attr(\"style\")\r\n });\r\n $input.addClass(www.classes.input).attr({\r\n spellcheck: false\r\n });\r\n try {\r\n !$input.attr(\"dir\") && $input.attr(\"dir\", \"auto\");\r\n } catch (e) {}\r\n return $input;\r\n }\r\n function getBackgroundStyles($el) {\r\n return {\r\n backgroundAttachment: $el.css(\"background-attachment\"),\r\n backgroundClip: $el.css(\"background-clip\"),\r\n backgroundColor: $el.css(\"background-color\"),\r\n backgroundImage: $el.css(\"background-image\"),\r\n backgroundOrigin: $el.css(\"background-origin\"),\r\n backgroundPosition: $el.css(\"background-position\"),\r\n backgroundRepeat: $el.css(\"background-repeat\"),\r\n backgroundSize: $el.css(\"background-size\")\r\n };\r\n }\r\n function revert($input) {\r\n var www, $wrapper;\r\n www = $input.data(keys.www);\r\n $wrapper = $input.parent().filter(www.selectors.wrapper);\r\n _.each($input.data(keys.attrs), function(val, key) {\r\n _.isUndefined(val) ? $input.removeAttr(key) : $input.attr(key, val);\r\n });\r\n $input.removeData(keys.typeahead).removeData(keys.www).removeData(keys.attr).removeClass(www.classes.input);\r\n if ($wrapper.length) {\r\n $input.detach().insertAfter($wrapper);\r\n $wrapper.remove();\r\n }\r\n }\r\n function $elOrNull(obj) {\r\n var isValid, $el;\r\n isValid = _.isJQuery(obj) || _.isElement(obj);\r\n $el = isValid ? $(obj).first() : [];\r\n return $el.length ? $el : null;\r\n }\r\n })();\r\n});"]}