{"version":3,"file":"Src_Scripts_components_accordion_js.3f051995eec9404229a1.js","sources":["webpack://FinansDanmark/./Src/Scripts/components/accordion.js"],"sourcesContent":["export default class Accordion {\r\n constructor(elm, args) {\r\n var accordion = elm || [];\r\n if (!accordion) { return; }\r\n\r\n var items = accordion.querySelectorAll('.accordion__item');\r\n\r\n for (var i = 0; i < items.length; i++) {\r\n var target = items[i].querySelector('.accordion__toggle');\r\n target.addEventListener('click', toggleTab);\r\n target.item = elm;\r\n }\r\n\r\n function toggleTab(event) {\r\n var parentItem = this.parentNode;\r\n var target = parentItem.querySelector('.accordion__item-body');\r\n\r\n if (parentItem.classList.contains('accordion__item--active')) {\r\n collapseSection(target);\r\n parentItem.classList.remove('accordion__item--active');\r\n return false;\r\n }\r\n\r\n var item = event.currentTarget.item;\r\n var media = parentItem.dataset.mediaUrl;\r\n\r\n if (media) {\r\n var mediaAlt = parentItem.dataset.mediaAlt;\r\n var mediaTarget = item.querySelector('.accordion__media .dynamic-image');\r\n\r\n if (mediaTarget.src !== media) {\r\n mediaTarget.src = media;\r\n mediaTarget.alt = mediaAlt;\r\n }\r\n }\r\n\r\n var active = item.querySelector('.accordion__item--active');\r\n\r\n if (active !== null) {\r\n var activeTarget = active.querySelector('.accordion__item-body');\r\n collapseSection(activeTarget);\r\n active.classList.remove('accordion__item--active');\r\n }\r\n\r\n parentItem.classList.add('accordion__item--active');\r\n expandSection(target);\r\n }\r\n\r\n function collapseSection(element) {\r\n // get the height of the element's inner content, regardless of its actual size\r\n var sectionHeight = element.scrollHeight;\r\n\r\n // temporarily disable all css transitions\r\n var elementTransition = element.style.transition;\r\n element.style.transition = '';\r\n\r\n // on the next frame (as soon as the previous style change has taken effect),\r\n // explicitly set the element's height to its current pixel height, so we \r\n // aren't transitioning out of 'auto'\r\n requestAnimationFrame(function () {\r\n element.style.height = sectionHeight + 'px';\r\n element.style.transition = elementTransition;\r\n\r\n // on the next frame (as soon as the previous style change has taken effect),\r\n // have the element transition to height: 0\r\n requestAnimationFrame(function () {\r\n element.style.height = 0 + 'px';\r\n });\r\n });\r\n }\r\n\r\n function expandSection(element) {\r\n // get the height of the element's inner content, regardless of its actual size\r\n var sectionHeight = element.scrollHeight;\r\n\r\n // have the element transition to the height of its inner content\r\n element.style.height = sectionHeight + 'px';\r\n\r\n // when the next css transition finishes (which should be the one we just triggered)\r\n const endTransition = () => {\r\n element.removeEventListener('transitionend', endTransition);\r\n element.style.height = '';\r\n\r\n if (!element.closest('.accordion__item--active')) {\r\n element.style.height = '';\r\n } else {\r\n element.style.height = 'auto';\r\n }\r\n };\r\n\r\n element.addEventListener('transitionend', endTransition);\r\n }\r\n\r\n }\r\n}\r\n\r\n\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AAAA;AAAA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAGA;AACA;AACA;AAAA;AACA;AACA;AAGA;AACA;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AA9FA;AACA;A;;A;;A","sourceRoot":""}