Ce projet est une librairie Node.js qui parcourt la page "Critères et tests" du RGAA (Référentiel général d'amélioration de l'accessibilité)" afin de fournir l'ensemble des données à jour au format texte brut (plain text).
Installer le package :
# Avec npm
npm install @slash-tmp/rgaa-scraper
# Avec yarn
yarn add @slash-tmp/rgaa-scraper
La fonction scrapeRgaa()
renvoie une promesse qui permet de récupérer les
résultats :
const { scrapeRgaa } = require('@slash-tmp/rgaa-scraper')
scrapeRgaa().then(rgaaData => {
console.log(
`Fetched ${rgaaData.topics().length} topics, ${
rgaaData.criteria().length
} criteria and ${rgaaData.tests().length} tests.`
)
})
Un exemple d'utilisation plus complet est disponible dans
le dossier examples
.
Les propriétés marquée d'un astérisque (*) sont des accesseurs.
Liste l'ensemble des thématiques du RGAA ("Images", "Cadres"...).
Propriété | Description |
---|---|
id |
Numéro de la thématique. |
title |
Descriptif de la thématique. |
criteria() |
Méthode retournant les critères appartenant à la thématique. Filtrable par thématique (topic ), niveau WCAG (level ) et texte (search ). |
tests() |
Méthode retournant les tests appartenant aux critères de la thématique. Filtrable par thématique (topic ), critère (criterion ) et texte (search ). |
Exemple de thématique :
{
id: '1',
title: 'Images',
criteria: (filtres) => {
[
{
id: '1.3',
title: 'Pour chaque image porteuse d’information ayant une alternative textuelle, cette alternative est-elle pertinente (hors cas particuliers) ?',
references: {
wcag: ['9.1.1.1 / 1.1.1 Non-text Content (A)', '9.4.1.2 / 4.1.2 Name, Role, Value (A)'],
techniques: ['G94', 'G95', 'F30', 'F71', 'G196', 'ARIA6', 'ARIA9', 'ARIA10']
},
particularCases: "Il existe une gestion de cas particuliers lorsque l’image est utilisée comme CAPTCHA ou comme image-test. Dans cette situation, où il n’est pas possible de donner une alternative pertinente sans détruire l’objet du CAPTCHA ou du test, le critère est non applicable.\n" + "Note : le cas des CAPTCHA et des images-test est traité de manière spécifique par le critère 1.4.",
technicalNotes: '',
level: 'A'
},
// {...}
]
}
],
tests: (filtres) => {
[
{
id: '1.3.9',
title: 'Pour chaque image porteuse d’information et ayant une alternative textuelle, l’alternative textuelle est-elle courte et concise (hors cas particuliers) ?'
},
// {...}
]
}
}
Liste l'ensemble des critères du RGAA.
Propriété | Description |
---|---|
id |
Numéro du critère |
title |
Descriptif du critère. |
level |
Niveau WCAG du critère. |
references |
Références au WCAG et au W3 du critère. |
particularCases |
Cas particuliers d'application du critère. |
technicalNotes |
Note technique sur l'implémentation du critère. |
topic * |
Thématique à laquelle est rattaché le critère. |
tests() |
Méthode retournant les tests appartenant au critère. Filtrable par thématique (topic ), critère (criterion ) et texte (search ). |
Exemple de critère :
{
id: '1.8',
title: 'Chaque image texte porteuse d’information, en l’absence d’un mécanisme de remplacement, doit si possible être remplacée par du texte stylé. Cette règle est-elle respectée (hors cas particuliers) ?',
level: 'AA',
references: {
wcag: ['9.1.4.5 / 1.4.5 Images of Text (AA)'],
techniques: ['G136', 'G140', 'C22', 'C30']
},
particularCases: 'Pour ce critère, il existe une gestion de cas particulier lorsque le texte fait partie du logo, d’une dénomination commerciale, d’un CAPTCHA, d’une image-test ou d’une image dont l’exactitude graphique serait considérée comme essentielle à la bonne transmission de l’information véhiculée par l’image. Dans ces situations, le critère est non applicable pour ces éléments.',
technicalNotes: 'Le texte dans les images vectorielles étant du texte réel, il n’est pas concerné par ce critère.',
topic: {
id: '1',
title: 'Images'
},
tests: (filtres) => {
[
{
id: '1.3.9',
title: 'Pour chaque image porteuse d’information et ayant une alternative textuelle, l’alternative textuelle est-elle courte et concise (hors cas particuliers) ?'
},
// {...}
]
}
}
Liste l'ensemble des tests du RGAA.
Propriété | Description |
---|---|
id |
Numéro du test. |
title |
Descriptif du test. |
topic * |
Thématique à laquelle est rattaché le test. |
criterion * |
Critère auquel est rattaché le test. |
Exemple de test :
{
id: '1.8.1',
title: 'Chaque image texte (balise <img> ou possédant un attribut WAI-ARIA role="img") porteuse d’information, en l’absence d’un mécanisme de remplacement, doit si possible être remplacée par du texte stylé. Cette règle est-elle respectée (hors cas particuliers) ?',
topic: {
id: '1',
title: 'Images'
},
criterion: {
id: '1.8',
title: 'Chaque image texte porteuse d’information, en l’absence d’un mécanisme de remplacement, doit si possible être remplacée par du texte stylé. Cette règle est-elle respectée (hors cas particuliers) ?',
level: 'AA',
references: {
wcag: ['9.1.4.5 / 1.4.5 Images of Text (AA)'],
techniques: ['G136', 'G140', 'C22', 'C30']
},
particularCases: 'Pour ce critère, il existe une gestion de cas particulier lorsque le texte fait partie du logo, d’une dénomination commerciale, d’un CAPTCHA, d’une image-test ou d’une image dont l’exactitude graphique serait considérée comme essentielle à la bonne transmission de l’information véhiculée par l’image. Dans ces situations, le critère est non applicable pour ces éléments.',
technicalNotes: 'Le texte dans les images vectorielles étant du texte réel, il n’est pas concerné par ce critère.'
}
}
Les méthodes mentionnées "Filtrable" ci-dessus prennent en paramètre optionnel un objet de filtre avec plusieurs propriétés :
topic
: filtrer par numéro de thématique.criterion
: filtrer par numéro de critère.search
: filtrer par recherche textuelle.level
: filtrer par niveau de conformance WCAG.
Quelques exemples d'utilisation des filtres :
import { scrapeRgaa } from '@slash-tmp/rgaa-scraper'
scrapeRgaa().then(data => {
// Critères appartenant à la thématique 1
console.log(data.criteria({ topic: '1' }))
// Tests appartenant au critère 1.4
console.log(data.tests({ criterion: '1.4' }))
// Tests mentionnant le texte "alt"
console.log(data.tests({ search: 'alt' }))
// Critères ayant le niveau WCAG "AA"
console.log(data.criteria({ level: 'AA' }))
// Tests appartenant à la thématique 3 et ayant le niveau WCAG "A"
console.log(data.tests({ topic: '3', level: 'A' }))
})
La valeur résolue de la promesse renvoyée par la fonction scrapeRgaa()
est une
instance de RgaaResultWrapper
. Cette classe ainsi que les classes ci-dessous
peuvent être importées.
RgaaCriterionWrapper
RgaaRootWrapper
RgaaTestWrapper
RgaaTopicWrapper
Installer les dépendances :
yarn install
Tester le scraper en local :
yarn dev
Lancer les tests :
yarn test
/tmp est un petit studio web qui fait du développement et de la qualité.