testilo 13.4.0 → 13.6.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/tic27.js +173 -65
- package/procs/score/tsp27.js +3 -3
- package/scripts/ts27.json +79 -0
package/package.json
CHANGED
package/procs/score/tic27.js
CHANGED
|
@@ -362,7 +362,7 @@ exports.issueClasses = {
|
|
|
362
362
|
}
|
|
363
363
|
},
|
|
364
364
|
wave: {
|
|
365
|
-
|
|
365
|
+
alt_input_missing: {
|
|
366
366
|
variable: false,
|
|
367
367
|
quality: 1,
|
|
368
368
|
what: 'Image button has no alternative text'
|
|
@@ -452,12 +452,12 @@ exports.issueClasses = {
|
|
|
452
452
|
}
|
|
453
453
|
},
|
|
454
454
|
wave: {
|
|
455
|
-
|
|
455
|
+
alt_missing: {
|
|
456
456
|
variable: false,
|
|
457
457
|
quality: 1,
|
|
458
458
|
what: 'Text alternative is missing'
|
|
459
459
|
},
|
|
460
|
-
|
|
460
|
+
alt_spacer_missing: {
|
|
461
461
|
variable: false,
|
|
462
462
|
quality: 1,
|
|
463
463
|
what: 'Spacer image has no text alternative'
|
|
@@ -576,7 +576,7 @@ exports.issueClasses = {
|
|
|
576
576
|
weight: 1,
|
|
577
577
|
tools: {
|
|
578
578
|
wave: {
|
|
579
|
-
|
|
579
|
+
alt_duplicate: {
|
|
580
580
|
variable: false,
|
|
581
581
|
quality: 1,
|
|
582
582
|
what: 'Two images near each other have the same text alternative'
|
|
@@ -596,7 +596,7 @@ exports.issueClasses = {
|
|
|
596
596
|
}
|
|
597
597
|
},
|
|
598
598
|
wave: {
|
|
599
|
-
|
|
599
|
+
alt_long: {
|
|
600
600
|
variable: false,
|
|
601
601
|
quality: 1,
|
|
602
602
|
what: 'Long text alternative'
|
|
@@ -654,7 +654,7 @@ exports.issueClasses = {
|
|
|
654
654
|
}
|
|
655
655
|
},
|
|
656
656
|
wave: {
|
|
657
|
-
|
|
657
|
+
alt_suspicious: {
|
|
658
658
|
variable: false,
|
|
659
659
|
quality: 1,
|
|
660
660
|
what: 'Image text alternative is suspicious'
|
|
@@ -766,7 +766,7 @@ exports.issueClasses = {
|
|
|
766
766
|
}
|
|
767
767
|
},
|
|
768
768
|
wave: {
|
|
769
|
-
|
|
769
|
+
language_missing: {
|
|
770
770
|
variable: false,
|
|
771
771
|
quality: 1,
|
|
772
772
|
what: 'Language missing or invalid'
|
|
@@ -961,7 +961,7 @@ exports.issueClasses = {
|
|
|
961
961
|
}
|
|
962
962
|
},
|
|
963
963
|
wave: {
|
|
964
|
-
|
|
964
|
+
plugin: {
|
|
965
965
|
variable: false,
|
|
966
966
|
quality: 1,
|
|
967
967
|
what: 'An unidentified plugin is present'
|
|
@@ -1000,7 +1000,7 @@ exports.issueClasses = {
|
|
|
1000
1000
|
weight: 4,
|
|
1001
1001
|
tools: {
|
|
1002
1002
|
wave: {
|
|
1003
|
-
|
|
1003
|
+
alt_map_missing: {
|
|
1004
1004
|
variable: false,
|
|
1005
1005
|
quality: 1,
|
|
1006
1006
|
what: 'Image that has hot spots has no alt attribute'
|
|
@@ -1046,7 +1046,7 @@ exports.issueClasses = {
|
|
|
1046
1046
|
}
|
|
1047
1047
|
},
|
|
1048
1048
|
wave: {
|
|
1049
|
-
|
|
1049
|
+
alt_area_missing: {
|
|
1050
1050
|
variable: false,
|
|
1051
1051
|
quality: 1,
|
|
1052
1052
|
what: 'Image map area has no alternative text'
|
|
@@ -1119,7 +1119,7 @@ exports.issueClasses = {
|
|
|
1119
1119
|
}
|
|
1120
1120
|
},
|
|
1121
1121
|
wave: {
|
|
1122
|
-
|
|
1122
|
+
event_handler: {
|
|
1123
1123
|
variable: false,
|
|
1124
1124
|
quality: 1,
|
|
1125
1125
|
what: 'Device-dependent event handler'
|
|
@@ -1139,7 +1139,7 @@ exports.issueClasses = {
|
|
|
1139
1139
|
}
|
|
1140
1140
|
},
|
|
1141
1141
|
wave: {
|
|
1142
|
-
|
|
1142
|
+
link_internal_broken: {
|
|
1143
1143
|
variable: false,
|
|
1144
1144
|
quality: 1,
|
|
1145
1145
|
what: 'Broken same-page link'
|
|
@@ -1155,7 +1155,14 @@ exports.issueClasses = {
|
|
|
1155
1155
|
'AAA.1_3_1.H44.NotFormControl': {
|
|
1156
1156
|
variable: false,
|
|
1157
1157
|
quality: 1,
|
|
1158
|
-
what: '
|
|
1158
|
+
what: 'Referent of the for attribute of the label is not a form control, so may be wrong'
|
|
1159
|
+
}
|
|
1160
|
+
},
|
|
1161
|
+
ibm: {
|
|
1162
|
+
label_ref_valid: {
|
|
1163
|
+
variable: false,
|
|
1164
|
+
quality: 1,
|
|
1165
|
+
what: 'Value of the for attribute of the label element is not the id of a valid input element'
|
|
1159
1166
|
}
|
|
1160
1167
|
},
|
|
1161
1168
|
nuVal: {
|
|
@@ -1323,7 +1330,7 @@ exports.issueClasses = {
|
|
|
1323
1330
|
}
|
|
1324
1331
|
},
|
|
1325
1332
|
wave: {
|
|
1326
|
-
|
|
1333
|
+
label_orphaned: {
|
|
1327
1334
|
variable: false,
|
|
1328
1335
|
quality: 1,
|
|
1329
1336
|
what: 'Orphaned form label'
|
|
@@ -1414,6 +1421,11 @@ exports.issueClasses = {
|
|
|
1414
1421
|
variable: false,
|
|
1415
1422
|
quality: 1,
|
|
1416
1423
|
what: 'Hyperlink has no text description'
|
|
1424
|
+
},
|
|
1425
|
+
a_text_purpose: {
|
|
1426
|
+
variable: false,
|
|
1427
|
+
quality: 1,
|
|
1428
|
+
what: 'Hyperlink has no link text, label, or image with a text alternative'
|
|
1417
1429
|
}
|
|
1418
1430
|
},
|
|
1419
1431
|
qualWeb: {
|
|
@@ -1441,12 +1453,12 @@ exports.issueClasses = {
|
|
|
1441
1453
|
}
|
|
1442
1454
|
},
|
|
1443
1455
|
wave: {
|
|
1444
|
-
|
|
1456
|
+
link_empty: {
|
|
1445
1457
|
variable: false,
|
|
1446
1458
|
quality: 1,
|
|
1447
1459
|
what: 'Link contains no text'
|
|
1448
1460
|
},
|
|
1449
|
-
|
|
1461
|
+
alt_link_missing: {
|
|
1450
1462
|
variable: false,
|
|
1451
1463
|
quality: 1,
|
|
1452
1464
|
what: 'Linked image has no text alternative'
|
|
@@ -1525,7 +1537,7 @@ exports.issueClasses = {
|
|
|
1525
1537
|
weight: 1,
|
|
1526
1538
|
tools: {
|
|
1527
1539
|
wave: {
|
|
1528
|
-
|
|
1540
|
+
link_pdf: {
|
|
1529
1541
|
variable: false,
|
|
1530
1542
|
quality: 1,
|
|
1531
1543
|
what: 'Link to PDF document'
|
|
@@ -1681,7 +1693,7 @@ exports.issueClasses = {
|
|
|
1681
1693
|
}
|
|
1682
1694
|
},
|
|
1683
1695
|
wave: {
|
|
1684
|
-
|
|
1696
|
+
link_redundant: {
|
|
1685
1697
|
variable: false,
|
|
1686
1698
|
quality: 1,
|
|
1687
1699
|
what: 'Adjacent links go to the same URL'
|
|
@@ -1751,7 +1763,7 @@ exports.issueClasses = {
|
|
|
1751
1763
|
weight: 1,
|
|
1752
1764
|
tools: {
|
|
1753
1765
|
wave: {
|
|
1754
|
-
|
|
1766
|
+
javascript_jumpmenu: {
|
|
1755
1767
|
variable: false,
|
|
1756
1768
|
quality: 1,
|
|
1757
1769
|
what: 'selection change may navigate to another page without notice'
|
|
@@ -1864,7 +1876,7 @@ exports.issueClasses = {
|
|
|
1864
1876
|
}
|
|
1865
1877
|
},
|
|
1866
1878
|
wave: {
|
|
1867
|
-
|
|
1879
|
+
button_empty: {
|
|
1868
1880
|
variable: false,
|
|
1869
1881
|
quality: 1,
|
|
1870
1882
|
what: 'Button is empty or has no value text'
|
|
@@ -2137,7 +2149,7 @@ exports.issueClasses = {
|
|
|
2137
2149
|
}
|
|
2138
2150
|
},
|
|
2139
2151
|
wave: {
|
|
2140
|
-
|
|
2152
|
+
text_small: {
|
|
2141
2153
|
variable: false,
|
|
2142
2154
|
quality: 1,
|
|
2143
2155
|
what: 'Text is very small'
|
|
@@ -2276,6 +2288,18 @@ exports.issueClasses = {
|
|
|
2276
2288
|
wcag: '1.3.1',
|
|
2277
2289
|
weight: 4,
|
|
2278
2290
|
tools: {
|
|
2291
|
+
htmlcs: {
|
|
2292
|
+
'AAA.2_4_8.H59.1': {
|
|
2293
|
+
variable: false,
|
|
2294
|
+
quality: 1,
|
|
2295
|
+
what: 'link element is not in the document head'
|
|
2296
|
+
},
|
|
2297
|
+
'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.': {
|
|
2298
|
+
variable: false,
|
|
2299
|
+
quality: 1,
|
|
2300
|
+
what: 'link element with an as attribute has no rel attribute with preload, modulepreload, or prefetch as its value'
|
|
2301
|
+
}
|
|
2302
|
+
},
|
|
2279
2303
|
nuVal: {
|
|
2280
2304
|
'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.': {
|
|
2281
2305
|
variable: false,
|
|
@@ -2518,6 +2542,11 @@ exports.issueClasses = {
|
|
|
2518
2542
|
}
|
|
2519
2543
|
},
|
|
2520
2544
|
ibm: {
|
|
2545
|
+
aria_role_valid: {
|
|
2546
|
+
variable: false,
|
|
2547
|
+
quality: 1,
|
|
2548
|
+
what: 'ARIA role is not valid for its element'
|
|
2549
|
+
},
|
|
2521
2550
|
aria_semantics_role: {
|
|
2522
2551
|
variable: false,
|
|
2523
2552
|
quality: 1,
|
|
@@ -2538,6 +2567,11 @@ exports.issueClasses = {
|
|
|
2538
2567
|
quality: 1,
|
|
2539
2568
|
what: 'Element has an invalid role'
|
|
2540
2569
|
},
|
|
2570
|
+
aria_eventhandler_role_valid: {
|
|
2571
|
+
variable: false,
|
|
2572
|
+
quality: 1,
|
|
2573
|
+
what: 'Element with an onclick, onmouseout, or onmouseover attribute has no valid ARIA role'
|
|
2574
|
+
},
|
|
2541
2575
|
Rpt_Aria_EventHandlerMissingRole_Native_Host_Sematics: {
|
|
2542
2576
|
variable: false,
|
|
2543
2577
|
quality: 1,
|
|
@@ -2619,7 +2653,7 @@ exports.issueClasses = {
|
|
|
2619
2653
|
}
|
|
2620
2654
|
},
|
|
2621
2655
|
testaro: {
|
|
2622
|
-
|
|
2656
|
+
role: {
|
|
2623
2657
|
variable: false,
|
|
2624
2658
|
quality: 1,
|
|
2625
2659
|
what: 'Invalid, native-replacing, or redundant role'
|
|
@@ -2636,6 +2670,11 @@ exports.issueClasses = {
|
|
|
2636
2670
|
variable: false,
|
|
2637
2671
|
quality: 1,
|
|
2638
2672
|
what: 'dir attribute has a value other than ltr, rtl, or auto'
|
|
2673
|
+
},
|
|
2674
|
+
aria_attribute_valid: {
|
|
2675
|
+
variable: false,
|
|
2676
|
+
quality: 1,
|
|
2677
|
+
what: 'ARIA attribute is invalid for the role of its element'
|
|
2639
2678
|
}
|
|
2640
2679
|
},
|
|
2641
2680
|
nuVal: {
|
|
@@ -2728,6 +2767,11 @@ exports.issueClasses = {
|
|
|
2728
2767
|
variable: false,
|
|
2729
2768
|
quality: 1,
|
|
2730
2769
|
what: 'ARIA role on an element does not have a required attribute'
|
|
2770
|
+
},
|
|
2771
|
+
aria_attribute_required: {
|
|
2772
|
+
variable: false,
|
|
2773
|
+
quality: 1,
|
|
2774
|
+
what: 'Element does not have the ARIA attribute required by its role'
|
|
2731
2775
|
}
|
|
2732
2776
|
},
|
|
2733
2777
|
nuVal: {
|
|
@@ -3106,7 +3150,7 @@ exports.issueClasses = {
|
|
|
3106
3150
|
}
|
|
3107
3151
|
},
|
|
3108
3152
|
wave: {
|
|
3109
|
-
|
|
3153
|
+
aria_reference_broken: {
|
|
3110
3154
|
variable: false,
|
|
3111
3155
|
quality: 1,
|
|
3112
3156
|
what: 'Broken ARIA reference'
|
|
@@ -3248,7 +3292,7 @@ exports.issueClasses = {
|
|
|
3248
3292
|
}
|
|
3249
3293
|
},
|
|
3250
3294
|
wave: {
|
|
3251
|
-
|
|
3295
|
+
contrast: {
|
|
3252
3296
|
variable: false,
|
|
3253
3297
|
quality: 1,
|
|
3254
3298
|
what: 'Very low contrast'
|
|
@@ -3444,6 +3488,11 @@ exports.issueClasses = {
|
|
|
3444
3488
|
variable: false,
|
|
3445
3489
|
quality: 1,
|
|
3446
3490
|
what: 'Heading element provides no descriptive text'
|
|
3491
|
+
},
|
|
3492
|
+
heading_content_exists: {
|
|
3493
|
+
variable: false,
|
|
3494
|
+
quality: 1,
|
|
3495
|
+
what: 'Heading element has no descriptive content'
|
|
3447
3496
|
}
|
|
3448
3497
|
},
|
|
3449
3498
|
nuVal: {
|
|
@@ -3461,7 +3510,7 @@ exports.issueClasses = {
|
|
|
3461
3510
|
}
|
|
3462
3511
|
},
|
|
3463
3512
|
wave: {
|
|
3464
|
-
|
|
3513
|
+
heading_empty: {
|
|
3465
3514
|
variable: false,
|
|
3466
3515
|
quality: 1,
|
|
3467
3516
|
what: 'Empty heading'
|
|
@@ -3526,7 +3575,7 @@ exports.issueClasses = {
|
|
|
3526
3575
|
}
|
|
3527
3576
|
},
|
|
3528
3577
|
wave: {
|
|
3529
|
-
|
|
3578
|
+
alt_redundant: {
|
|
3530
3579
|
variable: false,
|
|
3531
3580
|
quality: 1,
|
|
3532
3581
|
what: 'Redundant text alternative'
|
|
@@ -3553,7 +3602,7 @@ exports.issueClasses = {
|
|
|
3553
3602
|
}
|
|
3554
3603
|
},
|
|
3555
3604
|
wave: {
|
|
3556
|
-
|
|
3605
|
+
image_title: {
|
|
3557
3606
|
variable: false,
|
|
3558
3607
|
quality: 1,
|
|
3559
3608
|
what: 'Image has a title attribute value but no alt value'
|
|
@@ -3580,7 +3629,7 @@ exports.issueClasses = {
|
|
|
3580
3629
|
}
|
|
3581
3630
|
},
|
|
3582
3631
|
wave: {
|
|
3583
|
-
|
|
3632
|
+
title_redundant: {
|
|
3584
3633
|
variable: false,
|
|
3585
3634
|
quality: 1,
|
|
3586
3635
|
what: 'Title attribute text is the same as text or alternative text'
|
|
@@ -3699,7 +3748,7 @@ exports.issueClasses = {
|
|
|
3699
3748
|
}
|
|
3700
3749
|
},
|
|
3701
3750
|
wave: {
|
|
3702
|
-
|
|
3751
|
+
title_invalid: {
|
|
3703
3752
|
variable: false,
|
|
3704
3753
|
quality: 1,
|
|
3705
3754
|
what: 'Missing or uninformative page title'
|
|
@@ -3726,7 +3775,7 @@ exports.issueClasses = {
|
|
|
3726
3775
|
}
|
|
3727
3776
|
},
|
|
3728
3777
|
wave: {
|
|
3729
|
-
|
|
3778
|
+
heading_skipped: {
|
|
3730
3779
|
variable: false,
|
|
3731
3780
|
quality: 1,
|
|
3732
3781
|
what: 'Skipped heading level'
|
|
@@ -3786,7 +3835,7 @@ exports.issueClasses = {
|
|
|
3786
3835
|
}
|
|
3787
3836
|
},
|
|
3788
3837
|
wave: {
|
|
3789
|
-
|
|
3838
|
+
heading_missing: {
|
|
3790
3839
|
variable: false,
|
|
3791
3840
|
quality: 1,
|
|
3792
3841
|
what: 'Page has no headings'
|
|
@@ -3898,7 +3947,7 @@ exports.issueClasses = {
|
|
|
3898
3947
|
}
|
|
3899
3948
|
},
|
|
3900
3949
|
wave: {
|
|
3901
|
-
|
|
3950
|
+
text_justified: {
|
|
3902
3951
|
variable: false,
|
|
3903
3952
|
quality: 1,
|
|
3904
3953
|
what: 'Text is justified'
|
|
@@ -4025,7 +4074,7 @@ exports.issueClasses = {
|
|
|
4025
4074
|
}
|
|
4026
4075
|
},
|
|
4027
4076
|
wave: {
|
|
4028
|
-
|
|
4077
|
+
heading_possible: {
|
|
4029
4078
|
variable: false,
|
|
4030
4079
|
quality: 1,
|
|
4031
4080
|
what: 'Possible heading'
|
|
@@ -4045,7 +4094,7 @@ exports.issueClasses = {
|
|
|
4045
4094
|
}
|
|
4046
4095
|
},
|
|
4047
4096
|
wave: {
|
|
4048
|
-
|
|
4097
|
+
underline: {
|
|
4049
4098
|
variable: false,
|
|
4050
4099
|
quality: 1,
|
|
4051
4100
|
what: 'CSS underline on text that is not a link'
|
|
@@ -4139,7 +4188,7 @@ exports.issueClasses = {
|
|
|
4139
4188
|
}
|
|
4140
4189
|
},
|
|
4141
4190
|
wave: {
|
|
4142
|
-
|
|
4191
|
+
list_possible: {
|
|
4143
4192
|
variable: false,
|
|
4144
4193
|
quality: 1,
|
|
4145
4194
|
what: 'List may fail to be coded as such'
|
|
@@ -4211,7 +4260,7 @@ exports.issueClasses = {
|
|
|
4211
4260
|
}
|
|
4212
4261
|
},
|
|
4213
4262
|
wave: {
|
|
4214
|
-
|
|
4263
|
+
select_missing_label: {
|
|
4215
4264
|
variable: false,
|
|
4216
4265
|
quality: 1,
|
|
4217
4266
|
what: 'Select element has no label'
|
|
@@ -4271,7 +4320,7 @@ exports.issueClasses = {
|
|
|
4271
4320
|
}
|
|
4272
4321
|
},
|
|
4273
4322
|
wave: {
|
|
4274
|
-
|
|
4323
|
+
accesskey: {
|
|
4275
4324
|
variable: false,
|
|
4276
4325
|
quality: 1,
|
|
4277
4326
|
what: 'Accesskey'
|
|
@@ -4298,7 +4347,7 @@ exports.issueClasses = {
|
|
|
4298
4347
|
}
|
|
4299
4348
|
},
|
|
4300
4349
|
wave: {
|
|
4301
|
-
|
|
4350
|
+
fieldset_missing: {
|
|
4302
4351
|
variable: false,
|
|
4303
4352
|
quality: 1,
|
|
4304
4353
|
what: 'fieldset element is missing'
|
|
@@ -4354,7 +4403,12 @@ exports.issueClasses = {
|
|
|
4354
4403
|
WCAG20_Fieldset_HasLegend: {
|
|
4355
4404
|
variable: false,
|
|
4356
4405
|
quality: 1,
|
|
4357
|
-
what: 'fieldset element has no single, non-empty legend as a label'
|
|
4406
|
+
what: 'fieldset element has no single, non-empty legend element as a label'
|
|
4407
|
+
},
|
|
4408
|
+
fieldset_legend_valid: {
|
|
4409
|
+
variable: false,
|
|
4410
|
+
quality: 1,
|
|
4411
|
+
what: 'fieldset element does not have a legend element'
|
|
4358
4412
|
}
|
|
4359
4413
|
},
|
|
4360
4414
|
qualWeb: {
|
|
@@ -4365,7 +4419,7 @@ exports.issueClasses = {
|
|
|
4365
4419
|
}
|
|
4366
4420
|
},
|
|
4367
4421
|
wave: {
|
|
4368
|
-
|
|
4422
|
+
legend_missing: {
|
|
4369
4423
|
variable: false,
|
|
4370
4424
|
quality: 1,
|
|
4371
4425
|
what: 'fieldset has no legend element'
|
|
@@ -4396,6 +4450,11 @@ exports.issueClasses = {
|
|
|
4396
4450
|
variable: false,
|
|
4397
4451
|
quality: 1,
|
|
4398
4452
|
what: 'Groups with nested inputs has no unique accessible name'
|
|
4453
|
+
},
|
|
4454
|
+
fieldset_label_valid: {
|
|
4455
|
+
variable: false,
|
|
4456
|
+
quality: 1,
|
|
4457
|
+
what: 'Group or fieldset has no accessible name'
|
|
4399
4458
|
}
|
|
4400
4459
|
}
|
|
4401
4460
|
}
|
|
@@ -4424,7 +4483,7 @@ exports.issueClasses = {
|
|
|
4424
4483
|
}
|
|
4425
4484
|
},
|
|
4426
4485
|
wave: {
|
|
4427
|
-
|
|
4486
|
+
table_layout: {
|
|
4428
4487
|
variable: false,
|
|
4429
4488
|
quality: 1,
|
|
4430
4489
|
what: 'table element is misused to arrange content'
|
|
@@ -4651,7 +4710,7 @@ exports.issueClasses = {
|
|
|
4651
4710
|
weight: 2,
|
|
4652
4711
|
tools: {
|
|
4653
4712
|
wave: {
|
|
4654
|
-
|
|
4713
|
+
th_empty: {
|
|
4655
4714
|
variable: false,
|
|
4656
4715
|
quality: 1,
|
|
4657
4716
|
what: 'th (table header) contains no text'
|
|
@@ -4705,7 +4764,7 @@ exports.issueClasses = {
|
|
|
4705
4764
|
}
|
|
4706
4765
|
},
|
|
4707
4766
|
wave: {
|
|
4708
|
-
|
|
4767
|
+
label_missing: {
|
|
4709
4768
|
variable: false,
|
|
4710
4769
|
quality: 1,
|
|
4711
4770
|
what: 'form element has no label'
|
|
@@ -4731,7 +4790,7 @@ exports.issueClasses = {
|
|
|
4731
4790
|
weight: 3,
|
|
4732
4791
|
tools: {
|
|
4733
4792
|
wave: {
|
|
4734
|
-
|
|
4793
|
+
label_title: {
|
|
4735
4794
|
variable: false,
|
|
4736
4795
|
quality: 1,
|
|
4737
4796
|
what: 'Form control has a title but no label'
|
|
@@ -4968,7 +5027,7 @@ exports.issueClasses = {
|
|
|
4968
5027
|
}
|
|
4969
5028
|
},
|
|
4970
5029
|
testaro: {
|
|
4971
|
-
|
|
5030
|
+
focInd: {
|
|
4972
5031
|
variable: false,
|
|
4973
5032
|
quality: 1,
|
|
4974
5033
|
what: 'Focused element displays a nonstandard or no focus indicator'
|
|
@@ -5021,7 +5080,7 @@ exports.issueClasses = {
|
|
|
5021
5080
|
weight: 2,
|
|
5022
5081
|
tools: {
|
|
5023
5082
|
wave: {
|
|
5024
|
-
|
|
5083
|
+
region_missing: {
|
|
5025
5084
|
variable: false,
|
|
5026
5085
|
quality: 1,
|
|
5027
5086
|
what: 'Page has no regions or ARIA landmarks'
|
|
@@ -5182,6 +5241,13 @@ exports.issueClasses = {
|
|
|
5182
5241
|
quality: 1,
|
|
5183
5242
|
what: 'Multiple elements with a banner role are on the page'
|
|
5184
5243
|
}
|
|
5244
|
+
},
|
|
5245
|
+
qualWeb: {
|
|
5246
|
+
'QW-BP20': {
|
|
5247
|
+
variable: false,
|
|
5248
|
+
quality: 1,
|
|
5249
|
+
what: 'Document has more than 1 banner landmark'
|
|
5250
|
+
}
|
|
5185
5251
|
}
|
|
5186
5252
|
}
|
|
5187
5253
|
},
|
|
@@ -5195,6 +5261,13 @@ exports.issueClasses = {
|
|
|
5195
5261
|
quality: 1,
|
|
5196
5262
|
what: 'banner landmark is contained in another landmark'
|
|
5197
5263
|
}
|
|
5264
|
+
},
|
|
5265
|
+
qualWeb: {
|
|
5266
|
+
'QW-BP19': {
|
|
5267
|
+
variable: false,
|
|
5268
|
+
quality: 1,
|
|
5269
|
+
what: 'banner landmark is not at the top level'
|
|
5270
|
+
}
|
|
5198
5271
|
}
|
|
5199
5272
|
}
|
|
5200
5273
|
},
|
|
@@ -5437,6 +5510,11 @@ exports.issueClasses = {
|
|
|
5437
5510
|
variable: false,
|
|
5438
5511
|
quality: 1,
|
|
5439
5512
|
what: 'label element has no non-empty purpose-descriptive text'
|
|
5513
|
+
},
|
|
5514
|
+
label_content_exists: {
|
|
5515
|
+
variable: false,
|
|
5516
|
+
quality: 1,
|
|
5517
|
+
what: 'label element has no descriptive text identifying the expected input'
|
|
5440
5518
|
}
|
|
5441
5519
|
}
|
|
5442
5520
|
}
|
|
@@ -5446,7 +5524,7 @@ exports.issueClasses = {
|
|
|
5446
5524
|
weight: 3,
|
|
5447
5525
|
tools: {
|
|
5448
5526
|
testaro: {
|
|
5449
|
-
|
|
5527
|
+
focOp: {
|
|
5450
5528
|
variable: false,
|
|
5451
5529
|
quality: 1,
|
|
5452
5530
|
what: 'Tab-focusable elements that are inoperable or operable elements that are not focusable'
|
|
@@ -5570,6 +5648,24 @@ exports.issueClasses = {
|
|
|
5570
5648
|
}
|
|
5571
5649
|
}
|
|
5572
5650
|
},
|
|
5651
|
+
multipleLabelees: {
|
|
5652
|
+
wcag: '1.3.1',
|
|
5653
|
+
weight: 4,
|
|
5654
|
+
tools: {
|
|
5655
|
+
nuVal: {
|
|
5656
|
+
'The label element may contain at most one button, input, meter, output, progress, select, or textarea descendant.': {
|
|
5657
|
+
variable: false,
|
|
5658
|
+
quality: 1,
|
|
5659
|
+
what: 'label element has more than 1 labelable descendant.'
|
|
5660
|
+
},
|
|
5661
|
+
'label element with multiple labelable descendants.': {
|
|
5662
|
+
variable: false,
|
|
5663
|
+
quality: 1,
|
|
5664
|
+
what: 'label element has multiple labelable descendants.'
|
|
5665
|
+
}
|
|
5666
|
+
}
|
|
5667
|
+
}
|
|
5668
|
+
},
|
|
5573
5669
|
labeledHidden: {
|
|
5574
5670
|
wcag: '1.3.1',
|
|
5575
5671
|
weight: 2,
|
|
@@ -5658,7 +5754,7 @@ exports.issueClasses = {
|
|
|
5658
5754
|
weight: 3,
|
|
5659
5755
|
tools: {
|
|
5660
5756
|
testaro: {
|
|
5661
|
-
|
|
5757
|
+
hover: {
|
|
5662
5758
|
variable: false,
|
|
5663
5759
|
quality: 1,
|
|
5664
5760
|
what: 'Hovering over element has unexpected effects'
|
|
@@ -5678,7 +5774,7 @@ exports.issueClasses = {
|
|
|
5678
5774
|
}
|
|
5679
5775
|
},
|
|
5680
5776
|
testaro: {
|
|
5681
|
-
|
|
5777
|
+
labClash: {
|
|
5682
5778
|
variable: false,
|
|
5683
5779
|
quality: 1,
|
|
5684
5780
|
what: 'Incompatible label types'
|
|
@@ -5692,7 +5788,7 @@ exports.issueClasses = {
|
|
|
5692
5788
|
}
|
|
5693
5789
|
},
|
|
5694
5790
|
wave: {
|
|
5695
|
-
|
|
5791
|
+
label_multiple: {
|
|
5696
5792
|
variable: false,
|
|
5697
5793
|
quality: 1,
|
|
5698
5794
|
what: 'Form control has more than one label associated with it'
|
|
@@ -5717,7 +5813,7 @@ exports.issueClasses = {
|
|
|
5717
5813
|
}
|
|
5718
5814
|
},
|
|
5719
5815
|
wave: {
|
|
5720
|
-
|
|
5816
|
+
label_empty: {
|
|
5721
5817
|
variable: false,
|
|
5722
5818
|
quality: 1,
|
|
5723
5819
|
what: 'Empty form label'
|
|
@@ -5730,7 +5826,7 @@ exports.issueClasses = {
|
|
|
5730
5826
|
weight: 1,
|
|
5731
5827
|
tools: {
|
|
5732
5828
|
wave: {
|
|
5733
|
-
|
|
5829
|
+
link_suspicious: {
|
|
5734
5830
|
variable: false,
|
|
5735
5831
|
quality: 1,
|
|
5736
5832
|
what: 'Suspicious link text'
|
|
@@ -5750,12 +5846,12 @@ exports.issueClasses = {
|
|
|
5750
5846
|
}
|
|
5751
5847
|
},
|
|
5752
5848
|
wave: {
|
|
5753
|
-
|
|
5849
|
+
link_excel: {
|
|
5754
5850
|
variable: false,
|
|
5755
5851
|
quality: 1,
|
|
5756
5852
|
what: 'Link to Microsoft Excel workbook'
|
|
5757
5853
|
},
|
|
5758
|
-
|
|
5854
|
+
link_word: {
|
|
5759
5855
|
variable: false,
|
|
5760
5856
|
quality: 1,
|
|
5761
5857
|
what: 'Link to Microsoft Word document'
|
|
@@ -5821,7 +5917,7 @@ exports.issueClasses = {
|
|
|
5821
5917
|
weight: 4,
|
|
5822
5918
|
tools: {
|
|
5823
5919
|
wave: {
|
|
5824
|
-
|
|
5920
|
+
aria_menu_broken: {
|
|
5825
5921
|
variable: false,
|
|
5826
5922
|
quality: 1,
|
|
5827
5923
|
what: 'ARIA menu does not contain required menu items'
|
|
@@ -5954,6 +6050,13 @@ exports.issueClasses = {
|
|
|
5954
6050
|
wcag: '1.3.1',
|
|
5955
6051
|
weight: 4,
|
|
5956
6052
|
tools: {
|
|
6053
|
+
ibm: {
|
|
6054
|
+
aria_parent_required: {
|
|
6055
|
+
variable: true,
|
|
6056
|
+
quality: 1,
|
|
6057
|
+
what: 'Element is not contained in or owned by an element with a required role'
|
|
6058
|
+
}
|
|
6059
|
+
},
|
|
5957
6060
|
nuVal: {
|
|
5958
6061
|
'^Element .+ not allowed as child of element .+ in this context.*$': {
|
|
5959
6062
|
variable: true,
|
|
@@ -6014,7 +6117,7 @@ exports.issueClasses = {
|
|
|
6014
6117
|
}
|
|
6015
6118
|
},
|
|
6016
6119
|
wave: {
|
|
6017
|
-
|
|
6120
|
+
tabindex: {
|
|
6018
6121
|
variable: false,
|
|
6019
6122
|
quality: 1,
|
|
6020
6123
|
what: 'tabIndex value positive'
|
|
@@ -6199,12 +6302,12 @@ exports.issueClasses = {
|
|
|
6199
6302
|
quality: 1,
|
|
6200
6303
|
what: 'video or audio element may have no or incorrect captions, transcript, or audio description'
|
|
6201
6304
|
},
|
|
6202
|
-
|
|
6305
|
+
audio_video: {
|
|
6203
6306
|
variable: false,
|
|
6204
6307
|
quality: 1,
|
|
6205
6308
|
what: 'audio or video file or link may have no or incorrect captions, transcript, or audio description'
|
|
6206
6309
|
},
|
|
6207
|
-
|
|
6310
|
+
youtube_video: {
|
|
6208
6311
|
variable: false,
|
|
6209
6312
|
quality: 1,
|
|
6210
6313
|
what: 'YouTube video may have no or incorrect captions'
|
|
@@ -6303,7 +6406,7 @@ exports.issueClasses = {
|
|
|
6303
6406
|
weight: 3,
|
|
6304
6407
|
tools: {
|
|
6305
6408
|
axe: {
|
|
6306
|
-
|
|
6409
|
+
bypass: {
|
|
6307
6410
|
variable: false,
|
|
6308
6411
|
quality: 1,
|
|
6309
6412
|
what: 'Page has no means to bypass repeated blocks'
|
|
@@ -6334,7 +6437,7 @@ exports.issueClasses = {
|
|
|
6334
6437
|
}
|
|
6335
6438
|
},
|
|
6336
6439
|
wave: {
|
|
6337
|
-
|
|
6440
|
+
link_skip_broken: {
|
|
6338
6441
|
variable: false,
|
|
6339
6442
|
quality: 1,
|
|
6340
6443
|
what: 'Skip-navigation link has no target or is not keyboard accessible'
|
|
@@ -6433,7 +6536,7 @@ exports.issueClasses = {
|
|
|
6433
6536
|
weight: 1,
|
|
6434
6537
|
tools: {
|
|
6435
6538
|
wave: {
|
|
6436
|
-
|
|
6539
|
+
noscript: {
|
|
6437
6540
|
variable: false,
|
|
6438
6541
|
quality: 1,
|
|
6439
6542
|
what: 'noscript element may fail to contain an accessible equivalent or alternative'
|
|
@@ -6564,12 +6667,12 @@ exports.issueClasses = {
|
|
|
6564
6667
|
}
|
|
6565
6668
|
},
|
|
6566
6669
|
wave: {
|
|
6567
|
-
|
|
6670
|
+
longdesc: {
|
|
6568
6671
|
variable: false,
|
|
6569
6672
|
quality: 1,
|
|
6570
6673
|
what: 'longdesc attribute is obsolete'
|
|
6571
6674
|
},
|
|
6572
|
-
|
|
6675
|
+
flash: {
|
|
6573
6676
|
variable: false,
|
|
6574
6677
|
quality: 1,
|
|
6575
6678
|
what: 'Flash content is present'
|
|
@@ -6771,7 +6874,12 @@ exports.issueClasses = {
|
|
|
6771
6874
|
weight: 3,
|
|
6772
6875
|
tools: {
|
|
6773
6876
|
ibm: {
|
|
6774
|
-
|
|
6877
|
+
aria_child_valid: {
|
|
6878
|
+
variable: false,
|
|
6879
|
+
quality: 1,
|
|
6880
|
+
what: 'Child element has a role not allowed for the role of the parent'
|
|
6881
|
+
},
|
|
6882
|
+
Rpt_Aria_InvalidTabindexForActivedescendant: {
|
|
6775
6883
|
variable: false,
|
|
6776
6884
|
quality: 1,
|
|
6777
6885
|
what: 'Element with an aria-activedescendant attribute has no nonpositive tabindex attribute'
|
|
@@ -6942,7 +7050,7 @@ exports.issueClasses = {
|
|
|
6942
7050
|
}
|
|
6943
7051
|
},
|
|
6944
7052
|
wave: {
|
|
6945
|
-
|
|
7053
|
+
longdesc_invalid: {
|
|
6946
7054
|
variable: false,
|
|
6947
7055
|
quality: 1,
|
|
6948
7056
|
what: 'longdesc attribute has a value that is not a URL (and is obsolete)'
|
package/procs/score/tsp27.js
CHANGED
|
@@ -29,7 +29,7 @@ const latencyWeight = 1;
|
|
|
29
29
|
// Normal latency (1.5 second per visit).
|
|
30
30
|
const normalLatency = 20;
|
|
31
31
|
// How much each prevention adds to the score.
|
|
32
|
-
const preventionWeight =
|
|
32
|
+
const preventionWeight = 300;
|
|
33
33
|
// Indexes of issues.
|
|
34
34
|
const issueIndex = {};
|
|
35
35
|
const issueMatcher = [];
|
|
@@ -83,7 +83,7 @@ exports.scorer = report => {
|
|
|
83
83
|
testActs.forEach(act => {
|
|
84
84
|
// If the page prevented the tool from operating:
|
|
85
85
|
const {which, standardResult} = act;
|
|
86
|
-
if (standardResult.prevented) {
|
|
86
|
+
if (! standardResult || standardResult.prevented) {
|
|
87
87
|
// Add this to the score.
|
|
88
88
|
details.prevention[which] = preventionWeight;
|
|
89
89
|
}
|
|
@@ -149,7 +149,7 @@ exports.scorer = report => {
|
|
|
149
149
|
}
|
|
150
150
|
});
|
|
151
151
|
}
|
|
152
|
-
// Otherwise, i.e. if
|
|
152
|
+
// Otherwise, i.e. if a failed standard result exists:
|
|
153
153
|
else {
|
|
154
154
|
// Add an inferred prevention to the score.
|
|
155
155
|
details.prevention[which] = preventionWeight;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
{
|
|
2
|
+
"id": "ts27",
|
|
3
|
+
"what": "accessibility tests",
|
|
4
|
+
"strict": true,
|
|
5
|
+
"timeLimit": 330,
|
|
6
|
+
"acts": [
|
|
7
|
+
{
|
|
8
|
+
"type": "placeholder",
|
|
9
|
+
"which": "main",
|
|
10
|
+
"launch": "webkit"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"type": "tenonRequest",
|
|
14
|
+
"id": "a",
|
|
15
|
+
"withNewContent": false,
|
|
16
|
+
"what": "Tenon API version 2 test request, with page content"
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"type": "test",
|
|
20
|
+
"which": "testaro",
|
|
21
|
+
"what": "Testaro motion test (requires webkit)",
|
|
22
|
+
"withItems": true,
|
|
23
|
+
"rules": ["y", "motion"]
|
|
24
|
+
},
|
|
25
|
+
{
|
|
26
|
+
"type": "placeholder",
|
|
27
|
+
"which": "main",
|
|
28
|
+
"launch": "chromium"
|
|
29
|
+
},
|
|
30
|
+
{
|
|
31
|
+
"type": "test",
|
|
32
|
+
"which": "alfa"
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
"type": "test",
|
|
36
|
+
"which": "axe",
|
|
37
|
+
"detailLevel": 2
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
"type": "test",
|
|
41
|
+
"which": "continuum"
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"type": "test",
|
|
45
|
+
"which": "htmlcs"
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"type": "test",
|
|
49
|
+
"which": "ibm",
|
|
50
|
+
"withItems": true,
|
|
51
|
+
"withNewContent": false
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"type": "test",
|
|
55
|
+
"which": "nuVal"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"type": "test",
|
|
59
|
+
"which": "qualWeb",
|
|
60
|
+
"withNewContent": false
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
"type": "test",
|
|
64
|
+
"which": "tenon",
|
|
65
|
+
"id": "a"
|
|
66
|
+
},
|
|
67
|
+
{
|
|
68
|
+
"type": "test",
|
|
69
|
+
"which": "testaro",
|
|
70
|
+
"withItems": true,
|
|
71
|
+
"rules": ["n", "motion"]
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"type": "test",
|
|
75
|
+
"which": "wave",
|
|
76
|
+
"reportType": 4
|
|
77
|
+
}
|
|
78
|
+
]
|
|
79
|
+
}
|