testilo 42.3.1 → 43.0.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/package.json +1 -1
- package/procs/score/{tic49.js → tic.js} +860 -205
- package/procs/score/{tsp49.js → tsp.js} +5 -5
- package/procs/score/tic45.js +0 -9346
- package/procs/score/tsp45.js +0 -390
- package/procs/score/tsp46.js +0 -423
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
©
|
|
2
|
+
© 2025 CVS Health and/or one of its affiliates. All rights reserved.
|
|
3
3
|
|
|
4
4
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
5
5
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -21,10 +21,10 @@
|
|
|
21
21
|
*/
|
|
22
22
|
|
|
23
23
|
/*
|
|
24
|
-
|
|
25
|
-
Testilo issue classification
|
|
24
|
+
tic
|
|
25
|
+
Testilo issue classification
|
|
26
26
|
|
|
27
|
-
Classifies about
|
|
27
|
+
Classifies about 1000 rules of the tools of Testaro into about 310 issues.
|
|
28
28
|
|
|
29
29
|
Issue properties:
|
|
30
30
|
summary: minimal description
|
|
@@ -50,7 +50,19 @@ exports.issues = {
|
|
|
50
50
|
wcag: '',
|
|
51
51
|
weight: 0,
|
|
52
52
|
tools: {
|
|
53
|
+
alfa: {
|
|
54
|
+
r73: {
|
|
55
|
+
variable: false,
|
|
56
|
+
quality: 1,
|
|
57
|
+
what: 'Text line height is not at least 1.5 [invalid]'
|
|
58
|
+
}
|
|
59
|
+
},
|
|
53
60
|
aslint: {
|
|
61
|
+
capital_letters_words: {
|
|
62
|
+
variable: false,
|
|
63
|
+
quality: 1,
|
|
64
|
+
what: 'Element or its title has entirely upper-case words [invalid]'
|
|
65
|
+
},
|
|
54
66
|
color_contrast_aa: {
|
|
55
67
|
variable: false,
|
|
56
68
|
quality: 0,
|
|
@@ -91,6 +103,11 @@ exports.issues = {
|
|
|
91
103
|
quality: 1,
|
|
92
104
|
what: 'Element is a link, but its style properties do not differentiate it from its parent [irrelevant]'
|
|
93
105
|
},
|
|
106
|
+
links_same_content_different_url: {
|
|
107
|
+
variable: false,
|
|
108
|
+
quality: 1,
|
|
109
|
+
what: 'Links with the same text content have different destination URLs [invalid]'
|
|
110
|
+
},
|
|
94
111
|
meaningful_content_sequence: {
|
|
95
112
|
variable: false,
|
|
96
113
|
quality: 0,
|
|
@@ -186,6 +203,11 @@ exports.issues = {
|
|
|
186
203
|
variable: false,
|
|
187
204
|
quality: 1,
|
|
188
205
|
what: 'Child element has a role not allowed for the role of the parent [invalid]'
|
|
206
|
+
},
|
|
207
|
+
aria_landmark_name_unique: {
|
|
208
|
+
variable: false,
|
|
209
|
+
quality: 1,
|
|
210
|
+
what: 'Multiple landmarks with the same parent region are not distinguished from one another [invalid on invisible elements]'
|
|
189
211
|
}
|
|
190
212
|
},
|
|
191
213
|
nuVal: {
|
|
@@ -194,18 +216,38 @@ exports.issues = {
|
|
|
194
216
|
quality: 1,
|
|
195
217
|
what: 'head element has no child title element [invalid]'
|
|
196
218
|
},
|
|
219
|
+
'Element img is missing required attribute src.': {
|
|
220
|
+
variable: false,
|
|
221
|
+
quality: 1,
|
|
222
|
+
what: 'img element has no src attribute [invalid]'
|
|
223
|
+
},
|
|
197
224
|
'Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)': {
|
|
198
225
|
variable: false,
|
|
199
226
|
quality: 0,
|
|
200
227
|
what: 'Element contains a prohibited mediaelementwrapper element [invalid]'
|
|
228
|
+
},
|
|
229
|
+
'Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.': {
|
|
230
|
+
variable: false,
|
|
231
|
+
quality: 1,
|
|
232
|
+
what: 'Void element has a useless trailing slash. [invalid]'
|
|
201
233
|
}
|
|
202
234
|
},
|
|
203
235
|
qualWeb: {
|
|
236
|
+
'QW-ACT-R10': {
|
|
237
|
+
variable: false,
|
|
238
|
+
quality: 1,
|
|
239
|
+
what: 'iframe elements with identical accessible names have different purposes [invalid on invisible elements]'
|
|
240
|
+
},
|
|
204
241
|
'QW-ACT-R13': {
|
|
205
242
|
variable: false,
|
|
206
243
|
quality: 1,
|
|
207
244
|
what: 'Element with aria-hidden has focusable content [invalid]'
|
|
208
245
|
},
|
|
246
|
+
'QW-ACT-R41': {
|
|
247
|
+
variable: false,
|
|
248
|
+
quality: 1,
|
|
249
|
+
what: 'Error message describes no invalid form field value [speculative]'
|
|
250
|
+
},
|
|
209
251
|
'QW-ACT-R52': {
|
|
210
252
|
variable: false,
|
|
211
253
|
quality: 0,
|
|
@@ -296,6 +338,11 @@ exports.issues = {
|
|
|
296
338
|
quality: 0,
|
|
297
339
|
what: 'summary attribute is not used to give an overview of a data table [invalid]'
|
|
298
340
|
},
|
|
341
|
+
'QW-WCAG-T8': {
|
|
342
|
+
variable: false,
|
|
343
|
+
quality: 1,
|
|
344
|
+
what: 'Text alternative is suspect [invalid]'
|
|
345
|
+
},
|
|
299
346
|
'QW-WCAG-T9': {
|
|
300
347
|
variable: false,
|
|
301
348
|
quality: 0,
|
|
@@ -321,6 +368,16 @@ exports.issues = {
|
|
|
321
368
|
quality: 0.5,
|
|
322
369
|
what: 'Script removes the focus when focus is received [invalid]'
|
|
323
370
|
},
|
|
371
|
+
'QW-WCAG-T28': {
|
|
372
|
+
variable: false,
|
|
373
|
+
quality: 0.8,
|
|
374
|
+
what: 'Font size set to an absolute unit value [invalid]'
|
|
375
|
+
},
|
|
376
|
+
'QW-WCAG-T31': {
|
|
377
|
+
variable: false,
|
|
378
|
+
quality: 1,
|
|
379
|
+
what: 'Foreground or background color is specified but not both [invalid on invisible elements'
|
|
380
|
+
},
|
|
324
381
|
'QW-WCAG-T32': {
|
|
325
382
|
variable: false,
|
|
326
383
|
quality: 1,
|
|
@@ -331,6 +388,18 @@ exports.issues = {
|
|
|
331
388
|
quality: 1,
|
|
332
389
|
what: 'Several elements have this id attribute value [invalid]'
|
|
333
390
|
}
|
|
391
|
+
},
|
|
392
|
+
wax: {
|
|
393
|
+
'Check that the link text combined with programmatically determined link context identifies the purpose of the link.': {
|
|
394
|
+
variable: false,
|
|
395
|
+
quality: 1,
|
|
396
|
+
what: 'Link purpose may be undisclosed [speculative]'
|
|
397
|
+
},
|
|
398
|
+
'Check that the link text combined with programmatically determined link context, or its title attribute, identifies the purpose of the link.': {
|
|
399
|
+
variable: false,
|
|
400
|
+
quality: 1,
|
|
401
|
+
what: 'Link purpose may be undisclosed [speculative]'
|
|
402
|
+
}
|
|
334
403
|
}
|
|
335
404
|
}
|
|
336
405
|
},
|
|
@@ -420,6 +489,13 @@ exports.issues = {
|
|
|
420
489
|
quality: 1,
|
|
421
490
|
what: 'id attribute value is not unique'
|
|
422
491
|
}
|
|
492
|
+
},
|
|
493
|
+
wax: {
|
|
494
|
+
'^Duplicate id attribute value .+ found on the web page.+$': {
|
|
495
|
+
variable: true,
|
|
496
|
+
quality: 1,
|
|
497
|
+
what: 'id attribute value is not unique'
|
|
498
|
+
}
|
|
423
499
|
}
|
|
424
500
|
}
|
|
425
501
|
},
|
|
@@ -435,6 +511,35 @@ exports.issues = {
|
|
|
435
511
|
quality: 1,
|
|
436
512
|
what: 'Element has no accessible name, although its role requires one'
|
|
437
513
|
}
|
|
514
|
+
},
|
|
515
|
+
wax: {
|
|
516
|
+
'Provide accessible names for ARIA button, link, and menuitem elements.': {
|
|
517
|
+
variable: false,
|
|
518
|
+
quality: 1,
|
|
519
|
+
what: 'Element is a button, link, or menuitem, but has no accessible name'
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
},
|
|
524
|
+
progressNoText: {
|
|
525
|
+
summary: 'progress bar not named',
|
|
526
|
+
why: 'User cannot get help understanding the state of a process',
|
|
527
|
+
wcag: '4.1.2',
|
|
528
|
+
weight: 4,
|
|
529
|
+
tools: {
|
|
530
|
+
axe: {
|
|
531
|
+
'aria-progressbar-name': {
|
|
532
|
+
variable: false,
|
|
533
|
+
quality: 1,
|
|
534
|
+
what: 'Progress bar has no accessible name'
|
|
535
|
+
}
|
|
536
|
+
},
|
|
537
|
+
wax: {
|
|
538
|
+
'Ensure ARIA progressbar elements have accessible names.': {
|
|
539
|
+
variable: false,
|
|
540
|
+
quality: 1,
|
|
541
|
+
what: 'Progress bar has no accessible name'
|
|
542
|
+
}
|
|
438
543
|
}
|
|
439
544
|
}
|
|
440
545
|
},
|
|
@@ -519,6 +624,43 @@ exports.issues = {
|
|
|
519
624
|
quality: 1,
|
|
520
625
|
what: 'input element has no accessible name'
|
|
521
626
|
}
|
|
627
|
+
},
|
|
628
|
+
wax: {
|
|
629
|
+
'Provide accessible names for ARIA input fields.': {
|
|
630
|
+
variable: false,
|
|
631
|
+
quality: 1,
|
|
632
|
+
what: 'Element with an input role has no accessible name'
|
|
633
|
+
},
|
|
634
|
+
'This emailinput element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
635
|
+
variable: false,
|
|
636
|
+
quality: 1,
|
|
637
|
+
what: 'email input element has no accessible name'
|
|
638
|
+
},
|
|
639
|
+
'This searchinput element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
640
|
+
variable: false,
|
|
641
|
+
quality: 1,
|
|
642
|
+
what: 'search input element has no accessible name'
|
|
643
|
+
},
|
|
644
|
+
'This textinput element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
645
|
+
variable: false,
|
|
646
|
+
quality: 1,
|
|
647
|
+
what: 'text input element has no accessible name'
|
|
648
|
+
}
|
|
649
|
+
}
|
|
650
|
+
}
|
|
651
|
+
},
|
|
652
|
+
checkboxNoText: {
|
|
653
|
+
summary: 'checkbox input not named',
|
|
654
|
+
why: 'User cannot get help on whether to check a checkbox',
|
|
655
|
+
wcag: '4.1.2',
|
|
656
|
+
weight: 4,
|
|
657
|
+
tools: {
|
|
658
|
+
wax: {
|
|
659
|
+
'This checkboxinput element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
660
|
+
variable: false,
|
|
661
|
+
quality: 1,
|
|
662
|
+
what: 'checkbox input element has no accessible name'
|
|
663
|
+
}
|
|
522
664
|
}
|
|
523
665
|
}
|
|
524
666
|
},
|
|
@@ -537,6 +679,21 @@ exports.issues = {
|
|
|
537
679
|
}
|
|
538
680
|
}
|
|
539
681
|
},
|
|
682
|
+
placeholderPlusAria: {
|
|
683
|
+
summary: 'element has competing placeholder attributes',
|
|
684
|
+
why: 'User gets conflicting help on what information to enter in a form item',
|
|
685
|
+
wcag: '4.1.2',
|
|
686
|
+
weight: 3,
|
|
687
|
+
tools: {
|
|
688
|
+
nuVal: {
|
|
689
|
+
'The aria-placeholder attribute must not be specified on elements that have a placeholder attribute.': {
|
|
690
|
+
variable: false,
|
|
691
|
+
quality: 1,
|
|
692
|
+
what: 'Element has both placeholder and aria-placeholder attributes'
|
|
693
|
+
}
|
|
694
|
+
}
|
|
695
|
+
}
|
|
696
|
+
},
|
|
540
697
|
imageButtonNoText: {
|
|
541
698
|
summary: 'image button not named',
|
|
542
699
|
why: 'User cannot get help understanding an image used as a button',
|
|
@@ -583,6 +740,21 @@ exports.issues = {
|
|
|
583
740
|
}
|
|
584
741
|
}
|
|
585
742
|
},
|
|
743
|
+
numberInputNoText: {
|
|
744
|
+
summary: 'number input not named',
|
|
745
|
+
why: 'User cannot get help understanding what to enter into a number field',
|
|
746
|
+
wcag: '4.1.2',
|
|
747
|
+
weight: 4,
|
|
748
|
+
tools: {
|
|
749
|
+
wax: {
|
|
750
|
+
'This numberinput element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
751
|
+
variable: false,
|
|
752
|
+
quality: 1,
|
|
753
|
+
what: 'Element is an input of type number but has no accessible name'
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
}
|
|
757
|
+
},
|
|
586
758
|
imageInputNoText: {
|
|
587
759
|
summary: 'image input not named',
|
|
588
760
|
why: 'User cannot get help understanding an image used as a submission button',
|
|
@@ -721,6 +893,36 @@ exports.issues = {
|
|
|
721
893
|
variable: false,
|
|
722
894
|
quality: 1,
|
|
723
895
|
what: 'Image has no text alternative'
|
|
896
|
+
},
|
|
897
|
+
'Img element missing an alt attribute. Use the alt attribute to specify a short text alternative.': {
|
|
898
|
+
variable: false,
|
|
899
|
+
quality: 1,
|
|
900
|
+
what: 'Image has no text alternative'
|
|
901
|
+
},
|
|
902
|
+
'Provide alternate text for <img> elements or use role=\'none\' or \'presentation\'.': {
|
|
903
|
+
variable: false,
|
|
904
|
+
quality: 1,
|
|
905
|
+
what: 'Image has no text alternative'
|
|
906
|
+
},
|
|
907
|
+
'Provide alternate text for elements with [role=\'img\'].': {
|
|
908
|
+
variable: false,
|
|
909
|
+
quality: 1,
|
|
910
|
+
what: 'Element with an img role has no text alternative'
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
}
|
|
914
|
+
},
|
|
915
|
+
svgNoText: {
|
|
916
|
+
summary: 'SVG image not named',
|
|
917
|
+
why: 'User cannot get help to know what is in an image',
|
|
918
|
+
wcag: '1.1.1',
|
|
919
|
+
weight: 4,
|
|
920
|
+
tools: {
|
|
921
|
+
wax: {
|
|
922
|
+
'Add alternative text to <svg> elements with an img, graphics-document, or graphics-symbol role.': {
|
|
923
|
+
variable: false,
|
|
924
|
+
quality: 1,
|
|
925
|
+
what: 'Element is svg with an image role but has no accessible name'
|
|
724
926
|
}
|
|
725
927
|
}
|
|
726
928
|
}
|
|
@@ -802,6 +1004,13 @@ exports.issues = {
|
|
|
802
1004
|
what: 'Image text alternative is a URL instead'
|
|
803
1005
|
}
|
|
804
1006
|
},
|
|
1007
|
+
testaro: {
|
|
1008
|
+
altScheme: {
|
|
1009
|
+
variable: false,
|
|
1010
|
+
quality: 1,
|
|
1011
|
+
what: 'Image text alternative is a URL'
|
|
1012
|
+
}
|
|
1013
|
+
}
|
|
805
1014
|
}
|
|
806
1015
|
},
|
|
807
1016
|
imageTextRisk: {
|
|
@@ -822,13 +1031,6 @@ exports.issues = {
|
|
|
822
1031
|
what: 'Text alternative may fail to give information provided by colors'
|
|
823
1032
|
}
|
|
824
1033
|
},
|
|
825
|
-
qualWeb: {
|
|
826
|
-
'QW-WCAG-T8': {
|
|
827
|
-
variable: false,
|
|
828
|
-
quality: 1,
|
|
829
|
-
what: 'Text alternative is suspect'
|
|
830
|
-
}
|
|
831
|
-
},
|
|
832
1034
|
wave: {
|
|
833
1035
|
alt_suspicious: {
|
|
834
1036
|
variable: false,
|
|
@@ -838,21 +1040,6 @@ exports.issues = {
|
|
|
838
1040
|
}
|
|
839
1041
|
}
|
|
840
1042
|
},
|
|
841
|
-
imageNoSource: {
|
|
842
|
-
summary: 'image has no src',
|
|
843
|
-
why: 'Image to be shown cannot be found',
|
|
844
|
-
wcag: '1.3.1',
|
|
845
|
-
weight: 4,
|
|
846
|
-
tools: {
|
|
847
|
-
nuVal: {
|
|
848
|
-
'Element img is missing required attribute src.': {
|
|
849
|
-
variable: false,
|
|
850
|
-
quality: 1,
|
|
851
|
-
what: 'img element has no src attribute'
|
|
852
|
-
}
|
|
853
|
-
}
|
|
854
|
-
}
|
|
855
|
-
},
|
|
856
1043
|
sourceEmpty: {
|
|
857
1044
|
summary: 'src empty',
|
|
858
1045
|
why: 'Image, audio, or video to be shown cannot be found',
|
|
@@ -1172,6 +1359,11 @@ exports.issues = {
|
|
|
1172
1359
|
variable: false,
|
|
1173
1360
|
quality: 1,
|
|
1174
1361
|
what: 'html element has no lang attribute'
|
|
1362
|
+
},
|
|
1363
|
+
'The html element should have a lang or xml:lang attribute which describes the language of the document.': {
|
|
1364
|
+
variable: false,
|
|
1365
|
+
quality: 1,
|
|
1366
|
+
what: 'html element has no lang or xml:lang attribute'
|
|
1175
1367
|
}
|
|
1176
1368
|
}
|
|
1177
1369
|
}
|
|
@@ -1229,6 +1421,13 @@ exports.issues = {
|
|
|
1229
1421
|
quality: 1,
|
|
1230
1422
|
what: 'HTML lang and xml:lang do not match'
|
|
1231
1423
|
}
|
|
1424
|
+
},
|
|
1425
|
+
wax: {
|
|
1426
|
+
'Use valid values for lang attributes.': {
|
|
1427
|
+
variable: false,
|
|
1428
|
+
quality: 1,
|
|
1429
|
+
what: 'lang attribute of the html element has an invalid value'
|
|
1430
|
+
}
|
|
1232
1431
|
}
|
|
1233
1432
|
}
|
|
1234
1433
|
},
|
|
@@ -1322,6 +1521,11 @@ exports.issues = {
|
|
|
1322
1521
|
variable: false,
|
|
1323
1522
|
quality: 1,
|
|
1324
1523
|
what: 'Node is ARIA dialog or alertdialog but has no accessible name'
|
|
1524
|
+
},
|
|
1525
|
+
'Add accessible names to ARIA dialog and alertdialog elements.': {
|
|
1526
|
+
variable: false,
|
|
1527
|
+
quality: 1,
|
|
1528
|
+
what: 'Node is ARIA dialog or alertdialog but has no accessible name'
|
|
1325
1529
|
}
|
|
1326
1530
|
}
|
|
1327
1531
|
}
|
|
@@ -1601,6 +1805,13 @@ exports.issues = {
|
|
|
1601
1805
|
quality: 1,
|
|
1602
1806
|
what: 'Broken same-page link'
|
|
1603
1807
|
}
|
|
1808
|
+
},
|
|
1809
|
+
wax: {
|
|
1810
|
+
'^This link points to a named anchor ".+" within the document, but no anchor exists with that name.+$': {
|
|
1811
|
+
variable: true,
|
|
1812
|
+
quality: 1,
|
|
1813
|
+
what: 'Broken same-page link'
|
|
1814
|
+
}
|
|
1604
1815
|
}
|
|
1605
1816
|
}
|
|
1606
1817
|
},
|
|
@@ -1637,6 +1848,13 @@ exports.issues = {
|
|
|
1637
1848
|
quality: 1,
|
|
1638
1849
|
what: 'for attribute of the label element does not reference a non-hidden form control'
|
|
1639
1850
|
}
|
|
1851
|
+
},
|
|
1852
|
+
wax: {
|
|
1853
|
+
'This label\'s "for" attribute contains an ID for an element that is not a form control. Ensure that you have entered the correct ID for the intended element.': {
|
|
1854
|
+
variable: false,
|
|
1855
|
+
quality: 1,
|
|
1856
|
+
what: 'for attribute of the label element does not reference a form control'
|
|
1857
|
+
}
|
|
1640
1858
|
}
|
|
1641
1859
|
}
|
|
1642
1860
|
},
|
|
@@ -1840,6 +2058,18 @@ exports.issues = {
|
|
|
1840
2058
|
quality: 1,
|
|
1841
2059
|
what: 'Orphaned form label'
|
|
1842
2060
|
}
|
|
2061
|
+
},
|
|
2062
|
+
wax: {
|
|
2063
|
+
'^This form control contains an aria-labelledby attribute, however it includes an ID "[^"]+" that does not exist on an element. The aria-labelledby attribute will be ignored for labelling test purposes\.$': {
|
|
2064
|
+
variable: true,
|
|
2065
|
+
quality: 1,
|
|
2066
|
+
what: 'aria-labelledby value is not the id of any element'
|
|
2067
|
+
},
|
|
2068
|
+
'This label\'s "for" attribute contains an ID that does not exist in the document fragment.': {
|
|
2069
|
+
variable: false,
|
|
2070
|
+
quality: 1,
|
|
2071
|
+
what: 'label has a for attribute whose value is not the id of any element'
|
|
2072
|
+
}
|
|
1843
2073
|
}
|
|
1844
2074
|
}
|
|
1845
2075
|
},
|
|
@@ -1916,13 +2146,6 @@ exports.issues = {
|
|
|
1916
2146
|
what: 'Link has no accessible name'
|
|
1917
2147
|
}
|
|
1918
2148
|
},
|
|
1919
|
-
aslint: {
|
|
1920
|
-
img_empty_alt_in_link: {
|
|
1921
|
-
variable: false,
|
|
1922
|
-
quality: 1,
|
|
1923
|
-
what: 'Element is an image in a link but has no text alternative'
|
|
1924
|
-
}
|
|
1925
|
-
},
|
|
1926
2149
|
axe: {
|
|
1927
2150
|
'link-name': {
|
|
1928
2151
|
variable: false,
|
|
@@ -1931,11 +2154,6 @@ exports.issues = {
|
|
|
1931
2154
|
}
|
|
1932
2155
|
},
|
|
1933
2156
|
ed11y: {
|
|
1934
|
-
altEmptyLinked: {
|
|
1935
|
-
variable: false,
|
|
1936
|
-
quality: 1,
|
|
1937
|
-
what: 'Link name is only an image with no text alternative'
|
|
1938
|
-
},
|
|
1939
2157
|
linkNoText: {
|
|
1940
2158
|
variable: false,
|
|
1941
2159
|
quality: 1,
|
|
@@ -1943,11 +2161,6 @@ exports.issues = {
|
|
|
1943
2161
|
}
|
|
1944
2162
|
},
|
|
1945
2163
|
htmlcs: {
|
|
1946
|
-
'AAA.1_1_1.H30.2': {
|
|
1947
|
-
variable: false,
|
|
1948
|
-
quality: 1,
|
|
1949
|
-
what: 'img element is the only link content but has no text alternative'
|
|
1950
|
-
},
|
|
1951
2164
|
'AAA.4_1_2.H91.A.Empty': {
|
|
1952
2165
|
variable: false,
|
|
1953
2166
|
quality: 1,
|
|
@@ -1981,11 +2194,6 @@ exports.issues = {
|
|
|
1981
2194
|
variable: false,
|
|
1982
2195
|
quality: 1,
|
|
1983
2196
|
what: 'Link has no accessible name'
|
|
1984
|
-
},
|
|
1985
|
-
'QW-WCAG-T21': {
|
|
1986
|
-
variable: false,
|
|
1987
|
-
quality: 1,
|
|
1988
|
-
what: 'Accessible name is not provided for an image which is the only content in a link'
|
|
1989
2197
|
}
|
|
1990
2198
|
},
|
|
1991
2199
|
wave: {
|
|
@@ -1993,7 +2201,67 @@ exports.issues = {
|
|
|
1993
2201
|
variable: false,
|
|
1994
2202
|
quality: 1,
|
|
1995
2203
|
what: 'Link contains not named'
|
|
2204
|
+
}
|
|
2205
|
+
},
|
|
2206
|
+
wax: {
|
|
2207
|
+
'Links must have discernible text': {
|
|
2208
|
+
variable: false,
|
|
2209
|
+
quality: 1,
|
|
2210
|
+
what: 'Link has no discernible text'
|
|
1996
2211
|
},
|
|
2212
|
+
'Provide discernible text for links.': {
|
|
2213
|
+
variable: false,
|
|
2214
|
+
quality: 1,
|
|
2215
|
+
what: 'Link has no discernible text'
|
|
2216
|
+
},
|
|
2217
|
+
'Anchor element found with a valid href attribute, but no link content has been supplied.': {
|
|
2218
|
+
variable: false,
|
|
2219
|
+
quality: 1,
|
|
2220
|
+
what: 'Link has an href attribute but no content'
|
|
2221
|
+
},
|
|
2222
|
+
'Anchor element found with no link content and no name and/or ID attribute.': {
|
|
2223
|
+
variable: false,
|
|
2224
|
+
quality: 1,
|
|
2225
|
+
what: 'Link has no content, accessible name, or id attribute'
|
|
2226
|
+
}
|
|
2227
|
+
}
|
|
2228
|
+
}
|
|
2229
|
+
},
|
|
2230
|
+
imageLinkNoText: {
|
|
2231
|
+
summary: 'link not named',
|
|
2232
|
+
why: 'User cannot get help understanding what a link points to',
|
|
2233
|
+
wcag: '2.4.4',
|
|
2234
|
+
weight: 4,
|
|
2235
|
+
tools: {
|
|
2236
|
+
aslint: {
|
|
2237
|
+
img_empty_alt_in_link: {
|
|
2238
|
+
variable: false,
|
|
2239
|
+
quality: 1,
|
|
2240
|
+
what: 'Element is an image in a link but has no text alternative'
|
|
2241
|
+
}
|
|
2242
|
+
},
|
|
2243
|
+
ed11y: {
|
|
2244
|
+
altEmptyLinked: {
|
|
2245
|
+
variable: false,
|
|
2246
|
+
quality: 1,
|
|
2247
|
+
what: 'Link name is only an image with no text alternative'
|
|
2248
|
+
}
|
|
2249
|
+
},
|
|
2250
|
+
htmlcs: {
|
|
2251
|
+
'AAA.1_1_1.H30.2': {
|
|
2252
|
+
variable: false,
|
|
2253
|
+
quality: 1,
|
|
2254
|
+
what: 'img element is the only link content but has no text alternative'
|
|
2255
|
+
}
|
|
2256
|
+
},
|
|
2257
|
+
qualWeb: {
|
|
2258
|
+
'QW-WCAG-T21': {
|
|
2259
|
+
variable: false,
|
|
2260
|
+
quality: 1,
|
|
2261
|
+
what: 'Accessible name is not provided for an image which is the only content in a link'
|
|
2262
|
+
}
|
|
2263
|
+
},
|
|
2264
|
+
wave: {
|
|
1997
2265
|
alt_link_missing: {
|
|
1998
2266
|
variable: false,
|
|
1999
2267
|
quality: 1,
|
|
@@ -2001,10 +2269,15 @@ exports.issues = {
|
|
|
2001
2269
|
}
|
|
2002
2270
|
},
|
|
2003
2271
|
wax: {
|
|
2004
|
-
'
|
|
2272
|
+
'Img element is the only content of the link, but is missing alt text.': {
|
|
2005
2273
|
variable: false,
|
|
2006
2274
|
quality: 1,
|
|
2007
|
-
what: 'Link
|
|
2275
|
+
what: 'Link content is an image without a text alternative'
|
|
2276
|
+
},
|
|
2277
|
+
'Img element is the only content of the link, but is missing alt text. The alt text should describe the purpose of the link.': {
|
|
2278
|
+
variable: false,
|
|
2279
|
+
quality: 1,
|
|
2280
|
+
what: 'Link content is an image without a text alternative describing the link purpose'
|
|
2008
2281
|
}
|
|
2009
2282
|
}
|
|
2010
2283
|
}
|
|
@@ -2021,6 +2294,13 @@ exports.issues = {
|
|
|
2021
2294
|
quality: 1,
|
|
2022
2295
|
what: 'Link has text but no href, id, or name attribute'
|
|
2023
2296
|
}
|
|
2297
|
+
},
|
|
2298
|
+
wax: {
|
|
2299
|
+
'Anchor element found with link content, but no href, ID or name attribute has been supplied.': {
|
|
2300
|
+
variable: false,
|
|
2301
|
+
quality: 1,
|
|
2302
|
+
what: 'Link has text but no href, id, or name attribute'
|
|
2303
|
+
}
|
|
2024
2304
|
}
|
|
2025
2305
|
}
|
|
2026
2306
|
},
|
|
@@ -2048,6 +2328,13 @@ exports.issues = {
|
|
|
2048
2328
|
quality: 1,
|
|
2049
2329
|
what: 'Element has an empty href attribute'
|
|
2050
2330
|
}
|
|
2331
|
+
},
|
|
2332
|
+
wax: {
|
|
2333
|
+
'Link element is missing a non-empty href attribute pointing to the resource being linked.': {
|
|
2334
|
+
variable: false,
|
|
2335
|
+
quality: 1,
|
|
2336
|
+
what: 'link element is missing a non-empty href for the linked resource'
|
|
2337
|
+
}
|
|
2051
2338
|
}
|
|
2052
2339
|
}
|
|
2053
2340
|
},
|
|
@@ -2186,6 +2473,13 @@ exports.issues = {
|
|
|
2186
2473
|
quality: 1,
|
|
2187
2474
|
what: 'textarea element has no accessible name'
|
|
2188
2475
|
}
|
|
2476
|
+
},
|
|
2477
|
+
wax: {
|
|
2478
|
+
'This textarea element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
2479
|
+
variable: false,
|
|
2480
|
+
quality: 1,
|
|
2481
|
+
what: 'textarea element has no accessible name'
|
|
2482
|
+
}
|
|
2189
2483
|
}
|
|
2190
2484
|
}
|
|
2191
2485
|
},
|
|
@@ -2210,13 +2504,6 @@ exports.issues = {
|
|
|
2210
2504
|
wcag: '2.4.4',
|
|
2211
2505
|
weight: 2,
|
|
2212
2506
|
tools: {
|
|
2213
|
-
aslint: {
|
|
2214
|
-
links_same_content_different_url: {
|
|
2215
|
-
variable: false,
|
|
2216
|
-
quality: 1,
|
|
2217
|
-
what: 'Links with the same text content have different destination URLs'
|
|
2218
|
-
}
|
|
2219
|
-
},
|
|
2220
2507
|
qualWeb: {
|
|
2221
2508
|
'QW-ACT-R9': {
|
|
2222
2509
|
variable: false,
|
|
@@ -2269,7 +2556,7 @@ exports.issues = {
|
|
|
2269
2556
|
}
|
|
2270
2557
|
},
|
|
2271
2558
|
linkPair: {
|
|
2272
|
-
summary: '
|
|
2559
|
+
summary: 'adjacent links not combined',
|
|
2273
2560
|
why: 'Keyboard-only user expends extra effort to skip a link',
|
|
2274
2561
|
wcag: '2.4.4',
|
|
2275
2562
|
weight: 2,
|
|
@@ -2443,6 +2730,11 @@ exports.issues = {
|
|
|
2443
2730
|
variable: false,
|
|
2444
2731
|
quality: 1,
|
|
2445
2732
|
what: 'Element is select and has no multiple attribute, but has more than 1 selected option'
|
|
2733
|
+
},
|
|
2734
|
+
'A select element with a required attribute, and without a multiple attribute, and without a size attribute whose value is greater than 1, must have a child option element.': {
|
|
2735
|
+
variable: false,
|
|
2736
|
+
quality: 1,
|
|
2737
|
+
what: 'Element is select and has no child option element, but its attributes require one'
|
|
2446
2738
|
}
|
|
2447
2739
|
}
|
|
2448
2740
|
}
|
|
@@ -2462,9 +2754,24 @@ exports.issues = {
|
|
|
2462
2754
|
}
|
|
2463
2755
|
}
|
|
2464
2756
|
},
|
|
2757
|
+
buttonNoContent: {
|
|
2758
|
+
summary: 'button name not visible',
|
|
2759
|
+
why: 'User cannot get help explaining a button',
|
|
2760
|
+
wcag: '4.1.2',
|
|
2761
|
+
weight: 1,
|
|
2762
|
+
tools: {
|
|
2763
|
+
aslint: {
|
|
2764
|
+
empty_button_description: {
|
|
2765
|
+
variable: false,
|
|
2766
|
+
quality: 1,
|
|
2767
|
+
what: 'button element has no visible accessible name'
|
|
2768
|
+
}
|
|
2769
|
+
}
|
|
2770
|
+
}
|
|
2771
|
+
},
|
|
2465
2772
|
buttonNoText: {
|
|
2466
2773
|
summary: 'button not named',
|
|
2467
|
-
why: 'User cannot get help
|
|
2774
|
+
why: 'User cannot get help explaining a button',
|
|
2468
2775
|
wcag: '4.1.2',
|
|
2469
2776
|
weight: 4,
|
|
2470
2777
|
tools: {
|
|
@@ -2475,13 +2782,6 @@ exports.issues = {
|
|
|
2475
2782
|
what: 'button element has no accessible name'
|
|
2476
2783
|
}
|
|
2477
2784
|
},
|
|
2478
|
-
aslint: {
|
|
2479
|
-
empty_button_description: {
|
|
2480
|
-
variable: false,
|
|
2481
|
-
quality: 1,
|
|
2482
|
-
what: 'button element has no visible accessible name'
|
|
2483
|
-
}
|
|
2484
|
-
},
|
|
2485
2785
|
axe: {
|
|
2486
2786
|
'aria-command-name': {
|
|
2487
2787
|
variable: false,
|
|
@@ -2563,10 +2863,35 @@ exports.issues = {
|
|
|
2563
2863
|
quality: 1,
|
|
2564
2864
|
what: 'button element has no discernible text'
|
|
2565
2865
|
},
|
|
2866
|
+
'This button element does not have a name available to an accessibility API. Valid names are: title , element content, aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
2867
|
+
variable: false,
|
|
2868
|
+
quality: 1,
|
|
2869
|
+
what: 'button element has no accessible name'
|
|
2870
|
+
},
|
|
2871
|
+
'This element has role of "button" but does not have a name available to an accessibility API. Valid names are: element content, aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
2872
|
+
variable: false,
|
|
2873
|
+
quality: 1,
|
|
2874
|
+
what: 'Element with a button role has no accessible name'
|
|
2875
|
+
},
|
|
2876
|
+
'This element has role of "button" but does not have a name available to an accessibility API. Valid names are: title , element content, aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
2877
|
+
variable: false,
|
|
2878
|
+
quality: 1,
|
|
2879
|
+
what: 'Element with a button role has no accessible name'
|
|
2880
|
+
},
|
|
2566
2881
|
'Input buttons must have discernible text': {
|
|
2567
2882
|
variable: false,
|
|
2568
2883
|
quality: 1,
|
|
2569
2884
|
what: 'input element with button type has no discernible text'
|
|
2885
|
+
},
|
|
2886
|
+
'Provide discernible text for input buttons.': {
|
|
2887
|
+
variable: false,
|
|
2888
|
+
quality: 1,
|
|
2889
|
+
what: 'input element with button type has no discernible text'
|
|
2890
|
+
},
|
|
2891
|
+
'This buttoninput element does not have a name available to an accessibility API. Valid names are: value , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
2892
|
+
variable: false,
|
|
2893
|
+
quality: 1,
|
|
2894
|
+
what: 'input element with button type has no accessible name'
|
|
2570
2895
|
}
|
|
2571
2896
|
}
|
|
2572
2897
|
}
|
|
@@ -2632,6 +2957,11 @@ exports.issues = {
|
|
|
2632
2957
|
variable: false,
|
|
2633
2958
|
quality: 1,
|
|
2634
2959
|
what: 'ARIA role is not contained by a required parent'
|
|
2960
|
+
},
|
|
2961
|
+
'Ensure elements with ARIA roles are within required parent roles.': {
|
|
2962
|
+
variable: false,
|
|
2963
|
+
quality: 1,
|
|
2964
|
+
what: 'ARIA role is not contained by a required parent'
|
|
2635
2965
|
}
|
|
2636
2966
|
}
|
|
2637
2967
|
}
|
|
@@ -2656,6 +2986,13 @@ exports.issues = {
|
|
|
2656
2986
|
what: 'ARIA role does not contain a required child'
|
|
2657
2987
|
}
|
|
2658
2988
|
},
|
|
2989
|
+
nuVal: {
|
|
2990
|
+
'^Element .+ is missing a required instance of child element .+$': {
|
|
2991
|
+
variable: true,
|
|
2992
|
+
quality: 1,
|
|
2993
|
+
what: 'Element is missing a required child'
|
|
2994
|
+
}
|
|
2995
|
+
},
|
|
2659
2996
|
qualWeb: {
|
|
2660
2997
|
'QW-ACT-R38': {
|
|
2661
2998
|
variable: false,
|
|
@@ -2668,6 +3005,11 @@ exports.issues = {
|
|
|
2668
3005
|
variable: false,
|
|
2669
3006
|
quality: 1,
|
|
2670
3007
|
what: 'ARIA role does not contain a required child'
|
|
3008
|
+
},
|
|
3009
|
+
'Ensure elements with ARIA roles contain required child roles.': {
|
|
3010
|
+
variable: false,
|
|
3011
|
+
quality: 1,
|
|
3012
|
+
what: 'Element does not contain a child required by its ARIA role'
|
|
2671
3013
|
}
|
|
2672
3014
|
}
|
|
2673
3015
|
}
|
|
@@ -2857,6 +3199,11 @@ exports.issues = {
|
|
|
2857
3199
|
variable: false,
|
|
2858
3200
|
quality: 1,
|
|
2859
3201
|
what: 'Element disables zooming or scaling'
|
|
3202
|
+
},
|
|
3203
|
+
'Ensure <meta name="viewport"> does not disable text scaling and zooming.': {
|
|
3204
|
+
variable: false,
|
|
3205
|
+
quality: 1,
|
|
3206
|
+
what: 'Element disables zooming or scaling'
|
|
2860
3207
|
}
|
|
2861
3208
|
}
|
|
2862
3209
|
}
|
|
@@ -2873,13 +3220,6 @@ exports.issues = {
|
|
|
2873
3220
|
quality: 1,
|
|
2874
3221
|
what: 'Paragraph text has an absolute font size'
|
|
2875
3222
|
}
|
|
2876
|
-
},
|
|
2877
|
-
qualWeb: {
|
|
2878
|
-
'QW-WCAG-T28': {
|
|
2879
|
-
variable: false,
|
|
2880
|
-
quality: 0.8,
|
|
2881
|
-
what: 'Font size set to an absolute unit value'
|
|
2882
|
-
}
|
|
2883
3223
|
}
|
|
2884
3224
|
}
|
|
2885
3225
|
},
|
|
@@ -3003,13 +3343,6 @@ exports.issues = {
|
|
|
3003
3343
|
wcag: '1.4.8',
|
|
3004
3344
|
weight: 2,
|
|
3005
3345
|
tools: {
|
|
3006
|
-
alfa: {
|
|
3007
|
-
r73: {
|
|
3008
|
-
variable: false,
|
|
3009
|
-
quality: 1,
|
|
3010
|
-
what: 'Text line height is not at least 1.5'
|
|
3011
|
-
}
|
|
3012
|
-
},
|
|
3013
3346
|
testaro: {
|
|
3014
3347
|
lineHeight: {
|
|
3015
3348
|
variable: false,
|
|
@@ -3114,7 +3447,7 @@ exports.issues = {
|
|
|
3114
3447
|
}
|
|
3115
3448
|
}
|
|
3116
3449
|
},
|
|
3117
|
-
|
|
3450
|
+
linkElementMisplaced: {
|
|
3118
3451
|
summary: 'link element invalid',
|
|
3119
3452
|
why: 'Document fails to get a needed external resource',
|
|
3120
3453
|
wcag: '1.3.1',
|
|
@@ -3125,7 +3458,31 @@ exports.issues = {
|
|
|
3125
3458
|
variable: false,
|
|
3126
3459
|
quality: 1,
|
|
3127
3460
|
what: 'Element is not in the document head'
|
|
3128
|
-
}
|
|
3461
|
+
}
|
|
3462
|
+
},
|
|
3463
|
+
nuVal: {
|
|
3464
|
+
'A link element must not appear as a descendant of a body element unless the link element has an itemprop attribute or has a rel attribute whose value contains dns-prefetch, modulepreload, pingback, preconnect, prefetch, preload, prerender, or stylesheet.': {
|
|
3465
|
+
variable: false,
|
|
3466
|
+
quality: 1,
|
|
3467
|
+
what: 'Element has a body ancestor but no itemprop or valid rel attribute'
|
|
3468
|
+
}
|
|
3469
|
+
},
|
|
3470
|
+
wax: {
|
|
3471
|
+
'Link elements can only be located in the head section of the document.': {
|
|
3472
|
+
variable: false,
|
|
3473
|
+
quality: 1,
|
|
3474
|
+
what: 'link element is not located in the head element'
|
|
3475
|
+
}
|
|
3476
|
+
}
|
|
3477
|
+
}
|
|
3478
|
+
},
|
|
3479
|
+
linkElementBad: {
|
|
3480
|
+
summary: 'link element invalid',
|
|
3481
|
+
why: 'Document fails to get a needed external resource',
|
|
3482
|
+
wcag: '1.3.1',
|
|
3483
|
+
weight: 4,
|
|
3484
|
+
tools: {
|
|
3485
|
+
htmlcs: {
|
|
3129
3486
|
'AAA.2_4_8.H59.2a': {
|
|
3130
3487
|
variable: false,
|
|
3131
3488
|
quality: 1,
|
|
@@ -3138,11 +3495,6 @@ exports.issues = {
|
|
|
3138
3495
|
}
|
|
3139
3496
|
},
|
|
3140
3497
|
nuVal: {
|
|
3141
|
-
'A link element must not appear as a descendant of a body element unless the link element has an itemprop attribute or has a rel attribute whose value contains dns-prefetch, modulepreload, pingback, preconnect, prefetch, preload, prerender, or stylesheet.': {
|
|
3142
|
-
variable: false,
|
|
3143
|
-
quality: 1,
|
|
3144
|
-
what: 'Element has a body ancestor but no itemprop or valid rel attribute'
|
|
3145
|
-
},
|
|
3146
3498
|
'A link element with an as attribute must have a rel attribute that contains the value preload or the value modulepreload or the value prefetch.': {
|
|
3147
3499
|
variable: false,
|
|
3148
3500
|
quality: 1,
|
|
@@ -3158,6 +3510,13 @@ exports.issues = {
|
|
|
3158
3510
|
quality: 1,
|
|
3159
3511
|
what: 'Element has a color attribute but no rel attribute with mask-icon as its value'
|
|
3160
3512
|
}
|
|
3513
|
+
},
|
|
3514
|
+
wax: {
|
|
3515
|
+
'Link element is missing a non-empty rel attribute identifying the link type.': {
|
|
3516
|
+
variable: false,
|
|
3517
|
+
quality: 1,
|
|
3518
|
+
what: 'Element is link, but its rel attribute is empty or missing'
|
|
3519
|
+
}
|
|
3161
3520
|
}
|
|
3162
3521
|
}
|
|
3163
3522
|
},
|
|
@@ -3216,6 +3575,21 @@ exports.issues = {
|
|
|
3216
3575
|
}
|
|
3217
3576
|
}
|
|
3218
3577
|
},
|
|
3578
|
+
metaMisplaced: {
|
|
3579
|
+
summary: 'meta element in invalid location',
|
|
3580
|
+
why: 'Document fails to provide needed data',
|
|
3581
|
+
wcag: '1.3.1',
|
|
3582
|
+
weight: 4,
|
|
3583
|
+
tools: {
|
|
3584
|
+
nuVal: {
|
|
3585
|
+
'meta element between head and body.': {
|
|
3586
|
+
variable: false,
|
|
3587
|
+
quality: 1,
|
|
3588
|
+
what: 'meta element is between the head and body elements'
|
|
3589
|
+
}
|
|
3590
|
+
}
|
|
3591
|
+
}
|
|
3592
|
+
},
|
|
3219
3593
|
scriptElementBad: {
|
|
3220
3594
|
summary: 'script element invalid',
|
|
3221
3595
|
why: 'Browser processes the document improperly',
|
|
@@ -3318,11 +3692,6 @@ exports.issues = {
|
|
|
3318
3692
|
}
|
|
3319
3693
|
},
|
|
3320
3694
|
qualWeb: {
|
|
3321
|
-
'QW-ACT-R10': {
|
|
3322
|
-
variable: false,
|
|
3323
|
-
quality: 1,
|
|
3324
|
-
what: 'iframe elements with identical accessible names have different purposes'
|
|
3325
|
-
},
|
|
3326
3695
|
'QW-ACT-R19': {
|
|
3327
3696
|
variable: false,
|
|
3328
3697
|
quality: 1,
|
|
@@ -3339,6 +3708,11 @@ exports.issues = {
|
|
|
3339
3708
|
variable: false,
|
|
3340
3709
|
quality: 1,
|
|
3341
3710
|
what: 'iframe or frame element has no accessible name'
|
|
3711
|
+
},
|
|
3712
|
+
'Iframe element requires a non-empty title attribute that identifies the frame.': {
|
|
3713
|
+
variable: false,
|
|
3714
|
+
quality: 1,
|
|
3715
|
+
what: 'iframe element has no title attribute identifying it'
|
|
3342
3716
|
}
|
|
3343
3717
|
}
|
|
3344
3718
|
}
|
|
@@ -3655,7 +4029,12 @@ exports.issues = {
|
|
|
3655
4029
|
'Elements must only use allowed ARIA attributes': {
|
|
3656
4030
|
variable: false,
|
|
3657
4031
|
quality: 1,
|
|
3658
|
-
what: 'Element has an attribute that is not allowed'
|
|
4032
|
+
what: 'Element has an ARIA attribute that is not allowed'
|
|
4033
|
+
},
|
|
4034
|
+
'Ensure ARIA attributes used are permitted for the element\'s role.': {
|
|
4035
|
+
variable: false,
|
|
4036
|
+
quality: 1,
|
|
4037
|
+
what: 'Element has an ARIA attribute that is invalid for the role of the element'
|
|
3659
4038
|
}
|
|
3660
4039
|
},
|
|
3661
4040
|
}
|
|
@@ -3699,6 +4078,13 @@ exports.issues = {
|
|
|
3699
4078
|
quality: 1,
|
|
3700
4079
|
what: 'script element with a defer attribute has type="module"'
|
|
3701
4080
|
}
|
|
4081
|
+
},
|
|
4082
|
+
wax: {
|
|
4083
|
+
'Ensure ARIA attributes have valid values as per specifications.': {
|
|
4084
|
+
variable: false,
|
|
4085
|
+
quality: 1,
|
|
4086
|
+
what: 'Value of an ARIA attribute on the element is invalid'
|
|
4087
|
+
}
|
|
3702
4088
|
}
|
|
3703
4089
|
}
|
|
3704
4090
|
},
|
|
@@ -3708,20 +4094,6 @@ exports.issues = {
|
|
|
3708
4094
|
wcag: '4.1.2',
|
|
3709
4095
|
weight: 4,
|
|
3710
4096
|
tools: {
|
|
3711
|
-
axe: {
|
|
3712
|
-
'aria-required-attr': {
|
|
3713
|
-
variable: false,
|
|
3714
|
-
quality: 1,
|
|
3715
|
-
what: 'Required ARIA attribute is not provided'
|
|
3716
|
-
}
|
|
3717
|
-
},
|
|
3718
|
-
ibm: {
|
|
3719
|
-
aria_attribute_required: {
|
|
3720
|
-
variable: false,
|
|
3721
|
-
quality: 1,
|
|
3722
|
-
what: 'Element does not have the ARIA attribute required by its role'
|
|
3723
|
-
}
|
|
3724
|
-
},
|
|
3725
4097
|
nuVal: {
|
|
3726
4098
|
'^Element image is missing required attribute (?:height|width).*$': {
|
|
3727
4099
|
variable: true,
|
|
@@ -3794,6 +4166,20 @@ exports.issues = {
|
|
|
3794
4166
|
what: 'Element does not have all required states and properties'
|
|
3795
4167
|
}
|
|
3796
4168
|
},
|
|
4169
|
+
axe: {
|
|
4170
|
+
'aria-required-attr': {
|
|
4171
|
+
variable: false,
|
|
4172
|
+
quality: 1,
|
|
4173
|
+
what: 'Required ARIA attribute is not provided'
|
|
4174
|
+
}
|
|
4175
|
+
},
|
|
4176
|
+
ibm: {
|
|
4177
|
+
aria_attribute_required: {
|
|
4178
|
+
variable: false,
|
|
4179
|
+
quality: 1,
|
|
4180
|
+
what: 'Element does not have an ARIA attribute required by its role'
|
|
4181
|
+
}
|
|
4182
|
+
},
|
|
3797
4183
|
nuVal: {
|
|
3798
4184
|
'^Element .+ is missing required attribute aria-.+$': {
|
|
3799
4185
|
variable: true,
|
|
@@ -3807,6 +4193,13 @@ exports.issues = {
|
|
|
3807
4193
|
quality: 1,
|
|
3808
4194
|
what: 'Element with a role attribute does not have the required states and properties'
|
|
3809
4195
|
}
|
|
4196
|
+
},
|
|
4197
|
+
wax: {
|
|
4198
|
+
'Include required ARIA attributes for elements with ARIA roles.': {
|
|
4199
|
+
variable: false,
|
|
4200
|
+
quality: 1,
|
|
4201
|
+
what: 'Element does not have an ARIA attribute required by the role of the element'
|
|
4202
|
+
}
|
|
3810
4203
|
}
|
|
3811
4204
|
}
|
|
3812
4205
|
},
|
|
@@ -3886,6 +4279,11 @@ exports.issues = {
|
|
|
3886
4279
|
quality: 1,
|
|
3887
4280
|
what: 'ARIA attribute is invalid for the role'
|
|
3888
4281
|
},
|
|
4282
|
+
aria_attribute_exists: {
|
|
4283
|
+
variable: false,
|
|
4284
|
+
quality: 1,
|
|
4285
|
+
what: 'ARIA attribute has an empty value'
|
|
4286
|
+
},
|
|
3889
4287
|
Rpt_Aria_ValidPropertyValue: {
|
|
3890
4288
|
variable: false,
|
|
3891
4289
|
quality: 1,
|
|
@@ -3955,6 +4353,18 @@ exports.issues = {
|
|
|
3955
4353
|
quality: 1,
|
|
3956
4354
|
what: 'ARIA state or property has an invalid value'
|
|
3957
4355
|
}
|
|
4356
|
+
},
|
|
4357
|
+
wax: {
|
|
4358
|
+
'Apply aria-roledescription only to elements with a valid ARIA role.': {
|
|
4359
|
+
variable: false,
|
|
4360
|
+
quality: 1,
|
|
4361
|
+
what: 'Element has no valid ARIA role but has an aria-roledescription attribute'
|
|
4362
|
+
},
|
|
4363
|
+
'Use only valid ARIA attributes that conform to specifications.': {
|
|
4364
|
+
variable: false,
|
|
4365
|
+
quality: 1,
|
|
4366
|
+
what: 'Element has an invalid ARIA attribute'
|
|
4367
|
+
}
|
|
3958
4368
|
}
|
|
3959
4369
|
}
|
|
3960
4370
|
},
|
|
@@ -3985,6 +4395,21 @@ exports.issues = {
|
|
|
3985
4395
|
}
|
|
3986
4396
|
}
|
|
3987
4397
|
},
|
|
4398
|
+
ariaVersusHTML: {
|
|
4399
|
+
summary: 'aria and HTML attributes have conflicting value',
|
|
4400
|
+
why: 'User gets erroneous help with content',
|
|
4401
|
+
wcag: '4.1.2',
|
|
4402
|
+
weight: 4,
|
|
4403
|
+
tools: {
|
|
4404
|
+
ibm: {
|
|
4405
|
+
aria_attribute_conflict: {
|
|
4406
|
+
variable: false,
|
|
4407
|
+
quality: 1,
|
|
4408
|
+
what: 'ARIA and HTML attributes on the same element have conflicting values'
|
|
4409
|
+
}
|
|
4410
|
+
}
|
|
4411
|
+
}
|
|
4412
|
+
},
|
|
3988
4413
|
ariaReferenceBad: {
|
|
3989
4414
|
summary: 'aria reference invalid',
|
|
3990
4415
|
why: 'Item behavior violates user expectations',
|
|
@@ -4066,6 +4491,13 @@ exports.issues = {
|
|
|
4066
4491
|
quality: 1,
|
|
4067
4492
|
what: 'autocomplete attribute has no valid value'
|
|
4068
4493
|
}
|
|
4494
|
+
},
|
|
4495
|
+
wax: {
|
|
4496
|
+
'^Element does not belong to .+ control group\. Invalid autocomplete value has been provided - .+$': {
|
|
4497
|
+
variable: true,
|
|
4498
|
+
quality: 1,
|
|
4499
|
+
what: 'autocomplete attribute has an invalid value'
|
|
4500
|
+
}
|
|
4069
4501
|
}
|
|
4070
4502
|
}
|
|
4071
4503
|
},
|
|
@@ -4096,6 +4528,13 @@ exports.issues = {
|
|
|
4096
4528
|
quality: 1,
|
|
4097
4529
|
what: 'Element contains a potentially faulty value in its autocomplete attribute'
|
|
4098
4530
|
}
|
|
4531
|
+
},
|
|
4532
|
+
wax: {
|
|
4533
|
+
'This element contains a potentially faulty value in its autocomplete attribute: .': {
|
|
4534
|
+
variable: false,
|
|
4535
|
+
quality: 1,
|
|
4536
|
+
what: 'Element contains a potentially faulty value in its autocomplete attribute'
|
|
4537
|
+
}
|
|
4099
4538
|
}
|
|
4100
4539
|
}
|
|
4101
4540
|
},
|
|
@@ -4129,9 +4568,9 @@ exports.issues = {
|
|
|
4129
4568
|
}
|
|
4130
4569
|
}
|
|
4131
4570
|
},
|
|
4132
|
-
|
|
4133
|
-
summary: '
|
|
4134
|
-
why: '
|
|
4571
|
+
contrastAA: {
|
|
4572
|
+
summary: 'contrast poor',
|
|
4573
|
+
why: 'Content is difficult to understand',
|
|
4135
4574
|
wcag: '1.4.3',
|
|
4136
4575
|
weight: 4,
|
|
4137
4576
|
tools: {
|
|
@@ -4165,7 +4604,7 @@ exports.issues = {
|
|
|
4165
4604
|
'AAA.1_4_3.G145.Fail': {
|
|
4166
4605
|
variable: false,
|
|
4167
4606
|
quality: 1,
|
|
4168
|
-
what: 'Contrast between the text and its background is less than 3:1
|
|
4607
|
+
what: 'Contrast between the text and its background is less than 3:1'
|
|
4169
4608
|
},
|
|
4170
4609
|
'AAA.1_4_3.G18.Fail': {
|
|
4171
4610
|
variable: false,
|
|
@@ -4185,55 +4624,30 @@ exports.issues = {
|
|
|
4185
4624
|
what: 'Text has a contrast with its background less than the WCAG AA minimum for its size and weight'
|
|
4186
4625
|
}
|
|
4187
4626
|
},
|
|
4188
|
-
qualWeb: {
|
|
4189
|
-
'QW-ACT-R37': {
|
|
4190
|
-
variable: false,
|
|
4191
|
-
quality: 1,
|
|
4192
|
-
what: 'Text has less than the minimum contrast'
|
|
4193
|
-
}
|
|
4194
|
-
},
|
|
4195
4627
|
wave: {
|
|
4196
4628
|
contrast: {
|
|
4197
4629
|
variable: false,
|
|
4198
4630
|
quality: 1,
|
|
4199
4631
|
what: 'Very low contrast'
|
|
4200
4632
|
}
|
|
4201
|
-
}
|
|
4202
|
-
|
|
4203
|
-
|
|
4204
|
-
|
|
4205
|
-
summary: 'color missing',
|
|
4206
|
-
why: 'Content is impossible to perceive under some conditions',
|
|
4207
|
-
wcag: '1.4.3',
|
|
4208
|
-
weight: 4,
|
|
4209
|
-
tools: {
|
|
4210
|
-
qualWeb: {
|
|
4211
|
-
'QW-WCAG-T31': {
|
|
4212
|
-
variable: false,
|
|
4633
|
+
},
|
|
4634
|
+
wax: {
|
|
4635
|
+
'^This element has insufficient contrast at this conformance level\. Expected a contrast ratio of at least 3:1, but text in this element has a contrast ratio of .+\. Recommendation: change .+ to #.+$': {
|
|
4636
|
+
variable: true,
|
|
4213
4637
|
quality: 1,
|
|
4214
|
-
what: '
|
|
4215
|
-
}
|
|
4216
|
-
|
|
4217
|
-
|
|
4218
|
-
},
|
|
4219
|
-
colorNamedRisk: {
|
|
4220
|
-
summary: 'color perception required?',
|
|
4221
|
-
why: 'Content is impossible to perceive under some conditions',
|
|
4222
|
-
wcag: '1.4.1',
|
|
4223
|
-
weight: 1,
|
|
4224
|
-
tools: {
|
|
4225
|
-
qualWeb: {
|
|
4226
|
-
'text-color-convey-information': {
|
|
4227
|
-
variable: false,
|
|
4638
|
+
what: 'Contrast between the element text and its background is less than 3:1'
|
|
4639
|
+
},
|
|
4640
|
+
'^This element has insufficient contrast at this conformance level\. Expected a contrast ratio of at least 4\.5:1, but text in this element has a contrast ratio of .+\. Recommendation: change .+ to #.+$': {
|
|
4641
|
+
variable: true,
|
|
4228
4642
|
quality: 1,
|
|
4229
|
-
what: '
|
|
4643
|
+
what: 'Contrast between the element text and its background is less than 4.5:1'
|
|
4230
4644
|
}
|
|
4231
4645
|
}
|
|
4232
4646
|
}
|
|
4233
4647
|
},
|
|
4234
4648
|
contrastAAA: {
|
|
4235
4649
|
summary: 'text contrast improvable',
|
|
4236
|
-
why: '
|
|
4650
|
+
why: 'Content is not easy to understand',
|
|
4237
4651
|
wcag: '1.4.6',
|
|
4238
4652
|
weight: 1,
|
|
4239
4653
|
tools: {
|
|
@@ -4279,7 +4693,14 @@ exports.issues = {
|
|
|
4279
4693
|
'QW-ACT-R76': {
|
|
4280
4694
|
variable: false,
|
|
4281
4695
|
quality: 1,
|
|
4282
|
-
what: 'Text has less than the enhanced minimum contrast'
|
|
4696
|
+
what: 'Text has less than the enhanced minimum contrast'
|
|
4697
|
+
}
|
|
4698
|
+
},
|
|
4699
|
+
wax: {
|
|
4700
|
+
'^This element has insufficient contrast at this conformance level\. Expected a contrast ratio of at least 7:1, but text in this element has a contrast ratio of .+\. Recommendation: change .+ to #.+$': {
|
|
4701
|
+
variable: true,
|
|
4702
|
+
quality: 1,
|
|
4703
|
+
what: 'Contrast between the element text and its background is less than 7:1'
|
|
4283
4704
|
}
|
|
4284
4705
|
}
|
|
4285
4706
|
}
|
|
@@ -4375,6 +4796,28 @@ exports.issues = {
|
|
|
4375
4796
|
quality: 1,
|
|
4376
4797
|
what: 'Contrast between the text and its background image may be less than 7:1'
|
|
4377
4798
|
}
|
|
4799
|
+
},
|
|
4800
|
+
qualWeb: {
|
|
4801
|
+
'QW-ACT-R37': {
|
|
4802
|
+
variable: false,
|
|
4803
|
+
quality: 1,
|
|
4804
|
+
what: 'Text has less than the minimum contrast or has an image background'
|
|
4805
|
+
}
|
|
4806
|
+
}
|
|
4807
|
+
}
|
|
4808
|
+
},
|
|
4809
|
+
colorNamedRisk: {
|
|
4810
|
+
summary: 'color perception required?',
|
|
4811
|
+
why: 'Content is impossible to perceive under some conditions',
|
|
4812
|
+
wcag: '1.4.1',
|
|
4813
|
+
weight: 1,
|
|
4814
|
+
tools: {
|
|
4815
|
+
qualWeb: {
|
|
4816
|
+
'text-color-convey-information': {
|
|
4817
|
+
variable: false,
|
|
4818
|
+
quality: 1,
|
|
4819
|
+
what: 'Text naming a color may require the ability to distinguish colors'
|
|
4820
|
+
}
|
|
4378
4821
|
}
|
|
4379
4822
|
}
|
|
4380
4823
|
},
|
|
@@ -4511,6 +4954,13 @@ exports.issues = {
|
|
|
4511
4954
|
quality: 1,
|
|
4512
4955
|
what: 'No content between two headings of the same level'
|
|
4513
4956
|
}
|
|
4957
|
+
},
|
|
4958
|
+
wax: {
|
|
4959
|
+
'Heading tag found with no content. Text that is not intended as a heading should not be marked up with heading tags.': {
|
|
4960
|
+
variable: false,
|
|
4961
|
+
quality: 1,
|
|
4962
|
+
what: 'No content after a heading'
|
|
4963
|
+
}
|
|
4514
4964
|
}
|
|
4515
4965
|
}
|
|
4516
4966
|
},
|
|
@@ -4681,6 +5131,13 @@ exports.issues = {
|
|
|
4681
5131
|
quality: 1,
|
|
4682
5132
|
what: 'Element has an empty title attribute'
|
|
4683
5133
|
}
|
|
5134
|
+
},
|
|
5135
|
+
wax: {
|
|
5136
|
+
'This form control has a "title" attribute that is empty or contains only spaces. It will be ignored for labelling test purposes.': {
|
|
5137
|
+
variable: false,
|
|
5138
|
+
quality: 1,
|
|
5139
|
+
what: 'Element has an empty title attribute'
|
|
5140
|
+
}
|
|
4684
5141
|
}
|
|
4685
5142
|
}
|
|
4686
5143
|
},
|
|
@@ -4826,6 +5283,11 @@ exports.issues = {
|
|
|
4826
5283
|
variable: false,
|
|
4827
5284
|
quality: 1,
|
|
4828
5285
|
what: 'Document contains no title element'
|
|
5286
|
+
},
|
|
5287
|
+
'A title should be provided for the document, using a non-empty title element in the head section.': {
|
|
5288
|
+
variable: false,
|
|
5289
|
+
quality: 1,
|
|
5290
|
+
what: 'Document contains no title element in the head element'
|
|
4829
5291
|
}
|
|
4830
5292
|
}
|
|
4831
5293
|
}
|
|
@@ -4891,6 +5353,11 @@ exports.issues = {
|
|
|
4891
5353
|
variable: false,
|
|
4892
5354
|
quality: 1,
|
|
4893
5355
|
what: 'Heading levels do not increase by only one'
|
|
5356
|
+
},
|
|
5357
|
+
'Maintain a logical order by only increasing heading levels by one.': {
|
|
5358
|
+
variable: false,
|
|
5359
|
+
quality: 1,
|
|
5360
|
+
what: 'Heading levels do not increase by only one'
|
|
4894
5361
|
}
|
|
4895
5362
|
}
|
|
4896
5363
|
}
|
|
@@ -4914,6 +5381,13 @@ exports.issues = {
|
|
|
4914
5381
|
quality: 1,
|
|
4915
5382
|
what: 'Heading level is incorrect'
|
|
4916
5383
|
}
|
|
5384
|
+
},
|
|
5385
|
+
testaro: {
|
|
5386
|
+
secHeading: {
|
|
5387
|
+
variable: false,
|
|
5388
|
+
quality: 1,
|
|
5389
|
+
what: 'Sectioning container heading level is incorrect'
|
|
5390
|
+
}
|
|
4917
5391
|
}
|
|
4918
5392
|
}
|
|
4919
5393
|
},
|
|
@@ -4936,6 +5410,13 @@ exports.issues = {
|
|
|
4936
5410
|
quality: 1,
|
|
4937
5411
|
what: 'Heading has the same text as a previous sibling heading at the same level'
|
|
4938
5412
|
}
|
|
5413
|
+
},
|
|
5414
|
+
wax: {
|
|
5415
|
+
'^The heading structure is not logically nested. This h. element should be an h. to be properly nested.+$': {
|
|
5416
|
+
variable: true,
|
|
5417
|
+
quality: 1,
|
|
5418
|
+
what: 'Heading level is illogical'
|
|
5419
|
+
}
|
|
4939
5420
|
}
|
|
4940
5421
|
}
|
|
4941
5422
|
},
|
|
@@ -5022,6 +5503,22 @@ exports.issues = {
|
|
|
5022
5503
|
}
|
|
5023
5504
|
}
|
|
5024
5505
|
},
|
|
5506
|
+
docHeadingNotH1: {
|
|
5507
|
+
summary: 'primary heading not h1',
|
|
5508
|
+
why: 'User cannot understand the topic of the document',
|
|
5509
|
+
wcag: '1.3.1',
|
|
5510
|
+
weight: 2,
|
|
5511
|
+
max: 1,
|
|
5512
|
+
tools: {
|
|
5513
|
+
wax: {
|
|
5514
|
+
'^The heading structure is not logically nested. This h. element appears to be the primary document heading, so should be an h1 element.+$': {
|
|
5515
|
+
variable: true,
|
|
5516
|
+
quality: 1,
|
|
5517
|
+
what: 'Apparent primary document heading is not h1'
|
|
5518
|
+
}
|
|
5519
|
+
}
|
|
5520
|
+
}
|
|
5521
|
+
},
|
|
5025
5522
|
articleHeadingless: {
|
|
5026
5523
|
summary: 'article heading missing',
|
|
5027
5524
|
why: 'User cannot understand the topic of a part of the document',
|
|
@@ -5163,6 +5660,20 @@ exports.issues = {
|
|
|
5163
5660
|
quality: 1,
|
|
5164
5661
|
what: 'Special text is designated nonsemantically with a (deprecated) font element'
|
|
5165
5662
|
}
|
|
5663
|
+
},
|
|
5664
|
+
wax: {
|
|
5665
|
+
'Semantic markup should be used to mark emphasised or special text so that it can be programmatically determined.': {
|
|
5666
|
+
variable: false,
|
|
5667
|
+
quality: 1,
|
|
5668
|
+
what: 'Special text is designated with styles instead of semantically'
|
|
5669
|
+
}
|
|
5670
|
+
},
|
|
5671
|
+
testaro: {
|
|
5672
|
+
textSem: {
|
|
5673
|
+
variable: false,
|
|
5674
|
+
quality: 1,
|
|
5675
|
+
what: 'Element is a nonsemantic i, b, or small element'
|
|
5676
|
+
}
|
|
5166
5677
|
}
|
|
5167
5678
|
}
|
|
5168
5679
|
},
|
|
@@ -5306,6 +5817,11 @@ exports.issues = {
|
|
|
5306
5817
|
variable: false,
|
|
5307
5818
|
quality: 1,
|
|
5308
5819
|
what: 'Element is ul or ol but directly contains an element other than li, script, or template'
|
|
5820
|
+
},
|
|
5821
|
+
'Ensure lists are structured correctly with <li> elements.': {
|
|
5822
|
+
variable: false,
|
|
5823
|
+
quality: 1,
|
|
5824
|
+
what: 'List contains non-li items'
|
|
5309
5825
|
}
|
|
5310
5826
|
}
|
|
5311
5827
|
}
|
|
@@ -5328,6 +5844,11 @@ exports.issues = {
|
|
|
5328
5844
|
variable: false,
|
|
5329
5845
|
quality: 1,
|
|
5330
5846
|
what: 'Element is li but is not contained by a ul or ol element'
|
|
5847
|
+
},
|
|
5848
|
+
'Ensure <li> elements are contained within <ul> or <ol>.': {
|
|
5849
|
+
variable: false,
|
|
5850
|
+
quality: 1,
|
|
5851
|
+
what: 'Element is li but is not contained by a ul or ol element'
|
|
5331
5852
|
}
|
|
5332
5853
|
}
|
|
5333
5854
|
}
|
|
@@ -5473,6 +5994,11 @@ exports.issues = {
|
|
|
5473
5994
|
variable: false,
|
|
5474
5995
|
quality: 1,
|
|
5475
5996
|
what: 'select element has no accessible name'
|
|
5997
|
+
},
|
|
5998
|
+
'This select element does not have a name available to an accessibility API. Valid names are: label element, title , aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
5999
|
+
variable: false,
|
|
6000
|
+
quality: 1,
|
|
6001
|
+
what: 'select element has no accessible name'
|
|
5476
6002
|
}
|
|
5477
6003
|
}
|
|
5478
6004
|
}
|
|
@@ -5535,11 +6061,25 @@ exports.issues = {
|
|
|
5535
6061
|
what: 'accesskey attribute value is not unique'
|
|
5536
6062
|
}
|
|
5537
6063
|
},
|
|
6064
|
+
ibm: {
|
|
6065
|
+
element_accesskey_unique: {
|
|
6066
|
+
variable: false,
|
|
6067
|
+
quality: 1,
|
|
6068
|
+
what: 'accesskey attribute value is not unique'
|
|
6069
|
+
}
|
|
6070
|
+
},
|
|
5538
6071
|
wave: {
|
|
5539
6072
|
accesskey: {
|
|
5540
6073
|
variable: false,
|
|
5541
6074
|
quality: 1,
|
|
5542
|
-
what: '
|
|
6075
|
+
what: 'accesskey invalid'
|
|
6076
|
+
}
|
|
6077
|
+
},
|
|
6078
|
+
wax: {
|
|
6079
|
+
'Assign unique values to each accesskey attribute to avoid conflicts.': {
|
|
6080
|
+
variable: false,
|
|
6081
|
+
quality: 1,
|
|
6082
|
+
what: 'accesskey attribute value is not unique'
|
|
5543
6083
|
}
|
|
5544
6084
|
}
|
|
5545
6085
|
}
|
|
@@ -5592,6 +6132,13 @@ exports.issues = {
|
|
|
5592
6132
|
quality: 1,
|
|
5593
6133
|
what: 'Radio buttons or check boxes may require a group description via a fieldset element'
|
|
5594
6134
|
}
|
|
6135
|
+
},
|
|
6136
|
+
wax: {
|
|
6137
|
+
'If these radio buttons or check boxes require a further group-level description, they should be contained within a fieldset element.': {
|
|
6138
|
+
variable: false,
|
|
6139
|
+
quality: 1,
|
|
6140
|
+
what: 'Radio buttons or check boxes may require a group description via a fieldset element'
|
|
6141
|
+
}
|
|
5595
6142
|
}
|
|
5596
6143
|
}
|
|
5597
6144
|
},
|
|
@@ -5648,7 +6195,14 @@ exports.issues = {
|
|
|
5648
6195
|
legend_missing: {
|
|
5649
6196
|
variable: false,
|
|
5650
6197
|
quality: 1,
|
|
5651
|
-
what: '
|
|
6198
|
+
what: 'fieldset element has no legend element'
|
|
6199
|
+
}
|
|
6200
|
+
},
|
|
6201
|
+
wax: {
|
|
6202
|
+
'Fieldset does not contain a legend element. All fieldsets should contain a legend element that describes a description of the field group.': {
|
|
6203
|
+
variable: false,
|
|
6204
|
+
quality: 1,
|
|
6205
|
+
what: 'fieldset element has no legend element'
|
|
5652
6206
|
}
|
|
5653
6207
|
}
|
|
5654
6208
|
}
|
|
@@ -5670,20 +6224,27 @@ exports.issues = {
|
|
|
5670
6224
|
'AAA.4_1_2.H91.Fieldset.Name': {
|
|
5671
6225
|
variable: false,
|
|
5672
6226
|
quality: 1,
|
|
5673
|
-
what: '
|
|
6227
|
+
what: 'fieldset element has no accessible name'
|
|
5674
6228
|
}
|
|
5675
6229
|
},
|
|
5676
6230
|
ibm: {
|
|
5677
6231
|
group_withInputs_hasName: {
|
|
5678
6232
|
variable: false,
|
|
5679
6233
|
quality: 1,
|
|
5680
|
-
what: '
|
|
6234
|
+
what: 'Group with nested inputs has no unique accessible name'
|
|
5681
6235
|
},
|
|
5682
6236
|
fieldset_label_valid: {
|
|
5683
6237
|
variable: false,
|
|
5684
6238
|
quality: 1,
|
|
5685
6239
|
what: 'Group or fieldset has no accessible name'
|
|
5686
6240
|
}
|
|
6241
|
+
},
|
|
6242
|
+
wax: {
|
|
6243
|
+
'This fieldset element does not have a name available to an accessibility API. Valid names are: legend element, aria-label , aria-labelledby , aria-description , aria-describedby .': {
|
|
6244
|
+
variable: false,
|
|
6245
|
+
quality: 1,
|
|
6246
|
+
what: 'fieldset element has no accessible name'
|
|
6247
|
+
}
|
|
5687
6248
|
}
|
|
5688
6249
|
}
|
|
5689
6250
|
},
|
|
@@ -5693,6 +6254,13 @@ exports.issues = {
|
|
|
5693
6254
|
wcag: '1.3.1',
|
|
5694
6255
|
weight: 2,
|
|
5695
6256
|
tools: {
|
|
6257
|
+
ibm: {
|
|
6258
|
+
table_structure_misuse: {
|
|
6259
|
+
variable: false,
|
|
6260
|
+
quality: 1,
|
|
6261
|
+
what: 'table has a presentation or none role but has a summary attribute or structural elements'
|
|
6262
|
+
}
|
|
6263
|
+
},
|
|
5696
6264
|
qualWeb: {
|
|
5697
6265
|
'QW-WCAG-T12': {
|
|
5698
6266
|
variable: false,
|
|
@@ -6250,6 +6818,16 @@ exports.issues = {
|
|
|
6250
6818
|
variable: false,
|
|
6251
6819
|
quality: 1,
|
|
6252
6820
|
what: 'Form input element has no label'
|
|
6821
|
+
},
|
|
6822
|
+
'Ensure form elements have associated labels.': {
|
|
6823
|
+
variable: false,
|
|
6824
|
+
quality: 1,
|
|
6825
|
+
what: 'Form control element has no label'
|
|
6826
|
+
},
|
|
6827
|
+
'Avoid using hidden labels, title, or aria-describedby attributes as the sole label for form elements.': {
|
|
6828
|
+
variable: false,
|
|
6829
|
+
quality: 1,
|
|
6830
|
+
what: 'Form control element has a substitute for a valid label'
|
|
6253
6831
|
}
|
|
6254
6832
|
}
|
|
6255
6833
|
}
|
|
@@ -6360,7 +6938,7 @@ exports.issues = {
|
|
|
6360
6938
|
}
|
|
6361
6939
|
},
|
|
6362
6940
|
testaro: {
|
|
6363
|
-
|
|
6941
|
+
targetSmall: {
|
|
6364
6942
|
variable: false,
|
|
6365
6943
|
quality: 1,
|
|
6366
6944
|
what: 'Button, input, or non-inline link is smaller than 44 px wide and high'
|
|
@@ -6380,6 +6958,28 @@ exports.issues = {
|
|
|
6380
6958
|
quality: 1,
|
|
6381
6959
|
what: 'Target size is substandard'
|
|
6382
6960
|
}
|
|
6961
|
+
},
|
|
6962
|
+
testaro: {
|
|
6963
|
+
targetTiny: {
|
|
6964
|
+
variable: false,
|
|
6965
|
+
quality: 1,
|
|
6966
|
+
what: 'Button, input, or non-inline link is smaller than 24 px wide and high'
|
|
6967
|
+
}
|
|
6968
|
+
}
|
|
6969
|
+
}
|
|
6970
|
+
},
|
|
6971
|
+
targetsNear: {
|
|
6972
|
+
summary: 'small targets too near to each other',
|
|
6973
|
+
why: 'User cannot reliably choose an item to click or tap',
|
|
6974
|
+
wcag: '2.5.8',
|
|
6975
|
+
weight: 3,
|
|
6976
|
+
tools: {
|
|
6977
|
+
ibm: {
|
|
6978
|
+
target_spacing_sufficient: {
|
|
6979
|
+
variable: false,
|
|
6980
|
+
quality: 1,
|
|
6981
|
+
what: 'Small targets are not far enough apart'
|
|
6982
|
+
}
|
|
6383
6983
|
}
|
|
6384
6984
|
}
|
|
6385
6985
|
},
|
|
@@ -6511,6 +7111,11 @@ exports.issues = {
|
|
|
6511
7111
|
variable: false,
|
|
6512
7112
|
quality: 1,
|
|
6513
7113
|
what: 'Interactive controls are nested'
|
|
7114
|
+
},
|
|
7115
|
+
'Avoid nesting interactive controls to prevent screen reader and focus issues.': {
|
|
7116
|
+
variable: false,
|
|
7117
|
+
quality: 1,
|
|
7118
|
+
what: 'Interactive controls are nested'
|
|
6514
7119
|
}
|
|
6515
7120
|
}
|
|
6516
7121
|
}
|
|
@@ -6586,13 +7191,6 @@ exports.issues = {
|
|
|
6586
7191
|
what: 'Paragraph text is uppercased'
|
|
6587
7192
|
}
|
|
6588
7193
|
},
|
|
6589
|
-
aslint: {
|
|
6590
|
-
capital_letters_words: {
|
|
6591
|
-
variable: false,
|
|
6592
|
-
quality: 1,
|
|
6593
|
-
what: 'Element or its title has entirely upper-case words'
|
|
6594
|
-
}
|
|
6595
|
-
},
|
|
6596
7194
|
ed11y: {
|
|
6597
7195
|
textUppercase: {
|
|
6598
7196
|
variable: false,
|
|
@@ -6728,6 +7326,11 @@ exports.issues = {
|
|
|
6728
7326
|
variable: false,
|
|
6729
7327
|
quality: 1,
|
|
6730
7328
|
what: 'Element is contentinfo but is within another landmark'
|
|
7329
|
+
},
|
|
7330
|
+
'Ensure the contentinfo landmark is at the top level without being nested.': {
|
|
7331
|
+
variable: false,
|
|
7332
|
+
quality: 1,
|
|
7333
|
+
what: 'Element is contentinfo but is nested in another landmark'
|
|
6731
7334
|
}
|
|
6732
7335
|
}
|
|
6733
7336
|
}
|
|
@@ -6792,6 +7395,13 @@ exports.issues = {
|
|
|
6792
7395
|
quality: 1,
|
|
6793
7396
|
what: 'main landmark is not at the top level'
|
|
6794
7397
|
}
|
|
7398
|
+
},
|
|
7399
|
+
wax: {
|
|
7400
|
+
'Place the main landmark at the top level, not within another landmark.': {
|
|
7401
|
+
variable: false,
|
|
7402
|
+
quality: 1,
|
|
7403
|
+
what: 'main landmark is not at the top level'
|
|
7404
|
+
}
|
|
6795
7405
|
}
|
|
6796
7406
|
}
|
|
6797
7407
|
},
|
|
@@ -6858,6 +7468,13 @@ exports.issues = {
|
|
|
6858
7468
|
quality: 1,
|
|
6859
7469
|
what: 'Page includes more than 1 visible main element'
|
|
6860
7470
|
}
|
|
7471
|
+
},
|
|
7472
|
+
wax: {
|
|
7473
|
+
'Include only one main landmark in the document.': {
|
|
7474
|
+
variable: false,
|
|
7475
|
+
quality: 1,
|
|
7476
|
+
what: 'Page includes more than 1 main element'
|
|
7477
|
+
}
|
|
6861
7478
|
}
|
|
6862
7479
|
}
|
|
6863
7480
|
},
|
|
@@ -6887,6 +7504,11 @@ exports.issues = {
|
|
|
6887
7504
|
variable: false,
|
|
6888
7505
|
quality: 1,
|
|
6889
7506
|
what: 'Page has more than 1 banner landmark'
|
|
7507
|
+
},
|
|
7508
|
+
'Limit the document to a single banner landmark.': {
|
|
7509
|
+
variable: false,
|
|
7510
|
+
quality: 1,
|
|
7511
|
+
what: 'Page has more than 1 banner landmark'
|
|
6890
7512
|
}
|
|
6891
7513
|
}
|
|
6892
7514
|
}
|
|
@@ -6910,6 +7532,13 @@ exports.issues = {
|
|
|
6910
7532
|
quality: 1,
|
|
6911
7533
|
what: 'banner landmark is not at the top level'
|
|
6912
7534
|
}
|
|
7535
|
+
},
|
|
7536
|
+
wax: {
|
|
7537
|
+
'Place the banner landmark at the top level, not within another landmark.': {
|
|
7538
|
+
variable: false,
|
|
7539
|
+
quality: 1,
|
|
7540
|
+
what: 'banner is within another landmark'
|
|
7541
|
+
}
|
|
6913
7542
|
}
|
|
6914
7543
|
}
|
|
6915
7544
|
},
|
|
@@ -6968,6 +7597,11 @@ exports.issues = {
|
|
|
6968
7597
|
variable: false,
|
|
6969
7598
|
quality: 1,
|
|
6970
7599
|
what: 'Page has more than 1 contentinfo landmark'
|
|
7600
|
+
},
|
|
7601
|
+
'Ensure there is only one contentinfo landmark in the document.': {
|
|
7602
|
+
variable: false,
|
|
7603
|
+
quality: 1,
|
|
7604
|
+
what: 'Page has more than 1 contentinfo landmark'
|
|
6971
7605
|
}
|
|
6972
7606
|
}
|
|
6973
7607
|
}
|
|
@@ -6990,11 +7624,6 @@ exports.issues = {
|
|
|
6990
7624
|
variable: false,
|
|
6991
7625
|
quality: 1,
|
|
6992
7626
|
what: 'Landmark has no unique aria-labelledby or aria-label among landmarks in the same parent region'
|
|
6993
|
-
},
|
|
6994
|
-
aria_landmark_name_unique: {
|
|
6995
|
-
variable: false,
|
|
6996
|
-
quality: 1,
|
|
6997
|
-
what: 'Multiple landmarks with the same parent region are not distinguished from one another'
|
|
6998
7627
|
}
|
|
6999
7628
|
},
|
|
7000
7629
|
wax: {
|
|
@@ -7002,6 +7631,11 @@ exports.issues = {
|
|
|
7002
7631
|
variable: false,
|
|
7003
7632
|
quality: 1,
|
|
7004
7633
|
what: 'Landmark is indistinguishable from another by role or accessible name'
|
|
7634
|
+
},
|
|
7635
|
+
'Provide unique role or role/label/title combinations for landmarks.': {
|
|
7636
|
+
variable: false,
|
|
7637
|
+
quality: 1,
|
|
7638
|
+
what: 'Landmark is indistinguishable from another by role, label, or title'
|
|
7005
7639
|
}
|
|
7006
7640
|
}
|
|
7007
7641
|
}
|
|
@@ -7341,6 +7975,21 @@ exports.issues = {
|
|
|
7341
7975
|
}
|
|
7342
7976
|
}
|
|
7343
7977
|
},
|
|
7978
|
+
datalistRef: {
|
|
7979
|
+
summary: 'ambiguous or missing datalist reference',
|
|
7980
|
+
why: 'User cannot get help on the permitted input values',
|
|
7981
|
+
wcag: '3.3.2',
|
|
7982
|
+
weight: 4,
|
|
7983
|
+
tools: {
|
|
7984
|
+
testaro: {
|
|
7985
|
+
datalistRef: {
|
|
7986
|
+
variable: false,
|
|
7987
|
+
quality: 1,
|
|
7988
|
+
what: 'Datalist reference is ambiguous or missing'
|
|
7989
|
+
}
|
|
7990
|
+
}
|
|
7991
|
+
}
|
|
7992
|
+
},
|
|
7344
7993
|
multipleLabelees: {
|
|
7345
7994
|
summary: 'labeled element ambiguous',
|
|
7346
7995
|
why: 'User cannot get help on the topic of a form item',
|
|
@@ -7378,12 +8027,19 @@ exports.issues = {
|
|
|
7378
8027
|
'AAA.1_3_1.F68.Hidden': {
|
|
7379
8028
|
variable: false,
|
|
7380
8029
|
quality: 1,
|
|
7381
|
-
what: 'Hidden form field is needlessly labeled
|
|
8030
|
+
what: 'Hidden form field is needlessly labeled'
|
|
7382
8031
|
},
|
|
7383
8032
|
'AAA.1_3_1.F68.HiddenAttr': {
|
|
7384
8033
|
variable: false,
|
|
7385
8034
|
quality: 1,
|
|
7386
|
-
what: 'Form field with a hidden attribute is needlessly labeled
|
|
8035
|
+
what: 'Form field with a hidden attribute is needlessly labeled'
|
|
8036
|
+
}
|
|
8037
|
+
},
|
|
8038
|
+
wax: {
|
|
8039
|
+
'This hidden form field is labelled in some way. There should be no need to label a hidden form field.': {
|
|
8040
|
+
variable: false,
|
|
8041
|
+
quality: 1,
|
|
8042
|
+
what: 'Hidden form field is needlessly labeled'
|
|
7387
8043
|
}
|
|
7388
8044
|
}
|
|
7389
8045
|
}
|
|
@@ -7581,6 +8237,13 @@ exports.issues = {
|
|
|
7581
8237
|
quality: 1,
|
|
7582
8238
|
what: 'Empty form label'
|
|
7583
8239
|
}
|
|
8240
|
+
},
|
|
8241
|
+
wax: {
|
|
8242
|
+
'This form control has an "aria-label" attribute that is empty or contains only spaces. It will be ignored for labelling test purposes.': {
|
|
8243
|
+
variable: false,
|
|
8244
|
+
quality: 1,
|
|
8245
|
+
what: 'Element is a form control but has a label whose value is empty or only whitespace'
|
|
8246
|
+
}
|
|
7584
8247
|
}
|
|
7585
8248
|
}
|
|
7586
8249
|
},
|
|
@@ -7966,21 +8629,6 @@ exports.issues = {
|
|
|
7966
8629
|
}
|
|
7967
8630
|
}
|
|
7968
8631
|
},
|
|
7969
|
-
filterStyle: {
|
|
7970
|
-
summary: 'filter style',
|
|
7971
|
-
why: 'Item is too distorted for understandability',
|
|
7972
|
-
wcag: '4.1',
|
|
7973
|
-
weight: 1,
|
|
7974
|
-
tools: {
|
|
7975
|
-
testaro: {
|
|
7976
|
-
filter: {
|
|
7977
|
-
variable: false,
|
|
7978
|
-
quality: 1,
|
|
7979
|
-
what: 'Element styles include filter'
|
|
7980
|
-
}
|
|
7981
|
-
}
|
|
7982
|
-
}
|
|
7983
|
-
},
|
|
7984
8632
|
zIndexNotZero: {
|
|
7985
8633
|
summary: 'z-index not zero',
|
|
7986
8634
|
why: 'User cannot predict the effect of clicking',
|
|
@@ -8028,6 +8676,11 @@ exports.issues = {
|
|
|
8028
8676
|
variable: false,
|
|
8029
8677
|
quality: 1,
|
|
8030
8678
|
what: 'Element has a positive tabIndex attribute'
|
|
8679
|
+
},
|
|
8680
|
+
'Remove or adjust tabindex attributes greater than zero.': {
|
|
8681
|
+
variable: false,
|
|
8682
|
+
quality: 1,
|
|
8683
|
+
what: 'Element has a positive tabIndex attribute'
|
|
8031
8684
|
}
|
|
8032
8685
|
}
|
|
8033
8686
|
}
|
|
@@ -8401,6 +9054,13 @@ exports.issues = {
|
|
|
8401
9054
|
quality: 1,
|
|
8402
9055
|
what: 'Skip-navigation link has no target or is not keyboard accessible'
|
|
8403
9056
|
}
|
|
9057
|
+
},
|
|
9058
|
+
wax: {
|
|
9059
|
+
'Ensure that any common navigation elements can be bypassed; for instance, by use of skip links, header elements, or ARIA landmark roles.': {
|
|
9060
|
+
variable: false,
|
|
9061
|
+
quality: 1,
|
|
9062
|
+
what: 'Page provides no way to quickly navigate to the main content'
|
|
9063
|
+
}
|
|
8404
9064
|
}
|
|
8405
9065
|
}
|
|
8406
9066
|
},
|
|
@@ -8477,11 +9137,11 @@ exports.issues = {
|
|
|
8477
9137
|
wcag: '3.3.1',
|
|
8478
9138
|
weight: 4,
|
|
8479
9139
|
tools: {
|
|
8480
|
-
|
|
8481
|
-
|
|
9140
|
+
ibm: {
|
|
9141
|
+
error_message_exists: {
|
|
8482
9142
|
variable: false,
|
|
8483
9143
|
quality: 1,
|
|
8484
|
-
what: '
|
|
9144
|
+
what: 'Element has an aria-errormessage attribute whose value is an invalid id'
|
|
8485
9145
|
}
|
|
8486
9146
|
}
|
|
8487
9147
|
}
|
|
@@ -8587,6 +9247,11 @@ exports.issues = {
|
|
|
8587
9247
|
quality: 1,
|
|
8588
9248
|
what: 'charset attribute has a value other than utf-8 and is unnecessary'
|
|
8589
9249
|
},
|
|
9250
|
+
'The only allowed value for the charset attribute for the meta element is utf-8.': {
|
|
9251
|
+
variable: false,
|
|
9252
|
+
quality: 1,
|
|
9253
|
+
what: 'charset attribute has a value other than utf-8 and is unnecessary'
|
|
9254
|
+
},
|
|
8590
9255
|
'The name attribute is obsolete. Consider putting an id attribute on the nearest container instead.': {
|
|
8591
9256
|
variable: false,
|
|
8592
9257
|
quality: 1,
|
|
@@ -8901,6 +9566,16 @@ exports.issues = {
|
|
|
8901
9566
|
quality: 1,
|
|
8902
9567
|
what: 'CSS webkit-mask linear-gradient property has too few values'
|
|
8903
9568
|
},
|
|
9569
|
+
'CSS: --solidHeaderNavigationColor: Cannot invoke "org.w3c.css.values.CssValue.getType()" because "val" is null.': {
|
|
9570
|
+
variable: false,
|
|
9571
|
+
quality: 1,
|
|
9572
|
+
what: 'CSS solidHeaderNavigationColor property is null'
|
|
9573
|
+
},
|
|
9574
|
+
'CSS: --gradientHeaderBackgroundColor: Cannot invoke "org.w3c.css.values.CssValue.getType()" because "val" is null.': {
|
|
9575
|
+
variable: false,
|
|
9576
|
+
quality: 1,
|
|
9577
|
+
what: 'CSS gradientHeaderBackgroundColor property is null'
|
|
9578
|
+
},
|
|
8904
9579
|
'^CSS: In CSS1, a class name could start with a digit .+, unless it was a dimension .+ In CSS2, such classes are parsed as unknown dimensions .+ To make .+ a valid class, CSS2 requires the first digit to be escaped: .+$': {
|
|
8905
9580
|
variable: true,
|
|
8906
9581
|
quality: 0.5,
|
|
@@ -8991,7 +9666,7 @@ exports.issues = {
|
|
|
8991
9666
|
weight: 3,
|
|
8992
9667
|
tools: {
|
|
8993
9668
|
nuVal: {
|
|
8994
|
-
'^Bad value [
|
|
9669
|
+
'^Bad value [^`]+ Tab, new line or carriage return found.*$': {
|
|
8995
9670
|
variable: true,
|
|
8996
9671
|
quality: 1,
|
|
8997
9672
|
what: 'Attribute value contains an illegal spacing character'
|
|
@@ -9131,11 +9806,6 @@ exports.issues = {
|
|
|
9131
9806
|
quality: 1,
|
|
9132
9807
|
what: 'Invalid start tag'
|
|
9133
9808
|
},
|
|
9134
|
-
'^Element .+ is missing a required instance of child element .+$': {
|
|
9135
|
-
variable: true,
|
|
9136
|
-
quality: 1,
|
|
9137
|
-
what: 'Element is missing a required child'
|
|
9138
|
-
},
|
|
9139
9809
|
'Saw <!-- within a comment. Probable cause: Nested comment (not allowed).': {
|
|
9140
9810
|
variable: false,
|
|
9141
9811
|
quality: 1,
|
|
@@ -9228,21 +9898,6 @@ exports.issues = {
|
|
|
9228
9898
|
}
|
|
9229
9899
|
}
|
|
9230
9900
|
},
|
|
9231
|
-
slashParseRisk: {
|
|
9232
|
-
summary: 'void element has trailing slash',
|
|
9233
|
-
why: 'Document contains invalid code',
|
|
9234
|
-
wcag: '4.1',
|
|
9235
|
-
weight: 1,
|
|
9236
|
-
tools: {
|
|
9237
|
-
nuVal: {
|
|
9238
|
-
'Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.': {
|
|
9239
|
-
variable: false,
|
|
9240
|
-
quality: 1,
|
|
9241
|
-
what: 'Void element has a useless trailing slash.'
|
|
9242
|
-
}
|
|
9243
|
-
}
|
|
9244
|
-
}
|
|
9245
|
-
},
|
|
9246
9901
|
encodingMisdeclared: {
|
|
9247
9902
|
summary: 'text encoding wrongly declared',
|
|
9248
9903
|
why: 'User cannot read all of the text',
|