PageSourceSearch

https://www.pkz.ch/Plugins/XcellenceIT.Plugin.Solr.Products/Scripts/nopAccelerate.Filters.js

js pkz.ch collected 2026-10-01 15:31:44 UTC 5,605 bytes, 143 lines download raw bytes

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(/&amp/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.