Files
ghostty/dist/doxygen/mobile-nav.js
Mitchell Hashimoto 992e9e2a6e doxygen: mobile styling
2025-10-06 08:25:44 -07:00

66 lines
1.9 KiB
JavaScript

/**
* 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 = '<span></span><span></span><span></span>';
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 = '';
}
});
})();