testilo 3.7.0 → 3.8.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/sp12a.js +338 -46
package/package.json
CHANGED
package/procs/score/sp12a.js
CHANGED
|
@@ -73,6 +73,10 @@ const groups = {
|
|
|
73
73
|
'duplicate-id-active': {
|
|
74
74
|
quality: 1,
|
|
75
75
|
what: 'id attribute value of the active element is not unique'
|
|
76
|
+
},
|
|
77
|
+
'duplicate-id-aria': {
|
|
78
|
+
quality: 1,
|
|
79
|
+
what: 'id attribute used in ARIA or in a label has a value that is not unique'
|
|
76
80
|
}
|
|
77
81
|
},
|
|
78
82
|
htmlcs: {
|
|
@@ -89,6 +93,17 @@ const groups = {
|
|
|
89
93
|
}
|
|
90
94
|
}
|
|
91
95
|
},
|
|
96
|
+
regionNoText: {
|
|
97
|
+
weight: 4,
|
|
98
|
+
packages: {
|
|
99
|
+
alfa: {
|
|
100
|
+
r40: {
|
|
101
|
+
quality: 1,
|
|
102
|
+
what: 'Region has no accessible name'
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
},
|
|
92
107
|
formFieldNoText: {
|
|
93
108
|
weight: 4,
|
|
94
109
|
packages: {
|
|
@@ -118,9 +133,21 @@ const groups = {
|
|
|
118
133
|
quality: 1,
|
|
119
134
|
what: 'Email input has no accessible name'
|
|
120
135
|
},
|
|
136
|
+
'e:AA.4_1_2.H91.InputTel.Name': {
|
|
137
|
+
quality: 1,
|
|
138
|
+
what: 'Telephone input has no accessible name'
|
|
139
|
+
},
|
|
121
140
|
'e:AA.4_1_2.H91.InputNumber.Name': {
|
|
122
141
|
quality: 1,
|
|
123
142
|
what: 'Number input has no accessible name'
|
|
143
|
+
},
|
|
144
|
+
'e:AA.4_1_2.H91.InputSearch.Name': {
|
|
145
|
+
quality: 1,
|
|
146
|
+
what: 'Search input has no accessible name'
|
|
147
|
+
},
|
|
148
|
+
'e:AA.4_1_2.H91.InputCheckbox.Name': {
|
|
149
|
+
quality: 1,
|
|
150
|
+
what: 'Checkbox input has no accessible name'
|
|
124
151
|
}
|
|
125
152
|
}
|
|
126
153
|
}
|
|
@@ -137,7 +164,7 @@ const groups = {
|
|
|
137
164
|
axe: {
|
|
138
165
|
'input-image-alt': {
|
|
139
166
|
quality: 1,
|
|
140
|
-
what: 'Image
|
|
167
|
+
what: 'Image button has no text alternative'
|
|
141
168
|
}
|
|
142
169
|
},
|
|
143
170
|
htmlcs: {
|
|
@@ -184,13 +211,17 @@ const groups = {
|
|
|
184
211
|
ibm: {
|
|
185
212
|
'v:WCAG20_Img_HasAlt': {
|
|
186
213
|
quality: 1,
|
|
187
|
-
what: '
|
|
214
|
+
what: 'Image has no alt attribute conveying its meaning, or alt="" if decorative'
|
|
188
215
|
}
|
|
189
216
|
},
|
|
190
217
|
wave: {
|
|
191
218
|
'e:alt_missing': {
|
|
192
219
|
quality: 1,
|
|
193
220
|
what: 'Text alternative is missing'
|
|
221
|
+
},
|
|
222
|
+
'e:alt_spacer_missing': {
|
|
223
|
+
quality: 1,
|
|
224
|
+
what: 'Spacer image has no text alternative'
|
|
194
225
|
}
|
|
195
226
|
}
|
|
196
227
|
}
|
|
@@ -277,7 +308,7 @@ const groups = {
|
|
|
277
308
|
axe: {
|
|
278
309
|
'html-has-lang': {
|
|
279
310
|
quality: 1,
|
|
280
|
-
what: 'html element
|
|
311
|
+
what: 'html element has no lang attribute'
|
|
281
312
|
}
|
|
282
313
|
},
|
|
283
314
|
htmlcs: {
|
|
@@ -312,7 +343,13 @@ const groups = {
|
|
|
312
343
|
axe: {
|
|
313
344
|
'html-lang-valid': {
|
|
314
345
|
quality: 1,
|
|
315
|
-
what: 'html element
|
|
346
|
+
what: 'html element has no valid value for the lang attribute'
|
|
347
|
+
}
|
|
348
|
+
},
|
|
349
|
+
htmlcs: {
|
|
350
|
+
'e:AA.3_1_1.H57.3.Lang': {
|
|
351
|
+
quality: 1,
|
|
352
|
+
what: 'Language specified in the lang attribute of the document does not appear to be well-formed'
|
|
316
353
|
}
|
|
317
354
|
},
|
|
318
355
|
ibm: {
|
|
@@ -323,6 +360,17 @@ const groups = {
|
|
|
323
360
|
}
|
|
324
361
|
}
|
|
325
362
|
},
|
|
363
|
+
elementLanguageBad: {
|
|
364
|
+
weight: 4,
|
|
365
|
+
packages: {
|
|
366
|
+
htmlcs: {
|
|
367
|
+
'e:AA.3_1_2.H58.1.Lang': {
|
|
368
|
+
quality: 1,
|
|
369
|
+
what: 'Language specified in the lang attribute of the element does not appear to be well-formed'
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
}
|
|
373
|
+
},
|
|
326
374
|
languageChange: {
|
|
327
375
|
weight: 3,
|
|
328
376
|
packages: {
|
|
@@ -335,7 +383,7 @@ const groups = {
|
|
|
335
383
|
axe: {
|
|
336
384
|
'valid-lang': {
|
|
337
385
|
quality: 1,
|
|
338
|
-
what: 'lang attribute
|
|
386
|
+
what: 'lang attribute has no valid value'
|
|
339
387
|
}
|
|
340
388
|
},
|
|
341
389
|
htmlcs: {
|
|
@@ -346,25 +394,36 @@ const groups = {
|
|
|
346
394
|
}
|
|
347
395
|
}
|
|
348
396
|
},
|
|
397
|
+
dialogNoText: {
|
|
398
|
+
weight: 4,
|
|
399
|
+
packages: {
|
|
400
|
+
axe: {
|
|
401
|
+
'aria-dialog-name': {
|
|
402
|
+
quality: 1,
|
|
403
|
+
what: 'ARIA dialog or alertdialog node has no accessible name'
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
},
|
|
349
408
|
objectNoText: {
|
|
350
409
|
weight: 4,
|
|
351
410
|
packages: {
|
|
352
411
|
axe: {
|
|
353
412
|
'object-alt': {
|
|
354
413
|
quality: 1,
|
|
355
|
-
what: 'Object
|
|
414
|
+
what: 'Object element has no text alternative'
|
|
356
415
|
}
|
|
357
416
|
},
|
|
358
417
|
htmlcs: {
|
|
359
418
|
'e:ARIA6+H53': {
|
|
360
419
|
quality: 1,
|
|
361
|
-
what: 'Object
|
|
420
|
+
what: 'Object element contains no text alternative'
|
|
362
421
|
}
|
|
363
422
|
},
|
|
364
423
|
ibm: {
|
|
365
424
|
'v:WCAG20_Object_HasText': {
|
|
366
425
|
quality: 1,
|
|
367
|
-
what: 'Object
|
|
426
|
+
what: 'Object element has no text alternative'
|
|
368
427
|
}
|
|
369
428
|
},
|
|
370
429
|
wave: {
|
|
@@ -381,7 +440,7 @@ const groups = {
|
|
|
381
440
|
axe: {
|
|
382
441
|
'area-alt': {
|
|
383
442
|
quality: 1,
|
|
384
|
-
what: 'Active area elements
|
|
443
|
+
what: 'Active area elements has no text alternative'
|
|
385
444
|
}
|
|
386
445
|
},
|
|
387
446
|
htmlcs: {
|
|
@@ -446,13 +505,32 @@ const groups = {
|
|
|
446
505
|
}
|
|
447
506
|
}
|
|
448
507
|
},
|
|
449
|
-
|
|
508
|
+
labelForWrongRisk: {
|
|
509
|
+
weight: 1,
|
|
510
|
+
packages: {
|
|
511
|
+
htmlcs: {
|
|
512
|
+
'w:AA.1_3_1.H44.NotFormControl': {
|
|
513
|
+
quality: 1,
|
|
514
|
+
what: 'Label for attribute may reference the wrong element, because it is not a form control'
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
},
|
|
519
|
+
labelBadID: {
|
|
450
520
|
weight: 4,
|
|
451
521
|
packages: {
|
|
452
522
|
htmlcs: {
|
|
453
523
|
'w:AA.1_3_1.H44.NonExistentFragment': {
|
|
454
524
|
quality: 1,
|
|
455
525
|
what: 'Label for attribute references a nonexistent element'
|
|
526
|
+
},
|
|
527
|
+
'w:AA.1_3_1.ARIA16,ARIA9': {
|
|
528
|
+
quality: 1,
|
|
529
|
+
what: 'aria-labelledby attribute references a nonexistent element'
|
|
530
|
+
},
|
|
531
|
+
'w:AA.4_1_2.ARIA16,ARIA9': {
|
|
532
|
+
quality: 1,
|
|
533
|
+
what: 'aria-labelledby attribute references a nonexistent element'
|
|
456
534
|
}
|
|
457
535
|
},
|
|
458
536
|
wave: {
|
|
@@ -475,7 +553,7 @@ const groups = {
|
|
|
475
553
|
axe: {
|
|
476
554
|
'link-name': {
|
|
477
555
|
quality: 1,
|
|
478
|
-
what: '
|
|
556
|
+
what: 'Link has no discernible text'
|
|
479
557
|
}
|
|
480
558
|
},
|
|
481
559
|
htmlcs: {
|
|
@@ -556,7 +634,7 @@ const groups = {
|
|
|
556
634
|
htmlcs: {
|
|
557
635
|
'w:AA.4_1_2.H91.A.NoHref': {
|
|
558
636
|
quality: 1,
|
|
559
|
-
what: 'Link misused as link destination'
|
|
637
|
+
what: 'Link is misused as a link destination'
|
|
560
638
|
}
|
|
561
639
|
}
|
|
562
640
|
}
|
|
@@ -698,7 +776,7 @@ const groups = {
|
|
|
698
776
|
axe: {
|
|
699
777
|
'aria-required-parent': {
|
|
700
778
|
quality: 1,
|
|
701
|
-
what: '
|
|
779
|
+
what: 'ARIA role is not contained by a required parent'
|
|
702
780
|
}
|
|
703
781
|
}
|
|
704
782
|
}
|
|
@@ -715,7 +793,7 @@ const groups = {
|
|
|
715
793
|
axe: {
|
|
716
794
|
'svg-img-alt': {
|
|
717
795
|
quality: 1,
|
|
718
|
-
what: 'SVG
|
|
796
|
+
what: 'SVG element with an img role has no text alternative'
|
|
719
797
|
}
|
|
720
798
|
}
|
|
721
799
|
}
|
|
@@ -769,13 +847,13 @@ const groups = {
|
|
|
769
847
|
alfa: {
|
|
770
848
|
r68: {
|
|
771
849
|
quality: 1,
|
|
772
|
-
what: 'Element
|
|
850
|
+
what: 'Element does not own an element required by its semantic role'
|
|
773
851
|
}
|
|
774
852
|
},
|
|
775
853
|
axe: {
|
|
776
854
|
'aria-required-children': {
|
|
777
855
|
quality: 1,
|
|
778
|
-
what: '
|
|
856
|
+
what: 'ARIA role does not contain a required child'
|
|
779
857
|
}
|
|
780
858
|
}
|
|
781
859
|
}
|
|
@@ -797,7 +875,7 @@ const groups = {
|
|
|
797
875
|
alfa: {
|
|
798
876
|
r74: {
|
|
799
877
|
quality: 1,
|
|
800
|
-
what: 'Paragraph text has absolute font size'
|
|
878
|
+
what: 'Paragraph text has an absolute font size'
|
|
801
879
|
}
|
|
802
880
|
}
|
|
803
881
|
}
|
|
@@ -805,6 +883,12 @@ const groups = {
|
|
|
805
883
|
fontSmall: {
|
|
806
884
|
weight: 3,
|
|
807
885
|
packages: {
|
|
886
|
+
alfa: {
|
|
887
|
+
r75: {
|
|
888
|
+
quality: 1,
|
|
889
|
+
what: 'Font size is smaller than 9 pixels'
|
|
890
|
+
}
|
|
891
|
+
},
|
|
808
892
|
tenon: {
|
|
809
893
|
134: {
|
|
810
894
|
quality: 1,
|
|
@@ -831,7 +915,7 @@ const groups = {
|
|
|
831
915
|
axe: {
|
|
832
916
|
'avoid-inline-spacing': {
|
|
833
917
|
quality: 1,
|
|
834
|
-
what: 'Inline text spacing
|
|
918
|
+
what: 'Inline text spacing is not adjustable with a custom stylesheet'
|
|
835
919
|
}
|
|
836
920
|
}
|
|
837
921
|
}
|
|
@@ -842,7 +926,7 @@ const groups = {
|
|
|
842
926
|
alfa: {
|
|
843
927
|
r80: {
|
|
844
928
|
quality: 1,
|
|
845
|
-
what: 'Paragraph text has absolute line height'
|
|
929
|
+
what: 'Paragraph text has an absolute line height'
|
|
846
930
|
}
|
|
847
931
|
}
|
|
848
932
|
}
|
|
@@ -853,7 +937,7 @@ const groups = {
|
|
|
853
937
|
alfa: {
|
|
854
938
|
r73: {
|
|
855
939
|
quality: 1,
|
|
856
|
-
what: '
|
|
940
|
+
what: 'Paragraph of text has insufficient line height'
|
|
857
941
|
}
|
|
858
942
|
}
|
|
859
943
|
}
|
|
@@ -902,7 +986,7 @@ const groups = {
|
|
|
902
986
|
htmlcs: {
|
|
903
987
|
'e:AA.2_4_1.H64.1': {
|
|
904
988
|
quality: 1,
|
|
905
|
-
what: 'iframe element
|
|
989
|
+
what: 'iframe element has no non-empty title attribute'
|
|
906
990
|
}
|
|
907
991
|
},
|
|
908
992
|
ibm: {
|
|
@@ -916,16 +1000,22 @@ const groups = {
|
|
|
916
1000
|
roleBad: {
|
|
917
1001
|
weight: 3,
|
|
918
1002
|
packages: {
|
|
1003
|
+
alfa: {
|
|
1004
|
+
r21: {
|
|
1005
|
+
quality: 1,
|
|
1006
|
+
what: 'Element does not have a valid role'
|
|
1007
|
+
}
|
|
1008
|
+
},
|
|
919
1009
|
axe: {
|
|
920
1010
|
'aria-allowed-role': {
|
|
921
1011
|
quality: 1,
|
|
922
|
-
what: 'ARIA role
|
|
1012
|
+
what: 'ARIA role is not appropriate for the element'
|
|
923
1013
|
}
|
|
924
1014
|
},
|
|
925
1015
|
ibm: {
|
|
926
1016
|
'v:aria_semantics_role': {
|
|
927
1017
|
quality: 1,
|
|
928
|
-
what: 'ARIA
|
|
1018
|
+
what: 'ARIA role is not valid for the element to which it is assigned'
|
|
929
1019
|
}
|
|
930
1020
|
},
|
|
931
1021
|
testaro: {
|
|
@@ -942,13 +1032,13 @@ const groups = {
|
|
|
942
1032
|
axe: {
|
|
943
1033
|
'aria-required-attr': {
|
|
944
1034
|
quality: 1,
|
|
945
|
-
what: 'Required ARIA
|
|
1035
|
+
what: 'Required ARIA attribute is not provided'
|
|
946
1036
|
}
|
|
947
1037
|
},
|
|
948
1038
|
ibm: {
|
|
949
1039
|
'v:Rpt_Aria_RequiredProperties': {
|
|
950
1040
|
quality: 1,
|
|
951
|
-
what: 'ARIA role on an element
|
|
1041
|
+
what: 'ARIA role on an element does not have a required attribute'
|
|
952
1042
|
}
|
|
953
1043
|
}
|
|
954
1044
|
}
|
|
@@ -957,6 +1047,10 @@ const groups = {
|
|
|
957
1047
|
weight: 4,
|
|
958
1048
|
packages: {
|
|
959
1049
|
alfa: {
|
|
1050
|
+
r18: {
|
|
1051
|
+
quality: 1,
|
|
1052
|
+
what: 'ARIA state or property is not allowed for the element on which it is specified'
|
|
1053
|
+
},
|
|
960
1054
|
r19: {
|
|
961
1055
|
quality: 1,
|
|
962
1056
|
what: 'ARIA state or property has an invalid value'
|
|
@@ -994,7 +1088,7 @@ const groups = {
|
|
|
994
1088
|
ibm: {
|
|
995
1089
|
'v:Rpt_Aria_ValidIdRef': {
|
|
996
1090
|
quality: 1,
|
|
997
|
-
what: 'ARIA property
|
|
1091
|
+
what: 'ARIA property does not reference the non-empty unique id of a visible element'
|
|
998
1092
|
}
|
|
999
1093
|
},
|
|
1000
1094
|
wave: {
|
|
@@ -1028,7 +1122,7 @@ const groups = {
|
|
|
1028
1122
|
axe: {
|
|
1029
1123
|
'autocomplete-valid': {
|
|
1030
1124
|
quality: 1,
|
|
1031
|
-
what: 'Autocomplete attribute
|
|
1125
|
+
what: 'Autocomplete attribute is used incorrectly'
|
|
1032
1126
|
}
|
|
1033
1127
|
},
|
|
1034
1128
|
htmlcs: {
|
|
@@ -1040,7 +1134,18 @@ const groups = {
|
|
|
1040
1134
|
ibm: {
|
|
1041
1135
|
'v:WCAG21_Input_Autocomplete': {
|
|
1042
1136
|
quality: 1,
|
|
1043
|
-
what: 'Autocomplete attribute token
|
|
1137
|
+
what: 'Autocomplete attribute token is not appropriate for the input form field'
|
|
1138
|
+
}
|
|
1139
|
+
}
|
|
1140
|
+
}
|
|
1141
|
+
},
|
|
1142
|
+
autocompleteRisk: {
|
|
1143
|
+
weight: 1,
|
|
1144
|
+
packages: {
|
|
1145
|
+
htmlcs: {
|
|
1146
|
+
'w:AA.1_3_5.H98': {
|
|
1147
|
+
quality: 1,
|
|
1148
|
+
what: 'Element contains a potentially faulty value in its autocomplete attribute'
|
|
1044
1149
|
}
|
|
1045
1150
|
}
|
|
1046
1151
|
}
|
|
@@ -1057,7 +1162,7 @@ const groups = {
|
|
|
1057
1162
|
axe: {
|
|
1058
1163
|
'color-contrast': {
|
|
1059
1164
|
quality: 1,
|
|
1060
|
-
what: '
|
|
1165
|
+
what: 'Element has insufficient color contrast'
|
|
1061
1166
|
}
|
|
1062
1167
|
},
|
|
1063
1168
|
htmlcs: {
|
|
@@ -1073,7 +1178,7 @@ const groups = {
|
|
|
1073
1178
|
ibm: {
|
|
1074
1179
|
'v:IBMA_Color_Contrast_WCAG2AA': {
|
|
1075
1180
|
quality: 1,
|
|
1076
|
-
what: 'Contrast ratio of text with background
|
|
1181
|
+
what: 'Contrast ratio of text with background does not meet WCAG 2.1 AA'
|
|
1077
1182
|
}
|
|
1078
1183
|
},
|
|
1079
1184
|
wave: {
|
|
@@ -1096,7 +1201,7 @@ const groups = {
|
|
|
1096
1201
|
axe: {
|
|
1097
1202
|
'color-contrast-enhanced': {
|
|
1098
1203
|
quality: 1,
|
|
1099
|
-
what: '
|
|
1204
|
+
what: 'Element has insufficient color contrast (Level AAA)'
|
|
1100
1205
|
}
|
|
1101
1206
|
},
|
|
1102
1207
|
htmlcs: {
|
|
@@ -1176,7 +1281,7 @@ const groups = {
|
|
|
1176
1281
|
ibm: {
|
|
1177
1282
|
'v:RPT_Header_HasContent': {
|
|
1178
1283
|
quality: 1,
|
|
1179
|
-
what: 'Heading
|
|
1284
|
+
what: 'Heading element provides no descriptive text'
|
|
1180
1285
|
}
|
|
1181
1286
|
},
|
|
1182
1287
|
wave: {
|
|
@@ -1204,7 +1309,7 @@ const groups = {
|
|
|
1204
1309
|
axe: {
|
|
1205
1310
|
'image-redundant-alt': {
|
|
1206
1311
|
quality: 1,
|
|
1207
|
-
what: 'Text of
|
|
1312
|
+
what: 'Text of a button or link is repeated in the image alternative'
|
|
1208
1313
|
}
|
|
1209
1314
|
},
|
|
1210
1315
|
ibm: {
|
|
@@ -1227,6 +1332,23 @@ const groups = {
|
|
|
1227
1332
|
}
|
|
1228
1333
|
}
|
|
1229
1334
|
},
|
|
1335
|
+
decorativeTitle: {
|
|
1336
|
+
weight: 1,
|
|
1337
|
+
packages: {
|
|
1338
|
+
htmlcs: {
|
|
1339
|
+
'e:AA.1_1_1.H67.1': {
|
|
1340
|
+
quality: 1,
|
|
1341
|
+
what: 'img element has an empty alt attribute but has a nonempty title attribute'
|
|
1342
|
+
}
|
|
1343
|
+
},
|
|
1344
|
+
wave: {
|
|
1345
|
+
'a:image_title': {
|
|
1346
|
+
quality: 1,
|
|
1347
|
+
what: 'Image has a title attribute value but no alt value'
|
|
1348
|
+
}
|
|
1349
|
+
}
|
|
1350
|
+
}
|
|
1351
|
+
},
|
|
1230
1352
|
titleRedundant: {
|
|
1231
1353
|
weight: 1,
|
|
1232
1354
|
packages: {
|
|
@@ -1262,10 +1384,22 @@ const groups = {
|
|
|
1262
1384
|
pageTitle: {
|
|
1263
1385
|
weight: 3,
|
|
1264
1386
|
packages: {
|
|
1387
|
+
alfa: {
|
|
1388
|
+
r1: {
|
|
1389
|
+
quality: 1,
|
|
1390
|
+
what: 'Document has no valid title element'
|
|
1391
|
+
}
|
|
1392
|
+
},
|
|
1265
1393
|
axe: {
|
|
1266
1394
|
'document-title': {
|
|
1267
1395
|
quality: 1,
|
|
1268
|
-
what: '
|
|
1396
|
+
what: 'Document contains no title element'
|
|
1397
|
+
}
|
|
1398
|
+
},
|
|
1399
|
+
htmlcs: {
|
|
1400
|
+
'e:AA.2_4_2.H25.1.NoTitleEl': {
|
|
1401
|
+
quality: 1,
|
|
1402
|
+
what: 'Document head element contains no non-empty title element'
|
|
1269
1403
|
}
|
|
1270
1404
|
},
|
|
1271
1405
|
wave: {
|
|
@@ -1288,7 +1422,7 @@ const groups = {
|
|
|
1288
1422
|
axe: {
|
|
1289
1423
|
'heading-order': {
|
|
1290
1424
|
quality: 1,
|
|
1291
|
-
what: 'Heading levels
|
|
1425
|
+
what: 'Heading levels do not increase by only one'
|
|
1292
1426
|
}
|
|
1293
1427
|
},
|
|
1294
1428
|
htmlcs: {
|
|
@@ -1300,7 +1434,7 @@ const groups = {
|
|
|
1300
1434
|
tenon: {
|
|
1301
1435
|
155: {
|
|
1302
1436
|
quality: 1,
|
|
1303
|
-
what: '
|
|
1437
|
+
what: 'Headings are not structured in a hierarchical manner'
|
|
1304
1438
|
}
|
|
1305
1439
|
},
|
|
1306
1440
|
wave: {
|
|
@@ -1311,11 +1445,22 @@ const groups = {
|
|
|
1311
1445
|
}
|
|
1312
1446
|
}
|
|
1313
1447
|
},
|
|
1448
|
+
noHeading: {
|
|
1449
|
+
weight: 3,
|
|
1450
|
+
packages: {
|
|
1451
|
+
alfa: {
|
|
1452
|
+
r59: {
|
|
1453
|
+
quality: 1,
|
|
1454
|
+
what: 'Document has no headings'
|
|
1455
|
+
}
|
|
1456
|
+
}
|
|
1457
|
+
}
|
|
1458
|
+
},
|
|
1314
1459
|
h1Missing: {
|
|
1315
1460
|
weight: 2,
|
|
1316
1461
|
packages: {
|
|
1317
1462
|
alfa: {
|
|
1318
|
-
|
|
1463
|
+
r61: {
|
|
1319
1464
|
quality: 1,
|
|
1320
1465
|
what: 'First heading is not h1'
|
|
1321
1466
|
}
|
|
@@ -1323,7 +1468,7 @@ const groups = {
|
|
|
1323
1468
|
axe: {
|
|
1324
1469
|
'page-has-heading-one': {
|
|
1325
1470
|
quality: 1,
|
|
1326
|
-
what: 'Page
|
|
1471
|
+
what: 'Page contains no level-one heading'
|
|
1327
1472
|
}
|
|
1328
1473
|
},
|
|
1329
1474
|
wave: {
|
|
@@ -1337,6 +1482,18 @@ const groups = {
|
|
|
1337
1482
|
justification: {
|
|
1338
1483
|
weight: 1,
|
|
1339
1484
|
packages: {
|
|
1485
|
+
alfa: {
|
|
1486
|
+
r71: {
|
|
1487
|
+
quality: 1,
|
|
1488
|
+
what: 'Paragraph text is fully justified'
|
|
1489
|
+
}
|
|
1490
|
+
},
|
|
1491
|
+
tenon: {
|
|
1492
|
+
36: {
|
|
1493
|
+
quality: 1,
|
|
1494
|
+
what: 'Text is fully justified'
|
|
1495
|
+
}
|
|
1496
|
+
},
|
|
1340
1497
|
wave: {
|
|
1341
1498
|
'a:text_justified': {
|
|
1342
1499
|
quality: 1,
|
|
@@ -1349,13 +1506,29 @@ const groups = {
|
|
|
1349
1506
|
weight: 2,
|
|
1350
1507
|
packages: {
|
|
1351
1508
|
htmlcs: {
|
|
1509
|
+
'w:AA.1_3_1.H49.AlignAttr': {
|
|
1510
|
+
quality: 1,
|
|
1511
|
+
what: 'Special text is aligned nonsemantically'
|
|
1512
|
+
},
|
|
1352
1513
|
'w:AA.1_3_1.H49.B': {
|
|
1353
1514
|
quality: 1,
|
|
1354
|
-
what: '
|
|
1515
|
+
what: 'Special text is bolded nonsemantically'
|
|
1516
|
+
},
|
|
1517
|
+
'w:AA.1_3_1.H49.I': {
|
|
1518
|
+
quality: 1,
|
|
1519
|
+
what: 'Special text is italicized nonsemantically'
|
|
1520
|
+
},
|
|
1521
|
+
'w:AA.1_3_1.H49.Big': {
|
|
1522
|
+
quality: 1,
|
|
1523
|
+
what: 'Special text is enlarged nonsemantically'
|
|
1355
1524
|
},
|
|
1356
1525
|
'w:AA.1_3_1.H49.Small': {
|
|
1357
1526
|
quality: 1,
|
|
1358
|
-
what: '
|
|
1527
|
+
what: 'Special text is made small nonsemantically'
|
|
1528
|
+
},
|
|
1529
|
+
'w:AA.1_3_1.H49.U': {
|
|
1530
|
+
quality: 1,
|
|
1531
|
+
what: 'Special text is underlined nonsemantically'
|
|
1359
1532
|
}
|
|
1360
1533
|
}
|
|
1361
1534
|
}
|
|
@@ -1415,9 +1588,13 @@ const groups = {
|
|
|
1415
1588
|
weight: 4,
|
|
1416
1589
|
packages: {
|
|
1417
1590
|
axe: {
|
|
1418
|
-
|
|
1591
|
+
list: {
|
|
1419
1592
|
quality: 1,
|
|
1420
1593
|
what: 'List element ul or ol has a child element other than li, script, and template'
|
|
1594
|
+
},
|
|
1595
|
+
'definition-list': {
|
|
1596
|
+
quality: 1,
|
|
1597
|
+
what: 'List element dl has a child element other than properly ordered dt and dt group, script, template, and div'
|
|
1421
1598
|
}
|
|
1422
1599
|
}
|
|
1423
1600
|
}
|
|
@@ -1450,7 +1627,7 @@ const groups = {
|
|
|
1450
1627
|
htmlcs: {
|
|
1451
1628
|
'w:AA.1_3_1.H48': {
|
|
1452
1629
|
quality: 1,
|
|
1453
|
-
what: 'Navigation links
|
|
1630
|
+
what: 'Navigation links are not coded as a list'
|
|
1454
1631
|
}
|
|
1455
1632
|
}
|
|
1456
1633
|
}
|
|
@@ -1488,7 +1665,7 @@ const groups = {
|
|
|
1488
1665
|
htmlcs: {
|
|
1489
1666
|
'w:AA.1_3_1.H85.2': {
|
|
1490
1667
|
quality: 1,
|
|
1491
|
-
what: '
|
|
1668
|
+
what: 'Selection list may contain groups of related options that are not grouped with optgroup'
|
|
1492
1669
|
}
|
|
1493
1670
|
}
|
|
1494
1671
|
}
|
|
@@ -1499,7 +1676,7 @@ const groups = {
|
|
|
1499
1676
|
ibm: {
|
|
1500
1677
|
'v:WCAG20_Elem_UniqueAccessKey': {
|
|
1501
1678
|
quality: 1,
|
|
1502
|
-
what: 'Accesskey attribute
|
|
1679
|
+
what: 'Accesskey attribute value on an element is not unique for the page'
|
|
1503
1680
|
}
|
|
1504
1681
|
},
|
|
1505
1682
|
wave: {
|
|
@@ -1533,6 +1710,17 @@ const groups = {
|
|
|
1533
1710
|
}
|
|
1534
1711
|
}
|
|
1535
1712
|
},
|
|
1713
|
+
fieldSetRisk: {
|
|
1714
|
+
weight: 1,
|
|
1715
|
+
packages: {
|
|
1716
|
+
htmlcs: {
|
|
1717
|
+
'w:AA.1_3_1.H71.SameName': {
|
|
1718
|
+
quality: 1,
|
|
1719
|
+
what: 'Radio buttons or check boxes may require a group description via a fieldset element'
|
|
1720
|
+
}
|
|
1721
|
+
}
|
|
1722
|
+
}
|
|
1723
|
+
},
|
|
1536
1724
|
legendMissing: {
|
|
1537
1725
|
weight: 2,
|
|
1538
1726
|
packages: {
|
|
@@ -1600,9 +1788,37 @@ const groups = {
|
|
|
1600
1788
|
}
|
|
1601
1789
|
}
|
|
1602
1790
|
},
|
|
1791
|
+
TableHeaderScopeRisk: {
|
|
1792
|
+
weight: 1,
|
|
1793
|
+
packages: {
|
|
1794
|
+
htmlcs: {
|
|
1795
|
+
'e:AA.1_3_1.H63.1': {
|
|
1796
|
+
quality: 1,
|
|
1797
|
+
what: 'Not all th elements in the table have a scope attribute, so an inferred scope may be incorrect'
|
|
1798
|
+
}
|
|
1799
|
+
}
|
|
1800
|
+
}
|
|
1801
|
+
},
|
|
1802
|
+
tableHeaderEmpty: {
|
|
1803
|
+
weight: 2,
|
|
1804
|
+
packages: {
|
|
1805
|
+
wave: {
|
|
1806
|
+
'e:th_empty': {
|
|
1807
|
+
quality: 1,
|
|
1808
|
+
what: 'th (table header) contains no text'
|
|
1809
|
+
}
|
|
1810
|
+
}
|
|
1811
|
+
}
|
|
1812
|
+
},
|
|
1603
1813
|
controlLabel: {
|
|
1604
1814
|
weight: 4,
|
|
1605
1815
|
packages: {
|
|
1816
|
+
axe: {
|
|
1817
|
+
label: {
|
|
1818
|
+
quality: 1,
|
|
1819
|
+
what: 'Form element has no label'
|
|
1820
|
+
}
|
|
1821
|
+
},
|
|
1606
1822
|
htmlcs: {
|
|
1607
1823
|
'e:AA.1_3_1.F68': {
|
|
1608
1824
|
quality: 1,
|
|
@@ -1738,6 +1954,12 @@ const groups = {
|
|
|
1738
1954
|
allItalics: {
|
|
1739
1955
|
weight: 1,
|
|
1740
1956
|
packages: {
|
|
1957
|
+
alfa: {
|
|
1958
|
+
r85: {
|
|
1959
|
+
quality: 1,
|
|
1960
|
+
what: 'Text of the paragraph is all italic'
|
|
1961
|
+
}
|
|
1962
|
+
},
|
|
1741
1963
|
tenon: {
|
|
1742
1964
|
154: {
|
|
1743
1965
|
quality: 1,
|
|
@@ -1746,6 +1968,17 @@ const groups = {
|
|
|
1746
1968
|
}
|
|
1747
1969
|
}
|
|
1748
1970
|
},
|
|
1971
|
+
noLandmarks: {
|
|
1972
|
+
weight: 2,
|
|
1973
|
+
packages: {
|
|
1974
|
+
wave: {
|
|
1975
|
+
'a:region_missing': {
|
|
1976
|
+
quality: 1,
|
|
1977
|
+
what: 'Page has no regions or ARIA landmarks'
|
|
1978
|
+
}
|
|
1979
|
+
}
|
|
1980
|
+
}
|
|
1981
|
+
},
|
|
1749
1982
|
contentBeyondLandmarks: {
|
|
1750
1983
|
weight: 2,
|
|
1751
1984
|
packages: {
|
|
@@ -1897,6 +2130,17 @@ const groups = {
|
|
|
1897
2130
|
}
|
|
1898
2131
|
}
|
|
1899
2132
|
},
|
|
2133
|
+
focusableDescendants: {
|
|
2134
|
+
weight: 4,
|
|
2135
|
+
packages: {
|
|
2136
|
+
alfa: {
|
|
2137
|
+
r90: {
|
|
2138
|
+
quality: 1,
|
|
2139
|
+
what: 'Element has a role making its children presentational but contains a focusable element'
|
|
2140
|
+
}
|
|
2141
|
+
}
|
|
2142
|
+
}
|
|
2143
|
+
},
|
|
1900
2144
|
labeledHidden: {
|
|
1901
2145
|
weight: 2,
|
|
1902
2146
|
packages: {
|
|
@@ -1959,6 +2203,16 @@ const groups = {
|
|
|
1959
2203
|
'w:AA.1_3_1.ARIA6': {
|
|
1960
2204
|
quality: 1,
|
|
1961
2205
|
what: 'Value of the aria-label attribute of the form control is empty or only whitespace'
|
|
2206
|
+
},
|
|
2207
|
+
'w:AA.4_1_2.ARIA6': {
|
|
2208
|
+
quality: 1,
|
|
2209
|
+
what: 'Value of the aria-label attribute of the form control is empty or only whitespace'
|
|
2210
|
+
}
|
|
2211
|
+
},
|
|
2212
|
+
wave: {
|
|
2213
|
+
'e:label_empty': {
|
|
2214
|
+
quality: 1,
|
|
2215
|
+
what: 'Empty form label'
|
|
1962
2216
|
}
|
|
1963
2217
|
}
|
|
1964
2218
|
}
|
|
@@ -2019,6 +2273,17 @@ const groups = {
|
|
|
2019
2273
|
}
|
|
2020
2274
|
}
|
|
2021
2275
|
},
|
|
2276
|
+
menuItemless: {
|
|
2277
|
+
weight: 4,
|
|
2278
|
+
packages: {
|
|
2279
|
+
wave: {
|
|
2280
|
+
'e:aria_menu_broken': {
|
|
2281
|
+
quality: 1,
|
|
2282
|
+
what: 'ARIA menu does not contain required menu items'
|
|
2283
|
+
}
|
|
2284
|
+
}
|
|
2285
|
+
}
|
|
2286
|
+
},
|
|
2022
2287
|
tabNavigation: {
|
|
2023
2288
|
weight: 2,
|
|
2024
2289
|
packages: {
|
|
@@ -2164,6 +2429,12 @@ const groups = {
|
|
|
2164
2429
|
quality: 1,
|
|
2165
2430
|
what: 'Skip-link target is not focusable or does not exist'
|
|
2166
2431
|
}
|
|
2432
|
+
},
|
|
2433
|
+
wave: {
|
|
2434
|
+
'e:link_skip_broken': {
|
|
2435
|
+
quality: 1,
|
|
2436
|
+
what: 'Skip-navigation link has no target or is not keyboard accessible'
|
|
2437
|
+
}
|
|
2167
2438
|
}
|
|
2168
2439
|
}
|
|
2169
2440
|
},
|
|
@@ -2178,6 +2449,17 @@ const groups = {
|
|
|
2178
2449
|
}
|
|
2179
2450
|
}
|
|
2180
2451
|
},
|
|
2452
|
+
fragmentaryNoticeRisk: {
|
|
2453
|
+
weight: 2,
|
|
2454
|
+
packages: {
|
|
2455
|
+
alfa: {
|
|
2456
|
+
r54: {
|
|
2457
|
+
quality: 1,
|
|
2458
|
+
what: 'Assertive region is not atomic'
|
|
2459
|
+
}
|
|
2460
|
+
}
|
|
2461
|
+
}
|
|
2462
|
+
},
|
|
2181
2463
|
noScriptRisk: {
|
|
2182
2464
|
weight: 1,
|
|
2183
2465
|
packages: {
|
|
@@ -2201,19 +2483,29 @@ const groups = {
|
|
|
2201
2483
|
htmlcs: {
|
|
2202
2484
|
'e:AA.1_3_1.H49.Center': {
|
|
2203
2485
|
quality: 1,
|
|
2204
|
-
what: '
|
|
2486
|
+
what: 'center element is obsolete'
|
|
2487
|
+
},
|
|
2488
|
+
'e:AA.1_3_1.H49.Font': {
|
|
2489
|
+
quality: 1,
|
|
2490
|
+
what: 'font element is obsolete'
|
|
2205
2491
|
}
|
|
2206
2492
|
}
|
|
2207
2493
|
}
|
|
2208
2494
|
},
|
|
2209
2495
|
obsoleteAttribute: {
|
|
2210
|
-
weight:
|
|
2496
|
+
weight: 3,
|
|
2211
2497
|
packages: {
|
|
2212
2498
|
htmlcs: {
|
|
2213
2499
|
'e:AA.1_3_1.H49.AlignAttr': {
|
|
2214
2500
|
quality: 1,
|
|
2215
2501
|
what: 'The align attribute is obsolete'
|
|
2216
2502
|
}
|
|
2503
|
+
},
|
|
2504
|
+
wave: {
|
|
2505
|
+
'a:longdesc': {
|
|
2506
|
+
quality: 1,
|
|
2507
|
+
what: 'The longdesc attribute is obsolete'
|
|
2508
|
+
}
|
|
2217
2509
|
}
|
|
2218
2510
|
}
|
|
2219
2511
|
}
|