/** * navigation.js — Menu de navigation mobile * ============================================================================= * Gère l'ouverture et la fermeture du panneau de navigation sous le point de * rupture mobile. * * Principe d'amélioration progressive : sans JavaScript, le menu reste une * liste de liens visible et fonctionnelle (le CSS ne la masque que si le * bouton, lui-même conditionné à ce script, est présent et actif). * * Accessibilité couverte : * - aria-expanded reflète l'état réel du panneau * - aria-controls relie le bouton au panneau qu'il commande * - la touche Échap ferme le menu et rend le focus au bouton * - le focus est piégé dans le panneau tant qu'il est ouvert * - le défilement de la page est bloqué pendant l'ouverture */ /** Point de rupture, aligné sur celui de layout.css. */ const MOBILE_QUERY = "(width <= 46rem)"; /** Sélecteur des éléments pouvant recevoir le focus clavier. */ const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), ' + 'select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])'; /** * Initialise le menu mobile. * * @param {object} options * @param {HTMLElement} options.toggle - Bouton d'ouverture/fermeture. * @param {HTMLElement} options.nav - Conteneur