{"version":3,"file":"assets/AMA/js/main.min.js","mappings":"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","sources":["webpack://ama-website-frontend/./src/assets/js/utility.js","webpack://ama-website-frontend/./src/assets/js/main.js","webpack://ama-website-frontend/./src/dynamic/accordion/accordion.js","webpack://ama-website-frontend/./src/dynamic/archive-listing/archive-listing.js","webpack://ama-website-frontend/./src/base/02-content/content.js","webpack://ama-website-frontend/./src/section/footer/footer.js","webpack://ama-website-frontend/./src/section/header/header.js","webpack://ama-website-frontend/./src/dynamic/nav/nav.js","webpack://ama-website-frontend/./src/simple/page-feedback-form/page-feedback-form.js","webpack://ama-website-frontend/./src/dynamic/pagination/pagination.js","webpack://ama-website-frontend/./src/base/02-content/responsiveTable.js","webpack://ama-website-frontend/./src/dynamic/tabbed-content/tabbed-content.js","webpack://ama-website-frontend/./src/dynamic/tablist/tablist.js"],"sourcesContent":["/* GLOBAL BETWEEN DIFF COMPONENTS */\r\n\r\n/**\r\n * For setting up jump-links to sectioned components,\r\n * such as tabbed content or accordions\r\n */\r\nexport const PAGE_HASH_DATA = {\r\n windowHashValue: window.location.hash.replace('#', ''),\r\n allAnchorHashElements: document.querySelectorAll('a[href^=\\\\#]'),\r\n get allAnchorHashValues() {\r\n return this.allAnchorHashElements != null\r\n ? [...this.allAnchorHashElements]\r\n .map(({ hash }) => hash)\r\n .filter((str) => str != '') // don't want empties\r\n : '';\r\n },\r\n};\r\n\r\n/**\r\n * Given an element, scrolls to its parent container\r\n * @param {Node Element} element - clicked/active element\r\n */\r\nexport const scrollToContainer = (element, containerClass) => {\r\n if (!element || containerClass == '') {\r\n return;\r\n }\r\n\r\n const VIEWHEIGHT = document.documentElement.clientHeight;\r\n const OFFSET = VIEWHEIGHT * 0.1;\r\n\r\n let containingElement = element.closest(containerClass);\r\n if (!containingElement) {\r\n return;\r\n }\r\n\r\n let elementTop = containingElement.getBoundingClientRect().top;\r\n\r\n // don't jump to if already in ~ top->center view\r\n if (elementTop >= 0 && elementTop <= (window.innerHeight || VIEWHEIGHT) / 2) {\r\n return;\r\n }\r\n\r\n window.scrollTo({\r\n behavior: 'smooth',\r\n top: elementTop - document.body.getBoundingClientRect().top - OFFSET,\r\n });\r\n};\r\n\r\n/* CLASS MANIPULATIONS */\r\n\r\n/**\r\n * @param {Element} el\r\n * @param {string} cssClass\r\n * @returns success or failure\r\n */\r\nexport const addClass = (el, cssClass) => {\r\n if (!el.classList.contains(cssClass)) {\r\n el.classList.add(cssClass);\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * @param {Element} el\r\n * @param {string} cssClass\r\n * @returns success or failure\r\n */\r\nexport const removeClass = (el, cssClass) => {\r\n if (el.classList.contains(cssClass)) {\r\n el.classList.remove(cssClass);\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Toggles class for an element node by utilizing other utility functions\r\n * @param {Element} el\r\n * @param {string} cssClass\r\n * @calls addClass || removeClass\r\n */\r\nexport const toggleClass = (el, cssClass) => {\r\n addClass(el, cssClass) || removeClass(el, cssClass);\r\n};\r\n\r\n/**\r\n * Toggles multiple classes for a single element node\r\n * @param {Element} el\r\n * @param {array} classList - list of strings\r\n * @calls addClass || removeClass\r\n */\r\nexport const toggleClasses = (el, classList) => {\r\n for (let c = 0; c < classList.length; c++) {\r\n addClass(el, classList[c]) || removeClass(el, classList[c]);\r\n }\r\n};\r\n\r\n/**\r\n * @param {Element} el - element to be wrapped\r\n * @param {Element} wrapper - wrapper node to be created to wrap around el\r\n * @param {string} wrapperClass - class(es) to add to the wrapper\r\n */\r\nexport const wrapElement = (el, wrapper, wrapperClass) => {\r\n el.parentNode.insertBefore(wrapper, el);\r\n wrapper.appendChild(el);\r\n addClass(wrapper, wrapperClass);\r\n};\r\n\r\n/**\r\n * Toggles a binary attribute of an element node\r\n * @param {Element} el\r\n * @param {string} attr - name of element's attribute to target\r\n * @returns success or failure\r\n */\r\nexport const toggleAttribute = (el, attr) => {\r\n let currentValue = el.getAttribute(attr);\r\n\r\n if (currentValue == 'true') {\r\n el.setAttribute(attr, 'false');\r\n return true;\r\n } else if (currentValue == 'false') {\r\n el.setAttribute(attr, 'true');\r\n return true;\r\n }\r\n\r\n return false;\r\n};\r\n\r\n/**\r\n * Creates a dynamically sized slide up/down effect for toggleable content.\r\n * Does not control open/close class to simplify cases with children focus keeping state open\r\n * @param {event} e - dom event that triggered for scope\r\n * @param {string} parentContainer - identifier for the parent container. (Eg: '.class')\r\n * @param {string} toggleContent - identifier for the content container to animate\r\n * @param {string} cssClass - class to look for whether container is open/closed. Default is 'is-open'\r\n */\r\nexport const slideDownTogglableSection = (\r\n e,\r\n parentContainer,\r\n toggleContent,\r\n cssClass = 'is-open'\r\n) => {\r\n // get parent toggle-section to locate content & apply/remove open class\r\n let sectionContainer = e.target.closest(parentContainer);\r\n if (!sectionContainer) {\r\n return;\r\n }\r\n\r\n let contentContainer = sectionContainer.querySelector(toggleContent);\r\n if (!contentContainer) {\r\n return;\r\n }\r\n\r\n // cause padding cut-off for some reason despite being accurately calculated\r\n // add 2 rhythm units to accomodate\r\n let startHeight = contentContainer.scrollHeight + 64;\r\n\r\n if (sectionContainer.classList.contains(cssClass)) {\r\n // store transition for animation later\r\n var transitions = contentContainer.style.transition;\r\n contentContainer.style.transition = '';\r\n contentContainer.style.maxHeight = startHeight + 'px';\r\n\r\n // on next animation frame explicitly set height to its current pixel height,\r\n // to avoid transitioning out of 'auto'\r\n window.requestAnimationFrame(function () {\r\n contentContainer.style.transition = transitions;\r\n\r\n window.requestAnimationFrame(function () {\r\n contentContainer.style.maxHeight = 0 + 'px';\r\n contentContainer.style.removeProperty('max-height');\r\n });\r\n });\r\n } else {\r\n // expand\r\n contentContainer.style.maxHeight = startHeight + 'px';\r\n }\r\n};\r\n","import ArchiveListing from '../../dynamic/archive-listing/archive-listing';\r\nimport Pagination from '../../dynamic/pagination/pagination';\r\nimport PageFeedbackForm from '../../simple/page-feedback-form/page-feedback-form';\r\nimport Tablist from '../../dynamic/tablist/tablist';\r\nimport Accordion from '../../dynamic/accordion/accordion';\r\nimport TabbedContent from '../../dynamic/tabbed-content/tabbed-content';\r\nimport Nav from '../../dynamic/nav/nav';\r\nimport Header from '../../section/header/header';\r\nimport Footer from '../../section/footer/footer';\r\nimport ResponsiveTables from '../../base/02-content/responsiveTable';\r\nimport Content from '../../base/02-content/content';\r\n\r\n//global scope\r\n//used for multiple instances of the same component\r\nvar globalClasses = {};\r\nwindow.classes = globalClasses;\r\n\r\n//used for class to class interactions\r\nvar mainClasses = {\r\n Accordion,\r\n ArchiveListing,\r\n Content,\r\n Footer,\r\n Header,\r\n Nav,\r\n PageFeedbackForm,\r\n Pagination,\r\n ResponsiveTables,\r\n TabbedContent,\r\n Tablist,\r\n};\r\n\r\n//used for class to class interactions\r\nvar mainClassesInstances = {};\r\n\r\nfunction init() {\r\n for (const [key, value] of Object.entries(mainClasses)) {\r\n mainClassesInstances[key] = new value();\r\n }\r\n}\r\n\r\ndocument.addEventListener('DOMContentLoaded', init);\r\n\r\nexport default mainClasses;\r\n","import {\r\n PAGE_HASH_DATA,\r\n scrollToContainer,\r\n addClass,\r\n toggleClass,\r\n toggleAttribute,\r\n slideDownTogglableSection,\r\n} from '../../assets/js/utility';\r\n\r\nclass Accordion {\r\n constructor() {\r\n this.toggleClass = 'is-open';\r\n this.accordionItemClass = '.simple-accordion-item';\r\n this.accordionHeadings = document.querySelectorAll(\r\n `${this.accordionItemClass} .accordion-item-heading`\r\n );\r\n\r\n // each item works independently so don't need to care about the section\r\n // container itself\r\n if (this.accordionHeadings && this.accordionHeadings.length > 0) {\r\n this.InitAccordionItems();\r\n this.watchRelatedAnchors();\r\n }\r\n }\r\n\r\n watchRelatedAnchors() {\r\n if (PAGE_HASH_DATA.allAnchorHashValues.length <= 0) {\r\n return;\r\n }\r\n\r\n // check if any # links match an accordion tiem & add to relevant list\r\n let allAccordionIds = [...this.accordionHeadings].map(({ id }) => id);\r\n let relevantLinkHashes = [];\r\n\r\n allAccordionIds.filter((id) => {\r\n if (PAGE_HASH_DATA.allAnchorHashValues.indexOf(`#${id}`) !== -1) {\r\n relevantLinkHashes.push(`#${id}`);\r\n }\r\n });\r\n\r\n // pair down relevant anchor elements for listeners\r\n let relevantAnchorElements = [...PAGE_HASH_DATA.allAnchorHashElements].filter(\r\n (element) => {\r\n if (relevantLinkHashes.indexOf(element.hash) !== -1) {\r\n return element;\r\n }\r\n }\r\n );\r\n\r\n relevantAnchorElements.forEach((anchor) => {\r\n anchor.addEventListener('click', (e) => {\r\n let targetHash = e.target.hash;\r\n let currentElement = document.querySelector(\r\n `${this.accordionItemClass} ${targetHash}`\r\n );\r\n\r\n e.preventDefault(); // prevent normal snap to element\r\n currentElement.setAttribute('aria-expanded', 'true');\r\n addClass(currentElement.closest(this.accordionItemClass), this.toggleClass);\r\n\r\n // resume normal behavior but with smooth scroll\r\n window.location.hash = targetHash;\r\n scrollToContainer(currentElement, this.accordionItemClass);\r\n });\r\n });\r\n }\r\n\r\n InitAccordionItems() {\r\n this.accordionHeadings.forEach((heading) => {\r\n if (\r\n PAGE_HASH_DATA.windowHashValue != '' &&\r\n heading.id == PAGE_HASH_DATA.windowHashValue\r\n ) {\r\n // jump to matching item on load & open it\r\n heading.setAttribute('aria-expanded', 'true');\r\n addClass(heading.closest(this.accordionItemClass), this.toggleClass);\r\n scrollToContainer(heading, this.accordionItemClass);\r\n }\r\n\r\n heading.addEventListener('click', (e) => {\r\n let accordionItem = e.target.closest(this.accordionItemClass);\r\n if (!accordionItem) {\r\n return;\r\n }\r\n\r\n slideDownTogglableSection(e, this.accordionItemClass, '.content');\r\n toggleAttribute(heading, 'aria-expanded');\r\n toggleClass(accordionItem, this.toggleClass);\r\n });\r\n });\r\n }\r\n}\r\n\r\nexport default Accordion;\r\n","import { PAGE_HASH_DATA, scrollToContainer } from '../../assets/js/utility';\r\n\r\nclass ArchiveListing {\r\n constructor() {\r\n this.archiveSection = document.querySelector(`#archiveListing`);\r\n\r\n if (this.archiveSection) {\r\n this.InitArchiveSection();\r\n }\r\n }\r\n\r\n InitArchiveSection() {\r\n if (\r\n PAGE_HASH_DATA.windowHashValue != '' &&\r\n this.archiveSection.id == PAGE_HASH_DATA.windowHashValue\r\n ) {\r\n scrollToContainer(\r\n this.archiveSection.querySelector('ol'),\r\n '.dynamic-archive-listing'\r\n );\r\n }\r\n }\r\n}\r\n\r\nexport default ArchiveListing;\r\n","import { addClass } from '../../assets/js/utility';\r\n\r\nclass Content {\r\n constructor() {\r\n // all content links and nav menu sublinks to apply external class to\r\n this.externalClass = 'external';\r\n this.externalLinks = document.querySelectorAll(\r\n '.content a[href]:not(.button), .content-sidebar a[href]:not(.button), ' +\r\n '.dynamic-nav .submenu a[href], .dynamic-resource-links-list a[href]'\r\n );\r\n\r\n if (this.externalLinks.length > 0) {\r\n for (let i = 0; i < this.externalLinks.length; i++) {\r\n var link = this.externalLinks[i];\r\n\r\n // exclude inline js, mailto, tel, etc links\r\n if (link.href.indexOf('://') > 0) {\r\n let hostnameParts = location.hostname.split('.');\r\n let rootDomain = '';\r\n\r\n // location.hostname includes subdoms which we don't want to compare with\r\n // poor mans detection expecting simple subdom.rootdom.com format\r\n // what we want should be 2nd last unless on localhost\r\n if (hostnameParts.length > 1) {\r\n rootDomain = hostnameParts[hostnameParts.length - 2];\r\n } else {\r\n rootDomain = hostnameParts[0];\r\n }\r\n\r\n if (link.hostname.indexOf(rootDomain) < 0) {\r\n addClass(link, this.externalClass);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // insert a word break opportunity for emails\r\n this.mailToLinks = document.querySelectorAll('a[href^=mailto]');\r\n\r\n if (this.mailToLinks.length > 0) {\r\n for (let mailto of this.mailToLinks) {\r\n var formatted = mailto.innerText.replace(/([@.])/g, '$1');\r\n\r\n // check for complex link element like resource or nav\r\n // so we don't destroy markup\r\n let spanLayer = mailto.querySelector('span');\r\n if (spanLayer != null) {\r\n spanLayer.innerHTML = formatted;\r\n } else {\r\n mailto.innerHTML = formatted;\r\n }\r\n }\r\n }\r\n\r\n // all images wrapped in an anchor tag within content sections\r\n this.linkedImageClass = 'img-link';\r\n this.linkedImages = document.querySelectorAll(\r\n '.content a > img, a.content > img'\r\n );\r\n\r\n if (this.linkedImages.length > 0) {\r\n this.linkedImages.forEach((link) =>\r\n addClass(link.parentElement, this.linkedImageClass)\r\n );\r\n }\r\n\r\n // all content images use their alt text as their title\r\n this.allContentImages = document.querySelectorAll('.content img');\r\n if (this.allContentImages.length > 0) {\r\n this.allContentImages.forEach((image) => {\r\n let imgAltText = image.getAttribute('alt');\r\n\r\n if (imgAltText != '') {\r\n image.setAttribute('title', imgAltText);\r\n }\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport default Content;\r\n","class Footer {\r\n constructor() {\r\n this.copyrightElement = document.querySelector('.site-footer #copyright');\r\n\r\n if (this.copyrightElement) {\r\n let copy = '© ' + new Date().getFullYear();\r\n this.copyrightElement.insertAdjacentHTML('afterbegin', copy);\r\n }\r\n }\r\n}\r\n\r\nexport default Footer;\r\n","import {\r\n toggleClass,\r\n toggleAttribute,\r\n slideDownTogglableSection,\r\n removeClass,\r\n addClass,\r\n} from '../../assets/js/utility';\r\n\r\nclass Header {\r\n constructor() {\r\n this.scrollClass = 'is-scrolled';\r\n this.toggleClass = 'is-open';\r\n this.mobileMembersOpenClass = 'members-is-open';\r\n this.menuLeaveTimer;\r\n this.mobileMenuBreakpoint = 870; // md\r\n\r\n this.siteHeaderElement = document.querySelector('.site-header');\r\n this.headerNav = document.querySelector('.site-header .dynamic-header-nav');\r\n this.memberMenuButton = document.querySelector(\r\n '.site-header .member-menu-button'\r\n );\r\n this.memberMenuArea = document.querySelector(\r\n '.site-header .member-logged-group'\r\n );\r\n this.memberMenu = document.querySelector('.site-header .dynamic-mega-menu');\r\n\r\n this.mobileMemberIcon = document.querySelector(\r\n '.site-header .mobile-members-menu-icon'\r\n );\r\n this.menuIcon = document.querySelector('#mobile-menu-icon');\r\n\r\n // for mobile scrolling\r\n if (this.siteHeaderElement) {\r\n let ticking = false;\r\n\r\n window.addEventListener('resize', () => this.checkForScroll());\r\n window.addEventListener('scroll', () => {\r\n if (!ticking) {\r\n window.requestAnimationFrame(() => {\r\n this.checkForScroll();\r\n ticking = false;\r\n });\r\n\r\n ticking = true;\r\n }\r\n });\r\n\r\n // always check on load in case page using jump link\r\n this.checkForScroll();\r\n }\r\n\r\n if (this.headerNav) {\r\n // desktop mega menu states\r\n // specifically add/remove and not toggle cause if page loads w/ user mouse over an area\r\n // the menus will not toggle backwards\r\n if (this.memberMenuButton && this.memberMenu) {\r\n this.memberMenuButton.addEventListener('mouseenter', (e) => {\r\n slideDownTogglableSection(e, '.member-logged-group', '.dynamic-mega-menu');\r\n addClass(this.memberMenuButton, this.toggleClass);\r\n addClass(this.memberMenuArea, this.toggleClass);\r\n });\r\n\r\n this.memberMenuButton.addEventListener('mouseleave', (e) => {\r\n // stay open if focusing in submenu\r\n if (this.memberMenu.contains(e.relatedTarget)) {\r\n return;\r\n } else {\r\n // don't close immediately in case mouse traveling outside of\r\n // menu area to reach distant menu panel\r\n this.menuLeaveTimer = setTimeout(() => {\r\n slideDownTogglableSection(\r\n e,\r\n '.member-logged-group',\r\n '.dynamic-mega-menu'\r\n );\r\n removeClass(this.memberMenuButton, this.toggleClass);\r\n removeClass(this.memberMenuArea, this.toggleClass);\r\n }, 800);\r\n }\r\n });\r\n\r\n this.memberMenu.addEventListener('mouseenter', (e) => {\r\n // clear any leave timer if mouse traveled over non-menu elements\r\n // on its way here\r\n clearTimeout(this.menuLeaveTimer);\r\n\r\n slideDownTogglableSection(e, '.member-logged-group', '.dynamic-mega-menu');\r\n addClass(this.memberMenuButton, this.toggleClass);\r\n addClass(this.memberMenuArea, this.toggleClass);\r\n });\r\n\r\n this.memberMenu.addEventListener('mouseleave', (e) => {\r\n slideDownTogglableSection(e, '.member-logged-group', '.dynamic-mega-menu');\r\n removeClass(this.memberMenuButton, this.toggleClass);\r\n removeClass(this.memberMenuArea, this.toggleClass);\r\n });\r\n\r\n this.memberMenu.addEventListener('focusin', (e) => {\r\n // stay open if focusing in submenu\r\n if (this.memberMenu.contains(e.relatedTarget)) {\r\n return;\r\n }\r\n\r\n slideDownTogglableSection(e, '.member-logged-group', '.dynamic-mega-menu');\r\n addClass(this.memberMenuButton, this.toggleClass);\r\n addClass(this.memberMenuArea, this.toggleClass);\r\n });\r\n\r\n this.memberMenu.addEventListener('focusout', (e) => {\r\n // stay open if focusing in submenu\r\n if (this.memberMenu.contains(e.relatedTarget)) {\r\n return;\r\n }\r\n\r\n slideDownTogglableSection(e, '.member-logged-group', '.dynamic-mega-menu');\r\n removeClass(this.memberMenuButton, this.toggleClass);\r\n removeClass(this.memberMenuArea, this.toggleClass);\r\n });\r\n }\r\n\r\n // Mobile Specific elements\r\n if (this.menuIcon) {\r\n this.menuIcon.addEventListener('click', () => {\r\n // check if was opened by members icon\r\n if (this.menuIcon.classList.contains(this.mobileMembersOpenClass)) {\r\n toggleClass(this.menuIcon, this.mobileMembersOpenClass);\r\n toggleClass(this.headerNav, this.mobileMembersOpenClass);\r\n } else {\r\n toggleClass(this.menuIcon, this.toggleClass);\r\n }\r\n\r\n toggleAttribute(this.menuIcon, 'aria-expanded');\r\n });\r\n }\r\n\r\n if (this.mobileMemberIcon) {\r\n this.mobileMemberIcon.addEventListener('click', () => {\r\n // uses same menu area & close button,\r\n // but controls the member specific portion\r\n toggleClass(this.menuIcon, this.mobileMembersOpenClass);\r\n toggleClass(this.headerNav, this.mobileMembersOpenClass);\r\n toggleAttribute(this.menuIcon, 'aria-expanded');\r\n });\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * applies style to header if on mobile & scrolled\r\n */\r\n checkForScroll() {\r\n if (window.innerWidth > this.mobileMenuBreakpoint) return;\r\n\r\n if (window.scrollY + this.siteHeaderElement.getBoundingClientRect().top > 10) {\r\n addClass(this.siteHeaderElement, this.scrollClass);\r\n } else {\r\n removeClass(this.siteHeaderElement, this.scrollClass);\r\n }\r\n }\r\n}\r\nexport default Header;\r\n","import {\r\n addClass,\r\n toggleClass,\r\n slideDownTogglableSection,\r\n} from '../../assets/js/utility';\r\n\r\nclass Nav {\r\n constructor() {\r\n this.toggleClass = 'is-open';\r\n this.linksWithDropdown = document.querySelectorAll('.dynamic-nav .has-sublinks');\r\n this.activeLink = document.querySelectorAll('.dynamic-nav .is-active');\r\n\r\n // set dropdown show/hide listener\r\n if (this.linksWithDropdown) {\r\n // for preventing duplicate event triggers\r\n let navActive = false;\r\n let allowArrowDownTrigger = false;\r\n\r\n for (let i = 0; i < this.linksWithDropdown.length; i++) {\r\n let currentNavLink = this.linksWithDropdown[i];\r\n\r\n // mouse events\r\n currentNavLink.addEventListener('mouseenter', (e) => {\r\n if (navActive == false) {\r\n navActive = true;\r\n this.changeOpenState(e, currentNavLink, 'true');\r\n\r\n // in case triggered by an arrow down click\r\n // don't allow trigger from same event\r\n setTimeout(function () {\r\n allowArrowDownTrigger = true;\r\n }, 600);\r\n }\r\n });\r\n\r\n currentNavLink.addEventListener('mouseleave', (e) => {\r\n if (navActive == true) {\r\n navActive = false;\r\n this.changeOpenState(e, currentNavLink);\r\n\r\n // prevent arrow click triggers until next mouseenter\r\n allowArrowDownTrigger = false;\r\n }\r\n });\r\n\r\n // keyboard events\r\n currentNavLink.addEventListener('focusin', (e) => {\r\n // stay open if focusing in submenu\r\n if (currentNavLink.contains(e.relatedTarget) || navActive === true) {\r\n return;\r\n }\r\n\r\n navActive = true;\r\n this.changeOpenState(e, currentNavLink, 'true');\r\n });\r\n\r\n currentNavLink.addEventListener('focusout', (e) => {\r\n // stay open if focusing in submenu\r\n if (currentNavLink.contains(e.relatedTarget) || navActive === false) {\r\n return;\r\n }\r\n\r\n navActive = false;\r\n this.changeOpenState(e, currentNavLink);\r\n });\r\n\r\n // for mobile\r\n let downArrow = currentNavLink.querySelector('.arrow-down');\r\n\r\n if (downArrow) {\r\n downArrow.addEventListener('mousedown', (e) => {\r\n if (allowArrowDownTrigger == true) {\r\n // if not open, tell changeState to open it\r\n let openSubmenu = !currentNavLink.classList.contains(this.toggleClass);\r\n\r\n this.changeOpenState(\r\n e,\r\n currentNavLink,\r\n openSubmenu ? 'true' : 'false'\r\n );\r\n }\r\n });\r\n }\r\n }\r\n }\r\n\r\n // if dropdown item active, indicate on 1st level & dropdown item\r\n if (this.activeLink) {\r\n this.activeLink.forEach((link) => {\r\n let navContainer = link.closest('.dynamic-nav');\r\n let parentItem = link.closest('.has-sublinks');\r\n\r\n if (parentItem && !navContainer.classList.contains('horizontal')) {\r\n addClass(parentItem, this.toggleClass);\r\n parentItem.setAttribute('aria-expanded', true);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Checks if submenu needs to be opened or not & sets the state if so\r\n * @param {Event} e - event trigger for animation\r\n * @param {Node Element} group - nav item (li) element\r\n * @param {string} makeExpanded - aria-expanded value to set\r\n * @param {string} toggleClass - class to toggle on the group element\r\n */\r\n changeOpenState(e, group, makeExpanded = 'false') {\r\n let navContainer = group.closest('.dynamic-nav');\r\n let linkElement = group.querySelector('.nav-link');\r\n let currentState = 'false';\r\n\r\n // is-active in vertical should always be open\r\n let ignoreToggle =\r\n !navContainer.classList.contains('horizontal') &&\r\n group.classList.contains('is-active');\r\n\r\n if (linkElement) {\r\n currentState = linkElement.getAttribute('aria-expanded');\r\n\r\n if (currentState != makeExpanded && !ignoreToggle) {\r\n linkElement.setAttribute('aria-expanded', makeExpanded);\r\n\r\n // can't go outside if-statement cause must happen before class change\r\n slideDownTogglableSection(e, '.has-sublinks', '.submenu');\r\n toggleClass(group, this.toggleClass);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default Nav;\r\n","import {\r\n addClass,\r\n removeClass,\r\n slideDownTogglableSection,\r\n} from '../../assets/js/utility';\r\n\r\nclass PageFeedbackForm {\r\n constructor() {\r\n this.toggleClass = 'is-open';\r\n this.positiveSubmitClass = 'is-submitted';\r\n this.formSubmitClass = 'feedback-success';\r\n this.componentClass = '.simple-page-feedback-form';\r\n this.formAreaClass = '.feedback-form';\r\n this.messageClass = '.positive-submit-message';\r\n\r\n // should be unique on page\r\n this.feedbackform = document.querySelector(this.componentClass);\r\n\r\n if (this.feedbackform) {\r\n this.initPageFeedbackForm();\r\n }\r\n }\r\n\r\n initPageFeedbackForm() {\r\n let positive = this.feedbackform.querySelector('#feedbackPositive');\r\n let negative = this.feedbackform.querySelector('#feedbackNegative');\r\n let formArea = this.feedbackform.querySelector(this.formAreaClass);\r\n let messageContainer = this.feedbackform.querySelector(this.messageClass);\r\n\r\n // if part of the required pieces are missing don't show the component at all\r\n if (!positive || !negative || !formArea || !messageContainer) {\r\n this.feedbackform.style.display = 'none';\r\n this.feedbackform.innerHTML = '';\r\n console.warning('Page feedback form is missing an initialization piece.');\r\n return;\r\n }\r\n\r\n // check if this is a page load after form submit success\r\n if (this.feedbackform.querySelector('.umbraco-forms-submitmessage')) {\r\n // show the set message from component since form workflow unreliable to show\r\n addClass(this.feedbackform, this.formSubmitClass);\r\n addClass(formArea, this.toggleClass);\r\n\r\n // disable the buttons\r\n positive.disabled = true;\r\n negative.disabled = true;\r\n }\r\n\r\n positive.addEventListener('click', (e) => {\r\n // set as submitted and show thank you\r\n addClass(this.feedbackform, this.positiveSubmitClass);\r\n addClass(messageContainer, this.toggleClass);\r\n slideDownTogglableSection(e, this.componentClass, this.messageClass);\r\n\r\n // disable the negative\r\n negative.disabled = true;\r\n\r\n // if negative was clicked before, close form\r\n removeClass(formArea, this.toggleClass);\r\n formArea.style.removeProperty('max-height');\r\n });\r\n\r\n negative.addEventListener('click', (e) => {\r\n // don't show form if user already submitted positive feedback\r\n if (this.feedbackform.classList.contains(this.positiveSubmitClass)) {\r\n return;\r\n }\r\n\r\n // only open once\r\n let isOpen = formArea.classList.contains(this.toggleClass);\r\n\r\n if (!isOpen) {\r\n addClass(formArea, this.toggleClass);\r\n slideDownTogglableSection(e, this.componentClass, this.formAreaClass);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default PageFeedbackForm;\r\n","import { addClass, removeClass } from '../../assets/js/utility';\r\n\r\nclass Pagination {\r\n constructor() {\r\n this.paginationElements = document.querySelectorAll('.dynamic-pagination');\r\n this.breakpoint = 588; // match xs breakpoint in styles\r\n this.extendedClass = 'extended-clip';\r\n\r\n if (!this.paginationElements || this.paginationElements.length <= 0) {\r\n return;\r\n }\r\n\r\n window.addEventListener('resize', () => this.extendNavClipping());\r\n this.extendNavClipping();\r\n }\r\n\r\n /**\r\n * Checks if the window size is small enough the pagination should be\r\n * further clipped so as to not stretch the page\r\n */\r\n extendNavClipping() {\r\n // check if any change needed\r\n if (\r\n (window.innerWidth < this.breakpoint &&\r\n this.paginationElements[0].classList.contains(this.extendedClass)) ||\r\n (window.innerWidth >= this.breakpoint &&\r\n !this.paginationElements[0].classList.contains(this.extendedClass))\r\n ) {\r\n return;\r\n }\r\n\r\n this.paginationElements.forEach((el) => {\r\n if (window.innerWidth < this.breakpoint) {\r\n addClass(el, this.extendedClass);\r\n } else {\r\n removeClass(el, this.extendedClass);\r\n }\r\n });\r\n }\r\n}\r\n\r\nexport default Pagination;\r\n","import { wrapElement, addClass } from '../../assets/js/utility';\r\n\r\nclass ResponsiveTables {\r\n constructor() {\r\n // May want to tweak if any tables are used for non-data purposes in project\r\n this.tablesList = document.querySelectorAll('table');\r\n this.wrapperClass = 'table-wrapper';\r\n this.stackedClass = 'stacked-table';\r\n this.stickyHorizontalClass = 'sticky-left-col';\r\n this.stackedHeaderClass = 'stacked-table-header';\r\n this.cellHeadingClass = 'cell-heading';\r\n\r\n if (this.tablesList && this.tablesList.length > 0) {\r\n this.tablesList.forEach((table) => {\r\n // avoid double wrapping if wrapper already exists\r\n if (table.classList.contains(this.stickyHorizontalClass)) {\r\n if (!table.parentElement.classList.contains(this.wrapperClass)) {\r\n // create & insert the wrapper element\r\n wrapElement(table, document.createElement('div'), this.wrapperClass);\r\n }\r\n\r\n this.setLabelColumn(table);\r\n } else {\r\n // add responsive class for styles if not already there\r\n addClass(table, this.stackedClass);\r\n this.setupStackedTable(table);\r\n }\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Assigns a set width for 1st column to remain visible on horizontal scroll with the wrapper shadow\r\n * properly set at its edge. Based on auto-fit size determined on load, or a hardset width if too big\r\n * @param {Element} el - table element node\r\n * @returns\r\n */\r\n setLabelColumn(el) {\r\n let width = 0;\r\n const largestLabelWidth = 190; // in px, keep small for mobile considerations\r\n const rows = el.querySelectorAll('tr');\r\n\r\n for (let i = 0; i < rows.length; i++) {\r\n const tdFirst = rows[i].querySelector('td'); // first column in row\r\n\r\n if (tdFirst) {\r\n // special case: check if only 2 columns. If so, unset absolute positioning\r\n if (rows[i].cells.length === 2 && tdFirst.getAttribute('colspan') === null) {\r\n for (let c = 0; c < rows.length; c++) {\r\n // unset sticky on all heading & content rows in the table\r\n rows[c].querySelector('th,td').style.position = 'relative';\r\n rows[c].querySelector('th,td').style.backgroundColor = '#fff0'; // adjust as needed for project\r\n }\r\n\r\n return;\r\n }\r\n\r\n // check column isn't spanning to avoid skewing normal columns\r\n if (tdFirst.getAttribute('colspan') == null) {\r\n // set the label column width as is, or cap at declared largest size if too big\r\n width =\r\n tdFirst.clientWidth <= largestLabelWidth\r\n ? tdFirst.clientWidth\r\n : largestLabelWidth;\r\n tdFirst.style.width = `${width + 1}px`; // account for sticky position -1 left\r\n\r\n // set wrapper shadow offset to match width of 1st column\r\n const wrapper = tdFirst.closest('.table-wrapper');\r\n wrapper.style.backgroundPosition = `${width}px center, right center, ${width}px center, right center`;\r\n\r\n return;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Performs setup for table stacking on the given element\r\n * @param {Element} element Table element node\r\n */\r\n setupStackedTable(element) {\r\n // Don't setup the table when it's already been set up\r\n if (element.dataset.initialized == 'true') {\r\n return;\r\n }\r\n element.dataset.initiated = true;\r\n\r\n // Determine what the header should be\r\n // - thead, if applicable\r\n // - first tr of tbody, if no thead\r\n let header = element.querySelector('thead tr');\r\n if (!header) {\r\n header = element.querySelector('tr:first-child');\r\n\r\n // in cases of bad table markup where there is a 'ghost' still around\r\n // that has the table & tbody markup but nothing inside\r\n if (!header) {\r\n return;\r\n }\r\n\r\n addClass(header, this.stackedHeaderClass);\r\n }\r\n\r\n const headingCells = Array.from(header.querySelectorAll('th, td'));\r\n\r\n const rows = Array.from(\r\n element.querySelectorAll(`tbody tr:not(.${this.stackedHeaderClass}), tfoot tr`)\r\n );\r\n\r\n // Create template label elements for headings\r\n const headingLabels = headingCells.map((cell) => {\r\n const newElement = document.createElement('span');\r\n newElement.innerHTML = cell.innerHTML;\r\n newElement.classList.add(this.cellHeadingClass);\r\n\r\n return newElement;\r\n });\r\n\r\n // Apply new headings\r\n for (const row of rows) {\r\n const cells = Array.from(row.querySelectorAll('td, th'));\r\n\r\n for (let i = 0; i < cells.length; i++) {\r\n const heading = headingLabels[i].cloneNode(true);\r\n const cell = cells[i];\r\n\r\n cell.insertAdjacentElement('afterbegin', heading);\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport default ResponsiveTables;\r\n","import {\r\n PAGE_HASH_DATA,\r\n scrollToContainer,\r\n addClass,\r\n removeClass,\r\n slideDownTogglableSection,\r\n} from '../../assets/js/utility';\r\n\r\nclass TabbedContent {\r\n constructor() {\r\n this.activeClass = 'is-active';\r\n this.tabbedContentContainerClass = '.dynamic-tabbed-content';\r\n this.tabListClass = '.dynamic-tablist';\r\n this.tabLists = document.querySelectorAll(\r\n `${this.tabbedContentContainerClass} ${this.tabListClass}`\r\n );\r\n\r\n if (this.tabLists && this.tabLists.length > 0) {\r\n this.InitTabbedContent();\r\n }\r\n }\r\n\r\n /**\r\n * Sets active states on given tab & panel elements that are not\r\n * animated by the slideToggle script\r\n * @param {Node Element} tabElement\r\n * @param {Node Element} panelElement\r\n */\r\n setNonAnimatedTabAndPanel(tabElement, panelElement) {\r\n if (tabElement && panelElement) {\r\n tabElement.setAttribute('aria-selected', 'true');\r\n addClass(tabElement, this.activeClass);\r\n addClass(panelElement, this.activeClass);\r\n\r\n // set height for smooth slide animation if users click on tab\r\n let startHeight = panelElement.scrollHeight + 64; // match adjustment from utility script\r\n panelElement.style.maxHeight = startHeight + 'px';\r\n }\r\n }\r\n\r\n /**\r\n * Sets the provided tab element & its corresponding content panel\r\n * to an active state\r\n * @param {event} e - (optional) if user clicks a tab\r\n * @param {Node Element} tabElement - tab heading element to set active\r\n * calls removeActiveStateOfPrevious\r\n */\r\n setSelectedTab(e = null, tabElement) {\r\n if (!tabElement) {\r\n return;\r\n }\r\n\r\n if (e) {\r\n // tab is clicked\r\n let correspondingContentPanel = document.querySelector(\r\n '#tabContent-' + tabElement.id\r\n );\r\n\r\n tabElement.setAttribute('aria-selected', 'true');\r\n addClass(tabElement, this.activeClass);\r\n addClass(correspondingContentPanel, this.activeClass);\r\n\r\n // open panel\r\n slideDownTogglableSection(\r\n e,\r\n this.tabbedContentContainerClass,\r\n `#tabContent-${tabElement.id}`,\r\n this.activeClass\r\n );\r\n } else {\r\n // # anchor clicked directing to tab,\r\n // won't have event context for panel\r\n let correspondingContentPanel = document.querySelector(\r\n '#tabContent-' + tabElement.id\r\n );\r\n\r\n this.setNonAnimatedTabAndPanel(tabElement, correspondingContentPanel);\r\n }\r\n\r\n // find old active tab & remove active state\r\n this.removeActiveStateOfPrevious(tabElement);\r\n }\r\n\r\n /**\r\n * Called by SetSelectedTab. Removes active state of tab that does not match\r\n * the current tab element it is given\r\n * @param {Node Element} currentTabElement - tab heading element being set active\r\n */\r\n removeActiveStateOfPrevious(currentTabElement) {\r\n let tabList = currentTabElement\r\n ? currentTabElement.closest(`${this.tabListClass}`)\r\n : null;\r\n let containingElement = currentTabElement\r\n ? currentTabElement.closest(this.tabbedContentContainerClass)\r\n : null;\r\n\r\n if (!tabList || !containingElement) {\r\n return;\r\n }\r\n\r\n // check each sibling in the tablist for the previously active tab\r\n Array.from(tabList.children).forEach((tab) => {\r\n let tabId = tab.getAttribute('id');\r\n\r\n if (\r\n tabId != currentTabElement.id &&\r\n tab.classList.contains(this.activeClass)\r\n ) {\r\n // found the previously active tab\r\n let previousContentPanel = containingElement.querySelector(\r\n '#tabContent-' + tabId\r\n );\r\n\r\n tab.setAttribute('aria-selected', 'false');\r\n removeClass(tab, this.activeClass);\r\n\r\n // remove active settings from corresponding content panel\r\n if (previousContentPanel) {\r\n removeClass(previousContentPanel, this.activeClass);\r\n previousContentPanel.style.removeProperty('max-height');\r\n }\r\n }\r\n });\r\n }\r\n\r\n /**\r\n * Calls setSelectedTab & scrollToContainer when a user clicks a tab\r\n * @param {event} e - user clicked on a tab heading\r\n */\r\n onTabClick(e) {\r\n let clickedTab = e.target.closest('.tab-heading'); // in case clicked on svg in button\r\n if (!clickedTab) {\r\n return;\r\n }\r\n\r\n // get content panels from same container\r\n let tabList = clickedTab.closest(`${this.tabListClass}`);\r\n let containingElement = clickedTab.closest(this.tabbedContentContainerClass);\r\n if (!containingElement || !tabList) {\r\n return;\r\n }\r\n\r\n if (containingElement.querySelector('#tabContent-' + clickedTab.id)) {\r\n this.setSelectedTab(e, clickedTab);\r\n }\r\n\r\n scrollToContainer(clickedTab, this.tabbedContentContainerClass);\r\n }\r\n\r\n /**\r\n * @param {string array} jumpToElementIds - ids of all elements to watch for matching anchors\r\n */\r\n watchRelatedAnchors(jumpToElementIds) {\r\n if (PAGE_HASH_DATA.allAnchorHashValues.length <= 0) {\r\n return;\r\n }\r\n\r\n // check if any # links match a tab & add to relevant list\r\n let relevantLinkHashes = [];\r\n\r\n jumpToElementIds.filter((id) => {\r\n if (PAGE_HASH_DATA.allAnchorHashValues.indexOf(`#${id}`) !== -1) {\r\n relevantLinkHashes.push(`#${id}`);\r\n }\r\n });\r\n\r\n // pair down relevant anchor elements for listeners\r\n let relevantAnchorElements = [...PAGE_HASH_DATA.allAnchorHashElements].filter(\r\n (element) => {\r\n if (relevantLinkHashes.indexOf(element.hash) !== -1) {\r\n return element;\r\n }\r\n }\r\n );\r\n\r\n relevantAnchorElements.forEach((anchor) => {\r\n anchor.addEventListener('click', (e) => {\r\n let targetHash = e.target.hash;\r\n let currentElement = document.querySelector(\r\n `${this.tabbedContentContainerClass} ${targetHash}`\r\n );\r\n\r\n e.preventDefault(); // prevent normal snap to element\r\n this.setSelectedTab(null, currentElement);\r\n\r\n // resume normal behavior but with smooth scroll\r\n window.location.hash = targetHash;\r\n scrollToContainer(currentElement, this.tabbedContentContainerClass);\r\n });\r\n });\r\n }\r\n\r\n InitTabbedContent() {\r\n // Begin setting all tab list interactions on page\r\n this.tabLists.forEach((tabbedList) => {\r\n // tab headings\r\n let tabs = tabbedList.querySelectorAll('[role=tab]');\r\n let allTabIds = [...tabs].map(({ id }) => id);\r\n\r\n // get content panels from same container\r\n let containingElement = tabbedList.closest(this.tabbedContentContainerClass);\r\n let tabPanels = containingElement\r\n ? containingElement.querySelectorAll('[role=tabpanel]')\r\n : null;\r\n\r\n if (!tabPanels || tabPanels.length <= 0) {\r\n console.info('No tab panels found');\r\n return;\r\n }\r\n\r\n // default init\r\n let initialTab = tabs[0];\r\n let initialPanel = tabPanels[0];\r\n\r\n // determine if init should be based on url #\r\n if (\r\n PAGE_HASH_DATA.windowHashValue != '' &&\r\n allTabIds.indexOf(PAGE_HASH_DATA.windowHashValue) >= 0\r\n ) {\r\n // found matching tab to direct to\r\n let initIndex = allTabIds.indexOf(PAGE_HASH_DATA.windowHashValue);\r\n\r\n initialTab = tabs[initIndex];\r\n initialPanel = tabPanels[initIndex];\r\n scrollToContainer(initialTab, this.tabbedContentContainerClass);\r\n }\r\n\r\n // Init 1st tab & content on load\r\n this.setNonAnimatedTabAndPanel(initialTab, initialPanel);\r\n\r\n // set listeners\r\n tabs.forEach((tab) =>\r\n tab.addEventListener('click', this.onTabClick.bind(this))\r\n );\r\n\r\n this.watchRelatedAnchors(allTabIds);\r\n });\r\n }\r\n}\r\n\r\nexport default TabbedContent;\r\n","import { addClass, removeClass } from '../../assets/js/utility';\r\n\r\nclass TabList {\r\n constructor() {\r\n this.tabListClass = '.dynamic-tablist';\r\n this.tabLists = document.querySelectorAll(`${this.tabListClass}`);\r\n this.overflowClass = 'is-overflowing';\r\n\r\n if (this.tabLists && this.tabLists.length > 0) {\r\n // check if tablist is overflowing after a window resize\r\n window.addEventListener('resize', () => {\r\n this.tabLists.forEach((list) => {\r\n this.checkOverflow(list);\r\n });\r\n });\r\n\r\n this.tabLists.forEach((tabbedList) => {\r\n // change glider behavior if there's overflow\r\n this.checkOverflow(tabbedList);\r\n });\r\n }\r\n }\r\n\r\n checkOverflow(el) {\r\n let hasOverflow =\r\n el.clientWidth < el.scrollWidth || el.clientWidth > window.innerWidth;\r\n\r\n if (hasOverflow) {\r\n addClass(el, this.overflowClass);\r\n } else {\r\n removeClass(el, this.overflowClass);\r\n }\r\n }\r\n}\r\n\r\nexport default TabList;\r\n"],"names":["PAGE_HASH_DATA","windowHashValue","window","location","hash","replace","allAnchorHashElements","document","querySelectorAll","allAnchorHashValues","this","map","filter","str","scrollToContainer","element","containerClass","VIEWHEIGHT","documentElement","clientHeight","OFFSET","containingElement","closest","elementTop","getBoundingClientRect","top","innerHeight","scrollTo","behavior","body","addClass","el","cssClass","classList","contains","add","removeClass","remove","toggleClass","toggleAttribute","attr","currentValue","getAttribute","setAttribute","slideDownTogglableSection","e","parentContainer","toggleContent","sectionContainer","target","contentContainer","querySelector","startHeight","scrollHeight","transitions","style","transition","maxHeight","requestAnimationFrame","removeProperty","classes","mainClasses","Accordion","constructor","accordionItemClass","accordionHeadings","length","InitAccordionItems","watchRelatedAnchors","allAccordionIds","id","relevantLinkHashes","indexOf","push","forEach","anchor","addEventListener","targetHash","currentElement","preventDefault","heading","accordionItem","ArchiveListing","archiveSection","InitArchiveSection","Content","externalClass","externalLinks","i","link","href","hostnameParts","hostname","split","rootDomain","mailToLinks","mailto","formatted","innerText","spanLayer","innerHTML","linkedImageClass","linkedImages","parentElement","allContentImages","image","imgAltText","Footer","copyrightElement","copy","Date","getFullYear","insertAdjacentHTML","Header","scrollClass","mobileMembersOpenClass","menuLeaveTimer","mobileMenuBreakpoint","siteHeaderElement","headerNav","memberMenuButton","memberMenuArea","memberMenu","mobileMemberIcon","menuIcon","ticking","checkForScroll","relatedTarget","setTimeout","clearTimeout","innerWidth","scrollY","Nav","linksWithDropdown","activeLink","navActive","allowArrowDownTrigger","currentNavLink","changeOpenState","downArrow","openSubmenu","navContainer","parentItem","group","makeExpanded","linkElement","currentState","ignoreToggle","PageFeedbackForm","positiveSubmitClass","formSubmitClass","componentClass","formAreaClass","messageClass","feedbackform","initPageFeedbackForm","positive","negative","formArea","messageContainer","display","console","warning","disabled","Pagination","paginationElements","breakpoint","extendedClass","extendNavClipping","ResponsiveTables","tablesList","wrapperClass","stackedClass","stickyHorizontalClass","stackedHeaderClass","cellHeadingClass","table","wrapper","createElement","parentNode","insertBefore","appendChild","setLabelColumn","setupStackedTable","width","rows","tdFirst","cells","c","position","backgroundColor","clientWidth","backgroundPosition","dataset","initialized","initiated","header","headingCells","Array","from","headingLabels","cell","newElement","row","cloneNode","insertAdjacentElement","TabbedContent","activeClass","tabbedContentContainerClass","tabListClass","tabLists","InitTabbedContent","setNonAnimatedTabAndPanel","tabElement","panelElement","setSelectedTab","correspondingContentPanel","removeActiveStateOfPrevious","currentTabElement","tabList","children","tab","tabId","previousContentPanel","onTabClick","clickedTab","jumpToElementIds","tabbedList","tabs","allTabIds","tabPanels","info","initialTab","initialPanel","initIndex","bind","Tablist","overflowClass","list","checkOverflow","scrollWidth","mainClassesInstances","key","value","Object","entries"],"sourceRoot":""}