dxpr_theme-5.0.1/js/dist/header/menu-desktop.js

js/dist/header/menu-desktop.js
/**
 * Setup for Desktop Menu.
 */
function setupDesktopMenu() {
  const elementNavMobileOpen = document.querySelector(
    ".html--dxpr-theme-nav-mobile--open",
  );
  elementNavMobileOpen?.classList.remove("html--dxpr-theme-nav-mobile--open");

  const elementHeaderSide = document.querySelector(".dxpr-theme-header--side");
  if (elementHeaderSide) {
    elementHeaderSide.classList.add("dxpr-theme-header--top");
    elementHeaderSide.classList.remove("dxpr-theme-header--side");
  }

  const menuBreadcrumbs = document.querySelector(
    "#dxpr-theme-main-menu .menu__breadcrumbs",
  );
  menuBreadcrumbs?.remove();

  const elementMenuLevel = document.querySelector(".menu__level");

  elementMenuLevel?.classList.remove("menu__level");
  elementMenuLevel?.style.setProperty("top", "100%");
  elementMenuLevel?.style.setProperty("marginTop", "0");
  elementMenuLevel?.style.setProperty("height", "auto");

  const elementMenuItem = document.querySelector(".menu__item");
  if (elementMenuItem) {
    elementMenuItem.classList.remove("menu__item");
  }

  // Remove data attributes for desktop
  document
    .querySelectorAll("[data-submenu]")
    .forEach((el) => el.removeAttribute("data-submenu"));
  document
    .querySelectorAll("[data-menu]")
    .forEach((el) => el.removeAttribute("data-menu"));

  const bodyWidth = document.body.clientWidth;
  const margin = 10;

  document
    .querySelectorAll("#dxpr-theme-main-menu .menu .dropdown-menu")
    .forEach((dropdownElement) => {
      dropdownElement.parentElement.addEventListener(
        "mouseenter",
        () => {
          const width = dropdownElement.offsetWidth;

          const headings = dropdownElement.querySelectorAll(
            ".dxpr-theme-megamenu__heading",
          );

          let columns;
          if (headings.length > 0) {
            columns = headings.length;
          } else {
            columns =
              Math.floor(dropdownElement.querySelectorAll("li").length / 8) + 1;
          }

          if (columns > 2) {
            dropdownElement.style.width = "100%";
            dropdownElement.style.left = "0";
            dropdownElement.parentElement.style.position = "static";
            dropdownElement
              .querySelectorAll(".dropdown-menu > li")
              .forEach((li) => {
                li.style.width = `${100 / columns}%`;
              });
          } else {
            if (columns > 1) {
              dropdownElement.style.minWidth = `${width * columns + 2}px`;
              dropdownElement.querySelectorAll(":scope > li").forEach((li) => {
                li.style.width = `${width}px`;
              });
            }

            const topLevelItem = dropdownElement.parentElement;
            setTimeout(() => {
              const delta = Math.round(
                bodyWidth -
                  topLevelItem.offsetLeft -
                  dropdownElement.offsetWidth -
                  margin,
              );
              if (delta < 0) {
                dropdownElement.style.left = `${delta}px`;
              }
            }, 0);
          }
        },
        { once: true },
      );
    });
}

module.exports = { setupDesktopMenu };

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

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