{"version":3,"file":"ProductFilters2.min.js","sources":["ProductFilters2.js"],"sourcesContent":["(function (w, $, _) {\r\n 'use strict';\r\n\r\n const assetId = '~/Parts/Views/Product/ProductFilters/ProductFilters2.min.js';\r\n\r\n if (!w.umwAssets || !w.umwAssets[assetId]) {\r\n console.error('No context found for ' + assetId);\r\n return;\r\n }\r\n\r\n for (var ctx of w.umwAssets[assetId]) {\r\n\r\n var controlId = ctx.controlId;\r\n var productListControlId = ctx.productListControlId;\r\n var productListPageControlID = ctx.productListPageControlID;\r\n var filtersTemplateContent = ctx.filtersTemplateContent;\r\n var labels = ctx.labels;\r\n var currencyCode = ctx.currencyCode;\r\n var enableImmediateFiltering = ctx.enableImmediateFiltering;\r\n var rememberChoiceFor = ctx.rememberChoiceFor;\r\n var slideFilteringFor = ctx.slideFilteringFor;\r\n var enableFiltersURLSupport = ctx.enableFiltersURLSupport;\r\n var showOnlyInStock = ctx.showOnlyInStock;\r\n\r\n var handlerUrl = w.R + 'Handlers/Public/ProductData.ashx';\r\n\r\n var pubSub = w.PubSub;\r\n var filtersChannelPrefix = 'frontend.productlist.filters.' + (productListPageControlID || productListControlId);\r\n var staticfilterChannelPrefix = 'frontend.productlist.staticfilter.' + (productListPageControlID || productListControlId);\r\n var listReadyChannelPrefix = 'frontend.productlist.ready.' + (productListPageControlID || productListControlId);\r\n var precompiledTemplate;\r\n\r\n var $filters, excludedItemsMap = {}, allItems, appliedFilters = {};\r\n var $mainPanel, $filtersContainer, $buttonsContainer, $resetButton, $closeButton, $cbxShowOnlyInStock, $sortSelector;\r\n\r\n var savedFiltersLocalStorageKey = controlId + '_saved_filters';\r\n\r\n var classes = {\r\n noFiltersAvailable: 'NoFiltersAvailable',\r\n template: 'js-uc' + controlId + '-template',\r\n filtersContainer: 'js-uc' + controlId + '-filters-container',\r\n buttonsContainer: 'js-uc' + controlId + '-buttons-container',\r\n filter: 'js-uc' + controlId + '-filter',\r\n checkboxFilter: 'js-uc' + controlId + '-checkbox-filter',\r\n sliderFilter: 'js-uc' + controlId + '-slider-filter',\r\n sliderContainer: 'js-uc' + controlId + '-slider-container',\r\n minValue: 'js-uc' + controlId + '-min-value',\r\n maxValue: 'js-uc' + controlId + '-max-value',\r\n itemsCount: 'js-uc' + controlId + '-items-count',\r\n resetBtn: 'js-uc' + controlId + '-reset-btn',\r\n closeBtn: 'js-uc' + controlId + '-close-btn',\r\n showOnlyInStock: 'js-uc' + controlId + '-show-only-in-stock',\r\n sortSelector: 'js-uc' + controlId + '-sort-selector',\r\n totalCount: 'js-uc' + controlId + '-total-count',\r\n };\r\n\r\n var domReady = false;\r\n var filtersData = null;\r\n var preAppliedFilterState = null;\r\n\r\n function onApplyButtonClick() {\r\n applyFilters();\r\n }\r\n\r\n function onResetButtonClick(evt) {\r\n evt.preventDefault();\r\n\r\n w.removeFromLocalStorage(savedFiltersLocalStorageKey);\r\n\r\n resetAllFilters();\r\n applyFilters();\r\n }\r\n\r\n function loadFilters(applyFiltersCallback) {\r\n var query = $.extend($.getUrlParamsObj(location.search), {\r\n action: 'GetFilters',\r\n controlId: controlId,\r\n pageId: w.BasePageID,\r\n showOnlyInStock: showOnlyInStock\r\n });\r\n\r\n if (domReady) {\r\n blockUI();\r\n }\r\n\r\n $.get(handlerUrl, query)\r\n .done(function (responseData) {\r\n if (domReady) {\r\n showFilters(responseData, applyFiltersCallback);\r\n } else {\r\n filtersData = responseData;\r\n }\r\n })\r\n .fail(function (errResp) {\r\n var message;\r\n if (typeof (errResp) === 'object') {\r\n // Extract error message\r\n var responseObj = JSON.parse(errResp.responseText);\r\n message = responseObj.Message ? responseObj.Message : errResp.statusText;\r\n } else {\r\n message = errResp;\r\n }\r\n notify(labels.failedToLoadFilters + '
' + message, 'error');\r\n })\r\n .always(function () {\r\n if (domReady) {\r\n unblockUI();\r\n }\r\n });\r\n }\r\n\r\n function showFilters(data, applyFiltersCallback) {\r\n var filters = data.filters;\r\n allItems = data.allItemIDs;\r\n\r\n if ((!filters || !filters.length) && !$cbxShowOnlyInStock.length) {\r\n $mainPanel.hide();\r\n pubSub.publish(filtersChannelPrefix + '.empty');\r\n } else {\r\n if (typeof (precompiledTemplate) === 'undefined') {\r\n precompiledTemplate = _.template(filtersTemplateContent);\r\n }\r\n\r\n if (w.siteScripts) {\r\n filters = w.siteScripts.converters.apply('ProductFilters', filters);\r\n }\r\n\r\n _.each(filters, function (filter, filterIdx) {\r\n filter.clientId = ['filter', filter.FilterType, filterIdx].join('_');\r\n filter.slideble = slideFilteringFor.indexOf(filter.Name) > -1;\r\n _.each(filter.Criterias, function (criteria, criteriaIdx) {\r\n criteria.clientId = [filter.clientId, 'criteria', criteriaIdx].join('_');\r\n if (filter.slideble) {\r\n filter.slideble = extractNumberFromString(criteria.Name) !== null;\r\n }\r\n });\r\n });\r\n\r\n var filtersHtml = precompiledTemplate({\r\n controlId: controlId,\r\n filters: filters,\r\n labels: labels,\r\n currencyCode: currencyCode,\r\n enableImmediateFiltering: enableImmediateFiltering\r\n });\r\n\r\n $filtersContainer.html(filtersHtml);\r\n runTemplateLocalScript(filters);\r\n\r\n if (filters.length) {\r\n $filters = $mainPanel.find('.' + classes.filter);\r\n initFilters(filters);\r\n\r\n if (typeof applyFiltersCallback === 'function') {\r\n applyFiltersCallback();\r\n } else {\r\n // Restore filters state from the url or local storage\r\n // Url values should always override the local storage ones\r\n try {\r\n var preAppliedFilters;\r\n\r\n var filterHash = location.href.split('#')[1] || '{}'; // Why not just location.hash? See http://stackoverflow.com/a/1704842/1855879\r\n\r\n var filtersFromUrl = enableFiltersURLSupport\r\n ? filterHash.startsWith('{')\r\n ? JSON.parse(decodeURIComponent(filterHash))\r\n : getFiltersFromFriendlyUrl(filterHash)\r\n : {};\r\n\r\n if (!_.isEmpty(filtersFromUrl)) {\r\n preAppliedFilters = filtersFromUrl;\r\n } else {\r\n // Grab saved filters from the local storage\r\n var savedFiltersFromLocalStorageJSON = w.getFromLocalStorage(savedFiltersLocalStorageKey);\r\n preAppliedFilters = typeof (savedFiltersFromLocalStorageJSON) !== 'undefined' ? JSON.parse(savedFiltersFromLocalStorageJSON) : null;\r\n }\r\n\r\n if (!_.isEmpty(preAppliedFilters)) {\r\n setAppliedFilters(preAppliedFilters); // restore filters state\r\n applyFilters(true); // reload product list\r\n }\r\n } catch (e) {\r\n console.error('%s - Failed to restore filters: %s', controlId, e.message || e);\r\n }\r\n }\r\n\r\n $filtersContainer.removeClass(classes.noFiltersAvailable);\r\n $buttonsContainer.css({'display': 'flex'});\r\n pubSub.publish(filtersChannelPrefix + '.load', filters);\r\n } else {\r\n $filtersContainer.addClass(classes.noFiltersAvailable);\r\n $buttonsContainer.hide();\r\n }\r\n }\r\n\r\n updateCounterSelectedCriteria();\r\n updateTotalProductCount();\r\n\r\n function getFiltersFromFriendlyUrl(filterHash) {\r\n filterHash = decodeURIComponent(filterHash);\r\n var filterParts = filterHash.split('/').splice(1);\r\n var foundFilter = null;\r\n var prevFoundFilter = null;\r\n var filtersFromUrl = {};\r\n\r\n _.each(filterParts, function (filterOrCriteriaName) {\r\n if (foundFilter) {\r\n findAndAddCriteria(foundFilter, filterOrCriteriaName);\r\n prevFoundFilter = foundFilter;\r\n foundFilter = null;\r\n } else {\r\n foundFilter = findByName(filters, filterOrCriteriaName);\r\n //if no filter found, then current name may belong to one of criterias from previously found filter\r\n if (!foundFilter) {\r\n if (prevFoundFilter) {\r\n findAndAddCriteria(prevFoundFilter, filterOrCriteriaName);\r\n } else {\r\n throw 'No filter found by name: ' + filterOrCriteriaName;\r\n }\r\n }\r\n }\r\n });\r\n\r\n return filtersFromUrl;\r\n\r\n function findAndAddCriteria(foundFilter, urlItem) {\r\n var filterValue;\r\n if (foundFilter.slideble)\r\n filterValue = parseFloat(urlItem.replace(/-/g, '.'));\r\n else {\r\n var foundCriteria = findByName(foundFilter.Criterias, urlItem);\r\n if (!foundCriteria) {\r\n throw 'No criteria found by name: ' + urlItem;\r\n }\r\n filterValue = foundCriteria.Name;\r\n }\r\n\r\n if (filtersFromUrl[foundFilter.Name]) {\r\n filtersFromUrl[foundFilter.Name].push(filterValue);\r\n } else {\r\n filtersFromUrl[foundFilter.Name] = [filterValue];\r\n }\r\n }\r\n\r\n function findByName(filtersOrCriterias, name) {\r\n return _.find(filtersOrCriterias, function (item) {\r\n var preparedName = item.Name.toLowerCase();\r\n //replace invalid chars with dash\r\n preparedName = preparedName.replace(/[^a-z0-9æøå-]/g, '-');\r\n //replace sequences of dashes with a single dash\r\n preparedName = preparedName.replace(/-+/g, '-');\r\n return preparedName === name;\r\n });\r\n }\r\n }\r\n\r\n function initFilters(filtersData) {\r\n $filters.each(function () {\r\n var $filter = $(this);\r\n var filterData = _.find(filtersData, function (filter) { return filter.clientId == $filter.attr('id'); });\r\n $filter.data('item', filterData);\r\n\r\n if ($filter.hasClass(classes.checkboxFilter)) {\r\n filterData.slideble = false;\r\n $filter.change(onCheckboxFilterChange);\r\n } else if ($filter.hasClass(classes.sliderFilter)) {\r\n filterData.slideble = true;\r\n var numericCriterias = getNumericCriterias(filterData.Criterias);\r\n var minValue = _.min(numericCriterias);\r\n var maxValue = _.max(numericCriterias);\r\n var sliderValues = [minValue, maxValue];\r\n var templateName = $('.' + classes.template).val();\r\n\r\n // Init slider\r\n $filter.find('.' + classes.sliderContainer).slider({\r\n range: true,\r\n min: minValue,\r\n max: maxValue,\r\n step: isFloat(minValue) || isFloat(maxValue) ? 0.01 : 1,\r\n values: sliderValues,\r\n slide: onSliderFilterChange,\r\n change: function (event) {\r\n // Do not process change events fired by programmatic changes\r\n if ((enableImmediateFiltering || templateName === 'horizontal3') && typeof (event.originalEvent) !== 'undefined') {\r\n applyFilters();\r\n }\r\n }\r\n });\r\n\r\n // Set initial values\r\n updateSliderInfo($filter, sliderValues);\r\n }\r\n });\r\n\r\n function onCheckboxFilterChange() {\r\n // Get all filtered by the current filter items and store them into the map, independently from the other filters.\r\n // Later, all the items from the filtered items map will be joined to the resulted set\r\n var $filter = $(this);\r\n var filterData = $filter.data('item');\r\n\r\n var $selectedCriterias = $filter.find('input:checkbox:checked');\r\n if ($selectedCriterias.length > 0) {\r\n // Filter is applied\r\n var selectedCriteriaIds = $selectedCriterias.map(function () { return this.id; }).get();\r\n var selectedCriterias = getSelectedCheckboxCriterias(filterData.Criterias, selectedCriteriaIds);\r\n excludedItemsMap[filterData.clientId] = _.difference(allItems, getCriteriasItems(selectedCriterias));\r\n appliedFilters[filterData.Name] = _.pluck(selectedCriterias, 'Name');\r\n } else {\r\n // Filter is not applied\r\n delete excludedItemsMap[filterData.clientId];\r\n delete appliedFilters[filterData.Name];\r\n }\r\n\r\n updateOtherFilters($filter);\r\n\r\n if (enableImmediateFiltering) {\r\n applyFilters();\r\n }\r\n }\r\n\r\n function onSliderFilterChange(event, ui) {\r\n var $slider = $(ui.handle);\r\n var $filter = $slider.closest('.' + classes.sliderFilter);\r\n var filterData = $filter.data('item');\r\n\r\n var selectedCriterias = getSelectedSliderCriterias(filterData.Criterias, ui.values[0], ui.values[1]);\r\n var selectedCriteriasItems = getCriteriasItems(selectedCriterias);\r\n\r\n excludedItemsMap[filterData.clientId] = _.difference(allItems, selectedCriteriasItems);\r\n appliedFilters[filterData.Name] = ui.values;\r\n\r\n updateSliderInfo($filter, ui.values);\r\n\r\n updateOtherFilters($filter);\r\n }\r\n }\r\n }\r\n\r\n function updateOtherFilters($appliedFilter) {\r\n // When some filter criterias are applied, the criterias of the other filters should be updated with the new total items values according to the newly applied criterias.\r\n $filters.not($appliedFilter).each(function () {\r\n var $filter = $(this);\r\n var filterData = $filter.data('item');\r\n var availableItems = [];\r\n var allItemsExcludedByOtherFilters = getAllItemsExcludedByOtherFilters(filterData.clientId);\r\n\r\n if ($filter.hasClass(classes.checkboxFilter)) {\r\n _.each(filterData.Criterias, function (criteria) {\r\n var $criteriaCheckbox = $filter.find('#' + criteria.clientId);\r\n var $criteriaCheckboxCounter = $filter.find('label[for=\"' + criteria.clientId + '\"] .' + classes.itemsCount);\r\n availableItems = _.difference(criteria.Items, allItemsExcludedByOtherFilters);\r\n $criteriaCheckboxCounter.text(availableItems.length);\r\n $criteriaCheckbox.prop('disabled', availableItems.length === 0);\r\n });\r\n\r\n } else if ($filter.hasClass(classes.sliderFilter)) {\r\n var $currentSlider = $filter.find('.' + classes.sliderContainer);\r\n var onlyIncludedItems = _.difference(allItems, getAllExcludedItems());\r\n var numericCriterias = getNumericCriterias(filterData.Criterias, onlyIncludedItems);\r\n\r\n if (numericCriterias && numericCriterias.length) {\r\n var sliderValues = [\r\n _.min(numericCriterias),\r\n _.max(numericCriterias)\r\n ];\r\n $currentSlider.slider('values', sliderValues);\r\n updateSliderInfo($filter, sliderValues);\r\n }\r\n }\r\n });\r\n pubSub.publish(filtersChannelPrefix + '.update');\r\n };\r\n\r\n function getNumericCriterias(allCriterias, onlyIncludedItems) {\r\n var result = [];\r\n _.each(allCriterias, function (criteria) {\r\n if (criteria.Items !== undefined &&\r\n onlyIncludedItems !== undefined &&\r\n !_.intersection(criteria.Items, onlyIncludedItems).length) {\r\n return;\r\n }\r\n var number = extractNumberFromString(criteria.Name);\r\n result = _.union(result, [parseFloat(number)]);\r\n });\r\n return result;\r\n }\r\n\r\n //#region Helpers\r\n\r\n function isFloat(n) {\r\n return Number(n) === n && n % 1 !== 0;\r\n };\r\n\r\n function extractNumberFromString(inpurString) {\r\n var regex = /[+-]?\\d+(?:\\.\\d+)?/g;\r\n var isMatch = inpurString.match(regex);\r\n\r\n return isMatch ? isMatch[0] : null;\r\n }\r\n\r\n function updateSliderInfo($filter, sliderValues) {\r\n\r\n var $minValueContainer = $filter.find('.' + classes.minValue);\r\n var $maxValueContainer = $filter.find('.' + classes.maxValue);\r\n var $itemsCountContainer = $filter.find('.' + classes.itemsCount);\r\n\r\n var minValue = _.min(sliderValues);\r\n $minValueContainer.text(minValue);\r\n var maxValue = _.max(sliderValues);\r\n $maxValueContainer.text(maxValue);\r\n\r\n var newTotal = _.difference(allItems, getAllExcludedItems()).length;\r\n $itemsCountContainer.text(newTotal);\r\n pubSub.publish(filtersChannelPrefix + '.update');\r\n }\r\n\r\n function getCriteriasItems(criterias) {\r\n // optimized function only for simple types. UMWC-2830\r\n function itemsUnion(x, y) {\r\n var result = [];\r\n for (var xi = 0; xi < x.length; ++xi) {\r\n result.push(x[xi]);\r\n }\r\n for (var yi = 0; yi < y.length; ++yi) {\r\n var item = y[yi];\r\n var exists = false;\r\n for (var j = 0; j < result.length; ++j)\r\n if (result[j] === item) {\r\n exists = true;\r\n break;\r\n }\r\n if (!exists)\r\n result.push(item);\r\n }\r\n return result;\r\n }\r\n return _.reduce(criterias, function (memo, criteria) {\r\n return itemsUnion(memo, criteria.Items);\r\n }, []);\r\n }\r\n\r\n function getSelectedCheckboxCriterias(allCriterias, selectedCriteriaIds) {\r\n return _.filter(allCriterias, function (criteria) {\r\n return _.contains(selectedCriteriaIds, criteria.clientId) && _.some(criteria.Items);\r\n });\r\n }\r\n\r\n function getSelectedSliderCriterias(allCriterias, selectedMin, selectedMax) {\r\n return _.filter(allCriterias,\r\n function (criteria) {\r\n var number = extractNumberFromString(criteria.Name);\r\n var numericCriteria = parseFloat(number);\r\n return (numericCriteria >= selectedMin && numericCriteria <= selectedMax) && _.some(criteria.Items);\r\n });\r\n }\r\n\r\n function getAllExcludedItems() {\r\n return _.reduce(excludedItemsMap, function (allExcludedItems, excludedMapItem) {\r\n return _.union(allExcludedItems, excludedMapItem);\r\n }, []);\r\n }\r\n\r\n function getAllItemsExcludedByOtherFilters(currentFilterName) {\r\n return _.reduce(excludedItemsMap,\r\n function (allExcludedItems, excludedMapItem, excludedByFilterName) {\r\n return currentFilterName !== excludedByFilterName\r\n ? _.union(allExcludedItems, excludedMapItem)\r\n : allExcludedItems;\r\n },\r\n []);\r\n }\r\n\r\n function setAppliedFilters(filtersToApply) {\r\n // Reset current filters first\r\n excludedItemsMap = {};\r\n appliedFilters = filtersToApply || {};\r\n\r\n $filters.each(function () {\r\n var $filter = $(this);\r\n var filterData = $filter.data('item');\r\n var filterId = filterData.clientId;\r\n var filteredValues = appliedFilters[filterData.Name];\r\n var selectedCriterias = [];\r\n\r\n if ($filter.hasClass(classes.checkboxFilter)) {\r\n // Clear previous values\r\n $filter.find('input:checkbox').prop('checked', false);\r\n\r\n if (filteredValues && filteredValues.length) {\r\n _.each(filterData.Criterias, function (criteria) {\r\n if (_.contains(filteredValues, criteria.Name)) {\r\n $filter.find('#' + criteria.clientId).prop('checked', true);\r\n selectedCriterias.push(criteria);\r\n excludedItemsMap[filterId] = _.difference(allItems, getCriteriasItems(selectedCriterias));\r\n }\r\n });\r\n }\r\n } else if ($filter.hasClass(classes.sliderFilter)) {\r\n var sliderValues = filteredValues;\r\n var $currentSlider = $filter.find('.' + classes.sliderContainer);\r\n if (sliderValues && sliderValues.length == 2 && sliderValues[0] <= sliderValues[1]) {\r\n selectedCriterias = getSelectedSliderCriterias(filterData.Criterias, sliderValues[0], sliderValues[1]);\r\n excludedItemsMap[filterId] = _.difference(allItems, getCriteriasItems(selectedCriterias));\r\n } else {\r\n // Reset slider\r\n var minRangeValue = $currentSlider.slider('option', 'min');\r\n var maxRangeValue = $currentSlider.slider('option', 'max');\r\n sliderValues = [minRangeValue, maxRangeValue];\r\n }\r\n\r\n $currentSlider.slider('values', sliderValues);\r\n updateSliderInfo($filter, sliderValues);\r\n }\r\n\r\n updateOtherFilters($filter);\r\n });\r\n };\r\n\r\n function resetAllFilters() {\r\n excludedItemsMap = {};\r\n appliedFilters = {};\r\n\r\n $filters.each(function () {\r\n var $filter = $(this);\r\n var filterData = $filter.data('item');\r\n\r\n if ($filter.hasClass(classes.checkboxFilter)) {\r\n _.each(filterData.Criterias, function (criteria) {\r\n var $criteriaCheckbox = $filter.find('#' + criteria.clientId);\r\n $criteriaCheckbox.prop('checked', false);\r\n $criteriaCheckbox.prop('disabled', false);\r\n var $criteriaCheckboxCounter = $filter.find('label[for=\"' + criteria.clientId + '\"] .' + classes.itemsCount);\r\n $criteriaCheckboxCounter.text(criteria.Items.length);\r\n });\r\n } else if ($filter.hasClass(classes.sliderFilter)) {\r\n var $filterSlider = $filter.find('.' + classes.sliderContainer);\r\n var numericCriterias = getNumericCriterias(filterData.Criterias);\r\n var minValue = _.min(numericCriterias);\r\n var maxValue = _.max(numericCriterias);\r\n\r\n var sliderValues = [minValue, maxValue];\r\n $filterSlider.slider('values', sliderValues);\r\n\r\n updateSliderInfo($filter, sliderValues);\r\n }\r\n });\r\n };\r\n\r\n function setFiltersToFriendlyUrl(appliedFilters) {\r\n //join all filters and their criterias in a single string, separated by slash\r\n //replace slash in filter and criteria names, because slash is used as a separator when restoring filters from URL\r\n var filterUrl = _.reduce(appliedFilters,\r\n function (memo, criterias, filterName) {\r\n return memo + '/' + filterName.replace(/\\//g, '-') +\r\n _.reduce(criterias, function (memo2, criteriaName) { return memo2 + '/' + (criteriaName.replace ? criteriaName.replace(/\\//g, '-') : criteriaName); }, '');\r\n }, '');\r\n filterUrl = filterUrl.toLowerCase();\r\n //replace invalid chars with dash\r\n filterUrl = filterUrl.replace(/[^a-z0-9æøå\\/-]/g, '-');\r\n //replace sequences of dashes with a single dash\r\n filterUrl = filterUrl.replace(/-+/g, '-');\r\n\r\n return filterUrl;\r\n }\r\n\r\n function applyFilters(isRestoring, isHistoryPopEvent) {\r\n var excludedItems = getAllExcludedItems();\r\n var allIncludedItems = excludedItems.length > 0 ? _.difference(allItems, excludedItems) : null;\r\n\r\n var filtersUrl = '';\r\n if (enableFiltersURLSupport) {\r\n filtersUrl = setFiltersToFriendlyUrl(appliedFilters);\r\n }\r\n\r\n var filterState = {\r\n filteredItemIds: allIncludedItems,\r\n allItemsCount: allItems.length,\r\n appliedFilters: appliedFilters,\r\n filtersUrl: filtersUrl,\r\n isRestoring: isRestoring === true,\r\n isHistoryPopEvent: isHistoryPopEvent === true,\r\n showOnlyInStock: showOnlyInStock\r\n };\r\n\r\n if (isRestoring && !preAppliedFilterState) {\r\n filterState.isPreApplied = true;\r\n preAppliedFilterState = filterState;\r\n }\r\n\r\n pubSub.publish(filtersChannelPrefix + '.apply', filterState);\r\n\r\n if (rememberChoiceFor.length > 0) {\r\n var appliedFiltersToRemember = {};\r\n if (!_.isEmpty(appliedFilters)) {\r\n appliedFiltersToRemember = _.pick(appliedFilters, rememberChoiceFor);\r\n }\r\n\r\n w.saveToLocalStorage(savedFiltersLocalStorageKey, JSON.stringify(appliedFiltersToRemember));\r\n } else if (w.getFromLocalStorage(savedFiltersLocalStorageKey)) {\r\n w.removeFromLocalStorage(savedFiltersLocalStorageKey);\r\n }\r\n \r\n updateTotalProductCount();\r\n }\r\n function applySelectedCheckboxesFilter(filter) {\r\n // Get all filtered by the current filter items and store them into the map, independently from the other filters.\r\n // Later, all the items from the filtered items map will be joined to the resulted set\r\n var $filter = filter;\r\n var filterData = $filter.data('item');\r\n\r\n var $selectedCriterias = $filter.find('input:checkbox:checked');\r\n if ($selectedCriterias.length > 0) {\r\n // Filter is applied\r\n var selectedCriteriaIds = $selectedCriterias.map(function () { return this.id; }).get();\r\n var selectedCriterias = getSelectedCheckboxCriterias(filterData.Criterias, selectedCriteriaIds);\r\n excludedItemsMap[filterData.clientId] = _.difference(allItems, getCriteriasItems(selectedCriterias));\r\n appliedFilters[filterData.Name] = _.pluck(selectedCriterias, 'Name');\r\n } else {\r\n // Filter is not applied\r\n delete excludedItemsMap[filterData.clientId];\r\n delete appliedFilters[filterData.Name];\r\n }\r\n\r\n updateOtherFilters($filter);\r\n\r\n applyFilters();\r\n }\r\n\r\n function updateTotalProductCount() {\r\n const totalCount = _.difference(allItems, getAllExcludedItems()).length;\r\n $mainPanel.find('.' + classes.totalCount).text(totalCount || \"\");\r\n }\r\n\r\n function notify(message, type) {\r\n var notificationChannel = typeof (type) === 'string' && type ? 'notification.' + type : 'notification';\r\n pubSub.publish(notificationChannel, message);\r\n }\r\n function blockUI() {\r\n if (typeof ($.blockUI) === 'function') {\r\n $mainPanel.block({ message: null });\r\n }\r\n }\r\n function unblockUI() {\r\n if (typeof ($.unblockUI) === 'function') {\r\n $mainPanel.unblock();\r\n }\r\n }\r\n //#endregion\r\n\r\n function runTemplateLocalScript(filters) {\r\n var templateName = $('.' + classes.template).val();\r\n\r\n var Template = templateName;\r\n var UC = 'uc' + controlId;\r\n var UCTemplated = UC + '-' + Template;\r\n\r\n var selectedCriteriaTemplate = '';\r\n var precompiledSelectedCriteriaTemplate = _.template(selectedCriteriaTemplate);\r\n\r\n var sectionSelectedCriteriaTemplate = '<%- criteriaLabel %>';\r\n var sectionPrecompiledSelectedCriteriaTemplate = _.template(sectionSelectedCriteriaTemplate);\r\n\r\n // Specific template classes\r\n var templateClasses = {\r\n noAppliedFilters: 'no-applied-filters',\r\n hasAppliedFilters: 'has-applied-filters',\r\n openAfterFilterApplied: 'open-after-filter-applied',\r\n\r\n // Specific dropdown ctiterias\r\n sectionSelectedCriterias: 'js-' + UCTemplated + '-section-selected-criterias',\r\n sectionApplyCriteriasBtn: 'js-' + UCTemplated + '-section-apply-criterias',\r\n\r\n sectionSelectedCriteriaCount: 'js-' + UCTemplated + '-selected-criteria-count',\r\n\r\n // All selected criterias from all dropdowns\r\n selectedCriterias: 'js-' + UCTemplated + '-selected-criterias',\r\n selectedCriteria: 'js-' + UCTemplated + '-selected-criteria',\r\n clearSelectedCriterias: 'js-' + UCTemplated + '-clear-selected-criterias',\r\n\r\n // Dropdown representing a filter\r\n dropdownItem: 'js-' + UCTemplated + '-dropdown-item',\r\n dropdownItemClosed: 'is-closed',\r\n dropdownItemOpened: 'is-opened',\r\n dropdownItemDisabled: 'is-disabled',\r\n dropdownBtn: 'js-' + UCTemplated + '-dropdown-btn',\r\n dropdownTitleBtn: 'js-' + UCTemplated + '-dropdown-title-btn',\r\n\r\n // Filter item - wrapper for criteria\r\n filterItem: 'js-' + UCTemplated + '-filter-item',\r\n filterItemDisabled: 'is-disabled',\r\n filterItemIsHidden: 'is-mobile-hidden',\r\n criteriaCheckbox: 'js-' + UCTemplated + '-filter-item-checkbox',\r\n criteriaLabel: 'js-' + UCTemplated + '-filter-item-label',\r\n };\r\n\r\n // UI Elements selected by template classes\r\n var $selectedCriterias = $('.' + templateClasses.selectedCriterias, $mainPanel);\r\n var $allSectionsSelectedCriterias = $('.' + templateClasses.sectionSelectedCriterias);\r\n var $clearSelectedCriterias = $('.' + templateClasses.clearSelectedCriterias, $mainPanel);\r\n var $dropdownItem = $('.' + templateClasses.dropdownItem, $mainPanel);\r\n var $dropdownBtn = $('.' + templateClasses.dropdownBtn, $mainPanel);\r\n var $dropdownTitleBtn = $('.' + templateClasses.dropdownTitleBtn, $mainPanel);\r\n var $filterItem = $('.' + templateClasses.filterItem, $mainPanel);\r\n var $filterItemLabel = $('.' + templateClasses.criteriaLabel, $mainPanel);\r\n var $sectionApplyCriteriasBtn = $('.' + templateClasses.sectionApplyCriteriasBtn, $mainPanel);\r\n var initialNumberOfSelectedCheckboxes = 0;\r\n //var $selectedCriteria = $('.' + templateClasses.selectedCriteria, $mainPanel);\r\n \r\n // 🤘 time\r\n\r\n $mainPanel.addClass(UCTemplated);\r\n\r\n // Delegate clicks from specific theme buttons to the UC195 Control buttons placed ousite the theme markup\r\n $clearSelectedCriterias.click(function (evt) {\r\n $filterItem.removeClass(templateClasses.filterItemDisabled);\r\n $dropdownItem.removeClass(templateClasses.dropdownItemDisabled);\r\n $resetButton.trigger('click');\r\n \r\n $('.' + templateClasses.selectedCriteria, $mainPanel).remove();\r\n });\r\n\r\n $sectionApplyCriteriasBtn.on('click', function () {\r\n onApplyButtonClick();\r\n });\r\n\r\n // click on dropdown button (to expand filter criterias on mobile devices)\r\n $dropdownBtn.on('click', function () {\r\n var $self = $(this);\r\n var $dropdownItem = $(this).closest('.' + templateClasses.dropdownItem);\r\n var currentNumberOfSelectedCheckboxes = _.size($('.' + templateClasses.criteriaCheckbox + ':checked'));\r\n\r\n $dropdownItem.find('.' + templateClasses.filterItem + ':gt(2)').addClass(templateClasses.filterItemIsHidden);\r\n\r\n if ($dropdownItem.hasClass(templateClasses.dropdownItemOpened)) {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\r\n } else {\r\n if (initialNumberOfSelectedCheckboxes === currentNumberOfSelectedCheckboxes) {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemClosed).addClass(templateClasses.dropdownItemOpened);\r\n } else {\r\n $dropdownItem.addClass(templateClasses.openAfterFilterApplied);\r\n }\r\n }\r\n\r\n if (initialNumberOfSelectedCheckboxes !== currentNumberOfSelectedCheckboxes) {\r\n onApplyButtonClick();\r\n initialNumberOfSelectedCheckboxes = currentNumberOfSelectedCheckboxes;\r\n }\r\n\r\n // close another opened items\r\n $dropdownBtn\r\n .filter(function () {\r\n return $(this).data('filter-id') !== $self.data('filter-id');\r\n })\r\n .closest('.' + templateClasses.dropdownItem)\r\n .removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\r\n });\r\n\r\n // click on dropdown button (to expand filter criterias on mobile devices)\r\n $dropdownTitleBtn.on('click', function () {\r\n onApplyButtonClick();\r\n\r\n var currentNumberOfSelectedCheckboxes = _.size($('.' + templateClasses.criteriaCheckbox + ':checked'));\r\n\r\n $dropdownItem.find('.' + templateClasses.filterItem + ':gt(2)').addClass(templateClasses.filterItemIsHidden);\r\n\r\n if ($dropdownItem.hasClass(templateClasses.dropdownItemOpened)) {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\r\n } else {\r\n if (initialNumberOfSelectedCheckboxes === currentNumberOfSelectedCheckboxes) {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemClosed).addClass(templateClasses.dropdownItemOpened);\r\n } else {\r\n $dropdownItem.addClass(templateClasses.openAfterFilterApplied);\r\n }\r\n }\r\n\r\n if (initialNumberOfSelectedCheckboxes !== currentNumberOfSelectedCheckboxes) {\r\n onApplyButtonClick();\r\n initialNumberOfSelectedCheckboxes = currentNumberOfSelectedCheckboxes;\r\n }\r\n\r\n var $mainPanelTopBox = $('.TopBox', $mainPanel);\r\n \r\n $mainPanelTopBox.find('.' + templateClasses.selectedCriteria).remove();\r\n\r\n if(currentNumberOfSelectedCheckboxes>0){\r\n $mainPanelTopBox.append('' + currentNumberOfSelectedCheckboxes + '');\r\n }\r\n \r\n });\r\n\r\n // handle click on selected criteria\r\n $($selectedCriterias).on('click', '.' + templateClasses.selectedCriteria, function (evt) {\r\n var criteriaID = $(evt.currentTarget).data('criteria-id');\r\n var $criteriaCheckbox = $('.' + templateClasses.criteriaCheckbox).filter('[id=' + criteriaID + ']');\r\n var $filter = $criteriaCheckbox.closest('.' + classes.filter);\r\n\r\n $criteriaCheckbox.attr('checked', false);\r\n applySelectedCheckboxesFilter($filter);\r\n $(this).remove();\r\n });\r\n\r\n // use pubSub.subscribe instead of change event\r\n // because this is dynamic filter and checking one criteria can cause changes for another criterias\r\n pubSub.subscribe(filtersChannelPrefix + '.apply', function (ignore, filterState) {\r\n // handle selected criterias\r\n $selectedCriterias.add($allSectionsSelectedCriterias).empty();\r\n $('.' + templateClasses.sectionSelectedCriterias).remove();\r\n\r\n var filter, criteria;\r\n $.each(filterState.appliedFilters, function (appliedFilter, appliedCriterias) {\r\n filter = _.find(filters, function (filter) {\r\n return filter.Name === appliedFilter;\r\n });\r\n // skip price filter and slideble filters\r\n if (!filter || filter.slideble) {\r\n return true; // continue .each loop\r\n }\r\n var $sectionCriteriasContainer = $('
');\r\n var $dropdown = $('#' + filter.clientId);\r\n var $templateFilterItem = $dropdown.closest($('.' + templateClasses.dropdownItem));\r\n var $dropdownBtn = $templateFilterItem.find($('.' + templateClasses.dropdownBtn));\r\n var $embdedSectionCriteriasContainer = $templateFilterItem.find('.' + templateClasses.sectionSelectedCriterias);\r\n $embdedSectionCriteriasContainer.empty();\r\n\r\n $.each(appliedCriterias, function (index, appliedCriteria) {\r\n criteria = _.find(filter.Criterias, function (criteria) {\r\n return criteria.Name === appliedCriteria;\r\n });\r\n if (!criteria) {\r\n return true; // continue .each loop\r\n }\r\n\r\n $sectionCriteriasContainer.append(sectionPrecompiledSelectedCriteriaTemplate({\r\n criteriaLabel: appliedCriteria\r\n }));\r\n\r\n $selectedCriterias.append(precompiledSelectedCriteriaTemplate({\r\n criteriaID: criteria.clientId,\r\n appliedFilter: appliedFilter,\r\n appliedCriteria: appliedCriteria\r\n }));\r\n });\r\n\r\n if ($embdedSectionCriteriasContainer.length === 0) {\r\n $dropdownBtn.append($sectionCriteriasContainer);\r\n } else {\r\n $embdedSectionCriteriasContainer.replaceWith($sectionCriteriasContainer);\r\n }\r\n\r\n });\r\n\r\n if (_.size(filterState.appliedFilters)) {\r\n $mainPanel.addClass(templateClasses.hasAppliedFilters).removeClass(templateClasses.noAppliedFilters);\r\n } else {\r\n $mainPanel.removeClass(templateClasses.hasAppliedFilters).addClass(templateClasses.noAppliedFilters);\r\n }\r\n\r\n $dropdownItem.each(function () {\r\n if ($(this).hasClass(templateClasses.openAfterFilterApplied)) {\r\n $(this).removeClass(templateClasses.openAfterFilterApplied)\r\n $(this).removeClass(templateClasses.dropdownItemClosed).addClass(templateClasses.dropdownItemOpened);\r\n } else {\r\n $(this).removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\r\n $(this).find('.' + templateClasses.filterItem + ':gt(2)').addClass(templateClasses.filterItemIsHidden);\r\n }\r\n });\r\n });\r\n\r\n // catch filter changes\r\n // but these changes not applied yet, .apply fires after Apply button click if enableImmediateFiltering is false\r\n pubSub.subscribe(filtersChannelPrefix + '.update', function (ignore) {\r\n // go through all checkboxes to mark disabled criterias\r\n $filters.each(function () {\r\n var $filter = $(this);\r\n var $filterItemTemp;\r\n var $dropdownItem = $filter.closest('.' + templateClasses.dropdownItem);\r\n //var $embdedSectionCriteriasContainer = $dropdownItem.find('.' + templateClasses.sectionSelectedCriterias);\r\n if (!$filter.hasClass(classes.checkboxFilter)) {\r\n return true; // continue .each loop\r\n }\r\n // checkboxes already has disabled/enabled states from previous step\r\n // so just check this state and mark filter item if needed\r\n $filter.find('.' + templateClasses.criteriaCheckbox).each(function () {\r\n $filterItemTemp = $(this).closest('.' + templateClasses.filterItem);\r\n if ($(this).is(':disabled')) {\r\n $filterItemTemp.addClass(templateClasses.filterItemDisabled);\r\n } else {\r\n $filterItemTemp.removeClass(templateClasses.filterItemDisabled);\r\n }\r\n });\r\n // if all criterias are disabled - mark dropdown item as disabled too\r\n if ($filter.find('.' + templateClasses.filterItem).length === $filter.find('.' + templateClasses.filterItemDisabled).length) {\r\n $dropdownItem.addClass(templateClasses.dropdownItemDisabled);\r\n } else {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemDisabled);\r\n }\r\n });\r\n if (_.size(appliedFilters)) {\r\n $mainPanel.addClass(templateClasses.hasAppliedFilters).removeClass(templateClasses.noAppliedFilters);\r\n } else {\r\n $mainPanel.removeClass(templateClasses.hasAppliedFilters).addClass(templateClasses.noAppliedFilters);\r\n }\r\n });\r\n\r\n pubSub.subscribe(filtersChannelPrefix + '.load', function (ignore, filters) {\r\n initialNumberOfSelectedCheckboxes = _.size($('.' + templateClasses.criteriaCheckbox + ':checked'))\r\n $dropdownItem.each(function () {\r\n $(this).find('.' + templateClasses.filterItem + ':gt(2)').addClass(templateClasses.filterItemIsHidden);\r\n });\r\n\r\n if (_.size(appliedFilters)) {\r\n $mainPanel.addClass(templateClasses.hasAppliedFilters).removeClass(templateClasses.noAppliedFilters);\r\n } else {\r\n $mainPanel.removeClass(templateClasses.hasAppliedFilters).addClass(templateClasses.noAppliedFilters);\r\n }\r\n });\r\n }\r\n\r\n function updateCounterSelectedCriteria() {\r\n const templateName = $('.js-uc' + controlId + '-template').val();\r\n const classRoot = 'uc' + controlId + '-' + templateName;\r\n\r\n // Specific template classes\r\n var templateClasses = {\r\n selectedCriteria: 'js-' + classRoot + '-selected-criteria',\r\n\r\n // Filter item - wrapper for criteria\r\n filterItem: 'js-' + classRoot + '-filter-item',\r\n filterItemIsHidden: 'is-mobile-hidden',\r\n criteriaCheckbox: 'js-' + classRoot + '-filter-item-checkbox',\r\n };\r\n\r\n var currentNumberOfSelectedCheckboxes = _.size($('.' + templateClasses.criteriaCheckbox + ':checked'));\r\n\r\n var $mainPanelTopBox = $('.TopBox', $mainPanel);\r\n\r\n $mainPanelTopBox.find('.' + templateClasses.selectedCriteria).remove();\r\n\r\n if(currentNumberOfSelectedCheckboxes>0) {\r\n $mainPanelTopBox.find(\"button\").append(' (' + currentNumberOfSelectedCheckboxes + ')');\r\n }\r\n }\r\n\r\n loadFilters();\r\n\r\n $(function () {\r\n domReady = true;\r\n\r\n $mainPanel = $('#' + ctx.mainPanelId);\r\n $filtersContainer = $('.' + classes.filtersContainer, $mainPanel);\r\n $buttonsContainer = $('.' + classes.buttonsContainer, $mainPanel);\r\n $resetButton = $('.' + classes.resetBtn, $buttonsContainer);\r\n $closeButton = $('.' + classes.closeBtn, $mainPanel);\r\n $cbxShowOnlyInStock = $('.' + classes.showOnlyInStock, $mainPanel);\r\n $sortSelector = $('.' + classes.sortSelector, $mainPanel);\r\n\r\n if (filtersData) {\r\n showFilters(filtersData);\r\n }\r\n\r\n $resetButton.on('click', function (e) {\r\n onResetButtonClick(e);\r\n updateCounterSelectedCriteria();\r\n });\r\n\r\n $closeButton.on('click', function (e) {\r\n onApplyButtonClick();\r\n updateCounterSelectedCriteria();\r\n });\r\n\r\n // Subscribe to popstate event\r\n $(w).on('popstate', onHistoryPopState);\r\n\r\n function onHistoryPopState(evt) {\r\n var state = evt.originalEvent.state;\r\n if (state && state.controlId === productListControlId) {\r\n // Update filters states only, product list is already refreshed from state\r\n if (typeof state.sort !== 'undefined' && $sortSelector.length) {\r\n $sortSelector.val(state.sort);\r\n }\r\n\r\n if (typeof state.showOnlyInStock === 'boolean' && state.showOnlyInStock !== showOnlyInStock) {\r\n if ($cbxShowOnlyInStock.length) {\r\n $cbxShowOnlyInStock.prop('checked', state.showOnlyInStock === true);\r\n }\r\n\r\n showOnlyInStock = state.showOnlyInStock;\r\n\r\n loadFilters(function () {\r\n setAppliedFilters(typeof (state.appliedFilters) !== 'undefined' ? state.appliedFilters : {});\r\n applyFilters(true, true);\r\n });\r\n } else {\r\n setAppliedFilters(typeof (state.appliedFilters) !== 'undefined' ? state.appliedFilters : {});\r\n applyFilters(true, true);\r\n }\r\n }\r\n }\r\n\r\n if ($cbxShowOnlyInStock.length) {\r\n $cbxShowOnlyInStock.prop('checked', showOnlyInStock === true);\r\n $cbxShowOnlyInStock.change(function () {\r\n showOnlyInStock = $cbxShowOnlyInStock.prop('checked');\r\n\r\n loadFilters(function () {\r\n setAppliedFilters(appliedFilters);\r\n applyFilters();\r\n });\r\n });\r\n }\r\n\r\n if ($sortSelector.length) {\r\n $sortSelector.change(function () {\r\n var sortBy = this.value;\r\n pubSub.publish(filtersChannelPrefix + '.sortingchanged', sortBy);\r\n })\r\n }\r\n\r\n pubSub.subscribe(staticfilterChannelPrefix + '.apply', function (topic, itemsCount) {\r\n loadFilters();\r\n });\r\n\r\n pubSub.subscribe(staticfilterChannelPrefix + '.reset', function (topic) {\r\n w.removeFromLocalStorage(savedFiltersLocalStorageKey);\r\n\r\n setAppliedFilters();\r\n applyFilters();\r\n });\r\n\r\n pubSub.subscribe(listReadyChannelPrefix,\r\n function () {\r\n if (preAppliedFilterState)\r\n pubSub.publish(filtersChannelPrefix + '.apply', preAppliedFilterState);\r\n });\r\n }); \r\n }\r\n})(window, jQuery, _);\r\n"],"names":["w","$","_","assetId","umwAssets","ctx","precompiledTemplate","$filters","allItems","$mainPanel","$filtersContainer","$buttonsContainer","$resetButton","$closeButton","$cbxShowOnlyInStock","$sortSelector","controlId","productListControlId","productListPageControlID","filtersTemplateContent","labels","currencyCode","enableImmediateFiltering","rememberChoiceFor","slideFilteringFor","enableFiltersURLSupport","showOnlyInStock","handlerUrl","R","pubSub","PubSub","filtersChannelPrefix","staticfilterChannelPrefix","listReadyChannelPrefix","excludedItemsMap","appliedFilters","savedFiltersLocalStorageKey","classes","noFiltersAvailable","template","filtersContainer","buttonsContainer","filter","checkboxFilter","sliderFilter","sliderContainer","minValue","maxValue","itemsCount","resetBtn","closeBtn","sortSelector","totalCount","domReady","filtersData","preAppliedFilterState","onApplyButtonClick","applyFilters","onResetButtonClick","evt","preventDefault","removeFromLocalStorage","each","$filterSlider","$filter","this","filterData","data","hasClass","Criterias","criteria","$criteriaCheckbox","find","clientId","prop","text","Items","length","numericCriterias","getNumericCriterias","sliderValues","min","max","slider","updateSliderInfo","loadFilters","applyFiltersCallback","query","extend","getUrlParamsObj","location","search","action","pageId","BasePageID","block","message","get","done","responseData","showFilters","fail","errResp","JSON","parse","responseText","Message","statusText","failedToLoadFilters","type","notificationChannel","publish","always","unblock","filterHash","foundFilter","prevFoundFilter","filtersFromUrl","filters","allItemIDs","siteScripts","converters","apply","filterIdx","FilterType","join","slideble","indexOf","Name","criteriaIdx","extractNumberFromString","filtersHtml","html","templateName","val","UCTemplated","selectedCriteriaTemplate","precompiledSelectedCriteriaTemplate","sectionPrecompiledSelectedCriteriaTemplate","templateClasses","$selectedCriterias","$allSectionsSelectedCriterias","$clearSelectedCriterias","$dropdownItem","$dropdownBtn","$dropdownTitleBtn","$filterItem","$sectionApplyCriteriasBtn","initialNumberOfSelectedCheckboxes","addClass","click","removeClass","trigger","remove","on","$self","closest","currentNumberOfSelectedCheckboxes","size","$mainPanelTopBox","append","criteriaID","currentTarget","attr","selectedCriteriaIds","map","id","selectedCriterias","getSelectedCheckboxCriterias","difference","getCriteriasItems","pluck","updateOtherFilters","subscribe","ignore","filterState","add","empty","appliedFilter","appliedCriterias","$sectionCriteriasContainer","$templateFilterItem","$embdedSectionCriteriasContainer","index","appliedCriteria","criteriaLabel","replaceWith","$filterItemTemp","is","change","onCheckboxFilterChange","range","step","isFloat","values","slide","onSliderFilterChange","event","savedFiltersFromLocalStorageJSON","preAppliedFilters","href","split","startsWith","decodeURIComponent","filterParts","splice","filterOrCriteriaName","findAndAddCriteria","findByName","isEmpty","getFromLocalStorage","setAppliedFilters","e","console","error","css","display","hide","urlItem","filterValue","parseFloat","replace","foundCriteria","push","filtersOrCriterias","name","item","preparedName","toLowerCase","ui","handle","selectedCriteriasItems","getSelectedSliderCriterias","updateCounterSelectedCriteria","updateTotalProductCount","$appliedFilter","not","availableItems","currentFilterName","$currentSlider","allItemsExcludedByOtherFilters","reduce","allExcludedItems","excludedMapItem","excludedByFilterName","union","$criteriaCheckboxCounter","onlyIncludedItems","getAllExcludedItems","allCriterias","result","undefined","intersection","number","n","Number","inpurString","isMatch","match","$minValueContainer","$maxValueContainer","$itemsCountContainer","newTotal","criterias","memo","itemsUnion","x","y","xi","yi","exists","j","contains","some","selectedMin","selectedMax","numericCriteria","filtersToApply","filterId","filteredValues","isRestoring","isHistoryPopEvent","excludedItems","allIncludedItems","filtersUrl","filterUrl","filterName","memo2","criteriaName","filteredItemIds","allItemsCount","isPreApplied","appliedFiltersToRemember","pick","saveToLocalStorage","stringify","classRoot","mainPanelId","state","originalEvent","sort","sortBy","value","topic","window","jQuery"],"mappings":"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"}