PageSourceSearch

https://www.niortagglo.fr/_assets/249506be7c57be02c4e92856f762f99d/js/a11y-nav-expanded.js?1790681229

js niortagglo.fr collected 2026-10-02 11:16:39 UTC 2,054 bytes, 52 lines download raw bytes

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.