{"version":3,"sources":["webpack://gli-frontend/../web/themes/custom/gilderlehrman_theme/src/js/gli__sidenav-accordion.js"],"names":["Drupal","$","behaviors","gliSidenavAccordion","attach","context","accordions","querySelectorAll","accordionGroups","index","forEach","paragraph","push","nextElementSibling","classList","contains","group","length","navItems","i","element","title","querySelector","contentId","getAttribute","textContent","wrapper","document","createElement","add","contentWrapper","appendChild","firstElement","shift","parentNode","insertBefore","navContent","reduce","content","item","navHtml","insertAdjacentHTML","links","contents","link","addEventListener","event","isMobileContext","window","innerWidth","targetIsActive","target","dataset","remove","activeContent","scrollIntoView","history","pushState","preventDefault","dispatchEvent","Event","openInitialPanel","location","hash","startsWith","substring","activeLink","setTimeout","anchorPoint","jQuery"],"mappings":"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","file":"/js/gli__sidenav-accordion.js","sourcesContent":["((Drupal, $) => {\n\n /**\n * Set up the Side-Nav Accordion functionality.\n *\n * @type {Drupal~behavior}\n */\n Drupal.behaviors.gliSidenavAccordion = {\n attach (context) {\n const accordions = context.querySelectorAll('.paragraph--type--sidenav-accordion');\n const accordionGroups = [];\n let index = 0;\n accordionGroups[index] = [];\n accordions.forEach(paragraph => {\n accordionGroups[index].push(paragraph);\n if (!paragraph.nextElementSibling?.classList.contains('paragraph--type--sidenav-accordion')) {\n // Start a new group.\n index++;\n accordionGroups[index] = [];\n }\n });\n\n accordionGroups.forEach(group => {\n if (group.length < 2) {\n // Skip groups with 1 or no elements.\n return;\n }\n\n const navItems = [];\n for (let i = 0; i < group.length; i++) {\n const element = group[i];\n const title = element.querySelector('h2.field-title');\n navItems.push({\n contentId: element.getAttribute('data-content-id'),\n title: title?.textContent,\n });\n }\n\n const wrapper = document.createElement('div');\n wrapper.classList.add('sidenav-accordion__wrapper');\n const contentWrapper = document.createElement('div');\n contentWrapper.classList.add('sidenav-accordion__content-area');\n wrapper.appendChild(contentWrapper);\n\n const firstElement = group.shift();\n firstElement.parentNode.insertBefore(wrapper, firstElement);\n contentWrapper.appendChild(firstElement);\n\n for (let i = 0; i < group.length; i++) {\n contentWrapper.appendChild(group[i]);\n }\n\n let navContent = '';\n navContent = navItems.reduce(\n (content, item) => content + `
  • ${item.title}
  • `,\n navContent\n );\n const navHtml = `\n
    \n \n
    \n `;\n\n wrapper.insertAdjacentHTML('afterbegin', navHtml);\n\n const links = wrapper.querySelectorAll('.sidenav__menu a');\n const contents = wrapper.querySelectorAll('.accordion-content');\n if (!links.length || !contents.length) {\n return;\n }\n\n for (let i = 0; i < links.length; i++) {\n const link = links[i];\n link.addEventListener('gli.accordionClick', (event) => {\n const isMobileContext = window.innerWidth < 701;\n const targetIsActive = event.target.classList.contains('active');\n const contentId = event.target.dataset.contentId;\n // Deactivate other accordion content.\n links.forEach(link => link.classList.remove('active'));\n contents.forEach(content => {\n content.classList.add('hide');\n content.querySelector('.field-title')?.classList.remove('active');\n });\n if (isMobileContext && targetIsActive) {\n // Mobile tap/click on active item. Collapse all.\n }\n else {\n // Activate current link.\n event.target.classList.add('active');\n const activeContent = wrapper.querySelector('.accordion-content[data-content-id=' + contentId + ']');\n activeContent?.classList.remove('hide');\n activeContent.querySelector('.field-title')?.classList.add('active');\n if (isMobileContext) {\n // Scroll to top of section.\n activeContent.querySelector('.anchor-point')?.scrollIntoView();\n }\n }\n // Update URL.\n window.history.pushState(null, document.title, event.target.getAttribute('href'));\n });\n link.addEventListener('click', (event) => {\n event.preventDefault();\n event.target.dispatchEvent(new Event('gli.accordionClick'));\n });\n }\n\n for (let i = 0; i < contents.length; i++) {\n const content = contents[i];\n // This is for mobile.\n content.querySelector('.field-title')?.addEventListener('click', (event) => {\n event.preventDefault();\n // Trigger the link click in the hidden sidenav.\n const contentId = event.target.dataset.contentId;\n wrapper.querySelector('.sidenav__menu [data-content-id=\"' + contentId + '\"]').dispatchEvent(new Event('gli.accordionClick'));\n });\n }\n\n // Initial states.\n let openInitialPanel = false;\n let contentId = null;\n let activeContent = null;\n if (window.location.hash && window.location.hash.startsWith('#par')) {\n contentId = window.location.hash.substring(1);\n activeContent = wrapper.querySelector('.accordion-content[data-content-id=' + contentId + ']');\n if (activeContent != null) {\n openInitialPanel = true;\n }\n }\n\n if (openInitialPanel) {\n // Open selected panel.\n const activeLink = wrapper.querySelector('.sidenav__menu [data-content-id=\"' + contentId + '\"]');\n links.forEach(link => link.classList.remove('active'));\n contents.forEach(content => {\n content.classList.add('hide');\n })\n activeLink.classList.add('active');\n activeContent.classList.remove('hide');\n activeContent.querySelector('.field-title')?.classList.add('active');\n // Scroll to top of Accordion section.\n setTimeout(() => {\n const anchorPoint = activeContent.querySelector('.anchor-point');\n if (anchorPoint != null) {\n anchorPoint.scrollIntoView(true);\n }\n }, 750);\n }\n else {\n if (window.innerWidth < 701) {\n // Mobile: collapse all.\n links.forEach(link => link.classList.remove('active'));\n contents.forEach(content => {\n content.classList.add('hide');\n });\n }\n else {\n // Desktop: Activate the first element on page load.\n contentId = links[0].dataset.contentId;\n links.forEach(link => link.classList.remove('active'));\n contents.forEach(content => {\n content.classList.add('hide');\n });\n links[0].classList.add('active');\n activeContent = wrapper.querySelector('.accordion-content[data-content-id=' + contentId + ']');\n activeContent?.classList.remove('hide');\n activeContent.querySelector('.field-title')?.classList.add('active');\n }\n }\n });\n }\n };\n})(Drupal, jQuery);\n"],"sourceRoot":""}