{"version":3,"file":"ProductFilters.min.js","sources":["ProductFilters.js"],"sourcesContent":["(function (w, $, _) {\r\n 'use strict';\r\n\r\n const assetId = '~/Parts/Views/Product/ProductFilters/ProductFilters.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 (let 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\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 refreshChannelPrefix = 'frontend.productlist.refresh.' + (productListPageControlID || productListControlId);\r\n var listReadyChannelPrefix = 'frontend.productlist.ready.' + (productListPageControlID || productListControlId);\r\n var showOnlyInStock = false;\r\n var precompiledTemplate;\r\n\r\n var $filters, excludedItemsMap = {}, allItems, appliedFilters = {};\r\n var $mainPanel, $filtersContainer, $buttonsContainer, $resetButton, $applyButton;\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 applyBtn: 'js-uc' + controlId + '-apply-btn'\r\n };\r\n\r\n var domReady = false;\r\n var filtersData = null;\r\n var preAppliedFilterState = null;\r\n\r\n function loadFilters() {\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\r\n if (domReady) {\r\n showFilters(responseData);\r\n } else {\r\n filtersData = responseData;\r\n }\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) {\r\n var filters = data.filters;\r\n allItems = data.allItemIDs;\r\n\r\n if (!filters || !filters.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 // 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 $filtersContainer.removeClass(classes.noFiltersAvailable);\r\n $buttonsContainer.show();\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 function getFiltersFromFriendlyUrl(filterHash) {\r\n filterHash = filterHash.split('&')[0];\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\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 getAllFilterIncludedItems(clientId) {\r\n var excludedItems = excludedItemsMap[clientId];\r\n return _.difference(allItems, excludedItems);\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 };\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 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 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 switch (templateName) {\r\n case 'horizontal2':\r\n case 'v-accordion':\r\n var Template = templateName;\r\n var UC = 'uc' + controlId;\r\n var UCTemplated = UC + '-' + Template;\r\n var selectedCriteriaTemplate = '';\r\n var precompiledSelectedCriteriaTemplate = _.template(selectedCriteriaTemplate);\r\n\r\n // classes\r\n var templateClasses = {\r\n noAppliedFilters: UCTemplated + '_no-applied-filters',\r\n hasAppliedFilters: UCTemplated + '_has-applied-filters',\r\n enabledImmediateFiltering: UCTemplated + '_enabled-immediate-filtering',\r\n disabledImmediateFiltering: UCTemplated + '_disabled-immediate-filtering',\r\n\r\n selectedCriterias: 'js-' + UCTemplated + '-selected-criterias',\r\n selectedCriteria: 'js-' + UCTemplated + '-selected-criteria',\r\n clearSelectedCriterias: 'js-' + UCTemplated + '-clear-selected-criterias',\r\n applySelectedCriterias: 'js-' + UCTemplated + '-apply-selected-criterias',\r\n\r\n dropdownItem: 'js-' + UCTemplated + '-dropdown-item',\r\n dropdownItemClosed: UCTemplated + '-dropdown-item_closed',\r\n dropdownItemOpened: UCTemplated + '-dropdown-item_opened',\r\n dropdownItemDisabled: UCTemplated + '-dropdown-item_disabled',\r\n dropdownBtn: 'js-' + UCTemplated + '-dropdown-btn',\r\n dropdownBtnIcon: 'js-' + UCTemplated + '-dropdown-btn-icon',\r\n\r\n // filter item - wrapper for criteria\r\n filterItem: 'js-' + UCTemplated + '-filter-item',\r\n filterItemDisabled: UCTemplated + '-filter-item_disabled',\r\n\r\n criteria: 'js-' + UCTemplated + '-filter-criteria',\r\n criteriaCheckbox: 'js-' + UCTemplated + '-filter-criteria-checkbox',\r\n criteriaLabel: 'js-' + UCTemplated + '-filter-criteria-label',\r\n };\r\n\r\n // elements\r\n var $selectedCriterias = $('.' + templateClasses.selectedCriterias, $mainPanel);\r\n var $clearSelectedCriterias = $('.' + templateClasses.clearSelectedCriterias, $mainPanel);\r\n var $applySelectedCriterias = $('.' + templateClasses.applySelectedCriterias, $mainPanel);\r\n\r\n var $dropdownItem = $('.' + templateClasses.dropdownItem, $mainPanel);\r\n var $dropdownBtn = $('.' + templateClasses.dropdownBtn, $mainPanel);\r\n\r\n $mainPanel.addClass(UCTemplated);\r\n if (enableImmediateFiltering) {\r\n $mainPanel.addClass(templateClasses.enabledImmediateFiltering);\r\n } else {\r\n $mainPanel.addClass(templateClasses.disabledImmediateFiltering);\r\n }\r\n\r\n $resetButton.add($applyButton).hide(); // there are clones of the buttons in this template, so hide default buttons\r\n $clearSelectedCriterias.click(function (evt) {\r\n $resetButton.trigger('click');\r\n // close all opened items only at horizontal 2 template\r\n if (Template == 'v-accordion') {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\r\n }\r\n });\r\n\r\n if (!enableImmediateFiltering) {\r\n $applyButton.hide();\r\n $applySelectedCriterias.click(function (evt) {\r\n $applyButton.trigger('click');\r\n });\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\r\n if ($dropdownItem.hasClass(templateClasses.dropdownItemOpened)) {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\r\n } else {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemClosed).addClass(templateClasses.dropdownItemOpened);\r\n }\r\n\r\n // close another opened items only at horizontal 2 template\r\n if (Template == 'horizontal2') {\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\r\n // handle click on selected criteria\r\n // delegate click to attached checkbox\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 $filter.trigger('change');\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.empty();\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 $.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 $selectedCriterias.append(precompiledSelectedCriteriaTemplate({\r\n criteriaID: criteria.clientId,\r\n criteriaLabel: appliedFilter + ' < ' + appliedCriteria\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 // close all opened items only at horizontal 2 template\r\n if (Template == 'horizontal2') {\r\n $dropdownItem.removeClass(templateClasses.dropdownItemOpened).addClass(templateClasses.dropdownItemClosed);\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 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.removeClass(templateClasses.filterItemDisabled);\r\n } else {\r\n $filterItemTemp.addClass(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 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 break;\r\n\r\n case 'horizontal3':\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 sectionShowMoreCriteriasBtn: 'js-' + UCTemplated + '-section-show-more-criterias',\r\n sectionApplyCriteriasBtn: 'js-' + UCTemplated + '-section-apply-criterias',\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\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 $filterItem = $('.' + templateClasses.filterItem, $mainPanel);\r\n var $sectionApplyCriteriasBtn = $('.' + templateClasses.sectionApplyCriteriasBtn, $mainPanel);\r\n var $sectionShowMoreCriteriasBtn = $('.' + templateClasses.sectionShowMoreCriteriasBtn, $mainPanel);\r\n var initialNumberOfSelectedCheckboxes = 0;\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 $sectionApplyCriteriasBtn.on('click', function () {\r\n $applyButton.trigger('click');\r\n });\r\n\r\n $sectionShowMoreCriteriasBtn.on('click', function () {\r\n var $dropdownItem = $(this).closest('.' + templateClasses.dropdownItem);\r\n var $hidenListItems = $dropdownItem.find('.' + templateClasses.filterItem + '.' + templateClasses.filterItemIsHidden);\r\n $hidenListItems.removeClass(templateClasses.filterItemIsHidden);\r\n $(this).hide();\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 $sectionShowMoreCriteriasBtn.show();\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 $applyButton.trigger('click');\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 // 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\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 if ($(this).find('.' + templateClasses.filterItem).length < 4) {\r\n $(this).find('.' + templateClasses.sectionShowMoreCriteriasBtn).remove();\r\n }\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 break;\r\n }\r\n }\r\n\r\n (function startLoadingFilters() {\r\n var urlParams = location.href.split('#')[0];\r\n showOnlyInStock = $.getQueryStringParam(urlParams, 'instockonly_' + productListControlId) === \"true\";\r\n\r\n loadFilters();\r\n })();\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 $applyButton = $('.' + classes.applyBtn, $buttonsContainer);\r\n\r\n if (filtersData) {\r\n showFilters(filtersData);\r\n }\r\n\r\n $applyButton.click(onApplyButtonClick);\r\n $resetButton.click(onResetButtonClick);\r\n\r\n // Subscribe to popstate event\r\n $(w).on('popstate', onHistoryPopState);\r\n\r\n function onApplyButtonClick(evt) {\r\n evt.preventDefault();\r\n applyFilters();\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 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 setAppliedFilters(typeof (state.appliedFilters) !== 'undefined' ? state.appliedFilters : {});\r\n applyFilters(true, true);\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(refreshChannelPrefix,\r\n function (topic, refreshData) {\r\n if (refreshData &&\r\n typeof refreshData.showOnlyInStock === 'boolean' &&\r\n showOnlyInStock !== refreshData.showOnlyInStock) {\r\n showOnlyInStock = refreshData.showOnlyInStock;\r\n loadFilters();\r\n }\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","let","ctx","precompiledTemplate","$filters","allItems","$mainPanel","$filtersContainer","$buttonsContainer","$resetButton","$applyButton","controlId","productListControlId","productListPageControlID","filtersTemplateContent","labels","currencyCode","enableImmediateFiltering","rememberChoiceFor","slideFilteringFor","enableFiltersURLSupport","handlerUrl","R","pubSub","PubSub","filtersChannelPrefix","staticfilterChannelPrefix","refreshChannelPrefix","listReadyChannelPrefix","showOnlyInStock","excludedItemsMap","appliedFilters","savedFiltersLocalStorageKey","classes","noFiltersAvailable","template","filtersContainer","buttonsContainer","filter","checkboxFilter","sliderFilter","sliderContainer","minValue","maxValue","itemsCount","resetBtn","applyBtn","domReady","filtersData","preAppliedFilterState","loadFilters","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","data","filterHash","foundFilter","prevFoundFilter","filtersFromUrl","filters","allItemIDs","length","siteScripts","converters","apply","each","filterIdx","clientId","FilterType","join","slideble","indexOf","Name","Criterias","criteria","criteriaIdx","extractNumberFromString","filtersHtml","html","templateName","val","selectedCriteriaTemplate","UCTemplated","Template","precompiledSelectedCriteriaTemplate","$selectedCriterias","templateClasses","noAppliedFilters","hasAppliedFilters","enabledImmediateFiltering","disabledImmediateFiltering","selectedCriterias","selectedCriteria","clearSelectedCriterias","applySelectedCriterias","dropdownItem","dropdownItemClosed","dropdownItemOpened","dropdownItemDisabled","dropdownBtn","dropdownBtnIcon","filterItem","filterItemDisabled","criteriaCheckbox","criteriaLabel","$clearSelectedCriterias","$applySelectedCriterias","$dropdownItem","$dropdownBtn","addClass","add","hide","click","evt","trigger","removeClass","on","$self","this","closest","hasClass","criteriaID","currentTarget","$criteriaCheckbox","$filter","attr","remove","subscribe","ignore","filterState","empty","appliedFilter","appliedCriterias","find","index","appliedCriteria","append","size","$filterItemTemp","is","sectionPrecompiledSelectedCriteriaTemplate","openAfterFilterApplied","sectionSelectedCriterias","sectionShowMoreCriteriasBtn","sectionApplyCriteriasBtn","filterItemIsHidden","$allSectionsSelectedCriterias","$filterItem","$sectionApplyCriteriasBtn","$sectionShowMoreCriteriasBtn","initialNumberOfSelectedCheckboxes","currentNumberOfSelectedCheckboxes","show","filterData","selectedCriteriaIds","map","id","getSelectedCheckboxCriterias","difference","getCriteriasItems","pluck","updateOtherFilters","applyFilters","$sectionCriteriasContainer","$templateFilterItem","$embdedSectionCriteriasContainer","replaceWith","sliderValues","change","onCheckboxFilterChange","numericCriterias","getNumericCriterias","min","max","slider","range","step","isFloat","values","slide","onSliderFilterChange","event","updateSliderInfo","savedFiltersFromLocalStorageJSON","preAppliedFilters","href","split","startsWith","decodeURIComponent","filterParts","splice","filterOrCriteriaName","findAndAddCriteria","findByName","isEmpty","getFromLocalStorage","setAppliedFilters","e","console","error","urlItem","filterValue","parseFloat","replace","foundCriteria","push","filtersOrCriterias","name","item","preparedName","toLowerCase","ui","handle","selectedCriteriasItems","getSelectedSliderCriterias","$appliedFilter","not","availableItems","currentFilterName","$currentSlider","allItemsExcludedByOtherFilters","reduce","allExcludedItems","excludedMapItem","excludedByFilterName","union","$criteriaCheckboxCounter","Items","text","prop","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","removeFromLocalStorage","urlParams","getQueryStringParam","mainPanelId","preventDefault","$filterSlider","state","originalEvent","topic","refreshData","window","jQuery"],"mappings":"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"}