{"version":3,"file":"modules/accordeon.bundle.js","mappings":"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","sources":["webpack://something_big_project/./scripts/controllers/accordeon/accordeon.js","webpack://something_big_project/./scripts/controllers/accordeon/controller.js"],"sourcesContent":["export default class Accordeon {\r\n constructor(container) {\r\n this.container = container;\r\n this.items = [];\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 this.container.children.forEach(item => this.items.push(item));\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 // Shouldn't be needed anymore\r\n // window.app.registerResizeEvent(this.resize.bind(this));\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\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 // Shouldn't be needed anymore\r\n resize() {\r\n this.items.filter(item => !item.classList.contains(this.resetClass) && item.getAttribute('aria-expanded') == 'true').forEach(item => {\r\n const content = item.querySelector(this.selectors.content);\r\n content.style.height = 'auto';\r\n item.classList.add(this.resetClass);\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}","import Accordeon from './accordeon.js';\r\n\r\nexport default class AccordeonController {\r\n constructor() {\r\n this.selector = 'ul.accordeon:not(.locked), ol.accordeon:not(.locked), div.accordeon:not(.locked)';\r\n this.accordeons = [];\r\n\r\n this.init();\r\n }\r\n\r\n init() {\r\n if (document.querySelectorAll(this.selector).length) {\r\n document.querySelectorAll(this.selector).forEach(accordeonElement => {\r\n let accordeon = new Accordeon(accordeonElement);\r\n this.accordeons.push(accordeon);\r\n\r\n setTimeout(() => {\r\n accordeon.init();\r\n }, 500);\r\n \r\n });\r\n }\r\n }\r\n}"],"names":["Accordeon","container","_classCallCheck","this","items","resetClass","oneOption","selectors","header","content","loadSettings","_createClass","key","value","_this","children","forEach","item","push","filter","hasAttribute","querySelector","getAttribute","style","height","setTimeout","concat","scrollHeight","setEventListeners","setAttribute","querySelectorAll","clickable","_this2","closeButton","addEventListener","toggleItem","bind","e","toLowerCase","inactive","event","transitionEnd","active","_this3","clientHeight","offsetHeight","otherItem","app","parallaxController","scrollScenes","length","scene","refresh","_this4","classList","contains","add","dataset","AccordeonController","selector","accordeons","init","document","accordeonElement","accordeon"],"sourceRoot":""}