{"version":3,"file":"./modules/Expander.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/Expandable.ts","webpack:///./modules/Expander/Expander.ts","webpack:///./modules/Expander/ExpanderWithT.ts","webpack:///./modules/Expander/index.ts"],"sourcesContent":["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 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 = this.element.querySelector(`.${this.options.containerSelector}`) || this.element;\r\n this.button = 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}","/// \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;"],"names":["Expandable","constructor","container","options","this","active","className","includes","Object","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","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","querySelector","containerSelector","button","buttonSelector","expandable","expandableOptions","showExpanderButton","setButtonEventHandler","adjustAppearance","applyActiveFromOptions","applyContentAlignmentFromOptions","hidden","addEventListener","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","setTimeout","eventLabel","IsUAEnabled","dataLayer","push","event","eventCategory","eventAction","eventNonInteraction","super","console","log"],"sourceRoot":""}