{"version":3,"sources":["search.js"],"names":["$","window","document","undefined","Math","self","Function","fn","search","parameters","returnedValue","$allModules","this","moduleSelector","selector","time","Date","getTime","performance","query","arguments","methodInvoked","queryArguments","slice","call","each","module","settings","isPlainObject","extend","className","metadata","regExp","fields","error","namespace","eventNamespace","moduleNamespace","$module","$prompt","find","prompt","$searchButton","searchButton","$results","results","$result","result","$category","category","element","instance","data","disabledBubbled","initialize","verbose","determine","searchFields","bind","events","set","type","create","instantiate","destroy","off","removeData","refresh","debug","refreshResults","automatic","on","get","inputEvent","event","input","attr","focus","blur","handleKeyboard","mousedown","mouseup","click","clearTimeout","timer","setTimeout","searchDelay","has","minimumCharacters","can","show","showResults","pageLostFocus","activeElement","callback","cancel","remove","hideResults","hideDelay","resultsClicked","one","is","inMessage","animating","hidden","$title","title","eq","$link","href","target","value","html","length","text","isFunction","onSelect","ctrlKey","open","location","newIndex","$activeResult","filter","active","currentIndex","index","resultSize","hasActiveResult","keyCode","which","keys","backspace","enter","escape","upArrow","downArrow","trigger","visible","preventDefault","removeClass","addClass","closest","buttonPressed","buttonFocus","setup","api","searchTerm","apiSettings","cache","action","urlData","onSuccess","response","parse","onAbort","onFailure","displayMessage","serverError","onError","useAPI","focused","empty","transition","hasClass","$target","isInDOM","contains","documentElement","message","createEvent","promptElement","initEvent","dispatchEvent","oninput","onpropertychange","val","lookupFields","isArray","object","select","firstResult","first","loading","pressed","read","save","addResults","inject","id","source","local","remote","onSearchQuery","searchHTML","content","generateResults","write","fuzzyResults","searchExp","toString","replace","matchRegExp","RegExp","beginsWith","addResult","array","notResult","inArray","notFuzzyResult","push","field","label","fieldExists","searchFullText","fuzzySearch","merge","term","termLength","queryLength","toLowerCase","characterIndex","nextCharacterIndex","queryCharacter","charCodeAt","numCharacters","minCharacters","clear","name","resultIndex","categoryIndex","letterID","resultID","String","fromCharCode","appendTo","$selectedResult","children","onResultsAdd","selectFirstResult","animation","duration","queue","stop","fadeIn","easing","onResultsOpen","fadeOut","onResultsClose","template","templates","isProperObject","isEmptyObject","isProperArray","maxResults","noTemplate","showNoResults","noResults","onResults","setting","internal","silent","log","prototype","console","info","apply","currentTime","executionTime","previousTime","Name","Arguments","Element","Execution Time","display","totalTime","group","table","groupCollapsed","groupEnd","invoke","passedArguments","context","maxDepth","found","split","depth","camelCaseValue","charAt","toUpperCase","displayField","logging","noEndpoint","method","categories","categoryName","categoryResults","description","image","price","url","actionText","actionURL","string","badChars","shouldEscape","&","<",">","\"","'","`","escapedChar","chr","test","standard","jQuery"],"mappings":"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","file":"search.min.js","sourcesContent":["/*!\n * # Semantic UI 2.2.6 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n ? window\n : (typeof self != 'undefined' && self.Math == Math)\n ? self\n : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n var\n $allModules = $(this),\n moduleSelector = $allModules.selector || '',\n\n time = new Date().getTime(),\n performance = [],\n\n query = arguments[0],\n methodInvoked = (typeof query == 'string'),\n queryArguments = [].slice.call(arguments, 1),\n returnedValue\n ;\n $(this)\n .each(function() {\n var\n settings = ( $.isPlainObject(parameters) )\n ? $.extend(true, {}, $.fn.search.settings, parameters)\n : $.extend({}, $.fn.search.settings),\n\n className = settings.className,\n metadata = settings.metadata,\n regExp = settings.regExp,\n fields = settings.fields,\n selector = settings.selector,\n error = settings.error,\n namespace = settings.namespace,\n\n eventNamespace = '.' + namespace,\n moduleNamespace = namespace + '-module',\n\n $module = $(this),\n $prompt = $module.find(selector.prompt),\n $searchButton = $module.find(selector.searchButton),\n $results = $module.find(selector.results),\n $result = $module.find(selector.result),\n $category = $module.find(selector.category),\n\n element = this,\n instance = $module.data(moduleNamespace),\n\n disabledBubbled = false,\n\n module\n ;\n\n module = {\n\n initialize: function() {\n module.verbose('Initializing module');\n module.determine.searchFields();\n module.bind.events();\n module.set.type();\n module.create.results();\n module.instantiate();\n },\n instantiate: function() {\n module.verbose('Storing instance of module', module);\n instance = module;\n $module\n .data(moduleNamespace, module)\n ;\n },\n destroy: function() {\n module.verbose('Destroying instance');\n $module\n .off(eventNamespace)\n .removeData(moduleNamespace)\n ;\n },\n\n refresh: function() {\n module.debug('Refreshing selector cache');\n $prompt = $module.find(selector.prompt);\n $searchButton = $module.find(selector.searchButton);\n $category = $module.find(selector.category);\n $results = $module.find(selector.results);\n $result = $module.find(selector.result);\n },\n\n refreshResults: function() {\n $results = $module.find(selector.results);\n $result = $module.find(selector.result);\n },\n\n bind: {\n events: function() {\n module.verbose('Binding events to search');\n if(settings.automatic) {\n $module\n .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n ;\n $prompt\n .attr('autocomplete', 'off')\n ;\n }\n $module\n // prompt\n .on('focus' + eventNamespace, selector.prompt, module.event.focus)\n .on('blur' + eventNamespace, selector.prompt, module.event.blur)\n .on('keydown' + eventNamespace, selector.prompt, module.handleKeyboard)\n // search button\n .on('click' + eventNamespace, selector.searchButton, module.query)\n // results\n .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n .on('mouseup' + eventNamespace, selector.results, module.event.result.mouseup)\n .on('click' + eventNamespace, selector.result, module.event.result.click)\n ;\n }\n },\n\n determine: {\n searchFields: function() {\n // this makes sure $.extend does not add specified search fields to default fields\n // this is the only setting which should not extend defaults\n if(parameters && parameters.searchFields !== undefined) {\n settings.searchFields = parameters.searchFields;\n }\n }\n },\n\n event: {\n input: function() {\n clearTimeout(module.timer);\n module.timer = setTimeout(module.query, settings.searchDelay);\n },\n focus: function() {\n module.set.focus();\n if( module.has.minimumCharacters() ) {\n module.query();\n if( module.can.show() ) {\n module.showResults();\n }\n }\n },\n blur: function(event) {\n var\n pageLostFocus = (document.activeElement === this),\n callback = function() {\n module.cancel.query();\n module.remove.focus();\n module.timer = setTimeout(module.hideResults, settings.hideDelay);\n }\n ;\n if(pageLostFocus) {\n return;\n }\n if(module.resultsClicked) {\n module.debug('Determining if user action caused search to close');\n $module\n .one('click.close' + eventNamespace, selector.results, function(event) {\n if(module.is.inMessage(event) || disabledBubbled) {\n $prompt.focus();\n return;\n }\n disabledBubbled = false;\n if( !module.is.animating() && !module.is.hidden()) {\n callback();\n }\n })\n ;\n }\n else {\n module.debug('Input blurred without user action, closing results');\n callback();\n }\n },\n result: {\n mousedown: function() {\n module.resultsClicked = true;\n },\n mouseup: function() {\n module.resultsClicked = false;\n },\n click: function(event) {\n module.debug('Search result selected');\n var\n $result = $(this),\n $title = $result.find(selector.title).eq(0),\n $link = $result.is('a[href]')\n ? $result\n : $result.find('a[href]').eq(0),\n href = $link.attr('href') || false,\n target = $link.attr('target') || false,\n title = $title.html(),\n // title is used for result lookup\n value = ($title.length > 0)\n ? $title.text()\n : false,\n results = module.get.results(),\n result = $result.data(metadata.result) || module.get.result(value, results),\n returnedValue\n ;\n if( $.isFunction(settings.onSelect) ) {\n if(settings.onSelect.call(element, result, results) === false) {\n module.debug('Custom onSelect callback cancelled default select action');\n disabledBubbled = true;\n return;\n }\n }\n module.hideResults();\n if(value) {\n module.set.value(value);\n }\n if(href) {\n module.verbose('Opening search link found in result', $link);\n if(target == '_blank' || event.ctrlKey) {\n window.open(href);\n }\n else {\n window.location.href = (href);\n }\n }\n }\n }\n },\n handleKeyboard: function(event) {\n var\n // force selector refresh\n $result = $module.find(selector.result),\n $category = $module.find(selector.category),\n $activeResult = $result.filter('.' + className.active),\n currentIndex = $result.index( $activeResult ),\n resultSize = $result.length,\n hasActiveResult = $activeResult.length > 0,\n\n keyCode = event.which,\n keys = {\n backspace : 8,\n enter : 13,\n escape : 27,\n upArrow : 38,\n downArrow : 40\n },\n newIndex\n ;\n // search shortcuts\n if(keyCode == keys.escape) {\n module.verbose('Escape key pressed, blurring search field');\n module.trigger.blur();\n }\n if( module.is.visible() ) {\n if(keyCode == keys.enter) {\n module.verbose('Enter key pressed, selecting active result');\n if( $result.filter('.' + className.active).length > 0 ) {\n module.event.result.click.call($result.filter('.' + className.active), event);\n event.preventDefault();\n return false;\n }\n }\n else if(keyCode == keys.upArrow && hasActiveResult) {\n module.verbose('Up key pressed, changing active result');\n newIndex = (currentIndex - 1 < 0)\n ? currentIndex\n : currentIndex - 1\n ;\n $category\n .removeClass(className.active)\n ;\n $result\n .removeClass(className.active)\n .eq(newIndex)\n .addClass(className.active)\n .closest($category)\n .addClass(className.active)\n ;\n event.preventDefault();\n }\n else if(keyCode == keys.downArrow) {\n module.verbose('Down key pressed, changing active result');\n newIndex = (currentIndex + 1 >= resultSize)\n ? currentIndex\n : currentIndex + 1\n ;\n $category\n .removeClass(className.active)\n ;\n $result\n .removeClass(className.active)\n .eq(newIndex)\n .addClass(className.active)\n .closest($category)\n .addClass(className.active)\n ;\n event.preventDefault();\n }\n }\n else {\n // query shortcuts\n if(keyCode == keys.enter) {\n module.verbose('Enter key pressed, executing query');\n module.query();\n module.set.buttonPressed();\n $prompt.one('keyup', module.remove.buttonFocus);\n }\n }\n },\n\n setup: {\n api: function(searchTerm) {\n var\n apiSettings = {\n debug : settings.debug,\n on : false,\n cache : true,\n action : 'search',\n urlData : {\n query : searchTerm\n },\n onSuccess : function(response) {\n module.parse.response.call(element, response, searchTerm);\n },\n onAbort : function(response) {\n },\n onFailure : function() {\n module.displayMessage(error.serverError);\n },\n onError : module.error\n },\n searchHTML\n ;\n $.extend(true, apiSettings, settings.apiSettings);\n module.verbose('Setting up API request', apiSettings);\n $module.api(apiSettings);\n }\n },\n\n can: {\n useAPI: function() {\n return $.fn.api !== undefined;\n },\n show: function() {\n return module.is.focused() && !module.is.visible() && !module.is.empty();\n },\n transition: function() {\n return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n }\n },\n\n is: {\n animating: function() {\n return $results.hasClass(className.animating);\n },\n hidden: function() {\n return $results.hasClass(className.hidden);\n },\n inMessage: function(event) {\n if(!event.target) {\n return;\n }\n var\n $target = $(event.target),\n isInDOM = $.contains(document.documentElement, event.target)\n ;\n return (isInDOM && $target.closest(selector.message).length > 0);\n },\n empty: function() {\n return ($results.html() === '');\n },\n visible: function() {\n return ($results.filter(':visible').length > 0);\n },\n focused: function() {\n return ($prompt.filter(':focus').length > 0);\n }\n },\n\n trigger: {\n blur: function() {\n var\n events = document.createEvent('HTMLEvents'),\n promptElement = $prompt[0]\n ;\n if(promptElement) {\n module.verbose('Triggering native blur event');\n events.initEvent('blur', false, false);\n promptElement.dispatchEvent(events);\n }\n }\n },\n\n get: {\n inputEvent: function() {\n var\n prompt = $prompt[0],\n inputEvent = (prompt !== undefined && prompt.oninput !== undefined)\n ? 'input'\n : (prompt !== undefined && prompt.onpropertychange !== undefined)\n ? 'propertychange'\n : 'keyup'\n ;\n return inputEvent;\n },\n value: function() {\n return $prompt.val();\n },\n results: function() {\n var\n results = $module.data(metadata.results)\n ;\n return results;\n },\n result: function(value, results) {\n var\n lookupFields = ['title', 'id'],\n result = false\n ;\n value = (value !== undefined)\n ? value\n : module.get.value()\n ;\n results = (results !== undefined)\n ? results\n : module.get.results()\n ;\n if(settings.type === 'category') {\n module.debug('Finding result that matches', value);\n $.each(results, function(index, category) {\n if($.isArray(category.results)) {\n result = module.search.object(value, category.results, lookupFields)[0];\n // don't continue searching if a result is found\n if(result) {\n return false;\n }\n }\n });\n }\n else {\n module.debug('Finding result in results object', value);\n result = module.search.object(value, results, lookupFields)[0];\n }\n return result || false;\n },\n },\n\n select: {\n firstResult: function() {\n module.verbose('Selecting first result');\n $result.first().addClass(className.active);\n }\n },\n\n set: {\n focus: function() {\n $module.addClass(className.focus);\n },\n loading: function() {\n $module.addClass(className.loading);\n },\n value: function(value) {\n module.verbose('Setting search input value', value);\n $prompt\n .val(value)\n ;\n },\n type: function(type) {\n type = type || settings.type;\n if(settings.type == 'category') {\n $module.addClass(settings.type);\n }\n },\n buttonPressed: function() {\n $searchButton.addClass(className.pressed);\n }\n },\n\n remove: {\n loading: function() {\n $module.removeClass(className.loading);\n },\n focus: function() {\n $module.removeClass(className.focus);\n },\n buttonPressed: function() {\n $searchButton.removeClass(className.pressed);\n }\n },\n\n query: function() {\n var\n searchTerm = module.get.value(),\n cache = module.read.cache(searchTerm)\n ;\n if( module.has.minimumCharacters() ) {\n if(cache) {\n module.debug('Reading result from cache', searchTerm);\n module.save.results(cache.results);\n module.addResults(cache.html);\n module.inject.id(cache.results);\n }\n else {\n module.debug('Querying for', searchTerm);\n if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n module.search.local(searchTerm);\n }\n else if( module.can.useAPI() ) {\n module.search.remote(searchTerm);\n }\n else {\n module.error(error.source);\n }\n }\n settings.onSearchQuery.call(element, searchTerm);\n }\n else {\n module.hideResults();\n }\n },\n\n search: {\n local: function(searchTerm) {\n var\n results = module.search.object(searchTerm, settings.content),\n searchHTML\n ;\n module.set.loading();\n module.save.results(results);\n module.debug('Returned local search results', results);\n\n searchHTML = module.generateResults({\n results: results\n });\n module.remove.loading();\n module.addResults(searchHTML);\n module.inject.id(results);\n module.write.cache(searchTerm, {\n html : searchHTML,\n results : results\n });\n },\n remote: function(searchTerm) {\n if($module.api('is loading')) {\n $module.api('abort');\n }\n module.setup.api(searchTerm);\n $module\n .api('query')\n ;\n },\n object: function(searchTerm, source, searchFields) {\n var\n results = [],\n fuzzyResults = [],\n searchExp = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n matchRegExp = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n // avoid duplicates when pushing results\n addResult = function(array, result) {\n var\n notResult = ($.inArray(result, results) == -1),\n notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n ;\n if(notResult && notFuzzyResult) {\n array.push(result);\n }\n }\n ;\n source = source || settings.source;\n searchFields = (searchFields !== undefined)\n ? searchFields\n : settings.searchFields\n ;\n\n // search fields should be array to loop correctly\n if(!$.isArray(searchFields)) {\n searchFields = [searchFields];\n }\n\n // exit conditions if no source\n if(source === undefined || source === false) {\n module.error(error.source);\n return [];\n }\n\n // iterate through search fields looking for matches\n $.each(searchFields, function(index, field) {\n $.each(source, function(label, content) {\n var\n fieldExists = (typeof content[field] == 'string')\n ;\n if(fieldExists) {\n if( content[field].search(matchRegExp) !== -1) {\n // content starts with value (first in results)\n addResult(results, content);\n }\n else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n // content fuzzy matches (last in results)\n addResult(fuzzyResults, content);\n }\n }\n });\n });\n return $.merge(results, fuzzyResults);\n }\n },\n\n fuzzySearch: function(query, term) {\n var\n termLength = term.length,\n queryLength = query.length\n ;\n if(typeof query !== 'string') {\n return false;\n }\n query = query.toLowerCase();\n term = term.toLowerCase();\n if(queryLength > termLength) {\n return false;\n }\n if(queryLength === termLength) {\n return (query === term);\n }\n search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n var\n queryCharacter = query.charCodeAt(characterIndex)\n ;\n while(nextCharacterIndex < termLength) {\n if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n continue search;\n }\n }\n return false;\n }\n return true;\n },\n\n parse: {\n response: function(response, searchTerm) {\n var\n searchHTML = module.generateResults(response)\n ;\n module.verbose('Parsing server response', response);\n if(response !== undefined) {\n if(searchTerm !== undefined && response[fields.results] !== undefined) {\n module.addResults(searchHTML);\n module.inject.id(response[fields.results]);\n module.write.cache(searchTerm, {\n html : searchHTML,\n results : response[fields.results]\n });\n module.save.results(response[fields.results]);\n }\n }\n }\n },\n\n cancel: {\n query: function() {\n if( module.can.useAPI() ) {\n $module.api('abort');\n }\n }\n },\n\n has: {\n minimumCharacters: function() {\n var\n searchTerm = module.get.value(),\n numCharacters = searchTerm.length\n ;\n return (numCharacters >= settings.minCharacters);\n }\n },\n\n clear: {\n cache: function(value) {\n var\n cache = $module.data(metadata.cache)\n ;\n if(!value) {\n module.debug('Clearing cache', value);\n $module.removeData(metadata.cache);\n }\n else if(value && cache && cache[value]) {\n module.debug('Removing value from cache', value);\n delete cache[value];\n $module.data(metadata.cache, cache);\n }\n }\n },\n\n read: {\n cache: function(name) {\n var\n cache = $module.data(metadata.cache)\n ;\n if(settings.cache) {\n module.verbose('Checking cache for generated html for query', name);\n return (typeof cache == 'object') && (cache[name] !== undefined)\n ? cache[name]\n : false\n ;\n }\n return false;\n }\n },\n\n create: {\n id: function(resultIndex, categoryIndex) {\n var\n resultID = (resultIndex + 1), // not zero indexed\n categoryID = (categoryIndex + 1),\n firstCharCode,\n letterID,\n id\n ;\n if(categoryIndex !== undefined) {\n // start char code for \"A\"\n letterID = String.fromCharCode(97 + categoryIndex);\n id = letterID + resultID;\n module.verbose('Creating category result id', id);\n }\n else {\n id = resultID;\n module.verbose('Creating result id', id);\n }\n return id;\n },\n results: function() {\n if($results.length === 0) {\n $results = $('
')\n .addClass(className.results)\n .appendTo($module)\n ;\n }\n }\n },\n\n inject: {\n result: function(result, resultIndex, categoryIndex) {\n module.verbose('Injecting result into results');\n var\n $selectedResult = (categoryIndex !== undefined)\n ? $results\n .children().eq(categoryIndex)\n .children(selector.result).eq(resultIndex)\n : $results\n .children(selector.result).eq(resultIndex)\n ;\n module.verbose('Injecting results metadata', $selectedResult);\n $selectedResult\n .data(metadata.result, result)\n ;\n },\n id: function(results) {\n module.debug('Injecting unique ids into results');\n var\n // since results may be object, we must use counters\n categoryIndex = 0,\n resultIndex = 0\n ;\n if(settings.type === 'category') {\n // iterate through each category result\n $.each(results, function(index, category) {\n resultIndex = 0;\n $.each(category.results, function(index, value) {\n var\n result = category.results[index]\n ;\n if(result.id === undefined) {\n result.id = module.create.id(resultIndex, categoryIndex);\n }\n module.inject.result(result, resultIndex, categoryIndex);\n resultIndex++;\n });\n categoryIndex++;\n });\n }\n else {\n // top level\n $.each(results, function(index, value) {\n var\n result = results[index]\n ;\n if(result.id === undefined) {\n result.id = module.create.id(resultIndex);\n }\n module.inject.result(result, resultIndex);\n resultIndex++;\n });\n }\n return results;\n }\n },\n\n save: {\n results: function(results) {\n module.verbose('Saving current search results to metadata', results);\n $module.data(metadata.results, results);\n }\n },\n\n write: {\n cache: function(name, value) {\n var\n cache = ($module.data(metadata.cache) !== undefined)\n ? $module.data(metadata.cache)\n : {}\n ;\n if(settings.cache) {\n module.verbose('Writing generated html to cache', name, value);\n cache[name] = value;\n $module\n .data(metadata.cache, cache)\n ;\n }\n }\n },\n\n addResults: function(html) {\n if( $.isFunction(settings.onResultsAdd) ) {\n if( settings.onResultsAdd.call($results, html) === false ) {\n module.debug('onResultsAdd callback cancelled default action');\n return false;\n }\n }\n if(html) {\n $results\n .html(html)\n ;\n module.refreshResults();\n if(settings.selectFirstResult) {\n module.select.firstResult();\n }\n module.showResults();\n }\n else {\n module.hideResults();\n }\n },\n\n showResults: function() {\n if(!module.is.visible()) {\n if( module.can.transition() ) {\n module.debug('Showing results with css animations');\n $results\n .transition({\n animation : settings.transition + ' in',\n debug : settings.debug,\n verbose : settings.verbose,\n duration : settings.duration,\n queue : true\n })\n ;\n }\n else {\n module.debug('Showing results with javascript');\n $results\n .stop()\n .fadeIn(settings.duration, settings.easing)\n ;\n }\n settings.onResultsOpen.call($results);\n }\n },\n hideResults: function() {\n if( module.is.visible() ) {\n if( module.can.transition() ) {\n module.debug('Hiding results with css animations');\n $results\n .transition({\n animation : settings.transition + ' out',\n debug : settings.debug,\n verbose : settings.verbose,\n duration : settings.duration,\n queue : true\n })\n ;\n }\n else {\n module.debug('Hiding results with javascript');\n $results\n .stop()\n .fadeOut(settings.duration, settings.easing)\n ;\n }\n settings.onResultsClose.call($results);\n }\n },\n\n generateResults: function(response) {\n module.debug('Generating html from response', response);\n var\n template = settings.templates[settings.type],\n isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n isProperArray = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n html = ''\n ;\n if(isProperObject || isProperArray ) {\n if(settings.maxResults > 0) {\n if(isProperObject) {\n if(settings.type == 'standard') {\n module.error(error.maxResults);\n }\n }\n else {\n response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n }\n }\n if($.isFunction(template)) {\n html = template(response, fields);\n }\n else {\n module.error(error.noTemplate, false);\n }\n }\n else if(settings.showNoResults) {\n html = module.displayMessage(error.noResults, 'empty');\n }\n settings.onResults.call(element, response);\n return html;\n },\n\n displayMessage: function(text, type) {\n type = type || 'standard';\n module.debug('Displaying message', text, type);\n module.addResults( settings.templates.message(text, type) );\n return settings.templates.message(text, type);\n },\n\n setting: function(name, value) {\n if( $.isPlainObject(name) ) {\n $.extend(true, settings, name);\n }\n else if(value !== undefined) {\n settings[name] = value;\n }\n else {\n return settings[name];\n }\n },\n internal: function(name, value) {\n if( $.isPlainObject(name) ) {\n $.extend(true, module, name);\n }\n else if(value !== undefined) {\n module[name] = value;\n }\n else {\n return module[name];\n }\n },\n debug: function() {\n if(!settings.silent && settings.debug) {\n if(settings.performance) {\n module.performance.log(arguments);\n }\n else {\n module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n module.debug.apply(console, arguments);\n }\n }\n },\n verbose: function() {\n if(!settings.silent && settings.verbose && settings.debug) {\n if(settings.performance) {\n module.performance.log(arguments);\n }\n else {\n module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n module.verbose.apply(console, arguments);\n }\n }\n },\n error: function() {\n if(!settings.silent) {\n module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n module.error.apply(console, arguments);\n }\n },\n performance: {\n log: function(message) {\n var\n currentTime,\n executionTime,\n previousTime\n ;\n if(settings.performance) {\n currentTime = new Date().getTime();\n previousTime = time || currentTime;\n executionTime = currentTime - previousTime;\n time = currentTime;\n performance.push({\n 'Name' : message[0],\n 'Arguments' : [].slice.call(message, 1) || '',\n 'Element' : element,\n 'Execution Time' : executionTime\n });\n }\n clearTimeout(module.performance.timer);\n module.performance.timer = setTimeout(module.performance.display, 500);\n },\n display: function() {\n var\n title = settings.name + ':',\n totalTime = 0\n ;\n time = false;\n clearTimeout(module.performance.timer);\n $.each(performance, function(index, data) {\n totalTime += data['Execution Time'];\n });\n title += ' ' + totalTime + 'ms';\n if(moduleSelector) {\n title += ' \\'' + moduleSelector + '\\'';\n }\n if($allModules.length > 1) {\n title += ' ' + '(' + $allModules.length + ')';\n }\n if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n console.groupCollapsed(title);\n if(console.table) {\n console.table(performance);\n }\n else {\n $.each(performance, function(index, data) {\n console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n });\n }\n console.groupEnd();\n }\n performance = [];\n }\n },\n invoke: function(query, passedArguments, context) {\n var\n object = instance,\n maxDepth,\n found,\n response\n ;\n passedArguments = passedArguments || queryArguments;\n context = element || context;\n if(typeof query == 'string' && object !== undefined) {\n query = query.split(/[\\. ]/);\n maxDepth = query.length - 1;\n $.each(query, function(depth, value) {\n var camelCaseValue = (depth != maxDepth)\n ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n : query\n ;\n if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n object = object[camelCaseValue];\n }\n else if( object[camelCaseValue] !== undefined ) {\n found = object[camelCaseValue];\n return false;\n }\n else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n object = object[value];\n }\n else if( object[value] !== undefined ) {\n found = object[value];\n return false;\n }\n else {\n return false;\n }\n });\n }\n if( $.isFunction( found ) ) {\n response = found.apply(context, passedArguments);\n }\n else if(found !== undefined) {\n response = found;\n }\n if($.isArray(returnedValue)) {\n returnedValue.push(response);\n }\n else if(returnedValue !== undefined) {\n returnedValue = [returnedValue, response];\n }\n else if(response !== undefined) {\n returnedValue = response;\n }\n return found;\n }\n };\n if(methodInvoked) {\n if(instance === undefined) {\n module.initialize();\n }\n module.invoke(query);\n }\n else {\n if(instance !== undefined) {\n instance.invoke('destroy');\n }\n module.initialize();\n }\n\n })\n ;\n\n return (returnedValue !== undefined)\n ? returnedValue\n : this\n ;\n};\n\n$.fn.search.settings = {\n\n name : 'Search',\n namespace : 'search',\n\n silent : false,\n debug : false,\n verbose : false,\n performance : true,\n\n // template to use (specified in settings.templates)\n type : 'standard',\n\n // minimum characters required to search\n minCharacters : 1,\n\n // whether to select first result after searching automatically\n selectFirstResult : false,\n\n // API config\n apiSettings : false,\n\n // object to search\n source : false,\n\n // fields to search\n searchFields : [\n 'title',\n 'description'\n ],\n\n // field to display in standard results template\n displayField : '',\n\n // whether to include fuzzy results in local search\n searchFullText : true,\n\n // whether to add events to prompt automatically\n automatic : true,\n\n // delay before hiding menu after blur\n hideDelay : 0,\n\n // delay before searching\n searchDelay : 200,\n\n // maximum results returned from local\n maxResults : 7,\n\n // whether to store lookups in local cache\n cache : true,\n\n // whether no results errors should be shown\n showNoResults : true,\n\n // transition settings\n transition : 'scale',\n duration : 200,\n easing : 'easeOutExpo',\n\n // callbacks\n onSelect : false,\n onResultsAdd : false,\n\n onSearchQuery : function(query){},\n onResults : function(response){},\n\n onResultsOpen : function(){},\n onResultsClose : function(){},\n\n className: {\n animating : 'animating',\n active : 'active',\n empty : 'empty',\n focus : 'focus',\n hidden : 'hidden',\n loading : 'loading',\n results : 'results',\n pressed : 'down'\n },\n\n error : {\n source : 'Cannot search. No source used, and Semantic API module was not included',\n noResults : 'Your search returned no results',\n logging : 'Error in debug logging, exiting.',\n noEndpoint : 'No search endpoint was specified',\n noTemplate : 'A valid template name was not specified.',\n serverError : 'There was an issue querying the server.',\n maxResults : 'Results must be an array to use maxResults setting',\n method : 'The method you called is not defined.'\n },\n\n metadata: {\n cache : 'cache',\n results : 'results',\n result : 'result'\n },\n\n regExp: {\n escape : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n beginsWith : '(?:\\s|^)'\n },\n\n // maps api response attributes to internal representation\n fields: {\n categories : 'results', // array of categories (category view)\n categoryName : 'name', // name of category (category view)\n categoryResults : 'results', // array of results (category view)\n description : 'description', // result description\n image : 'image', // result image\n price : 'price', // result price\n results : 'results', // array of results (standard)\n title : 'title', // result title\n url : 'url', // result url\n action : 'action', // \"view more\" object name\n actionText : 'text', // \"view more\" text\n actionURL : 'url' // \"view more\" url\n },\n\n selector : {\n prompt : '.prompt',\n searchButton : '.search.button',\n results : '.results',\n message : '.results > .message',\n category : '.category',\n result : '.result',\n title : '.title, .name'\n },\n\n templates: {\n escape: function(string) {\n var\n badChars = /[&<>\"'`]/g,\n shouldEscape = /[&<>\"'`]/,\n escape = {\n \"&\": \"&\",\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"'\": \"'\",\n \"`\": \"`\"\n },\n escapedChar = function(chr) {\n return escape[chr];\n }\n ;\n if(shouldEscape.test(string)) {\n return string.replace(badChars, escapedChar);\n }\n return string;\n },\n message: function(message, type) {\n var\n html = ''\n ;\n if(message !== undefined && type !== undefined) {\n html += ''\n + ' ';\n }\n return html;\n },\n category: function(response, fields) {\n var\n html = '',\n escape = $.fn.search.settings.templates.escape\n ;\n if(response[fields.categoryResults] !== undefined) {\n\n // each category\n $.each(response[fields.categoryResults], function(index, category) {\n if(category[fields.results] !== undefined && category.results.length > 0) {\n\n html += '