diff options
| author | Danilo M. <danix@danix.xyz> | 2026-04-15 17:30:01 +0200 |
|---|---|---|
| committer | Danilo M. <danix@danix.xyz> | 2026-04-15 17:30:01 +0200 |
| commit | f14342001ef1fb15e697ea2c23e3cc91b3c21683 (patch) | |
| tree | 562790cf590adeb129f971b9e86a3666350d5590 /themes/danix-xyz-hacker/assets/js/menu.js | |
| parent | 7c8971eb481cea544987d4b9ddcb8064d9087766 (diff) | |
| download | danixxyz-f14342001ef1fb15e697ea2c23e3cc91b3c21683.tar.gz danixxyz-f14342001ef1fb15e697ea2c23e3cc91b3c21683.zip | |
Remove Alpine.js dependency from menu toggle, use vanilla JavaScript
- Replace Alpine.js directives (@click, x-ref) with vanilla JS
- Update hamburger-menu.html to use id selectors instead of x-ref
- Rewrite menu.js to work without Alpine.js
- Menu now opens/closes on click with proper event handling
- Language toggle now accessible in hamburger menu
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Diffstat (limited to 'themes/danix-xyz-hacker/assets/js/menu.js')
| -rw-r--r-- | themes/danix-xyz-hacker/assets/js/menu.js | 39 |
1 files changed, 20 insertions, 19 deletions
diff --git a/themes/danix-xyz-hacker/assets/js/menu.js b/themes/danix-xyz-hacker/assets/js/menu.js index 257736b..f61e60b 100644 --- a/themes/danix-xyz-hacker/assets/js/menu.js +++ b/themes/danix-xyz-hacker/assets/js/menu.js @@ -1,51 +1,52 @@ document.addEventListener('DOMContentLoaded', () => { - // Get the menu toggle button and overlay const menuToggle = document.getElementById('menu-toggle'); const menuOverlay = document.getElementById('menu-overlay'); + const menuPanel = document.getElementById('menu-panel'); - /** - * Toggle menu visibility and state - */ function toggleMenu() { - const overlay = document.getElementById('menu-overlay'); - const menuPanel = document.querySelector('[x-ref="menuPanel"]'); - - if (!overlay || !menuPanel) return; + if (!menuOverlay || !menuPanel) return; // Toggle overlay visibility classes - overlay.classList.toggle('opacity-0'); - overlay.classList.toggle('invisible'); + menuOverlay.classList.toggle('opacity-0'); + menuOverlay.classList.toggle('invisible'); // Toggle menu panel translation menuPanel.classList.toggle('translate-x-full'); // Control body overflow - const isMenuOpen = !overlay.classList.contains('opacity-0'); + const isMenuOpen = !menuOverlay.classList.contains('opacity-0'); document.body.style.overflow = isMenuOpen ? 'hidden' : ''; } + function closeMenu() { + if (!menuOverlay || menuOverlay.classList.contains('opacity-0')) return; + toggleMenu(); + } + // Toggle menu when clicking the hamburger button if (menuToggle) { menuToggle.addEventListener('click', toggleMenu); } - // Close menu when clicking on the overlay (but not the panel itself) + // Close menu when clicking on the overlay if (menuOverlay) { menuOverlay.addEventListener('click', (e) => { - // Only close if clicking the overlay itself, not the menu panel if (e.target === menuOverlay) { - toggleMenu(); + closeMenu(); } }); } + // Close menu when clicking menu items + const menuLinks = document.querySelectorAll('#menu-panel a, #menu-panel button'); + menuLinks.forEach(link => { + link.addEventListener('click', closeMenu); + }); + // Close menu on Escape key document.addEventListener('keydown', (e) => { - if (e.key === 'Escape') { - const overlay = document.getElementById('menu-overlay'); - if (overlay && !overlay.classList.contains('opacity-0')) { - toggleMenu(); - } + if (e.key === 'Escape' && menuOverlay && !menuOverlay.classList.contains('opacity-0')) { + closeMenu(); } }); }); |
