{"version":3,"sources":["../../../../../Foundation/JavascriptCommon/code/scripts/common/urlUtils.js","../../../../../Foundation/JavascriptCommon/code/scripts/common/matomoHelper.js","LearningLibrarySearchResults/searchCount.js","../../../../../Foundation/JavascriptCommon/code/scripts/common/formUtils.js","LearningLibrarySearchResults/learningLibrarySearchResults.js","LearningLibrarySearchResults/main.js"],"names":["define","parseQueryParamsFromUrl","url","window","location","search","query","decomposeUrl","indexOf","substring","match","urlParams","decode","s","decodeURI","decodeURIComponent","exec","path","hash","putParamIntoUrl","paramName","paramValue","urlComp","encodeURIComponent","getParamFromUrl","pushParamIntoLink","domElement","$","attr","href","params","p","toLowerCase","newSearchString","param","newHref","history","pushState","replaceState","popParamFromLink","retVal","trackFormSubmit","formId","_paq","startsWith","push","document","getElementById","trackFormConversion","trackSearchResultsCount","searchParameters","searchCount","searchCategory","matomoHelper","displayCountResults","count","keyword","tagsInfo","fromPagination","generateSearchParamsForMatomo","title","length","html","data","replace","generateTagSpans","tags","tagSpans","i","tagInfo","TagGroupName","TagText","TagId","searchParams","forEach","t","join","tagSpanClick","element","id","hasClass","val","trigger","parent","remove","clearInvalidFeedback","removeClass","empty","displayInvalidFeedback","invalidFields","fieldMessage","field","FieldName","addClass","siblings","append","MessageText","collectFormData","disabledFields","find","prop","serializedData","serializeArray","formData","name","value","each","index","populateFormWithData","type","undefined","toString","disableFields","enableFields","initializeFloatingLabels","useToken","token","__RequestVerificationToken","urlUtils","formUtils","getSearchResults","topics","contentTypes","pageNumber","queryParams","setParametersOnResultsComponent","getSearchParams","setSearchParamsIntoUrl","setUrlWithoutPageLoading","firstLoad","refreshSearchCountComponent","Keyword","refreshFacetsCount","HandlePagingText","lastSearch","placeholdersDiv","clone","prepend","css","get","scrollIntoView","ajax","dataType","success","show","hide","error","jq","status","errorThrown","complete","text","resultFacets","facet","facetTextElement","Name","Count","getTagInfoObjects","queryParam","parameterValues","split","label","Tags","ContentTypes","pathname","PageNumber","htmlEncode","htmlDecode","isEmptyObject","contenttypes","mustHaveAnyTopicString","mustHaveAnyTopic","productSupportContentOnlyString","productSupportContentOnly","PageSize","Topics","NumberOfTilesPerRow","MustHaveAnyTopic","ProductSupportContentOnly","page","parseInt","goToPage","require","learningLibrarySearchResults"],"mappings":"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","file":"LearningLibrarySearchResults.js","sourcesContent":["define('common/urlUtils',[\r\n],\r\n function () {\r\n\r\n // Takes the url and parses the query string parameters out of it.\r\n // Returns the parameters and their string values as object { paramName1: value1, paramName2: value2, ...},\r\n // or an empty object in case there are no parameters in url.\r\n function parseQueryParamsFromUrl(url) {\r\n url = url ? url : window.location.search; // default url parameter if not set\r\n // take just the query search part of url (lose the leading question mark)\r\n var query = decomposeUrl(url).search;\r\n if (query.indexOf(\"?\") >= 0) query = query.substring(query.indexOf(\"?\") + 1);\r\n var urlParams = {},\r\n match,\r\n search = /([^&=]+)=?([^&]*)/g,\r\n decode = function (s) { return decodeURI(decodeURIComponent(s)); };\r\n\r\n while (match = search.exec(query))\r\n urlParams[decode(match[1])] = decode(match[2]);\r\n\r\n return urlParams;\r\n }\r\n\r\n // Takes the url, decomposes it into three components: path, search, hash,\r\n // and returns those three components in an object.\r\n // When searching for hash string which is directly after path (without search parameters) we're ignoring '#/'.\r\n // That is not a hash, that is Angular routing and it's actually part of the path.\r\n function decomposeUrl(url) {\r\n var path = '';\r\n var search = '';\r\n var hash = '';\r\n if (url.indexOf('?') >= 0) {\r\n // there is search string already in the url\r\n path = url.substring(0, url.indexOf('?'));\r\n search = url.substring(url.indexOf('?'));\r\n if (search.indexOf('#') >= 0) {\r\n // there is also a hash string in the url\r\n hash = search.substring(search.indexOf('#'));\r\n search = search.substring(0, search.indexOf('#'));\r\n }\r\n } else if (url.indexOf('#') >= 0 && url.indexOf('#') != url.indexOf('#/')) {\r\n // no search string, but there is hash string\r\n path = url.substring(0, url.indexOf('#'));\r\n hash = url.substring(url.indexOf('#'));\r\n } else {\r\n // no search string, no hash string\r\n path = url ? url : '';\r\n }\r\n return {\r\n path: path, // path also includes the protocol and hostname (if they existed in the given url)\r\n search: search,\r\n hash: hash\r\n }\r\n }\r\n\r\n // Adds a new query string parameter into the given url.\r\n // Returns the newly constructed url.\r\n function putParamIntoUrl(paramName, paramValue, url) {\r\n // first we'll split the url into 3 components\r\n var urlComp = decomposeUrl(url);\r\n // add the new query string parameter into search string\r\n urlComp.search = (urlComp.search ? urlComp.search + '&' : '?') + paramName + '=' + encodeURIComponent(paramValue);\r\n // return the new url\r\n return urlComp.path + urlComp.search + urlComp.hash;\r\n }\r\n\r\n // Reads the specified query string parameter from a given url.\r\n // Returns the value of that parameter (a string value). \r\n function getParamFromUrl(paramName, url) {\r\n return parseQueryParamsFromUrl(url)[paramName];\r\n }\r\n\r\n // Modifies the given DOM element's href property, or the current page's URL (if\r\n // no domElement has been given) by adding new query string parameter with the\r\n // given value. \r\n function pushParamIntoLink(paramName, paramValue, domElement) {\r\n var url;\r\n if (domElement) url = $(domElement).attr('href'); // url from DOM element\r\n else url = window.location.href; // current page url\r\n\r\n var params = parseQueryParamsFromUrl(url);\r\n\r\n // making sure that we find the parameter no matter how it's written (case insensitive)\r\n for (var p in params) {\r\n if (p.toLowerCase() === paramName.toLowerCase()) {\r\n paramName = p;\r\n break;\r\n }\r\n }\r\n\r\n params[paramName] = paramValue; // update (or add) the parameter\r\n var newSearchString = $.param(params); // and construct a new search string.\r\n\r\n var urlComp = decomposeUrl(url);\r\n if (domElement) {\r\n // set new href property on DOM element\r\n var newHref = urlComp.path + (newSearchString ? ('?' + newSearchString) : '') + urlComp.hash;\r\n $(domElement).attr('href', newHref);\r\n } else {\r\n if (history && history.pushState) { // because some older browsers (IE 9 or older) don't support this\r\n // for other pages put new URL to browser's address bar using window.history\r\n history.replaceState(\r\n null,\r\n null,\r\n urlComp.path +\r\n (newSearchString ? ('?' + newSearchString) : '') +\r\n urlComp.hash\r\n );\r\n }\r\n }\r\n }\r\n\r\n // Reads the query string parameter from the domElement's href property, or from\r\n // the current page's URL (if no domElement has been given). Removes the parameter\r\n // from the URL and puts new URL into the domElement's href property, or into the\r\n // browser's address bar.\r\n // Returns the value of that parameter (a string value).\r\n function popParamFromLink(paramName, domElement) {\r\n var url;\r\n if (domElement) url = $(domElement).attr('href'); // url from DOM element\r\n else url = window.location.href; // current page url\r\n\r\n var params = parseQueryParamsFromUrl(url);\r\n var retVal;\r\n\r\n // making sure that we find the parameter no matter how it's written (case insensitive)\r\n for (var p in params) {\r\n if (p.toLowerCase() === paramName.toLowerCase()) {\r\n paramName = p;\r\n break;\r\n }\r\n }\r\n\r\n if (params[paramName]) {\r\n // the requested parameter exists in the url\r\n retVal = params[paramName]; // Its value will be returned from the function.\r\n delete params[paramName]; // Remove the parameter from the array,\r\n var newSearchString = $.param(params); // and construct a new search string.\r\n var urlComp = decomposeUrl(url);\r\n if (domElement) {\r\n // set new href property on DOM element\r\n var newHref = urlComp.path + (newSearchString ? ('?' + newSearchString) : '') + urlComp.hash;\r\n $(domElement).attr('href', newHref);\r\n } else {\r\n if (history && history.pushState) { // because some older browsers (IE 9 or older) don't support this\r\n // for other pages put new URL to browser's address bar using window.history\r\n history.replaceState(\r\n null,\r\n null,\r\n urlComp.path +\r\n (newSearchString ? ('?' + newSearchString) : '') +\r\n urlComp.hash\r\n );\r\n }\r\n }\r\n }\r\n return retVal;\r\n }\r\n\r\n\r\n return {\r\n parseQueryParamsFromUrl: parseQueryParamsFromUrl,\r\n decomposeUrl: decomposeUrl,\r\n putParamIntoUrl: putParamIntoUrl,\r\n getParamFromUrl: getParamFromUrl,\r\n pushParamIntoLink: pushParamIntoLink,\r\n popParamFromLink: popParamFromLink\r\n }\r\n });\r\n\n","define('common/matomoHelper',[\r\n],\r\n function () {\r\n\r\n function trackFormSubmit(formId) {\r\n if (window._paq) {\r\n if (formId.startsWith(\"#\")) formId = formId.substring(1);\r\n _paq.push(['FormAnalytics::trackFormSubmit', document.getElementById(formId)]);\r\n }\r\n }\r\n\r\n function trackFormConversion(formId) {\r\n if (window._paq) {\r\n if (formId.startsWith(\"#\")) formId = formId.substring(1);\r\n _paq.push(['FormAnalytics::trackFormConversion', document.getElementById(formId)]);\r\n }\r\n }\r\n\r\n function trackSearchResultsCount(searchParameters, searchCount, searchCategory) {\r\n if (window._paq) {\r\n // documentation: https://developer.matomo.org/guides/tracking-javascript-guide#internal-search-tracking\r\n if (typeof searchCategory === \"undefined\" || searchCategory === null) searchCategory = false;\r\n _paq.push(['trackSiteSearch', searchParameters, searchCategory, searchCount]);\r\n }\r\n }\r\n\r\n return {\r\n trackFormSubmit: trackFormSubmit,\r\n trackFormConversion: trackFormConversion,\r\n trackSearchResultsCount: trackSearchResultsCount\r\n };\r\n });\r\n\n","define('LearningLibrarySearchResults/searchCount',[\r\n \"common/matomoHelper\"\r\n],\r\n function (matomoHelper) {\r\n \r\n function displayCountResults(count, keyword, tagsInfo, fromPagination) {\r\n if (fromPagination) return; // the search was done by changing the page of results, that doesn't change anything in search parameters and count\r\n\r\n matomoHelper.trackSearchResultsCount(generateSearchParamsForMatomo(keyword, tagsInfo), count, document.title);\r\n\r\n if (!$(\"#searchCount\").length) return; // search count component is not rendered on this page\r\n if (count)\r\n $(\"#searchCount\").html($(\"#searchCountComponent\").data(\"resultsCountText\").replace(\"{count}\", count));\r\n if (keyword)\r\n $(\"#searchKeywordTag\").html($(\"#searchCountComponent\").data(\"resultsKeywordText\").replace(\"{keywords}\", generateTagSpans(keyword, null)));\r\n else\r\n $(\"#searchKeywordTag\").html(\"\"); \r\n if (tagsInfo && tagsInfo.length > 0)\r\n $(\"#searchTags\").html($(\"#searchCountComponent\").data(\"resultsTagsText\").replace(\"{tags}\", generateTagSpans(null, tagsInfo)));\r\n else\r\n $(\"#searchTags\").html(\"\");\r\n }\r\n\r\n tagSpanClick = function (element) { \r\n var id = $(element).data(\"value\"); \r\n if ($(element).hasClass(\"remove-keyboard-span\")) {\r\n $(\"#searchkeywordstxt\").val(\"\");\r\n $(\"#searchkeywordicon\").trigger(\"click\"); \r\n }\r\n else if ($(element).hasClass(\"remove-tag-span\")) { \r\n $(\"#\" + id).trigger(\"click\"); \r\n } \r\n\r\n $(element).parent().remove();\r\n }\r\n\r\n function generateTagSpans(keyword, tags) { \r\n var tagSpans = \"\";\r\n if (keyword) {\r\n tagSpans = '' + keyword + '';\r\n }\r\n if (tags) {\r\n for (var i = 0; i < tags.length; i++) {\r\n var tagInfo = tags[i];\r\n tagSpans += '' + tagInfo.TagGroupName + ': ' + tagInfo.TagText + '';\r\n }\r\n }\r\n\r\n return tagSpans;\r\n }\r\n\r\n function generateSearchParamsForMatomo(keyword, tags) {\r\n var searchParams = [];\r\n if (keyword) searchParams.push(keyword);\r\n tags.forEach(function (t) {\r\n searchParams.push(t.TagGroupName + \"=\" + t.TagText);\r\n });\r\n return searchParams.join(\";\");\r\n }\r\n\r\n return {\r\n displayCountResults: displayCountResults\r\n };\r\n});\r\n\n","define('common/formUtils',[\r\n],\r\n function () {\r\n\r\n // Clears and deactivates all invalid feedback text on form fields\r\n function clearInvalidFeedback(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" .is-invalid\").removeClass(\"is-invalid\");\r\n $(formId + \" .invalid-feedback\").empty();\r\n }\r\n\r\n // Fills in and activates invalid feedback text on form fields\r\n function displayInvalidFeedback(invalidFields, formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n if (invalidFields) {\r\n invalidFields.forEach(function (fieldMessage) {\r\n var field = $(formId + \" [name='\" + fieldMessage.FieldName + \"']\");\r\n field.addClass(\"is-invalid\");\r\n field.siblings(\".invalid-feedback\").append(fieldMessage.MessageText);\r\n });\r\n }\r\n }\r\n\r\n // Collects the data from all form fields and returns them as object,\r\n // using \"name\" attribute values from form fields as object property names.\r\n function collectFormData(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n // the serializeArray() jQuery method doesn't take the values from disabled fields, so first I'll\r\n // temporarily enable all disabled fields, and then disable them again\r\n var disabledFields = $(formId).find(\":input:disabled\").prop(\"disabled\", false);\r\n var serializedData = $(formId).serializeArray();\r\n disabledFields.prop(\"disabled\", true);\r\n var formData = {};\r\n serializedData.forEach(function (data) {\r\n formData[data.name] = data.value;\r\n });\r\n // serializeArray does not return anything for unchecked checkboxes, so we'll add them now with value false\r\n $(formId + \" input[type='checkbox']:not(:checked)\").each(function (index, element) {\r\n formData[element.name] = false;\r\n });\r\n // serializeArray returns \"on\" for checked checkboxes, so we'll set them to true now\r\n $(formId + \" input[type='checkbox']:checked\").each(function (index, element) {\r\n formData[element.name] = true;\r\n });\r\n return formData;\r\n }\r\n\r\n // Goes through all input elements on the form and fills them with data from the\r\n // given object, matching \"name\" attribute of the input element with object property name.\r\n function populateFormWithData(formId, data) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").each(function (index, element) { \r\n if (element.type === \"radio\" ||\r\n element.type === \"checkbox\")\r\n {\r\n if (data[element.name] !== undefined)\r\n $(element).prop(\"checked\", $(element).val().toString() === data[element.name].toString());\r\n }\r\n else if (element.type === \"text\" ||\r\n element.type === \"email\" ||\r\n element.type === \"tel\" ||\r\n element.type === \"password\" ||\r\n element.type === \"textarea\" ||\r\n element.type === \"select-one\")\r\n {\r\n if (data[element.name] !== undefined)\r\n $(element).val(data[element.name]);\r\n else\r\n $(element).val(null);\r\n }\r\n });\r\n }\r\n\r\n function disableFields(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").prop(\"disabled\", true);\r\n }\r\n\r\n function enableFields(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" :input\").prop(\"disabled\", false);\r\n }\r\n\r\n function initializeFloatingLabels(formId) {\r\n if (!formId.startsWith(\"#\")) formId = \"#\" + formId;\r\n $(formId + \" .floating-label-container\").each(function (index, element) {\r\n var inputElement = $(element).find(\":input\")[0];\r\n if (inputElement.value) $(element).addClass(\"active\");\r\n else $(element).removeClass(\"active\");\r\n });\r\n }\r\n\r\n //adds the form token to the object for use with [ValidateAntiforgeryToken] attribute\r\n function useToken(data) { \r\n var token = $('input[name=\"__RequestVerificationToken\"]').val();\r\n data.__RequestVerificationToken = token;\r\n }\r\n\r\n return {\r\n clearInvalidFeedback: clearInvalidFeedback,\r\n displayInvalidFeedback: displayInvalidFeedback,\r\n collectFormData: collectFormData,\r\n populateFormWithData: populateFormWithData,\r\n disableFields: disableFields,\r\n enableFields: enableFields,\r\n initializeFloatingLabels: initializeFloatingLabels,\r\n useToken: useToken\r\n };\r\n });\r\n\n","define('LearningLibrarySearchResults/learningLibrarySearchResults',[\r\n \"common/urlUtils\", \r\n \"LearningLibrarySearchResults/searchCount\",\r\n \"common/formUtils\"\r\n],\r\n function (urlUtils, searchCount, formUtils) {\r\n\r\n var lastSearch;\r\n var firstLoad = true;\r\n\r\n function getSearchResults(keyword, topics, tags, contentTypes, pageNumber, tagsInfo, fromPagination) { \r\n var queryParams = urlUtils.parseQueryParamsFromUrl();\r\n setParametersOnResultsComponent(queryParams, keyword, topics, tags, contentTypes);\r\n var searchParams = getSearchParams(queryParams, pageNumber); \r\n var setSearchParamsIntoUrl = $(\"#search-results-container\").data(\"putSearchParametersIntoUrl\");\r\n setUrlWithoutPageLoading(searchParams, queryParams, setSearchParamsIntoUrl);\r\n if (firstLoad) {\r\n firstLoad = false;\r\n refreshSearchCountComponent(searchParams.Keyword, tagsInfo, searchParams, fromPagination);\r\n refreshFacetsCount();\r\n HandlePagingText();\r\n return;\r\n }\r\n \r\n lastSearch = searchParams; \r\n var placeholdersDiv = $(\".placeholders\").clone(); \r\n $(\"#search-results\").find('div:not(\".search-paging\")').remove();\r\n $(\"#search-results\").prepend(placeholdersDiv); \r\n $(\"#search-results .placeholders\").css(\"display\", \"\"); \r\n if (fromPagination)\r\n $(\"#content\").get(0).scrollIntoView(); // if we got here by clicking on one of the pagination links then we need to scroll back to top\r\n formUtils.useToken(searchParams);\r\n \r\n $.ajax({\r\n type: \"POST\",\r\n url: \"/customapi/LearningLibrary/LearningLibraryAjaxSearchResults\",\r\n dataType: \"text\",\r\n data: searchParams,\r\n success: function (data) { \r\n if (lastSearch !== searchParams) {\r\n return;\r\n } \r\n $(\"#search-results\").html(data); \r\n refreshSearchCountComponent(searchParams.Keyword, tagsInfo, searchParams, fromPagination);\r\n refreshFacetsCount();\r\n //if (fromPagination)\r\n // $(\"#content\").get(0).scrollIntoView(); \r\n var hasResults = $(\"#hdnSearchHasResults\").val();\r\n if (hasResults == \"False\")\r\n $(\".no-results\").show();\r\n else\r\n $(\".no-results\").hide();\r\n HandlePagingText();\r\n },\r\n error: function (jq, status, errorThrown) {\r\n if (lastSearch !== searchParams) {\r\n return;\r\n }\r\n },\r\n complete: function () { \r\n if (lastSearch !== searchParams) {\r\n return;\r\n }\r\n $(\"#search-results .placeholders\").hide(); \r\n }\r\n });\r\n }\r\n\r\n function refreshFacetsCount() { \r\n $('span[id^=\"span_\"]').each(function (index, element) { \r\n $(element).text(\"\"); \r\n }); \r\n\r\n if (resultFacets) {\r\n for (var i = 0; i < resultFacets.length; i++) {\r\n var facet = resultFacets[i];\r\n var facetTextElement = $(\"#span_\" + facet.Name); \r\n if (facetTextElement.length) {\r\n if (facet.Count != 0)\r\n facetTextElement.text(\" (\" + facet.Count + \")\");\r\n else\r\n facetTextElement.text(\"\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n function getTagInfoObjects(queryParam, tagsInfo) {\r\n if (queryParam) {\r\n const urlParamSeparator = \"|\";\r\n var parameterValues = queryParam.split(urlParamSeparator); \r\n for (var i = 0; i < parameterValues.length; i++) {\r\n $(\"#\" + parameterValues[i]).prop(\"checked\", true); \r\n var spantextElement = $(\"#spantext_\" + parameterValues[i]);\r\n if (spantextElement.length) {\r\n var label = $(\"#spantext_\" + parameterValues[i]).text();\r\n tagsInfo.push({ \"TagId\": $(\"#\" + parameterValues[i]).val(), \"TagGroupName\": $(\"#\" + parameterValues[i]).attr(\"title\"), \"TagText\": label });\r\n }\r\n }\r\n }\r\n }\r\n\r\n function refreshSearchCountComponent(keyword, tagsInfo, searchParams, fromPagination) { \r\n if (tagsInfo == null || tagsInfo == undefined) {\r\n tagsInfo = [];\r\n if (searchParams.Tags)\r\n getTagInfoObjects(searchParams.Tags, tagsInfo);\r\n if (searchParams.ContentTypes)\r\n getTagInfoObjects(searchParams.ContentTypes, tagsInfo); \r\n }\r\n searchCount.displayCountResults($(\"#hdnTotalResults\").val(), keyword, tagsInfo, fromPagination);\r\n }\r\n\r\n function setUrlWithoutPageLoading(searchParams, queryParams, setSearchParamsIntoUrl) { \r\n var url = window.location.pathname;\r\n if (setSearchParamsIntoUrl == \"True\") {\r\n if (searchParams.Keyword)\r\n url = urlUtils.putParamIntoUrl(\"keyword\", searchParams.Keyword, url);\r\n //to remove topics from url comment this\r\n //if (searchParams.Topics)\r\n // url = urlUtils.putParamIntoUrl(\"topics\", searchParams.Topics, url); \r\n if (searchParams.Tags)\r\n url = urlUtils.putParamIntoUrl(\"tags\", searchParams.Tags, url);\r\n if (searchParams.ContentTypes) { \r\n if (searchParams.ContentTypes != $(\"#search-results-container\").data(\"predefinedContentTypes\"))\r\n url = urlUtils.putParamIntoUrl(\"contenttypes\", searchParams.ContentTypes, url); \r\n }\r\n }\r\n\r\n if (searchParams.PageNumber) \r\n url = urlUtils.putParamIntoUrl(\"page\", (searchParams.PageNumber + 1).toString(), url);\r\n \r\n history.replaceState(\"\", document.title, url);\r\n }\r\n\r\n function HandlePagingText() {\r\n $(\"#paging-first\").text($(\"#search-results-container\").data(\"pagingFirst\"));\r\n $(\"#paging-previous\").text($(\"#search-results-container\").data(\"pagingPrevious\"));\r\n $(\"#paging-next\").text($(\"#search-results-container\").data(\"pagingNext\"));\r\n $(\"#paging-last\").text($(\"#search-results-container\").data(\"pagingLast\"));\r\n }\r\n\r\n function htmlEncode(value) {\r\n //create a in-memory div, set it's inner text(which jQuery automatically encodes)\r\n //then grab the encoded contents back out. The div never exists on the page.\r\n return $('
').text(value).html();\r\n }\r\n\r\n function htmlDecode(value) {\r\n return $('
').html(value).text();\r\n }\r\n\r\n function setParametersOnResultsComponent(queryParams, keyword, topics, tags, contentTypes) { \r\n if (queryParams) {\r\n if (!$.isEmptyObject(queryParams)) {\r\n if (queryParams.keyword)\r\n $(\"#search-results-container\").data(\"keyword\", htmlEncode(queryParams.keyword)); \r\n if (queryParams.topics)\r\n $(\"#search-results-container\").data(\"topics\", queryParams.topics);\r\n if (queryParams.tags)\r\n $(\"#search-results-container\").data(\"tags\", queryParams.tags);\r\n if (queryParams.contenttypes)\r\n $(\"#search-results-container\").data(\"contentTypes\", queryParams.contenttypes);\r\n }\r\n }\r\n \r\n if (keyword != null)\r\n $(\"#search-results-container\").data(\"keyword\", htmlEncode(keyword));\r\n if (topics != null)\r\n $(\"#search-results-container\").data(\"topics\", topics);\r\n if (tags != null)\r\n $(\"#search-results-container\").data(\"tags\", tags);\r\n if (contentTypes != null)\r\n $(\"#search-results-container\").data(\"contentTypes\", contentTypes);\r\n }\r\n\r\n function getSearchParams(queryParams, pageNumber) { \r\n var mustHaveAnyTopicString = $(\"#search-results-container\").data(\"mustHaveAnyTopic\");\r\n var mustHaveAnyTopic = false;\r\n if (mustHaveAnyTopicString && mustHaveAnyTopicString == \"True\")\r\n mustHaveAnyTopic = true;\r\n\r\n var productSupportContentOnlyString = $(\"#search-results-container\").data(\"productSupportContentOnly\");\r\n var productSupportContentOnly = false;\r\n if (productSupportContentOnlyString && productSupportContentOnlyString == \"True\")\r\n productSupportContentOnly = true;\r\n\r\n var searchParams = {\r\n \"Keyword\": htmlDecode($(\"#search-results-container\").data(\"keyword\")),\r\n \"PageSize\": $(\"#search-results-container\").data(\"pageSize\"),\r\n \"Topics\": $(\"#search-results-container\").data(\"topics\"),\r\n \"Tags\": $(\"#search-results-container\").data(\"tags\"),\r\n \"ContentTypes\": $(\"#search-results-container\").data(\"contentTypes\"),\r\n \"NumberOfTilesPerRow\": $(\"#search-results-container\").data(\"numberOfTilesInRow\"),\r\n \"MustHaveAnyTopic\": mustHaveAnyTopic,\r\n \"ProductSupportContentOnly\": productSupportContentOnly\r\n };\r\n\r\n if (queryParams.page)\r\n searchParams.PageNumber = parseInt(queryParams.page) -1;\r\n if (pageNumber != null && pageNumber != undefined)\r\n searchParams.PageNumber = pageNumber; \r\n if (!searchParams.ContentTypes)\r\n searchParams.ContentTypes = $(\"#search-results-container\").data(\"predefinedContentTypes\");\r\n\r\n return searchParams;\r\n }\r\n\r\n goToPage = function (pageNumber) {\r\n getSearchResults(null, null, null, null, pageNumber, null, true);\r\n }\r\n\r\n return {\r\n getSearchResults: getSearchResults\r\n };\r\n});\r\n\n","require([\r\n \"LearningLibrarySearchResults/learningLibrarySearchResults\"\r\n],\r\n function (learningLibrarySearchResults) { \r\n learningLibrarySearchResults.getSearchResults();\r\n});\r\n\ndefine(\"LearningLibrarySearchResults/main\", function(){});\n\n"]}