diff --git a/public/app.js b/public/app.js index d4363cde..6e5749fa 100644 --- a/public/app.js +++ b/public/app.js @@ -412,6 +412,14 @@ function closeNav() { document.body.classList.remove('nav-open'); var btn = document.getElementById('hamburger'); if (btn) btn.setAttribute('aria-expanded', 'false'); + closeMoreMenu(); +} + +function closeMoreMenu() { + var menu = document.getElementById('navMoreMenu'); + var btn = document.getElementById('navMoreBtn'); + if (menu) menu.classList.remove('open'); + if (btn) btn.setAttribute('aria-expanded', 'false'); } function navigate() { @@ -448,6 +456,13 @@ function navigate() { document.querySelectorAll('.nav-link[data-route]').forEach(el => { el.classList.toggle('active', el.dataset.route === basePage); }); + // Update "More" button to show active state if a low-priority page is selected + var moreBtn = document.getElementById('navMoreBtn'); + if (moreBtn) { + var moreMenu = document.getElementById('navMoreMenu'); + var hasActiveMore = moreMenu && moreMenu.querySelector('.nav-link.active'); + moreBtn.classList.toggle('active', !!hasActiveMore); + } if (currentPage && pages[currentPage]?.destroy) { pages[currentPage].destroy(); @@ -551,8 +566,36 @@ window.addEventListener('DOMContentLoaded', () => { navLinks.querySelectorAll('.nav-link').forEach(link => { link.addEventListener('click', closeNav); }); + + // --- "More" dropdown (tablet Priority+ nav) --- + const navMoreBtn = document.getElementById('navMoreBtn'); + const navMoreMenu = document.getElementById('navMoreMenu'); + if (navMoreBtn && navMoreMenu) { + // Build More menu dynamically from non-priority nav links (DRY) + navMoreMenu.innerHTML = ''; + document.querySelectorAll('.nav-links a:not([data-priority="high"])').forEach(function(link) { + var clone = link.cloneNode(true); + clone.setAttribute('role', 'menuitem'); + clone.addEventListener('click', closeMoreMenu); + navMoreMenu.appendChild(clone); + }); + navMoreBtn.addEventListener('click', (e) => { + e.stopPropagation(); + const opening = !navMoreMenu.classList.contains('open'); + navMoreMenu.classList.toggle('open'); + navMoreBtn.setAttribute('aria-expanded', String(opening)); + if (opening) { + var firstLink = navMoreMenu.querySelector('.nav-link'); + if (firstLink) firstLink.focus(); + } + }); + } + document.addEventListener('keydown', (e) => { - if (e.key === 'Escape' && navLinks.classList.contains('open')) closeNav(); + if (e.key === 'Escape') { + if (navMoreMenu && navMoreMenu.classList.contains('open')) closeMoreMenu(); + if (navLinks.classList.contains('open')) closeNav(); + } }); document.addEventListener('click', (e) => { if (navLinks.classList.contains('open') && @@ -560,6 +603,11 @@ window.addEventListener('DOMContentLoaded', () => { !hamburger.contains(e.target)) { closeNav(); } + if (navMoreMenu && navMoreMenu.classList.contains('open') && + !navMoreMenu.contains(e.target) && + !navMoreBtn.contains(e.target)) { + closeMoreMenu(); + } }); // --- Favorites dropdown --- diff --git a/public/index.html b/public/index.html index 12b226b6..ff334314 100644 --- a/public/index.html +++ b/public/index.html @@ -22,9 +22,9 @@ - - - + + + @@ -44,18 +44,22 @@
+