1/** 2 * RGAA 7.1 & 10.8 / WCAG 4.1.2 â Restitution de l'état du menu principal. 3 * 4 * Le composant "Megamenu" (bundles *.bundle.js) configure son dropdown avec 5 * `ignoreAttrs: true` sur le bouton d'ouverture et le bouton de fermeture, 6 * et sans overlay : la liste `controls` du composant est vide, et la branche 7 * de open()/close() qui met à jour les attributs ARIA 8 * (`s && this.controls.length && setAriaControls(...)`) n'est jamais 9 * exécutée. Conséquences quand le panneau .js-main-nav-block s'ouvre : 10 * - aria-expanded reste à "false" sur #main-nav-toggle (RGAA 7.1) ; 11 * - aria-hidden reste à "true" (posé à l'init par initAriaControls) et 12 * l'attribut hidden n'est jamais retiré, alors que le focus clavier 13 * entre dans le panneau : toute la navigation principale est muette 14 * pour les lecteurs d'écran (RGAA 10.8, WCAG 4.1.2). 15 * 16 * à l'ouverture, le script du menu ajoute la classe `mnv-opened` sur <body>. 17 * On observe donc la classe de <body> et on reflète l'état ouvert/fermé sur 18 * les attributs concernés. à la fermeture, on remet seulement 19 * aria-hidden="true" : le bundle repose lui-même l'attribut hidden en fin 20 * de transition (transitionEndHandler). On ne touche ni à aria-controls 21 * ni à aria-haspopup (déjà corrects dans le gabarit). 22 */ 23(function () { 24 'use strict'; 25 26 var btn = document.getElementById('main-nav-toggle'); 27 var panel = document.querySelector('.js-main-nav-block'); 28 if ((!btn && !panel) || typeof MutationObserver === 'undefined') { 29 return; 30 } 31 32 function sync() { 33 var opened = document.body.classList.contains('mnv-opened'); 34 if (btn) { 35 btn.setAttribute('aria-expanded', opened ? 'true' : 'false'); 36 } 37 if (panel) { 38 panel.setAttribute('aria-hidden', opened ? 'false' : 'true'); 39 if (opened) { 40 panel.removeAttribute('hidden'); 41 } 42 } 43 } 44 45 new MutationObserver(sync).observe(document.body, { 46 attributes: true, 47 attributeFilter: ['class'] 48 }); 49 50 // Aligne l'état initial au cas où le menu serait déjà ouvert au chargement. 51 sync(); 52})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.