{"version":3,"file":"591.702c7f7af1af032826a8.js","mappings":"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","sources":["webpack://iflyworld.web/./wwwroot/app/src/js/keyboard-accessibility-check.js","webpack://iflyworld.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.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--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(false);\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(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--menu') != null) {\r\n const m = new menu(document.querySelector('.header--menu'), document.querySelector('.header--mobile-menu-toggle button'), document.querySelector('.header--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 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 m.update(true, o.index);\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) m.show();\r\n m.update();\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","constructor","wrapper","toggleButton","ul","this","desktopSubmenuIndicator","navContent","mobileToggle","expanded","hideTimeout","hideDelay","activeItemIndex","activeSubmenuItemIndex","items","querySelectorAll","forEach","i","x","length","menuItem","show","setAttribute","add","window","requestAnimationFrame","ontransitionend","transitionEnd","update","remove","hide","storeTriggerPositions","l","button","b","getBoundingClientRect","buttonX","Math","floor","left","right","style","setFocus","itemIndex","submenuItemIndex","submenu","focus","hasSubmenu","link","nextTabIndex","obj","level","index","li","sub","subMenu","closeBtn","inner","push","animate","maxHeight","offsetHeight","target","m","bodyClickTouch","t","inMenu","parentNode","o","xx","ll","oo","preventDefault","next","list","hasSearch","click","resize","prev","innerWidth","breakPoint"],"sourceRoot":""}