{"version":3,"file":"z-menu.min.js","sources":["../../src/scripts/foundation/moduleInitializer.js","../../src/scripts/foundation/eventBus.js","../../src/scripts/feature/navigation/zen-nav-header.js","../../src/scripts/feature/navigation/zen-nav-menu.js","../../src/scripts/feature/navigation/zen-nav-dropdownOption.js","../../src/scripts/feature/navigation/zen-nav-dropdown.js","../../src/scripts/feature/navigation/zen-nav-collapsible.js","../../src/scripts/feature/navigation/zen-nav-budget-selector.js","../../src/scripts/feature/navigation/zen-nav-search.js","../../src/scripts/feature/navigation/zen-nav-search-selector.js","../../src/scripts/feature/navigation/zen-nav-budget-search.js","../../src/scripts/feature/navigation/zen-nav-model-search.js","../../src/scripts/feature/accounts/zen-login-cta.js","../../src/scripts/feature/accounts/zen-login-selectors.js","../../src/scripts/feature/accounts/zen-login.js","../../src/scripts/feature/accounts/sign-in-link.js","../../src/scripts/feature/cta/cookie-banner.js","../../src/scripts/feature/page-content/cookie-consent.js","../../src/scripts/feature/navigation/zen-nav-open-submenu.js","../../src/scripts/feature/navigation/zen-nav-mobile-close-submenu.js","../../src/scripts/feature/navigation/zen-nav-loop.js","../../src/scripts/menu.js"],"sourcesContent":["import document from 'document';\r\n\r\nexport const loadModules = modules => {\r\n modules.forEach((Module, index) => {\r\n if (!Module || typeof Module !== 'function') {\r\n console.log('Invalid module format', module, index);\r\n }\r\n\r\n const module = Module();\r\n \r\n if (module.selector) {\r\n const components = document.querySelectorAll(module.selector);\r\n if (components) {\r\n [...components].forEach(component => {\r\n //console.log('initializing module', module.selector);\r\n module.init(component);\r\n });\r\n } else {\r\n //console.log('module not found', module.selector);\r\n }\r\n } else {\r\n module.init();\r\n }\r\n });\r\n};","// example from https://davidwalsh.name/pubsub-javascript\r\nexport const eventBus = (() => {\r\n\r\n var topics = {};\r\n\r\n var subscribe = function (topic, listener) {\r\n if (!topics.hasOwnProperty.call(topics, topic)) {\r\n topics[topic] = [];\r\n }\r\n topics[topic].push(listener);\r\n };\r\n\r\n var unsubscribe = function (topic) {\r\n delete topics[topic];\r\n };\r\n\r\n // fire the subscribed event\r\n var publish = function (topic, options) {\r\n // manages event queue\r\n if (!topics.hasOwnProperty.call(topics, topic)) {\r\n return;\r\n }\r\n\r\n topics[topic].forEach(function (item) {\r\n item(options != undefined ? options : {});\r\n });\r\n };\r\n\r\n return {\r\n subscribe: subscribe,\r\n unsubscribe: unsubscribe,\r\n publish: publish\r\n };\r\n})();","\r\nimport document from 'document';\r\nimport { eventBus } from '../../foundation/eventBus';\r\n\r\nexport const zenNavEvents = {\r\n openMenu: 'openMenu'\r\n}\r\nexport const zenNavSelectors = {\r\n menuHeader: '.zen-nav-menu-header-mobile',\r\n navMenu: '.zen-nav-menu',\r\n navMenuOpen: 'zen-nav-menu--open',\r\n navVeil: '.zen-nav-veil__link',\r\n navOpen: 'navigation-is-active',\r\n menu: '.menu-bar',\r\n bannerLink: 'nav-login-link',\r\n subNavOpen: 'nav-submenu__list--open',\r\n subNavMenu: '.nav-submenu__list'\r\n};\r\nexport const zenNavElements = () => {\r\n return {\r\n menu: document.querySelector(zenNavSelectors.menu),\r\n navMenu: document.querySelector(zenNavSelectors.navMenu),\r\n menuHeader: document.querySelector(zenNavSelectors.menuHeader),\r\n navVeil: document.querySelector(zenNavSelectors.navVeil),\r\n bannerLink: document.querySelector('.menu-bar .zen-login-cta--mobile .nav-login-link'),\r\n subNavMenu: document.querySelector(zenNavSelectors.subNavMenu),\r\n burgerMenuButton: document.querySelector('.zen-nav-header-mobile .zen-burger-menu')\r\n }\r\n}\r\nexport const zenNavHeader = () => {\r\n const init = component => {\r\n const handleClick = () => {\r\n const elements = zenNavElements();\r\n const { navOpen: openSelector, navMenuOpen} = zenNavSelectors;\r\n elements.navMenu.classList.add(navMenuOpen);\r\n elements.menuHeader.classList.add(openSelector);\r\n elements.menu.classList.add(openSelector);\r\n elements.navVeil.classList.add(openSelector);\r\n eventBus.publish(zenNavEvents.openMenu);\r\n elements.burgerMenuButton.setAttribute('aria-expanded', true);\r\n elements.bannerLink.focus();\r\n };\r\n component.addEventListener('click', handleClick);\r\n };\r\n return {\r\n init: init,\r\n selector: '.zen-burger-menu'\r\n };\r\n};","import { eventBus } from '../../foundation/eventBus';\r\nimport { zenNavEvents as menuEvents, zenNavSelectors as selectors, zenNavElements } from './zen-nav-header';\r\nvar burgerMenu = document.getElementById('zen-burger-menu');\r\n\r\nexport const zenNavMenu = () => {\r\n \r\n const elementDisabled = (element) => element.ariaDisabled !== null ? (element.ariaDisabled === \"true\") : false;\r\n const isOpenSubmenuLink = (element) => element.ariaHasPopup !== null ? (element.ariaHasPopup === \"true\"): false;\r\n \r\n /* prevent overlaying panel propogating events to undelying banner */\r\n const handleBackPanelOverlayingBanner = () => elements.bannerLink.setAttribute('aria-disabled', true);\r\n const handleBackLinkClick = () => elements.bannerLink.setAttribute('aria-disabled', false);\r\n\r\n const elements = zenNavElements();\r\n \r\n const handleMenuClosed = () => {\r\n const { navOpen: openSelector, navMenuOpen} = selectors;\r\n elements.menuHeader.classList.remove(openSelector);\r\n elements.menu.classList.remove(openSelector);\r\n elements.navMenu.classList.remove(navMenuOpen);\r\n elements.navVeil.classList.remove(openSelector);\r\n elements.subNavMenu.classList.remove(selectors.subNavOpen);\r\n burgerMenu.setAttribute('aria-expanded', false);\r\n burgerMenu.focus();\r\n }\r\n const handleBannerClick = (banner) => {\r\n const bannerEnabled = !elementDisabled(elements.bannerLink);\r\n \r\n if (!isOpenSubmenuLink(banner) && !bannerEnabled){\r\n handleBackLinkClick();\r\n }\r\n if (bannerEnabled) {\r\n location.href = banner.getAttribute('data-login-url');\r\n }\r\n }\r\n const menuClick = (event) => {\r\n if (isOpenSubmenuLink(event.target)){\r\n handleBackPanelOverlayingBanner();\r\n }\r\n if (event.target.id == selectors.bannerLink) {\r\n if (elements.bannerLink.classList.contains('loggedin')){\r\n event.preventDefault();\r\n }\r\n handleBannerClick(event.target);\r\n }\r\n }\r\n const closeBurgerMenu = (event) => {\r\n if (elements.menu.classList.contains(selectors.navOpen)) {\r\n if (event.keyCode == 27) {\r\n handleMenuClosed();\r\n document.removeEventListener(\"keydown\", closeBurgerMenu)\r\n }\r\n }\r\n }\r\n const init = component => {\r\n eventBus.subscribe(menuEvents.openMenu, () => {\r\n component.addEventListener('click', handleMenuClosed);\r\n elements.navVeil.addEventListener('click', handleMenuClosed);\r\n elements.menu.addEventListener('click', menuClick);\r\n document.addEventListener(\"keydown\", closeBurgerMenu);\r\n });\r\n };\r\n \r\n return {\r\n init: init,\r\n selector: '.zen-nav-menu-header-mobile__close-button',\r\n handleMenuClosed: handleMenuClosed\r\n };\r\n}","\r\nexport const DropdownOption = option => {\r\n const value = option.getAttribute(\"data-value\");\r\n const link = option.querySelector(\"a\");\r\n const css = {\r\n isSelected: \"is-selected\",\r\n isDisabled: \"is-disabled\",\r\n };\r\n return {\r\n elem: option,\r\n value: value,\r\n getLinkText() {\r\n return link.innerHTML;\r\n },\r\n setLinkHref(href) {\r\n link.href = href;\r\n },\r\n select() {\r\n option.classList.add(css.isSelected);\r\n },\r\n deselect() {\r\n option.classList.remove(css.isSelected);\r\n },\r\n isSelected() {\r\n return option.classList.contains(css.isSelected);\r\n },\r\n enable() {\r\n option.classList.remove(css.isDisabled);\r\n },\r\n disable() {\r\n option.classList.add(css.isDisabled);\r\n },\r\n isDisabled() {\r\n return option.classList.contains(css.isDisabled);\r\n },\r\n };\r\n};\r\nDropdownOption.selectors = {\r\n root: \".dropdown__option\"\r\n};","\r\nimport { zenNavCollapsible } from './zen-nav-collapsible';\r\nimport { DropdownOption } from './zen-nav-dropdownOption';\r\n\r\nexport const zenNavDropdown = function (dropdown, onOptionSelected, onOwnedInputKeyUp, onOpened){\r\n const self = this;\r\n const label = dropdown.querySelector(\".dropdown__label\");\r\n const filterKey = dropdown.getAttribute(\"data-filter-Key\");\r\n const disabledClass = \"disabled\";\r\n const fullFilterList = [];\r\n const dropDownList = dropdown.querySelector('.dropdown__options');\r\n const dropDownListItems = Array.prototype.slice.call(dropdown.querySelectorAll('.dropdown__options li'))\r\n const isOwner = filterKey === null;\r\n const inputField = dropdown.querySelector(\".dropdown__input\");\r\n const readOptionsListIntoArray = () => {\r\n dropDownListItems.map((item) => { \r\n fullFilterList.push({ \r\n \"item\" : item.textContent.trim(),\r\n \"filterKey\" : item.getAttribute(filterKey),\r\n });\r\n });\r\n };\r\n const createOptionListItem = ({ item = '' }) => `