Ressource RGAA Bibliothèque de référence - Implémentation des composants ARIA
Présentation
Cette bibliothèque présente les implémentations des composants ARIA telles qu'ils sont définis par les motifs de conception.
Elle permet d'établir les restitutions par défaut obtenues avec les technologies d'assistance définies par la base de référence.
Cette bibliothèque est destinée à servir de référence pour les tests de restitution demandés par le test 7.6 du critère 7.1 du référentiel RGAA. Elle n'est pas destinée à être utilisée en production.
Note 1 : certains enrichissements, nécessaires à une restitution correcte, sont décrits pour chaque composant. Ces enrichissements ne sont pas demandés par les motifs de conception ARIA car ils sont contextuels à la nature et l'utilisation du composant ou de ses contenus.
Note 2 : les interactions au clavier sont limitées à celles requises par le référentiel.
Aide
Les sections de test sont toujours présentées de la même manière :
(Titre 2) : le nom du rôle correspondant au composant et une ancre d'accès direct à la zone de test ;
une liste de navigation (composant précédent, accès au menu, composant suivant) ;
une brève description du composant ;
(Titre 3) : implémentation : description succinte de l'implémentation et enrichissements éventuels ;
(Titre 3) : test : la zone de test et les instructions de test ;
(Titre 3) : référence : un lien vers la référence utilisée pour l'implémentation.
Barre de progression pouvant être utilisée comme indication de téléchargement ou de mise à jour.
Implémentation
Un bouton permet de mettre à jour une zone d'actualités. Durant le temps nécessaire à la mise à jour, une barre de progression est affichée et décompte la mise à jour.
Enrichissement
À la fin de la mise à jour, le focus est donné sur la zone qui vient d'être mise à jour.
Test
Instructions
Cliquer sur le bouton ci-dessous pour lancer la mise à jour
Actualités
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus euismod purus ac enim malesuada, eu lacinia tellus ullamcorper. Proin pulvinar bibendum lacus, sed consectetur sapien interdum in. In id sem at erat imperdiet elementum vitae imperdiet dui. Nullam mattis ultricies justo non pellentesque. Sed mollis urna vitae leo semper, nec fermentum tellus imperdiet. Phasellus eget vehicula sapien. Nulla convallis, mauris a sodales placerat, nisl nulla aliquet nisi, sit amet faucibus orci ante a elit. Integer vel gravida elit, a aliquet purus. Mauris sed lectus purus. Pellentesque efficitur magna non dolor consequat mattis.
En cours de mise à jour
Progressbar - Tests fonctionnels AT
NVDA - Firefox 37.02 - Win 8
JAWS 15 - IE11 - Win 8
VoiceOver - Safari - OsX
OK
OK
OK
progressbar - Principaux éléments de restitution AT
NVDA - Firefox 37.02 - Win 8
JAWS 15 - IE11 - Win 8
VoiceOver - Safari - OsX
Activation
NVDA annonce « bouton mettre à jour les actualités ».
Jaws annonce « bouton mettre à jour les actualités »
VoiceOver indique « mettre à jour les actualités » bouton.
Progression en cours.
NVDA annonce la progression en % ou via un signal sonore en fonction des paramètres utilisateurs.
Jaws annonce « barre de progression » et la progression en pourcentage.
VoiceOver annonce la progression sous la forme d'un signal sonore.
Fin de la mise à jour.
NVDA annonce le titre de la zone mise à jour.
Jaws annonce le titre de la zone mise à jour.
VoiceOver annonce le titre de la zone mise à jour.
NVDA annonce « formulaire de connexion, dialogue », le focus est donné sur le champ de saisie « utilisateur ».
Jaws annonce « formulaire de connexion, boîte de dialogue », le focus est donné sur le champ de saisie « utilisateur ».
VoiceOver annonce « formulaire de connexion, dialogue », le focus est donné sur le champ de saisie « utilisateur ».
Tabulation dans les éléments de la fenêtre.
Les éléments sont tabulables.
Les éléments sont tabulables.
Les éléments sont tabulables.
Fermeture de la fenêtre (ESC ou bouton fermer).
NVDA annonce « bouton ouvrir la fenêtre de dialogue, dialog ».
Jaws annonce « bouton ouvrir la fenêtre de dialogue, dialog »
VoiceOver annonce « ouvrir la fenêtre de dialogue, dialog, bouton ».
Note : un enrichissement, via la propriété aria-describedby est implémenté pour vocaliser le message d'aide à l'ouverture de la fenêtre. Le message d'aide est correctement vocalisé par JAWS et NVDA mais ne semble pas vocalisé par VoiceOver
Système d'onglets destiné à diffuser des contenus sous la forme de panneaux successifs contrôlés par des onglets
Implémentation
Le composant propose trois panneaux contenant successivement un titre et du contenu textuel, du contenu textuel, du contenu textuel et des liens.
Enrichissements
Le contenu du panneau 1 utilise une propriété tabindex="0" nécessaire pour donner accès, via la tabulation, au contenu du panneau.
Le titre (onglet) du panneau 2 utilise une propriété aria-describedby permettant de vocaliser le contenu automatiquement lorsque le panneau est affiché.
Test
Instructions
Tabuler jusqu'à obtenir le focus sur l'onglet actif.
À partir de l'onglet, tabuler pour atteindre la zone de contenu du panneau.
À partir du contenu du panneau, tabuler en arrière pour reprendre le focus sur l'onglet du panneau.
À partir d'un onglet, utiliser les flèches de direction pour vous déplacer d'onglet en onglet.
Le test de tabulation dans le contenu d'un panneau peut être réalisé sur le panneau de l'onglet 3.
Panneau 1
Panneau 2
Panneau 3
Contenu du panneau 1
Lorsqu'un panneau ne contient que du texte, le contenu n'est pas vocalisé. Une première adaptation consiste à implémenter un tabindex=0 sur le contenu ou sur le premier élément du contenu. Cela permet aux utilisateurs de lecteurs d'écran d'accéder au contenu du panneau via la touche TAB, ce qui déclenchera la vocalisation du contenu.
Lorsque le panneau ne contient qu'un message, destiné à être lu et qui ne nécessite pas de donner accès au panneau de contenu, une propriété aria-describedby="id_contenu" implémentée sur l'élément tab peut être suffisante.
Lorsque le panneau ne contient que des contenus focusables ou un mélange de contenus focusables et non-focusables, la propriété tabindex="0" sur le contenu du panneau est inutile. La touche TAB prenant le focus sur le premier élément focusable donnera ensuite aux utilisateurs de lecteurs d'écran la possibilité de naviguer normalement dans le contenu du panneau.
VoiceOver annonce « Panneau [x], tabulation [x] sur [total] ».
Activation du contenu d'un panneau.
NVDA annonce « Panneau [x], fenêtre développée », le contenu du panneau est lu, l'élément ayant pris le focus est lu.
Jaws annonce « Panneau [x] », le contenu est lu avec flèche bas.
VoiceOver avec la tabulation annonce l'élément ayant le focus. Avec les touches de déplacement, lorsque le focus est donné sur le panneau, VoiceOver annonce « Panneau [x] avec [x] éléments, tableau d'onglet ».
Lecture du contenu d'un panneau à la sélection de l'onglet (panneau 2).
NVDA : le contenu est lu.
Jaws : le contenu est lu.
VoiceOver : le contenu est lu .
Depuis le contenu d'un panneau, retour avec la tabulation sur l'onglet corrspondant.
Une case à cocher, équivalent à l'élément HTML input type="checkbox"
Test
Instructions
Tabuler sur le premier groupe de cases à cocher.
Tabuler sur la case à cocher isolée.
Choisir la couleur
Noir
Rouge
blanc
Exemple de case à cocher isolée
Acceptez les conditions d'utilisation
Checkbox - Tests fonctionnels AT
NVDA - Firefox 37.02 - Windows 8
JAWS 15 - IE11 - Windows 8
VoiceOver - Safari - OsX
OK
OK
OK
checkbox - Principaux éléments de restitution AT
NVDA - Firefox 37.02 - Win 8
JAWS 15 - IE11 - Win 8
VoiceOver - Safari - OsX
Activation d'un groupe de cases à cocher
NVDA annonce « Liste de 3 éléments, noir, choisir la couleur Noir, case à cocher, non cochée ».
Jaws annonce « case à cocher choisir la couleur noir non coché ».
VoiceOver annonce « Choisir la couleur avec trois éléments ». En se déplaçant, VoiceOver annonce « Choisir la couleur, noir, non coché, case à cocher ».
Activation et désactivation d'une case à cocher (dans un groupe ou isolée).
NVDA annonce, avec entrée et barre d'espace : « coché » et « non cochée ».
Jaws annonce, avec entrée et barre d'espace : « cochée, choisir la couleur noir cochée » et « non cochée ».
VoiceOver annonce, avec VO + espace : « cochée » et « non cochée ».
Intégration
/* HTML */
Case à cocher groupée :
<ul aria-labelledby="coul" class="acsa-checkboxGroup">
<li role="checkbox" aria-labelledby=" coul noir" aria-checked="false" class=" acsa-checkbox acsa-checkbox-false" tabindex="0">
<span id="noir">Noir</span>
</li>
[...]
</ul>
Case à cocher isolée :
<span role="checkbox" aria-checked="false" aria-labelledby="oui"
class="checkbox acsa-checkbox acsa-checkbox-false" tabindex="0">
<span id="oui">Acceptez les conditions d'utilisation</span></span>
/* Javascript */
//Paramètres (composant_config.js)
checkbox : {
//CSS
checkbox : 'acsa-checkbox',
stateFalse : 'acsa-checkbox-false',
stateTrue : 'acsa-checkbox-true'
}
/* Initialisation
var listCheckbox = document.getElementsByClassName( acsa_config.checkbox.checkbox );
var checkbox = new Array();
for ( var i = 0, len = listCheckbox.length; i < len; i++ ){
listCheckbox[i].addEventListener( 'keydown', function setListChekbox( event ){
var key = event.keyCode;
checkbox[i] = new Checkbox ( this, key, event );
}, false );
listCheckbox[i].addEventListener( 'click', function setListChekbox(){
var key = 32;
checkbox[i] = new Checkbox ( this, key );
}, false );
}
Lorsqu'un panneau ne contient que du texte, le contenu n'est pas vocalisé. Une première adaptation consiste à implémenter un tabindex=0 sur le contenu ou sur le premier élément du contenu. Cela permet aux utilisateurs de lecteurs d'écran d'accéder au contenu du panneau via la touche TAB, ce qui déclenchera la vocalisation du contenu.
Panneau 2
Lorsque le panneau ne contient qu'un message, destiné à être lu et qui ne nécessite pas de donner accès au panneau de contenu, une propriété aria-describedby="id_contenu" implémentée sur l'élément tab peut être suffisante.
Par défaut un tabpanel à un rôle 'application' implicite, ce qui interdit à un utilisateur de lecteur d'écran d'utiliser ses modes de navigation habituel. Pour donner la possibilité à l'utilisateur une navigation plus fine dans le contenu non focusable, il est possible de surcharger par un rôle "document" le contenu du panneau.
Panneau 3
Lorsque le panneau ne contient que des contenus focusables ou un mélange de contenus focusables et non-focusables, la touche TAB prends le focus sur le premier élément focusable dans le contenu du panneau.
NVDA active le mode formulaire et annonce « Onglet, panneau 1, onglet 1 sur 3 ».
Jaws active le mode formulaire et annonce « onglet panneau 1, pour activer cet élément barre d'espace ».
VoiceOver annonce « panneau 1 tabulation, 1 sur 3. »
Déplacement entre les différents panneaux.
NVDA annonce « Panneau [x], onglet [x] sur [total] ».
Jaws annonce « Panneau [x], onglet [x] sur [total] ».
VoiceOver annonce « Panneau [x], tabulation [x] sur [total] ».
Activation d'un panneau.
NVDA annonce « Panneau [x] sur [total], sélectionné ».
Jaws annonce « sélectionné ».
VoiceOver avec la touche entrée le panneau est sélectionné mais VoiceOver ne l'annonce pas, par contre, si on appuie sur une flèche et qu'on revient, VoiceOver annonce que le panneau est sélectionné. Avec VO + espace VoiceOver annonce : « appuyé panneau tabulation [x] sur [total] ».
Lecture du contenu d'un panneau.
NVDA : quitte le mode formulaire, annonce « fenêtre développée », le contenu est lu.
Jaws : quitte le mode formulaire et annonce « document », le contenu est lu.
VoiceOver : le contenu est lu avec vo+flèches droite et lorsqu'on interagit avec le contenu avec vo+flèche bas.
Lecture du contenu d'un panneau à la sélection de l'onglet (panneau 2 ).
NVDA : le contenu est lu.
Jaws : le contenu est lu.
VoiceOver : le contenu n'est pas lu.
Depuis le contenu d'un panneau, retour avec la tabulation sur l'onglet corrspondant.
Note importante : VoiceOver ne gère pas correctement la position du focus courant si celle-ci est gérée via tabindex. En conséquence, l'arborescence utilise la propriété aria-activedescendant.
NVDA active le mode formulaire et annonce « Arborescence + [titre de l'entrée] + réduit, non sélectionné, [x] sur [total] ».
Jaws annonce « [nom de l'entrée} + [contenu du sous menu] + [message d'aide] ».
VoiceOver annonce « tableau, ligne 1 sur 3, sélectionné », en se déplaçant en colonne, VoiceOver annonce « [titre de l'entrée] condensé ».
Activer une entrée de l'arborescence (ouverture du niveau inférieur).
NVDA annonce « [titre de l'entrée] développé, [x] sur [total], niveau [x] ».
Jaws annonce « [titre de l'entrée] + [contenu du sous menu] + [x] sur [total] + ouvert ».
VoiceOver : l’activation s’effectue en se déplaçant avec vo+flèche bas (mode navigation désactivé), puis en appuyant sur la flèche droite pour développer l’arborescence. VO annonce « cliquabe, ligne [x] étendu ». Pour vraiment pouvoir développer l’arborescence il faut effectuer l’action de clic en appuyant sur vo+espace. Pour lire le contenu de l’arborescence, il faut se déplacer sur la colonne 3 qui apparaît sans que VO ne l’indique.
Revenir au niveau supérieur, fermer le niveau de l'arborescence.
NVDA annonce « [titre de l'entrée] réduit, [x] sur [total], niveau [x] ».
Jaws annonce « [titre de l'entrée] + [contenu du sous menu] + fermé »
VO ne restitue que la disposition tableau. L’utilisation des flèches ne permet pas d’étendre et de replier l’arborescence. L’arborescence ne s'active pas avec les flèches mais en appuyant sur vo+espace.
Note : VoiceOver a beaucoup de difficultés avec ce motif de conception. Une solution d'implémentation alternative est décrite dans cet article en anglais : (Not so) Simple ARIA Tree Views and Screen Readers.
Intégration
/* HTML */
<ul class="acsa-tree-root-level" aria-labelledby="tree-title" role="tree">
<li class="acsa-tree-item acsa-tree-item-visible acsa-tree-item-subtree"
data-level="0" aria-expanded="false" tabindex="-1" role="treeitem">
<span>Travail</span>
<ul class="acsa-tree-subgroup" role="group">
<li class="acsa-tree-item" data-level="1" tabindex="-1" role="tree-item">
Mon-cv.odt
</li>
[...]
</ul>
</li>
[...]
</ul>
/* Javascript */
//Paramètres (composant_config.js)
tree : {
//Css
tree : 'acsa-tree-root-level',
subtree : 'acsa-tree-subgroup',
subtreeActive: 'acsa-tree-subgroup-active',
treeitem: 'acsa-tree-item',
treeitemSubtree: 'acsa-tree-item-subtree',
treeitemSubtreeActive: 'acsa-tree-item-subtree-active',
treeitemVisible: 'acsa-tree-item-visible'
},
/* Initialisation */
var listTree = document.getElementsByClassName( acsa_config.tree.tree );
var tree = new Array();
for ( var i = 0, len = listTree.length; i < len; i++ ){
tree[i] = new Tree( listTree[i], i );
}
Note : le modèle de conception autocomplete ne donne pas d'indication précise sur le comportement général du rôle autocomplete et ne décrit que des actions au clavier génériques, particulièrement pour le cas d'une autocomplétion en écriture (e.g le champ de saisie est éditable).
Deux exemples sont présentés ici, une liste d'autocomplétion en lecture seule qui simule le comportement d'une liste select et un exemple générique de liste d'autocomplétion en écriture qui simule les comportements habituels, tels qu'ils sont généralement implémentés sur le champ de saisie d'un moteur de recherche par exemple.
Les deux exemples peuvent s'écarter des comportements génériques des interactions au clavier tels qu'ils sont décrits par le modèle de conception afin de les adapter au but recherché.
Implémentation
Une autocomplétion en mode lecture seule : ce type d'autocomplétion simule une liste select.
Avec NVDA, le composant provoque des bugs avec les flèches de direction (perte de focus). Un rôle application sur le wrapper principal du composant et un attribut tabindex = 0 (pour donner le focus sur le champ de saisie), permettent de contrôler ces effets indésirables.
Cette adaptation n'est pas utilisable sur les listes d'autocomplétion en écriture.