{"version":3,"sources":["webpack:///./src/js/components/footer.js"],"names":["Footer","_Component","_classCallCheck","_callSuper","arguments","_inherits","key","value","this","dom","$accordion","el","_$","$sectionHeadings","_$$","currentViewport","handleViewport","_on","handleClick","bind","handleKeydown","breakpoints","addBreakpointListenerLg","e","$button","target","closest","$heading","parentNode","getAttribute","classList","add","setAttribute","remove","activeElement","document","isButtonActive","matches","$buttons","currentButtonIndex","findIndex","button","length","keyCode","keys","home","preventDefault","focus","end","up","down","isLg","setLgViewportDom","setXsViewportDom","_this","forEach","heading","$title","$sectionContent","nextElementSibling","$wrapper","createSectionWrapper","appendChild","removeChild","attr","removeAttribute","insertBefore","appendSectionWrapperChilds","_this2","_this$dom","sectionContentId","concat","nanoid","buttonId","createSectionButton","setSectionButtonAttrs","setSectionContentAttrs","createElement","id","Component"],"mappings":"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","file":"55.1999bc.js","sourcesContent":["import { Component } from '@verndale/core';\r\nimport { nanoid } from 'nanoid';\r\n\r\nimport keys from '../utils/keys';\r\nimport breakpoints from '../utils/breakpoints';\r\n\r\nclass Footer extends Component {\r\n setupDefaults() {\r\n this.dom = {\r\n $accordion: this.el._$('.footer__accordion'),\r\n $sectionHeadings: this.el._$$('.footer__section-heading')\r\n };\r\n\r\n this.currentViewport = null;\r\n this.handleViewport();\r\n }\r\n\r\n addListeners() {\r\n const { $accordion } = this.dom;\r\n\r\n $accordion._on('click', ::this.handleClick);\r\n $accordion._on('keydown', ::this.handleKeydown);\r\n breakpoints.addBreakpointListenerLg(::this.handleViewport);\r\n }\r\n\r\n handleClick(e) {\r\n const $button = e.target.closest('.footer__section-heading-button');\r\n\r\n if ($button) {\r\n const $heading = $button.parentNode;\r\n const isOpen = $button.getAttribute('aria-expanded') === 'true';\r\n\r\n if (isOpen) {\r\n $heading.classList.add('footer__section-heading--closed');\r\n $button.setAttribute('aria-expanded', 'false');\r\n } else {\r\n $heading.classList.remove('footer__section-heading--closed');\r\n $button.setAttribute('aria-expanded', 'true');\r\n }\r\n }\r\n }\r\n\r\n handleKeydown(e) {\r\n const { activeElement } = document;\r\n const isButtonActive = activeElement.matches(\r\n '.footer__section-heading-button'\r\n );\r\n const $buttons = this.el._$$('.footer__section-heading-button');\r\n const currentButtonIndex = () =>\r\n $buttons.findIndex((button) => button === activeElement);\r\n const { length } = $buttons;\r\n\r\n switch (e.keyCode) {\r\n case keys.home:\r\n e.preventDefault();\r\n $buttons[0].focus();\r\n break;\r\n case keys.end:\r\n e.preventDefault();\r\n $buttons[length - 1].focus();\r\n break;\r\n case keys.up:\r\n e.preventDefault();\r\n if (isButtonActive) {\r\n $buttons[(currentButtonIndex() - 1 + length) % length].focus();\r\n }\r\n break;\r\n case keys.down:\r\n e.preventDefault();\r\n if (isButtonActive) {\r\n $buttons[(currentButtonIndex() + 1) % length].focus();\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n handleViewport() {\r\n if (breakpoints.isLg()) {\r\n this.setLgViewportDom();\r\n this.currentViewport = 'lg';\r\n } else {\r\n this.setXsViewportDom();\r\n this.currentViewport = 'xs';\r\n }\r\n }\r\n\r\n setLgViewportDom() {\r\n const { $sectionHeadings } = this.dom;\r\n\r\n if (!this.currentViewport) {\r\n $sectionHeadings.forEach((heading) => {\r\n const $sectionContent = heading.nextElementSibling;\r\n const $wrapper = this.createSectionWrapper();\r\n\r\n heading.parentNode.insertBefore($wrapper, heading);\r\n this.appendSectionWrapperChilds($wrapper, heading, $sectionContent);\r\n });\r\n } else if (this.currentViewport === 'xs') {\r\n $sectionHeadings.forEach((heading) => {\r\n const $button = heading._$('.footer__section-heading-button');\r\n const $title = heading._$('span');\r\n const $sectionContent = heading.nextElementSibling;\r\n const $wrapper = this.createSectionWrapper();\r\n\r\n heading.appendChild($title);\r\n heading.removeChild($button);\r\n ['role', 'aria-labelledby', 'id'].forEach((attr) =>\r\n $sectionContent.removeAttribute(attr)\r\n );\r\n heading.parentNode.insertBefore($wrapper, heading);\r\n this.appendSectionWrapperChilds($wrapper, heading, $sectionContent);\r\n });\r\n }\r\n }\r\n\r\n setXsViewportDom() {\r\n const { $sectionHeadings, $accordion } = this.dom;\r\n\r\n if (!this.currentViewport) {\r\n $sectionHeadings.forEach((heading) => {\r\n const sectionContentId = `id-${nanoid()}`;\r\n const buttonId = `id-${nanoid()}`;\r\n const $sectionContent = heading.nextElementSibling;\r\n const $button = this.createSectionButton(heading);\r\n const $title = heading._$('span');\r\n\r\n this.setSectionButtonAttrs($button, sectionContentId, buttonId);\r\n heading.appendChild($button);\r\n $button.appendChild($title);\r\n this.setSectionContentAttrs(\r\n $sectionContent,\r\n sectionContentId,\r\n buttonId\r\n );\r\n });\r\n } else if (this.currentViewport === 'lg') {\r\n $sectionHeadings.forEach((heading) => {\r\n const sectionContentId = `id-${nanoid()}`;\r\n const buttonId = `id-${nanoid()}`;\r\n const $sectionContent = heading.nextElementSibling;\r\n const $button = this.createSectionButton(heading);\r\n const $title = heading._$('span');\r\n const $wrapper = heading.parentNode;\r\n\r\n this.setSectionButtonAttrs($button, sectionContentId, buttonId);\r\n $accordion.appendChild(heading);\r\n $accordion.appendChild($sectionContent);\r\n $accordion.removeChild($wrapper);\r\n heading.appendChild($button);\r\n $button.appendChild($title);\r\n this.setSectionContentAttrs(\r\n $sectionContent,\r\n sectionContentId,\r\n buttonId\r\n );\r\n });\r\n }\r\n }\r\n\r\n createSectionButton($heading) {\r\n const $button = document.createElement('button');\r\n $button.classList.add('footer__section-heading-button');\r\n $heading.classList.add('footer__section-heading--closed');\r\n\r\n return $button;\r\n }\r\n\r\n createSectionWrapper() {\r\n const $wrapper = document.createElement('div');\r\n $wrapper.classList.add('footer__section');\r\n\r\n return $wrapper;\r\n }\r\n\r\n appendSectionWrapperChilds($wrapper, $heading, $sectionContent) {\r\n $wrapper.appendChild($heading);\r\n $wrapper.appendChild($sectionContent);\r\n }\r\n\r\n setSectionContentAttrs($sectionContent, sectionContentId, buttonId) {\r\n $sectionContent.id = sectionContentId;\r\n $sectionContent.setAttribute('role', 'region');\r\n $sectionContent.setAttribute('aria-labelledby', buttonId);\r\n }\r\n\r\n setSectionButtonAttrs($button, sectionContentId, buttonId) {\r\n $button.setAttribute('aria-expanded', 'false');\r\n $button.setAttribute('aria-controls', sectionContentId);\r\n $button.id = buttonId;\r\n }\r\n}\r\n\r\nexport default Footer;\r\n"],"sourceRoot":""}