/** * Mobile navigation toggle for Doxygen documentation */ (function () { // Only run on mobile devices function isMobile() { return window.innerWidth <= 767; } function initMobileNav() { if (!isMobile()) return; const pageNav = document.getElementById("page-nav"); if (!pageNav) return; // Create toggle button const toggleBtn = document.createElement("button"); toggleBtn.id = "page-nav-toggle"; toggleBtn.setAttribute("aria-label", "Toggle page navigation"); toggleBtn.innerHTML = ""; document.body.appendChild(toggleBtn); // Create backdrop const backdrop = document.createElement("div"); backdrop.id = "page-nav-backdrop"; document.body.appendChild(backdrop); // Toggle function function toggleNav() { const isOpen = pageNav.classList.toggle("mobile-open"); backdrop.classList.toggle("active", isOpen); document.body.style.overflow = isOpen ? "hidden" : ""; } // Event listeners toggleBtn.addEventListener("click", toggleNav); backdrop.addEventListener("click", toggleNav); // Close on escape key document.addEventListener("keydown", function (e) { if (e.key === "Escape" && pageNav.classList.contains("mobile-open")) { toggleNav(); } }); } // Initialize on load and resize if (document.readyState === "loading") { document.addEventListener("DOMContentLoaded", initMobileNav); } else { initMobileNav(); } window.addEventListener("resize", function () { const pageNav = document.getElementById("page-nav"); const backdrop = document.getElementById("page-nav-backdrop"); if (!isMobile() && pageNav) { pageNav.classList.remove("mobile-open"); if (backdrop) backdrop.classList.remove("active"); document.body.style.overflow = ""; } }); })();