{ "version": 3, "sources": [ "../../../../../Foundation/JavascriptCommon/code/scripts/common/urlUtils.js", "LearningLibrarySearchResults/searchCount.js", "../../../../../Foundation/JavascriptCommon/code/scripts/common/formUtils.js", "LearningLibrarySearchResults/learningLibrarySearchResults.js", "../../../../../Foundation/JavascriptCommon/code/scripts/common/accordion.js", "SearchFilters/searchFilters.js", "SearchFilters/main.js" ], "names": [], "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC1KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AChEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,ACrHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AClOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,AC5EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA", "file": "SearchFilters.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('LearningLibrarySearchResults/searchCount',[ \r\n],\r\n function () {\r\n \r\n function displayCountResults(count, keyword, tagsInfo) { \r\n if (!$(\"#searchCount\").length) return;\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 var tags = tagsInfo.filter((x) => x.TagGroupName != \"Products\"); \r\n displayFilterCondition(tags, \"#searchTags\", \"resultsTagsText\", \"{tags}\");\r\n var products = tagsInfo.filter((x) => x.TagGroupName == \"Products\"); \r\n displayFilterCondition(products, \"#searchProducts\", \"resultsByProductsText\", \"{products}\");\r\n }\r\n else {\r\n $(\"#searchTags\").html(\"\");\r\n $(\"#searchProducts\").html(\"\");\r\n }\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 displayFilterCondition(tags, id, dataAttrFieldname, token) {\r\n if (tags && tags.length > 0)\r\n $(id).html($(\"#searchCountComponent\").data(dataAttrFieldname).replace(token, generateTagSpans(null, tags)));\r\n else\r\n $(id).html(\"\");\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 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 function setFocus(selector, delay) {\r\n // sometimes focus has to be set with a delay, so that some other processes have time to finish before that (e.g. initializing floating labels)\r\n if (delay) setTimeout(() => { $(selector).focus(); }, delay);\r\n else $(selector).focus();\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 setFocus: setFocus,\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, products, pageNumber, tagsInfo, scrollToTop) { \r\n var queryParams = urlUtils.parseQueryParamsFromUrl();\r\n setParametersOnResultsComponent(queryParams, keyword, topics, tags, contentTypes, products);\r\n var searchParams = getSearchParams(queryParams, pageNumber); \r\n var setSearchParamsIntoUrl = $(\"#search-results-container\").data(\"putSearchParametersIntoUrl\");\r\n setUrlWithoutPageLoading(searchParams, setSearchParamsIntoUrl);\r\n if (firstLoad) {\r\n firstLoad = false;\r\n refreshSearchCountComponent(searchParams.Keyword, tagsInfo, searchParams);\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 (scrollToTop)\r\n $(\"#content\").get(0).scrollIntoView(); \r\n formUtils.useToken(searchParams); \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);\r\n refreshFacetsCount();\r\n //if (scrollToTop)\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) { \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 if (searchParams.Products)\r\n getTagInfoObjects(searchParams.Products, tagsInfo); \r\n }\r\n searchCount.displayCountResults($(\"#hdnTotalResults\").val(), keyword, tagsInfo);\r\n }\r\n\r\n function setUrlWithoutPageLoading(searchParams, 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.Products)\r\n url = urlUtils.putParamIntoUrl(\"products\", searchParams.Products, 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, products) { \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 if (queryParams.products)\r\n $(\"#search-results-container\").data(\"products\", queryParams.products);\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 if (products != null)\r\n $(\"#search-results-container\").data(\"products\", products);\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 \"Products\": $(\"#search-results-container\").data(\"products\"),\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 \"AuthorId\": $(\"#search-results-container\").data(\"authorId\")\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, null, pageNumber, null, true);\r\n }\r\n\r\n return {\r\n getSearchResults: getSearchResults\r\n };\r\n});\r\n\n", "define('common/accordion',[\r\n],\r\n function () {\r\n\r\n function init(selector) {\r\n $(selector + \" .custom-accordion-title,\" + selector + \" .custom-accordion-icon\").off(\"click\").on(\"click\", accordionClick);\r\n // auto expand custom-accordion-item if needed\r\n $(selector + \" .custom-accordion,\" + selector + \".custom-accordion\").each(function (index, element) {\r\n var expandItemId = $(element).data(\"expandItemId\");\r\n if (expandItemId) expandAccordionItem(selector, expandItemId);\r\n });\r\n }\r\n\r\n function accordionClick(event, clickedElement) {\r\n if (!clickedElement) clickedElement = this;\r\n // toggle accordion opened/closed\r\n $(clickedElement).toggleClass(\"open\");\r\n $(clickedElement).siblings(\".custom-accordion-content\").toggleClass(\"open\");\r\n $(clickedElement).siblings(\".custom-accordion-title\").toggleClass(\"open\");\r\n // dispatch appropriate event for other modules to use\r\n if ($(clickedElement).hasClass(\"open\")) dispatchEvent(clickedElement, \"accordionOpened\");\r\n else dispatchEvent(clickedElement, \"accordionClosed\");\r\n }\r\n\r\n function expandAccordionItem(selector, id) {\r\n var clickedElement = selector + \" .custom-accordion-item[data-item-id='\" + id + \"']\" + \" .custom-accordion-title\";\r\n if ($(clickedElement).length) {\r\n accordionClick(null, clickedElement);\r\n // scroll the accordion item into view if needed\r\n var pageTop = $(window).scrollTop();\r\n var pageBottom = pageTop + $(window).height();\r\n var elementTop = $(clickedElement).offset().top;\r\n var elementBottom = elementTop + $(clickedElement).height();\r\n if (elementTop < pageTop || elementBottom > pageBottom) {\r\n $(\"html,body\").animate({ scrollTop: $(clickedElement).offset().top - 80 });\r\n }\r\n }\r\n }\r\n\r\n function dispatchEvent(clickedElement, eventName) {\r\n var accordionItemElement = $(clickedElement).closest(\".custom-accordion-item\");\r\n var eventData = $(accordionItemElement).data(\"itemId\");\r\n var event;\r\n var trueTypeOf = function (obj) {\r\n return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();\r\n };\r\n if (trueTypeOf(window.CustomEvent) === 'function') {\r\n event = new CustomEvent(eventName, { bubbles: true, detail: eventData });\r\n } else {\r\n event = document.createEvent('CustomEvent');\r\n event.initCustomEvent(eventName, true, false, eventData);\r\n }\r\n $(accordionItemElement)[0].dispatchEvent(event);\r\n }\r\n\r\n return {\r\n init : init\r\n };\r\n });\r\n\n", "define('SearchFilters/searchFilters',[\r\n \"LearningLibrarySearchResults/learningLibrarySearchResults\",\r\n \"common/accordion\",\r\n \"common/urlUtils\" \r\n],\r\n function (learningLibrarySearchResults, accordion, urlUtils) { \r\n const urlParamSeparator = \"|\";\r\n const CHECKBOX_TYPE_TAG = \"0\";\r\n const CHECKBOX_TYPE_CONTENT_TYPE = \"1\";\r\n const CHECKBOX_TYPE_PRODUCT = \"2\";\r\n const CONTENT_TYPES_QUERY_STRING_KEY = \"contenttypes\";\r\n const PRODUCTS_QUERY_STRING_KEY = \"products\";\r\n\r\n function init() { \r\n setSelectedCheckboxesFromQueryString(\"tags\");\r\n setSelectedCheckboxesFromQueryString(CONTENT_TYPES_QUERY_STRING_KEY);\r\n setSelectedCheckboxesFromQueryString(PRODUCTS_QUERY_STRING_KEY);\r\n $(\".facet-checkbox\").off(\"click\").on(\"click\", executeSearch);\r\n $(\".facet-clear\").off(\"click\").on(\"click\", clearFacet);\r\n accordion.init(\".search-filters\");\r\n }\r\n\r\n function setSelectedCheckboxesFromQueryString(queryParam) {\r\n var selectedTagsQueryStringParam = urlUtils.getParamFromUrl(queryParam, window.location.href);\r\n if (selectedTagsQueryStringParam) { \r\n var tags = selectedTagsQueryStringParam.split(urlParamSeparator); \r\n for (var i = 0; i < tags.length; i++) {\r\n $(\"#\" + tags[i]).prop(\"checked\", true); \r\n } \r\n }\r\n }\r\n\r\n function clearFacet() {\r\n $(this).closest(\".facet\").find(\".facet-checkbox\").prop(\"checked\", false);\r\n executeSearch();\r\n }\r\n\r\n function executeSearch() { \r\n var checkedTags = \"\";\r\n var checkedContentTypes = \"\";\r\n var checkedProducts = \"\";\r\n var tagsInfo = [];\r\n $(\".facet-checkbox:checkbox:checked\").each(function () {\r\n var checkboxType = $(this).data(\"checkboxType\");\r\n if (checkboxType == CHECKBOX_TYPE_TAG)\r\n checkedTags += $(this).val() + urlParamSeparator;\r\n if (checkboxType == CHECKBOX_TYPE_CONTENT_TYPE)\r\n checkedContentTypes += $(this).val() + urlParamSeparator;\r\n if (checkboxType == CHECKBOX_TYPE_PRODUCT)\r\n checkedProducts += $(this).val() + urlParamSeparator;\r\n var label = $(\"#spantext_\" + $(this).attr('id')).text();\r\n tagsInfo.push({ \"TagId\": $(this).val(), \"TagGroupName\": $(this).attr(\"title\"), \"TagText\": label });\r\n });\r\n\r\n //if there are no category facets on page, set content types from query string if we have contenttype parameter\r\n if (!$(\".content-type-container\").length) {\r\n var contentTypesFromQueryParam = urlUtils.getParamFromUrl(CONTENT_TYPES_QUERY_STRING_KEY, window.location.href);\r\n if (contentTypesFromQueryParam)\r\n checkedContentTypes = contentTypesFromQueryParam;\r\n }\r\n\r\n if (checkedTags.endsWith(urlParamSeparator))\r\n checkedTags = checkedTags.slice(0, -1);\r\n if (checkedContentTypes.endsWith(urlParamSeparator))\r\n checkedContentTypes = checkedContentTypes.slice(0, -1);\r\n if (checkedProducts.endsWith(urlParamSeparator))\r\n checkedProducts = checkedProducts.slice(0, -1);\r\n\r\n learningLibrarySearchResults.getSearchResults(null, null, checkedTags, checkedContentTypes, checkedProducts, 0, tagsInfo);\r\n }\r\n \r\n return {\r\n init : init \r\n }; \r\n});\r\n\n", "require([\r\n \"SearchFilters/searchFilters\"\r\n],\r\n function (searchFilters) { \r\n searchFilters.init();\r\n });\r\n\ndefine(\"SearchFilters/main\", function(){});\n\n" ] }