Sha256: 81bd374a1d0dd5903a1f586ed16362fb11a47d301c0bce52ad70dc4c0739ba89

Contents?: true

Size: 1.42 KB

Versions: 11

Compression:

Stored size: 1.42 KB

Contents

const ACCORDION_ID = 'accordion';
const TABS_SELECTOR = '.navTabs';

function addHistoryState(target, hashTarget) {
  let url = new URL(window.location);
  let state = {
    page: document.title,
    accordion: target.innerText.trim() // .trim() is needed b/c of the accordion's HTML--each accordion button's text is proceeded by a space
  };
  const title = '';

  url.search = ''; // Remove any searchParams/queries from the URL (e.g. /?id=heading#page)
  url.hash = hashTarget;
  window.history.pushState(state, title, url);
}

function accordionHandler(e) {
  if ( !e.target.matches('.accordion__button') )
    return;
  
  const accordionIsOpening = !Boolean(JSON.parse(e.target.getAttribute('aria-expanded')));

  accordionIsOpening ? addHistoryState(e.target, e.target.dataset.target) : null;
}

function tabHandler(e) {
  let target = e.target;
  let targetHref = target.hash;

  addHistoryState(e.target, targetHref)
}

function watchElementForEvent(el, event, handler) {
  el.addEventListener(event, handler);
}

function addAccordionOrTabHistoryStates() {
  if (document.getElementById('accordion')) {
    const accordion = document.getElementById(ACCORDION_ID);

    watchElementForEvent(accordion, 'click', accordionHandler);
  }
  if (document.querySelector('.navTabs')) {
    const tabs = document.querySelector(TABS_SELECTOR);
  
    watchElementForEvent(tabs, 'click', tabHandler);
  }
}

export default addAccordionOrTabHistoryStates;

Version data entries

11 entries across 11 versions & 1 rubygems

Version Path
kcc-gem-theme-2.11.1 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.11.0 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.10.0 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.9.1 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.9.0 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.8.6 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.8.5 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.8.4 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.8.3 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.8.2 assets/js/alerts/addAccordionOrTabHistoryStates.js
kcc-gem-theme-2.8.1 assets/js/alerts/addAccordionOrTabHistoryStates.js