testilo 3.2.0 → 3.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -3
- package/compare.js +8 -8
- package/package.json +1 -1
- package/procs/compare/cp0/index.html +10 -5
- package/procs/compare/cp0/index.js +2 -4
- package/procs/compare/cp1/index.html +46 -0
- package/procs/compare/cp1/index.js +71 -0
- package/procs/digest/dp10a/index.html +3 -3
- package/procs/digest/dp10b/index.html +74 -0
- package/procs/digest/dp10b/index.js +130 -0
- package/procs/digest/dp10c/index.html +55 -0
- package/procs/digest/dp10c/index.js +129 -0
- package/procs/score/sp10b.js +507 -0
- package/procs/score/sp10c.js +465 -0
- package/reports/comparative/railsites.html +47 -0
- package/reports/comparative/style.css +4 -0
- package/reports/digested/35k1r-railpass.html +1130 -844
- package/reports/digested/3aee6-eurail.html +36233 -0
- package/reports/digested/dp10a/35k1r-railpass.html +9302 -0
- package/reports/digested/dp10a/3aee6-eurail.html +35782 -0
- package/reports/digested/style.css +2 -2
- package/reports/raw/3aee6-eurail.json +35250 -0
- package/reports/scored/35k1r-railpass.json +559 -175
- package/reports/scored/3aee6-eurail.json +35957 -0
- package/score.js +1 -1
- package/scoring/data/duplications.json +22 -22
- package/scoring/data/groups.json +335 -0
- package/scoring/data/packageRules/alfa.tsv +82 -0
- package/scoring/data/packageRules/axe.js +390 -0
- package/scoring/data/packageRules/ibm.tsv +159 -0
- package/scoring/data/packageRules/tenon.tsv +14 -0
- package/scoring/data/packageRules/wave.json +1617 -0
- package/scoring/data/packageRules/wave.tsv +55 -0
- package/scoring/data/testGroups.json +1067 -0
- package/scoring/{data → procs}/correlation.js +0 -0
- package/scoring/{data → procs}/dupCounts.js +0 -0
- package/scoring/procs/groups.js +61 -0
- package/scoring/{data → procs}/packageData.js +0 -0
- package/scoring/{data → procs}/packageIssues.js +0 -0
- package/scoring/procs/regroup.js +39 -0
- package/reports/comparative/35k1r-.html +0 -41
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
const rules = {
|
|
2
|
+
accesskeys: {
|
|
3
|
+
description: 'Ensures every accesskey attribute value is unique',
|
|
4
|
+
help: 'accesskey attribute value should be unique'
|
|
5
|
+
},
|
|
6
|
+
'area-alt': {
|
|
7
|
+
description: 'Ensures <area> elements of image maps have alternate text',
|
|
8
|
+
help: 'Active <area> elements must have alternate text'
|
|
9
|
+
},
|
|
10
|
+
'aria-allowed-attr': {
|
|
11
|
+
description: 'Ensures ARIA attributes are allowed for an element\'s role',
|
|
12
|
+
help: 'Elements must only use allowed ARIA attributes'
|
|
13
|
+
},
|
|
14
|
+
'aria-allowed-role': {
|
|
15
|
+
description: 'Ensures role attribute has an appropriate value for the element',
|
|
16
|
+
help: 'ARIA role should be appropriate for the element'
|
|
17
|
+
},
|
|
18
|
+
'aria-command-name': {
|
|
19
|
+
description: 'Ensures every ARIA button, link and menuitem has an accessible name',
|
|
20
|
+
help: 'ARIA commands must have an accessible name'
|
|
21
|
+
},
|
|
22
|
+
'aria-dialog-name': {
|
|
23
|
+
description: 'Ensures every ARIA dialog and alertdialog node has an accessible name',
|
|
24
|
+
help: 'ARIA dialog and alertdialog nodes should have an accessible name'
|
|
25
|
+
},
|
|
26
|
+
'aria-hidden-body': {
|
|
27
|
+
description: 'Ensures aria-hidden=\'true\' is not present on the document body.',
|
|
28
|
+
help: 'aria-hidden=\'true\' must not be present on the document body'
|
|
29
|
+
},
|
|
30
|
+
'aria-hidden-focus': {
|
|
31
|
+
description: 'Ensures aria-hidden elements are not focusable nor contain focusable elements',
|
|
32
|
+
help: 'ARIA hidden element must not be focusable or contain focusable elements'
|
|
33
|
+
},
|
|
34
|
+
'aria-input-field-name': {
|
|
35
|
+
description: 'Ensures every ARIA input field has an accessible name',
|
|
36
|
+
help: 'ARIA input fields must have an accessible name'
|
|
37
|
+
},
|
|
38
|
+
'aria-meter-name': {
|
|
39
|
+
description: 'Ensures every ARIA meter node has an accessible name',
|
|
40
|
+
help: 'ARIA meter nodes must have an accessible name'
|
|
41
|
+
},
|
|
42
|
+
'aria-progressbar-name': {
|
|
43
|
+
description: 'Ensures every ARIA progressbar node has an accessible name',
|
|
44
|
+
help: 'ARIA progressbar nodes must have an accessible name'
|
|
45
|
+
},
|
|
46
|
+
'aria-required-attr': {
|
|
47
|
+
description: 'Ensures elements with ARIA roles have all required ARIA attributes',
|
|
48
|
+
help: 'Required ARIA attributes must be provided'
|
|
49
|
+
},
|
|
50
|
+
'aria-required-children': {
|
|
51
|
+
description: 'Ensures elements with an ARIA role that require child roles contain them',
|
|
52
|
+
help: 'Certain ARIA roles must contain particular children'
|
|
53
|
+
},
|
|
54
|
+
'aria-required-parent': {
|
|
55
|
+
description: 'Ensures elements with an ARIA role that require parent roles are contained by them',
|
|
56
|
+
help: 'Certain ARIA roles must be contained by particular parents'
|
|
57
|
+
},
|
|
58
|
+
'aria-roledescription': {
|
|
59
|
+
description: 'Ensure aria-roledescription is only used on elements with an implicit or explicit role',
|
|
60
|
+
help: 'aria-roledescription must be on elements with a semantic role'
|
|
61
|
+
},
|
|
62
|
+
'aria-roles': {
|
|
63
|
+
description: 'Ensures all elements with a role attribute use a valid value',
|
|
64
|
+
help: 'ARIA roles used must conform to valid values'
|
|
65
|
+
},
|
|
66
|
+
'aria-text': {
|
|
67
|
+
description: 'Ensures "role=text" is used on elements with no focusable descendants',
|
|
68
|
+
help: '"role=text" should have no focusable descendants'
|
|
69
|
+
},
|
|
70
|
+
'aria-toggle-field-name': {
|
|
71
|
+
description: 'Ensures every ARIA toggle field has an accessible name',
|
|
72
|
+
help: 'ARIA toggle fields must have an accessible name'
|
|
73
|
+
},
|
|
74
|
+
'aria-tooltip-name': {
|
|
75
|
+
description: 'Ensures every ARIA tooltip node has an accessible name',
|
|
76
|
+
help: 'ARIA tooltip nodes must have an accessible name'
|
|
77
|
+
},
|
|
78
|
+
'aria-treeitem-name': {
|
|
79
|
+
description: 'Ensures every ARIA treeitem node has an accessible name',
|
|
80
|
+
help: 'ARIA treeitem nodes should have an accessible name'
|
|
81
|
+
},
|
|
82
|
+
'aria-valid-attr-value': {
|
|
83
|
+
description: 'Ensures all ARIA attributes have valid values',
|
|
84
|
+
help: 'ARIA attributes must conform to valid values'
|
|
85
|
+
},
|
|
86
|
+
'aria-valid-attr': {
|
|
87
|
+
description: 'Ensures attributes that begin with aria- are valid ARIA attributes',
|
|
88
|
+
help: 'ARIA attributes must conform to valid names'
|
|
89
|
+
},
|
|
90
|
+
'audio-caption': {
|
|
91
|
+
description: 'Ensures <audio> elements have captions',
|
|
92
|
+
help: '<audio> elements must have a captions track'
|
|
93
|
+
},
|
|
94
|
+
'autocomplete-valid': {
|
|
95
|
+
description: 'Ensure the autocomplete attribute is correct and suitable for the form field',
|
|
96
|
+
help: 'autocomplete attribute must be used correctly'
|
|
97
|
+
},
|
|
98
|
+
'avoid-inline-spacing': {
|
|
99
|
+
description: 'Ensure that text spacing set through style attributes can be adjusted with custom stylesheets',
|
|
100
|
+
help: 'Inline text spacing must be adjustable with custom stylesheets'
|
|
101
|
+
},
|
|
102
|
+
blink: {
|
|
103
|
+
description: 'Ensures <blink> elements are not used',
|
|
104
|
+
help: '<blink> elements are deprecated and must not be used'
|
|
105
|
+
},
|
|
106
|
+
'button-name': {
|
|
107
|
+
description: 'Ensures buttons have discernible text',
|
|
108
|
+
help: 'Buttons must have discernible text'
|
|
109
|
+
},
|
|
110
|
+
bypass: {
|
|
111
|
+
description: 'Ensures each page has at least one mechanism for a user to bypass navigation and jump straight to the content',
|
|
112
|
+
help: 'Page must have means to bypass repeated blocks'
|
|
113
|
+
},
|
|
114
|
+
'color-contrast-enhanced': {
|
|
115
|
+
description: 'Ensures the contrast between foreground and background colors meets WCAG 2 AAA contrast ratio thresholds',
|
|
116
|
+
help: 'Elements must have sufficient color contrast'
|
|
117
|
+
},
|
|
118
|
+
'color-contrast': {
|
|
119
|
+
description: 'Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds',
|
|
120
|
+
help: 'Elements must have sufficient color contrast'
|
|
121
|
+
},
|
|
122
|
+
'css-orientation-lock': {
|
|
123
|
+
description: 'Ensures content is not locked to any specific display orientation, and the content is operable in all display orientations',
|
|
124
|
+
help: 'CSS Media queries must not lock display orientation'
|
|
125
|
+
},
|
|
126
|
+
'definition-list': {
|
|
127
|
+
description: 'Ensures <dl> elements are structured correctly',
|
|
128
|
+
help: '<dl> elements must only directly contain properly-ordered <dt> and <dd> groups, <script>, <template> or <div> elements'
|
|
129
|
+
},
|
|
130
|
+
dlitem: {
|
|
131
|
+
description: 'Ensures <dt> and <dd> elements are contained by a <dl>',
|
|
132
|
+
help: '<dt> and <dd> elements must be contained by a <dl>'
|
|
133
|
+
},
|
|
134
|
+
'document-title': {
|
|
135
|
+
description: 'Ensures each HTML document contains a non-empty <title> element',
|
|
136
|
+
help: 'Documents must have <title> element to aid in navigation'
|
|
137
|
+
},
|
|
138
|
+
'duplicate-id-active': {
|
|
139
|
+
description: 'Ensures every id attribute value of active elements is unique',
|
|
140
|
+
help: 'IDs of active elements must be unique'
|
|
141
|
+
},
|
|
142
|
+
'duplicate-id-aria': {
|
|
143
|
+
description: 'Ensures every id attribute value used in ARIA and in labels is unique',
|
|
144
|
+
help: 'IDs used in ARIA and labels must be unique'
|
|
145
|
+
},
|
|
146
|
+
'duplicate-id': {
|
|
147
|
+
description: 'Ensures every id attribute value is unique',
|
|
148
|
+
help: 'id attribute value must be unique'
|
|
149
|
+
},
|
|
150
|
+
'empty-heading': {
|
|
151
|
+
description: 'Ensures headings have discernible text',
|
|
152
|
+
help: 'Headings should not be empty'
|
|
153
|
+
},
|
|
154
|
+
'empty-table-header': {
|
|
155
|
+
description: 'Ensures table headers have discernible text',
|
|
156
|
+
help: 'Table header text must not be empty'
|
|
157
|
+
},
|
|
158
|
+
'focus-order-semantics': {
|
|
159
|
+
description: 'Ensures elements in the focus order have a role appropriate for interactive content',
|
|
160
|
+
help: 'Elements in the focus order should have an appropriate role'
|
|
161
|
+
},
|
|
162
|
+
'form-field-multiple-labels': {
|
|
163
|
+
description: 'Ensures form field does not have multiple label elements',
|
|
164
|
+
help: 'Form field must not have multiple label elements'
|
|
165
|
+
},
|
|
166
|
+
'frame-focusable-content': {
|
|
167
|
+
description: 'Ensures <frame> and <iframe> elements with focusable content do not have tabindex=-1',
|
|
168
|
+
help: 'Frames with focusable content must not have tabindex=-1'
|
|
169
|
+
},
|
|
170
|
+
'frame-tested': {
|
|
171
|
+
description: 'Ensures <iframe> and <frame> elements contain the axe-core script',
|
|
172
|
+
help: 'Frames should be tested with axe-core'
|
|
173
|
+
},
|
|
174
|
+
'frame-title-unique': {
|
|
175
|
+
description: 'Ensures <iframe> and <frame> elements contain a unique title attribute',
|
|
176
|
+
help: 'Frames should have a unique title attribute'
|
|
177
|
+
},
|
|
178
|
+
'frame-title': {
|
|
179
|
+
description: 'Ensures <iframe> and <frame> elements have an accessible name',
|
|
180
|
+
help: 'Frames must have an accessible name'
|
|
181
|
+
},
|
|
182
|
+
'heading-order': {
|
|
183
|
+
description: 'Ensures the order of headings is semantically correct',
|
|
184
|
+
help: 'Heading levels should only increase by one'
|
|
185
|
+
},
|
|
186
|
+
'hidden-content': {
|
|
187
|
+
description: 'Informs users about hidden content.',
|
|
188
|
+
help: 'Hidden content on the page should be analyzed'
|
|
189
|
+
},
|
|
190
|
+
'html-has-lang': {
|
|
191
|
+
description: 'Ensures every HTML document has a lang attribute',
|
|
192
|
+
help: '<html> element must have a lang attribute'
|
|
193
|
+
},
|
|
194
|
+
'html-lang-valid': {
|
|
195
|
+
description: 'Ensures the lang attribute of the <html> element has a valid value',
|
|
196
|
+
help: '<html> element must have a valid value for the lang attribute'
|
|
197
|
+
},
|
|
198
|
+
'html-xml-lang-mismatch': {
|
|
199
|
+
description: 'Ensure that HTML elements with both valid lang and xml:lang attributes agree on the base language of the page',
|
|
200
|
+
help: 'HTML elements with lang and xml:lang must have the same base language'
|
|
201
|
+
},
|
|
202
|
+
'identical-links-same-purpose': {
|
|
203
|
+
description: 'Ensure that links with the same accessible name serve a similar purpose',
|
|
204
|
+
help: 'Links with the same name must have a similar purpose'
|
|
205
|
+
},
|
|
206
|
+
'image-alt': {
|
|
207
|
+
description: 'Ensures <img> elements have alternate text or a role of none or presentation',
|
|
208
|
+
help: 'Images must have alternate text'
|
|
209
|
+
},
|
|
210
|
+
'image-redundant-alt': {
|
|
211
|
+
description: 'Ensure image alternative is not repeated as text',
|
|
212
|
+
help: 'Alternative text of images should not be repeated as text'
|
|
213
|
+
},
|
|
214
|
+
'input-button-name': {
|
|
215
|
+
description: 'Ensures input buttons have discernible text',
|
|
216
|
+
help: 'Input buttons must have discernible text'
|
|
217
|
+
},
|
|
218
|
+
'input-image-alt': {
|
|
219
|
+
description: 'Ensures <input type="image"> elements have alternate text',
|
|
220
|
+
help: 'Image buttons must have alternate text'
|
|
221
|
+
},
|
|
222
|
+
'label-content-name-mismatch': {
|
|
223
|
+
description: 'Ensures that elements labelled through their content must have their visible text as part of their accessible name',
|
|
224
|
+
help: 'Elements must have their visible text as part of their accessible name'
|
|
225
|
+
},
|
|
226
|
+
'label-title-only': {
|
|
227
|
+
description: 'Ensures that every form element has a visible label and is not solely labeled using hidden labels, or the title or aria-describedby attributes',
|
|
228
|
+
help: 'Form elements should have a visible label'
|
|
229
|
+
},
|
|
230
|
+
label: {
|
|
231
|
+
description: 'Ensures every form element has a label',
|
|
232
|
+
help: 'Form elements must have labels'
|
|
233
|
+
},
|
|
234
|
+
'landmark-banner-is-top-level': {
|
|
235
|
+
description: 'Ensures the banner landmark is at top level',
|
|
236
|
+
help: 'Banner landmark should not be contained in another landmark'
|
|
237
|
+
},
|
|
238
|
+
'landmark-complementary-is-top-level': {
|
|
239
|
+
description: 'Ensures the complementary landmark or aside is at top level',
|
|
240
|
+
help: 'Aside should not be contained in another landmark'
|
|
241
|
+
},
|
|
242
|
+
'landmark-contentinfo-is-top-level': {
|
|
243
|
+
description: 'Ensures the contentinfo landmark is at top level',
|
|
244
|
+
help: 'Contentinfo landmark should not be contained in another landmark'
|
|
245
|
+
},
|
|
246
|
+
'landmark-main-is-top-level': {
|
|
247
|
+
description: 'Ensures the main landmark is at top level',
|
|
248
|
+
help: 'Main landmark should not be contained in another landmark'
|
|
249
|
+
},
|
|
250
|
+
'landmark-no-duplicate-banner': {
|
|
251
|
+
description: 'Ensures the document has at most one banner landmark',
|
|
252
|
+
help: 'Document should not have more than one banner landmark'
|
|
253
|
+
},
|
|
254
|
+
'landmark-no-duplicate-contentinfo': {
|
|
255
|
+
description: 'Ensures the document has at most one contentinfo landmark',
|
|
256
|
+
help: 'Document should not have more than one contentinfo landmark'
|
|
257
|
+
},
|
|
258
|
+
'landmark-no-duplicate-main': {
|
|
259
|
+
description: 'Ensures the document has at most one main landmark',
|
|
260
|
+
help: 'Document should not have more than one main landmark'
|
|
261
|
+
},
|
|
262
|
+
'landmark-one-main': {
|
|
263
|
+
description: 'Ensures the document has a main landmark',
|
|
264
|
+
help: 'Document should have one main landmark'
|
|
265
|
+
},
|
|
266
|
+
'landmark-unique': {
|
|
267
|
+
help: 'Ensures landmarks are unique',
|
|
268
|
+
description: 'Landmarks should have a unique role or role/label/title (i.e. accessible name) combination'
|
|
269
|
+
},
|
|
270
|
+
'link-in-text-block': {
|
|
271
|
+
description: 'Ensure links are distinguished from surrounding text in a way that does not rely on color',
|
|
272
|
+
help: 'Links must be distinguishable without relying on color'
|
|
273
|
+
},
|
|
274
|
+
'link-name': {
|
|
275
|
+
description: 'Ensures links have discernible text',
|
|
276
|
+
help: 'Links must have discernible text'
|
|
277
|
+
},
|
|
278
|
+
list: {
|
|
279
|
+
description: 'Ensures that lists are structured correctly',
|
|
280
|
+
help: '<ul> and <ol> must only directly contain <li>, <script> or <template> elements'
|
|
281
|
+
},
|
|
282
|
+
listitem: {
|
|
283
|
+
description: 'Ensures <li> elements are used semantically',
|
|
284
|
+
help: '<li> elements must be contained in a <ul> or <ol>'
|
|
285
|
+
},
|
|
286
|
+
marquee: {
|
|
287
|
+
description: 'Ensures <marquee> elements are not used',
|
|
288
|
+
help: '<marquee> elements are deprecated and must not be used'
|
|
289
|
+
},
|
|
290
|
+
'meta-refresh': {
|
|
291
|
+
description: 'Ensures <meta http-equiv="refresh"> is not used',
|
|
292
|
+
help: 'Timed refresh must not exist'
|
|
293
|
+
},
|
|
294
|
+
'meta-viewport-large': {
|
|
295
|
+
description: 'Ensures <meta name="viewport"> can scale a significant amount',
|
|
296
|
+
help: 'Users should be able to zoom and scale the text up to 500%'
|
|
297
|
+
},
|
|
298
|
+
'meta-viewport': {
|
|
299
|
+
description: 'Ensures <meta name="viewport"> does not disable text scaling and zooming',
|
|
300
|
+
help: 'Zooming and scaling should not be disabled'
|
|
301
|
+
},
|
|
302
|
+
'nested-interactive': {
|
|
303
|
+
description: 'Ensures interactive controls are not nested as they are not always announced by screen readers or can cause focus problems for assistive technologies',
|
|
304
|
+
help: 'Interactive controls must not be nested'
|
|
305
|
+
},
|
|
306
|
+
'no-autoplay-audio': {
|
|
307
|
+
description: 'Ensures <video> or <audio> elements do not autoplay audio for more than 3 seconds without a control mechanism to stop or mute the audio',
|
|
308
|
+
help: '<video> or <audio> elements must not play automatically'
|
|
309
|
+
},
|
|
310
|
+
'object-alt': {
|
|
311
|
+
description: 'Ensures <object> elements have alternate text',
|
|
312
|
+
help: '<object> elements must have alternate text'
|
|
313
|
+
},
|
|
314
|
+
'p-as-heading': {
|
|
315
|
+
description: 'Ensure bold, italic text and font-size is not used to style <p> elements as a heading',
|
|
316
|
+
help: 'Styled <p> elements must not be used as headings'
|
|
317
|
+
},
|
|
318
|
+
'page-has-heading-one': {
|
|
319
|
+
description: 'Ensure that the page, or at least one of its frames contains a level-one heading',
|
|
320
|
+
help: 'Page should contain a level-one heading'
|
|
321
|
+
},
|
|
322
|
+
'presentation-role-conflict': {
|
|
323
|
+
description: 'Flags elements whose role is none or presentation and which cause the role conflict resolution to trigger.',
|
|
324
|
+
help: 'Elements of role none or presentation should be flagged'
|
|
325
|
+
},
|
|
326
|
+
region: {
|
|
327
|
+
description: 'Ensures all page content is contained by landmarks',
|
|
328
|
+
help: 'All page content should be contained by landmarks'
|
|
329
|
+
},
|
|
330
|
+
'role-img-alt': {
|
|
331
|
+
description: 'Ensures [role=\'img\'] elements have alternate text',
|
|
332
|
+
help: '[role=\'img\'] elements must have an alternative text'
|
|
333
|
+
},
|
|
334
|
+
'scope-attr-valid': {
|
|
335
|
+
description: 'Ensures the scope attribute is used correctly on tables',
|
|
336
|
+
help: 'scope attribute should be used correctly'
|
|
337
|
+
},
|
|
338
|
+
'scrollable-region-focusable': {
|
|
339
|
+
description: 'Ensure elements that have scrollable content are accessible by keyboard',
|
|
340
|
+
help: 'Scrollable region must have keyboard access'
|
|
341
|
+
},
|
|
342
|
+
'select-name': {
|
|
343
|
+
description: 'Ensures select element has an accessible name',
|
|
344
|
+
help: 'Select element must have an accessible name'
|
|
345
|
+
},
|
|
346
|
+
'server-side-image-map': {
|
|
347
|
+
description: 'Ensures that server-side image maps are not used',
|
|
348
|
+
help: 'Server-side image maps must not be used'
|
|
349
|
+
},
|
|
350
|
+
'skip-link': {
|
|
351
|
+
description: 'Ensure all skip links have a focusable target',
|
|
352
|
+
help: 'The skip-link target should exist and be focusable'
|
|
353
|
+
},
|
|
354
|
+
'svg-img-alt': {
|
|
355
|
+
description: 'Ensures <svg> elements with an img, graphics-document or graphics-symbol role have an accessible text',
|
|
356
|
+
help: '<svg> elements with an img role must have an alternative text'
|
|
357
|
+
},
|
|
358
|
+
tabindex: {
|
|
359
|
+
description: 'Ensures tabindex attribute values are not greater than 0',
|
|
360
|
+
help: 'Elements should not have tabindex greater than zero'
|
|
361
|
+
},
|
|
362
|
+
'table-duplicate-name': {
|
|
363
|
+
description: 'Ensure the <caption> element does not contain the same text as the summary attribute',
|
|
364
|
+
help: 'tables should not have the same summary and caption'
|
|
365
|
+
},
|
|
366
|
+
'table-fake-caption': {
|
|
367
|
+
description: 'Ensure that tables with a caption use the <caption> element.',
|
|
368
|
+
help: 'Data or header cells must not be used to give caption to a data table.'
|
|
369
|
+
},
|
|
370
|
+
'td-has-header': {
|
|
371
|
+
description: 'Ensure that each non-empty data cell in a <table> larger than 3 by 3 has one or more table headers',
|
|
372
|
+
help: 'Non-empty <td> elements in larger <table> must have an associated table header'
|
|
373
|
+
},
|
|
374
|
+
'td-headers-attr': {
|
|
375
|
+
description: 'Ensure that each cell in a table that uses the headers attribute refers only to other cells in that table',
|
|
376
|
+
help: 'Table cells that use the headers attribute must only refer to cells in the same table'
|
|
377
|
+
},
|
|
378
|
+
'th-has-data-cells': {
|
|
379
|
+
description: 'Ensure that <th> elements and elements with role=columnheader/rowheader have data cells they describe',
|
|
380
|
+
help: 'Table headers in a data table must refer to data cells'
|
|
381
|
+
},
|
|
382
|
+
'valid-lang': {
|
|
383
|
+
description: 'Ensures lang attributes have valid values',
|
|
384
|
+
help: 'lang attribute must have a valid value'
|
|
385
|
+
},
|
|
386
|
+
'video-caption': {
|
|
387
|
+
description: 'Ensures <video> elements have captions',
|
|
388
|
+
help: '<video> elements must have captions'
|
|
389
|
+
}
|
|
390
|
+
};
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
HAAC_Accesskey_NeedLabel An HTML element with an assigned accesskey attribute must have an associated label
|
|
2
|
+
HAAC_ActiveDescendantCheck The aria-activedescendant property must reference the id of a non-empty, non-hidden active child element
|
|
3
|
+
HAAC_Application_Role_Text Non-decorative static text and image content within an element with application role must be accessible
|
|
4
|
+
HAAC_Aria_ErrorMessage A custom error message must reference a valid id value and when triggered the message must be appropriately exposed
|
|
5
|
+
HAAC_Aria_ImgAlt An element with img role must have a non-empty label
|
|
6
|
+
HAAC_Aria_SvgAlt An element with a graphics role must have a non-empty label
|
|
7
|
+
HAAC_Audio_Video_Trigger Media using audio and/or video elements must have keyboard accessible controls
|
|
8
|
+
HAAC_BackgroundImg_HasTextOrTitle Background images that convey important information must have a text alternative that describes the image
|
|
9
|
+
HAAC_Canvas The canvas element may not be accessible
|
|
10
|
+
HAAC_Figure_label A figure element must have an associated label
|
|
11
|
+
HAAC_Img_UsemapAlt An image map and each area element in an image map must have text alternative(s)
|
|
12
|
+
HAAC_Input_Placeholder HTML5 placeholder attribute must not be used as a visible label replacement
|
|
13
|
+
HAAC_List_Group_ListItem List component with group role must limit children to listitem elements
|
|
14
|
+
HAAC_Media_DocumentTrigger2 File download mechanisms should be keyboard-operable and preserve page focus location
|
|
15
|
+
HAAC_Video_HasNoTrack A video element must have a text alternative for any meaningful audio content
|
|
16
|
+
IBMA_Color_Contrast_WCAG2AA The contrast ratio of text with its background must meet WCAG 2.1 AA requirements
|
|
17
|
+
IBMA_Color_Contrast_WCAG2AA_PV The contrast ratio of text with its background must meet WCAG 2.1 AA
|
|
18
|
+
IBMA_Focus_MultiTab Certain components must have no more than one tabbable element
|
|
19
|
+
IBMA_Focus_Tabbable Component must have at least one tabbable element
|
|
20
|
+
RPT_Blink_CSSTrigger1 Do not use the blink value of the text-decoration property for longer than five seconds
|
|
21
|
+
RPT_Block_ShouldBeHeading Heading text must use a heading element
|
|
22
|
+
RPT_Blockquote_HasCite Use blockquote only for quotations, not indentation
|
|
23
|
+
RPT_Blockquote_WrapsTextQuote Quotations should be marked with q or blockquote elements
|
|
24
|
+
RPT_Elem_EventMouseAndKey All interactive content with mouse event handlers must have equivalent keyboard access
|
|
25
|
+
RPT_Elem_UniqueId Element id attribute values must be unique within a document
|
|
26
|
+
RPT_Embed_AutoStart Mechanism must be available to pause or stop and control the volume of the audio that plays automatically
|
|
27
|
+
RPT_Embed_HasAlt Provide alternative content for embed elements
|
|
28
|
+
RPT_Font_ColorInForm Combine color and descriptive markup to indicate required form fields
|
|
29
|
+
RPT_Form_ChangeEmpty A form should not be submitted automatically without warning the user
|
|
30
|
+
RPT_Header_HasContent Heading elements must provide descriptive text
|
|
31
|
+
RPT_Headers_FewWords Heading elements must not be used for presentation
|
|
32
|
+
RPT_Html_SkipNav Provide a way to bypass blocks of content that are repeated on multiple Web pages
|
|
33
|
+
RPT_Img_AltCommonMisuse alt attribute value must be a good inline replacement for the image
|
|
34
|
+
RPT_Img_LongDescription2 The longdesc attribute must reference HTML content
|
|
35
|
+
RPT_Img_UsemapValid Server-side image map hot-spots must have duplicate text links
|
|
36
|
+
RPT_Label_UniqueFor Form controls should have exactly one label
|
|
37
|
+
RPT_List_Misuse List elements should only be used for lists of related items
|
|
38
|
+
RPT_List_UseMarkup Use proper HTML list elements to create lists
|
|
39
|
+
RPT_Media_AltBrief Alternative text in alt attribute should be brief (150 characters)
|
|
40
|
+
RPT_Media_AudioTrigger Audio information should also be available in text form
|
|
41
|
+
RPT_Media_AudioVideoAltFilename Audio or video on the page must have a short text alternative that describes the media content
|
|
42
|
+
RPT_Media_VideoObjectTrigger Live media (streaming video with audio) should have captions for audio content
|
|
43
|
+
RPT_Media_VideoReferenceTrigger Pre-recorded media should have an audio track that describes visual information
|
|
44
|
+
RPT_Meta_Refresh Pages should not refresh automatically
|
|
45
|
+
RPT_Pre_ASCIIArt ASCII art must have a text alternative
|
|
46
|
+
RPT_Script_OnclickHTML1 Scripts should not be used to emulate links
|
|
47
|
+
RPT_Script_OnclickHTML2 Scripts should not be used to emulate links
|
|
48
|
+
RPT_Style_BackgroundImage Images included by using CSS alone must not convey important information
|
|
49
|
+
RPT_Style_ColorSemantics1 Combine color and descriptive markup to convey information
|
|
50
|
+
RPT_Style_HinderFocus1 The keyboard focus indicator must be highly visible when default border or outline is modified by CSS
|
|
51
|
+
RPT_Style_Trigger2 Windows high contrast mode must be supported when using CSS to include, position or alter non-decorative content
|
|
52
|
+
RPT_Table_DataHeadingsAria Data table must identify headers
|
|
53
|
+
RPT_Table_LayoutTrigger Avoid using tables to format text documents in columns unless the table can be linearized
|
|
54
|
+
RPT_Text_SensoryReference Instructions must be meaningful without shape or location words
|
|
55
|
+
RPT_Title_Valid Page title should be a descriptive title, rather than a filename
|
|
56
|
+
Rpt_Aria_ApplicationLandmarkLabel An element with application role must have a label that describes its purpose
|
|
57
|
+
Rpt_Aria_ComplementaryLandmarkLabel_Implicit Each element with complementary role should have a visible label that describes its purpose
|
|
58
|
+
Rpt_Aria_ComplementaryRequiredLabel_Implicit An element with complementary role must have a label
|
|
59
|
+
Rpt_Aria_ContentinfoWithNoMain_Implicit An element with contentinfo role is only permitted with an element with main role
|
|
60
|
+
Rpt_Aria_EmptyPropertyValue When specifying a required ARIA attribute, the value must not be empty
|
|
61
|
+
Rpt_Aria_EventHandlerMissingRole_Native_Host_Sematics Elements with event handlers must have a valid ARIA role
|
|
62
|
+
Rpt_Aria_InvalidTabindexForActivedescendant Element using aria-activedescendant property must have its tabindex attribute value set to 0 or -1
|
|
63
|
+
Rpt_Aria_MissingFocusableChild UI component must have at least one focusable child element for keyboard access
|
|
64
|
+
Rpt_Aria_MissingKeyboardHandler Interactive WAI_ARIA UI components must provide keyboard access
|
|
65
|
+
Rpt_Aria_MultipleApplicationLandmarks Each element with application role must have a unique label that describes its purpose
|
|
66
|
+
Rpt_Aria_MultipleArticleRoles_Implicit Each element with article role must have a unique label that describes its purpose
|
|
67
|
+
Rpt_Aria_MultipleBannerLandmarks_Implicit Each element with banner role must have a unique label that describes its purpose
|
|
68
|
+
Rpt_Aria_MultipleComplementaryLandmarks_Implicit Each element with complementary role must have a unique label that describes its purpose
|
|
69
|
+
Rpt_Aria_MultipleContentinfoInSiblingSet_Implicit A page, document or application should only have one element with contentinfo role
|
|
70
|
+
Rpt_Aria_MultipleContentinfoLandmarks_Implicit Each element with contentinfo role must have a unique label that describes its purpose
|
|
71
|
+
Rpt_Aria_MultipleDocumentRoles All elements with a document role must have unique labels
|
|
72
|
+
Rpt_Aria_MultipleFormLandmarks_Implicit Each element with form role must have a unique label that describes its purpose
|
|
73
|
+
Rpt_Aria_MultipleMainsRequireLabel_Implicit_2 Elements with main role must have unique labels
|
|
74
|
+
Rpt_Aria_MultipleMainsVisibleLabel_Implicit Each element with main role should have a unique visible label that describes its purpose
|
|
75
|
+
Rpt_Aria_MultipleNavigationLandmarks_Implicit Each element with navigation role must have a unique label that describes its purpose
|
|
76
|
+
Rpt_Aria_MultipleRegionsUniqueLabel_Implicit Each element with a region role must have a unique label
|
|
77
|
+
Rpt_Aria_MultipleSearchLandmarks Each element with search role must have a unique label that describes its purpose
|
|
78
|
+
Rpt_Aria_MultipleToolbarUniqueLabel All toolbar components on a page must have unique labels specified
|
|
79
|
+
Rpt_Aria_OneBannerInSiblingSet_Implicit There must be only one element with banner role on the page
|
|
80
|
+
Rpt_Aria_OrphanedContent_Native_Host_Sematics All content must reside within an element with a landmark role
|
|
81
|
+
Rpt_Aria_RegionLabel_Implicit Each element with region role must have a label that describes its purpose
|
|
82
|
+
Rpt_Aria_RequiredChildren_Native_Host_Sematics An element with a ARIA role must contain required children
|
|
83
|
+
Rpt_Aria_RequiredParent_Native_Host_Sematics An element with an implicit or explicit role must be contained within a valid element
|
|
84
|
+
Rpt_Aria_RequiredProperties When using a ARIA role on an element, the required attributes for that role must be defined
|
|
85
|
+
Rpt_Aria_ValidIdRef The ARIA property must reference a non-empty unique id of an existing element that is visible
|
|
86
|
+
Rpt_Aria_ValidProperty ARIA attributes must be valid for the elements role
|
|
87
|
+
Rpt_Aria_ValidPropertyValue ARIA property values must be valid
|
|
88
|
+
Rpt_Aria_ValidRole Elements must have a valid role per ARIA specification
|
|
89
|
+
Rpt_Aria_WidgetLabels_Implicit Interactive component must have a programmatically associated name
|
|
90
|
+
Valerie_Caption_HasContent A caption element for a table element must contain descriptive text
|
|
91
|
+
Valerie_Caption_InTable The caption element must be nested inside the associated table element
|
|
92
|
+
Valerie_Elem_DirValid dir attribute value must be ltr, rtl, or auto
|
|
93
|
+
Valerie_Frame_SrcHtml A frame containing non-HTML content must be made accessible
|
|
94
|
+
Valerie_Label_HasContent A label element must have non-empty descriptive text that identifies the purpose of the interactive component
|
|
95
|
+
Valerie_Noembed_HasContent noembed elements should contain descriptive text
|
|
96
|
+
Valerie_Table_DataCellRelationships For a complex data table, all th and td elements must be related via header or scope attributes
|
|
97
|
+
WCAG20_A_HasText Hyperlinks must have a text description of their purpose
|
|
98
|
+
WCAG20_A_TargetAndText Users should be warned in advance if their input action will open a new window or otherwise change their context
|
|
99
|
+
WCAG20_Applet_HasAlt applet elements must provide an alt attribute and an alternative description
|
|
100
|
+
WCAG20_Area_HasAlt area elements in an image map must have a text alternative
|
|
101
|
+
WCAG20_Body_FirstAContainsSkipText_Native_Host_Sematics The description of a hyperlink used to skip content must communicate where it links to
|
|
102
|
+
WCAG20_Body_FirstASkips_Native_Host_Sematics Pages must provide a way to skip directly to the main content
|
|
103
|
+
WCAG20_Doc_HasTitle The page should have a title that correctly identifies the subject of the page
|
|
104
|
+
WCAG20_Elem_Lang_Valid The language of content must be valid and specified in accordance with BCP 47
|
|
105
|
+
WCAG20_Elem_UniqueAccessKey accesskey attribute values on each element must be unique for the page
|
|
106
|
+
WCAG20_Embed_HasNoEmbed embed elements should be immediately followed by a non-embedded element
|
|
107
|
+
WCAG20_Fieldset_HasLegend fieldset elements must have a single, non-empty legend as a label
|
|
108
|
+
WCAG20_Form_HasSubmit A form element should have a submit button or an image button
|
|
109
|
+
WCAG20_Form_TargetAndText User should be informed in advance when interacting with content causes a change of context
|
|
110
|
+
WCAG20_Frame_HasTitle Inline frames must have a unique, non-empty title attribute
|
|
111
|
+
WCAG20_Html_HasLang Page must identify the default language of the document with a lang attribute
|
|
112
|
+
WCAG20_Img_HasAlt Images must have an alt attribute with a short text alternative if they convey meaning, or alt= if decorative
|
|
113
|
+
WCAG20_Img_LinkTextNotRedundant The text alternative for an image within a link should not repeat the link text or adjacent link text
|
|
114
|
+
WCAG20_Img_PresentationImgHasNonNullAlt Image designated as decorative must have alt=
|
|
115
|
+
WCAG20_Img_TitleEmptyWhenAltNull When the image alt attribute is empty, the title attribute must also be empty
|
|
116
|
+
WCAG20_Input_ExplicitLabel Each form control must have an associated label
|
|
117
|
+
WCAG20_Input_ExplicitLabelImage The input element of type image should have a text alternative
|
|
118
|
+
WCAG20_Input_HasOnchange Verify that any changes of context are explained in advance to the user
|
|
119
|
+
WCAG20_Input_InFieldSet Groups of logically related input elements should be contained within a fieldset element
|
|
120
|
+
WCAG20_Input_LabelAfter Checkboxes and radio buttons must have a label after the input control
|
|
121
|
+
WCAG20_Input_LabelBefore Text inputs and select elements must have a label before the input control
|
|
122
|
+
WCAG20_Input_RadioChkInFieldSet input is in a different group than another with the name
|
|
123
|
+
WCAG20_Input_VisibleLabel An input element must have an associated visible label
|
|
124
|
+
WCAG20_Label_RefValid The for attribute must reference a non-empty, unique id attribute of an input element
|
|
125
|
+
WCAG20_Meta_RedirectZero Page should not automatically refresh without warning or option to turn it off or adjust the time limit
|
|
126
|
+
WCAG20_Object_HasText object elements must have a text alternative for the content rendered by the object
|
|
127
|
+
WCAG20_Script_FocusBlurs Scripting must not remove focus from content that normally receives focus
|
|
128
|
+
WCAG20_Select_HasOptGroup Groups of related options within a selection list should be grouped with optgroup
|
|
129
|
+
WCAG20_Select_NoChangeAction No changes of context should occur when a selection value receives focus
|
|
130
|
+
WCAG20_Style_BeforeAfter Do not use CSS ::before and ::after pseudo-elements to insert non-decorative content
|
|
131
|
+
WCAG20_Table_CapSummRedundant The table summary must not duplicate the caption
|
|
132
|
+
WCAG20_Table_Scope_Valid Value for scope attribute must be row, col, rowgroup, or colgroup
|
|
133
|
+
WCAG20_Table_Structure Table elements with role=presentation or role=none should not have structural elements or attributes
|
|
134
|
+
WCAG20_Text_Emoticons Emoticons must have a short text alternative that describes their purpose
|
|
135
|
+
WCAG20_Text_LetterSpacing Use CSS letter-spacing to control spacing within a word
|
|
136
|
+
WCAG21_Input_Autocomplete The autocomplete attributes token(s) must be appropriate for the input form field
|
|
137
|
+
WCAG21_Label_Accessible Accessible name must match or contain the visible label text
|
|
138
|
+
WCAG21_Style_Viewport Text must scale up to 200% without loss of content or functionality
|
|
139
|
+
aria_attribute_conflict An ARIA attribute must not conflict with the corresponding HTML attribute
|
|
140
|
+
aria_attribute_deprecated No deprecated ARIA role or attribute should be used
|
|
141
|
+
aria_attribute_redundant An ARIA attribute should not be used when there is a corresponding HTML attribute
|
|
142
|
+
aria_hidden_focus_misuse A focusable element should not be within the subtree of an element with aria-hidden set to true
|
|
143
|
+
aria_role_redundant An explicitly-assigned ARIA role should not be redundant with the implicit role of the element
|
|
144
|
+
aria_semantics_role ARIA roles must be valid for the element to which they are assigned
|
|
145
|
+
aria_semantics_attribute ARIA attributes must be valid for the element and ARIA role to which they are assigned
|
|
146
|
+
combobox_active_descendant aria-activedescendant must be used to define focus within the combobox popup, except when using a dialog popup
|
|
147
|
+
combobox_autocomplete combobox_autocomplete.html
|
|
148
|
+
combobox_focusable_elements Tabbable focus for the combobox must be allowed only on the text input, except when using a dialog popup
|
|
149
|
+
combobox_haspopup The combobox attribute aria-haspopup value must be appropriate for the role of the element referenced by aria-controls or aria-owns
|
|
150
|
+
combobox_popup_reference The aria-controls or aria-owns attribute of the expanded combobox must reference a valid popup id value
|
|
151
|
+
combobox_version The combobox design pattern must be valid for ARIA 1.2
|
|
152
|
+
element_attribute_deprecated Avoid use of obsolete features if possible
|
|
153
|
+
group_withInputs_hasName Groups with nested inputs must have unique accessible name
|
|
154
|
+
input_haspopup_invalid input element with list attribute should not also use aria-haspopup attribute
|
|
155
|
+
landmark_name_unique Multiple landmarks should have a unique aria-labelledby or aria-label or be nested in a different parent regions
|
|
156
|
+
meta_viewport_zoom The meta[name=viewport] should not prevent the browser zooming the content
|
|
157
|
+
style_hover_persistent The pointer should be able to move over content displayed on hover
|
|
158
|
+
table_aria_descendants Table structure elements cannot specify an explicit role within table containers
|
|
159
|
+
table_headers_ref_valid The headers attribute should refer to a valid cell in the same table
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
28 The layout or sizing of this page causes horizontal scrolling
|
|
2
|
+
57 This link has no text inside it
|
|
3
|
+
79 This link has a `title` attribute that is the same as the text inside the link
|
|
4
|
+
95 This element has insufficient color contrast (Level AAA)
|
|
5
|
+
98 These links have the same text but different destinations
|
|
6
|
+
129 CSS underline on text has been detected that is not a link
|
|
7
|
+
134 Very small text found
|
|
8
|
+
144 This content's line height is insufficent to properly display the computed element font size
|
|
9
|
+
152 This actionable element is smaller than the minimum required size
|
|
10
|
+
153 This long string of text is in all caps
|
|
11
|
+
155 These headings are not structured in a hierarchical manner
|
|
12
|
+
190 Item(s) with interactive role must have tabindex=0 unless it is natively actionable
|
|
13
|
+
218 This link opens in a new window without user control
|
|
14
|
+
242 Multiple consecutive br tags next to each other, simulating paragraphs
|