{"version":3,"file":"./modules/FilterExpandElement.xxxxxxxx.js","mappings":"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","sources":["webpack:///../../../node_modules/setImmediate/setImmediate.js","webpack:///./modules/Expandable.ts","webpack:///./modules/Expander/Expander.ts","webpack:///./modules/Expander/ExpanderWithT.ts","webpack:///./modules/Expander/index.ts","webpack:///./modules/FilterExpandElement.ts","webpack:///./modules/ScrollBar.ts"],"sourcesContent":["(function (global, undefined) {\n \"use strict\";\n\n if (global.setImmediate) {\n return;\n }\n\n var nextHandle = 1; // Spec says greater than zero\n var tasksByHandle = {};\n var currentlyRunningATask = false;\n var doc = global.document;\n var registerImmediate;\n\n function setImmediate(callback) {\n // Callback can either be a function or a string\n if (typeof callback !== \"function\") {\n callback = new Function(\"\" + callback);\n }\n // Copy function arguments\n var args = new Array(arguments.length - 1);\n for (var i = 0; i < args.length; i++) {\n args[i] = arguments[i + 1];\n }\n // Store and register the task\n var task = { callback: callback, args: args };\n tasksByHandle[nextHandle] = task;\n registerImmediate(nextHandle);\n return nextHandle++;\n }\n\n function clearImmediate(handle) {\n delete tasksByHandle[handle];\n }\n\n function run(task) {\n var callback = task.callback;\n var args = task.args;\n switch (args.length) {\n case 0:\n callback();\n break;\n case 1:\n callback(args[0]);\n break;\n case 2:\n callback(args[0], args[1]);\n break;\n case 3:\n callback(args[0], args[1], args[2]);\n break;\n default:\n callback.apply(undefined, args);\n break;\n }\n }\n\n function runIfPresent(handle) {\n // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n // So if we're currently running a task, we'll need to delay this invocation.\n if (currentlyRunningATask) {\n // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n // \"too much recursion\" error.\n setTimeout(runIfPresent, 0, handle);\n } else {\n var task = tasksByHandle[handle];\n if (task) {\n currentlyRunningATask = true;\n try {\n run(task);\n } finally {\n clearImmediate(handle);\n currentlyRunningATask = false;\n }\n }\n }\n }\n\n function installNextTickImplementation() {\n registerImmediate = function(handle) {\n process.nextTick(function () { runIfPresent(handle); });\n };\n }\n\n function canUsePostMessage() {\n // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n // where `global.postMessage` means something completely different and can't be used for this purpose.\n if (global.postMessage && !global.importScripts) {\n var postMessageIsAsynchronous = true;\n var oldOnMessage = global.onmessage;\n global.onmessage = function() {\n postMessageIsAsynchronous = false;\n };\n global.postMessage(\"\", \"*\");\n global.onmessage = oldOnMessage;\n return postMessageIsAsynchronous;\n }\n }\n\n function installPostMessageImplementation() {\n // Installs an event handler on `global` for the `message` event: see\n // * https://developer.mozilla.org/en/DOM/window.postMessage\n // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n\n var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n var onGlobalMessage = function(event) {\n if (event.source === global &&\n typeof event.data === \"string\" &&\n event.data.indexOf(messagePrefix) === 0) {\n runIfPresent(+event.data.slice(messagePrefix.length));\n }\n };\n\n if (global.addEventListener) {\n global.addEventListener(\"message\", onGlobalMessage, false);\n } else {\n global.attachEvent(\"onmessage\", onGlobalMessage);\n }\n\n registerImmediate = function(handle) {\n global.postMessage(messagePrefix + handle, \"*\");\n };\n }\n\n function installMessageChannelImplementation() {\n var channel = new MessageChannel();\n channel.port1.onmessage = function(event) {\n var handle = event.data;\n runIfPresent(handle);\n };\n\n registerImmediate = function(handle) {\n channel.port2.postMessage(handle);\n };\n }\n\n function installReadyStateChangeImplementation() {\n var html = doc.documentElement;\n registerImmediate = function(handle) {\n // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n var script = doc.createElement(\"script\");\n script.onreadystatechange = function () {\n runIfPresent(handle);\n script.onreadystatechange = null;\n html.removeChild(script);\n script = null;\n };\n html.appendChild(script);\n };\n }\n\n function installSetTimeoutImplementation() {\n registerImmediate = function(handle) {\n setTimeout(runIfPresent, 0, handle);\n };\n }\n\n // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n attachTo = attachTo && attachTo.setTimeout ? attachTo : global;\n\n // Don't get fooled by e.g. browserify environments.\n if ({}.toString.call(global.process) === \"[object process]\") {\n // For Node.js before 0.9\n installNextTickImplementation();\n\n } else if (canUsePostMessage()) {\n // For non-IE10 modern browsers\n installPostMessageImplementation();\n\n } else if (global.MessageChannel) {\n // For web workers, where supported\n installMessageChannelImplementation();\n\n } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n // For IE 6–8\n installReadyStateChangeImplementation();\n\n } else {\n // For older browsers\n installSetTimeoutImplementation();\n }\n\n attachTo.setImmediate = setImmediate;\n attachTo.clearImmediate = clearImmediate;\n}(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self));\n","import { getOptions, requestAnimationFrameTimer } from '../helpers/helperFunctions';\r\n\r\nexport default class Expandable {\r\n private height: number;\r\n private active: boolean;\r\n\r\n constructor(private container: HTMLElement, private options: ExpandableOptions = {}) {\r\n this.active = this.container.className.includes('active');\r\n this.options = getOptions(this.container, Object.assign(this.getDefaultOptions(), this.options));\r\n this.init();\r\n }\r\n\r\n private init(): Expandable {\r\n this.setElementHeight(this.container, this.getSuitableHeight());\r\n this.setOnResizeHandler();\r\n return this;\r\n }\r\n\r\n private saveInitialHeight(): Expandable {\r\n this.height = this.getElementHeight(this.container);\r\n return this;\r\n }\r\n\r\n private getElementHeight(element: HTMLElement): number {\r\n return element.offsetHeight;\r\n }\r\n\r\n private getSuitableHeight(): string {\r\n return this.active ? '' : this.options.collapsedHeight + 'px';\r\n }\r\n\r\n private setElementHeight(element: HTMLElement, height?: string): Expandable {\r\n element.style.maxHeight = height != null ? height : ''; \r\n\r\n return this;\r\n }\r\n\r\n private toggleState(): Expandable {\r\n this.active = !this.active;\r\n return this;\r\n }\r\n\r\n private getDefaultOptions(): ExpandableOptions {\r\n return {\r\n collapsedHeight: 115\r\n };\r\n }\r\n\r\n private setOnResizeHandler(): Expandable {\r\n NiveaX.addToEventStore('resize', () => requestAnimationFrameTimer(() => this.onResize(), 300), window)\r\n\r\n return this;\r\n }\r\n\r\n private onResize() {\r\n const height = this.getSuitableHeight();\r\n this.setElementHeight(this.container, height);\r\n }\r\n\r\n setCollapsedHeight(value: number): Expandable {\r\n this.options.collapsedHeight = value;\r\n return this;\r\n }\r\n\r\n toggle(): Expandable {\r\n this.toggleState()\r\n .setElementHeight(this.container, this.getSuitableHeight());\r\n return this;\r\n }\r\n\r\n isActive(): boolean {\r\n return this.active;\r\n }\r\n \r\n needToBeShown(): boolean {\r\n return this.height > this.options.collapsedHeight * 1.25;\r\n }\r\n\r\n\r\n clear(): Expandable {\r\n this.setElementHeight(this.container)\r\n .saveInitialHeight();\r\n return this;\r\n }\r\n\r\n render(): Expandable {\r\n const height = this.getSuitableHeight();\r\n this.setElementHeight(this.container, height);\r\n\r\n return this;\r\n }\r\n\r\n getContainer(): HTMLElement {\r\n return this.container;\r\n }\r\n}","import Expandable from '../Expandable';\r\nimport { getOptions, requestAnimationFrameTimer } from '../../helpers/helperFunctions';\r\n\r\nconst moduleSelector = '[data-module=\"Expander\"]';\r\n\r\nexport default class Expander {\r\n private container: HTMLElement;\r\n private button: HTMLElement;\r\n private expandable: Expandable;\r\n public expanderState: string;\r\n \r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new Expander(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, private options: ExpanderOptions = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n this.container = <HTMLElement>this.element.querySelector(`.${this.options.containerSelector}`) || this.element;\r\n this.button = <HTMLElement>this.element.querySelector(`.${this.options.buttonSelector}`);\r\n this.expandable = new Expandable(this.container, this.options.expandableOptions);\r\n \r\n this.init();\r\n }\r\n\r\n protected init(): Expander {\r\n this.showExpanderButton()\r\n .setButtonEventHandler()\r\n .setOnResizeHandler()\r\n .adjustAppearance()\r\n .applyActiveFromOptions()\r\n .applyContentAlignmentFromOptions();\r\n\r\n return this;\r\n }\r\n\r\n protected showExpanderButton(): Expander {\r\n this.button.hidden = false;\r\n return this;\r\n }\r\n\r\n protected setButtonEventHandler(): Expander {\r\n this.button.addEventListener('click', this.toggleExpander.bind(this));\r\n return this;\r\n }\r\n\r\n protected toggleActiveModifier(force?: boolean): Expander {\r\n (force)\r\n ? this.element.classList.add(`${this.options.elementSelector}--active`)\r\n : this.element.classList.remove(`${this.options.elementSelector}--active`);\r\n \r\n return this;\r\n }\r\n \r\n protected showFade(force?: boolean): Expander {\r\n (force)\r\n ? this.options.hasFade && this.container.classList.add(`${this.options.containerSelector}--with-fade`)\r\n : this.options.hasFade && this.container.classList.remove(`${this.options.containerSelector}--with-fade`);\r\n\r\n return this;\r\n }\r\n\r\n protected toggleExpander(clickedEvent:boolean = true): void {\r\n this.expandable.toggle();\r\n this.toggleActiveModifier(this.expandable.isActive());\r\n this.expanderState = this.expandable.isActive() ? 'Expanded' : 'Collapsed';\r\n }\r\n\r\n protected onResize(): void {\r\n this.options.beforeResize();\r\n \r\n if( this.options.isActive ) {\r\n this.adjustAppearance();\r\n }\r\n }\r\n\r\n protected applyActiveFromOptions() {\r\n if( this.options.isActive ) {\r\n this.toggleExpander(false);\r\n }\r\n return this;\r\n }\r\n\r\n protected applyContentAlignmentFromOptions() {\r\n if(this.options.contentAlignment) {\r\n this.container.classList.add(`${this.options.containerSelector}--align-` + this.options.contentAlignment);\r\n }\r\n return this;\r\n }\r\n\r\n protected setOnResizeHandler(): Expander {\r\n NiveaX.addToEventStore('resize', () => requestAnimationFrameTimer(() => this.onResize(), 300), window);\r\n return this;\r\n }\r\n\r\n protected setupExpander(): Expander {\r\n this.expandable.render();\r\n\r\n this.showFade(true)\r\n .hideButton(false);\r\n\r\n return this;\r\n }\r\n\r\n protected destroyExpander(): Expander {\r\n this.expandable.clear();\r\n\r\n this.showFade(false)\r\n .hideButton(true);\r\n\r\n return this;\r\n }\r\n\r\n public hideButton(value: boolean): Expander {\r\n this.button.hidden = value;\r\n return this;\r\n }\r\n\r\n protected getDefaultOptions(): ExpanderOptions {\r\n return {\r\n elementSelector: 'nx-expander',\r\n containerSelector: 'nx-expander__content',\r\n buttonSelector: 'nx-expander__button',\r\n hasFade: true,\r\n beforeResize: () => {}\r\n };\r\n }\r\n\r\n adjustAppearance(): Expander {\r\n this.expandable.clear();\r\n \r\n this.expandable.needToBeShown()\r\n ? this.setupExpander()\r\n : this.destroyExpander();\r\n\r\n return this;\r\n }\r\n\r\n setCollapsedHeight(value: number): Expander {\r\n this.expandable.setCollapsedHeight(value);\r\n return this;\r\n }\r\n\r\n setBeforResizeCB(cb: Callback): Expander {\r\n this.options.beforeResize = cb;\r\n return this;\r\n }\r\n\r\n isActive(): boolean {\r\n return this.expandable.isActive();\r\n }\r\n\r\n toggle(): Expander {\r\n this.toggleExpander();\r\n return this;\r\n }\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n Expander.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n Expander.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({nodeToReplace, nodeOrigin}) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace)});\r\n });\r\n} else {\r\n Expander.setup(moduleSelector);\r\n}","/// <reference path=\"../../typings/niveax.d.ts\"/>\r\nimport Expander from \"./Expander\";\r\nimport ClassWithTracking from \"../../ClassWithTracking\";\r\n\r\nexport default class ExpanderWithT extends ClassWithTracking(Expander) {\r\n trackingEvent(trackedElement: HTMLElement, isClicked: boolean) {\r\n if (window.NiveaX.deviceType.isDesktop) { \r\n return;\r\n }\r\n\r\n if (!isClicked || !!trackedElement.closest(\".nx-filter-layer\")) {\r\n return;\r\n }\r\n\r\n let buttonType: string = \"Tap minus\",\r\n isActive: boolean = false,\r\n titleContent: string = \"\";\r\n\r\n if (trackedElement.className.search(\"active\") > 0) {\r\n isActive = true;\r\n }\r\n\r\n titleContent = this.setLabel(trackedElement);\r\n\r\n if (document.body.classList.contains(\"nx-pagetype-product\")) {\r\n this.trackPDPSection(trackedElement, buttonType, titleContent);\r\n } else {\r\n this.preventMultipleClicks(isActive, titleContent);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private setLabel(trackedElement: HTMLElement): string {\r\n let toggleTitleH2: HTMLElement = trackedElement.querySelector(\"h2\"),\r\n toggleTitleH3: HTMLElement = trackedElement.querySelector(\"h3\");\r\n\r\n if (toggleTitleH2) {\r\n return toggleTitleH2.innerText;\r\n } else if (toggleTitleH3) {\r\n return toggleTitleH3.innerText;\r\n }\r\n }\r\n\r\n private trackPDPSection(trackedElement: HTMLElement, buttonType: string, titleContent: string): void {\r\n if (trackedElement.className.search(\"active\") > 0) {\r\n buttonType = \"Tap plus\";\r\n }\r\n this.trackPDPSections(\"Product Detail Page\", buttonType, titleContent);\r\n }\r\n\r\n private preventMultipleClicks(isActive, titleContent): void {\r\n if (isActive) {\r\n if (!this.element.classList.contains(\"nx-trigger-once\")) {\r\n this.trackElementClick(titleContent);\r\n this.element.classList.add(\"nx-trigger-once\");\r\n }\r\n\r\n setTimeout(() => {\r\n this.element.classList.remove(\"nx-trigger-once\");\r\n }, 100);\r\n }\r\n }\r\n\r\n private trackElementClick(eventLabel: string) {\r\n if (window.NiveaX.IsUAEnabled) {\r\n this.dataLayer.push({\r\n event: \"ga_event\",\r\n eventCategory: \"Expand Content\",\r\n eventAction: \"Tap Button\",\r\n eventLabel: eventLabel,\r\n eventNonInteraction: false\r\n });\r\n }\r\n }\r\n\r\n private trackPDPSections(eventCategory: string, eventAction: string, eventLabel: string) {\r\n if (window.NiveaX.IsUAEnabled) {\r\n this.dataLayer.push({\r\n event: \"ga_event\",\r\n eventCategory: eventCategory,\r\n eventAction: eventAction,\r\n eventLabel: eventLabel,\r\n eventNonInteraction: false\r\n });\r\n }\r\n }\r\n\r\n protected toggleExpander(clickedEvent: boolean = true): void {\r\n super.toggleExpander(clickedEvent);\r\n this.trackingEvent(this.element, clickedEvent);\r\n console.log(this.expanderState);\r\n // console.log(this.element, clickedEvent);\r\n }\r\n}\r\n","import ExpanderWithT from './ExpanderWithT';\r\nexport default ExpanderWithT;","import Expander from './Expander';\r\nimport { getNamesOfInputs } from '../helpers/helperFunctions';\r\nimport { getOptions, requestAnimationFrameTimer } from '../helpers/helperFunctions';\r\nimport { Optional } from '../typings/mapped-types';\r\nimport ScrollBar from './ScrollBar';\r\nimport \"setImmediate\";\r\n\r\nexport default class FilterExpandElement {\r\n private expander: Expander;\r\n private checkBoxes: HTMLInputElement[];\r\n private selectedContainer: HTMLElement;\r\n private scrollBar: ScrollBar;\r\n\r\n constructor(public element: HTMLElement, private options: Optional<FilterExpandElementOptions> = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n this.expander = this.getExpander();\r\n this.checkBoxes = this.getCheckBoxes();\r\n this.selectedContainer = this.getContainerForSelectedFilters();\r\n this.scrollBar = this.createCustomScrollBar();\r\n\r\n this.init();\r\n }\r\n\r\n private init(): FilterExpandElement {\r\n this.addHandlerOnCheckBoxChange()\r\n .setExpanderTitleClickHandler()\r\n .setOnResizeHandler();\r\n return this;\r\n }\r\n\r\n private createCustomScrollBar(): ScrollBar {\r\n const container = <HTMLElement>this.element.querySelector(this.options.categoryListSelector); \r\n return new ScrollBar(container, {\r\n suppressScrollY: false,\r\n suppressScrollX: true,\r\n fadeSide: false,\r\n fadeWidth: null\r\n });\r\n }\r\n\r\n private getExpander(): Expander {\r\n return new Expander(this.element, {\r\n elementSelector: 'nx-tag-filter__item',\r\n containerSelector: 'nx-filters',\r\n buttonSelector: 'nx-tag-filter__title',\r\n hasFade: false\r\n });\r\n }\r\n\r\n private getCheckBoxes(): HTMLInputElement[] {\r\n return <HTMLInputElement[]>Array.from(this.element.querySelectorAll('.nx-cat-item__tag-value'));\r\n }\r\n\r\n private getContainerForSelectedFilters(): HTMLElement {\r\n return <HTMLElement>this.element.querySelector('.nx-title__selected-filters');\r\n }\r\n\r\n private addHandlerOnCheckBoxChange(): FilterExpandElement {\r\n this.element.addEventListener('change', (event: Event) => {\r\n setImmediate(() => \r\n this.setTimeStamp(<HTMLInputElement>event.target)\r\n .showSelectedFilters()\r\n .adjustAppearance()\r\n );\r\n });\r\n\r\n return this;\r\n }\r\n\r\n private getSelectedCheckBoxes(checkBoxes: HTMLInputElement[]): HTMLInputElement[] {\r\n return checkBoxes.filter((chbox: HTMLInputElement) => chbox.checked);\r\n }\r\n\r\n private showSelectedFilters(): FilterExpandElement {\r\n this.selectedContainer.innerHTML = getNamesOfInputs(this.getSelectedCheckBoxes(this.checkBoxes)).join(', ');\r\n return this;\r\n }\r\n\r\n private setTimeStamp(checkbox: FilterCheckBox): FilterExpandElement {\r\n checkbox.timeStamp = Date.now();\r\n return this;\r\n }\r\n\r\n private adjustAppearance(): FilterExpandElement {\r\n this.expander.adjustAppearance();\r\n return this;\r\n }\r\n\r\n refreshFilters(): FilterExpandElement {\r\n this.showSelectedFilters();\r\n\r\n return this;\r\n }\r\n\r\n closeExpander(): FilterExpandElement {\r\n if (this.expander.isActive()) {\r\n this.expander.toggle();\r\n }\r\n return this;\r\n }\r\n\r\n getCheckedFilters(): FilterCheckBox[] {\r\n return this.getSelectedCheckBoxes(this.checkBoxes);\r\n }\r\n\r\n private getExpanderElementList() {\r\n return <HTMLElement>this.expander.element.querySelector(this.options.categoryListSelector);\r\n }\r\n\r\n private setExpanderTitleClickHandler(): FilterExpandElement {\r\n this.element.querySelector('.nx-tag-filter__title').addEventListener('click', () => {\r\n if (!window.NiveaX.deviceType.isDesktop) return;\r\n this.handleExpanderTitleClick();\r\n });\r\n\r\n document.addEventListener('FilterExpandable:reset', () => this.resetNonActiveFilters());\r\n return this;\r\n }\r\n\r\n private handleExpanderTitleClick(): FilterExpandElement {\r\n this.isActiveModifier()\r\n ? this.addCustomScroll(this.getExpanderElementList())\r\n : this.resetHeight(this.getExpanderElementList());\r\n return this;\r\n }\r\n\r\n private resetHeight(element: HTMLElement) {\r\n if (element.hasAttribute('style')) { \r\n element.removeAttribute('style'); \r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n private isActiveModifier(): boolean {\r\n return this.element.classList.contains(this.options.categoryItemActiveSelector);\r\n }\r\n\r\n private isOutOfBottom(element: HTMLElement): number {\r\n const elementRect = element.getBoundingClientRect(),\r\n windowHeight = Math.max(document.documentElement.clientHeight, window.innerHeight || 0),\r\n listBottom = windowHeight - elementRect.top;\r\n return windowHeight - elementRect.bottom < 0 ? listBottom - 50 : 0;\r\n }\r\n\r\n private addCustomScroll(element: HTMLElement): FilterExpandElement {\r\n let isOutOfBottomResult = this.isOutOfBottom(element);\r\n if (isOutOfBottomResult > 0) {\r\n element.style.height = `${isOutOfBottomResult}px`;\r\n this.scrollBar.updateScrollBar();\r\n }\r\n return this;\r\n }\r\n\r\n private getActiveFilter(): HTMLElement {\r\n return this.element.parentNode.querySelector(`.${this.options.categoryItemActiveSelector}`);\r\n }\r\n\r\n private setOnResizeHandler() {\r\n NiveaX.addToEventStore('resize', () => requestAnimationFrameTimer(() => this.onResize(), 100), window);\r\n return this;\r\n }\r\n\r\n private onResize() { \r\n if (!window.NiveaX.deviceType.isDesktop) {\r\n this.resetHeight(this.getExpanderElementList());\r\n this.scrollBar.updateScrollBar(); \r\n } else {\r\n this.getActiveFilter()\r\n ? this.resizeActiveFilter()\r\n : this.setExpanderTitleClickHandler()\r\n }\r\n return this;\r\n }\r\n \r\n private resizeActiveFilter() {\r\n const activeFilterCategoryList = <HTMLElement>this.getActiveFilter().querySelector(this.options.categoryListSelector);\r\n this.resetHeight(activeFilterCategoryList);\r\n this.addCustomScroll(activeFilterCategoryList);\r\n }\r\n\r\n private resetNonActiveFilters() {\r\n if(!this.element.classList.contains('nx-tag-filter__item--active')){\r\n this.resetHeight(this.element.querySelector(this.options.categoryListSelector));\r\n this.scrollBar.updateScrollBar();\r\n } else {\r\n this.resizeActiveFilter();\r\n }\r\n }\r\n\r\n private getDefaultOptions(): FilterExpandElementOptions {\r\n return {\r\n categoryListSelector: '.nx-filters__category-list',\r\n categoryItemActiveSelector: 'nx-tag-filter__item--active'\r\n };\r\n }\r\n}","import PerfectScrollbar from 'perfect-scrollbar';\r\nimport { getOptions } from '../helpers/helperFunctions';\r\n\r\nconst moduleSelector = '[data-module=\"ScrollBar\"]';\r\n\r\nexport default class ScrollBar {\r\n psb: PerfectScrollbar;\r\n list: HTMLElement;\r\n fadeSide: FadeSide;\r\n\r\n static setup(selector: string = moduleSelector): void {\r\n Array.from(document.querySelectorAll(selector)).filter((node: HTMLElement) => !node.dataset.moduleInitialized).forEach((element: HTMLElement) => {\r\n new ScrollBar(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, private options: PSBOptions = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), this.options));\r\n this.list = <HTMLElement>this.element.querySelector(`.${this.options.sbListSelector}`);\r\n\r\n this.init();\r\n }\r\n\r\n private init(): ScrollBar {\r\n this.psb = new PerfectScrollbar(this.element, this.options);\r\n this.onPageLoaded()\r\n .onResize();\r\n\r\n return this;\r\n }\r\n\r\n private initFadeSide(): ScrollBar {\r\n this.fadeSide = new FadeSide(this.element, this.options.fadeWidth);\r\n return this;\r\n }\r\n\r\n public updateScrollBar(): ScrollBar {\r\n // REVISIT\r\n if (!!this.element.closest('.nx-advantages')) {\r\n this.adjustScrollBarListWidth();\r\n }\r\n\r\n this.psb && this.psb.update();\r\n return this;\r\n }\r\n\r\n private getScrollBarListWidth(): number {\r\n const benefitItem = <HTMLElement>this.list.querySelector(`.${this.options.sbListItem}`);\r\n const benefitItemsLength = this.list.querySelectorAll(`.${this.options.sbListItem}`).length;\r\n\r\n return Math.ceil((benefitItemsLength * benefitItem.offsetWidth) + 1);\r\n }\r\n\r\n private adjustScrollBarListWidth(): ScrollBar {\r\n this.clearScrollBarListWidth();\r\n this.list.style.width = this.getScrollBarListWidth() + 'px';\r\n return this;\r\n }\r\n\r\n private clearScrollBarListWidth(): ScrollBar {\r\n this.list.style.width = '';\r\n return this;\r\n }\r\n\r\n private initScrollBarAfterPageLoaded(): ScrollBar {\r\n this.updateScrollBar();\r\n\r\n if (this.options.fadeSide) {\r\n this.initFadeSide();\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private onResize(): ScrollBar {\r\n NiveaX.addToEventStore('resize', this.updateScrollBar.bind(this), window);\r\n return this;\r\n }\r\n\r\n private onPageLoaded(): ScrollBar {\r\n if (document.readyState === 'complete') {\r\n this.initScrollBarAfterPageLoaded();\r\n } else {\r\n NiveaX.addToEventStore('load', this.initScrollBarAfterPageLoaded.bind(this), window);\r\n }\r\n\r\n return this;\r\n }\r\n\r\n private getDefaultOptions(): PSBOptions {\r\n return {\r\n fadeSide: true,\r\n suppressScrollY: true,\r\n sbListSelector: 'nx-benefits__list',\r\n fadeWidth: null,\r\n sbListItem: 'nx-benefit',\r\n useBothWheelAxes: true,\r\n swipeEasing: true\r\n }\r\n }\r\n\r\n destroy(): ScrollBar {\r\n this.psb?.destroy();\r\n this.psb = null;\r\n // this.clearScrollBarListWidth();\r\n return this;\r\n }\r\n\r\n rebuild(): ScrollBar {\r\n this.psb = new PerfectScrollbar(this.element, this.options);\r\n this.updateScrollBar();\r\n return this;\r\n }\r\n}\r\n\r\nclass FadeSide {\r\n private fadeWidth: number;\r\n leftMaskWidth: number = 0;\r\n rightMaskWidth: number = 0;\r\n\r\n constructor(public element: HTMLElement, fadeWidth?: number) {\r\n this.fadeWidth = fadeWidth || this.getFadeWidth();\r\n this.leftMaskWidth = this.fadeWidth;\r\n this.rightMaskWidth = this.fadeWidth;\r\n\r\n this.init();\r\n }\r\n\r\n private init(): void {\r\n this.adjustFadeElements();\r\n this.element.addEventListener('ps-scroll-x', () => {\r\n this.adjustFadeElements()\r\n });\r\n }\r\n\r\n public adjustFadeElements(): void {\r\n let scrollWidth = this.element.scrollWidth,\r\n scrollLeft = Math.abs(this.element.scrollLeft),\r\n scrollRight = Math.abs(scrollWidth - (scrollLeft + this.element.clientWidth)),\r\n fdLeftWidth, fdRightWidth;\r\n\r\n if (scrollLeft <= this.fadeWidth) {\r\n fdLeftWidth = (scrollLeft / this.fadeWidth) * (this.fadeWidth);\r\n }\r\n\r\n if (scrollRight <= this.fadeWidth) {\r\n fdRightWidth = (scrollRight / this.fadeWidth) * (this.fadeWidth);\r\n }\r\n\r\n if(fdLeftWidth == undefined && fdRightWidth == undefined) {\r\n fdLeftWidth = this.fadeWidth;\r\n fdRightWidth = this.fadeWidth;\r\n }\r\n\r\n let leftWidth = (document.dir == 'ltr') ? fdLeftWidth : fdRightWidth;\r\n let rightWidth = (document.dir == 'ltr') ? fdRightWidth : fdLeftWidth;\r\n\r\n this.leftMaskWidth = leftWidth != undefined ? leftWidth : this.leftMaskWidth;\r\n this.rightMaskWidth = rightWidth != undefined ? rightWidth : this.rightMaskWidth;\r\n\r\n this.element.setAttribute('style', `-webkit-mask-image: linear-gradient(to right, transparent 0px, black ${this.leftMaskWidth}px), linear-gradient(to left, transparent 0px, black ${this.rightMaskWidth}px);\r\n mask-image: linear-gradient(to right, transparent 0px, black ${this.leftMaskWidth}px), linear-gradient(to left, transparent 0px, black ${this.rightMaskWidth}px);`)\r\n\r\n }\r\n\r\n public setFadeWith(fadeWidth: number) {\r\n this.fadeWidth = fadeWidth;\r\n }\r\n\r\n private getFadeWidth(): number {\r\n return this.element.querySelector('.nx-benefit')?.clientWidth;\r\n }\r\n\r\n}\r\n\r\n// Hot Module Replacement\r\nif (module.hot) {\r\n let nodesCache: HMRNodes[] = Array.from(document.querySelectorAll(moduleSelector)).map((element: Node) => ({ nodeToReplace: element, nodeOrigin: element.cloneNode(true) }));\r\n\r\n ScrollBar.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n ScrollBar.setup(moduleSelector);\r\n });\r\n module.hot.dispose(() => {\r\n nodesCache.forEach(({ nodeToReplace, nodeOrigin }) => { nodeToReplace = nodeToReplace.parentElement.replaceChild(nodeOrigin.cloneNode(true), nodeToReplace) });\r\n });\r\n} else {\r\n ScrollBar.setup(moduleSelector);\r\n}"],"names":["global","undefined","setImmediate","registerImmediate","html","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","doc","document","attachTo","Object","getPrototypeOf","setTimeout","toString","call","process","handle","nextTick","runIfPresent","postMessage","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","event","data","port2","createElement","documentElement","script","onreadystatechange","removeChild","appendChild","Math","random","source","indexOf","slice","length","addEventListener","attachEvent","callback","Function","args","Array","arguments","i","task","clearImmediate","apply","run","self","g","this","Expandable","constructor","container","options","active","className","includes","assign","getDefaultOptions","init","setElementHeight","getSuitableHeight","setOnResizeHandler","saveInitialHeight","height","getElementHeight","element","offsetHeight","collapsedHeight","style","maxHeight","toggleState","NiveaX","addToEventStore","onResize","window","setCollapsedHeight","value","toggle","isActive","needToBeShown","clear","render","getContainer","moduleSelector","Expander","setup","selector","from","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","querySelector","containerSelector","button","buttonSelector","expandable","expandableOptions","showExpanderButton","setButtonEventHandler","adjustAppearance","applyActiveFromOptions","applyContentAlignmentFromOptions","hidden","toggleExpander","bind","toggleActiveModifier","force","classList","add","elementSelector","remove","showFade","hasFade","clickedEvent","expanderState","beforeResize","contentAlignment","setupExpander","hideButton","destroyExpander","setBeforResizeCB","cb","ExpanderWithT","trackingEvent","trackedElement","isClicked","deviceType","isDesktop","closest","titleContent","search","setLabel","body","contains","trackPDPSection","preventMultipleClicks","toggleTitleH2","toggleTitleH3","innerText","buttonType","trackPDPSections","trackElementClick","eventLabel","IsUAEnabled","dataLayer","push","eventCategory","eventAction","eventNonInteraction","super","console","log","FilterExpandElement","expander","getExpander","checkBoxes","getCheckBoxes","selectedContainer","getContainerForSelectedFilters","scrollBar","createCustomScrollBar","addHandlerOnCheckBoxChange","setExpanderTitleClickHandler","categoryListSelector","suppressScrollY","suppressScrollX","fadeSide","fadeWidth","setTimeStamp","target","showSelectedFilters","getSelectedCheckBoxes","chbox","checked","innerHTML","join","checkbox","timeStamp","Date","now","refreshFilters","closeExpander","getCheckedFilters","getExpanderElementList","handleExpanderTitleClick","resetNonActiveFilters","isActiveModifier","addCustomScroll","resetHeight","hasAttribute","removeAttribute","categoryItemActiveSelector","isOutOfBottom","elementRect","getBoundingClientRect","windowHeight","max","clientHeight","innerHeight","listBottom","top","bottom","isOutOfBottomResult","updateScrollBar","getActiveFilter","parentNode","resizeActiveFilter","activeFilterCategoryList","ScrollBar","list","sbListSelector","psb","onPageLoaded","initFadeSide","FadeSide","adjustScrollBarListWidth","update","getScrollBarListWidth","benefitItem","sbListItem","benefitItemsLength","ceil","offsetWidth","clearScrollBarListWidth","width","initScrollBarAfterPageLoaded","readyState","useBothWheelAxes","swipeEasing","destroy","rebuild","leftMaskWidth","rightMaskWidth","getFadeWidth","adjustFadeElements","fdLeftWidth","fdRightWidth","scrollWidth","scrollLeft","abs","scrollRight","clientWidth","leftWidth","dir","rightWidth","setAttribute","setFadeWith"],"sourceRoot":""}