/* themes/custom/reha/assets/js/menu-burger-auto.js */ (function (Drupal) { console.log("helloBurger"); Drupal.behaviors.rehaAutoBurger = { attach: function (context) { const root = context.querySelector('#block-reha-navigationprincipale'); if (!root) return; const menu = root.querySelector('#main-nav'); if (!menu) return; // Éviter le double-init if (root.dataset.burgerInit === '1') return; root.dataset.burgerInit = '1'; // Crée le bouton const btn = document.createElement('button'); btn.type = 'button'; btn.className = 'rb-toggle'; btn.setAttribute('aria-expanded', 'false'); btn.setAttribute('aria-controls', 'main-nav'); btn.innerHTML = ` Ouvrir le menu `; // Insère le bouton avant la liste menu.parentNode.insertBefore(btn, menu); // Marque le menu comme repliable menu.classList.add('rb-list'); // Masqué par défaut en mobile (le CSS gère desktop) menu.hidden = true; // Helpers function openMenu() { btn.setAttribute('aria-expanded', 'true'); btn.classList.add('is-active'); menu.hidden = false; const first = menu.querySelector('a'); if (first) first.focus(); } function closeMenu() { btn.setAttribute('aria-expanded', 'false'); btn.classList.remove('is-active'); menu.hidden = true; btn.focus(); } function toggleMenu() { (btn.getAttribute('aria-expanded') === 'true') ? closeMenu() : openMenu(); } // Événements btn.addEventListener('click', toggleMenu); document.addEventListener('keydown', (e) => { if (e.key === 'Escape' && btn.getAttribute('aria-expanded') === 'true') closeMenu(); }); document.addEventListener('click', (e) => { if (btn.getAttribute('aria-expanded') !== 'true') return; if (!root.contains(e.target)) closeMenu(); }); // Responsif : desktop >= 768px => menu toujours visible const mql = window.matchMedia('(min-width: 768px)'); function handleMQ(e) { if (e.matches) { // Desktop menu.hidden = false; btn.setAttribute('aria-expanded', 'false'); btn.classList.remove('is-active'); } else { // Mobile if (btn.getAttribute('aria-expanded') !== 'true') menu.hidden = true; } } if (mql.addEventListener) mql.addEventListener('change', handleMQ); else mql.addListener(handleMQ); handleMQ(mql); } }; })(Drupal);