{"version":3,"file":"./modules/accordion.bundle.js","mappings":"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","sources":["webpack://stl-2021/./scripts/controllers/accordion/accordion.js","webpack://stl-2021/./scripts/controllers/accordion/controller.js"],"sourcesContent":["export default class Accordion {\r\n constructor(container) {\r\n this.container = container;\r\n this.items = [];\r\n this.itemSelector = null;\r\n this.resetClass = 'reset';\r\n this.oneOption = false;\r\n\r\n this.selectors = {\r\n header: '.header',\r\n content: '.content',\r\n };\r\n\r\n this.loadSettings();\r\n }\r\n\r\n init() {\r\n if (this.itemSelector !== null) {\r\n Array.from(this.container.querySelectorAll(this.itemSelector)).forEach(item => this.items.push(item));\r\n } else {\r\n Array.from(this.container.children).forEach(item => this.items.push(item));\r\n }\r\n\r\n // Filter items for valid accordeon items\r\n this.items = this.items.filter(item => item.hasAttribute('aria-expanded'));\r\n\r\n this.items.forEach(item => {\r\n const content = item.querySelector(this.selectors.content);\r\n if (item.getAttribute('aria-expanded') == 'true') {\r\n // content.style.height = `${content.scrollHeight}px`;\r\n } else {\r\n content.style.height = 0;\r\n }\r\n });\r\n\r\n // Timeout to check again, in case CSS loads slower\r\n setTimeout(() => {\r\n this.items.forEach(item => {\r\n const content = item.querySelector(this.selectors.content);\r\n if (item.getAttribute('aria-expanded') == 'true') {\r\n content.style.height = `${content.scrollHeight}px`;\r\n }\r\n });\r\n }, 100);\r\n\r\n this.setEventListeners();\r\n\r\n // Once listeners are set, close all items\r\n this.items.forEach(item => {\r\n if (!item.hasAttribute('aria-expanded')) {\r\n item.setAttribute('aria-expanded', false);\r\n // Make all clickables inactive\r\n item.querySelectorAll('.content a, .content button').forEach(clickable => {\r\n clickable.setAttribute('tabindex', '-1');\r\n });\r\n }\r\n });\r\n }\r\n\r\n setEventListeners() {\r\n this.items.forEach(item => {\r\n /** @type HTMLElement */\r\n const header = item.querySelector(this.selectors.header);\r\n const content = item.querySelector(this.selectors.content);\r\n header.addEventListener('click', this.toggleItem.bind(this, item));\r\n\r\n let closeButton;\r\n if (closeButton = content.querySelector('a.close')) {\r\n closeButton.addEventListener('click', this.toggleItem.bind(this, item));\r\n }\r\n\r\n header.setAttribute('tabindex', '0');\r\n header.addEventListener('keydown', e => {\r\n switch (e.key.toLowerCase()) {\r\n case ' ':\r\n case 'enter':\r\n this.toggleItem(item);\r\n break;\r\n case 'escape':\r\n case 'esc':\r\n this.inactive(item);\r\n break;\r\n }\r\n }, true);\r\n\r\n ['webkittransitionend', 'transitionend'].forEach(event => content.addEventListener(event, () => {\r\n this.transitionEnd(item);\r\n }));\r\n });\r\n }\r\n\r\n /**\r\n * \r\n * @param {HTMLElement} item \r\n */\r\n toggleItem(item) {\r\n if (item.getAttribute('aria-expanded') == 'true') {\r\n this.inactive(item);\r\n } else {\r\n this.active(item);\r\n }\r\n }\r\n\r\n active(item) {\r\n const content = item.querySelector(this.selectors.content);\r\n\r\n // First, lock its current css-calculated height\r\n content.style.height = `${content.clientHeight}px`; // Should be 0 for closed items anyway\r\n content.offsetHeight; // Merely reading this property is enough to trigger a repaint\r\n content.style.height = `${content.scrollHeight}px`; // Set it to the innerscroll's height, which should be all of its contents\r\n\r\n item.setAttribute('aria-expanded', 'true');\r\n // Make all clickables active\r\n content.querySelectorAll('a, button').forEach(clickable => {\r\n clickable.setAttribute('tabindex', '0');\r\n });\r\n\r\n if (this.oneOption) {\r\n this.items.forEach(otherItem => {\r\n if (otherItem != item) {\r\n this.inactive(otherItem);\r\n }\r\n });\r\n }\r\n\r\n // If accordion item is an FAQ item, send GTM event\r\n if (item.hasAttribute('data-faqitemid')) {\r\n // Find FAQ question\r\n const question = item.querySelector('h3').innerText || item.querySelector('[itemprop=\"name\"]').innerText;\r\n \r\n // Try to find matching category \r\n let category = undefined;\r\n if (item.closest('#faqBlock')) {\r\n const categoryEl = item.closest('#faqBlock');\r\n category = categoryEl.querySelector('h2').innerText || categoryEl.querySelector('[itemprop=\"name\"]').innerText || undefined;\r\n }\r\n\r\n if (question) {\r\n app.GTM.faqSelect(question, category);\r\n }\r\n }\r\n }\r\n\r\n inactive(item) {\r\n const content = item.querySelector(this.selectors.content);\r\n\r\n // First, lock its current css-calculated height\r\n content.style.height = `${content.clientHeight}px`; // Set it to the content's height, which should be all of its contents\r\n content.offsetHeight; // Merely reading this property is enough to trigger a repaint\r\n content.style.height = 0; // Set it to 0, so it animated as well\r\n\r\n item.setAttribute('aria-expanded', 'false');\r\n // Make all clickables inactive\r\n content.querySelectorAll('a, button').forEach(clickable => {\r\n clickable.setAttribute('tabindex', '-1');\r\n });\r\n }\r\n\r\n transitionEnd(item) {\r\n const content = item.querySelector(this.selectors.content);\r\n content.style.height = null; // Only reset the manually calculated height\r\n\r\n // reset rellax\r\n if (app.parallaxController && app.parallaxController.scrollScenes.length) {\r\n app.parallaxController.scrollScenes.forEach(scene => scene.refresh());\r\n }\r\n }\r\n\r\n loadSettings() {\r\n if (this.container.dataset.oneOption && this.container.dataset.oneOption == 'true') {\r\n this.oneOption = true;\r\n }\r\n\r\n if (this.container.dataset.itemSelector) {\r\n this.itemSelector = this.container.dataset.itemSelector;\r\n }\r\n }\r\n}","import Accordion from './accordion.js';\r\n\r\nexport default class AccordionController {\r\n constructor() {\r\n this.selector = '.accordion:not(.locked)';\r\n this.accordions = [];\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n document.querySelectorAll(this.selector).forEach(container => {\r\n let accordion = new Accordion(container);\r\n this.accordions.push(accordion);\r\n\r\n accordion.init();\r\n });\r\n }\r\n}"],"names":["Accordion","container","_classCallCheck","this","items","itemSelector","resetClass","oneOption","selectors","header","content","loadSettings","_createClass","key","value","_this","Array","from","querySelectorAll","forEach","item","push","children","filter","hasAttribute","querySelector","getAttribute","style","height","setTimeout","concat","scrollHeight","setEventListeners","setAttribute","clickable","_this2","closeButton","addEventListener","toggleItem","bind","e","toLowerCase","inactive","event","transitionEnd","active","_this3","clientHeight","offsetHeight","otherItem","question","innerText","category","undefined","closest","categoryEl","app","GTM","faqSelect","parallaxController","scrollScenes","length","scene","refresh","dataset","AccordionController","selector","accordions","init","document","accordion"],"sourceRoot":""}