{"version":3,"file":"./modules/LoadMore.xxxxxxxx.js","mappings":"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","sources":["webpack:///./modules/LoadMore/LoadMore.ts","webpack:///./modules/LoadMore/LoadMoreWithT.ts","webpack:///./modules/LoadMore/index.ts"],"sourcesContent":["/// \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}","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}","import LoadMore from './LoadMoreWithT';\r\nexport default LoadMore;"],"names":["LoadMore","setup","selector","Array","from","document","querySelectorAll","filter","node","dataset","moduleInitialized","forEach","element","constructor","options","this","Object","assign","getDefaultOptions","gridContainerSelector","ContainerSelector","loadMoreBtnWrapperClass","ratingsAndReviews","ratingsAndReviewsClass","loadMoreBtnSelector","loadMoreHideClass","spinnerSelector","spinnerHideClass","init","loadMoreListener","showLoadMoreResult","initLoadMore","window","NiveaX","initModules","addEventListener","removeEventListener","loadMoreBtn","querySelector","loadMore","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","moduleSelector","LoadMoreWithTracking","super","trackingCategory","IsUAEnabled","dataLayer","push","event","eventCategory","eventAction","eventLabel","eventNonInteraction"],"sourceRoot":""}