dxpr_theme-5.0.1/js/dist/multilevel-mobile-nav/initialization.js

js/dist/multilevel-mobile-nav/initialization.js
/**
 * Initialization module for MLMenu.
 * Handles setting up menus, back button, breadcrumbs, and binding events.
 */

/**
 * Binds events to menu items and back button.
 * @param {Object} context - The MLMenu instance.
 */
function initEvents(context) {
  context.menusArr.forEach((menu) => {
    menu.menuItems.forEach((item, pos) => {
      if (item.querySelector("a")) {
        item.querySelector("a").addEventListener("click", (ev) => {
          const submenu = ev.target.getAttribute("data-submenu");
          const itemName = ev.target.innerHTML;
          const subMenuEl = context.el.querySelector(
            `ul[data-menu="${submenu}"]`,
          );

          // Check if there's a sub menu for this item
          if (submenu && subMenuEl) {
            ev.preventDefault();
            // Open it
            context._openSubMenu(subMenuEl, pos, itemName);
          } else {
            // Add class current
            const currentlink = context.el.querySelector(
              ".menu__link--current",
            );
            if (currentlink) {
              context.el
                .querySelector(".menu__link--current")
                .classList.remove("menu__link--current");
            }
            ev.target.classList.add("menu__link--current");

            // Callback
            context.options.onItemClick(ev, itemName);
          }
        });
      }
    });
  });

  // Back navigation
  if (context.options.backCtrl) {
    context.backCtrl.addEventListener("click", () => {
      context._back();
    });
  }
}

/**
 * Initializes the menu structure, back button, and breadcrumbs.
 * @param {Object} context - The MLMenu instance.
 */
function init(context) {
  context.menusArr = [];
  context.menus.forEach((menuEl, pos) => {
    const menu = { menuEl, menuItems: [].slice.call(menuEl.children) };
    context.menusArr.push(menu);

    // Set current menu class
    if (pos === context.current) {
      menuEl.classList.add("menu__level--current");
    }
  });

  // Create back button
  if (context.options.backCtrl) {
    context.backCtrl = document.createElement("button");
    context.backCtrl.className = "menu__back menu__back--hidden";
    context.backCtrl.setAttribute("aria-label", "Go back");
    context.backCtrl.innerHTML = '<span class="icon icon--arrow-left"></span>';
    context.el.insertBefore(context.backCtrl, context.el.firstChild);
  }

  // Create breadcrumbs
  if (context.options.breadcrumbsCtrl) {
    context.breadcrumbsCtrl = document.createElement("nav");
    context.breadcrumbsCtrl.className = "menu__breadcrumbs";
    context.el.insertBefore(context.breadcrumbsCtrl, context.el.firstChild);
    // Add initial breadcrumb
    context._addBreadcrumb(0);
  }

  // Bind events
  initEvents(context);
}

module.exports = { init, initEvents };

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

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