{"version":3,"file":"ProductFilters5.min.js","sources":["ProductFilters5.js"],"sourcesContent":["(function (w, $, _) {\r\n 'use strict';\r\n\r\n const assetId = '~/Parts/Views/Product/ProductFilters/ProductFilters5.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 dropdownItem: 'js-uc' + controlId + '-dropdown-item',\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 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\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 var $mobileCloseBtn = $('.' + classes.closeBtn);\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 === 'horizontal5') && typeof (event.originalEvent) !== 'undefined') {\r\n switch (templateName) {\r\n case 'horizontal5':\r\n if($mobileCloseBtn.is(\":hidden\")){\r\n applyFilters();\r\n }\r\n break;\r\n default:\r\n applyFilters();\r\n }\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 var templateName = $('.' + classes.template).val();\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 // Ignore enableImmediateFiltering for horizontal5 template and applyFilters on every checkbox change\r\n if (enableImmediateFiltering || templateName === 'horizontal5') {\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 sectionBtnBack: 'js-' + UCTemplated + '-section-back',\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 // Checkbox Filter\r\n checkboxFilter: 'js-' + UC + '-checkbox-filter',\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 // Close Button\r\n closeBtn: 'js-' + UC + '-close-btn',\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 $criteriaLabel = $('.' + templateClasses.criteriaLabel, $mainPanel);\r\n var $sectionBtnBack = $('.' + templateClasses.sectionBtnBack, $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 updateSelectedCriteriaBtn(templateClasses);\r\n });\r\n\r\n $sectionBtnBack.on('click', function () {\r\n $sectionBtnBack.closest('.' + templateClasses.dropdownItem).hasClass(templateClasses.dropdownItemOpened) ? $sectionBtnBack.closest('.' + templateClasses.dropdownItem).removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed) : null;\r\n });\r\n\r\n // click on dropdown button (to expand filter criterias on mobile devices)\r\n $dropdownItem.click(function(e){\r\n var index = $(this).index();\r\n\r\n $(this).find('.' + templateClasses.filterItem + ':gt(2)').addClass(templateClasses.filterItemIsHidden);\r\n\r\n if ($(this).hasClass(templateClasses.dropdownItemOpened)) {\r\n $(this).removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\r\n } else {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed).eq(index).removeClass(templateClasses.dropdownItemClosed).addClass(templateClasses.dropdownItemOpened);\r\n }\r\n\r\n e.stopPropagation();\r\n });\r\n\r\n $('.' + templateClasses.checkboxFilter).click(function(e){\r\n\r\n updateSelectedCriteriaBtn(templateClasses);\r\n\r\n e.stopPropagation();\r\n });\r\n\r\n $('.' + templateClasses.checkboxFilter + ' .' + templateClasses.closeBtn).on('click', function (e) {\r\n $('#collapsableProductFilters').collapse('toggle');\r\n });\r\n\r\n $(document).click(function(){\r\n $dropdownItem.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 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 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 updateSelectedCriteriaBtn(templateClasses);\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 updateSelectedCriteriaBtn(templateClasses);\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\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\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 dropdownItem: 'js-' + classRoot + '-dropdown-item',\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 $mainPanelTopBox.find('.' + templateClasses.selectedCriteria).removeClass('has-selected-criteria');\r\n\r\n if(currentNumberOfSelectedCheckboxes>0) {\r\n $mainPanelTopBox.find(\"button\").append(' (' + currentNumberOfSelectedCheckboxes + ')');\r\n $mainPanelTopBox.find('.' + templateClasses.selectedCriteria).addClass('has-selected-criteria-group');\r\n }\r\n\r\n updateSelectedCriteriaBtn(templateClasses);\r\n }\r\n\r\n function updateSelectedCriteriaBtn(templateClasses) {\r\n $.each($('.' + templateClasses.dropdownItem), function (index, item) {\r\n var $item = $(item);\r\n\r\n var currentNumberOfSelectedCheckboxesGroup = _.size($item.find('.' + templateClasses.criteriaCheckbox + ':checked'));\r\n\r\n if (currentNumberOfSelectedCheckboxesGroup > 0) {\r\n $item.hasClass('has-selected-criteria-group') ? '' : $item.addClass('has-selected-criteria-group');\r\n } else {\r\n $item.removeClass('has-selected-criteria-group');\r\n }\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 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, _);"],"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","dropdownItem","sortSelector","totalCount","domReady","filtersData","preAppliedFilterState","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","applyFilters","loadFilters","applyFiltersCallback","query","extend","getUrlParamsObj","location","search","action","pageId","BasePageID","block","message","get","done","responseData","showFilters","fail","errResp","JSON","parse","responseText","Message","statusText","type","notificationChannel","publish","notify","failedToLoadFilters","always","unblock","filterHash","foundFilter","prevFoundFilter","filtersFromUrl","filters","UCTemplated","precompiledSelectedCriteriaTemplate","sectionPrecompiledSelectedCriteriaTemplate","templateClasses","$selectedCriterias","$allSectionsSelectedCriterias","$dropdownItem","$filterItem","$sectionBtnBack","initialNumberOfSelectedCheckboxes","allItemIDs","siteScripts","converters","apply","filterIdx","FilterType","join","slideble","indexOf","Name","criteriaIdx","extractNumberFromString","filtersHtml","html","templateName","val","selectedCriteriaTemplate","UC","noAppliedFilters","hasAppliedFilters","openAfterFilterApplied","sectionSelectedCriterias","sectionBtnBack","sectionSelectedCriteriaCount","selectedCriterias","selectedCriteria","clearSelectedCriterias","dropdownItemClosed","dropdownItemOpened","dropdownItemDisabled","dropdownBtn","dropdownTitleBtn","filterItem","filterItemDisabled","filterItemIsHidden","criteriaCheckbox","criteriaLabel","$clearSelectedCriterias","$dropdownTitleBtn","addClass","click","removeClass","trigger","remove","updateSelectedCriteriaBtn","on","closest","e","index","eq","stopPropagation","collapse","document","currentNumberOfSelectedCheckboxes","size","$mainPanelTopBox","append","criteriaID","currentTarget","attr","selectedCriteriaIds","map","id","getSelectedCheckboxCriterias","difference","getCriteriasItems","pluck","updateOtherFilters","applySelectedCheckboxesFilter","subscribe","ignore","filterState","add","empty","appliedFilter","appliedCriterias","$sectionCriteriasContainer","$templateFilterItem","$dropdownBtn","$embdedSectionCriteriasContainer","appliedCriteria","replaceWith","$filterItemTemp","is","$mobileCloseBtn","change","onCheckboxFilterChange","range","step","isFloat","values","slide","onSliderFilterChange","event","savedFiltersFromLocalStorageJSON","preAppliedFilters","href","split","startsWith","decodeURIComponent","filterParts","splice","filterOrCriteriaName","findAndAddCriteria","findByName","isEmpty","getFromLocalStorage","setAppliedFilters","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","x","y","xi","yi","exists","j","itemsUnion","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","$item","mainPanelId","state","originalEvent","sort","sortBy","value","topic","window","jQuery"],"mappings":"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"}