function menu()

in packages/core/js/menu.js [8:82]


function menu($elements) {
  $elements.forEach(($menu) => {
    $menu.addEventListener('click', (event) => {
      let $listItem = event.target;
      while ($listItem) {
        if ($listItem.classList.contains('menu')) {
          return;
        }

        if ($listItem.classList.contains('menu__list-item')) {
          break;
        }
        $listItem = $listItem.parentNode;
      }

      // Not clicking on a list item.
      if (!$listItem) {
        return;
      }

      const regularSubList =
        $listItem.classList.contains('menu__list-item') &&
        !$listItem.querySelector('.menu__list-item-collapsible');
      const caretBtn = event.target.classList.contains('menu__caret');

      if (regularSubList || caretBtn) {
        $listItem.classList.toggle('menu__list-item--collapsed');
      }

      // Don't add any active class if non-leaf item selected.
      if ($listItem.querySelector('.menu__list')) {
        return;
      }

      $menu
        .querySelectorAll('.menu__link')
        .forEach(($elItem) => $elItem.classList.remove('menu__link--active'));

      // Traverse parents and add active class.
      while ($listItem) {
        if ($listItem.classList.contains('menu')) {
          return;
        }

        if ($listItem.classList.contains('menu__list-item')) {
          const $link = $listItem.querySelector('.menu__link');
          if ($link) {
            $link.classList.add('menu__link--active');
          }

          const $listItemCollapsible = $listItem.querySelector(
            '.menu__list-item-collapsible',
          );
          if ($listItemCollapsible) {
            $listItemCollapsible.classList.add(
              'menu__list-item-collapsible--active',
            );
          }
        }

        $listItem = $listItem.parentNode;
      }
    });

    $navbarSidebarBackButton = document.querySelector('.navbar-sidebar__back');
    $navbarSidebarItems = document.querySelector('.navbar-sidebar__items');
    if ($navbarSidebarBackButton) {
      $navbarSidebarBackButton.addEventListener('click', () => {
        $navbarSidebarItems.classList.remove(
          'navbar-sidebar__items--show-secondary',
        );
      });
    }
  });
}