1 2// default timeout 3var nopAccelerateAjaxTimeout = 300000; 4 5$(document).ready(function () { 6 7 // do not change 8 var specificationClassName = "sSpecs"; 9 var searchClassName = "sSearch"; 10 var priceClassName = "sPrice"; 11 var categoryClassName = "sCategory"; 12 var manufacturerClassName = "sManufacturer"; 13 var promotionClassName ="sPromotion" 14 15 $('#apply-filters-button').on('click', 16 function (e) { 17 if (e.handled !== true) { 18 npAccFiltersPushStateUrl(currURL); 19 callAjax(currURL, nopAccelerateAjaxTimeout, undefined, false); 20 e.handled = true; 21 } 22 }); 23 24 // check for previous definition 25 if (typeof String.prototype.endsWith !== 'function') { 26 // ReSharper disable once NativeTypePrototypeExtending 27 String.prototype.endsWith = function (suffix) { 28 return this.indexOf(suffix, this.length - suffix.length) !== -1; 29 }; 30 } 31 32 function cleanUpUrl(url) { 33 url = removeAllEmptyFilterQueryParameters(url); 34 35 //removing trailing '?' from url if any 36 if (url.endsWith('?')) { 37 url = url.slice(0, -1); 38 } 39 40 return url; 41 } 42 43 function removeAllEmptyFilterQueryParameters(url) { 44 // query parameter names are class names without 's' prefix and toLowerCase 45 var getParamName = function (className) { 46 return className.substring(1).toLowerCase(); 47 } 48 49 url = getNumberOfActiveFiltersByFilterClass(specificationClassName) === 0 ? tryRemoveQueryParameterNameFromUrl(url, getParamName(specificationClassName)) : url; 50 url = getNumberOfActiveFiltersByFilterClass(priceClassName) === 0 ? tryRemoveQueryParameterNameFromUrl(url, getParamName(priceClassName)) : url; 51 url = getNumberOfActiveFiltersByFilterClass(searchClassName) === 0 ? tryRemoveQueryParameterNameFromUrl(url, getParamName(searchClassName)) : url; 52 url = getNumberOfActiveFiltersByFilterClass(categoryClassName) === 0 ? tryRemoveQueryParameterNameFromUrl(url, getParamName(categoryClassName)) : url; 53 url = getNumberOfActiveFiltersByFilterClass(manufacturerClassName) === 0 ? tryRemoveQueryParameterNameFromUrl(url, getParamName(manufacturerClassName)) : url; 54 url = getNumberOfActiveFiltersByFilterClass(promotionClassName) === 0 ? tryRemoveQueryParameterNameFromUrl(url, getParamName(promotionClassName)) : url; 55 56 57 return url; 58 } 59 60 function getNumberOfActiveFilters() { 61 var filterTags = $('div#active-filter-box-list a'); 62 return ('length' in filterTags) ? filterTags.length : 0; 63 } 64 65 function tryRemoveQueryParameterNameFromUrl(currentUrl, queryParameterName) { 66 if (currentUrl.indexOf(queryParameterName + '=') >= 0) { 67 currentUrl = removeParameter(currentUrl, queryParameterName); 68 currentUrl = currentUrl.replace(/&/g, ''); 69 } 70 return currentUrl; 71 } 72 73 function getNumberOfActiveFiltersByFilterClass(filterClass) { 74 var filters = $('div#active-filter-box-list a.' + filterClass); 75 return ('length' in filters) ? filters.length : 0; 76 } 77 78 function removeFilterPairFromUrl(url, filterPair) { 79 url = url.replace("#", encodeURIComponent("#")).replace("||" + filterPair, "").replace(filterPair, ""); 80 return url; 81 } 82 83 function removeAllFilters() { 84 $('#active-filter-box-list a').each(function () { 85 var filterPair = $(this).closest('a').find('input.filterPair').val(); 86 87 //remove querystring of selected filter 88 currURL = removeFilterPairFromUrl(currURL, filterPair); 89 90 //remove filter tag visually 91 $(this).closest('a').remove(); 92 93 currURL = cleanUpUrl(currURL); 94 95 }); 96 } 97 98 var currURL = window.location.href; 99 100 $(document).ready(function () { 101 102 //construt active filter box if there are query params in the URL, this includes non filter query params like pageNumber 103 var hasQueryParameters = currURL.split('?')[1]; 104 if (hasQueryParameters) { 105 prepareSpecificationFilterTags(currURL); 106 } 107 // cannot use hasQueryParameters since we are only interested in filters, not pageNumber etc 108 $('div#active-filter-box').toggleClass('collapse', getNumberOfActiveFilters() === 0); 109 110 });
111 112 $('#clear-all-filters, .clear-all-filters').on('click', 113 function (e) { 114 if (e.handled !== true) { 115 removeAllFilters(); 116 npAccFiltersPushStateUrl(currURL); 117 callAjax(currURL, nopAccelerateAjaxTimeout, undefined, false); 118 e.stopPropagation(); 119 e.handled = true; 120 } 121 }); 122 123 $('#active-filter-box-list').on('click', 'a', 124 function (e) { 125 if (e.handled !== true) //this will prevent event triggering more then once 126 { 127 var filterPair = $(this).closest('a').find('input.filterPair').val(); 128 129 //remove querystring of selected filter 130 currURL = removeFilterPairFromUrl(currURL, filterPair); 131 132 //remove filter tag visually 133 $(this).closest('a').remove(); 134 135 currURL = cleanUpUrl(currURL); 136 137 npAccFiltersPushStateUrl(currURL); 138 callAjax(currURL, nopAccelerateAjaxTimeout); 139 e.handled = true; 140 } 141 }); 142 143});
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.