{"version":3,"file":"591.e485570305c37b2b4b26.js","mappings":"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","sources":["webpack://dclt.web/./node_modules/debounce/index.js","webpack://dclt.web/./wwwroot/app/src/js/keyboard-accessibility-check.js","webpack://dclt.web/./wwwroot/app/src/js/main-navigation.js"],"sourcesContent":["/**\n * Returns a function, that, as long as it continues to be invoked, will not\n * be triggered. The function will be called after it stops being called for\n * N milliseconds. If `immediate` is passed, trigger the function on the\n * leading edge, instead of the trailing. The function also has a property 'clear' \n * that is a function which will clear the timer to prevent previously scheduled executions. \n *\n * @source underscore.js\n * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/\n * @param {Function} function to wrap\n * @param {Number} timeout in ms (`100`)\n * @param {Boolean} whether to execute at the beginning (`false`)\n * @api public\n */\nfunction debounce(func, wait, immediate){\n var timeout, args, context, timestamp, result;\n if (null == wait) wait = 100;\n\n function later() {\n var last = Date.now() - timestamp;\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last);\n } else {\n timeout = null;\n if (!immediate) {\n result = func.apply(context, args);\n context = args = null;\n }\n }\n };\n\n var debounced = function(){\n context = this;\n args = arguments;\n timestamp = Date.now();\n var callNow = immediate && !timeout;\n if (!timeout) timeout = setTimeout(later, wait);\n if (callNow) {\n result = func.apply(context, args);\n context = args = null;\n }\n\n return result;\n };\n\n debounced.clear = function() {\n if (timeout) {\n clearTimeout(timeout);\n timeout = null;\n }\n };\n \n debounced.flush = function() {\n if (timeout) {\n result = func.apply(context, args);\n context = args = null;\n \n clearTimeout(timeout);\n timeout = null;\n }\n };\n\n return debounced;\n};\n\n// Adds compatibility for ES modules\ndebounce.debounce = debounce;\n\nmodule.exports = debounce;\n","// 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\n\r\nimport { debounce } from 'debounce';\r\nimport { breakPoint } from './config';\r\nimport { Collapse as bootstrapCollapse } from 'bootstrap';\r\nimport { keyboardControl } from './keyboard-accessibility-check';\r\n\r\nlet isMobile = true,\r\n m = null, // main nav system\r\n s = null, // header search system\r\n fm = []; // desktop feature menu system\r\n\r\nexport const mainNavigation = {\r\n active: false\r\n}\r\nexport const desktopFeatureNavigation = {\r\n active: false,\r\n index: 0\r\n}\r\n\r\nclass AccessibleList {\r\n constructor(el) {\r\n this.el = el;\r\n this.tabIndex = 0;\r\n this.items = [...this.el.querySelectorAll('a')];\r\n this.itemsCount = this.items.length;\r\n this.updateTabIndexes(0);\r\n // focus behaviour\r\n for(let x = 0, l = this.items.length; x < l; x++) {\r\n this.items[x].onfocus = () => {\r\n if(this.tabIndex != x) {\r\n this.tabIndex = x;\r\n this.updateTabIndexes();\r\n }\r\n };\r\n }\r\n }\r\n updateTabIndexes(setFocus = false) {\r\n for(let x = 0, l = this.items.length; x < l; x++) {\r\n this.items[x].setAttribute('tabIndex', x == this.tabIndex ? '0' : '-1');\r\n }\r\n if(setFocus) this.items[this.tabIndex].focus();\r\n }\r\n nav(mode) {\r\n if(mode) {\r\n this.tabIndex+=1;\r\n if(this.tabIndex >= this.itemsCount) this.tabIndex = 0;\r\n } else {\r\n this.tabIndex-=1;\r\n if(this.tabIndex < 0) this.tabIndex = this.itemsCount - 1;\r\n }\r\n this.updateTabIndexes(true);\r\n }\r\n}\r\n\r\nclass menu {\r\n constructor(wrapper, toggleButton) {\r\n this.wrapper = wrapper;\r\n this.toggleButton = toggleButton;\r\n this.expanded = false;\r\n this.mobileTabElements = [...this.wrapper.querySelectorAll('#full-menu--feature-links li:first-child a, .menu-section > a, .menu-section > button, #full-menu--mobile-search input, #full-menu--social-links li:first-child a, #full-menu--mobile-search button')];\r\n this.desktopTabElements = [...this.wrapper.querySelectorAll('#full-menu--feature-links li:first-child a, .menu-section:not(.d-lg-none) > a, .menu-section:not(.d-lg-none) .collapse ul li:first-child a, #full-menu--social-links li:first-child a')];\r\n this.tabElementIndex = -1;\r\n this.tabElementSubIndex = -1;\r\n this.sections = [];\r\n [...this.wrapper.querySelectorAll('.menu-section')].forEach((s) => {\r\n this.sections.push(new menuSection(s));\r\n });\r\n // accessible lists\r\n this.accessibleLists = [];\r\n [...this.wrapper.querySelectorAll('.menu-accessible-list')].forEach((l) => {\r\n this.accessibleLists.push(new AccessibleList(l));\r\n });\r\n }\r\n show() {\r\n // close headerSearch if necessary\r\n if(s && s.active) s.hide();\r\n // close desktopFeatureMenu if necessary\r\n if(desktopFeatureNavigation.active) {\r\n fm[desktopFeatureNavigation.index].hide();\r\n }\r\n // open menu\r\n this.expanded = true;\r\n mainNavigation.active = true;\r\n this.toggleButton.setAttribute('aria-expanded', true);\r\n this.wrapper.setAttribute('aria-hidden', false);\r\n window.requestAnimationFrame(() => {\r\n document.body.classList.add('menu-active');\r\n this.tabElementIndex = 0;\r\n this.wrapper.ontransitionend = (e) => {\r\n if(e.target == this.wrapper) this.showTransitionEnd();\r\n };\r\n });\r\n }\r\n showTransitionEnd() {\r\n // focus on first menu item if keyboard control\r\n if(keyboardControl.active) {\r\n if(isMobile) {\r\n this.mobileTabElements[0].focus();\r\n } else {\r\n this.desktopTabElements[0].focus();\r\n }\r\n }\r\n this.wrapper.ontransitionend = null;\r\n }\r\n hide(doFocus = false) {\r\n this.expanded = false;\r\n mainNavigation.active = false;\r\n this.tabElementIndex = -1;\r\n this.toggleButton.setAttribute('aria-expanded', false);\r\n document.body.classList.remove('menu-active');\r\n this.wrapper.ontransitionend = (e) => {\r\n if(e.target == this.wrapper) this.hideTransitionEnd(doFocus);\r\n };\r\n }\r\n hideTransitionEnd(doFocus = false) {\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n if(keyboardControl.active && doFocus) this.toggleButton.focus();\r\n this.wrapper.ontransitionend = null;\r\n }\r\n}\r\n\r\nclass menuSection {\r\n constructor(el) {\r\n this.wrapper = el;\r\n this.collapseToggle = el.querySelector('button[data-bs-toggle=\"collapse\"]');\r\n this.collapseContent = el.querySelector('.collapse');\r\n this.firstOption = el.querySelector('ul li a');\r\n // add listeners for expansion to add class to parent wrapper\r\n if(this.collapseContent != null) {\r\n this.collapseContent.addEventListener('show.bs.collapse', () => {\r\n this.wrapper.classList.add('expanded');\r\n });\r\n this.collapseContent.addEventListener('shown.bs.collapse', () => {\r\n if(keyboardControl.active && isMobile) this.firstOption.focus();\r\n });\r\n this.collapseContent.addEventListener('hidden.bs.collapse', () => {\r\n this.wrapper.classList.remove('expanded');\r\n });\r\n }\r\n }\r\n toMobile() {\r\n if(this.collapseContent != null) {\r\n let bsCollapse = bootstrapCollapse.getOrCreateInstance(this.collapseContent);\r\n bsCollapse.hide();\r\n this.collapseToggle.removeAttribute('disabled');\r\n }\r\n }\r\n toDesktop() {\r\n if(this.collapseContent != null) {\r\n let bsCollapse = bootstrapCollapse.getOrCreateInstance(this.collapseContent);\r\n bsCollapse.show();\r\n this.collapseToggle.setAttribute('disabled', 'disabled');\r\n }\r\n }\r\n}\r\n\r\nconst findMenu = document.querySelector('#full-menu');\r\nif(findMenu != null) {\r\n\r\n // create instance of menu\r\n\r\n m = new menu(findMenu, document.querySelector('.header--menu-toggle button'));\r\n\r\n // menu toggle functionality\r\n\r\n m.toggleButton.addEventListener('click', () => {\r\n if (!m.expanded) {\r\n // open menu\r\n m.show();\r\n } else {\r\n // close menu\r\n m.hide();\r\n }\r\n });\r\n\r\n // add keyboard accessibility\r\n\r\n const navTabElements = (mode) => {\r\n let tabElements = isMobile ? m.mobileTabElements : m.desktopTabElements,\r\n tabElementsLength = tabElements.length,\r\n lastIndex = tabElementsLength - 1;\r\n if(mode) {\r\n // move to next tab element\r\n m.tabElementIndex = m.tabElementIndex == lastIndex ? 0 : m.tabElementIndex + 1;\r\n } else {\r\n // move to previous tab element\r\n m.tabElementIndex = m.tabElementIndex == 0 ? lastIndex : m.tabElementIndex - 1;\r\n }\r\n if(keyboardControl.active) tabElements[m.tabElementIndex].focus();\r\n };\r\n\r\n // mobile menu\r\n for(let x = 0, l = m.mobileTabElements.length; x < l; x++) {\r\n m.mobileTabElements[x].addEventListener('keydown', (e) => {\r\n if(isMobile) {\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n if(mainNavigation.active) m.hide(true);\r\n break;\r\n case 'Left':\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n navTabElements(false);\r\n break;\r\n case 'Tab':\r\n case 'Right':\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n navTabElements(true);\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n // desktop menu\r\n for(let x = 0, l = m.desktopTabElements.length; x < l; x++) {\r\n m.desktopTabElements[x].addEventListener('keydown', (e) => {\r\n if(!isMobile) {\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n if(!isMobile && mainNavigation.active) m.hide(true);\r\n break;\r\n case 'Left':\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n navTabElements(false);\r\n break;\r\n case 'Tab':\r\n case 'Right':\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n navTabElements(true);\r\n break;\r\n }\r\n }\r\n });\r\n }\r\n // accessible lists\r\n for(let x = 0, lx = m.accessibleLists.length; x < lx; x++) {\r\n for(let y = 0, ly = m.accessibleLists[x].items.length; y < ly; y++) {\r\n m.accessibleLists[x].items[y].addEventListener('keydown', (e) => {\r\n let isTabElement = y == 0; // look for tabbable element which already has some listeners\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n e.preventDefault();\r\n if(isMobile) {\r\n m.mobileTabElements[m.tabElementIndex].focus();\r\n } else {\r\n if(!isTabElement && mainNavigation.active) m.hide(true); // only if not the tabbable element\r\n }\r\n break;\r\n case 'Up':\r\n case 'ArrowUp':\r\n e.preventDefault();\r\n m.accessibleLists[x].nav(false);\r\n break;\r\n case 'Down':\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n m.accessibleLists[x].nav(true);\r\n break;\r\n case 'Left':\r\n case 'ArrowLeft':\r\n e.preventDefault();\r\n if(!isTabElement) navTabElements(false); // only if not the tabbable element\r\n break;\r\n case 'Tab':\r\n case 'Right':\r\n case 'ArrowRight':\r\n e.preventDefault();\r\n if(!isTabElement) navTabElements(true); // only if not the tabbable element\r\n break;\r\n }\r\n });\r\n }\r\n }\r\n\r\n\r\n // hide or show all menu '.collapse' elements if changing from mobile to desktop or vica versa\r\n\r\n var resize = () => {\r\n let prev = isMobile;\r\n isMobile = window.innerWidth < breakPoint.LG;\r\n if (isMobile && !prev) {\r\n // collapse all menu sections and enable toggles\r\n m.sections.forEach((s) => {s.toMobile()});\r\n if(m.expanded) m.hide(true);\r\n desktopFeatureNavigation.active = false;\r\n } else if (!isMobile && prev) {\r\n // expanded all menu sections and disable toggles\r\n m.sections.forEach((s) => {s.toDesktop()});\r\n if(m.expanded) m.hide(true);\r\n }\r\n };\r\n\r\n resize();\r\n window.addEventListener('resize', () => {\r\n debounce(resize(), 200);\r\n });\r\n\r\n}\r\n\r\n// ***************************\r\n// ***** Header Search *****\r\n// ***************************\r\n\r\nexport const headerSearch = {\r\n active: false\r\n}\r\n\r\nclass HeaderSearchSystem {\r\n\r\n constructor(showBtn, wrapper, closeBtn, searchField) {\r\n this.showBtn = showBtn;\r\n this.wrapper = wrapper;\r\n this.closeBtn = closeBtn;\r\n this.searchField = searchField;\r\n this.active = false;\r\n // remove 'hidden' attribute\r\n this.wrapper.removeAttribute('hidden');\r\n // triggers\r\n this.showBtn.onclick = () => {\r\n // close menu if necessary\r\n if(m && m.expanded) m.hide();\r\n // open search\r\n if(!this.active) {\r\n this.show();\r\n } else if(sideHeaderLayout) {\r\n this.hide();\r\n }\r\n };\r\n this.closeBtn.onclick = () => {\r\n if(this.active) this.hide();\r\n };\r\n // ESC key closes search\r\n this.wrapper.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n if(this.active) {\r\n e.preventDefault();\r\n this.hide(true);\r\n }\r\n break;\r\n }\r\n });\r\n // loop the tabbing if search area is active\r\n this.closeBtn.addEventListener('keydown', (e) => {\r\n switch (e.key) {\r\n // TAB\r\n case 'Tab':\r\n if(this.active) {\r\n e.preventDefault();\r\n this.searchField.focus();\r\n }\r\n break;\r\n }\r\n });\r\n }\r\n\r\n show() {\r\n this.wrapper.ontransitionend = null;\r\n this.wrapper.setAttribute('aria-hidden', false);\r\n this.showBtn.setAttribute('aria-expanded', true);\r\n this.active = true;\r\n headerSearch.active = true;\r\n window.requestAnimationFrame(() => {\r\n this.wrapper.classList.add('search-form--active');\r\n this.searchField.focus();\r\n });\r\n }\r\n\r\n hide(doFocus = false) {\r\n this.showBtn.setAttribute('aria-expanded', false);\r\n this.active = false;\r\n headerSearch.active = false;\r\n this.wrapper.classList.remove('search-form--active');\r\n this.wrapper.ontransitionend = (e) => {\r\n if(e.target == this.wrapper) this.transitionEnd(doFocus);\r\n };\r\n }\r\n\r\n transitionEnd(doFocus = false) {\r\n this.wrapper.setAttribute('aria-hidden', true);\r\n this.wrapper.ontransitionend = null;\r\n if(doFocus) this.showBtn.focus();\r\n }\r\n}\r\n\r\nconst headerSearchOpenBtn = document.querySelector('#header--desktop-search--open-btn'),\r\n headerSearchWrapper = document.querySelector('#header--desktop-search--wrapper'),\r\n headerSearchCloseBtn = document.querySelector('#header--desktop-search--close-btn'),\r\n headerSearchField = headerSearchWrapper !== null ? headerSearchWrapper.querySelector('input[type=\"search\"]') : null;\r\n\r\nif(headerSearchOpenBtn != null && headerSearchWrapper != null && headerSearchCloseBtn != null && headerSearchField != null) {\r\n s = new HeaderSearchSystem(headerSearchOpenBtn, headerSearchWrapper, headerSearchCloseBtn, headerSearchField);\r\n}\r\n\r\n// **********************************\r\n// ***** Desktop feature menu *****\r\n// **********************************\r\n\r\nclass DesktopFeatureMenuDropdown {\r\n\r\n constructor(el, index) {\r\n this.el = el;\r\n this.index = index;\r\n this.active = false;\r\n this.toggle = el.querySelector('.header--feature-menu--dropdown--toggle');\r\n this.content = el.querySelector('.header--feature-menu--dropdown--content');\r\n this.focusItems = this.content.querySelectorAll('a, button');\r\n // toggle behaviour\r\n this.toggle.addEventListener('click', (e) => {\r\n if(this.active) {\r\n // close\r\n this.hide();\r\n } else {\r\n // open\r\n this.show();\r\n }\r\n });\r\n // keyboard control\r\n this.el.addEventListener('keydown', (e) => {\r\n if(this.active) {\r\n switch (e.key) {\r\n // ESCAPE jumps out a level\r\n case 'Escape':\r\n if(this.active) {\r\n e.preventDefault();\r\n this.hide(true);\r\n }\r\n break;\r\n case 'Left':\r\n case 'ArrowLeft':\r\n case 'Up':\r\n case 'ArrowUp':\r\n e.preventDefault();\r\n this.navFocusItems(false);\r\n break;\r\n case 'Tab':\r\n case 'Right':\r\n case 'ArrowRight':\r\n case 'Down':\r\n case 'ArrowDown':\r\n e.preventDefault();\r\n this.navFocusItems(true);\r\n break;\r\n }\r\n }\r\n });\r\n // watch for clicks elsewhere and close if necessary\r\n let $this = this;\r\n document.body.addEventListener('click', (e) => {\r\n $this.checkClickOutside(e.target);\r\n });\r\n // hide on header hide\r\n window.addEventListener('headerHide', () => {\r\n if($this.active) $this.hide();\r\n });\r\n\r\n }\r\n\r\n checkClickOutside(t) {\r\n if (this.active) {\r\n let inMenu = false;\r\n while (t != document.body) {\r\n if (t == this.el) {\r\n inMenu = true;\r\n break\r\n }\r\n t = t.parentNode;\r\n }\r\n if (!inMenu) {\r\n this.hide();\r\n }\r\n }\r\n }\r\n\r\n show() {\r\n if(mainNavigation.active) m.hide();\r\n this.toggle.setAttribute('aria-expanded',true);\r\n this.content.setAttribute('aria-hidden',false);\r\n this.active = true;\r\n desktopFeatureNavigation.active = true;\r\n desktopFeatureNavigation.index = this.index;\r\n window.requestAnimationFrame(() => {\r\n this.content.classList.add('show');\r\n this.content.ontransitionend = ((e) => {\r\n if(e.target == this.content) {\r\n this.content.ontransitionend = null;\r\n // set focus?\r\n this.focusIndex = 0;\r\n if(keyboardControl.active) {\r\n this.focusItems[0].focus();\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n hide(doFocus = false) {\r\n this.toggle.setAttribute('aria-expanded',false);\r\n this.active = false;\r\n desktopFeatureNavigation.active = false;\r\n this.content.classList.remove('show');\r\n this.content.ontransitionend = ((e) => {\r\n if(e.target == this.content) {\r\n this.content.setAttribute('aria-hidden',true);\r\n this.active = false;\r\n this.content.ontransitionend = null;\r\n if(doFocus) this.toggle.focus();\r\n }\r\n });\r\n }\r\n\r\n navFocusItems(mode) {\r\n if(mode) {\r\n this.focusIndex += 1;\r\n if(this.focusIndex >= this.focusItems.length) this.focusIndex = 0;\r\n } else {\r\n this.focusIndex -= 1;\r\n if(this.focusIndex < 0) this.focusIndex = this.focusItems.length - 1;\r\n }\r\n this.focusItems[this.focusIndex].focus();\r\n }\r\n\r\n}\r\n\r\nlet dd = document.querySelectorAll('.header--feature-menu .header--feature-menu--dropdown');\r\nif(dd != null) {\r\n [...dd].forEach((d, index) => {\r\n fm.push(new DesktopFeatureMenuDropdown(d, index));\r\n });\r\n};\r\n\r\n"],"names":["debounce","func","wait","immediate","timeout","args","context","timestamp","result","later","last","Date","now","setTimeout","apply","debounced","this","arguments","callNow","clear","clearTimeout","flush","module","exports","keyboardControl","active","accessibilityTimeout","toggleAccessibilityClass","mode","document","body","classList","toggle","addEventListener","e","key","isMobile","m","s","fm","mainNavigation","desktopFeatureNavigation","index","AccessibleList","constructor","el","tabIndex","items","querySelectorAll","itemsCount","length","updateTabIndexes","x","l","onfocus","setFocus","setAttribute","focus","nav","menu","wrapper","toggleButton","expanded","mobileTabElements","desktopTabElements","tabElementIndex","tabElementSubIndex","sections","forEach","push","menuSection","accessibleLists","show","hide","window","requestAnimationFrame","add","ontransitionend","target","showTransitionEnd","doFocus","remove","hideTransitionEnd","collapseToggle","querySelector","collapseContent","firstOption","toMobile","bootstrapCollapse","removeAttribute","toDesktop","findMenu","navTabElements","tabElements","lastIndex","preventDefault","lx","y","ly","isTabElement","resize","prev","innerWidth","breakPoint","headerSearch","HeaderSearchSystem","showBtn","closeBtn","searchField","onclick","sideHeaderLayout","transitionEnd","headerSearchOpenBtn","headerSearchWrapper","headerSearchCloseBtn","headerSearchField","DesktopFeatureMenuDropdown","content","focusItems","navFocusItems","$this","checkClickOutside","t","inMenu","parentNode","focusIndex","dd","d"],"sourceRoot":""}