{"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":["/// <reference path=\"../../typings/niveax.d.ts\"/>\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 = <HTMLElement>document.querySelector(`.${this.loadMoreBtnWrapperClass}`);\r\n        const loadMoreBtn: HTMLElement = <HTMLElement>loadMoreWrapper.querySelector(this.loadMoreBtnSelector);\r\n        const spinner: HTMLElement = <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 = <HTMLElement>document.querySelector(this.gridContainerSelector);\r\n\r\n        for (let i = 0; i < childrenArray.length; i++) {\r\n            let element = <HTMLElement>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}}`, `<b>${currectItemLength}</b>`);\r\n            loadFromText = loadFromText.replace(`{{items_count}}`, `<b>${allItemsLength}</b>`);\r\n\r\n            loadMoreResultWrapper.innerHTML = `\r\n                ${loadFromText}\r\n                <div class=\"nx-load-more__progress\">\r\n                    <div class=\"nx-load-more__progress-bar\" style=\"width:${this.getProgressBarValue(allItemsLength, currectItemLength)}%\">\r\n               </div>\r\n            `\r\n        }\r\n    }\r\n\r\n    public getLoadedArticles() {\r\n        let gridNode = <HTMLElement>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":""}