{"version":3,"sources":["webpack:///./src/feature/menu/menu.js","webpack:///./src/foundation/utilities/clearElementContent.js"],"names":["classes","open","contentSmall","activeNavItem","activeSecondaryLink","Menu","element","el","initDomCache","activeNav","activeSecondary","addEventListeners","addEventListener","e","target","getAttribute","preventDefault","columns","dom","content","classList","contains","add","remove","openMenu","close","closeMenu","window","features","body","secondaryList","secondSection","querySelectorAll","forEach","link","populateTertiarySection","navItem","populateSecondSection","item","clearSection","parentElement","querySelector","cloneNode","append","updateListeners","tertiaryTarget","BaseFeature","clearElementContent","firstChild","removeChild"],"mappings":"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","file":"23-8ac6d59b.pkg.js","sourcesContent":["import BaseFeature from '../../foundation/base/base';\r\nimport { clearElementContent } from '../../foundation/utilities/clearElementContent';\r\n\r\nconst classes = {\r\n\topen: 'o-menu--open',\r\n\tcontentSmall: 'o-menu__content--small',\r\n\tactiveNavItem: 'o-menu__nav-item--active',\r\n\tactiveSecondaryLink: 'o-menu__secondary-link--active',\r\n};\r\n\r\nexport default class Menu extends BaseFeature {\r\n\tconstructor(element) {\r\n\t\tsuper(element);\r\n\t\tthis.el = element;\r\n\t\tthis.initDomCache();\r\n\t\tthis.activeNav = null;\r\n\t\tthis.activeSecondary = null;\r\n\r\n\t\tthis.addEventListeners();\r\n\t}\r\n\r\n\taddEventListeners() {\r\n\t\tthis.addEventListener(this.el, 'click', (e) => {\r\n\t\t\tif (e.target.getAttribute('data-js') === 'nav-item') {\r\n\t\t\t\te.preventDefault();\r\n\t\t\t\tconst columns = e.target.getAttribute('data-columns');\r\n\t\t\t\tif (columns === 'single' && !this.dom.content.classList.contains(classes.contentSmall)) {\r\n\t\t\t\t\tthis.dom.content.classList.add(classes.contentSmall);\r\n\t\t\t\t} else if (columns !== 'single' && this.dom.content.classList.contains(classes.contentSmall)) {\r\n\t\t\t\t\tthis.dom.content.classList.remove(classes.contentSmall);\r\n\t\t\t\t}\r\n\t\t\t\tthis.openMenu(e.target);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.addEventListener(this.dom.close, 'click', () => {\r\n\t\t\tthis.closeMenu();\r\n\t\t});\r\n\r\n\t\tthis.addEventListener(window.features.dom.body, 'click', (e) => {\r\n\t\t\tif (!this.el.contains(e.target)) this.closeMenu();\r\n\t\t});\r\n\t}\r\n\r\n\tupdateListeners() {\r\n\t\tconst secondaryList = this.dom.secondSection.querySelectorAll('[data-js=\"secondary-link\"]');\r\n\t\tsecondaryList.forEach((link) => {\r\n\t\t\tthis.addEventListener(link, 'mouseenter', (e) => {\r\n\t\t\t\tthis.populateTertiarySection(e.target);\r\n\t\t\t});\r\n\t\t});\r\n\t}\r\n\r\n\t/* ------------------------------------ *\\\r\n\t\t\t\tGeneral methods\r\n\t\\* ------------------------------------ */\r\n\r\n\topenMenu(navItem) {\r\n\t\tif (!this.el.classList.contains(classes.open)) {\r\n\t\t\tthis.el.classList.add(classes.open);\r\n\t\t}\r\n\t\tthis.populateSecondSection(navItem);\r\n\t}\r\n\r\n\r\n\tcloseMenu() {\r\n\t\tif (this.el.classList.contains(classes.open)) {\r\n\t\t\tthis.el.classList.remove(classes.open);\r\n\t\t\tif (this.activeNav !== null) {\r\n\t\t\t\tthis.activeNav.classList.remove(classes.activeNavItem);\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t/* ------------------------------------ *\\\r\n\t\t\t\tDesktop methods\r\n\t\\* ------------------------------------ */\r\n\r\n\tpopulateSecondSection(item) {\r\n\t\tif (this.activeNav !== null) {\r\n\t\t\tthis.activeNav.classList.remove(classes.activeNavItem);\r\n\t\t}\r\n\t\tthis.activeNav = item;\r\n\t\titem.classList.add(classes.activeNavItem);\r\n\r\n\t\tMenu.clearSection(this.dom.secondSection); // Empty second section before adding new items\r\n\t\tlet content = item.parentElement.querySelector('[data-js=\"item-content\"]');\r\n\t\tif (content) {\r\n\t\t\tcontent = content.cloneNode(true);\r\n\t\t\tthis.dom.secondSection.append(content);\r\n\t\t}\r\n\t\tthis.updateListeners();\r\n\t}\r\n\r\n\tpopulateTertiarySection(item) {\r\n\t\tif (this.activeSecondary !== null) {\r\n\t\t\tthis.activeSecondary.classList.remove(classes.activeSecondaryLink);\r\n\t\t}\r\n\t\tthis.activeSecondary = item;\r\n\t\titem.classList.add(classes.activeSecondaryLink);\r\n\r\n\t\tconst tertiaryTarget = this.dom.secondSection.querySelector('[data-js=\"tertiary-target\"]');\r\n\t\tlet content = item.parentElement.querySelector('[data-js=\"item-content\"]');\r\n\t\tif (tertiaryTarget && content) {\r\n\t\t\tMenu.clearSection(tertiaryTarget); // Empty second section before adding new items\r\n\t\t\tcontent = content.cloneNode(true);\r\n\t\t\ttertiaryTarget.append(content);\r\n\t\t}\r\n\t}\r\n\r\n\r\n\t// Uses imported function to empty second section\r\n\tstatic clearSection(target) {\r\n\t\tclearElementContent(target);\r\n\t}\r\n}\r\n","export function clearElementContent(element) {\r\n\twhile (element.firstChild) element.removeChild(element.firstChild);\r\n}\r\n"],"sourceRoot":""}