dsfr4drupal-1.x-dev/js/horizontal-tabs.js

js/horizontal-tabs.js
/**
 * @file
 * Manage horizontal tabs features with DSFR.
 */

((Drupal, once) => {
  "use strict";

  const CLASS_LIST = "fr-tabs__list";
  const CLASS_TAB = "fr-tabs__tab";
  const CLASS_TAB_SELECTED = "fr-tabs__tab--selected";
  const CLASS_TABS = "fr-tabs";

  Drupal.behaviors.dsfrHorizontalTabs = {
    attach: (context) => {

      // Search all horizontal tabs in current context.
      once("dsfr-horizontal-tabs", ".horizontal-tabs", context).forEach((element) => {
        const wrapper = element.querySelector(`.${CLASS_TABS}`);
        const list = element.querySelector(`.horizontal-tabs-list.${CLASS_LIST}`);
        if (!wrapper || !list) {
          return;
        }

        wrapper.append(list);

        list.querySelectorAll("li").forEach((item) => {
          const link = item.querySelector("a");
          link.classList.add(CLASS_TAB);

          if (item.classList.contains("selected")) {
            link.classList.add(CLASS_TAB_SELECTED);
            link.setAttribute("aria-selected", "true");
          }

          link.addEventListener("click", () => {
            // Remove selected class on old active link.
            const selected = list.querySelector(`.${CLASS_TAB_SELECTED}`);
            selected.classList.remove(CLASS_TAB_SELECTED);
            selected.removeAttribute("aria-selected");

            // Add class to new element.
            link.classList.add(CLASS_TAB_SELECTED);
            link.setAttribute("aria-selected", "true");
          })
        });
      });
    }
  };

})(Drupal, once);

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc