{"version":3,"sources":["ko_HandbookSearchViewModel.js"],"names":["window","bm","HandbookSearchViewModel","initialJsonData","showingResultsFormat","self","this","Name","HandbookSearchResultData","ko","observable","IsSearchRunning","IsResultModelInitialized","TypeAheadFilter","ShowingResultsFormat","computed","replace","searchResults","length","resultCount","DisplaySearchTerm","peek","BackToDefaultView","qs","History","pushState","options","initialTitle","Load","initialJson","qsParms","parseQueryString","location","href","query","HandbookSearchResults","QueryString","queryString","searchFilters","encodeURIComponent","skip","$","scrollTop","str","strArr","trim","split","reduce","ret","param","parts","undefined","decodeURIComponent","Search","hasMoreResults","LoadNextPage","LoadDataFromServer","ajax","url","type","dataType","contentType","data","cache","success","newHandbookResultData","oldResults","concat","blur","error","xhr","textStatus","errorThrown","console","log","bindingHandlers","BindTopicTileHover","init","element","valueAccessor","allBindings","viewModel","bindingContext","update","on","currentHeight","parent","height","addClass","css","removeClass","SearchEnterkey","callback","keypress","event","which","keyCode","call","bindAutoComplete","allBindingsAccessor","acInput","root","$root","autoCompleteField","bindAutoCompleteSection","bindAutoCompleteField","autoCompleteMaxResults","bindAutoCompleteMaxResults","pattern","formattedResult","termArry","autoCompleteUrl","bindAutoCompleteServiceUrl","autoCompleteAppendTo","bindAutoCompleteAppendTo","appendTo","utils","escapeRegExChars","value","createNode","containerClass","div","document","createElement","className","style","position","display","autocomplete","maxHeight","zIndex","serviceUrl","noCache","minChars","triggerSelectOnValidInput","params","field","take","handbookId","HandbookId","onSelect","transformResult","response","originalQuery","autoCompleteResultCount","suggestions","map","dataItem","Url","formatResult","suggestion","currentValue","sort","a","b","i","keyTerm","RegExp","onSearchStart"],"mappings":"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","file":"ko_HandbookSearchViewModel.js","sourcesContent":["window.bm.HandbookSearchViewModel = function (initialJsonData, showingResultsFormat) {\r\n var self = this;\r\n\r\n self.Name = 'HandbookSearchViewModel';\r\n\r\n self.HandbookSearchResultData = ko.observable(null);\r\n self.IsSearchRunning = ko.observable(false);\r\n self.IsResultModelInitialized = ko.observable(false);\r\n self.TypeAheadFilter = ko.observable('');\r\n\r\n\r\n // Display Field For (showing results {0} of {1} ect.....)\r\n self.ShowingResultsFormat = ko.computed(function () {\r\n if (!!self.HandbookSearchResultData()) {\r\n return showingResultsFormat.replace('{0}', self.HandbookSearchResultData().searchResults().length).replace('{1}', self.HandbookSearchResultData().resultCount()) + ' for ';\r\n }\r\n return '';\r\n });\r\n self.DisplaySearchTerm = ko.computed(function () {\r\n self.IsSearchRunning();\r\n var searchTerm = self.TypeAheadFilter.peek();\r\n return \"'\" + searchTerm + \"'\";\r\n });\r\n\r\n self.BackToDefaultView = function () {\r\n var qs = \"?view=default\";\r\n History.pushState({ qs: qs }, History.options.initialTitle, qs);\r\n self.TypeAheadFilter('');\r\n };\r\n\r\n self.Load = function (initialJson) {\r\n self.IsSearchRunning(true);\r\n var qsParms = self.parseQueryString(window.location.href);\r\n if (!!qsParms) {\r\n if (!!qsParms.query && qsParms.query.length > 0) {\r\n self.TypeAheadFilter(qsParms.query);\r\n }\r\n }\r\n self.HandbookSearchResultData(new HandbookSearchResults(initialJson));\r\n self.IsSearchRunning(false);\r\n };\r\n\r\n // Build query string based on filters\r\n self.QueryString = function () {\r\n var queryString = \"?view=search\";\r\n\r\n if (self.HandbookSearchResultData().searchFilters.query() != null && self.HandbookSearchResultData().searchFilters.query().length > 0) {\r\n queryString += (queryString != \"\" ? \"&\" : \"?\");\r\n queryString += \"query=\" + encodeURIComponent(self.HandbookSearchResultData().searchFilters.query());\r\n }\r\n if (self.HandbookSearchResultData().searchFilters.skip() > 0) {\r\n queryString += (queryString != \"\" ? \"&\" : \"?\");\r\n queryString += \"skip=\" + self.HandbookSearchResultData().searchFilters.skip();\r\n }\r\n queryString += (queryString != \"\" ? \"&\" : \"?\");\r\n queryString += \"scroll=\" + $(window).scrollTop();\r\n\r\n return queryString;\r\n };\r\n\r\n self.parseQueryString = function (str) {\r\n if (typeof str !== 'string') {\r\n return {};\r\n }\r\n var strArr = str.trim().split('?');\r\n if (!strArr || strArr.length < 2) {\r\n return {};\r\n }\r\n str = strArr[1];\r\n return str.trim().split('&').reduce(function (ret, param) {\r\n var parts = param.replace(/\\+/g, ' ').split('=');\r\n ret[parts[0]] = parts[1] === undefined ? null : decodeURIComponent(parts[1]);\r\n return ret;\r\n }, {});\r\n };\r\n\r\n // Run search by pushing new state\r\n self.Search = function () {\r\n if (!!self.HandbookSearchResultData) {\r\n if ((self.TypeAheadFilter().trim().length > 0) && (self.TypeAheadFilter().trim() !== self.HandbookSearchResultData().searchFilters.query())) {\r\n self.HandbookSearchResultData().searchFilters.query(self.TypeAheadFilter().trim());\r\n self.HandbookSearchResultData().searchResults([]);\r\n self.HandbookSearchResultData().resultCount(0);\r\n self.HandbookSearchResultData().hasMoreResults(false);\r\n self.HandbookSearchResultData().searchFilters.skip(0);\r\n var qs = self.QueryString();\r\n History.pushState({ qs: qs }, History.options.initialTitle, qs);\r\n }\r\n } else {\r\n self.TypeAheadFilter('');\r\n }\r\n };\r\n\r\n // Load next page\r\n self.LoadNextPage = function () {\r\n self.HandbookSearchResultData().searchFilters.skip(self.HandbookSearchResultData().searchResults().length);\r\n var qs = self.QueryString();\r\n History.pushState({ qs: qs }, History.options.initialTitle, qs);\r\n };\r\n\r\n // Load data from server\r\n self.LoadDataFromServer = function () {\r\n self.IsSearchRunning(true);\r\n\r\n $.ajax({\r\n url: '/api/handbook/search',\r\n type: \"GET\",\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n data: self.HandbookSearchResultData().searchFilters,\r\n cache: false,\r\n success: function (data) {\r\n if (self.HandbookSearchResultData().searchFilters.skip() == 0) {\r\n self.HandbookSearchResultData().resultCount(0);\r\n self.HandbookSearchResultData().searchResults([]);\r\n }\r\n var newHandbookResultData = new HandbookSearchResults(data);\r\n var oldResults = self.HandbookSearchResultData().searchResults();\r\n\r\n newHandbookResultData.searchResults(oldResults.concat(newHandbookResultData.searchResults()));\r\n self.HandbookSearchResultData(newHandbookResultData);\r\n\r\n self.TypeAheadFilter(data.searchFilters.query);\r\n\r\n self.IsSearchRunning(false);\r\n $('#HandbookSearchInput').blur();\r\n\r\n },\r\n error: function (xhr, textStatus, errorThrown) {\r\n console.log(xhr);\r\n console.log(\"textStatus : \" + textStatus);\r\n console.log(\"errorThrown : \" + errorThrown);\r\n }\r\n });\r\n }\r\n\r\n self.Load(initialJsonData);\r\n};\r\nko.bindingHandlers.BindTopicTileHover = {\r\n\r\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n },\r\n update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n $(element).on('mouseenter', function () {\r\n var currentHeight = $(this).parent().height();\r\n $(this).addClass('tile-hovered');\r\n $(this).parent().css('height', currentHeight + 'px');\r\n\r\n });\r\n $(element).on('mouseleave', function () {\r\n $(this).parent().css('height', 'auto');\r\n $(this).removeClass('tile-hovered');\r\n });\r\n }\r\n};\r\nko.bindingHandlers.SearchEnterkey = {\r\n init: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n var callback = valueAccessor();\r\n $(element).keypress(function (event) {\r\n var keyCode = (event.which ? event.which : event.keyCode);\r\n if (keyCode === 13) {\r\n callback.call(viewModel);\r\n $(element).blur();\r\n return false;\r\n }\r\n return true;\r\n });\r\n $(window).blur(function () {\r\n $(element).blur();\r\n });\r\n },\r\n update: function (element, valueAccessor, allBindings, viewModel, bindingContext) {\r\n }\r\n};\r\nko.bindingHandlers.bindAutoComplete = {\r\n init: function (element, valueAccessor, allBindingsAccessor, viewModel, bindingContext) {\r\n var acInput = $(element);\r\n var observable = valueAccessor();\r\n var allBindings = allBindingsAccessor();\r\n var root = bindingContext.$root;\r\n\r\n var autoCompleteSection = allBindings.bindAutoCompleteSection;\r\n var autoCompleteField = allBindings.bindAutoCompleteField;\r\n var autoCompleteMaxResults = 7;\r\n if (!!allBindings && !!allBindings.bindAutoCompleteMaxResults && allBindings.bindAutoCompleteMaxResults != '') {\r\n autoCompleteMaxResults = allBindings.bindAutoCompleteMaxResults;\r\n }\r\n var autoCompleteUrl = allBindings.bindAutoCompleteServiceUrl;\r\n var autoCompleteAppendTo = allBindings.bindAutoCompleteAppendTo;\r\n\r\n var appendTo = null\r\n if (!!autoCompleteAppendTo && autoCompleteAppendTo != '') {\r\n appendTo = $(autoCompleteAppendTo);\r\n }\r\n\r\n var pattern, formattedResult, termArry;\r\n // Copied From jquery.autocomplete.js for custom formatting\r\n var\r\n utils = (function () {\r\n return {\r\n escapeRegExChars: function (value) {\r\n return value.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\r\n },\r\n createNode: function (containerClass) {\r\n var div = document.createElement('div');\r\n div.className = containerClass;\r\n div.style.position = 'absolute';\r\n div.style.display = 'none';\r\n return div;\r\n }\r\n };\r\n }()),\r\n\r\n keys = {\r\n ESC: 27,\r\n TAB: 9,\r\n RETURN: 13,\r\n LEFT: 37,\r\n UP: 38,\r\n RIGHT: 39,\r\n DOWN: 40\r\n };\r\n\r\n var ac = acInput.autocomplete({\r\n maxHeight: '100%',\r\n appendTo: appendTo,\r\n zIndex: 150,\r\n serviceUrl: autoCompleteUrl,\r\n noCache: true,\r\n minChars: 3,\r\n dataType: \"json\",\r\n contentType: \"application/json; charset=utf-8\",\r\n triggerSelectOnValidInput: false,\r\n params: { field: autoCompleteField, take: autoCompleteMaxResults, handbookId: root.HandbookId() },\r\n onSelect: function (value) {\r\n window.location.href = value.url;\r\n },\r\n transformResult: function (response, originalQuery) {\r\n var autoCompleteResultCount = 0;\r\n return {\r\n suggestions: $.map(response, function (dataItem) {\r\n if (autoCompleteResultCount < autoCompleteMaxResults) {\r\n autoCompleteResultCount++;\r\n return { url: dataItem.Url, value: dataItem.Name };\r\n }\r\n return [];\r\n })\r\n };\r\n },\r\n formatResult: function (suggestion, currentValue) {\r\n termArry = currentValue.replace(/\"/gi, '').replace(/”/gi, '').replace(/“/gi, '').split(' ');\r\n if (termArry.length > 0) {\r\n //sort terms longest to shortest for multiple search terms that may start with same letters (i.e. searching John J)\r\n termArry = termArry.sort(function (a, b) {\r\n return b.length - a.length;\r\n });\r\n formattedResult = suggestion.value;\r\n pattern = '';\r\n for (var i = 0; i < termArry.length; i++) {\r\n var keyTerm = termArry[i].trim().replace(/\"/gi, '');\r\n if (keyTerm.length > 0) {\r\n //Matching start of string or matching start of word including all characters or matching start of word surrounded in quotes\r\n //Ignores span tag and class if already replaced\r\n pattern = '((\\\\s' + utils.escapeRegExChars(keyTerm) + ')|(^' + utils.escapeRegExChars(keyTerm) + ')|(\\\\s\"' + utils.escapeRegExChars(keyTerm) + '))(?![^<>]*>)';\r\n formattedResult = formattedResult.replace(new RegExp(pattern, 'gi'), '$1<\\/span>');\r\n }\r\n }\r\n }\r\n\r\n return \"\" + formattedResult + \"\";\r\n },\r\n onSearchStart: function (params) {\r\n if (params.query.trim().length < 3) {\r\n return false;\r\n } else {\r\n params.query = params.query.trim()\r\n }\r\n }\r\n });\r\n }\r\n}"]}