{"version":3,"file":"./modules/LoadMore.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/LoadMore/index.ts","webpack:///./modules/LoadMore/LoadMoreWithT.ts","webpack:///./modules/LoadMore/LoadMore.ts"],"sourcesContent":["import LoadMore from './LoadMoreWithT';\r\nexport default LoadMore;","import LoadMore from './LoadMore';\r\nimport ClassWithTracking from \"../../ClassWithTracking\";\r\n\r\nconst moduleSelector = '[data-module=\"LoadMore\"]';\r\n\r\nexport default class LoadMoreWithTracking extends ClassWithTracking(LoadMore) {\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 LoadMoreWithTracking(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, options: LoadMoreOptions = {}) {\r\n super(element, options);\r\n }\r\n\r\n public loadMore() {\r\n if (this.options.trackingCategory && window.NiveaX.IsUAEnabled) {\r\n this.dataLayer.push({\r\n event: 'ga_event',\r\n eventCategory: this.options.trackingCategory,\r\n eventAction: 'Click',\r\n eventLabel: 'Load More',\r\n eventNonInteraction: false\r\n });\r\n }\r\n\r\n super.loadMore();\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 LoadMoreWithTracking.setup(moduleSelector);\r\n\r\n module.hot.accept(() => {\r\n LoadMoreWithTracking.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 LoadMoreWithTracking.setup(moduleSelector);\r\n}","/// \r\n\r\nimport { createElementFromString } from '../../helpers/DOMHelpers';\r\nimport { getOptions } from '../../helpers/helperFunctions';\r\n\r\nconst moduleSelector = '[data-module=\"LoadMore\"]';\r\n\r\nexport default class LoadMore {\r\n private gridContainerSelector: string;\r\n private loadMoreBtnWrapperClass: string;\r\n private ratingsAndReviews: string;\r\n private loadMoreBtnSelector: string;\r\n private loadMoreHideClass: string;\r\n private spinnerSelector: string;\r\n private spinnerHideClass: string;\r\n private btnOffsetTop: number;\r\n protected options: LoadMoreOptions;\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 LoadMore(element);\r\n element.dataset.moduleInitialized = 'true';\r\n });\r\n }\r\n\r\n constructor(public element: HTMLElement, options: LoadMoreOptions = {}) {\r\n this.options = getOptions(this.element, Object.assign(this.getDefaultOptions(), options));\r\n\r\n this.gridContainerSelector = this.options.ContainerSelector;\r\n this.loadMoreBtnWrapperClass = this.options.loadMoreBtnWrapperClass;\r\n this.ratingsAndReviews = this.options.ratingsAndReviewsClass;\r\n this.loadMoreBtnSelector = this.options.loadMoreBtnSelector;\r\n this.loadMoreHideClass = this.options.loadMoreHideClass;\r\n this.spinnerSelector = this.options.spinnerSelector;\r\n this.spinnerHideClass = this.options.spinnerHideClass;\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n this.loadMoreListener();\r\n this.showLoadMoreResult();\r\n\r\n const initLoadMore = () => {\r\n this.loadMoreListener();\r\n this.showLoadMoreResult();\r\n window.NiveaX.initModules();\r\n }\r\n\r\n document.addEventListener('NiveaXLoadMoreLoaded', initLoadMore);\r\n document.addEventListener('NiveaXLoadMoreLoaded:removeEvent', () => document.removeEventListener('NiveaXLoadMoreLoaded', initLoadMore));\r\n }\r\n\r\n public loadMoreListener() {\r\n var loadMoreBtn = document.querySelector(this.loadMoreBtnSelector);\r\n if (loadMoreBtn) {\r\n loadMoreBtn.addEventListener('click', () => this.loadMore());\r\n }\r\n }\r\n\r\n public loadMore() {\r\n const loadMoreWrapper: HTMLElement = document.querySelector(`.${this.loadMoreBtnWrapperClass}`);\r\n const loadMoreBtn: HTMLElement = loadMoreWrapper.querySelector(this.loadMoreBtnSelector);\r\n const spinner: HTMLElement = loadMoreWrapper.querySelector(this.spinnerSelector);\r\n const loadMoreResultWrapper = document.querySelector(this.options.loadMoreResultTextClass) as HTMLElement;\r\n const ajaxUrl = loadMoreBtn.dataset.ajaxUrl;\r\n const xhr = new XMLHttpRequest();\r\n\r\n this.saveBtnOffsetTop(loadMoreWrapper);\r\n this.hideItems([loadMoreBtn, loadMoreResultWrapper]);\r\n this.showSpinner(spinner);\r\n\r\n this.onloadSuccess.bind(this);\r\n this.onloadError.bind(this);\r\n\r\n xhr.onload = () => {\r\n if (xhr.status >= 200 && xhr.status < 300) {\r\n setTimeout(() => {\r\n loadMoreWrapper.remove();\r\n this.onloadSuccess(xhr);\r\n }, 200);\r\n } else {\r\n this.showItems([loadMoreBtn, loadMoreResultWrapper]);\r\n this.hideSpinner(spinner);\r\n this.onloadError(xhr);\r\n }\r\n };\r\n\r\n xhr.open('GET', ajaxUrl);\r\n xhr.send();\r\n }\r\n\r\n public onloadSuccess(xhr: any) {\r\n const responseTree = createElementFromString(xhr.responseText);\r\n const loadedGrid = responseTree.querySelector(this.gridContainerSelector);\r\n const children = loadedGrid.children;\r\n const childrenArray = Array.from(children);\r\n let gridNode = document.querySelector(this.gridContainerSelector);\r\n\r\n for (let i = 0; i < childrenArray.length; i++) {\r\n let element = childrenArray[i];\r\n gridNode.appendChild(element);\r\n }\r\n\r\n const newLoadMore = gridNode.querySelector(`.${this.loadMoreBtnWrapperClass}`);\r\n const ratingsAndReviews = document.querySelector(this.ratingsAndReviews);\r\n\r\n if (newLoadMore) {\r\n document.dispatchEvent(new CustomEvent('NiveaXLoadMoreLoaded', { detail: { btnOffsetTop: this.btnOffsetTop } }));\r\n document.dispatchEvent(new CustomEvent('NiveaBasicTracking:reInitHandlers'));\r\n\r\n if (ratingsAndReviews) {\r\n document.dispatchEvent(new CustomEvent('niveax:RatingsAndReviews:pagination'));\r\n }\r\n } else {\r\n document.dispatchEvent(new CustomEvent('NiveaXLoadMoreLoaded'));\r\n }\r\n }\r\n\r\n public saveBtnOffsetTop(btn: HTMLElement) {\r\n let rect = btn.getBoundingClientRect();\r\n this.btnOffsetTop = rect.top;\r\n }\r\n\r\n public onloadError(xhr) { }\r\n\r\n public hideItems(items: HTMLElement[]) {\r\n items.forEach(item => item && item.classList.add(this.loadMoreHideClass));\r\n }\r\n\r\n public showItems(items: HTMLElement[]) {\r\n items.forEach(item => item && item.classList.remove(this.loadMoreHideClass));\r\n }\r\n\r\n public hideSpinner(item: HTMLElement) {\r\n item.classList.add(this.spinnerHideClass);\r\n }\r\n\r\n public showSpinner(item: HTMLElement) {\r\n item.classList.remove(this.spinnerHideClass);\r\n }\r\n\r\n public showLoadMoreResult() {\r\n var loadMoreResultWrapper = document.querySelector(this.options.loadMoreResultTextClass);\r\n if (loadMoreResultWrapper) {\r\n let allItemsLength = loadMoreResultWrapper.getAttribute('data-item-count');\r\n let currectItemLength = this.getLoadedArticles();\r\n\r\n let loadFromText = loadMoreResultWrapper.getAttribute('data-loaded-from-text');\r\n loadFromText = loadFromText.replace(`{{loaded}}`, `${currectItemLength}`);\r\n loadFromText = loadFromText.replace(`{{items_count}}`, `${allItemsLength}`);\r\n\r\n loadMoreResultWrapper.innerHTML = `\r\n ${loadFromText}\r\n
\r\n
\r\n
\r\n `\r\n }\r\n }\r\n\r\n public getLoadedArticles() {\r\n let gridNode = document.querySelector(this.gridContainerSelector);\r\n return gridNode.querySelectorAll('article').length;\r\n }\r\n\r\n getProgressBarValue(allItems, currectItems) {\r\n return (currectItems * 100) / allItems\r\n }\r\n\r\n public getDefaultOptions(): LoadMoreOptions {\r\n return {\r\n ContainerSelector: '.nx-teaser-grid',\r\n loadMoreBtnWrapperClass: 'nx-load-more',\r\n loadMoreBtnSelector: '.nx-btn--load-more',\r\n loadMoreHideClass: 'nx-load-more--hide',\r\n spinnerSelector: '.nx-load-more-spinner',\r\n spinnerHideClass: 'nx-load-more-spinner--hide',\r\n ratingsAndReviewsClass: '.nx-ratings-and-reviews-section',\r\n loadMoreResultTextClass: '.nx-load-more__result-text'\r\n };\r\n }\r\n}"],"names":["moduleSelector","LoadMoreWithTracking","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","options","super","loadMore","this","trackingCategory","window","NiveaX","IsUAEnabled","dataLayer","push","event","eventCategory","eventAction","eventLabel","eventNonInteraction","LoadMore","Object","assign","getDefaultOptions","gridContainerSelector","ContainerSelector","loadMoreBtnWrapperClass","ratingsAndReviews","ratingsAndReviewsClass","loadMoreBtnSelector","loadMoreHideClass","spinnerSelector","spinnerHideClass","init","loadMoreListener","showLoadMoreResult","initLoadMore","initModules","addEventListener","removeEventListener","loadMoreBtn","querySelector","loadMoreWrapper","spinner","loadMoreResultWrapper","loadMoreResultTextClass","ajaxUrl","xhr","XMLHttpRequest","saveBtnOffsetTop","hideItems","showSpinner","onloadSuccess","bind","onloadError","onload","status","setTimeout","remove","showItems","hideSpinner","open","send","children","responseText","childrenArray","gridNode","i","length","appendChild","newLoadMore","dispatchEvent","CustomEvent","detail","btnOffsetTop","btn","rect","getBoundingClientRect","top","items","item","classList","add","allItemsLength","getAttribute","currectItemLength","getLoadedArticles","loadFromText","replace","innerHTML","getProgressBarValue","allItems","currectItems"],"sourceRoot":""}