Tutoriel "composants d’interface JavaScript"

Introduction

Cette étude a été réalisée pour répondre aux exigences du RGAA 3 et aux besoins d’utiliser rapidement des composants d’interface riches accessibles (WAI-ARIA). De nombreuses bibliothèques JavaScript proposent des composants d’interface riches plus ou moins accessibles.

Quatre bibliothèques JavaScript ont été sélectionnées, avec des bibliothèques additionnelles de composants d’interface. Après en avoir testé l’accessibilité, des corrections ont été apportées si nécessaire afin de rendre ces composants conformes au RGAA 3.

Voici la liste des biblliothèques sélectionnées :

  • JQuery + JQuery-ui
  • Bootstrap + plugin paypal
  • Angular + Angular-ui Bootstrap
  • React + Bootstrap

Ce tutoriel se découpe en plusieurs parties. Après une présentation des problématiques fréquemment rencontrées par les utilisateurs, les conséquences techniques liées aux questions d'accessibilité sont évoquées. Ensuite, pour chacune des bibliothèques, vous trouverez une synthèse des tests et correctifs proposés, et pourrez accéder aux tutoriels de mise en conformité, composant par composant :

Utiliser des composants JavaScript doit satisfaire aux exigences d’accessibilité communes à l’ensemble des éléments du site : un accès et une utilisation possibles au clavier, comme à la souris, et une vocalisation conforme par les lecteurs d’écran. La compatibilité des composants JavaScript avec les technologies d’assistance est rendue possible par l’utilisation de WAI-ARIA, et plus particulièrement par le respect des motifs de conception recommandés par le W3C (http://www.w3.org/TR/wai-aria-practices/#aria_ex). C'est ce qui permet de garantir la compatibilité avec les technologies d’assistance, telles que les lecteurs ou agrandisseurs d’écran et les logiciels de reconnaissance vocale utilisés par les personnes en situation de handicap... Dans le cas où cette mise en conformité n’est pas envisageable, reste à la charge du développeur la mise en place d’une alternative à la fonctionnalité proposée par le composant.

Par exemple, lorsqu'un composant a un défaut de navigation au clavier, cela handicape :

  • Les personnes aveugles (qui ne peuvent utiliser de périphériques comme les souris qui nécessitent une coordination de l’œil et de la main)
  • Les personnes malvoyantes (qui peuvent avoir du mal à trouver ou à suivre le symbole du pointeur sur l'écran)
  • Certaines personnes ayant des tremblements de la main, qui trouvent l'utilisation de la souris très difficile et se servent donc habituellement d'un clavier

Ou alors si un composant a un défaut de description ou d'alternative cela rend impossible pour les technologies d'assistance la lecture du texte à haute voix, ou la conversion en braille. Cela handicape donc les personnes qui ont des difficultés de vision, les personnes sourdes et/ou les personnes aveugles.

Pour plus d'informations, le W3C met a disposition un guide pour comprendre et mettre en œuvre la version 2.0 des Règles pour l'accessibilité des contenus Web

L'accessibilité consiste à permettre aux personnes en situation de handicap d'accéder aux mêmes contenus et fonctionnalités que tout le monde, sans discrimination, et quelle que soit sa façon de consulter les pages web. Or, si la meilleure façon de garantir cet égal accès est de fournir une même interface nativement accessible à toutes et tous, il peut arriver que dans certains contextes techniques, les solutions à mettre en œuvre soient excessivement complexes et donc coûteuses. C'est pourquoi l'obligation légale d'accessibilité reprend la notion d'aménagement raisonnable telle que définie par la Convention relative aux droits des personnes handicapées de l'ONU :

« On entend par « aménagement raisonnable » les modifications et ajustements nécessaires et appropriés n’imposant pas de charge disproportionnée ou indue apportés, en fonction des besoins dans une situation donnée, pour assurer aux personnes handicapées la jouissance ou l’exercice, sur la base de l’égalité avec les autres, de tous les droits de l’homme et de toutes les libertés fondamentales »

La première attente fondamentale des utilisateurs est de pouvoir accéder aux contenus et fonctionnalités des sites publics, mais pas nécessairement sous la même forme. Mettre en place des alternatives peut être un compromis acceptable à condition qu'elles fournissent le même niveau d'information et des fonctionnalités équivalentes.

Lorsque les développements sont jugés déraisonnables, il convient alors de mettre en place une alternative permettant de donner accès aux mêmes contenus et à des fonctionnalités similaires. C'est ainsi que nous proposons parfois des solutions alternatives à des développements jugés trop complexes par rapport au bénéfice utilisateur.

Pour chaque bibliothèque, nous avons ainsi proposé des correctifs sous forme d’extension aux composants déjà existants, ou des solutions alternatives le cas échéant. Afin d'éviter de surcharger entièrement le code du composant, nous avons décidé de les étendre (comme par exemple pour JQuery-ui). Ceci afin d'ajouter la possibilité d’utiliser de nouveaux arguments en entrée de fonction, ou bien d’étendre certaines fonctions de ces bibliothèques pour en corriger le fonctionnement.

On garde ainsi la simplicité d’utilisation de ces composants, leur appel reste exactement le même (moyennant les nouveaux arguments s'il y en a), il suffit de charger le JavaScript qui étend le composant après avoir chargé le composant lui-même.

JQuery UI

JQuery n’étant pas une bibliothèque d’interface, pour pouvoir tester des composants d’interface riche afin de savoir s’ils répondent aux exigences du RGAA 3, il a fallu choisir une bibliothèque de composants d’interface utilisant JQuery. Pour ce faire, JQuery-ui (https://jqueryui.com) a été utilisée. Pour effectuer le test de ces composants, la version de JQuery utilisée est la 1.11.2 et celle de JQuery-ui est aussi la version 1.11.2.

Malheureusement, la bibliothèque de composants JQuery-ui ne dispose pas de tous les composants WAI-ARIA que nous souhaitons évaluer et corriger, certains composants n’existent pas dans la bibliothèque proposée, ou alors ne correspondent pas du tout au motif de conception (Design Pattern) WAI-ARIA, et dans ce cas, il seront considérés comme hors du cadre de ces tests.

Tableau des composants d’interface pour la bibliothèque JQuery UI
composant évaluation du composant natif correction restitution lecteurs d'écran
Slider non conforme complète conforme
Progressbar non conforme complète conforme
Modal - Dialog non conforme complète conforme
Tabpannel conforme aucune non conforme sous VoiceOver
Tooltip conforme aucune conforme
Accordion non conforme complète conforme
Menu non applicable
le menu proposé par la bibliothèque s'apparente à un menu de navigation, alors que le motif de conception définit un menu applicatif
Buttons non applicable
la bibliothèque enrichit un composant natif HTML5, ce qui n’a pas d’intérêt WAI-ARIA puisque c’est le composant natif button
Autocomplete non conforme solution alternative
Datepicker non conforme solution alternative

Voir les tutoriels des composants corrigés

Consulter le dépôt des corrections pour jQuery UI

Bootstrap components avec le plugin "Paypal Bootstrap Accessibility"

Pour ces tests, nous avons ciblé les modules du plugin Paypal Bootstrap Accessibility dans sa version 1.0.4 et qui a pour dépendance le plugin Bootstrap V3.1.1 qui lui même a pour dépendance jQuery JavaScript Library v1.11.2.

Tableau des composants d’interface pour la bibliothèque Bootstrap avec le plugin "Paypal Bootstrap Accessibility"
composant évaluation du composant natif correction restitution lecteurs d'écran
Modal - Dialog non conforme partielle non conforme
Tabpannel conforme aucune conforme
Accordion conforme aucune conforme
Menu non applicable
le menu proposé par la bibliothèque s'apparente à un menu de navigation, alors que le motif de conception définit un menu applicatif

La bibliothèque Bootstrap avec le plugin de Paypal renforce l'accessibilité des composants de Bootstrap. Néanmoins il reste 2 erreurs sur la modale, celle-ci se ferme lorsque l'utilisateur clique en dehors de la modale et le focus n'est pas donné sur le 1er élément. La correction n'est pas proposé ici pour éviter d'avoir un plugin de plugin.

Angular UI Bootstrap

Angular Bootstrap est actuellememt l'une des librairies les plus utilisées pour AngularJs et offre un large panel de composants.

Nous avons utilisé ici les versions 1.2.28 de AngularJs, et 0.12.1 de Angular Bootstrap.

Tableau des composants d’interface pour la bibliothèque Angular UI Bootstrap
composant évaluation du composant natif correction restitution lecteurs d'écran
Slider non conforme complète conforme
Progressbar non conforme complète conforme
Modal - Dialog non conforme complète conforme
Tabpannel non conforme complète en cours
Tooltip non conforme complète conforme
Accordion non conforme partielle conforme
Menu non applicable
le menu proposé par la bibliothèque s'apparente à un menu de navigation, alors que le motif de conception définit un menu applicatif
Radiobutton non conforme complète conforme
Checkbox non conforme complète conforme
Datepicker non conforme complète conforme

Voir les tutoriels des composants corrigés

Consulter le dépôt des corrections pour Angular UI Bootstrap

React Bootstrap

À l'heure des tests que nous avons effectués, la bibliothèque de composants la plus populaire et la plus complète pour React semble être React Bootstrap. Cette bibliothèque réimplémente les composants riches de la bibliothèque CSS Bootstrap, pour les rendre facilement intégrables dans une application React.

Nous avons utilisé ici les versions 0.13.1 de React, et 0.19.1 de React Bootstrap.

Tableau des composants d’interface pour la bibliothèque React Bootstrap
composant évaluation du composant natif correction restitution lecteurs d'écran
Progressbar non conforme complète conforme
Modal - Dialog non conforme complète non conforme
Tabpannel non conforme complète conforme
Tooltip non conforme complète conforme
Accordion non conforme complète conforme
Menu non applicable
le menu proposé par la bibliothèque s'apparente à un menu de navigation, alors que le motif de conception définit un menu applicatif

Voir les tutoriels des composants corrigés

Consulter le dépôt des corrections pour React Bootstrap

Conclusion

Ce que nous avons pu remarquer, lors des tests, c'est que seules les bibliothèques se clamant accessibles avaient fait un réel effort dans ce sens. Donc il faut prendre de grandes précautions si ce n'est pas le cas. Néanmoins, il ne reste pas impossible de faire des corrections sur les bibliothèques en erreur. Les corrections peuvent être plus ou moins aisées selon le composant et la bibliothèque. Une correction dans le noyau d'origine de la bibliothèque sera toujours plus efficace et pérenne qu'un plugin. jQuery, AngularJs, React permettent de créer du code accessible au même titre que javascript le permet. C'est son utilisation dans des bibliothèques de composants qui peut poser problème. La création d'anomalies dans les bibliothèques d'origine permettra de suivre l'avancement des corrections. Malgré cela nous avons rencontré des anomalies ouvertes depuis 2010 sans correction.