PageSourceSearch

https://www.insp.gouv.fr/profiles/custom/design_system_profile/themes/design_system/js/rgaa-patchs.js?v=11.4.6

js insp.gouv.fr collected 2026-09-24 18:12:21 UTC 3,204 bytes, 96 lines download raw bytes

1(function ($, Drupal, drupalSettings, once) {
2
3  'use strict';
4
5  /**
6   * Fix aria LabelledBy sur le menu mobile uniquement
7   */
8  Drupal.behaviors.dsLabelByMenuMobile = {
9    attach: function (context) {
10      const labelBy = document.querySelector('#header-navigation').getAttribute('aria-labelledby');
11
12      function reportWindowSize() {
13        if (window.screen.width < 992) {
14          document.querySelector('#header-navigation').setAttribute('aria-labelledby', labelBy);
15        } else {
16          document.querySelector('#header-navigation').removeAttribute('aria-labelledby');
17        }
18      }
19
20      window.onload = reportWindowSize;
21      window.onresize = reportWindowSize;
22    }
23  };
24
25  /**
26   * ajoute title/aria-label "Retirer le fichier XXX" sur les boutons "Retirer".
27   */
28  Drupal.behaviors.WebformRemoveButtonTitle = {
29    attach: function (context) {
30      $('input[type="submit"][data-drupal-selector$="-remove-button"]', context).each(function () {
31        const $btn = $(this);
32        const name = $btn.closest('.form-managed-file').find('.file a').text().trim();
33        const label = name ? `Retirer le fichier ${name}` : 'Retirer le fichier';
34        $btn.attr({ title: label });
35      });
36    }
37  };
38
39  /**
40   *  Suppression role contentinfo sur les messages d'erreurs
41   */
42  Drupal.behaviors.dsRemoveContentinfo = {
43    attach: function (context) {
44      // Cibler uniquement les messages d'erreur avec role="contentinfo"
45      once('remove-role-contentinfo', '.messages.messages--error', context).forEach(function (el) {
46        if (el.getAttribute('role') === 'contentinfo') {
47          el.removeAttribute('role');
48        }
49      });
50    }
51  };
52
53  /**
54 * Ajout de tabindex="-1" et focus sur le message de statut après envoi du formulaire.
55 */
56  Drupal.behaviors.dsWebformFocus = {
57    attach: function (context) {
58      once('wf-a11y', '.messages--status, [data-drupal-messages]', context).forEach((msg) => {
59        msg.setAttribute('tabindex', '-1');
60        requestAnimationFrame(() => { msg.focus() });
61      });
62    }
63  };
64
65  /**
66   * Met le focus sur le bouton "Menu principal" quand la modale "Paramètres d’affichage" se ferme.
67   */
68  Drupal.behaviors.dsFocusBackToMenu = {
69    attach() {
70      const modal = document.getElementById('fr-theme-modal');
71      if (!modal || modal.dataset.a11yInit) return;
72      modal.dataset.a11yInit = '1';
73
74      const menuBtn =
75        document.querySelector('[data-fr-js-modal-button][aria-controls="header-navigation"]') ||
76        document.querySelector('.fr-header__navbar .fr-btn--menu') ||
77        document.querySelector('.fr-btn--menu');
78      if (!menuBtn) return;
79
80      const focusMenu = () => setTimeout(() => menuBtn.focus({ preventScroll: true }), 50);
81
82      modal.addEventListener('click', (e) => {
83        if (e.target.closest('.fr-btn--close')) focusMenu();
84      });
85
86      modal.addEventListener('close', focusMenu);
87      modal.addEventListener('dsfr.modal.close', focusMenu);
88      document.addEventListener('keydown', (e) => {
89        if ((e.key === 'Escape') && modal.hasAttribute('open')) {
90          focusMenu();
91        }
92      }, true);
93    }
94  };
95
96})(jQuery, Drupal, drupalSettings, once);

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.