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