{"version":3,"file":"Header.js","names":["Header","a","setters","Component","default","mix","Event","mediaQuery","on","off","trigger","animate","deepMerge","Accessibility","tryParseJSON","execute","with","constructor","element","options","arguments","length","enableSticky","_resizable","_scrollable","hideOnScroll","breakpoints","large","anchor","initCache","sentinelObserver","headerObserver","classNames","focused","sticked","disabled","hamburgerOpened","quickSearchOpened","searchSuggestionsOpened","searchEnterAnimation","searchLeaveAnimation","selectors","anchorElement","is","document","querySelector","headerInner","searchContainer","simpleSearchCta","initState","state","isSticky","isDisabled","wasDisabled","searchOpened","hasSentinel","lastScrollTop","isHeaderTransparent","bindEvents","updateHeight","toggleSearchBar","bind","onKeyboardControl","onOpenSearchSuggestions","onCloseSearchSuggestion","onSearchOverlayClosed","onSearchClose","toggleHamburger","checkHeaderHeight","headerFocused","headerUnfocused","afterInit","body","classList","contains","saveOriginalTabIndex","addHeaderObserver","addSentinel","add","remove","event","key","shiftKey","target","getAttribute","closeSearchBar","focus","IntersectionObserver","records","record","intersectionRatio","threshold","observe","currentHeight","getBoundingClientRect","height","emit","headerHeight","style","isOpened","setTimeout","openSearchBar","setAttribute","onClose","bubbles","then","analytics","onScroll","currentScrollTop","window","scrollY","params","restoreFocus","onResize","setAccessibility","disableSticky","resetOriginalTabIndex","sentinel","createElement","appendChild","addSentinelObserver","setAltTabIndex","activeElement","destroy","disconnect","removeListener"],"sources":["components/global/Header.js"],"sourcesContent":["/* eslint max-lines: [\"error\", {\"max\": 350, \"skipBlankLines\": true, \"skipComments\": true }] */\n\nimport Component from 'core/Component';\nimport { mix } from 'core/mixwith';\nimport { Event } from 'services/EventEmitter';\nimport { mediaQuery } from 'toolbox/mediaQuery';\nimport { on, off, trigger } from 'toolbox/event';\nimport { animate } from 'toolbox/animate';\nimport { deepMerge } from 'toolbox/deepMerge';\nimport Accessibility from 'mixins/Accessibility';\nimport { tryParseJSON } from 'toolbox/object';\n\n/**\n * This is a description of the Header constructor function.\n * @class\n * @classdesc This is a description of the Header class.\n * @extends Component\n */\nexport default class Header extends mix(Component).with(Accessibility) {\n    /**\n     * Constructor of the class that mainly merge the options of the components\n     * @param {HTMLElement} element HTMLElement of the component\n     * @param {Object} options options that belongs to the component\n     */\n    constructor(element, options = {}) {\n        super(element, deepMerge({\n            enableSticky: true,\n            _resizable: true,\n            _scrollable: true,\n            hideOnScroll: true,\n\n            breakpoints: {\n                large: {\n                    anchor: '[data-js-anchor-large]', // has to be a selector inside header element\n                },\n            },\n        }, options));\n    }\n\n    /**\n     * All selectors must be cached. Never cache elements that are out of the component scope\n     */\n    initCache() {\n        this.sentinelObserver = null;\n        this.headerObserver = null;\n\n        this.classNames = {\n            focused: 'm-focused',\n            sticked: 'm-sticked',\n            disabled: 'm-disabled',\n            hamburgerOpened: 'm-hamburger-active',\n            quickSearchOpened: 'm-search-active',\n            searchSuggestionsOpened: 'm-search-suggestions-active',\n            searchEnterAnimation: 'h-fade-in',\n            searchLeaveAnimation: 'h-fade-out',\n        };\n\n        if (this.options.enableSticky) {\n            if ((mediaQuery.is('xlarge'))) {\n                this.selectors.anchorElement = document.querySelector('[data-js-anchor-large]');\n            } else {\n                this.selectors.anchorElement = document.querySelector('[data-js-anchor]');\n            }\n            this.selectors.headerInner = this.element.querySelector('[data-js-header-inner]');\n        }\n        this.selectors.searchContainer = this.element.querySelector('[data-js-header-search-container]');\n        if ((mediaQuery.is('xlarge'))) {\n            this.selectors.simpleSearchCta = this.element.querySelector('[data-js-header-search-cta-large]');\n        } else {\n            this.selectors.simpleSearchCta = this.element.querySelector('[data-js-header-search-cta]');\n        }\n    }\n\n    /**\n     * Init the different state of the component\n     * It helps to avoid heavy DOM manipulation\n     */\n    initState() {\n        this.state.isSticky = false;\n        this.state.isDisabled = false;\n        this.state.wasDisabled = false;\n        this.state.searchOpened = false;\n        this.state.hamburgerOpened = false;\n        this.state.hasSentinel = false;\n        this.state.lastScrollTop = undefined;\n        this.state.isHeaderTransparent = false;\n    }\n\n    /**\n     * Should contain only event listeners and nothing else\n     * All the event handlers should be into a separated function. No usage of anonyous function\n     */\n    bindEvents() {\n        if (this.options.enableSticky) {\n            Event.on('contentPanel.transition.ended', this.updateHeight, this);\n        }\n\n        if (this.selectors.simpleSearchCta) {\n            on('click', this.selectors.simpleSearchCta, this.toggleSearchBar.bind(this));\n        }\n\n        on('keydown', this.selectors.searchContainer, this.onKeyboardControl.bind(this));\n        on('simplesearch.results.show', this.element, this.onOpenSearchSuggestions.bind(this));\n        on('simplesearch.results.hide', this.element, this.onCloseSearchSuggestion.bind(this));\n        on('simplesearch.overlay.closed', this.element, this.onSearchOverlayClosed.bind(this));\n        Event.on('simplesearch.close', this.onSearchClose, this);\n        Event.on('hamburger.toggle', this.toggleHamburger, this);\n        Event.on('sticky.stick', this.checkHeaderHeight, this);\n        Event.on('contentPanel.hide', this.checkHeaderHeight, this);\n\n        if (this.state.isHeaderTransparent) {\n            Event.on('header.focused', this.headerFocused, this);\n            Event.on('header.unfocused', this.headerUnfocused, this);\n        }\n    }\n\n    /**\n     * After init\n     * Run any script after the component is fully initialized\n     */\n    afterInit() {\n        this.state.isHeaderTransparent = document.body.classList.contains('header-transparent');\n\n        if (this.options.enableSticky) {\n            super.saveOriginalTabIndex();\n            this.addHeaderObserver();\n            this.addSentinel();\n        }\n    }\n\n    /**\n     * Header focused\n     * Add class m-focused to header\n     */\n    headerFocused() {\n        if (!this.element.classList.contains(this.classNames.focused)) {\n            this.element.classList.add(this.classNames.focused);\n        }\n    }\n\n    /**\n     * Header unfocused\n     * Remove class m-focused from header\n     */\n    headerUnfocused() {\n        if (this.element.classList.contains(this.classNames.focused)) {\n            this.element.classList.remove(this.classNames.focused);\n        }\n    }\n\n    /**\n     * Keydown event handler\n     *\n     * @param {Object} event Event object\n     */\n    onKeyboardControl(event) {\n        switch (event.key) {\n        case 'Tab': // 'Tab' key\n            if (!event.shiftKey && event.target.getAttribute('data-js-focus-order') === 'last') {\n                this.closeSearchBar();\n            }\n            if (event.shiftKey && event.target.getAttribute('data-js-focus-order') === 'first') { // 'TAB' + shift key\n                this.closeSearchBar();\n            }\n            break;\n        case 'Escape': // 'Escape' key\n            this.closeSearchBar();\n            this.selectors.simpleSearchCta.focus();\n            break;\n        default:\n            break;\n        }\n    }\n\n    /**\n     * Add intersection observer for header\n     */\n    addHeaderObserver() {\n        this.headerObserver = new IntersectionObserver((records) => {\n            const record = records[0];\n\n            // Started sticking.\n            if (record.intersectionRatio < 1) {\n                this.enableSticky();\n            }\n        }, { threshold: [0, 1] });\n\n        if (this.selectors.anchorElement) {\n            // Attach observer to the anchor where you want the sticky to start\n            this.headerObserver.observe(this.selectors.anchorElement);\n        }\n    }\n\n    /**\n     * Broadcast height of the header\n     */\n    checkHeaderHeight() {\n        const currentHeight = this.state.isDisabled ? 0 : this.selectors.headerInner.getBoundingClientRect().height;\n\n        if (this.state.wasDisabled !== this.state.isDisabled) {\n            Event.emit('header.updateHeight', {\n                height: currentHeight,\n                isSticky: !this.state.isDisabled,\n            });\n        }\n\n        this.state.wasDisabled = this.state.isDisabled;\n    }\n\n    /**\n     * Update height of the header\n     *\n     * @param {Number} height of header\n     */\n    updateHeight(height) {\n        let headerHeight = 'auto';\n\n        // We should set the header height only when during sticky mode\n        if (this.state.isSticky) {\n            headerHeight = height || this.element.getBoundingClientRect().height;\n        }\n\n        this.element.style.height = headerHeight === 'auto' ? headerHeight : `${headerHeight}px`;\n        this.checkHeaderHeight();\n    }\n\n    /**\n     * ToggleHamburger event handler\n     *\n     * @param {Boolean} isOpened Flag\n     */\n    toggleHamburger(isOpened) {\n        this.state.hamburgerOpened = isOpened;\n        if (this.state.hamburgerOpened) {\n            this.element.classList.add(this.classNames.hamburgerOpened);\n        } else {\n            setTimeout(() => {\n                this.element.classList.remove(this.classNames.hamburgerOpened);\n            }, 200);\n        }\n    }\n\n    /**\n     * ToggleSearchBar event handler\n     */\n    toggleSearchBar() {\n        if (this.state.searchOpened) {\n            this.closeSearchBar();\n        } else {\n            this.openSearchBar();\n        }\n    }\n\n    /**\n     * Open Search Bar\n     * @returns {Promise} - Promise\n     */\n    openSearchBar() {\n        const { quickSearchOpened, searchEnterAnimation } = this.classNames;\n\n        this.element.classList.add(quickSearchOpened);\n        this.state.searchOpened = true;\n        this.selectors.simpleSearchCta.setAttribute('aria-expanded', 'true');\n\n        if (mediaQuery.is('xlarge')) {\n            Event.emit('overlay.open', {\n            /**\n             * on overlay close\n             */\n                onClose: () => {\n                    trigger('simplesearch.overlay.closed', this.element, { bubbles: true });\n                    trigger('simplesearch.results.hide', this.element, { bubbles: true });\n                },\n            });\n        }\n\n        Event.emit('hamburger.menu.close');\n        Event.emit('header.search.open');\n\n        return animate(searchEnterAnimation, this.selectors.searchContainer).then(() => {\n            const analytics = tryParseJSON(this.selectors.simpleSearchCta.getAttribute('data-analytics'));\n            if (analytics) {\n                Event.emit('analytics.event', analytics);\n            }\n        });\n    }\n\n    /**\n     * Close Search Bar\n     * @returns {Promise} - Promise\n     */\n    closeSearchBar() {\n        if (!this.state.searchOpened) {\n            return null;\n        }\n\n        const { quickSearchOpened, searchLeaveAnimation } = this.classNames;\n        Event.emit('overlay.close');\n\n        return animate(searchLeaveAnimation, this.selectors.searchContainer)\n            .then(() => {\n                Event.emit('header.search.close');\n                this.state.searchOpened = false;\n                this.element.classList.remove(quickSearchOpened);\n                this.selectors.simpleSearchCta.setAttribute('aria-expanded', 'false');\n            });\n    }\n\n    /**\n     * Handlers to onscroll event\n     */\n    onScroll() {\n        if (!this.state.isSticky || this.state.hamburgerOpened || !this.options.hideOnScroll) {\n            return;\n        }\n\n        const currentScrollTop = window.scrollY;\n\n        if (currentScrollTop < this.state.lastScrollTop && this.state.isDisabled) {\n            this.element.classList.remove(this.classNames.disabled);\n            this.element.classList.add(this.classNames.sticked);\n            this.state.isDisabled = false;\n        } else if (currentScrollTop > this.state.lastScrollTop && !this.state.isDisabled) {\n            this.element.classList.add(this.classNames.disabled);\n            this.state.isDisabled = true;\n        }\n\n        this.checkHeaderHeight();\n        this.state.lastScrollTop = currentScrollTop;\n    }\n\n    /**\n     * SearchOverlayClosed event handler\n     */\n    onSearchOverlayClosed() {\n        this.closeSearchBar();\n    }\n\n    /**\n     * on search field close handler\n     * @param {Object} params Event object\n     */\n    onSearchClose(params) {\n        this.closeSearchBar();\n\n        if (params && params.restoreFocus) {\n            this.selectors.simpleSearchCta.focus();\n        }\n    }\n\n    /**\n     * Open Search Suggestions\n     */\n    onOpenSearchSuggestions() {\n        this.element.classList.add(this.classNames.searchSuggestionsOpened);\n        this.state.searchSuggestionsOpened = true;\n    }\n\n    /**\n     * SearchSuggestionsOverlayClosed event handler\n     */\n    onCloseSearchSuggestion() {\n        if (this.state.searchSuggestionsOpened) {\n            this.element.classList.remove(this.classNames.searchSuggestionsOpened);\n            this.state.searchSuggestionsOpened = false;\n        }\n    }\n\n    /**\n     * Handlers to onresize event\n     */\n    onResize() {\n        this.updateHeight();\n    }\n\n    /**\n     * Enable sticked state\n     */\n    enableSticky() {\n        if (this.state.isSticky) {\n            return;\n        }\n\n        this.state.isSticky = true;\n        this.updateHeight();\n        if (!this.options.hideOnScroll || this.state.searchOpened) {\n            this.element.classList.add(this.classNames.sticked);\n        }\n        this.checkHeaderHeight();\n        Event.emit('header.sticky.enabled');\n        Event.emit('hamburger.menu.close');\n\n        if (mediaQuery.is('xlarge')) {\n            this.setAccessibility();\n        }\n    }\n\n    /**\n     * Disabled sticked state\n     */\n    disableSticky() {\n        this.state.isSticky = false;\n        this.state.isDisabled = false;\n        this.updateHeight('auto');\n        this.element.classList.remove(this.classNames.sticked);\n        this.element.classList.remove(this.classNames.disabled);\n        this.checkHeaderHeight();\n        Event.emit('header.sticky.disabled');\n\n        if (mediaQuery.is('xlarge')) {\n            super.resetOriginalTabIndex(true);\n        }\n    }\n\n    /**\n     * Adding a sentinel within the header. A sentinel is an HTMLElement placed at the initial position of the anchor\n     * without that we cannot know when we disable the sticky state. That sentinel should take the same\n     * height and position as the anchor\n     */\n    addSentinel() {\n        if (this.state.hasSentinel) {\n            return;\n        }\n\n        this.state.hasSentinel = true;\n\n        this.sentinel = document.createElement('div');\n        this.sentinel.classList.add('l-header__sentinel');\n\n        if (this.selectors.anchorElement) {\n            this.sentinel.style.height = `${this.selectors.anchorElement.getBoundingClientRect().height}px`;\n        }\n\n        this.element.appendChild(this.sentinel);\n\n        this.addSentinelObserver();\n    }\n\n    /**\n     * Add an observer to the sentinel\n     *\n     * @param {HTMLElement} sentinel Data\n     */\n    addSentinelObserver() {\n        this.sentinelObserver = new IntersectionObserver((records) => {\n            const record = records[0];\n            // stop sticking.\n            if (record.intersectionRatio >= 1) {\n                this.disableSticky();\n            }\n        }, { threshold: [1] });\n\n        this.sentinelObserver.observe(this.sentinel);\n    }\n\n    /**\n     * Modify tabindex in sticky header for consistent TAB navigation.\n     * If user didn't use TAB navigation, move focus to sticky header\n     */\n    setAccessibility() {\n        super.setAltTabIndex();\n\n        if (document.activeElement === document.body) {\n            this.element.focus();\n        }\n    }\n\n    /**\n     * Destroy is called automatically after the component is being removed from the DOM\n     * You must always destroy the listeners attached to an element to avoid any memory leaks\n     */\n    destroy() {\n        if (this.options.enableSticky) {\n            if (this.sentinelObserver) {\n                this.sentinelObserver.disconnect();\n            }\n\n            if (this.headerObserver) {\n                this.headerObserver.disconnect();\n            }\n\n            this.updateHeight('auto');\n            Event.removeListener('contentPanel.transition.ended', this.updateHeight, this);\n        }\n\n        off('click', this.selectors.simpleSearchCta);\n        off('keydown', this.selectors.searchContainer);\n        off('simplesearch.results.show', this.element);\n        off('simplesearch.results.hide', this.element);\n        off('simplesearch.overlay.closed', this.element);\n        Event.removeListener('simplesearch.close', this.toggleSearchBar, this);\n        Event.removeListener('hamburger.toggle', this.toggleHamburger, this);\n        Event.removeListener('sticky.stick', this.checkHeaderHeight, this);\n        Event.removeListener('contentPanel.hide', this.checkHeaderHeight, this);\n\n        if (this.state.isHeaderTransparent) {\n            Event.removeListener('header.focused', this.headerFocused, this);\n            Event.removeListener('header.unfocused', this.headerUnfocused, this);\n        }\n    }\n}\n"],"mappings":"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","ignoreList":[]}