@surea11y/core 1.1.2 → 1.3.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/CHANGELOG.md +48 -4
- package/LICENSE +373 -21
- package/README.md +70 -1
- package/bin/core.js +240 -11
- package/docs/API_STABILITY.md +61 -0
- package/docs/BASELINE.md +66 -0
- package/docs/BINDING_AUTHORS_GUIDE.md +9 -9
- package/docs/CI_INTEGRATIONS.md +103 -0
- package/docs/CLI.md +80 -1
- package/docs/ENGINE_OPTIONS.md +4 -0
- package/docs/INTEGRATION.md +19 -1
- package/docs/OUTPUT_SCHEMA.md +2 -2
- package/docs/REPORT.md +33 -0
- package/docs/RULE_AUTHORING.md +31 -0
- package/docs/RULE_CATALOG.md +1 -1
- package/docs/SARIF.md +59 -0
- package/package.json +15 -4
- package/src/baseline.js +0 -0
- package/src/catalogs/composites.wcag.js +414 -450
- package/src/checks/automatic/area-alt-present.js +59 -25
- package/src/checks/automatic/aria-allowed-attr.js +193 -33
- package/src/checks/automatic/aria-allowed-role.js +21 -7
- package/src/checks/automatic/aria-braille-equivalent.js +32 -10
- package/src/checks/automatic/aria-conditional-attr.js +24 -7
- package/src/checks/automatic/aria-deprecated-role.js +22 -8
- package/src/checks/automatic/aria-hidden-body.js +50 -19
- package/src/checks/automatic/aria-hidden-focus.js +408 -53
- package/src/checks/automatic/aria-prohibited-attr.js +296 -22
- package/src/checks/automatic/aria-prohibited-children.js +125 -29
- package/src/checks/automatic/aria-required-attr.js +23 -8
- package/src/checks/automatic/aria-required-children.js +37 -14
- package/src/checks/automatic/aria-required-parent.js +48 -14
- package/src/checks/automatic/aria-role-name-present.js +47 -21
- package/src/checks/automatic/aria-roles-valid.js +22 -12
- package/src/checks/automatic/aria-valid-attr-value.js +28 -7
- package/src/checks/automatic/aria-valid-attr.js +17 -5
- package/src/checks/automatic/autocomplete-valid.js +74 -16
- package/src/checks/automatic/avoid-inline-spacing.js +20 -6
- package/src/checks/automatic/binary-control-name-present.js +60 -50
- package/src/checks/automatic/button-name-present.js +48 -18
- package/src/checks/automatic/bypass-blocks-present.js +50 -25
- package/src/checks/automatic/canvas-text-alternative-present.js +57 -26
- package/src/checks/automatic/combobox-name-present.js +38 -45
- package/src/checks/automatic/contrast-computable.js +361 -341
- package/src/checks/automatic/contrast-enhanced.js +487 -466
- package/src/checks/automatic/contrast-minimum.js +486 -465
- package/src/checks/automatic/css-orientation-lock.js +39 -9
- package/src/checks/automatic/definition-list-children-valid.js +40 -19
- package/src/checks/automatic/deprecated-elements-not-used.js +21 -7
- package/src/checks/automatic/dialog-name-present.js +37 -75
- package/src/checks/automatic/dlitem-parent-valid.js +23 -8
- package/src/checks/automatic/duplicate-id-aria.js +24 -6
- package/src/checks/automatic/embed-text-alternative-present.js +86 -35
- package/src/checks/automatic/form-control-programmatic-label-present.js +79 -196
- package/src/checks/automatic/form-control-single-label.js +47 -10
- package/src/checks/automatic/html-xml-lang-mismatch.js +43 -19
- package/src/checks/automatic/iframe-focusable-content.js +26 -11
- package/src/checks/automatic/iframe-name-present.js +31 -9
- package/src/checks/automatic/iframe-title-unique.js +29 -8
- package/src/checks/automatic/img-alt-present.js +47 -43
- package/src/checks/automatic/input-image-alt-present.js +143 -112
- package/src/checks/automatic/label-in-name.js +50 -22
- package/src/checks/automatic/language-page-present.js +117 -109
- package/src/checks/automatic/link-in-text-block.js +59 -19
- package/src/checks/automatic/link-name-present.js +45 -14
- package/src/checks/automatic/list-children-valid.js +26 -9
- package/src/checks/automatic/listbox-name-present.js +39 -19
- package/src/checks/automatic/listitem-parent-valid.js +18 -6
- package/src/checks/automatic/menuitem-name-present.js +39 -61
- package/src/checks/automatic/meta-refresh-no-exceptions.js +37 -8
- package/src/checks/automatic/meta-refresh-timing-absent.js +28 -6
- package/src/checks/automatic/meta-viewport-zoom-enabled.js +32 -7
- package/src/checks/automatic/meter-name-present.js +36 -33
- package/src/checks/automatic/nested-interactive-controls-absent.js +31 -10
- package/src/checks/automatic/object-text-alternative-present.js +91 -39
- package/src/checks/automatic/option-name-present.js +38 -21
- package/src/checks/automatic/page-title-present.js +26 -7
- package/src/checks/automatic/progressbar-name-present.js +41 -34
- package/src/checks/automatic/role-img-alt-present.js +209 -157
- package/src/checks/automatic/searchbox-name-present.js +39 -19
- package/src/checks/automatic/server-side-image-map-absent.js +23 -8
- package/src/checks/automatic/slider-name-present.js +40 -47
- package/src/checks/automatic/spinbutton-name-present.js +39 -19
- package/src/checks/automatic/summary-name-present.js +37 -17
- package/src/checks/automatic/svg-image-text-alternative-present.js +114 -47
- package/src/checks/automatic/svg-text-alternative-present.js +246 -226
- package/src/checks/automatic/tab-name-present.js +37 -60
- package/src/checks/automatic/table-headers-attr-valid.js +24 -8
- package/src/checks/automatic/table-th-has-data-cells.js +22 -8
- package/src/checks/automatic/target-size-minimum.js +118 -48
- package/src/checks/automatic/td-has-header.js +29 -11
- package/src/checks/automatic/textbox-name-present.js +39 -19
- package/src/checks/automatic/tooltip-name-present.js +37 -18
- package/src/checks/automatic/treeitem-name-present.js +38 -21
- package/src/checks/automatic/valid-lang.js +20 -6
- package/src/checks/automatic/video-poster-text-alternative-present.js +79 -36
- package/src/checks/manual/accesskeys-manual.js +14 -5
- package/src/checks/manual/area-alt-decorative-manual.js +192 -193
- package/src/checks/manual/area-alt-quality-manual.js +182 -141
- package/src/checks/manual/aria-checked-state-mismatch-manual.js +34 -11
- package/src/checks/manual/aria-text-manual.js +14 -6
- package/src/checks/manual/canvas-text-alternative-quality-manual.js +149 -114
- package/src/checks/manual/css-hidden-focus.js +196 -165
- package/src/checks/manual/embed-text-alternative-quality-manual.js +171 -160
- package/src/checks/manual/empty-heading-manual.js +24 -12
- package/src/checks/manual/empty-table-header-manual.js +21 -14
- package/src/checks/manual/focus-order-semantics-manual.js +45 -10
- package/src/checks/manual/form-control-programmatic-label-quality-manual.js +207 -246
- package/src/checks/manual/heading-order-manual.js +22 -12
- package/src/checks/manual/identical-links-same-purpose-manual.js +34 -12
- package/src/checks/manual/image-redundant-alt-manual.js +17 -7
- package/src/checks/manual/img-alt-decorative-manual.js +131 -96
- package/src/checks/manual/img-alt-quality-manual.js +176 -127
- package/src/checks/manual/input-image-alt-decorative-manual.js +125 -92
- package/src/checks/manual/input-image-alt-quality-manual.js +125 -92
- package/src/checks/manual/label-title-only-manual.js +14 -5
- package/src/checks/manual/landmark-banner-is-top-level-manual.js +95 -29
- package/src/checks/manual/landmark-contentinfo-is-top-level-manual.js +82 -29
- package/src/checks/manual/landmark-main-is-top-level-manual.js +64 -23
- package/src/checks/manual/landmark-no-duplicate-banner-manual.js +54 -23
- package/src/checks/manual/landmark-no-duplicate-contentinfo-manual.js +54 -23
- package/src/checks/manual/landmark-no-duplicate-main-manual.js +17 -8
- package/src/checks/manual/landmark-one-main-manual.js +35 -21
- package/src/checks/manual/landmark-unique-manual.js +73 -45
- package/src/checks/manual/link-name-quality-manual.js +43 -12
- package/src/checks/manual/media-transcript-present-manual.js +35 -22
- package/src/checks/manual/meta-viewport-large-manual.js +25 -6
- package/src/checks/manual/mouse-only-event-handlers-manual.js +38 -11
- package/src/checks/manual/no-autoplay-audio-manual.js +20 -6
- package/src/checks/manual/object-text-alternative-quality-manual.js +175 -154
- package/src/checks/manual/p-as-heading-manual.js +22 -7
- package/src/checks/manual/page-has-heading-one-manual.js +40 -23
- package/src/checks/manual/page-title-patterns-manual.js +87 -51
- package/src/checks/manual/presentation-role-conflict-manual.js +59 -19
- package/src/checks/manual/region-manual.js +275 -62
- package/src/checks/manual/scope-attr-valid-manual.js +11 -9
- package/src/checks/manual/scrollable-region-focusable-manual.js +37 -11
- package/src/checks/manual/skip-link-manual.js +35 -12
- package/src/checks/manual/svg-text-alternative-quality-manual.js +206 -165
- package/src/checks/manual/tabindex-manual.js +11 -9
- package/src/checks/manual/table-duplicate-name-manual.js +17 -7
- package/src/checks/manual/table-fake-caption-manual.js +24 -7
- package/src/checks/manual/video-caption-manual.js +15 -4
- package/src/checks/manual-review.js +56 -12
- package/src/core/aria-helpers.js +1128 -823
- package/src/core/contrast-helpers.js +1217 -1062
- package/src/core/dom-helpers.js +4176 -3886
- package/src/core/dom-runner.js +720 -596
- package/src/core/frame-messaging.js +189 -138
- package/src/core/frame-scan.js +94 -82
- package/src/core/rollup-composites.js +94 -102
- package/src/core/rule-meta.js +71 -35
- package/src/core.js +37939 -29121
- package/src/i18n/en.js +1194 -887
- package/src/i18n/fr.js +1136 -793
- package/src/policy/contracts.js +13 -13
- package/src/policy/resolvePolicy.js +48 -44
- package/src/report.js +502 -0
- package/src/sarif.js +175 -0
- package/surea11y.browser.js +36042 -0
|
@@ -8,483 +8,447 @@
|
|
|
8
8
|
* For now, composites are grouped per WCAG Success Criterion (SC).
|
|
9
9
|
*/
|
|
10
10
|
module.exports = [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
}
|
|
11
|
+
{
|
|
12
|
+
id: 'wcag-1.1.1-non-text-content',
|
|
13
|
+
checksIds: [
|
|
14
|
+
'area-alt-present',
|
|
15
|
+
'img-alt-decorative',
|
|
16
|
+
'img-alt-quality',
|
|
17
|
+
'area-alt-decorative',
|
|
18
|
+
'area-alt-quality',
|
|
19
|
+
'canvas-text-alternative-quality',
|
|
20
|
+
'canvas-text-alternative-present',
|
|
21
|
+
'embed-text-alternative-present',
|
|
22
|
+
'img-alt-present',
|
|
23
|
+
'input-image-alt-present',
|
|
24
|
+
'object-text-alternative-present',
|
|
25
|
+
'role-img-text-alternative-present',
|
|
26
|
+
'svg-image-text-alternative-present',
|
|
27
|
+
'svg-text-alternative-present',
|
|
28
|
+
'video-poster-text-alternative-present',
|
|
29
|
+
'embed-text-alternative-quality',
|
|
30
|
+
'input-image-alt-decorative',
|
|
31
|
+
'input-image-alt-quality',
|
|
32
|
+
'object-text-alternative-quality',
|
|
33
|
+
'svg-text-alternative-quality',
|
|
34
|
+
'meter-name-present',
|
|
35
|
+
'progressbar-name-present'
|
|
36
|
+
],
|
|
37
|
+
meta: {
|
|
38
|
+
title: 'Non-text content: text alternatives',
|
|
39
|
+
description:
|
|
40
|
+
'Rollup of checks ensuring non-text content has an appropriate text alternative.',
|
|
41
|
+
wcagSc: ['1.1.1'],
|
|
42
|
+
level: 'A'
|
|
43
|
+
}
|
|
44
|
+
},
|
|
44
45
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
},
|
|
46
|
+
{
|
|
47
|
+
id: 'wcag-1.2.1-audio-only-video-only-prerecorded',
|
|
48
|
+
checksIds: ['media-alternative-transcript-evidence'],
|
|
49
|
+
meta: {
|
|
50
|
+
title: 'Audio-only and video-only (prerecorded): transcript',
|
|
51
|
+
description:
|
|
52
|
+
'Rollup of checks for transcript availability for prerecorded audio-only/video-only media.',
|
|
53
|
+
wcagSc: ['1.2.1'],
|
|
54
|
+
level: 'A'
|
|
55
|
+
}
|
|
56
|
+
},
|
|
57
57
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
},
|
|
58
|
+
{
|
|
59
|
+
id: 'wcag-1.2.2-captions-prerecorded',
|
|
60
|
+
checksIds: ['video-caption'],
|
|
61
|
+
meta: {
|
|
62
|
+
title: 'Captions (Prerecorded)',
|
|
63
|
+
description: 'Rollup of checks for captions-track evidence on prerecorded video.',
|
|
64
|
+
wcagSc: ['1.2.2'],
|
|
65
|
+
level: 'A'
|
|
66
|
+
}
|
|
67
|
+
},
|
|
70
68
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
69
|
+
{
|
|
70
|
+
id: 'wcag-1.3.1-info-and-relationships',
|
|
71
|
+
checksIds: [
|
|
72
|
+
'table-headers-attr-valid',
|
|
73
|
+
'table-th-has-data-cells',
|
|
74
|
+
'aria-hidden-body',
|
|
75
|
+
'list-children-valid',
|
|
76
|
+
'listitem-parent-valid',
|
|
77
|
+
'definition-list-children-valid',
|
|
78
|
+
'dlitem-parent-valid',
|
|
79
|
+
'form-control-programmatic-label-present',
|
|
80
|
+
'p-as-heading',
|
|
81
|
+
'table-fake-caption',
|
|
82
|
+
'td-has-header'
|
|
83
|
+
],
|
|
84
|
+
meta: {
|
|
85
|
+
title: 'Info and Relationships',
|
|
86
|
+
description:
|
|
87
|
+
'Rollup of checks ensuring information, structure, and relationships conveyed through presentation are programmatically determinable.',
|
|
88
|
+
wcagSc: ['1.3.1'],
|
|
89
|
+
level: 'A'
|
|
90
|
+
}
|
|
91
|
+
},
|
|
93
92
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
},
|
|
93
|
+
{
|
|
94
|
+
id: 'wcag-1.4.1-use-of-color',
|
|
95
|
+
checksIds: ['link-in-text-block'],
|
|
96
|
+
meta: {
|
|
97
|
+
title: 'Use of Color',
|
|
98
|
+
description:
|
|
99
|
+
'Rollup of checks ensuring color is not used as the only visual means of conveying information.',
|
|
100
|
+
wcagSc: ['1.4.1'],
|
|
101
|
+
level: 'A'
|
|
102
|
+
}
|
|
103
|
+
},
|
|
106
104
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
},
|
|
105
|
+
{
|
|
106
|
+
id: 'wcag-1.4.2-audio-control',
|
|
107
|
+
checksIds: ['no-autoplay-audio'],
|
|
108
|
+
meta: {
|
|
109
|
+
title: 'Audio Control',
|
|
110
|
+
description:
|
|
111
|
+
'Rollup of checks for a pause/stop or volume-control mechanism on autoplaying audio.',
|
|
112
|
+
wcagSc: ['1.4.2'],
|
|
113
|
+
level: 'A'
|
|
114
|
+
}
|
|
115
|
+
},
|
|
119
116
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
level: 'AA'
|
|
131
|
-
}
|
|
132
|
-
},
|
|
117
|
+
{
|
|
118
|
+
id: 'wcag-1.4.3-contrast-minimum',
|
|
119
|
+
checksIds: ['contrast-computable', 'contrast-minimum'],
|
|
120
|
+
meta: {
|
|
121
|
+
title: 'Contrast: minimum',
|
|
122
|
+
description: 'Rollup of checks for minimum text contrast.',
|
|
123
|
+
wcagSc: ['1.4.3'],
|
|
124
|
+
level: 'AA'
|
|
125
|
+
}
|
|
126
|
+
},
|
|
133
127
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
level: 'AAA'
|
|
145
|
-
}
|
|
146
|
-
},
|
|
128
|
+
{
|
|
129
|
+
id: 'wcag-1.4.6-contrast-enhanced',
|
|
130
|
+
checksIds: ['contrast-computable', 'contrast-enhanced'],
|
|
131
|
+
meta: {
|
|
132
|
+
title: 'Contrast: enhanced',
|
|
133
|
+
description: 'Rollup of checks for enhanced text contrast.',
|
|
134
|
+
wcagSc: ['1.4.6'],
|
|
135
|
+
level: 'AAA'
|
|
136
|
+
}
|
|
137
|
+
},
|
|
147
138
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
}
|
|
139
|
+
{
|
|
140
|
+
id: 'wcag-2.1.1-keyboard',
|
|
141
|
+
checksIds: [
|
|
142
|
+
'manual-review',
|
|
143
|
+
'iframe-focusable-content',
|
|
144
|
+
'server-side-image-map-absent',
|
|
145
|
+
'scrollable-region-focusable',
|
|
146
|
+
'mouse-only-event-handlers'
|
|
147
|
+
],
|
|
148
|
+
meta: {
|
|
149
|
+
title: 'Keyboard',
|
|
150
|
+
description:
|
|
151
|
+
'Rollup of checks ensuring functionality is operable through a keyboard interface.',
|
|
152
|
+
wcagSc: ['2.1.1'],
|
|
153
|
+
level: 'A'
|
|
154
|
+
}
|
|
155
|
+
},
|
|
164
156
|
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
},
|
|
157
|
+
{
|
|
158
|
+
id: 'wcag-2.1.3-keyboard-no-exception',
|
|
159
|
+
checksIds: ['scrollable-region-focusable'],
|
|
160
|
+
meta: {
|
|
161
|
+
title: 'Keyboard (No Exception)',
|
|
162
|
+
description:
|
|
163
|
+
'Rollup of checks ensuring functionality is operable through a keyboard interface with no exceptions (AAA).',
|
|
164
|
+
wcagSc: ['2.1.3'],
|
|
165
|
+
level: 'AAA'
|
|
166
|
+
}
|
|
167
|
+
},
|
|
177
168
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
},
|
|
169
|
+
{
|
|
170
|
+
id: 'wcag-2.2.2-pause-stop-hide',
|
|
171
|
+
checksIds: ['deprecated-elements-not-used'],
|
|
172
|
+
meta: {
|
|
173
|
+
title: 'Pause, Stop, Hide',
|
|
174
|
+
description:
|
|
175
|
+
'Rollup of checks ensuring moving, blinking, or auto-scrolling content can be paused, stopped, or hidden.',
|
|
176
|
+
wcagSc: ['2.2.2'],
|
|
177
|
+
level: 'A'
|
|
178
|
+
}
|
|
179
|
+
},
|
|
190
180
|
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
},
|
|
181
|
+
{
|
|
182
|
+
id: 'wcag-2.4.1-bypass-blocks',
|
|
183
|
+
checksIds: ['bypass-blocks-present'],
|
|
184
|
+
meta: {
|
|
185
|
+
title: 'Bypass Blocks',
|
|
186
|
+
description:
|
|
187
|
+
'Rollup of checks ensuring the page provides a way to bypass repeated blocks of content.',
|
|
188
|
+
wcagSc: ['2.4.1'],
|
|
189
|
+
level: 'A'
|
|
190
|
+
}
|
|
191
|
+
},
|
|
203
192
|
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
level: 'A'
|
|
215
|
-
}
|
|
216
|
-
},
|
|
193
|
+
{
|
|
194
|
+
id: 'wcag-2.4.2-page-titled',
|
|
195
|
+
checksIds: ['page-title-patterns', 'page-title-present'],
|
|
196
|
+
meta: {
|
|
197
|
+
title: 'Page titled',
|
|
198
|
+
description: 'Rollup of checks ensuring documents have a meaningful page title.',
|
|
199
|
+
wcagSc: ['2.4.2'],
|
|
200
|
+
level: 'A'
|
|
201
|
+
}
|
|
202
|
+
},
|
|
217
203
|
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
}
|
|
229
|
-
},
|
|
204
|
+
{
|
|
205
|
+
id: 'wcag-2.4.3-focus-order',
|
|
206
|
+
checksIds: ['manual-review'],
|
|
207
|
+
meta: {
|
|
208
|
+
title: 'Focus order',
|
|
209
|
+
description: 'Rollup of checks ensuring focus moves through content in a meaningful order.',
|
|
210
|
+
wcagSc: ['2.4.3'],
|
|
211
|
+
level: 'A'
|
|
212
|
+
}
|
|
213
|
+
},
|
|
230
214
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
},
|
|
215
|
+
{
|
|
216
|
+
id: 'wcag-2.4.4-link-purpose-in-context',
|
|
217
|
+
checksIds: ['link-name-quality'],
|
|
218
|
+
meta: {
|
|
219
|
+
title: 'Link Purpose (In Context)',
|
|
220
|
+
description:
|
|
221
|
+
'Rollup of checks flagging links whose text alone is a known non-descriptive/generic phrase.',
|
|
222
|
+
wcagSc: ['2.4.4'],
|
|
223
|
+
level: 'A'
|
|
224
|
+
}
|
|
225
|
+
},
|
|
243
226
|
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
level: 'AA'
|
|
256
|
-
}
|
|
257
|
-
},
|
|
227
|
+
{
|
|
228
|
+
id: 'wcag-2.4.7-focus-visible',
|
|
229
|
+
checksIds: ['aria-hidden-focus', 'css-hidden-focus', 'manual-review'],
|
|
230
|
+
meta: {
|
|
231
|
+
title: 'Focus visible',
|
|
232
|
+
description:
|
|
233
|
+
'Rollup of checks ensuring keyboard focus is not hidden and remains perceivable.',
|
|
234
|
+
wcagSc: ['2.4.7'],
|
|
235
|
+
level: 'AA'
|
|
236
|
+
}
|
|
237
|
+
},
|
|
258
238
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
wcagSc: ['2.5.8'],
|
|
292
|
-
level: 'AA'
|
|
293
|
-
}
|
|
294
|
-
},
|
|
239
|
+
{
|
|
240
|
+
id: 'wcag-2.4.9-link-purpose-link-only',
|
|
241
|
+
checksIds: ['identical-links-same-purpose'],
|
|
242
|
+
meta: {
|
|
243
|
+
title: 'Link Purpose (Link Only)',
|
|
244
|
+
description:
|
|
245
|
+
'Rollup of checks ensuring links with the same accessible name serve the same purpose (AAA).',
|
|
246
|
+
wcagSc: ['2.4.9'],
|
|
247
|
+
level: 'AAA'
|
|
248
|
+
}
|
|
249
|
+
},
|
|
250
|
+
{
|
|
251
|
+
id: 'wcag-2.5.3-label-in-name',
|
|
252
|
+
checksIds: ['label-in-name'],
|
|
253
|
+
meta: {
|
|
254
|
+
title: 'Label in name',
|
|
255
|
+
description:
|
|
256
|
+
'Rollup of checks ensuring that when a control has a visible text label, the accessible name contains that visible label text.',
|
|
257
|
+
wcagSc: ['2.5.3'],
|
|
258
|
+
level: 'A'
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
id: 'wcag-2.5.8-target-size-minimum',
|
|
263
|
+
checksIds: ['target-size-minimum'],
|
|
264
|
+
meta: {
|
|
265
|
+
title: 'Target size: minimum',
|
|
266
|
+
description: 'Rollup of checks ensuring pointer targets meet minimum size requirements.',
|
|
267
|
+
wcagSc: ['2.5.8'],
|
|
268
|
+
level: 'AA'
|
|
269
|
+
}
|
|
270
|
+
},
|
|
295
271
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
level: 'A'
|
|
307
|
-
}
|
|
308
|
-
},
|
|
272
|
+
{
|
|
273
|
+
id: 'wcag-3.1.1-language-of-page',
|
|
274
|
+
checksIds: ['html-lang-attr-present', 'html-xml-lang-mismatch'],
|
|
275
|
+
meta: {
|
|
276
|
+
title: 'Language of page',
|
|
277
|
+
description: 'Rollup of checks ensuring the page language is specified.',
|
|
278
|
+
wcagSc: ['3.1.1'],
|
|
279
|
+
level: 'A'
|
|
280
|
+
}
|
|
281
|
+
},
|
|
309
282
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
},
|
|
283
|
+
{
|
|
284
|
+
id: 'wcag-3.1.2-language-of-parts',
|
|
285
|
+
checksIds: ['valid-lang'],
|
|
286
|
+
meta: {
|
|
287
|
+
title: 'Language of Parts',
|
|
288
|
+
description:
|
|
289
|
+
'Rollup of checks ensuring elements whose language differs from the page default declare it correctly.',
|
|
290
|
+
wcagSc: ['3.1.2'],
|
|
291
|
+
level: 'AA'
|
|
292
|
+
}
|
|
293
|
+
},
|
|
322
294
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
},
|
|
295
|
+
{
|
|
296
|
+
id: 'wcag-1.3.4-orientation',
|
|
297
|
+
checksIds: ['css-orientation-lock'],
|
|
298
|
+
meta: {
|
|
299
|
+
title: 'Orientation',
|
|
300
|
+
description:
|
|
301
|
+
'Rollup of checks ensuring content does not restrict its view to a single display orientation.',
|
|
302
|
+
wcagSc: ['1.3.4'],
|
|
303
|
+
level: 'AA'
|
|
304
|
+
}
|
|
305
|
+
},
|
|
335
306
|
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
},
|
|
307
|
+
{
|
|
308
|
+
id: 'wcag-1.3.5-identify-input-purpose',
|
|
309
|
+
checksIds: ['autocomplete-valid'],
|
|
310
|
+
meta: {
|
|
311
|
+
title: 'Identify Input Purpose',
|
|
312
|
+
description:
|
|
313
|
+
'Rollup of checks ensuring the autocomplete attribute correctly identifies input purpose.',
|
|
314
|
+
wcagSc: ['1.3.5'],
|
|
315
|
+
level: 'AA'
|
|
316
|
+
}
|
|
317
|
+
},
|
|
348
318
|
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
},
|
|
319
|
+
{
|
|
320
|
+
id: 'wcag-1.4.12-text-spacing',
|
|
321
|
+
checksIds: ['avoid-inline-spacing'],
|
|
322
|
+
meta: {
|
|
323
|
+
title: 'Text Spacing',
|
|
324
|
+
description:
|
|
325
|
+
'Rollup of checks ensuring inline styles do not block user text-spacing overrides.',
|
|
326
|
+
wcagSc: ['1.4.12'],
|
|
327
|
+
level: 'AA'
|
|
328
|
+
}
|
|
329
|
+
},
|
|
361
330
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
},
|
|
331
|
+
{
|
|
332
|
+
id: 'wcag-2.2.4-interruptions',
|
|
333
|
+
checksIds: ['meta-refresh-no-exceptions'],
|
|
334
|
+
meta: {
|
|
335
|
+
title: 'Interruptions',
|
|
336
|
+
description:
|
|
337
|
+
"Rollup of checks ensuring automatic context changes only happen at the user's request (AAA).",
|
|
338
|
+
wcagSc: ['2.2.4'],
|
|
339
|
+
level: 'AAA'
|
|
340
|
+
}
|
|
341
|
+
},
|
|
374
342
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
},
|
|
343
|
+
{
|
|
344
|
+
id: 'wcag-3.2.5-change-on-request',
|
|
345
|
+
checksIds: ['meta-refresh-no-exceptions'],
|
|
346
|
+
meta: {
|
|
347
|
+
title: 'Change on Request',
|
|
348
|
+
description:
|
|
349
|
+
"Rollup of checks ensuring context changes only happen at the user's request (AAA).",
|
|
350
|
+
wcagSc: ['3.2.5'],
|
|
351
|
+
level: 'AAA'
|
|
352
|
+
}
|
|
353
|
+
},
|
|
387
354
|
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
}
|
|
355
|
+
{
|
|
356
|
+
id: 'wcag-4.1.2-name',
|
|
357
|
+
checksIds: [
|
|
358
|
+
'aria-role-name-present',
|
|
359
|
+
'binary-control-name-present',
|
|
360
|
+
'button-name-present',
|
|
361
|
+
'combobox-name-present',
|
|
362
|
+
'dialog-name-present',
|
|
363
|
+
'form-control-programmatic-label-present',
|
|
364
|
+
'iframe-name-present',
|
|
365
|
+
'iframe-title-unique',
|
|
366
|
+
'link-name-present',
|
|
367
|
+
'listbox-name-present',
|
|
368
|
+
'menuitem-name-present',
|
|
369
|
+
'option-name-present',
|
|
370
|
+
'searchbox-name-present',
|
|
371
|
+
'slider-name-present',
|
|
372
|
+
'spinbutton-name-present',
|
|
373
|
+
'tab-name-present',
|
|
374
|
+
'textbox-name-present',
|
|
375
|
+
'treeitem-name-present',
|
|
376
|
+
'aria-hidden-focus',
|
|
377
|
+
'aria-hidden-body',
|
|
378
|
+
'form-control-programmatic-label-quality',
|
|
379
|
+
'summary-name-present',
|
|
380
|
+
'tooltip-name-present'
|
|
381
|
+
],
|
|
382
|
+
meta: {
|
|
383
|
+
title: 'Name, role, value: accessible name',
|
|
384
|
+
description:
|
|
385
|
+
'Rollup of checks that common interactive elements expose a non-empty accessible name.',
|
|
386
|
+
wcagSc: ['4.1.2'],
|
|
387
|
+
level: 'A'
|
|
388
|
+
}
|
|
389
|
+
},
|
|
422
390
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
}
|
|
391
|
+
{
|
|
392
|
+
id: 'wcag-4.1.2-aria-validity',
|
|
393
|
+
checksIds: [
|
|
394
|
+
'aria-roles-valid',
|
|
395
|
+
'aria-deprecated-role',
|
|
396
|
+
'aria-valid-attr',
|
|
397
|
+
'aria-valid-attr-value',
|
|
398
|
+
'aria-allowed-attr',
|
|
399
|
+
'aria-prohibited-attr',
|
|
400
|
+
'aria-required-attr',
|
|
401
|
+
'aria-allowed-role',
|
|
402
|
+
'aria-required-children',
|
|
403
|
+
'aria-prohibited-children',
|
|
404
|
+
'aria-required-parent',
|
|
405
|
+
'duplicate-id-aria',
|
|
406
|
+
'nested-interactive-controls-absent',
|
|
407
|
+
'aria-braille-equivalent',
|
|
408
|
+
'aria-conditional-attr',
|
|
409
|
+
'aria-checked-state-mismatch'
|
|
410
|
+
],
|
|
411
|
+
meta: {
|
|
412
|
+
title: 'Name, role, value: ARIA validity',
|
|
413
|
+
description:
|
|
414
|
+
'Rollup of checks that ARIA role and attribute usage conforms to the WAI-ARIA specification (valid roles, valid attributes, valid values, required attributes/relationships, unique ARIA-referenced ids).',
|
|
415
|
+
wcagSc: ['4.1.2'],
|
|
416
|
+
level: 'A'
|
|
417
|
+
}
|
|
418
|
+
},
|
|
450
419
|
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
},
|
|
420
|
+
{
|
|
421
|
+
id: 'wcag-1.4.4-resize-text',
|
|
422
|
+
checksIds: ['meta-viewport-zoom-enabled'],
|
|
423
|
+
meta: {
|
|
424
|
+
title: 'Resize Text',
|
|
425
|
+
description:
|
|
426
|
+
'Rollup of checks ensuring the viewport meta tag does not prevent users from zooming text up to 200%.',
|
|
427
|
+
wcagSc: ['1.4.4'],
|
|
428
|
+
level: 'AA'
|
|
429
|
+
}
|
|
430
|
+
},
|
|
463
431
|
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
},
|
|
432
|
+
{
|
|
433
|
+
id: 'wcag-2.2.1-timing-adjustable',
|
|
434
|
+
checksIds: ['meta-refresh-timing-absent'],
|
|
435
|
+
meta: {
|
|
436
|
+
title: 'Timing Adjustable',
|
|
437
|
+
description:
|
|
438
|
+
'Rollup of checks ensuring the page does not impose a timed refresh the user cannot control.',
|
|
439
|
+
wcagSc: ['2.2.1'],
|
|
440
|
+
level: 'A'
|
|
441
|
+
}
|
|
442
|
+
},
|
|
476
443
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
description: 'Rollup of checks ensuring form controls have unambiguous labeling.',
|
|
486
|
-
wcagSc: ['3.3.2'],
|
|
487
|
-
level: 'A'
|
|
488
|
-
}
|
|
444
|
+
{
|
|
445
|
+
id: 'wcag-3.3.2-labels-or-instructions',
|
|
446
|
+
checksIds: ['form-control-single-label', 'form-control-programmatic-label-present'],
|
|
447
|
+
meta: {
|
|
448
|
+
title: 'Labels or Instructions',
|
|
449
|
+
description: 'Rollup of checks ensuring form controls have unambiguous labeling.',
|
|
450
|
+
wcagSc: ['3.3.2'],
|
|
451
|
+
level: 'A'
|
|
489
452
|
}
|
|
453
|
+
}
|
|
490
454
|
];
|