{"version":3,"file":"8591.0142f17d4d64f5e99c5b.js","mappings":"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","sources":["webpack://nationalspacecentre.web/./wwwroot/app/src/js/keyboard-accessibility-check.js","webpack://nationalspacecentre.web/./wwwroot/app/src/js/main-navigation.js"],"sourcesContent":["// keyboard control detection\r\n\r\nexport const keyboardControl = {\r\n active: false\r\n}\r\n\r\nlet accessibilityTimeout = null;\r\nconst toggleAccessibilityClass = (mode) => {\r\n clearTimeout(accessibilityTimeout);\r\n accessibilityTimeout = setTimeout(() => {\r\n document.body.classList.toggle('keyboard-control', mode);\r\n keyboardControl.active = mode;\r\n }, 100);\r\n}\r\ndocument.body.addEventListener('keydown', function(e) {\r\n switch (e.key) {\r\n case 'Escape':\r\n case 'Up':\r\n case 'ArrowUp':\r\n case 'Down':\r\n case 'ArrowDown':\r\n case 'Left':\r\n case 'ArrowLeft':\r\n case 'Tab':\r\n case 'Right':\r\n case 'ArrowRight':\r\n case 'PageUp':\r\n case 'PageDown':\r\n case 'Spacebar':\r\n case ' ':\r\n case 'Enter':\r\n case 'Return':\r\n toggleAccessibilityClass(true);\r\n break;\r\n }\r\n});\r\ndocument.body.addEventListener('mousedown', function() {\r\n toggleAccessibilityClass(false);\r\n});\r\ndocument.body.addEventListener('touchstart', function() {\r\n toggleAccessibilityClass(false);\r\n});","// *****************************\r\n// ***** Main Navigation *****\r\n// *****************************\r\nimport { breakPoint } from './config';\r\nimport { keyboardControl } from './keyboard-accessibility-check';\r\n\r\nconst $html = document.querySelector('html');\r\nlet isMobile = true,\r\n resizeRequested = false;\r\n\r\nexport const mobileNavigation = {\r\n active: false\r\n}\r\nexport const desktopNavigation = {\r\n active: false\r\n}\r\n\r\nclass menu {\r\n\r\n constructor(wrapper, toggleButton, ul) {\r\n this.wrapper = wrapper;\r\n this.desktopSubmenuIndicator = wrapper.querySelector('.submenu--menu-indicator');\r\n this.navContent = wrapper.querySelector('nav');\r\n this.mobileToggle = toggleButton;\r\n this.ul = ul;\r\n this.expanded = false;\r\n this.focusTimeout = null;\r\n this.hideTimeout = null;\r\n this.hideDelay = 500;\r\n this.activeItemIndex = -1;\r\n this.activeSubmenuItemIndex = -1;\r\n this.items = [];\r\n [...this.ul.querySelectorAll('.header--content--menu > nav > ul > li')].forEach(i => {\r\n let x = this.items.length;\r\n this.items[x] = new menuItem(x, i, 1);\r\n });\r\n }\r\n\r\n show() {\r\n // make menu semantically visible in both mobile and desktop versions\r\n this.expanded = true;\r\n this.wrapper.setAttribute('aria-hidden', false);\r\n if(isMobile) {\r\n // mobile - animate in the menu element\r\n this.mobileToggle.setAttribute('aria-expanded', true);\r\n $html.classList.add('mobile-menu-fading');\r\n mobileNavigation.active = true;\r\n window.requestAnimationFrame(() => {\r\n $html.classList.add('mobile-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n this.transitionEnd(true);\r\n this.update(true, 0, -1);\r\n };\r\n });\r\n } else {\r\n // desktop resets\r\n mobileNavigation.active = false;\r\n window.requestAnimationFrame(() => {\r\n $html.classList.remove('mobile-menu-active');\r\n });\r\n }\r\n }\r\n\r\n hide() {\r\n if(isMobile && mobileNavigation.active) {\r\n // mobile - animate out menu element\r\n this.expanded = false;\r\n mobileNavigation.active = false;\r\n this.mobileToggle.setAttribute('aria-expanded', false);\r\n $html.classList.add('mobile-menu-fading');\r\n $html.classList.remove('mobile-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n this.transitionEnd(false);\r\n };\r\n } else {\r\n // hide menu semantically in both mobile and desktop versions\r\n this.expanded = false;\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n }\r\n }\r\n\r\n transitionEnd(mode) {\r\n if(!mode) {\r\n // menu has hidden\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n }\r\n $html.classList.remove('mobile-menu-fading');\r\n this.wrapper.ontransitionend = null;\r\n }\r\n\r\n storeTriggerPositions() {\r\n for(let x = 0, l = this.items.length; x < l; x++) {\r\n if(this.items[x].button != null) {\r\n let b = this.items[x].button.getBoundingClientRect();\r\n this.items[x].buttonX = Math.floor((b.left + b.right) / 2);\r\n }\r\n }\r\n if(this.desktopSubmenuIndicator != null && this.activeItemIndex > -1) this.desktopSubmenuIndicator.style.left = `${this.items[this.activeItemIndex].buttonX - 16}px`;\r\n }\r\n\r\n update(setFocus = false, itemIndex = -1, submenuItemIndex = -1) {\r\n if(!isMobile) this.storeTriggerPositions();\r\n if (itemIndex > -1 && submenuItemIndex > -1) {\r\n\r\n // FOCUS TARGET IS SUBMENU MENU ITEM\r\n\r\n if (isMobile && !this.expanded) this.show();\r\n // close old submenu without animation?\r\n if (this.activeItemIndex > -1 && this.activeSubmenuItemIndex > -1 && itemIndex != this.activeItemIndex && this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(isMobile);\r\n // desktop - update submenu indicator\r\n if(this.desktopSubmenuIndicator != null) this.desktopSubmenuIndicator.style.left = `${this.items[itemIndex].buttonX - 15}px`;\r\n // open new submenu\r\n if (!this.items[itemIndex].submenu.expanded) this.items[itemIndex].submenu.show(isMobile || (this.activeItemIndex == -1 || this.activeSubmenuItemIndex == -1));\r\n // focus on item\r\n if (keyboardControl.active && setFocus) this.items[itemIndex].submenu.items[submenuItemIndex].focus();\r\n\r\n } else if (itemIndex > -1) {\r\n\r\n // FOCUS TARGET IS TOP-LEVEL MENU ITEM\r\n\r\n if (isMobile && !this.expanded) this.show();\r\n // close old submenu with animation?\r\n if (this.activeItemIndex > -1 && this.items[this.activeItemIndex].hasSubmenu) {\r\n if (this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(true);\r\n }\r\n // focus on item\r\n if (keyboardControl.active && setFocus) {\r\n if (this.items[itemIndex].hasSubmenu) {\r\n this.items[itemIndex].submenu.toggle.focus();\r\n } else {\r\n this.items[itemIndex].link.focus();\r\n }\r\n }\r\n\r\n } else {\r\n if (this.activeItemIndex > -1 && this.activeSubmenuItemIndex > -1 && this.items[this.activeItemIndex].submenu.expanded) this.items[this.activeItemIndex].submenu.hide(!isMobile);\r\n if (isMobile && this.expanded) {\r\n this.hide();\r\n if (keyboardControl.active && setFocus) this.mobileToggle.focus();\r\n }\r\n }\r\n // update tabIndex setting\r\n if (this.activeItemIndex != itemIndex) {\r\n if (this.activeItemIndex > -1) {\r\n if (this.items[this.activeItemIndex].hasSubmenu) {\r\n this.items[this.activeItemIndex].submenu.toggle.setAttribute('tabindex', '-1');\r\n } else {\r\n this.items[this.activeItemIndex].link.setAttribute('tabindex', '-1');\r\n }\r\n }\r\n let nextTabIndex = itemIndex;\r\n if (!isMobile && nextTabIndex == -1) nextTabIndex = 0;\r\n if (nextTabIndex > -1) {\r\n if (this.items[nextTabIndex].hasSubmenu) {\r\n this.items[nextTabIndex].submenu.toggle.setAttribute('tabindex', '0');\r\n } else {\r\n this.items[nextTabIndex].link.setAttribute('tabindex', '0');\r\n }\r\n }\r\n }\r\n // store new values\r\n this.activeItemIndex = itemIndex;\r\n this.activeSubmenuItemIndex = submenuItemIndex;\r\n }\r\n}\r\n\r\nclass menuItem {\r\n constructor(itemIndex, obj, level) {\r\n this.level = level;\r\n this.index = itemIndex;\r\n this.li = obj;\r\n this.button = obj.querySelector('button.submenu--toggle');\r\n this.buttonX = 0;\r\n let sub = obj.querySelector('div.submenu');\r\n if (this.button && sub) {\r\n this.hasSubmenu = true;\r\n this.submenu = new subMenu(sub, this.button, level);\r\n } else {\r\n this.hasSubmenu = false;\r\n this.link = obj.querySelector('a');\r\n }\r\n }\r\n}\r\n\r\nclass subMenu {\r\n constructor(sub, button, level) {\r\n this.expanded = false;\r\n this.toggle = button;\r\n this.wrapper = sub;\r\n this.level = level;\r\n this.closeBtn = this.wrapper.querySelector('.submenu--close');\r\n this.inner = this.wrapper.querySelector('.submenu--content-area');\r\n this.items = [];\r\n [...this.inner.querySelectorAll('a, button')].forEach(i => {\r\n this.items.push(i);\r\n });\r\n }\r\n show(animate) {\r\n this.expanded = true;\r\n this.wrapper.setAttribute('aria-hidden', false);\r\n this.toggle.setAttribute('aria-expanded', true);\r\n if(isMobile) {\r\n this.wrapper.style.maxHeight = this.inner.offsetHeight + 'px';\r\n if (animate) {\r\n this.wrapper.classList.add('animate');\r\n this.wrapper.ontransitionend = () => {\r\n this.wrapper.classList.remove('animate');\r\n if (this.level > 1 || isMobile) {\r\n this.wrapper.style.maxHeight = 'none';\r\n this.wrapper.ontransitionend = null;\r\n }\r\n };\r\n } else {\r\n this.wrapper.style.maxHeight = 'none';\r\n }\r\n } else {\r\n this.wrapper.style.maxHeight = 'none';\r\n desktopNavigation.active = true;\r\n if (animate) {\r\n window.requestAnimationFrame(() => {\r\n $html.classList.add('desktop-menu-fading');\r\n window.requestAnimationFrame(() => {\r\n $html.classList.add('desktop-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n $html.classList.remove('desktop-menu-fading');\r\n this.wrapper.ontransitionend = null;\r\n };\r\n });\r\n });\r\n } else {\r\n $html.classList.add('desktop-menu-active');\r\n }\r\n }\r\n }\r\n hide(animate) {\r\n this.expanded = false;\r\n if (isMobile) {\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.toggle.setAttribute('aria-expanded', false);\r\n this.wrapper.style.maxHeight = this.inner.offsetHeight + 'px';\r\n window.requestAnimationFrame(() => {\r\n this.wrapper.style.maxHeight = 0;\r\n });\r\n if (animate) {\r\n this.wrapper.classList.add('animate');\r\n this.wrapper.ontransitionend = (e) => {\r\n if(e.target == this.wrapper) this.wrapper.classList.remove('animate');\r\n };\r\n }\r\n } else {\r\n desktopNavigation.active = false;\r\n if (animate) {\r\n $html.classList.add('desktop-menu-fading');\r\n $html.classList.remove('desktop-menu-active');\r\n this.wrapper.ontransitionend = () => {\r\n this.wrapper.ontransitionend = null;\r\n $html.classList.remove('desktop-menu-fading');\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.toggle.setAttribute('aria-expanded', false);\r\n };\r\n } else {\r\n $html.classList.remove('desktop-menu-active');\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.toggle.setAttribute('aria-expanded', false);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// create instance of menu\r\n\r\nif(document.querySelector('.header--content--menu') != null) {\r\n const m = new menu(document.querySelector('.header--content--menu'), document.querySelector('.header--content--menu-toggle button'), document.querySelector('.header--content--menu > nav > ul'));\r\n\r\n\r\n // mobile 'whole menu toggle' functionality\r\n\r\n m.mobileToggle.addEventListener('click', () => {\r\n if (isMobile) {\r\n if (m.expanded) {\r\n // close\r\n m.hide();\r\n } else {\r\n // open\r\n m.show();\r\n }\r\n }\r\n });\r\n\r\n // close menu if user focus moves outside\r\n\r\n const bodyClickTouch = (t) => {\r\n if (!isMobile && m.activeSubmenuItemIndex > -1) {\r\n let inMenu = false;\r\n while (t != document.body) {\r\n if (t == m.wrapper) {\r\n inMenu = true;\r\n break\r\n }\r\n t = t.parentNode;\r\n }\r\n if (!inMenu) {\r\n m.update();\r\n }\r\n }\r\n }\r\n document.body.addEventListener('click', (e) => {\r\n bodyClickTouch(e.target);\r\n });\r\n\r\n // add menu item listeners\r\n\r\n for (let x = 0, l = m.items.length; x < l; x++) {\r\n let o = m.items[x];\r\n if (o.hasSubmenu) {\r\n\r\n o.submenu.toggle.addEventListener('click', () => {\r\n clearTimeout(m.focusTimeout);\r\n m.focusTimeout = null;\r\n if (o.submenu.expanded) {\r\n m.update(true, o.index);\r\n } else {\r\n m.update(true, o.index, 0);\r\n }\r\n });\r\n\r\n o.submenu.toggle.addEventListener('focus', () => {\r\n if (m.expanded && m.activeItemIndex != o.index) {\r\n clearTimeout(m.focusTimeout);\r\n m.focusTimeout = setTimeout(() => {\r\n m.update(true, o.index);\r\n m.focusTimeout = null;\r\n }, 250);\r\n }\r\n });\r\n\r\n // add submenu expander listeners if required\r\n\r\n for (let xx = 0, ll = o.submenu.items.length; xx < ll; xx++) {\r\n let oo = o.submenu.items[xx];\r\n if (oo.hasSubmenu) {\r\n oo.submenu.toggle.addEventListener('click', () => {\r\n m.update(true, o.index, oo.index);\r\n });\r\n }\r\n }\r\n\r\n // desktop only - submenu close button\r\n\r\n o.submenu.closeBtn.addEventListener('click', () => {\r\n if (o.submenu.expanded) m.update(true, o.index);\r\n });\r\n }\r\n }\r\n\r\n // add keyboard accessibility\r\n m.ul.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n m.update(true, m.activeItemIndex);\r\n } else {\r\n m.update(true);\r\n }\r\n break;\r\n // DOWN / RIGHT to move through items at current level\r\n case 'Down':\r\n case 'ArrowDown':\r\n case 'Right':\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n let next = m.activeSubmenuItemIndex + 1,\r\n list = m.items[m.activeItemIndex].submenu.items;\r\n if (next >= (isMobile ? list.length - 1 : list.length)) next = 0; // don't include submenu close button in mobile mode\r\n m.update(true, m.activeItemIndex, next);\r\n } else {\r\n let next = m.activeItemIndex + 1,\r\n list = m.items;\r\n if (next >= list.length) next = 0;\r\n m.update(true, next);\r\n }\r\n break;\r\n // UP / LEFT to move backwards through items at current level\r\n case 'Up':\r\n case 'ArrowUp':\r\n case 'Left':\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n let next = m.activeSubmenuItemIndex - 1,\r\n list = m.items[m.activeItemIndex].submenu.items;\r\n if (next < 0) next = isMobile ? list.length - 2 : list.length - 1; // don't include submenu close button in mobile mode\r\n m.update(true, m.activeItemIndex, next);\r\n } else {\r\n let next = m.activeItemIndex - 1,\r\n list = m.items;\r\n if (next < 0) next = list.length - 1;\r\n m.update(true, next);\r\n }\r\n break;\r\n // TAB close menu (if open) and move to next tab element\r\n case 'Tab':\r\n if(isMobile) {\r\n if (!m.hasSearch && m.activeItemIndex > -1) {\r\n m.hide();\r\n }\r\n } else {\r\n m.update();\r\n }\r\n break;\r\n // SPACE/ENTER/RETURN to click a item\r\n case 'Spacebar':\r\n case ' ':\r\n case 'Enter':\r\n case 'Return':\r\n e.preventDefault();\r\n if (m.activeSubmenuItemIndex > -1) {\r\n m.items[m.activeItemIndex].submenu.items[m.activeSubmenuItemIndex].click();\r\n } else {\r\n if (m.items[m.activeItemIndex].hasSubmenu) {\r\n m.items[m.activeItemIndex].submenu.toggle.click();\r\n } else {\r\n m.items[m.activeItemIndex].link.click();\r\n }\r\n }\r\n break;\r\n }\r\n });\r\n\r\n // define and trigger resize check\r\n\r\n const resize = () => {\r\n let prev = isMobile;\r\n isMobile = window.innerWidth < breakPoint.LG;\r\n if(!isMobile) m.storeTriggerPositions();\r\n if(isMobile !== prev) {\r\n if(!isMobile) {\r\n m.show();\r\n m.update(false,1); // 'home' is hidden on desktop, so set menu to item 1 (without setting focus)\r\n } else {\r\n m.update(false);\r\n }\r\n // loop through all submenus and force close them\r\n m.items.forEach(s => {\r\n if(s.hasSubmenu) s.submenu.hide(false);\r\n });\r\n mobileNavigation.active = false;\r\n desktopNavigation.active = false;\r\n $html.classList.remove('mobile-menu-active');\r\n $html.classList.remove('desktop-menu-active');\r\n }\r\n };\r\n\r\n resize();\r\n window.addEventListener('resize', () => {\r\n if(!resizeRequested) {\r\n resizeRequested = true;\r\n setTimeout(() => {\r\n resize();\r\n resizeRequested = false;\r\n }, 200);\r\n }\r\n });\r\n\r\n}\r\n"],"names":["keyboardControl","active","accessibilityTimeout","toggleAccessibilityClass","mode","clearTimeout","setTimeout","document","body","classList","toggle","addEventListener","e","key","$html","querySelector","isMobile","resizeRequested","mobileNavigation","desktopNavigation","menu","wrapper","toggleButton","ul","this","desktopSubmenuIndicator","navContent","mobileToggle","expanded","focusTimeout","hideTimeout","hideDelay","activeItemIndex","activeSubmenuItemIndex","items","querySelectorAll","forEach","i","x","length","menuItem","setAttribute","add","window","requestAnimationFrame","ontransitionend","transitionEnd","update","remove","l","button","b","getBoundingClientRect","buttonX","Math","floor","left","right","style","setFocus","itemIndex","submenuItemIndex","storeTriggerPositions","show","submenu","hide","focus","hasSubmenu","link","nextTabIndex","obj","level","index","li","sub","subMenu","closeBtn","inner","push","animate","maxHeight","offsetHeight","target","m","t","inMenu","parentNode","bodyClickTouch","o","xx","ll","oo","preventDefault","next","list","hasSearch","click","resize","prev","innerWidth","breakPoint","s"],"sourceRoot":""}