content/frontend/navigation/global_nav.js (36 lines of code) (raw):

/** * Toggles the navigation on small screens. */ const toggleSidebar = () => { const mediaQuery = window.matchMedia('(max-width: 1199px)'); const navWrapper = document.querySelector('.nav-wrapper'); const main = document.querySelector('.main'); if (mediaQuery.matches) { navWrapper.classList.remove('active'); main.classList.remove('active'); return; } navWrapper.classList.add('active'); main.classList.add('active'); }; /* * Expands the menu tree for the selected menu item */ const expand = (menu, activeMenuItem) => { if (!menu) return; const collapseToggle = menu.previousElementSibling.querySelector('.collapse-toggle'); menu.previousElementSibling.classList.add('active'); menu.classList.add('show'); if (collapseToggle) { collapseToggle.classList.remove('collapsed'); collapseToggle.setAttribute('aria-expanded', true); } if (menu.parentElement.classList.contains('collapse')) { // This will traverse up until all parents are expanded expand(menu.parentElement, activeMenuItem); } else if (menu.parentElement.classList.contains('global-nav-section')) { menu.parentElement.classList.add('expanded'); } activeMenuItem.scrollIntoView({ block: 'center' }); }; document.addEventListener('DOMContentLoaded', () => { toggleSidebar(); // The menu is initially hidden, but once the toggle is initalized, we can show it. document.querySelector('.nav-wrapper').classList.remove('gl-display-none!'); const menu = document.getElementById('global-nav'); const activeMenuItem = menu.querySelector('.nav-link .active'); const collapsedMenu = activeMenuItem ? activeMenuItem.closest('.collapse') : null; expand(collapsedMenu, activeMenuItem); });