GouvernementFR / dsfr

🇫🇷 Official french government's design system (Système de Design de l'État)
https://www.systeme-de-design.gouv.fr/
Other
236 stars 54 forks source link

Gérer les attributs ARIA à plusieurs valeurs #914

Open rubycon opened 5 months ago

rubycon commented 5 months ago

Décrire le bug

Les modules qui s'initialisent en sélectionnant des éléments par leurs attributs ARIA (Disclosure et Tooltip notamment) ne fonctionnent pas si l'attribut comporte plusieurs valeurs.

Les étapes pour reproduire le bug

  1. Créer une modale avec l'id ma-modale.
  2. Créer un élément <div id="mon-element"></div>
  3. Créer un bouton d'activation de modal avec l'attribut aria-controls="ma-modale mon-element"
  4. Essayer de déclencher l'ouverture de la modale avec le bouton

Comportement attendu

La modale devrait s'ouvrir même si son id n'est pas l'unique valeur de l'attribut aria-controls. En effet la majorité des attributs ARIA ciblant des éléments autorisent plusieurs valeurs séparées pas des espaces. Cf. https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Attributes/aria-controls#values

Dans le DSFR c'est également problématique pour les tooltips ciblé par aria-describedby.

Le problème est simple a régler grace au selecteur CSS d'attribut ~= au lieu de =

this.register(`[aria-controls="${this.id}"]`); // match la valeur exact
this.register(`[aria-controls~="${this.id}"]`); // match la valeur dans une liste de valeur séparé par des espaces

Configuration et système utilisé