{"version":3,"sources":["webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/global/Refinement.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/NoSearchResultsForm.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/ProductListingMgr.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/RefinementMenuItem.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/RefinementsPanel.js","webpack:///./cartridges/app_storefront_widgets/cartridge/client/default/js/widgets/search/RefinementsPanelToggle.js"],"names":["keyCode","Object","freeze","RETURN","SPACE","Widget","Refinement","prefs","attrRefinement","preventAction","toggleCheck","selected","uncheck","check","ref","attr","init","checked","attrId","value","attrValue","min","valueFrom","max","valueTo","focus","changeState","skipCurrentItemDetermination","param","emit","isAttributeRefinement","hasAttr","handleClick","handleKeydown","_","event","preventEventActions","preventDefault","stopPropagation","BasicForm","NoSearchResultsForm","classesClearEnabled","handleSubmit","_el","val","handleInput","toggleClearButton","isInputHasValue","toggleClass","clearInput","searchInput","searchInputField","get","Tabs","ProductListingMgr","classesActiveSection","classesBusy","loadMoreBlock","loadPrevBlock","productProgressIndicator","contentProgressIndicator","loadMoreContentBlock","accessibilityAlerts","showAjaxUrl","showUrl","isScrollOnload","firstPage","initEvents","handleHistory","scrollWindowTo","updateByUrl","url","busy","getContentByUrl","then","response","empty","render","undefined","catch","handleNoResult","finally","unbusy","isReplace","history","state","ajaxUrl","historyURL","document","location","hash","window","replaceState","pushState","updateView","button","updateURL","data","refinementSelected","alertMessage","filterremoved","filtersapplied","accessibilityAlert","updateGrid","select","selectedSorting","getSelectedOptions","sortingapplied","loadMore","href","remove","loadChunk","append","productlistupdated","loadPrev","prepend","loadMoreContent","successCb","console","error","appendParamToURL","message","setTimeout","eventBus","addClass","removeClass","skipRefinements","focused","getById","elemet","items","ProductTile","getConstructor","some","item","gridItem","ev","_target","PopStateEvent","hashChangedOnly","handleUrlChange","updateUrl","previousstatereverted","popup","showModal","ESC","PAGEUP","PAGEDOWN","END","HOME","UP","DOWN","LEFT","RIGHT","ListAccessibility","RefinementMenuItem","preventShowSubmenu","submenu","currentUrl","refinebarUrl","title","refinementId","hasSubmenu","has","defineItems","isSubmenuOpen","getRefinements","refinement","filter","hasCheckedRefinements","uncheckRefinements","forEach","clearRefinements","hideRefinementControls","setFocusToFirstItem","markSubmenuOpened","hasOpenedSubmenu","openMenu","itemName","submenuHTML","submenuElement","innerHTML","panelName","htmlMarkup","showRefinementControls","showBackButton","show","toggle","showApply","hide","setSubmenuTitle","submenuTitle","setText","setSubmenuId","setSubmenuHTML","closeSubmenu","parseUrlRefinementParameter","paramMap","getUrlParams","refinementParameterMap","keys","paramKey","includes","replace","split","updateRefinementControls","currentItem","setFocusToCurrentItem","applyChange","values","counter","type","push","pmin","pmax","length","key","Array","isArray","join","setFocusToLastItem","setFocusToPreviousItem","setFocusToNextItem","TAB","RefinementsPanel","classesBackdropActive","classesDialogOpen","classesActiveLevel","itemSwitchTimeout","on","updatePanel","onDestroy","timeout","getJSONByUrl","res","count","removeParamFromURL","appendParamsToUrl","nextLevel","subpanel","previousLevel","openPanel","getRefinementsModel","model","focusToLastItem","dialogMgr","openDialog","closePanel","closeDialog","refinementsModel","getText","trim","JSON","parse","e","closeOnBackdrop","target","cancel","onRefresh","RefinementsPanelToggle","showPanel"],"mappings":"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","file":"search.widgets.bundle.js","sourcesContent":["const keyCode = Object.freeze({\n RETURN: 13,\n SPACE: 32\n});\n\n/**\n * @typedef {typeof import('widgets/Widget').default} Widget\n */\n\n/**\n * @description Base Refinement implementation\n * @param {Widget} Widget Base widget for extending\n * @returns {typeof Refinement} RefinementMenuItem widget\n */\nexport default function (Widget) {\n /**\n * @class Refinement\n * @augments Widget\n * @classdesc Rifinement widget, which could be used in refinement panel\n * Represents Refinement component with next features:\n * 1. Support keyboard navigation for accessibility\n * 2. Support all typo of refinement\n * 3. Use \"update\" and \"uncheck\" event to handle changes used parent methods\n * @property {string} data-widget - Widget name `refinement`\n * @property {string} data-widget-event-click - Event listener to call Parent's widget method\n * @property {string} data-event-click - Event listener method `handleClick` for click event on widget\n * @property {string} data-attr-id - attribute id\n * @property {string} data-attr-value - attribute value for on price refinement\n * @property {string} data-value-from - from value for price refinement\n * @property {string} data-value-to - to value for price refinement\n * @property {string} data-event-keydown - keydown handler\n * @property {string} data-widget-event-update=\"updateRefinementControls\"\n * @property {string} data-widget-event-uncheck=\"uncheckRefinements\"\n * @property {string} data-event-click - click handler\n * @property {string} data-checked - checked flag, used for initialization\n * @property {string} [data-prevent-action=false] - prevent any action flag\n * @category widgets\n * @subcategory search\n * @example\n * \n * \n * {{displayValue}} {{${'#'}hitCount}}({{hitCount}}){{/hitCount}}\n * \n * \n */\n class Refinement extends Widget {\n /**\n * @description Preferences\n * @returns {object} Preferences object\n */\n prefs() {\n return {\n attrRefinement: 'data-refinement',\n preventAction: false,\n ...super.prefs()\n };\n }\n\n /**\n * @description Toggle check status\n * @returns {void}\n */\n toggleCheck() {\n if (this.selected) {\n this.uncheck();\n } else {\n this.check();\n }\n }\n\n /**\n * @description Check\n * @returns {void}\n */\n check() {\n this.ref('self').attr('aria-checked', 'true');\n this.selected = true;\n }\n\n /**\n * @description Uncheck\n * @returns {void}\n */\n uncheck() {\n this.ref('self').attr('aria-checked', 'false');\n this.selected = false;\n }\n\n /**\n * @description Widget logic initialization\n * @returns {void}\n */\n init() {\n this.selected = this.prefs().checked;\n this.attrId = this.prefs().attrId;\n this.value = this.prefs().attrValue;\n this.min = this.prefs().valueFrom;\n this.max = this.prefs().valueTo;\n }\n\n /**\n * @description Focus\n * @returns {void}\n */\n focus() {\n return this.ref('self').focus();\n }\n\n /**\n * @description Change state\n * @param {boolean} [skipCurrentItemDetermination] Skip Current Item Determination\n * @returns {void}\n */\n changeState(skipCurrentItemDetermination) {\n const param = {};\n\n if (this.prefs().preventAction) {\n return;\n }\n\n if (this.attrId === 'price') {\n this.emit('uncheck');\n this.check();\n } else {\n this.toggleCheck();\n }\n\n param.skipCurrentItemDetermination = skipCurrentItemDetermination;\n\n this.emit('update', param);\n }\n\n /**\n * @description Is Attribute Refinement\n * @returns {boolean} Attribute refinement flag\n */\n isAttributeRefinement() {\n return this.ref('self').hasAttr(this.prefs().attrRefinement);\n }\n\n /**\n * @description Handle Click\n */\n handleClick() {\n this.changeState(true);\n }\n\n /**\n * @description Keydown Event handler\n * @param {HTMLElement} _ Source of keydown event\n * @param {KeyboardEvent} event Event object\n * @returns {void}\n */\n handleKeydown(_, event) {\n let preventEventActions = false;\n\n switch (event.keyCode) {\n case keyCode.RETURN:\n case keyCode.SPACE:\n this.changeState();\n preventEventActions = true;\n break;\n\n default:\n break;\n }\n\n if (preventEventActions) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n return Refinement;\n}\n","/**\n * @typedef {ReturnType} BasicForm\n * @typedef {InstanceType} refElement\n */\n\n/**\n * @description Base NoSearchResultsForm implementation\n *
This is simplified form with no validation rules applied\n *
Has an ability to clear user input bu pressing button\n * @param {BasicForm} BasicForm Base widget for extending\n * @returns {typeof NoSearchResultsForm} NoSearchResultsForm class\n */\nexport default function (BasicForm) {\n /**\n * @class NoSearchResultsForm\n * @augments BasicForm\n * @classdesc NoSearchResultsForm widget implementation\n * @property {string} data-widget - Widget name \"noSearchResultsForm\"\n * @property {string} data-classes-clear-enabled - class to toggle on clear input button\n * @example\n * // use this code to display widget\n * \n * ... form contents\n * \n * \n * ... submit button\n * \n */\n class NoSearchResultsForm extends BasicForm {\n prefs() {\n return {\n classesClearEnabled: 'm-visible',\n ...super.prefs()\n };\n }\n\n /**\n * @description Submit form simplified handler\n * @param {refElement} _el event source element\n * @param {Event} event event instance\n */\n handleSubmit(_el, event) {\n if (!this.ref('input').val()) {\n event.preventDefault();\n }\n }\n\n handleInput() {\n this.toggleClearButton(this.ref('input').val());\n }\n\n toggleClearButton(isInputHasValue) {\n this.ref('clearButton').toggleClass(this.prefs().classesClearEnabled, isInputHasValue);\n }\n\n clearInput() {\n const searchInput = this.ref('input');\n searchInput.val('');\n\n const searchInputField = searchInput.get();\n if (searchInputField) {\n searchInputField.focus();\n }\n\n this.toggleClearButton(false);\n }\n }\n\n return NoSearchResultsForm;\n}\n","import { get } from 'widgets/toolbox/util';\n\nconst keyCode = Object.freeze({\n RETURN: 13\n});\n\n// TODO: JSDoc for all methods\n// TODO: implement accordion https://www.w3.org/TR/wai-aria-practices/#accordion\n// or https://www.w3.org/TR/wai-aria-practices/#disclosure should be implemented on filter sections.\n// PLP - some filters expanded, some collapsed\n// TODO: notify blind user about all not/applied changes with alter messages\n// TODO: freeze loaded sections during update with aria-busy\n// TODO: investigate proper implementation of aria-live region for updated sections\n// TODO: keep track that focus stays on the same place during PLP update\n// TODO: loadmore in session storage (back button from PDP issue)\nimport { scrollWindowTo } from 'widgets/toolbox/scroll';\nimport { getContentByUrl } from 'widgets/toolbox/ajax';\nimport {\n appendParamToURL\n} from 'widgets/toolbox/util';\n\n/**\n * @typedef {ReturnType} Tabs\n * @typedef {ReturnType} ProductTile\n * @typedef {ReturnType} InputSelect\n * @typedef {InstanceType} refElement\n * @typedef {InstanceType} widget\n */\n\n/**\n * @description Base ProductListingMgr implementation\n * @param {Tabs} Tabs Base widget for extending\n * @returns {typeof ProductListingMgr} PLP Manager\n */\nexport default function (Tabs) {\n /**\n * @class ProductListingMgr\n * @augments Tabs\n * @classdesc Represents Product Listing Page with specific logic for\n * updating product grid using product refinement, sorting and paging\n * @property {string} data-show-url Search show url\n * @property {string} data-show-ajax-url Search show AJAX url\n * @property {string} data-load-more-block Block with a button `Load more` for products\n * @property {string} data-load-more-prev Block with a button `Load previous` for products\n * @property {string} data-product-progress-indicator - reference element with search progress indicator for products search\n * @property {string} data-content-progress-indicator - reference element with search progress indicator for content search\n * @property {string} data-load-more-content-block - Block with a button `Load more` for content\n * @property {object} data-accessibility-alerts - Accessibility alerts messages for different user actions\n * @property {boolean} data-first-page - First page flag\n * Possible values are: `filtersapplied`, `filterremoved`, `sortingapplied`, `productlistupdated`, `addedtowishlist`, `previousstatereverted`\n * @example\n * // use this code to display widget\n * \n * .... product list contents\n * \n */\n class ProductListingMgr extends Tabs {\n prefs() {\n return {\n classesActiveSection: 'm-expanded',\n classesBusy: 'm-busy',\n loadMoreBlock: 'loadMoreBlock',\n loadPrevBlock: 'loadPrevBlock',\n productProgressIndicator: 'productProgressIndicator',\n contentProgressIndicator: 'contentProgressIndicator',\n loadMoreContentBlock: 'loadMoreContentBlock',\n accessibilityAlerts: {},\n showAjaxUrl: '',\n showUrl: '',\n isScrollOnload: true,\n firstPage: true,\n ...super.prefs()\n };\n }\n\n /**\n * @description Init widget logic\n * @returns {void}\n */\n init() {\n super.init();\n this.initEvents();\n this.handleHistory(true);\n\n if (this.prefs().isScrollOnload && !this.prefs().firstPage) {\n scrollWindowTo(this.ref('grid').get(), true);\n }\n }\n\n /**\n * @param {string} url Update URL\n * @param {refElement} [ref] Reference element\n * @param {boolean} [handleHistory] Handle history flag\n * @returns {Promise} result\n */\n updateByUrl(url, ref, handleHistory) {\n this.busy();\n return getContentByUrl(url)\n .then(response => {\n if (typeof response === 'string') {\n this.ref('productGrid').empty();\n this.render(undefined, undefined, ref || this.ref('self'), response)\n .then(() => {\n if (handleHistory) {\n this.handleHistory();\n scrollWindowTo(this.ref('grid').get(), true);\n }\n });\n }\n }).catch(()=> {\n this.handleNoResult();\n })\n .finally(() => {\n this.unbusy();\n });\n }\n\n /**\n * @description Handle History\n * @param {boolean} [isReplace] Replace flag\n * @param {object} [history] history object\n */\n handleHistory(isReplace = false, history) {\n const state = {\n ajaxUrl: history ? history.showAjaxUrl : this.prefs().showAjaxUrl\n };\n let historyURL = history ? history.showUrl : this.prefs().showUrl;\n\n if (document.location.hash) {\n historyURL += document.location.hash;\n }\n\n if (isReplace) {\n window.history.replaceState(state, '', historyURL);\n } else {\n window.history.pushState(state, '', historyURL);\n }\n }\n\n /**\n * @description Update View\n * @param {refElement|widget} button Target element\n * @returns {void}\n */\n updateView(button) {\n const updateURL = button.data('href');\n const refinementSelected = button.data('checked');\n const alertMessage = refinementSelected\n ? this.prefs().accessibilityAlerts.filterremoved\n : this.prefs().accessibilityAlerts.filtersapplied;\n\n this.updateByUrl(updateURL, undefined, true)\n .then(() => this.accessibilityAlert(alertMessage));\n }\n\n /**\n * @description Update Grid\n * @param {InstanceType} select Target element\n * @returns {void}\n */\n updateGrid(select) {\n const selectedSorting = select.getSelectedOptions();\n if (selectedSorting) {\n const url = selectedSorting.data('url');\n this.updateByUrl(url, undefined, true)\n .then(() => this.accessibilityAlert(this.prefs().accessibilityAlerts.sortingapplied));\n }\n }\n\n /**\n * @description Load more products\n * @param {refElement} button Target element\n * @returns {void}\n */\n loadMore(button) {\n const href = button.data('show-url');\n const history = {\n showUrl: button.attr('href'),\n showAjaxUrl: button.data('show-ajax-url')\n };\n let url = '';\n\n if (typeof href === 'string') {\n url = href;\n }\n\n this.ref('loadMoreBlock').remove();\n this.ref('productProgressIndicator').remove();\n this.loadChunk(url, response => {\n if (typeof response === 'string') {\n this.ref('productGrid').append(response);\n this.accessibilityAlert(this.prefs().accessibilityAlerts.productlistupdated);\n }\n }, true, history);\n }\n\n /**\n * @description Load previous products\n * @param {refElement} button Target element\n * @returns {void}\n */\n loadPrev(button) {\n const href = button.data('show-url');\n const history = {\n showUrl: button.attr('href'),\n showAjaxUrl: button.data('show-ajax-url')\n };\n let url = '';\n\n if (typeof href === 'string') {\n url = href;\n }\n\n this.ref('loadPrevBlock').remove();\n this.loadChunk(url, response => {\n if (typeof response === 'string') {\n this.ref('productGrid').prepend(response);\n this.accessibilityAlert(this.prefs().accessibilityAlerts.productlistupdated);\n }\n }, true, history);\n }\n\n /**\n * @description Load more content\n * @param {refElement} button Target element\n * @returns {void}\n */\n loadMoreContent(button) {\n const href = button.attr('href');\n let url = '';\n\n if (typeof href === 'string') {\n url = href;\n }\n\n this.ref('loadMoreContentBlock').remove();\n this.ref('contentProgressIndicator').remove();\n this.loadChunk(url, response => {\n if (typeof response === 'string') {\n this.ref('contentGrid').append(response);\n this.accessibilityAlert(this.prefs().accessibilityAlerts.productlistupdated);\n }\n }, false);\n }\n\n /**\n * @description Loads chunk of data and executes callback. Data might be either products or content\n * @param {string} url load chunk url\n * @param {(arg: Response) => void} successCb success callback to be called after chunk was loaded with response as an argument\n * @param {boolean} handleHistory do we need to handle history change after chunk loaded\n * @param {object} [history] history object\n */\n loadChunk(url, successCb, handleHistory, history) {\n if (!url) {\n console.error('Somithing wrong with target URL');\n } else {\n this.busy();\n getContentByUrl(\n appendParamToURL(url, 'selectedUrl', url)\n ).then(response => {\n successCb(response);\n\n if (handleHistory) {\n this.handleHistory(true, history);\n }\n }).finally(() => {\n this.unbusy();\n });\n }\n }\n\n /**\n * @description Show appropriate Global Alert for page changes\n * @param {string} message - alert message\n * @returns {void}\n */\n accessibilityAlert(message) {\n // We need to show alerts with delay to not overlap with other big changes on the page\n setTimeout(() => this.eventBus().emit('alert.show', { accessibilityAlert: message }), 400);\n }\n\n /**\n * @description Busy\n * @returns {void}\n */\n busy() {\n this.ref('productGrid').addClass(this.prefs().classesBusy).attr('aria-busy', 'true');\n this.ref('contentGrid').addClass(this.prefs().classesBusy).attr('aria-busy', 'true');\n }\n\n /**\n * @description Unbusy\n * @returns {void}\n */\n unbusy() {\n this.ref('productGrid').removeClass(this.prefs().classesBusy).attr('aria-busy', false);\n this.ref('contentGrid').removeClass(this.prefs().classesBusy).attr('aria-busy', false);\n }\n\n /**\n * @description Skip refinements and focus first element in product grid on \"Enter\" keydown event\n * @param {HTMLElement} _ Source of keydown event\n * @param {KeyboardEvent} event Event object\n */\n skipRefinements(_, event) {\n let preventEventActions = false;\n let focused = false;\n\n switch (event.keyCode) {\n case keyCode.RETURN:\n scrollWindowTo(this.ref('productGrid').get(), true);\n this.getById('firstTile', elemet => {\n focused = true;\n elemet.focus();\n });\n if (!focused && this.items) {\n const ProductTile = /** @type {ProductTile} */(this.getConstructor('productTile'));\n\n this.items.some(item => {\n if (item instanceof ProductTile && item.prefs().gridItem) {\n item.focus();\n\n return true;\n }\n\n return false;\n });\n }\n\n preventEventActions = true;\n break;\n\n default:\n break;\n }\n\n if (preventEventActions) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n\n /**\n * @description Init Events\n * @returns {void}\n */\n initEvents() {\n this.ev('popstate', (_target, event) => {\n if (event instanceof PopStateEvent && event.state) {\n const hashChangedOnly = get(event, 'state.hashChangedOnly');\n if (hashChangedOnly) {\n this.handleUrlChange(false);\n return;\n }\n\n let updateUrl = get(event, 'state.ajaxUrl') || window.location.href;\n updateUrl = appendParamToURL(updateUrl, 'history', 'true');\n\n this.updateByUrl(updateUrl, undefined, false)\n .then(() => {\n this.handleUrlChange(false);\n const accessibilityAlert = this.prefs().accessibilityAlerts.previousstatereverted;\n this.eventBus().emit('alert.show', {\n accessibilityAlert\n });\n });\n }\n }, window);\n }\n\n /**\n * @description No Result Combination handler\n * @returns {void}\n */\n handleNoResult() {\n this.getById('noResultPopup', popup => popup.showModal());\n }\n }\n\n return ProductListingMgr;\n}\n","import {\n appendParamToURL,\n getUrlParams\n} from 'widgets/toolbox/util';\n\nconst keyCode = Object.freeze({\n ESC: 27,\n PAGEUP: 33,\n PAGEDOWN: 34,\n END: 35,\n HOME: 36,\n UP: 38,\n DOWN: 40,\n LEFT: 37,\n RIGHT: 39\n});\n\n/**\n * @typedef {ReturnType } ListAccessibility\n * @typedef {ReturnType } Refinement\n * @typedef {InstanceType } refinement\n */\n\n/**\n * @description Base RefinementMenuItem implementation\n * @param {ListAccessibility} ListAccessibility Base widget for extending\n * @returns {typeof RefinementMenuItem} RefinementMenuItem widget\n */\nexport default function (ListAccessibility) {\n /**\n * @class RefinementMenuItem\n * @augments ListAccessibility\n * @classdesc Represents Refinement Menu Item with specific logic for submenus, keyboard navigation.\n * Represents RefinementMenuItem component with next features:\n * 1. Support keyboard navigation for accessibility\n * 2. Show control button according to selected refinements\n * 3. Build update url for refinement panel\n *\n * Should contain {@link Refinement} widget inside:\n * @property {string} data-widget - Widget name `refinementMenuItem`\n * @property {string} data-event-keydown - Event listener for `handleKeydown` method\n * @property {boolean} [data-prevent-show-submenu=false] - prevent showing submenu\n * @property {boolean} [data-prevent-refinement-selected=false] - prevent showing submenu\n * @property {string} data-refinebar-url - refine bar url\n * @property {string} data-widget-event-previous - Previous panel handler\n * @property {string} data-update-url - update url\n * @category widgets\n * @subcategory search\n * @example\n * \n * \n *
\n * \n * {{displayName}}\n * \n *\n * \n * {{${'#'}isCategoryRefinement}}\n * {{${'#'}category}}\n * {{category.name}}\n * {{/category}}\n * {{/isCategoryRefinement}}\n * {{^isCategoryRefinement}}\n * {{selectedFiltersText}}\n * {{/isCategoryRefinement}}\n *
\n * \n * \n * \n * \n * \n */\n class RefinementMenuItem extends ListAccessibility {\n /**\n * @description Preferences\n * @returns {object} Preferences object\n */\n prefs() {\n return {\n preventShowSubmenu: false,\n refinementSelected: false,\n submenu: 'submenu',\n updateUrl: '',\n currentUrl: '',\n refinebarUrl: '',\n title: '',\n refinementId: '',\n ...super.prefs()\n };\n }\n\n /**\n * @description Has submenu\n * @returns {boolean} Return true if submenu exist\n */\n hasSubmenu() {\n return this.has(this.prefs().submenu) && !this.prefs().preventShowSubmenu;\n }\n\n /**\n * @description Initialize widget logic\n * @returns {void}\n */\n init() {\n this.defineItems();\n this.isSubmenuOpen = false;\n }\n\n /**\n * @description Initialize widget logic\n * @returns {Array} Array of refinement widgets\n */\n getRefinements() {\n const Refinement = /** @type {Refinement} */(this.getConstructor('refinement'));\n\n let refinement = [];\n\n if (this.items) {\n refinement = this.items.filter((item) => {\n if (item instanceof Refinement) {\n return item.isAttributeRefinement();\n }\n\n return false;\n });\n }\n\n return refinement;\n }\n\n /**\n * @description Has Checked Refinements\n * @returns {boolean} Has Checked Refinements Flag\n */\n hasCheckedRefinements() {\n return this.getRefinements().some((refinement) => refinement.selected);\n }\n\n /**\n * @description Uncheck Refinements\n * @returns {void}\n */\n uncheckRefinements() {\n this.getRefinements().forEach((refinement) => {\n refinement.uncheck();\n });\n }\n\n /**\n * @description Clear Refinements\n * @returns {void}\n */\n clearRefinements() {\n this.uncheckRefinements();\n this.hideRefinementControls(true);\n this.defineItems();\n this.setFocusToFirstItem();\n }\n\n /**\n * @description Mark Submenu Opened\n * @returns {void}\n */\n markSubmenuOpened() {\n this.isSubmenuOpen = true;\n this.ref('self').attr('aria-expanded', 'true');\n }\n\n /**\n * @description Has opened submenu\n * @returns {boolean|undefined} Return true if submenu opened\n */\n hasOpenedSubmenu() {\n return this.isSubmenuOpen;\n }\n\n /**\n * @description Open next menu level if exist\n * @returns {void}\n */\n openMenu() {\n if (this.hasSubmenu()) {\n const itemName = this.prefs().title;\n let submenuHTML;\n\n this.has(this.prefs().submenu, (submenu) => {\n const submenuElement = submenu.get();\n\n if (submenuElement) {\n submenuHTML = submenuElement.innerHTML;\n }\n });\n this.eventBus().emit('refinement.panel.next.level', {\n panelName: itemName,\n refinementId: this.prefs().refinementId,\n htmlMarkup: submenuHTML,\n showRefinementControls: this.prefs().refinementSelected\n });\n }\n }\n\n /**\n * @description Show Refinement Controls\n * @param {boolean} [showBackButton=false] - Is back button should be shown\n * @returns {void}\n */\n showRefinementControls(showBackButton = false) {\n this.getById('clearBtn', (button) => button.show());\n this.getById('applyBtn', (button) => button.toggle(!showBackButton));\n this.getById('backBtn', (button) => button.toggle(showBackButton));\n }\n\n /**\n * @description Hide Refinement Controls\n * @param {boolean} [showApply] Show Apply button flag\n * @returns {void}\n */\n hideRefinementControls(showApply) {\n this.getById('clearBtn', (button) => button.hide());\n\n if (showApply) {\n this.getById('applyBtn', (button) => button.show());\n this.getById('backBtn', (button) => button.hide());\n } else {\n this.getById('applyBtn', (button) => button.hide());\n this.getById('backBtn', (button) => button.show());\n }\n }\n\n /**\n * @description Set Submenu Title\n * @param {string} submenuTitle Submenu Title\n * @returns {void}\n */\n setSubmenuTitle(submenuTitle) {\n this.has('title', (submenu) => {\n submenu.setText(submenuTitle);\n });\n this.ref('self').attr('aria-label', submenuTitle);\n }\n\n /**\n * @description Set Submenu id attribute to reference to it from aria-owns\n * @param {string} refinementId refinement id\n * @returns {void}\n */\n setSubmenuId(refinementId) {\n this.ref('self').attr('id', 'submenu-' + refinementId);\n }\n\n /**\n * @description Set Submenu HTML\n * @param {string} submenuHTML Submenu HTML\n * @returns {void}\n */\n setSubmenuHTML(submenuHTML) {\n this.has(this.prefs().submenu, (submenu) => {\n const submenuElement = submenu.get();\n\n if (submenuElement) {\n submenuElement.innerHTML = submenuHTML;\n }\n });\n }\n\n /**\n * @description Click Event handler\n * @param {HTMLElement} _ Source of keydown event\n * @param {Event} event Event object\n */\n handleClick(_, event) {\n if (this.hasSubmenu()) {\n event.preventDefault();\n this.openMenu();\n }\n }\n\n /**\n * @description Close Submenu\n * @returns {void}\n */\n closeSubmenu() {\n this.eventBus().emit('refinement.panel.previous.level');\n this.ref('self').attr('aria-expanded', 'false');\n this.isSubmenuOpen = false;\n }\n\n /**\n * @description Parse Url Refinement Parameter\n * @returns {void}\n */\n parseUrlRefinementParameter() {\n /**\n * @type {object}\n */\n const paramMap = getUrlParams(this.prefs().updateUrl || this.prefs().currentUrl);\n\n this.refinementParameterMap = {};\n\n Object.keys(paramMap).forEach((paramKey) => {\n if (this.refinementParameterMap) {\n if (paramKey.includes('prefn')) {\n this.refinementParameterMap[paramMap[paramKey]] = paramMap[paramKey.replace('prefn', 'prefv')].split('|');\n } else if (!paramKey.includes('prefv')) {\n this.refinementParameterMap[paramKey] = paramMap[paramKey];\n }\n }\n });\n }\n\n /**\n * @description Update Refinement Controls\n * @returns {void}\n */\n updateRefinementControls() {\n if (this.hasCheckedRefinements()) {\n this.showRefinementControls();\n } else {\n this.hideRefinementControls(true);\n }\n\n this.defineItems(this.currentItem);\n\n this.setFocusToCurrentItem();\n }\n\n /**\n * @description Apply change\n */\n applyChange() {\n const values = [];\n let url = this.prefs().refinebarUrl;\n let counter = 1;\n let type;\n let min;\n let max;\n\n this.getRefinements().forEach((refinement) => {\n type = refinement.attrId;\n\n if (refinement.selected) {\n if (type === 'price') {\n min = refinement.min;\n max = refinement.max;\n } else {\n values.push(refinement.value);\n }\n }\n });\n\n if (this.refinementParameterMap) {\n if (type === 'price') {\n if (max) {\n this.refinementParameterMap.pmin = min;\n this.refinementParameterMap.pmax = max;\n } else {\n delete this.refinementParameterMap.pmin;\n delete this.refinementParameterMap.pmax;\n }\n } else if (values.length) {\n this.refinementParameterMap[type] = values;\n } else {\n delete this.refinementParameterMap[type];\n }\n\n Object.keys(this.refinementParameterMap).forEach((key) => {\n if (this.refinementParameterMap && !['start', 'sz'].includes(key)) {\n if (Array.isArray(this.refinementParameterMap[key])) {\n url = appendParamToURL(url, 'prefn' + counter, key);\n url = appendParamToURL(url, 'prefv' + counter, this.refinementParameterMap[key].join('|'));\n counter++;\n } else {\n url = appendParamToURL(url, key, this.refinementParameterMap[key]);\n }\n }\n });\n\n this.eventBus().emit('refinement.panel.update', { url });\n }\n }\n\n /**\n * @description Keydown Event handler\n * @param {HTMLElement} _ Source of keydown event\n * @param {KeyboardEvent} event Event object\n */\n handleKeydown(_, event) {\n let preventEventActions = false;\n\n if (!this.hasOpenedSubmenu()) {\n return;\n }\n\n switch (event.keyCode) {\n case keyCode.LEFT:\n this.closeSubmenu();\n preventEventActions = true;\n\n break;\n\n case keyCode.PAGEUP:\n case keyCode.HOME:\n this.setFocusToFirstItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.PAGEDOWN:\n case keyCode.END:\n this.setFocusToLastItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.UP:\n this.setFocusToPreviousItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.DOWN:\n this.setFocusToNextItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.RIGHT:\n preventEventActions = true;\n\n break;\n\n default:\n break;\n }\n\n if (preventEventActions) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n return RefinementMenuItem;\n}\n","import { dialogMgr } from 'widgets/toolbox/dialogMgr';\nimport { timeout } from 'widgets/toolbox/util';\nimport { getJSONByUrl } from 'widgets/toolbox/ajax';\nimport {\n appendParamsToUrl,\n getUrlParams,\n removeParamFromURL\n} from 'widgets/toolbox/util';\n\nconst keyCode = Object.freeze({\n RETURN: 13,\n SPACE: 32,\n TAB: 9,\n DOWN: 40,\n UP: 38,\n RIGHT: 39,\n PAGEUP: 33,\n PAGEDOWN: 34,\n END: 35,\n HOME: 36\n});\n\n/**\n * @typedef {ReturnType } ListAccessibility\n * @typedef {InstanceType } RefElement\n */\n\n/**\n * @description Base RefinementsPanel implementation\n * @param {ListAccessibility} ListAccessibility Base widget for extending\n * @returns {typeof RefinementsPanel} Refinements Panel class\n */\nexport default function (ListAccessibility) {\n /**\n * @class RefinementsPanel\n * @augments ListAccessibility\n * @classdesc Represents RefinementsPanel component with next features:\n * 1. Updating product grid using product refinement, sorting and paging\n * 2. Support keyboard navigation for accessibility\n * 3. Control submenu\n *\n * Should contain {@link RefinementMenuItem}\n * @property {string} data-widget - Widget name \"refinementsPanel\"\n * @property {string} data-event-keydown - keydown handler\n * @property {string} data-show-ajax-url - URL for AJAX update\n * @property {string} [data-classes-backdrop-active=m-active] - class added/removed on 'self' element on openPanel/closePanel\n * @property {string} [data-classes-dialog-open=m-opened] - class added/removed on ref element 'dialog' on openPanel/closePanel\n * @property {string} [data-classes-active-level=m-active_level_] - prefix for class that is added/removed from 'panel' ref element when navigating between panels\n * @property {string} [data-item-switch-timeout=500] - timeout (in ms) between panels focus changes\n * @category widgets\n * @subcategory search\n * @example\n *\n *\n */\n class RefinementsPanel extends ListAccessibility {\n prefs() {\n return {\n classesBackdropActive: 'm-active',\n classesDialogOpen: 'm-opened',\n classesActiveLevel: 'm-active_level_',\n itemSwitchTimeout: 500,\n showAjaxUrl: '',\n ...super.prefs()\n };\n }\n\n /**\n * @description Widget logic initialization\n * @returns {void}\n */\n init() {\n super.init();\n this.eventBus().on('refinement.panel.open', 'openPanel');\n this.eventBus().on('refinement.panel.previous.level', 'previousLevel');\n this.eventBus().on('refinement.panel.next.level', 'nextLevel');\n this.eventBus().on('refinement.panel.update', 'updatePanel');\n }\n\n /**\n * @description Update Panel\n * @param {object} data Update data\n * @returns {void}\n */\n updatePanel(data) {\n this.ref('dialog').attr('aria-busy', 'true');\n this.ref('panel').removeClass(this.prefs().classesActiveLevel + 2).addClass(this.prefs().classesActiveLevel + 1);\n\n // apply filters and results count only after panel is change back\n this.onDestroy(timeout(() => {\n getJSONByUrl(data.url).then(res => {\n const param = getUrlParams(data.url);\n\n if (Object.keys(res).length && res.count) {\n this.render(\n 'template',\n {\n ...res,\n // @ts-ignore\n updateUrl: removeParamFromURL(appendParamsToUrl(this.prefs().showAjaxUrl, param), 'ajax')\n },\n this.ref('dialog')\n ).then(() => {\n this.ref('dialog').addClass(this.prefs().classesDialogOpen);\n this.ref('dialog').attr('aria-busy', 'false');\n this.defineItems();\n this.setFocusToFirstItem();\n });\n } else {\n this.emit('noresult');\n }\n });\n }, this.prefs().itemSwitchTimeout));\n }\n\n /**\n * @description Select next level\n * @param {object} data data\n * @returns {void}\n */\n nextLevel(data) {\n this.ref('dialog').attr('aria-busy', 'true');\n\n this.getById('subpanel', (subpanel) => {\n if (data.panelName) {\n subpanel.setSubmenuTitle(data.panelName);\n }\n\n if (data.refinementId) {\n subpanel.setSubmenuId(data.refinementId);\n }\n\n if (data.htmlMarkup) {\n subpanel.setSubmenuHTML(data.htmlMarkup);\n }\n\n subpanel.show();\n });\n\n this.ref('panel').removeClass(this.prefs().classesActiveLevel + 1).addClass(this.prefs().classesActiveLevel + 2);\n this.onDestroy(timeout(() => {\n this.ref('dialog').attr('aria-busy', 'false');\n this.getById('subpanel', (subpanel) => {\n if (data.showRefinementControls) {\n subpanel.showRefinementControls(true);\n } else {\n subpanel.hideRefinementControls();\n }\n\n subpanel.markSubmenuOpened();\n subpanel.defineItems();\n subpanel.setFocusToFirstItem();\n subpanel.parseUrlRefinementParameter();\n });\n }, this.prefs().itemSwitchTimeout));\n }\n\n /**\n * @description Select previous level\n * @returns {void}\n */\n previousLevel() {\n this.ref('panel').removeClass(this.prefs().classesActiveLevel + 2);\n this.ref('panel').addClass(this.prefs().classesActiveLevel + 1);\n this.onDestroy(timeout(() => {\n this.setFocusToCurrentItem();\n }, this.prefs().itemSwitchTimeout));\n }\n\n /**\n * @description Open Menu Panel\n * @param {object} data data\n * @returns {void}\n */\n openPanel(data) {\n this.ref('dialog').attr('aria-busy', 'true');\n this.getRefinementsModel();\n\n this.render('template', this.model, this.ref('dialog'))\n .then(() => {\n this.ref('self').addClass(this.prefs().classesBackdropActive);\n this.ref('dialog').addClass(this.prefs().classesDialogOpen);\n\n this.onDestroy(timeout(() => {\n this.defineItems();\n this.ref('dialog').attr('aria-busy', 'false');\n\n if (data.focusToLastItem) {\n this.setFocusToLastItem();\n } else {\n this.setFocusToFirstItem();\n }\n }, this.prefs().itemSwitchTimeout));\n\n // @ts-ignore\n dialogMgr.openDialog(this);\n this.ref('dialog').attr('role', false);\n this.ref('dialog').attr('aria-modal', false);\n });\n }\n\n /**\n * @description Close Panel\n * @returns {void}\n */\n closePanel() {\n this.ref('self').removeClass(this.prefs().classesBackdropActive);\n this.ref('dialog').removeClass(this.prefs().classesDialogOpen);\n\n this.eventBus().emit('refinement.panel.close');\n\n dialogMgr.closeDialog();\n }\n\n /**\n * @description Get Refinements Model\n * @returns {void}\n */\n getRefinementsModel() {\n var refinementsModel = this.ref('refinementsModel').getText().trim() || '';\n try {\n refinementsModel = JSON.parse(`\"${refinementsModel}\"`);\n this.model = JSON.parse(refinementsModel);\n } catch (e) {\n this.model = {};\n }\n }\n\n /**\n * @description Close On Backdrop handler\n * @listens dom#click\n * @param {RefElement} ref - interacted element\n * @param {Event} event - event object\n * @returns {void}\n */\n closeOnBackdrop(ref, event) {\n if (event.target === this.ref('self').get()) {\n this.closePanel();\n }\n }\n\n /**\n * @description Cancel Handler\n * @returns {void}\n */\n cancel() {\n this.closePanel();\n }\n\n /**\n * @description Refresh Handler\n * @returns {void}\n */\n onRefresh() {\n super.onRefresh();\n dialogMgr.closeDialog();\n }\n\n /**\n * @description Keydown Event handler\n * @param {HTMLElement} _ Source of keydown event\n * @param {KeyboardEvent} event Event object\n * @returns {void}\n */\n handleKeydown(_, event) {\n let preventEventActions = false;\n\n switch (event.keyCode) {\n case keyCode.PAGEUP:\n case keyCode.HOME:\n this.setFocusToFirstItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.PAGEDOWN:\n case keyCode.END:\n this.setFocusToLastItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.TAB:\n this.closePanel();\n\n break;\n\n case keyCode.DOWN:\n this.setFocusToNextItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.UP:\n this.setFocusToPreviousItem();\n preventEventActions = true;\n\n break;\n\n case keyCode.RIGHT:\n if ('openMenu' in this.currentItem) {\n this.currentItem.openMenu();\n preventEventActions = true;\n }\n\n break;\n\n default:\n break;\n }\n\n if (preventEventActions) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n return RefinementsPanel;\n}\n","// TODO: Create PanelToggleMixin\nconst keyCode = Object.freeze({\n RETURN: 13,\n SPACE: 32,\n UP: 38,\n DOWN: 40\n});\n\n/**\n * @description Base RefinementsPanelToggle implementation\n * @param {typeof import('widgets/Widget').default} Widget Base widget for extending\n * @returns {InstanceType} widget instance\n */\nexport default function (Widget) {\n /**\n * @class RefinementsPanelToggle\n * @augments Widget\n * @classdesc Widget, which triggers touch/mobile refinements panel to open/close\n * @property {string} data-widget - Widget name `refinementsPanelToggle`\n * @property {string} data-event-click - Event handler method for click event\n * @property {string} data-event-keydown - Event handler method for keydown event\n */\n class RefinementsPanelToggle extends Widget {\n /**\n * @description Init widget logic\n * @returns {void}\n */\n init() {\n this.eventBus().on('refinement.panel.close', 'closePanel');\n this.eventBus().on('refinement.panel.open', 'openPanel');\n }\n\n /**\n * @description Focus\n * @returns {void}\n */\n focus() {\n this.ref('self').focus();\n }\n\n /**\n * @description Show panel\n * @param {boolean} [focusToLastItem] Focus to last item flag\n * @returns {void}\n */\n showPanel(focusToLastItem) {\n this.openPanel();\n this.eventBus().emit('refinement.panel.open', { focusToLastItem });\n }\n\n /**\n * @description Handle Click\n * @returns {void}\n */\n handleClick() {\n this.showPanel();\n }\n\n /**\n * @description Open panel\n * @returns {void}\n */\n openPanel() {\n this.ref('self').attr('aria-expanded', 'true');\n }\n\n /**\n * @description Close panel\n * @returns {void}\n */\n closePanel() {\n this.focus();\n this.ref('self').attr('aria-expanded', 'false');\n }\n\n /**\n * @description Keydown Event handler\n * @param {HTMLElement} _ Source of keydown event\n * @param {KeyboardEvent} event Event object\n */\n handleKeydown(_, event) {\n let preventEventActions = false;\n\n switch (event.keyCode) {\n case keyCode.UP:\n this.showPanel(true);\n preventEventActions = true;\n\n break;\n\n case keyCode.RETURN:\n case keyCode.SPACE:\n case keyCode.DOWN:\n this.showPanel();\n preventEventActions = true;\n\n break;\n\n default:\n break;\n }\n\n if (preventEventActions) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n }\n\n return RefinementsPanelToggle;\n}\n"],"sourceRoot":""}