/*! * Twitter Typeahead 0.8.0 * https://github.com/twitter/typeahead * Copyright 2013 Twitter, Inc. and other contributors; Licensed MIT */ (function(){var t="0.8.0",e={isMsie:function(){return/msie [\w.]+/i.test(navigator.userAgent)},isString:function(t){return"string"==typeof t},isNumber:function(t){return"number"==typeof t},isArray:$.isArray,isFunction:$.isFunction,isObject:function(t){return t!==Object(t)},isUndefined:function(t){return t===void 0},bind:$.proxy,bindAll:function(t){var n;for(var i in t)e.isFunction(n=t[i])&&(t[i]=$.proxy(n,t))},indexOf:function(t,e){for(var n=0;t.length>n;n++)if(t[n]===e)return n;return-1},each:$.each,map:$.map,filter:function(t,e){var n=[];return $.each(t,function(i,s){e(s,i,t)&&n.push(s)}),n},every:function(t,e){var n=!0;return t?($.each(t,function(i,s){return(n=e.call(null,s,i,t))?void 0:!1}),!!n):n},keys:function(t){if(!e.isObject(t))throw new TypeError("invalid object");return $.map(t,function(t,e){return e})},mixin:$.extend,getUniqueId:function(){var t=0;return function(){return t++}}(),debounce:function(t,e,n){var i,s;return function(){var r,o,u=this,a=arguments;return r=function(){i=null,n||(s=t.apply(u,a))},o=n&&!i,clearTimeout(i),i=setTimeout(r,e),o&&(s=t.apply(u,a)),s}},throttle:function(t,e){var n,i,s,r,o,u;return o=0,u=function(){o=new Date,s=null,r=t.apply(n,i)},function(){var a=new Date,h=e-(a-o);return n=this,i=arguments,0>=h?(clearTimeout(s),s=null,o=a,r=t.apply(n,i)):s||(s=setTimeout(u,h)),r}},uniqueArray:function(t){for(var e={},n=[],i=0,s=t.length;s>i;++i)e.hasOwnProperty(t[i])||(n.push(t[i]),e[t[i]]=1);return n},tokenizeText:function(t){return $.trim(t).toLowerCase().split(/[\s\-_]+/)},getProtocol:function(){return location.protocol},noop:function(){}},n=function(){var t=/\s+/;return{on:function(e,n){var i;if(!n)return this;for(this._callbacks=this._callbacks||{},e=e.split(t);i=e.shift();)this._callbacks[i]=this._callbacks[i]||[],this._callbacks[i].push(n);return this},trigger:function(e,n){var i,s;if(!this._callbacks)return this;for(e=e.split(t);i=e.shift();)if(s=this._callbacks[i])for(var r=0;s.length>r;r+=1)s[r].call(this,{type:i,data:n});return this}}}(),i=function(){function t(t){this.prefix=["__",t,"__"].join(""),this.ttlKey="__ttl__",this.keyMatcher=RegExp("^"+this.prefix)}function n(){return(new Date).getTime()}function i(t){return JSON.stringify(t)}function s(t){return e.isUndefined(t)?void 0:JSON.parse(t)}var r,o=window.localStorage;return r=window.localStorage&&window.JSON?{get:function(t){var i=s(o.getItem(this.prefix+t));return e.isNumber(i)&&n()>i&&o.removeItem(this.prefix+t+this.ttlKey),s(o.getItem(this.prefix+t))},set:function(t,s,r){return e.isNumber(r)?o.setItem(this.prefix+t+this.ttlKey,i(n()+r)):o.removeItem(this.prefix+t+this.ttlKey),o.setItem(this.prefix+t,i(s))},remove:function(t){return o.removeItem(this.prefix+t+this.ttlKey),o.removeItem(this.prefix+t),this},clear:function(){var t,e,n=o.length;for(t=0;n>t;t+=1)e=o.key(t),e.match(this.keyMatcher)&&(t-=1,n-=1,this.remove(e.replace(this.keyMatcher,"")));return this},isExpired:function(t){var i=s(o.getItem(this.prefix+t+this.ttlKey));return e.isNumber(i)&&n()>i?!0:!1}}:{get:e.noop,set:e.noop,remove:e.noop,clear:e.noop,isExpired:e.noop},e.mixin(t.prototype,r),t}(),s=function(){function t(t){e.bindAll(this),t=t||{},this.sizeLimit=t.sizeLimit||10,this.cache={},this.cachedKeysByAge=[]}return e.mixin(t.prototype,{get:function(t){return this.cache[t]},set:function(t,e){var n;this.cachedKeysByAge.length===this.sizeLimit&&(n=this.cachedKeysByAge.shift(),delete this.cache[n]),this.cache[t]=e,this.cachedKeysByAge.push(t)}}),t}(),r=function(){function t(t){var n;e.bindAll(this),t=t||{},n=/^throttle$/i.test(t.rateLimitFn)?e.throttle:e.debounce,this.wait=t.wait||300,this.wildcard=t.wildcard||"%QUERY",this.maxConcurrentRequests=t.maxConcurrentRequests||6,this.concurrentRequests=0,this.onDeckRequestArgs=null,this.cache=new s,this.get=n(this.get,this.wait)}return e.mixin(t.prototype,{_incrementConcurrentRequests:function(){this.concurrentRequests++},_decrementConcurrentRequests:function(){this.concurrentRequests--},_belowConcurrentRequestsThreshold:function(){return this.concurrentRequests-1});return n?t:void 0})},_getItemsFromIds:function(t){var n=[];return e.map(t,e.bind(function(t){var e=this.itemHash[t];e&&n.push(e)},this)),n},_matcher:function(t){if(this._customMatcher){var n=this._customMatcher;return function(t){return n(t)}}return function(n){var i=n.tokens,s=e.every(t,function(t){var n=e.filter(i,function(e){return 0===e.indexOf(t)});return n.length});return s?n:void 0}},_compareItems:function(t,e,n){var i=t.score_boost?t.score_boost:0,s=e.score_boost?e.score_boost:0,r=t.score?t.score:0,o=e.score?e.score:0;return n?e.weight+s-(t.weight+i):o+s-(r+i)},_ranker:function(t,e){if(this._customRanker)return this._customRanker(t,e);var n=t.weight&&0!==t.weight,i=e.weight&&0!==e.weight;return n&&!i?-1:i&&!n?1:n&&i?this._compareItems(t,e,!0):this._compareItems(t,e,!1)},_processRawData:function(n){this.itemHash={},this.adjacencyList={},e.map(n,e.bind(function(t){var n;t.tokens?n=t.tokens:(t={tokens:e.tokenizeText(t),value:t},n=t.tokens),t.id=e.getUniqueId(t.value),e.map(n,e.bind(function(n){var i=n.charAt(0);this.adjacencyList[i]?-1===e.indexOf(this.adjacencyList[i],t.id)&&this.adjacencyList[i].push(t.id):this.adjacencyList[i]=[t.id]},this)),this.itemHash[t.id]=t},this)),this.storage.set(this.storageHash,this.itemHash,this._ttl_ms),this.storage.set(this.storageAdjacencyList,this.adjacencyList,this._ttl_ms),this.storage.set(this.storageVersion,t,this._ttl_ms),this.storage.set(this.storageProtocol,e.getProtocol(),this._ttl_ms)},_prefetch:function(t){var n=function(t){t&&(e.map(t,function(t){return e.isString(t)?{value:t,tokens:e.tokenizeText(t.toLowerCase())}:(e.map(t.tokens,function(e,n){t.tokens[n]=e.toLowerCase()}),t)}),this._processRawData(t))},i=function(){this._getDataFromLocalStorage()};$.ajax({url:t,success:e.bind(n,this),error:e.bind(i,this)})},_processRemoteSuggestions:function(t,n){return function(i){var s={},r=[];e.each(i,function(t,n){e.isString(n)?s[n]={value:n}:s[n.value]=n}),e.each(n,function(t,n){return s[n.value]?!0:(e.isString(n)?s[n]={value:n}:s[n.value]=n,void 0)}),e.each(s,function(t,e){r.push(e)}),t&&t(r)}},getSuggestions:function(t,n){var i=e.tokenizeText(t),s=this._getPotentiallyMatchingIds(i),r=this._getItemsFromIds(s),o=e.filter(r,this._matcher(i));o.sort(this._ranker),n&&n(o),o.length .tt-suggestion",this._handleMouseover).on("click",".tt-suggestions > .tt-suggestion",this._handleSelection)}function i(t){var e=t.parents(".tt-suggestions").first();return{value:t.data("value"),query:e.data("query"),dataset:e.data("dataset")}}return e.mixin(t.prototype,n,{_handleMouseenter:function(){this.isMouseOverDropdown=!0},_handleMouseleave:function(){this.isMouseOverDropdown=!1},_handleMouseover:function(t){this._getSuggestions().removeClass("tt-is-under-cursor"),$(t.currentTarget).addClass("tt-is-under-cursor")},_handleSelection:function(t){this.trigger("select",i($(t.currentTarget)))},_moveCursor:function(t){var e,n,i,s;if(this.$menu.hasClass("tt-is-open")){if(e=this._getSuggestions(),n=e.filter(".tt-is-under-cursor"),n.removeClass("tt-is-under-cursor"),i=e.index(n)+t,i=(i+1)%(e.length+1)-1,-1===i)return this.trigger("cursorOff"),void 0;-1>i&&(i=e.length-1),s=e.eq(i).addClass("tt-is-under-cursor"),this.trigger("cursorOn",{value:s.data("value")})}},_getSuggestions:function(){return this.$menu.find(".tt-suggestions > .tt-suggestion")},hideUnlessMouseIsOverDropdown:function(){this.isMouseOverDropdown||this.hide()},hide:function(){this.$menu.hasClass("tt-is-open")&&(this.$menu.removeClass("tt-is-open").find(".tt-suggestions > .tt-suggestion").removeClass("tt-is-under-cursor"),this.trigger("hide"))},show:function(){this.$menu.hasClass("tt-is-open")||(this.$menu.addClass("tt-is-open"),this.trigger("show"))},isOpen:function(){return this.$menu.hasClass("tt-is-open")},moveCursorUp:function(){this._moveCursor(-1)},moveCursorDown:function(){this._moveCursor(1)},getSuggestionUnderCursor:function(){var t=this._getSuggestions().filter(".tt-is-under-cursor").first();return t.length>0?i(t):null},getFirstSuggestion:function(){var t=this._getSuggestions().first();return t.length>0?i(t):null},renderSuggestions:function(t,n,i){var s,r,o,u="tt-dataset-"+n.name,a=this.$menu.find("."+u);0===a.length&&(a=$('
    1. ').addClass(u).appendTo(this.$menu)),s=document.createElement("div"),r=document.createDocumentFragment(),this.clearSuggestions(n.name),i.length>0&&(this.$menu.removeClass("tt-is-empty"),e.each(i,function(t,e){s.innerHTML=n.template.render(e),o=s.firstChild,o.setAttribute("data-value",e.value),r.appendChild(o)})),a.find("> .tt-suggestions").data({query:t,dataset:n.name}).append(r),this.trigger("suggestionsRender")},clearSuggestions:function(t){var e=t?this.$menu.find(".tt-dataset-"+t+" .tt-suggestions"):this.$menu.find(".tt-suggestions");e.empty(),0===this._getSuggestions().length&&this.$menu.addClass("tt-is-empty")}}),t}(),h=function(){function t(t){e.bindAll(this),this.$node=i(t.input),this.datasets=t.datasets,e.each(this.datasets,function(t,e){var n='
    2. %body
    3. ';e.template=e.template?e.engine.compile(n.replace("%body",e.template)):{render:function(t){return n.replace("%body","

      "+t.value+"

      ")}}}),this.inputView=new u({input:this.$node.find(".tt-query"),hint:this.$node.find(".tt-hint")}),this.dropdownView=new a({menu:this.$node.find(".tt-dropdown-menu")}),this.dropdownView.on("select",this._handleSelection).on("cursorOn",this._clearHint).on("cursorOn",this._setInputValueToSuggestionUnderCursor).on("cursorOff",this._setInputValueToQuery).on("cursorOff",this._updateHint).on("suggestionsRender",this._updateHint).on("show",this._updateHint).on("hide",this._clearHint),this.inputView.on("focus",this._showDropdown).on("blur",this._hideDropdown).on("blur",this._setInputValueToQuery).on("enter",this._handleSelection).on("queryChange",this._clearHint).on("queryChange",this._clearSuggestions).on("queryChange",this._getSuggestions).on("whitespaceChange",this._updateHint).on("queryChange whitespaceChange",this._showDropdown).on("queryChange whitespaceChange",this._setLanguageDirection).on("esc",this._hideDropdown).on("esc",this._setInputValueToQuery).on("up down",this._moveDropdownCursor).on("up down",this._showDropdown).on("tab",this._setPreventDefaultValueForTab).on("tab left right",this._autocomplete)}function i(t){var e=$(t),n=$(s.hint).css({"background-color":e.css("background-color")});if(0===e.length)return null;try{!e.attr("dir")&&e.attr("dir","auto")}catch(i){}return e.attr({autocomplete:!1,spellcheck:!1}).addClass("tt-query").wrap(s.wrapper).parent().prepend(n).append(s.dropdown)}var s={wrapper:'',hint:'',dropdown:'
        '};return e.mixin(t.prototype,n,{_setPreventDefaultValueForTab:function(){var t=this.inputView.getHintValue(),e=this.inputView.getInputValue(),n=t&&t!==e;this.inputView.setPreventDefaultValueForKey("9",n)},_setLanguageDirection:function(){var t="tt-"+this.inputView.getLanguageDirection();this.$node.hasClass(t)||this.$node.removeClass("tt-ltr tt-rtl").addClass(t)},_updateHint:function(){var t,e,n,i,s=this.dropdownView.getFirstSuggestion(),r=s?s.value:null;r&&this.dropdownView.isOpen()&&(t=this.inputView.getInputValue(),e=t.replace(/\s{2,}/g," ").replace(/^\s+/g,""),n=RegExp("^(?:"+e+")(.*$)","i"),i=n.exec(r),this.inputView.setHintValue(t+(i?i[1]:"")))},_clearHint:function(){this.inputView.setHintValue("")},_clearSuggestions:function(){this.dropdownView.clearSuggestions()},_setInputValueToQuery:function(){this.inputView.setInputValue(this.inputView.getQuery())},_setInputValueToSuggestionUnderCursor:function(t){this.inputView.setInputValue(t.data.value,!0)},_showDropdown:function(){this.dropdownView.show()},_hideDropdown:function(t){this.dropdownView["blur"===t.type?"hideUnlessMouseIsOverDropdown":"hide"]()},_moveDropdownCursor:function(t){this.dropdownView["up"===t.type?"moveCursorUp":"moveCursorDown"]()},_handleSelection:function(t){var n="select"===t.type,i=n?t.data:this.dropdownView.getSuggestionUnderCursor();i&&(this.inputView.setInputValue(i.value),n?this.inputView.focus():t.data.preventDefault(),n&&e.isMsie()?setTimeout(this.dropdownView.hide,0):this.dropdownView.hide())},_getSuggestions:function(){var t=this,n=this.inputView.getQuery();e.each(this.datasets,function(e,i){i.getSuggestions(n,function(e){t._renderSuggestions(n,i,e)})})},_renderSuggestions:function(t,e,n){t===this.inputView.getQuery()&&(n=n.slice(0,e.limit),this.dropdownView.renderSuggestions(t,e,n))},_autocomplete:function(t){var e,n,i,s;("right"!==t.type&&"left"!==t.type||(e=this.inputView.isCursorAtEnd(),n="ltr"===this.inputView.getLanguageDirection()?"left"===t.type:"right"===t.type,e&&!n))&&(i=this.inputView.getQuery(),s=this.inputView.getHintValue(),""!==s&&i!==s&&this.inputView.setInputValue(s))}}),t}();(function(){function t(t){s[t]?s[t].apply(this,[].slice.call(arguments,1)):s.initialize.apply(this,arguments)}function n(t){a=t}var i,s,u={},a={};jQuery.fn.typeahead=t,t.configureTransport=n,s={initialize:function(n){var s={};if(n=e.isArray(n)?n:[n],0===n.length)throw Error("no datasets provided");return delete t.configureTransport,i=i||new r(a),e.each(n,function(t,n){var r,a=n.name=n.name||e.getUniqueId();if(u[a])r=u[a];else{if(n.limit=n.limit||5,n.template=n.template,n.engine=n.engine,n.template&&!n.engine)throw Error("no template engine specified for "+a);r=u[a]=new o({name:n.name,limit:n.limit,local:n.local,prefetch:n.prefetch,remote:n.remote,matcher:n.matcher,ranker:n.ranker,transport:i})}s[a]={name:n.name,limit:n.limit,template:n.template,engine:n.engine,getSuggestions:r.getSuggestions}}),this.each(function(){$(this).data({typeahead:new h({input:this,datasets:s})})})}}})()})();