govuk_publishing_components 21.22.1 → 21.22.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -3
  3. data/app/assets/stylesheets/govuk_publishing_components/components/_breadcrumbs.scss +34 -0
  4. data/app/assets/stylesheets/govuk_publishing_components/components/_document-list.scss +2 -2
  5. data/app/views/govuk_publishing_components/components/_breadcrumbs.html.erb +0 -3
  6. data/app/views/govuk_publishing_components/components/_contextual_breadcrumbs.html.erb +0 -2
  7. data/lib/govuk_publishing_components/version.rb +1 -1
  8. data/node_modules/axe-core/CHANGELOG.md +70 -10
  9. data/node_modules/axe-core/axe.js +1295 -632
  10. data/node_modules/axe-core/axe.min.js +2 -2
  11. data/node_modules/axe-core/bower.json +1 -1
  12. data/node_modules/axe-core/doc/API.md +1 -0
  13. data/node_modules/axe-core/doc/aria-supported.md +0 -1
  14. data/node_modules/axe-core/doc/developer-guide.md +2 -2
  15. data/node_modules/axe-core/doc/rule-descriptions.md +91 -87
  16. data/node_modules/axe-core/lib/checks/aria/abstractrole.js +10 -1
  17. data/node_modules/axe-core/lib/checks/aria/abstractrole.json +4 -1
  18. data/node_modules/axe-core/lib/checks/aria/fallbackrole.js +1 -0
  19. data/node_modules/axe-core/lib/checks/aria/fallbackrole.json +11 -0
  20. data/node_modules/axe-core/lib/checks/aria/invalidrole.js +14 -3
  21. data/node_modules/axe-core/lib/checks/aria/invalidrole.json +4 -1
  22. data/node_modules/axe-core/lib/checks/aria/required-children.js +41 -30
  23. data/node_modules/axe-core/lib/checks/aria/valid-attr-value.js +24 -9
  24. data/node_modules/axe-core/lib/checks/aria/valid-attr-value.json +2 -2
  25. data/node_modules/axe-core/lib/checks/color/color-contrast.js +23 -7
  26. data/node_modules/axe-core/lib/checks/color/color-contrast.json +7 -1
  27. data/node_modules/axe-core/lib/checks/keyboard/focusable-disabled.js +5 -0
  28. data/node_modules/axe-core/lib/checks/keyboard/focusable-modal-open.js +14 -0
  29. data/node_modules/axe-core/lib/checks/keyboard/focusable-modal-open.json +11 -0
  30. data/node_modules/axe-core/lib/checks/keyboard/focusable-not-tabbable.js +5 -0
  31. data/node_modules/axe-core/lib/checks/keyboard/page-has-elm.js +5 -1
  32. data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-after.js +2 -0
  33. data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-banner.json +1 -0
  34. data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-contentinfo.json +1 -0
  35. data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate-main.json +1 -0
  36. data/node_modules/axe-core/lib/checks/keyboard/page-no-duplicate.js +14 -2
  37. data/node_modules/axe-core/lib/checks/lists/only-listitems.js +43 -49
  38. data/node_modules/axe-core/lib/checks/lists/only-listitems.json +4 -1
  39. data/node_modules/axe-core/lib/checks/media/no-autoplay-audio.js +93 -0
  40. data/node_modules/axe-core/lib/checks/media/no-autoplay-audio.json +15 -0
  41. data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose-after.js +100 -0
  42. data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose.js +31 -0
  43. data/node_modules/axe-core/lib/checks/navigation/identical-links-same-purpose.json +12 -0
  44. data/node_modules/axe-core/lib/checks/navigation/region.js +42 -8
  45. data/node_modules/axe-core/lib/checks/navigation/region.json +0 -1
  46. data/node_modules/axe-core/lib/checks/shared/svg-non-empty-title.js +4 -0
  47. data/node_modules/axe-core/lib/checks/shared/svg-non-empty-title.json +11 -0
  48. data/node_modules/axe-core/lib/commons/aria/index.js +12 -4
  49. data/node_modules/axe-core/lib/commons/color/get-background-color.js +5 -157
  50. data/node_modules/axe-core/lib/commons/dom/get-element-stack.js +272 -174
  51. data/node_modules/axe-core/lib/commons/dom/is-focusable.js +3 -1
  52. data/node_modules/axe-core/lib/commons/dom/is-hidden-with-css.js +2 -2
  53. data/node_modules/axe-core/lib/commons/dom/is-modal-open.js +98 -0
  54. data/node_modules/axe-core/lib/commons/dom/is-visible.js +57 -2
  55. data/node_modules/axe-core/lib/commons/dom/url-props-from-attribute.js +143 -0
  56. data/node_modules/axe-core/lib/commons/dom/visually-contains.js +62 -12
  57. data/node_modules/axe-core/lib/commons/matches/attributes.js +12 -8
  58. data/node_modules/axe-core/lib/commons/matches/from-definition.js +15 -10
  59. data/node_modules/axe-core/lib/commons/matches/index.js +11 -9
  60. data/node_modules/axe-core/lib/commons/matches/node-name.js +11 -21
  61. data/node_modules/axe-core/lib/commons/matches/properties.js +12 -9
  62. data/node_modules/axe-core/lib/commons/text/unicode.js +27 -24
  63. data/node_modules/axe-core/lib/core/base/virtual-node/virtual-node.js +11 -3
  64. data/node_modules/axe-core/lib/core/constants.js +1 -1
  65. data/node_modules/axe-core/lib/core/reporters/v1.js +6 -3
  66. data/node_modules/axe-core/lib/core/utils/contains.js +1 -1
  67. data/node_modules/axe-core/lib/core/utils/is-hidden.js +6 -6
  68. data/node_modules/axe-core/lib/core/utils/matches.js +263 -0
  69. data/node_modules/axe-core/lib/core/utils/preload-media.js +65 -0
  70. data/node_modules/axe-core/lib/core/utils/preload.js +33 -24
  71. data/node_modules/axe-core/lib/core/utils/qsa.js +7 -208
  72. data/node_modules/axe-core/lib/rules/aria-hidden-focus.json +5 -1
  73. data/node_modules/axe-core/lib/rules/aria-roles.json +1 -1
  74. data/node_modules/axe-core/lib/rules/button-name.json +1 -1
  75. data/node_modules/axe-core/lib/rules/color-contrast-matches.js +1 -1
  76. data/node_modules/axe-core/lib/rules/color-contrast.json +0 -3
  77. data/node_modules/axe-core/lib/rules/html-namespace-matches.js +1 -0
  78. data/node_modules/axe-core/lib/rules/identical-links-same-purpose-matches.js +13 -0
  79. data/node_modules/axe-core/lib/rules/identical-links-same-purpose.json +14 -0
  80. data/node_modules/axe-core/lib/rules/landmark-no-duplicate-banner.json +1 -1
  81. data/node_modules/axe-core/lib/rules/landmark-no-duplicate-contentinfo.json +1 -1
  82. data/node_modules/axe-core/lib/rules/landmark-no-duplicate-main.json +12 -0
  83. data/node_modules/axe-core/lib/rules/landmark-one-main.json +2 -2
  84. data/node_modules/axe-core/lib/rules/link-name.json +2 -4
  85. data/node_modules/axe-core/lib/rules/meta-viewport.json +1 -1
  86. data/node_modules/axe-core/lib/rules/no-autoplay-audio-matches.js +18 -0
  87. data/node_modules/axe-core/lib/rules/no-autoplay-audio.json +15 -0
  88. data/node_modules/axe-core/lib/rules/region.json +1 -2
  89. data/node_modules/axe-core/lib/rules/role-img-alt.json +2 -1
  90. data/node_modules/axe-core/lib/rules/svg-img-alt.json +24 -0
  91. data/node_modules/axe-core/lib/rules/svg-namespace-matches.js +1 -0
  92. data/node_modules/axe-core/locales/da.json +782 -0
  93. data/node_modules/axe-core/locales/fr.json +221 -42
  94. data/node_modules/axe-core/locales/ja.json +124 -24
  95. data/node_modules/axe-core/package.json +29 -26
  96. data/node_modules/axe-core/sri-history.json +26 -10
  97. metadata +27 -9
  98. data/node_modules/axe-core/doc/examples/jasmine/package-lock.json +0 -1489
  99. data/node_modules/axe-core/doc/examples/jest_react/package-lock.json +0 -7525
  100. data/node_modules/axe-core/doc/examples/mocha/package-lock.json +0 -1671
  101. data/node_modules/axe-core/doc/examples/phantomjs/package-lock.json +0 -862
  102. data/node_modules/axe-core/doc/examples/qunit/package-lock.json +0 -2951
  103. data/node_modules/axe-core/lib/checks/navigation/region-after.js +0 -1
  104. data/node_modules/axe-core/typings/axe-core/axe-core-tests.js +0 -151
@@ -23,27 +23,43 @@
23
23
  },
24
24
  "aria-hidden-body": {
25
25
  "description": "S’assure que aria-hidden='true' n’est pas présent sur le corps du document (élément body)",
26
- "help": "aria-hidden='true' ne doit pas être présent sur body"
26
+ "help": "aria-hidden='true' ne doit pas être présent sur <body>"
27
+ },
28
+ "aria-hidden-focus": {
29
+ "description": "S'assure que aria-hidden n'est pas assigmé aux éléments qui recoivent le focus au clavier",
30
+ "help": "ARIA hidden n'est pas assigné aux éléments qui reçoivent le focus au clavier"
31
+ },
32
+ "aria-input-field-name": {
33
+ "description": "S'assure que chaque champ de formulaire avec ARIA est dôté d'un intitulé accessible",
34
+ "help": "Les champs de formulaire ARIA ont un intitulé accessible"
27
35
  },
28
36
  "aria-required-attr": {
29
37
  "description": "S’assure que les éléments avec des rôles ARIA ont les attributs ARIA requis",
30
38
  "help": "Les attributs ARIA requis doivent être présents"
31
39
  },
32
40
  "aria-required-children": {
33
- "description": "S’assure que les éléments avec un rôle ARIA requérant des rôles enfants les contient",
34
- "help": "Certains rôles ARIA doivent contenir des enfants spécifiques"
41
+ "description": "S’assure que les éléments avec un rôle ARIA comportent aussi des rôles pour les descendants directs",
42
+ "help": "Certains rôles ARIA doivent comporter des descendants directs spécifiques"
35
43
  },
36
44
  "aria-required-parent": {
37
45
  "description": "S’assure que les éléments avec un rôle ARIA requérant des rôles parents y sont contenus",
38
46
  "help": "Certains rôles ARIA doivent être contenus par des parents spécifiques"
39
47
  },
48
+ "aria-roledescription": {
49
+ "description": "S'assure que aria-roledescription n'est utilisé que sur des éléments qui ont un rôle implicite ou explicite",
50
+ "help": "Utiliser aria-roledescription sur les éléments dont le rôle a une valeur sémantique"
51
+ },
40
52
  "aria-roles": {
41
53
  "description": "S’assure que les éléments avec un attribut role utilisent une valeur valide",
42
54
  "help": "Les rôles ARIA doivent se conformer aux valeurs valides"
43
55
  },
56
+ "aria-toggle-field-name": {
57
+ "description": "S'assure que chaque champ de basculement ARIA a un libellé accessible",
58
+ "help": "Les champs de basculement ARIA ont un libellé accessible"
59
+ },
44
60
  "aria-valid-attr-value": {
45
- "description": "S’assure que tous les attributs ARIA ont des valeurs valides",
46
- "help": "Les attributs ARIA doivent avoir des valeurs valides"
61
+ "description": "S’assure que tous les attributs ARIA comportent des valeurs valides",
62
+ "help": "Les attributs ARIA doivent comporter des valeurs valides"
47
63
  },
48
64
  "aria-valid-attr": {
49
65
  "description": "S’assure que les attributs commençant par aria- sont des attributs ARIA valides",
@@ -54,9 +70,13 @@
54
70
  "help": "Les éléments <audio> doivent avoir une psite de sous-titres"
55
71
  },
56
72
  "autocomplete-valid": {
57
- "description": "S’assure que l’attribut autocomplete est correct et adapté pour le champ de formulaire",
73
+ "description": "S’assure que l’attribut autocomplete est correctement adapté au champ de formulaire",
58
74
  "help": "L’attribut autocomplete doit être utilisé correctement"
59
75
  },
76
+ "avoid-inline-spacing": {
77
+ "description": "S'assure que l'espacement du texte défini à travers une attribution de styles peut être ajusté via une feuille de style personalisée",
78
+ "help": "L'espacement du texte inline peut être ajusté avec des feuilles de style personalisées"
79
+ },
60
80
  "blink": {
61
81
  "description": "S’assure que l’élément <blink> n’est pas utilisé",
62
82
  "help": "L’élément <blink> est déprécié et ne doit pas être utilisé"
@@ -66,17 +86,21 @@
66
86
  "help": "Les boutons doivent avoir un texte perceptible"
67
87
  },
68
88
  "bypass": {
69
- "description": "S’assure que chaque page dispose au minium d’un mécanisme d’évitement de la navigation pour accéder directement au contenu",
70
- "help": "Chaque page doit fournir des moyens d’éviter les contenus répétés"
89
+ "description": "S’assure que chaque page dispose au minimum d’un mécanisme de contournement de la navigation pour accéder directement au contenu",
90
+ "help": "Chaque page doit fournir des moyens de contourner les contenus répétés"
71
91
  },
72
92
  "checkboxgroup": {
73
93
  "description": "S’assure que les éléments <input type=\"checkbox\"> en relation sont regroupés et que la désignation du groupe est cohérente",
74
94
  "help": "Les cases à cocher avec la même valeur pour l’attribut name doivent faire partie d’un groupe"
75
95
  },
76
96
  "color-contrast": {
77
- "description": "S’assure que les contrastes entre le premier plan et l’arrière-plan atteignent les seuils de contrastes exigés par les WCAG 2 AA",
97
+ "description": "S’assure que les contrastes entre le premier plan et l’arrière-plan rencontrent les seuils de contrastes exigés par les WCAG 2 AA",
78
98
  "help": "Les éléments doivent avoir un contraste de couleurs suffisant"
79
99
  },
100
+ "css-orientation-lock": {
101
+ "description": "S'assure que les contenus ne sont pas limités à une orientation spécifique de l'écran, et que le contenu est utilisable sous toutes les orientations de l'écran",
102
+ "help": "Les CSS Media queries ne sont pas utilisées pour vérrouiller l'orientation de l'écran"
103
+ },
80
104
  "definition-list": {
81
105
  "description": "S’assure que les éléments <dl> sont correctement structurés",
82
106
  "help": "Les éléments <dl> ne doivent contenir directement que des groupes d’éléments <dt> et <dd> correctement ordonnés, ou des éléments <script> ou <template>"
@@ -89,6 +113,14 @@
89
113
  "description": "S’assure que chaque document HTML contient un élément <title> non vide",
90
114
  "help": "Chaque document doit avoir un élément <title> pour aider à la navigation"
91
115
  },
116
+ "duplicate-id-active": {
117
+ "description": "S'assure que la valeur d'attribut id de chaque élément actif est unique",
118
+ "help": "Les IDs des éléments actifs doivent être uniques"
119
+ },
120
+ "duplicate-id-aria": {
121
+ "description": "S'assure que chaque valeur d'attribut id utilisée avec ARIA et dans les étiquettes est unique",
122
+ "help": "Les IDs utilisés avec ARIA et dans les étiquettes doivent être uniques"
123
+ },
92
124
  "duplicate-id": {
93
125
  "description": "S’assure que la valeur de chaque attribut id est unique",
94
126
  "help": "La valeur de l’attribut id doit être unique"
@@ -98,9 +130,13 @@
98
130
  "help": "Les niveaux de titre ne doivent pas être vides"
99
131
  },
100
132
  "focus-order-semantics": {
101
- "description": "S’assure que les éléments dans le parcours du focus aient un rôle approprié",
133
+ "description": "S’assure que les éléments dans le parcours du focus onnt un rôle approprié",
102
134
  "help": "Les éléments dans le parcours du focus doivent avoir un rôle approprié pour le contenu interactif"
103
135
  },
136
+ "form-field-multiple-labels": {
137
+ "description": "S'assure que le champ de formulaire n'a pas plusieurs éléments d'étiquettes",
138
+ "help": "Le champ de formulaire ne devrait pas comporter plusieurs éléments d'étiquettes"
139
+ },
104
140
  "frame-tested": {
105
141
  "description": "S’assure que les éléments <iframe> et <frame> contiennent le script axe-core",
106
142
  "help": "Les cadres doivent être testés avec axe-core"
@@ -126,7 +162,7 @@
126
162
  "help": "L’élément <html> doit avoir un attribut lang"
127
163
  },
128
164
  "html-lang-valid": {
129
- "description": "S’assure que l’attribut lang sur l’élément HTML a une valeur valide",
165
+ "description": "S’assure que l’attribut lang sur l’élément <html> a une valeur valide",
130
166
  "help": "L’élément <html> doit avoir une valeur valide pour l’attribut lang"
131
167
  },
132
168
  "html-xml-lang-mismatch": {
@@ -134,29 +170,41 @@
134
170
  "help": "Les éléments HTML avec les attributs lang et xml:lang doivent avoir la même langue de base"
135
171
  },
136
172
  "image-alt": {
137
- "description": "S’assure que les éléments <img> ont une alternative textuelle, ou un rôle none ou presentation",
173
+ "description": "S’assure que les éléments <img> ont une alternative textuelle, ou un rôle de type 'none' ou 'presentation'",
138
174
  "help": "Les images doivent avoir une alternative textuelle"
139
175
  },
140
176
  "image-redundant-alt": {
141
177
  "description": "S’assure que l’intitulé des liens et boutons n’est pas répété dans l’alternative de l’image",
142
178
  "help": "L’intitulé des liens et boutons ne doit pas être répété dans l’alternative de l’image"
143
179
  },
180
+ "input-button-name": {
181
+ "description": "S'assure que la valeur textuelle des contrôles de boutons est perceptible",
182
+ "help": "La valeur textuelle des contrôles de boutons doit être perceptible"
183
+ },
144
184
  "input-image-alt": {
145
185
  "description": "S’assure que les éléments <input type=\"image\"> ont une alternative textuelle",
146
186
  "help": "Les boutons images doivent avoir une alternative textuelle"
147
187
  },
188
+ "label-content-name-mismatch": {
189
+ "description": "S'assure que dans le cas d'éléments identifiés par leur contenu textuel, le texte visible fait partie du intitulé accessible",
190
+ "help": "Le contenu textuel des éléments doit aussi se retrouver dans leur intitulé accessible"
191
+ },
148
192
  "label-title-only": {
149
193
  "description": "S’assure que chaque élément de formulaire n’est pas labellisé uniquement par les attributs title ou aria-describedby",
150
194
  "help": "Chaque élément de formulaire doit avoir un label visible"
151
195
  },
152
196
  "label": {
153
- "description": "S’assure que chaque élément de formulaire a un label",
154
- "help": "Chaque élément de formulaire doit avoir un label"
197
+ "description": "S’assure que chaque élément de formulaire a une étiquette",
198
+ "help": "Chaque élément de formulaire doit avoir une étiquette"
155
199
  },
156
200
  "landmark-banner-is-top-level": {
157
201
  "description": "La région banner ne devrait pas être contenue dans une autre région",
158
202
  "help": "La région banner doit être au niveau le plus haut"
159
203
  },
204
+ "landmark-complementary-is-top-level": {
205
+ "description": "S'assure que les landmarks complementary ou aside se retrouvent au plus haut niveau",
206
+ "help": "Aside ne doit pas être contenu dans un autre landmark"
207
+ },
160
208
  "landmark-contentinfo-is-top-level": {
161
209
  "description": "La région contentinfo ne devrait pas être contenue dans une autre région",
162
210
  "help": "La région contentinfo doit être au niveau le plus haut"
@@ -173,10 +221,18 @@
173
221
  "description": "S’assure que le document n’a pas plus d’une région contentinfo",
174
222
  "help": "Le document contient au plus une région contentinfo"
175
223
  },
224
+ "landmark-no-duplicate-main": {
225
+ "description": "S'assure que le document a tout au plus, un seul landmark main",
226
+ "help": "Le document ne doit pas contenir plus d'un landmark main"
227
+ },
176
228
  "landmark-one-main": {
177
- "description": "S’assure qu’une navigation pointe vers le contenu principal de la page. Si la page contient des iframes, chaque iframe ne doit contenir qu’une région main, ou aucune",
229
+ "description": "S’assure qu’une navigation pointe vers le contenu principal de la page. Si la page contient des iframes, chaque iframe ne doit contenir au plus qu’une région main",
178
230
  "help": "La page doit contenir une région main"
179
231
  },
232
+ "landmark-unique": {
233
+ "help": "S'assure que chaque landmark est unique",
234
+ "description": "Les landmarks doivent comporter un rôle unique, ou une étiquette accessible par la combinaison de role/label/title"
235
+ },
180
236
  "layout-table": {
181
237
  "description": "S’assure que les éléments <table> de présentation n’utilisent pas les éléments <th>, <caption> ni l’attribut summary",
182
238
  "help": "Les tableaux de présentation ne doivent pas utiliser les éléments de tableaux de données"
@@ -233,10 +289,18 @@
233
289
  "description": "S’assure que tout le contenu est localisé dans une région",
234
290
  "help": "Le contenu doit être localisé dans une région"
235
291
  },
292
+ "role-img-alt": {
293
+ "description": "S'assure que les éléments avec [role='img'] ont une équivalence textuelle",
294
+ "help": "Les éléments avec [role='img'] ont une équivalence textuelle"
295
+ },
236
296
  "scope-attr-valid": {
237
297
  "description": "S’assure que l’attribut scope est utilisé correctement dans les tableaux",
238
298
  "help": "L’attribut scope doit être utilisé correctement"
239
299
  },
300
+ "scrollable-region-focusable": {
301
+ "description": "Les éléments dont le contenu défile devraient être accesibles au clavier",
302
+ "help": "S'assure que les régions défilantes sont accessibles au clavier"
303
+ },
240
304
  "server-side-image-map": {
241
305
  "description": "S’assure que les images réactives côté serveur ne sont pas utilisées",
242
306
  "help": "Les images réactives côté serveur ne devraient pas être utilisées"
@@ -255,7 +319,7 @@
255
319
  },
256
320
  "table-fake-caption": {
257
321
  "description": "S’assure que les tableaux avec une légende utilisent l’élément <caption>",
258
- "help": "Les données ou les cellules d’entête ne devraient pas être utilisées pour légender un tableau de données."
322
+ "help": "Les données ou les cellules d’entête ne devraient pas être utilisées pour légender un tableau de données"
259
323
  },
260
324
  "td-has-header": {
261
325
  "description": "S’assure que chaque cellule de données non vide dans un tableau de données a une ou plusieurs cellules d’entête",
@@ -289,19 +353,37 @@
289
353
  },
290
354
  "aria-allowed-attr": {
291
355
  "pass": "Les attributs ARIA sont utilisés correctement pour le rôle défini",
292
- "fail": "{{=it.data && it.data.length > 1 ? 'Attributs ARIA non autorisés' : 'Attribut ARIA non autorisé'}} : {{~it.data:value}} {{=value}}{{~}}"
356
+ "fail": {
357
+ "singular": "L'attribut ARIA n'est pas autorisé: ${data.values}",
358
+ "plural": "Les attributs ARIA ne sont pas autorisés: ${data.values}"
359
+ }
293
360
  },
294
361
  "aria-allowed-role": {
295
362
  "pass": "Le rôle ARIA est autorisé pour l’élément donné",
296
- "fail": "{{=it.data && it.data.length > 1 ? 'Les rôles' : 'Le rôle'}} {{=it.data.join(', ')}} {{=it.data && it.data.length > 1 ? 'ne sont pas autorisés' : 'n’est pas autorisé'}} pour l’élément donné"
363
+ "fail": {
364
+ "singular": "Le rôle ARIA ${data.values} n'est pas autorisé pour l'élément donné",
365
+ "plural": "Les rôles ARIA ${data.values} ne sont pas autorisés pour l'élément donné"
366
+ },
367
+ "incomplete": {
368
+ "singular": "Le rôle ARIA ${data.values} doit être retiré lorsque l'élément est rendu visible, car il n'est pas autorisé pour cet élément",
369
+ "plural": "Les rôles ARIA ${data.values} doivent être retirés lorsque l'élément est rendu visible, car il nee sont pas autorisés pour cet élément"
370
+ }
297
371
  },
298
372
  "aria-hidden-body": {
299
373
  "pass": "Aucun attribut aria-hidden n’est présent sur body",
300
374
  "fail": "aria-hidden=true ne devrait pas être présent sur body"
301
375
  },
376
+ "aria-roledescription": {
377
+ "pass": "aria-roledescription utilisé sur un élément sémantique supporté",
378
+ "incomplete": "Vérifier que la valeur de aria-roledescription est annoncée par les lecteurs d'écran supportés",
379
+ "fail": "Attribuer à l'élément un role qui supporte aria-roledescription"
380
+ },
302
381
  "aria-errormessage": {
303
382
  "pass": "Utilise une technique prise en charge pour aria-errormessage",
304
- "fail": "{{=it.data && it.data.length > 1 ? 'Les valeurs de aria-errormessage' : 'La valeur de aria-errormessage'}} {{~it.data:value}} `{{=value}}{{~}}` doit utiliser une technique pour annoncer le message (ex. : aria-live, aria-describedby, role=alert, etc.)"
383
+ "fail": {
384
+ "singular": "La valeur de aria-errormessage `${data.values}` doit recourir à une technique pour annoncer le message (aria-live, aria-describedby, role=alert, etc.)",
385
+ "plural": "Les valeurs aria-errormessage `${data.values}` doivent recourir à une technique pour annoncer le message (aria-live, aria-describedby, role=alert, etc.)"
386
+ }
305
387
  },
306
388
  "has-widget-role": {
307
389
  "pass": "L’élément a un rôle widget.",
@@ -315,18 +397,38 @@
315
397
  "pass": "Le rôle ARIA est valide",
316
398
  "fail": "Le rôle doit être un des rôles ARIA valides"
317
399
  },
400
+ "no-implicit-explicit-label": {
401
+ "pass": "Il n'y a pas de décalage entre le <label> et le intitulé accessible",
402
+ "incomplete": "Vérifier que le <label> n'a pas à faire partie du nom du champ de formulaire ARIA ${data}"
403
+ },
318
404
  "aria-required-attr": {
319
405
  "pass": "Tous les attributs ARIA requis sont présents",
320
- "fail": "{{=it.data && it.data.length > 1 ? 'Attributs ARIA requis absents' : 'Attribut ARIA requis absent'}} : {{~it.data:value}} {{=value}}{{~}}"
406
+ "fail": {
407
+ "singular": "L'attribut ARIA requis est manquant: ${data.values}",
408
+ "plural": "Les attributs ARIA requis sont manquants: ${data.values}"
409
+ }
321
410
  },
322
411
  "aria-required-children": {
323
412
  "pass": "Les descendants ARIA requis sont présents",
324
- "fail": "{{=it.data && it.data.length > 1 ? 'Descendants ARIA requis absents' : 'Descendant ARIA requis absent'}} : {{~it.data:value}} {{=value}}{{~}}",
325
- "incomplete": "{{=it.data && it.data.length > 1 ? 'Les descendants requièrent' : 'Le descendant requiert'}} le rôle ARIA : {{~it.data:value}} {{=value}}{{~}}"
413
+ "fail": {
414
+ "singular": "Le descendant ARIA requis est manquant: ${data.values}",
415
+ "plural": "Les descendants ARIA requis sont manquants: ${data.values}"
416
+ },
417
+ "incomplete": {
418
+ "singular": "Le rôle du descendant ARIA attendu doit être ajouté: ${data.values}",
419
+ "plural": "Les rôles des descendants ARIA attendus doivent être ajoutés: ${data.values}"
420
+ }
326
421
  },
327
422
  "aria-required-parent": {
328
423
  "pass": "Les rôles parents ARIA requis sont présents",
329
- "fail": "{{=it.data && it.data.length > 1 ? 'Rôles parents ARIA requis absents' : 'Rôle parent ARIA requis absent'}} : {{~it.data:value}} {{=value}}{{~}}"
424
+ "fail": {
425
+ "singular": "Le rôle parent ARIA requis est manquant: ${data.values}",
426
+ "plural": "Les rôles parents ARIA requis sont manquants: ${data.values}"
427
+ }
428
+ },
429
+ "aria-unsupported-attr": {
430
+ "pass": "L'attribut ARIA est supporté",
431
+ "fail": "L'attribut ARIA n'est pas suffisamment supporté par les lecteurs d'écran et autres technologies d'assistance: ${data.values}"
330
432
  },
331
433
  "unsupportedrole": {
332
434
  "pass": "Le rôle ARIA est supporté",
@@ -334,11 +436,21 @@
334
436
  },
335
437
  "aria-valid-attr-value": {
336
438
  "pass": "Les valeurs d’attribut ARIA sont valides",
337
- "fail": "{{=it.data && it.data.length > 1 ? 'Valeurs d’attribut ARIA invalides' : 'Valeur d’attribut ARIA invalide'}} : {{~it.data:value}} {{=value}}{{~}}"
439
+ "fail": {
440
+ "singular": "La valeur d’attribut ARIA est invalide: ${data.values}",
441
+ "plural": "Les valeurs d’attribut ARIA sont invalides: ${data.values}"
442
+ },
443
+ "incomplete": {
444
+ "singular": "Le id de l'attribut ARIA de l'élément n'existe pas dans cette page: ${data.values}",
445
+ "plural": "Le id de l'attribut ARIA des éléments n'existent pas dans cette page: ${data.values}"
446
+ }
338
447
  },
339
448
  "aria-valid-attr": {
340
449
  "pass": "{{=it.data && it.data.length > 1 ? 'Les noms d’attributs ARIA sont valides' : 'Le nom d’attribut ARIA est valide'}}",
341
- "fail": "{{=it.data && it.data.length > 1 ? 'Noms d’attributs ARIA invalides' : 'Nom d’attribut ARIA invalide'}} : {{~it.data:value}} {{=value}}{{~}}"
450
+ "fail": {
451
+ "singular": "Le nom d’attribut ARIA est invalide: ${data.values}",
452
+ "plural": "Les noms d’attributs ARIA sont invalides: ${data.values}"
453
+ }
342
454
  },
343
455
  "valid-scrollable-semantics": {
344
456
  "pass": "L’élément a une sémantique valide pour un élément dans l’ordre de tabulation.",
@@ -348,6 +460,7 @@
348
460
  "pass": "L’élément a un contraste de couleurs suffisant de {{=it.data.contrastRatio}}",
349
461
  "fail": "L’élément a un contraste de couleurs insuffisant de {{=it.data.contrastRatio}} (couleur du texte : {{=it.data.fgColor}}, couleur d’arrière-plan : {{=it.data.bgColor}}, corps : {{=it.data.fontSize}}, graisse : {{=it.data.fontWeight}}). Le rapport de contraste attendu est {{=it.data.expectedContrastRatio}}",
350
462
  "incomplete": {
463
+ "default": "Impossible de déterminer le rapport de contraste",
351
464
  "bgImage": "La couleur d’arrière-plan de l’élément n’a pu être déterminée à cause d’une image d’arrière-plan",
352
465
  "bgGradient": "La couleur d’arrière-plan de l’élément n’a pu être déterminée à cause d’un dégradé d’arrière-plan",
353
466
  "imgNode": "La couleur d’arrière-plan de l’élément n’a pu être déterminée, car l’élément contient une balise image",
@@ -357,19 +470,19 @@
357
470
  "elmPartiallyObscuring": "La couleur d’arrière-plan de l’élément n’a pu être déterminée, car il chevauche partiellement un autre élément",
358
471
  "outsideViewport": "La couleur d’arrière-plan de l’élément n’a pu être déterminée, car il est à l’extérieur du viewport",
359
472
  "equalRatio": "L’élément a un rapport de contraste de 1:1 avec son arrière-plan",
360
- "default": "Impossible de déterminer le rapport de contraste"
473
+ "shortTextContent": "Le contenu de l'élément est trop court pour déterminer S'il s'agit réellement de contenu textuel"
361
474
  }
362
475
  },
363
476
  "link-in-text-block": {
364
477
  "pass": "Les liens peuvent être distingués du texte environnant par un autre moyen que la couleur",
365
478
  "fail": "Les liens doivent se distinguer du texte environnant par un autre moyen que la couleur",
366
479
  "incomplete": {
480
+ "default": "Impossible de déterminer le rapport de contraste",
367
481
  "bgContrast": "Le rapport de contraste de l’élément n’a pu être déterminé. Recherchez un style différent pour le hover/focus.",
368
482
  "bgImage": "Le rapport de contraste de l’élément n’a pu être déterminé à cause d’une image d’arrière-plan",
369
483
  "bgGradient": "Le rapport de contraste de l’élément n’a pu être déterminé à cause d’un dégradé d’arrière-plan",
370
484
  "imgNode": "Le rapport de contraste de l’élément n’a pu être déterminé, car l’élément contient une balise image",
371
- "bgOverlap": "Le rapport de contraste de l’élément n’a pu être déterminé à cause d’un chevauchement",
372
- "default": "Impossible de déterminer le rapport de contraste"
485
+ "bgOverlap": "Le rapport de contraste de l’élément n’a pu être déterminé à cause d’un chevauchement"
373
486
  }
374
487
  },
375
488
  "autocomplete-appropriate": {
@@ -382,20 +495,47 @@
382
495
  },
383
496
  "fieldset": {
384
497
  "pass": "L’élément est contenu dans un fieldset",
385
- "fail": "{{var code = it.data && it.data.failureCode;}}{{? code === 'no-legend'}}Le fieldset n’a pas de legend en premier descendant direct{{?? code === 'empty-legend'}}L’élément legend n’a pas de texte discernable par les lecteurs d’écran{{?? code === 'mixed-inputs'}}Le fieldset contient des champs non liés{{?? code === 'no-group-label'}}Le groupe ARIA n’a pas d’attribut aria-label ou aria-labelledby{{?? code === 'group-mixed-inputs'}}Le groupe ARIA contient des champs non liés {{??}}L’élément n’est contenu ni dans un fieldset ni dans un groupe ARIA{{?}}"
498
+ "fail": {
499
+ "default": "L’élément n'est pas contenu dans un fieldset ou un ARIA group",
500
+ "no-legend": "Le fieldset ne possède pas un legend comme descendant direct",
501
+ "empty-legend": "Le legend n'offre pas de texte visible pour les lecteurs d'écran",
502
+ "mixed-inputs": "Le fieldset contient des contrôles sans rapports directs",
503
+ "no-group-label": "Le ARIA group ne possèdee pas de aria-label ou aria-labelledby",
504
+ "group-mixed-inputs": "Le ARIA group contient des contrôles sans rapports directs"
505
+ }
386
506
  },
387
507
  "group-labelledby": {
388
508
  "pass": "Tous les éléments avec le nom \"{{=it.data.name}}\" font référence au même élément avec aria-labelledby",
389
- "fail": "Tous les éléments avec le nom \"{{=it.data.name}}\" ne font pas référence au même élément avec aria-labelledby"
509
+ "fail": {
510
+ "default": "Les éléments avec le nom \"${data.name}\" ne possèdent pas à la fois une étiquette commune, et une étiquette unique référencée par aria-labelledby",
511
+ "no-shared-label": "Les éléments avec le nom \"${data.name}\" ne partagent pas tous une étiquette commune, référencée par aria-labelledby",
512
+ "no-unique-label": "Les éléments avec le nom \"${data.name}\" n'ont pas tous une étiquette unique, référencée par aria-labelledby"
513
+ }
390
514
  },
391
515
  "accesskeys": {
392
516
  "pass": "La valeur de l'attribut accesskey est unique",
393
517
  "fail": "Plusieurs éléments ont le même accesskey au sein du document"
394
518
  },
519
+ "focusable-content": {
520
+ "pass": "L'élément contient des éléments focalisables",
521
+ "fail": "L'élément devrait avoir du contenu focalisable"
522
+ },
523
+ "focusable-disabled": {
524
+ "pass": "Aucun élément focalisable contenu dans l'élément",
525
+ "fail": "Le contenu focalisable devrait être désactivé ou retiré du DOM"
526
+ },
527
+ "focusable-element": {
528
+ "pass": "L'élément est focalisable",
529
+ "fail": "L'élément devrait être focalisable"
530
+ },
395
531
  "focusable-no-name": {
396
532
  "pass": "L’élément n’est pas dans l’ordre de tabulation ou a un intitulé accessible",
397
533
  "fail": "L’élément est dans l’ordre de tabulation et n’a pas d’intitulé accessible"
398
534
  },
535
+ "focusable-not-tabbable": {
536
+ "pass": "Aucun élément focalisable contenu dans l'élément",
537
+ "fail": "Le contenu focalisable devrait se voir assigné un tabindex='-1' ou être retiré du DOM"
538
+ },
399
539
  "landmark-is-top-level": {
400
540
  "pass": "La région {{=it.data.role }} est au niveau le plus haut.",
401
541
  "fail": "La région {{=it.data.role }} est contenue dans une autre région."
@@ -424,6 +564,10 @@
424
564
  "pass": "L’élément n’a pas de tabindex supérieur à 0",
425
565
  "fail": "L’élément a un tabindex supérieur à 0"
426
566
  },
567
+ "alt-space-value": {
568
+ "pass": "L'élément a une valeur d'attribut alt valide",
569
+ "fail": "L'élément a un attribut alt qui contient un caractères d'espacement, qui n'est pas ignoré par les lecteurs d'écran"
570
+ },
427
571
  "duplicate-img-label": {
428
572
  "pass": "L’élément ne duplique pas un texte existant dans l’alternative textuelle de l’élément <img>",
429
573
  "fail": "L’élément contient un élément <img> dont l’alternative textuelle duplique un texte existant"
@@ -444,14 +588,22 @@
444
588
  "pass": "L’élément de formulaire a un <label> implicite (imbriqué)",
445
589
  "fail": "L’élément de formulaire n’a pas de <label> implicite (imbriqué)"
446
590
  },
591
+ "label-content-name-mismatch": {
592
+ "pass": "L'élément contient du texte visible qui n'est pas inclus dans l'intitulé accessible",
593
+ "fail": "Le texte contenu dans l'élément n'est pas inclus dans l'intitulé accessible"
594
+ },
447
595
  "multiple-label": {
448
596
  "pass": "L’élément de formulaire n’a pas plusieurs éléments <label>",
449
- "fail": "L’élément de formulaire a plusieurs éléments <label>"
597
+ "incomplete": "Des éléments associés à plusieurs étiquettes ne sont pas suffisamment supportés par les teechnologies d'assistance. S'assurer que la première étiquette contient toute l'information nécessaire."
450
598
  },
451
599
  "title-only": {
452
600
  "pass": "L’élément de formulaire n’a pas uniquement l’attribut title comme étiquette",
453
601
  "fail": "Seul l’attribut title est utilisé comme étiquette pour l’élément de formulaire"
454
602
  },
603
+ "landmark-is-unique": {
604
+ "pass": "Les landmarks doivent comporter un rôle unique, ou une étiquette accessible par la combinaison de role/label/title",
605
+ "fail": "L'attribut landmark doit comporter une valeur d'attribut aria-label, aria-labelledby, ou title unique pour rendre le landmark distinct"
606
+ },
455
607
  "has-lang": {
456
608
  "pass": "L’élément <html> a un attribut lang",
457
609
  "fail": "L’élément <html> n’a pas d’attribut lang"
@@ -470,7 +622,10 @@
470
622
  },
471
623
  "listitem": {
472
624
  "pass": "L’item de liste a un élément <ul>, <ol> ou role=\"list\" parent",
473
- "fail": "L’item de liste n’a pas d’élément <ul>, <ol> ou role=\"list\" parent"
625
+ "fail": {
626
+ "default": "L'item de liste n'a pas d'élément <ul> ou <ol> parent",
627
+ "roleNotValid": "L'item de liste n'a pas d'élément <ul> ou <ol> parent sans un role ou un role=\"list\""
628
+ }
474
629
  },
475
630
  "only-dlitems": {
476
631
  "pass": "L’élément de liste n’a que des descendants directs qui sont autorisés dans les éléments <dt> ou <dd>",
@@ -478,7 +633,10 @@
478
633
  },
479
634
  "only-listitems": {
480
635
  "pass": "L’élément de liste n’a que des descendants directs qui sont autorisés dans les éléments <li>",
481
- "fail": "L’élément de liste a des descendants directs qui ne sont pas autorisés dans les éléments <li>"
636
+ "fail": {
637
+ "default": "L’élément de liste comporte des descendants directs qui ne sont pas autorisés à l'intérieur de l'élément <li>",
638
+ "roleNotValid": "L’élément de liste comporte des descendants directs avec un rôle qui n'est pas autorisé: ${data.roles}"
639
+ }
482
640
  },
483
641
  "structured-dlitems": {
484
642
  "pass": "S’il n’est pas vide, l’élément contient au moins un élément <dt> et un élément <dd>",
@@ -486,12 +644,10 @@
486
644
  },
487
645
  "caption": {
488
646
  "pass": "L’élément multimédia a une piste de sous-titres",
489
- "fail": "L’élément multimédia n’a pas de piste de sous-titres",
490
647
  "incomplete": "Aucune piste de sous-titres n’a pu être trouvée pour cet élément"
491
648
  },
492
649
  "description": {
493
650
  "pass": "L’élément multimédia a une piste d’audiodescription",
494
- "fail": "L’élément multimédia n’a pas de piste d’audiodescription",
495
651
  "incomplete": "Aucune piste d’audiodescription n’a pu être trouvée pour cet élément"
496
652
  },
497
653
  "frame-tested": {
@@ -499,6 +655,11 @@
499
655
  "fail": "L’iframe n’a pu être testée avec axe-core",
500
656
  "incomplete": "L’iframe doit encore être testée avec axe-core"
501
657
  },
658
+ "css-orientation-lock": {
659
+ "pass": "L'utilisation de l'écran est indépendant de l'orientation et n'est pas limitée à un mode d'affichage donné",
660
+ "fail": "L'utilisation de l'écran est limitée à une orientation donnée par CSS, rendant l'affichage inutilisable",
661
+ "incomplete": "Le verouillage de l'orientation d'affichage par CSS ne peut être déterminé"
662
+ },
502
663
  "meta-viewport-large": {
503
664
  "pass": "La balise <meta> ne limite pas l’agrandissement sur les appareils mobiles",
504
665
  "fail": "La balise <meta> limite l’agrandissement sur les appareils mobiles"
@@ -544,6 +705,18 @@
544
705
  "pass": "L’attribut title de l’élément est unique",
545
706
  "fail": "L’attribut title de l’élément n’est pas unique"
546
707
  },
708
+ "duplicate-id-active": {
709
+ "pass": "Le document ne comporte aucun élément actif partageant la même valeur d'attribut id",
710
+ "fail": "Le document comporte ou un plusieurs éléments actifs partageant la même valeur d'attribut id: ${data}"
711
+ },
712
+ "duplicate-id-aria": {
713
+ "pass": "Le document ne comporte aucun élément référencés par ARIA ou étiquettes partageant la même valeur d'attribut id",
714
+ "fail": "Le document comporte un ou plusieurs éléments référencés par ARIA partageant la même valeur d'attribut id: ${data}"
715
+ },
716
+ "duplicate-id": {
717
+ "pass": "Le document n’a pas d’éléments qui partagent le même attribut id",
718
+ "fail": "Le document a plusieurs éléments avec le même attribut id : {{=it.data}}"
719
+ },
547
720
  "aria-label": {
548
721
  "pass": "L’attribut aria-label existe et n’est pas vide",
549
722
  "fail": "L’attribut aria-label n’existe pas ou est vide"
@@ -552,6 +725,13 @@
552
725
  "pass": "L’attribut aria-labelledby existe et fait référence à des éléments visibles par les lecteurs d’écran",
553
726
  "fail": "L’attribut aria-labelledby n’existe pas, fait référence à des éléments qui n’existent pas ou à des éléments vides ou non visibles"
554
727
  },
728
+ "avoid-inline-spacing": {
729
+ "pass": "Aucun style inline affectant l'espacement du texte avec '!important' n'a été spécifié",
730
+ "fail": {
731
+ "singular": "Retirer '!important' du style inline ${data.values}, car le remplacement n'est pas pris en charge par la plupart des navigateurs",
732
+ "plural": "Retirer '!important' des styles inline ${data.values}, car le remplacement n'est pas pris en charge par la plupart des navigateurs"
733
+ }
734
+ },
555
735
  "button-has-visible-text": {
556
736
  "pass": "L’élément a un contenu textuel visible par les lecteurs d’écran",
557
737
  "fail": "L’élément n’a aucun contenu textuel visible par les lecteurs d’écran"
@@ -560,13 +740,9 @@
560
740
  "pass": "Le document a un élément <title> non vide",
561
741
  "fail": "Le document n’a pas d’élément <title> non vide"
562
742
  },
563
- "duplicate-id": {
564
- "pass": "Le document n’a pas d’éléments qui partagent le même attribut id",
565
- "fail": "Le document a plusieurs éléments avec le même attribut id : {{=it.data}}"
566
- },
567
743
  "exists": {
568
744
  "pass": "L’élément n’existe pas",
569
- "fail": "L’élément existe"
745
+ "incomplete": "Element exists"
570
746
  },
571
747
  "has-alt": {
572
748
  "pass": "L’élément a un attribut alt",
@@ -585,7 +761,10 @@
585
761
  "fail": "L’élément n’a pas d'attribut alt ou l’attribut alt est vide"
586
762
  },
587
763
  "non-empty-if-present": {
588
- "pass": "L’élément {{?it.data}}a un attribut value non vide{{??}}n’a pas d’attribut value{{?}}",
764
+ "pass": {
765
+ "default": "L'élément n'a pas d'attribut value",
766
+ "has-label": "L'élément a un attribut value non-vide"
767
+ },
589
768
  "fail": "L’élément a un attribut value, et cet attribut est vide"
590
769
  },
591
770
  "non-empty-title": {
@@ -659,5 +838,5 @@
659
838
  "failureMessage": "Corriger tous les éléments suivants : {{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
660
839
  }
661
840
  },
662
- "incompleteFallbackMessage": "Corriger tous les éléments suivants : {{~it:value}}\n {{=value.split('\\n').join('\\n ')}}{{~}}"
841
+ "incompleteFallbackMessage": "axe n'a pu en déterminer la raison. Il est temps de sortir l'inspecteur d'éléments!"
663
842
  }