summaryrefslogtreecommitdiffstats
path: root/themes/danix-xyz-hacker/assets
diff options
context:
space:
mode:
authorDanilo M. <danix@danix.xyz>2026-04-15 17:30:01 +0200
committerDanilo M. <danix@danix.xyz>2026-04-15 17:30:01 +0200
commitf14342001ef1fb15e697ea2c23e3cc91b3c21683 (patch)
tree562790cf590adeb129f971b9e86a3666350d5590 /themes/danix-xyz-hacker/assets
parent7c8971eb481cea544987d4b9ddcb8064d9087766 (diff)
downloaddanixxyz-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')
-rw-r--r--themes/danix-xyz-hacker/assets/js/menu.js39
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();
}
});
});