{"version":3,"sources":["webpack://ftfa/./Src/Scripts/components/search.js","webpack://ftfa/./Src/Scripts/components/top-navigation.js","webpack://ftfa/./Src/Scripts/helpers/trapFocus.js"],"names":["constructor","elm","args","options","Object","assign","events","this","lang","document","body","querySelector","debounceTimer","isSearchOpen","target","undefined","trap","TrapFocus","open","style","overflow","display","content","querySelectorAll","focusableElements","forEach","item","push","init","setTimeout","classList","add","close","destroy","removeProperty","remove","focus","isOpen","addEventListener","e","preventDefault","search","Search","didScroll","lastScrollTop","delta","header","offset","offsetHeight","openElm","window","onscroll","setInterval","hasScrolled","splitArray","getAttribute","split","ariaExpanded","activeMegaItem","parentNode","x","currentTarget","st","pageYOffset","documentElement","scrollTop","Math","abs","toggle","lastContent","firstContent","event","key","keyCode","shiftKey","activeElement","length","removeEventListener"],"mappings":"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","file":"745.e1bc9d860ec4e9e43502.js","sourcesContent":["////import TrapFocus from './../helpers/trapFocus';\r\n\r\n////export default class Search {\r\n//// constructor(elm, args) {\r\n//// const options = Object.assign({\r\n//// events: true,\r\n//// }, {\r\n//// ...args,\r\n//// });\r\n\r\n//// this.lang = args.lang;\r\n//// this.elm = document.body.querySelector('.search-area');\r\n//// this.debounceTimer = null;\r\n//// this.isSearchOpen = false;\r\n//// this.target = undefined;\r\n//// this.trap = new TrapFocus();\r\n\r\n//// if (options.events) {\r\n//// this.events(elm);\r\n//// }\r\n//// }\r\n\r\n//// open(elm) {\r\n//// document.body.style.overflow = 'hidden';\r\n//// this.isSearchOpen = true;\r\n\r\n//// this.elm.style.display = 'block';\r\n\r\n//// const content = [];\r\n//// this.elm.querySelectorAll(this.trap.focusableElements).forEach(item => content.push(item));\r\n//// this.trap.init(content);\r\n\r\n//// setTimeout(() => {\r\n//// this.elm.querySelector('.search-area__results').innerHTML = '';\r\n//// this.elm.querySelector('#search-input').value = '';\r\n\r\n//// document.body.querySelector('.search-area').classList.add('search-area--active');\r\n//// }, 1);\r\n\r\n//// this.elm.querySelector('#search-input').focus();\r\n//// this.target = elm;\r\n//// }\r\n\r\n//// close() {\r\n//// this.trap.destroy();\r\n//// document.body.style.removeProperty('overflow');\r\n//// this.isSearchOpen = false;\r\n\r\n//// document.body.querySelector('.search-area').classList.remove('search-area--active');\r\n\r\n//// setTimeout(() => this.elm.style.display = 'none', 1000);\r\n\r\n//// if (this.target) {\r\n//// this.target.focus();\r\n//// this.target = undefined;\r\n//// }\r\n//// }\r\n\r\n//// isOpen() {\r\n//// return this.isSearchOpen;\r\n//// }\r\n\r\n//// events(elm) {\r\n//// elm.querySelector('.header_service-menu--search').addEventListener('click', e => {\r\n//// e.preventDefault();\r\n\r\n//// this.open(e.target);\r\n//// });\r\n\r\n//// this.elm.querySelector('.search-area__close').addEventListener('click', e => {\r\n//// e.preventDefault();\r\n\r\n//// this.close();\r\n//// });\r\n\r\n//// this.elm.querySelector('#search-input').addEventListener('input', this.debounce((e) => {\r\n//// this.getResults(e.target.value).then(data => {\r\n//// let html = '';\r\n\r\n//// data.forEach(item => html += this.template(item));\r\n\r\n//// document.body.querySelector('.search-area__results').innerHTML = html;\r\n\r\n//// window.dataLayer.push({\r\n//// 'event': 'Search',\r\n//// 'action': 'Searched',\r\n//// 'term': e.target.value,\r\n//// 'results': data.length,\r\n//// });\r\n//// });\r\n//// }, 500));\r\n//// }\r\n\r\n//// debounce(callback, wait) {\r\n//// return (...args) => {\r\n//// window.clearTimeout(this.debounceTimer);\r\n\r\n//// this.debounceTimer = window.setTimeout(() => callback.apply(null, args), wait);\r\n//// };\r\n//// }\r\n\r\n//// getResults(q) {\r\n//// return new Promise((resolve) => {\r\n//// if (q === '') resolve([]);\r\n\r\n//// fetch(`/umbraco/api/Search/getsearchresults?q=${q}&cultureName=${this.lang}`, {\r\n//// method: 'GET',\r\n//// cache: 'no-cache',\r\n//// headers: {\r\n//// 'Content-Type': 'application/json',\r\n//// },\r\n//// })\r\n//// .then(response => response.json())\r\n//// .then(data => resolve(data));\r\n//// });\r\n//// }\r\n\r\n//// template(data) {\r\n//// return `\r\n//// \r\n//// \r\n//// \r\n//// \r\n//// \r\n//// \r\n//// \r\n//// \r\n//// \r\n//// \r\n////
\r\n////

${data.Headline}

\r\n////

${data.Body}

\r\n////
\r\n////
`;\r\n//// }\r\n////}\r\n\r\nimport TrapFocus from './../helpers/trapFocus';\r\n\r\nexport default class Search {\r\n constructor(elm, args) {\r\n const options = Object.assign({\r\n events: true,\r\n }, {\r\n ...args,\r\n });\r\n\r\n this.lang = args.lang;\r\n this.elm = document.body.querySelector('.search-area');\r\n this.debounceTimer = null;\r\n this.isSearchOpen = false;\r\n this.target = undefined;\r\n this.trap = new TrapFocus();\r\n\r\n if (options.events) {\r\n this.events(elm);\r\n }\r\n }\r\n\r\n open(elm) {\r\n document.body.style.overflow = 'hidden';\r\n this.isSearchOpen = true;\r\n\r\n this.elm.style.display = 'block';\r\n\r\n const content = [];\r\n this.elm.querySelectorAll(this.trap.focusableElements).forEach(item => content.push(item));\r\n this.trap.init(content);\r\n\r\n setTimeout(() => { \r\n document.body.querySelector('.search-area').classList.add('search-area--active');\r\n }, 1);\r\n\r\n this.target = elm;\r\n }\r\n\r\n close() {\r\n this.trap.destroy();\r\n document.body.style.removeProperty('overflow');\r\n this.isSearchOpen = false;\r\n\r\n document.body.querySelector('.search-area').classList.remove('search-area--active');\r\n\r\n setTimeout(() => this.elm.style.display = 'none', 1000);\r\n\r\n if (this.target) {\r\n this.target.focus();\r\n this.target = undefined;\r\n }\r\n }\r\n\r\n isOpen() {\r\n return this.isSearchOpen;\r\n }\r\n\r\n events(elm) {\r\n elm.querySelector('.header_service-menu--search').addEventListener('click', e => {\r\n e.preventDefault();\r\n\r\n this.open(e.target);\r\n });\r\n\r\n this.elm.querySelector('.search-area__close').addEventListener('click', e => {\r\n e.preventDefault();\r\n\r\n this.close();\r\n });\r\n }\r\n}\r\n","import Search from './search';\r\nimport TrapFocus from './../helpers/trapFocus';\r\n\r\nexport default class TopNavigation {\r\n constructor(elm, args) {\r\n this.search = new Search(elm, {\r\n ...args,\r\n });\r\n\r\n this.didScroll = false;\r\n this.lastScrollTop = 0;\r\n this.delta = 5;\r\n this.header = elm;\r\n this.offset = this.header.offsetHeight;\r\n this.openElm = undefined;\r\n this.trap = new TrapFocus();\r\n\r\n window.onscroll = () => {\r\n this.didScroll = true;\r\n };\r\n\r\n setInterval(() => {\r\n if (this.didScroll) {\r\n this.hasScrolled();\r\n this.didScroll = false;\r\n }\r\n }, 250);\r\n\r\n this.events();\r\n }\r\n\r\n open(elm) {\r\n const rawId = elm.getAttribute('id')\r\n const splitArray = rawId.split(\"_\")\r\n this.search.close();\r\n\r\n elm.ariaExpanded = true;\r\n document.body.style.overflow = 'hidden';\r\n\r\n this.openElm = elm;\r\n this.header.classList.add('active');\r\n elm.classList.add('active');\r\n\r\n const activeMegaItem = document.querySelector('#mega_menu_' + splitArray[2])\r\n\r\n activeMegaItem.classList.add('active');\r\n activeMegaItem.parentNode.parentNode.classList.add('active');\r\n\r\n setTimeout(() => {\r\n activeMegaItem.querySelector('a').focus();\r\n }, 300);\r\n\r\n const content = [];\r\n this.header.querySelectorAll(this.trap.focusableElements).forEach(item => content.push(item));\r\n activeMegaItem.querySelectorAll(this.trap.focusableElements).forEach(item => content.push(item));\r\n\r\n this.trap.init(content);\r\n }\r\n\r\n close(elm) {\r\n const rawId = elm.getAttribute('id')\r\n const splitArray = rawId.split(\"_\")\r\n\r\n document.body.style.removeProperty('overflow');\r\n\r\n this.trap.destroy();\r\n this.openElm.ariaExpanded = false;\r\n this.openElm.focus();\r\n this.openElm = undefined;\r\n\r\n this.header.classList.remove('active');\r\n elm.classList.remove('active');\r\n\r\n const activeMegaItem = document.querySelector('#mega_menu_' + splitArray[2])\r\n\r\n activeMegaItem.parentNode.parentNode.classList.remove('active');\r\n activeMegaItem.classList.remove('active');\r\n }\r\n\r\n events() {\r\n this.header.querySelectorAll('.header__menu a').forEach(x => x.addEventListener('click', e => {\r\n e.preventDefault();\r\n\r\n if (!this.openElm) {\r\n this.open(e.currentTarget);\r\n } else if (e.currentTarget.getAttribute('href') === this.openElm.getAttribute('href')) {\r\n this.close(e.currentTarget);\r\n } else {\r\n this.close(this.openElm);\r\n this.open(e.currentTarget);\r\n }\r\n }));\r\n }\r\n\r\n hasScrolled() {\r\n const st = (window.pageYOffset !== undefined) ? window.pageYOffset : (document.documentElement || document.body.parentNode || document.body).scrollTop;\r\n\r\n if (Math.abs(this.lastScrollTop - st) <= this.delta) return;\r\n\r\n this.header.classList.toggle('nav-up', (st > this.lastScrollTop && st));\r\n this.header.classList.toggle('scrolled', st > 50);\r\n\r\n this.lastScrollTop = st;\r\n }\r\n}\r\n\r\n","export default class TrapFocus {\r\n constructor() {\r\n this.focusableElements = 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])';\r\n this.content = [];\r\n this.lastContent = null;\r\n this.firstContent = null;\r\n this.event = (e) => {\r\n const isPressed = e.key === 'Tab' || e.keyCode === 9;\r\n if (!isPressed) {\r\n return;\r\n }\r\n\r\n if (e.shiftKey) {\r\n if (document.activeElement === this.firstContent) {\r\n this.lastContent.focus();\r\n e.preventDefault();\r\n }\r\n } else {\r\n if (document.activeElement === this.lastContent) {\r\n this.firstContent.focus();\r\n e.preventDefault();\r\n }\r\n }\r\n };\r\n }\r\n\r\n init(content) {\r\n this.content = content;\r\n this.lastContent = content[content.length - 1];\r\n this.firstContent = content[0];\r\n\r\n document.addEventListener('keydown', this.event);\r\n }\r\n\r\n destroy() {\r\n document.removeEventListener('keydown', this.event);\r\n }\r\n}\r\n"],"sourceRoot":""}