testilo 17.0.10 → 17.1.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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/procs/score/tic36.js +580 -42
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testilo",
3
- "version": "17.0.10",
3
+ "version": "17.1.0",
4
4
  "description": "Prepares and processes Testaro reports",
5
5
  "main": "aim.js",
6
6
  "scripts": {
@@ -24,6 +24,23 @@ exports.issues = {
24
24
  wcag: '',
25
25
  weight: 0,
26
26
  tools: {
27
+ aslint: {
28
+ 'meaningful-content-sequence': {
29
+ variable: false,
30
+ quality: 0,
31
+ what: 'The content sequence may fail to be meaningful'
32
+ },
33
+ flickering: {
34
+ variable: false,
35
+ quality: 0,
36
+ what: 'Excessive flashing may exist'
37
+ },
38
+ reflow: {
39
+ variable: false,
40
+ quality: 0,
41
+ what: 'Page may require horizontal scrolling'
42
+ }
43
+ },
27
44
  nuVal: {
28
45
  'Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)': {
29
46
  variable: false,
@@ -34,12 +51,12 @@ exports.issues = {
34
51
  qualWeb: {
35
52
  'QW-ACT-R52': {
36
53
  variable: false,
37
- quality: 1,
54
+ quality: 0,
38
55
  what: 'video element visual-only content has no description track (description tracks and this ACT rule have been deprecated)'
39
56
  },
40
57
  'QW-ACT-R57': {
41
58
  variable: false,
42
- quality: 1,
59
+ quality: 0,
43
60
  what: 'video element visual content has no description track (description tracks and this ACT rule have been deprecated)'
44
61
  },
45
62
  'QW-WCAG-T4': {
@@ -49,12 +66,12 @@ exports.issues = {
49
66
  },
50
67
  'QW-WCAG-T15': {
51
68
  variable: false,
52
- quality: 1,
69
+ quality: 0,
53
70
  what: 'link element may be used for navigation but not in the head'
54
71
  },
55
72
  'QW-WCAG-T20': {
56
73
  variable: false,
57
- quality: 1,
74
+ quality: 0,
58
75
  what: 'Link text is not supplemented with a title attribute'
59
76
  }
60
77
  }
@@ -81,7 +98,7 @@ exports.issues = {
81
98
  }
82
99
  }
83
100
  },
84
- duplicateID: {
101
+ IDUnique: {
85
102
  why: 'User may be pointed to the wrong item',
86
103
  wcag: '4.1.1',
87
104
  weight: 4,
@@ -93,6 +110,13 @@ exports.issues = {
93
110
  what: 'Element id attribute value is not unique'
94
111
  }
95
112
  },
113
+ aslint: {
114
+ 'duplicated-id-attribute': {
115
+ variable: false,
116
+ quality: 1,
117
+ what: 'Element id attribute value is not unique'
118
+ }
119
+ },
96
120
  axe: {
97
121
  'duplicate-id': {
98
122
  variable: false,
@@ -545,6 +569,11 @@ exports.issues = {
545
569
  variable: false,
546
570
  quality: 1,
547
571
  what: 'Image may be better described by a revised text alternative and an aria-label attribute'
572
+ },
573
+ 'alt-color-convey-information': {
574
+ variable: false,
575
+ quality: 1,
576
+ what: 'Text alternative may fail to give information provided by colors'
548
577
  }
549
578
  }
550
579
  }
@@ -774,7 +803,19 @@ exports.issues = {
774
803
  r4: {
775
804
  variable: false,
776
805
  quality: 1,
777
- what: 'Lang attribute missing, empty, or only whitespace'
806
+ what: 'lang attribute missing, empty, or only whitespace'
807
+ }
808
+ },
809
+ aslint: {
810
+ 'html-lang-attrN': {
811
+ variable: false,
812
+ quality: 1,
813
+ what: 'lang attribute missing from the html element'
814
+ },
815
+ 'html-lang-attrE': {
816
+ variable: false,
817
+ quality: 1,
818
+ what: 'lang attribute of the html element is empty'
778
819
  }
779
820
  },
780
821
  axe: {
@@ -843,6 +884,13 @@ exports.issues = {
843
884
  what: 'lang attribute has no valid primary language tag'
844
885
  }
845
886
  },
887
+ aslint: {
888
+ 'html-lang-attrP': {
889
+ variable: false,
890
+ quality: 1,
891
+ what: 'value of the lang attribute of the html element has too many segments'
892
+ }
893
+ },
846
894
  axe: {
847
895
  'html-lang-valid': {
848
896
  variable: false,
@@ -1140,6 +1188,20 @@ exports.issues = {
1140
1188
  }
1141
1189
  }
1142
1190
  },
1191
+ customKeyboardRisk: {
1192
+ why: 'Custom item may prevent a no-mouse user from operating it',
1193
+ wcag: '2.1.1',
1194
+ weight: 1,
1195
+ tools: {
1196
+ htmlcs: {
1197
+ 'link-button-space-key': {
1198
+ variable: false,
1199
+ quality: 1,
1200
+ what: 'Element has a button role but may fail to be keyboard-operable'
1201
+ }
1202
+ }
1203
+ }
1204
+ },
1143
1205
  objectBlurKeyboardRisk: {
1144
1206
  why: 'Custom item may trap a no-mouse user',
1145
1207
  wcag: '2.1.1',
@@ -1207,6 +1269,13 @@ exports.issues = {
1207
1269
  wcag: '1.3.1',
1208
1270
  weight: 4,
1209
1271
  tools: {
1272
+ aslint: {
1273
+ 'broken-same-page-link': {
1274
+ variable: false,
1275
+ quality: 1,
1276
+ what: 'Same-page destination of the link does not exist'
1277
+ }
1278
+ },
1210
1279
  htmlcs: {
1211
1280
  'AAA.2_4_1.G1,G123,G124.NoSuchID': {
1212
1281
  variable: false,
@@ -1228,6 +1297,13 @@ exports.issues = {
1228
1297
  wcag: '1.3.1',
1229
1298
  weight: 3,
1230
1299
  tools: {
1300
+ aslint: {
1301
+ 'label-inappropriate-associationN': {
1302
+ variable: false,
1303
+ quality: 1,
1304
+ what: 'Element referenced by the for attribute is not a form control'
1305
+ }
1306
+ },
1231
1307
  htmlcs: {
1232
1308
  'AAA.1_3_1.H44.NotFormControl': {
1233
1309
  variable: false,
@@ -1338,6 +1414,13 @@ exports.issues = {
1338
1414
  wcag: '3.3.2',
1339
1415
  weight: 1,
1340
1416
  tools: {
1417
+ aslint: {
1418
+ 'incorrect-label-placement': {
1419
+ variable: false,
1420
+ quality: 1,
1421
+ what: 'label element precedes the labeled radio button or checkbox'
1422
+ }
1423
+ },
1341
1424
  ibm: {
1342
1425
  WCAG20_Input_LabelBefore: {
1343
1426
  variable: false,
@@ -1374,6 +1457,23 @@ exports.issues = {
1374
1457
  wcag: '1.3.1',
1375
1458
  weight: 4,
1376
1459
  tools: {
1460
+ aslint: {
1461
+ 'label-inappropriate-associationM': {
1462
+ variable: false,
1463
+ quality: 1,
1464
+ what: 'Element referenced by the for attribute is missing'
1465
+ },
1466
+ 'aria-labelledby-associationN': {
1467
+ variable: false,
1468
+ quality: 1,
1469
+ what: 'Element referenced by the aria-labelledby attribute is missing'
1470
+ },
1471
+ 'aria-labelledby-associationE': {
1472
+ variable: false,
1473
+ quality: 1,
1474
+ what: 'aria-labelledby attribute refers to no element'
1475
+ }
1476
+ },
1377
1477
  htmlcs: {
1378
1478
  'AAA.1_3_1.H44.NonExistentFragment': {
1379
1479
  variable: false,
@@ -1461,6 +1561,20 @@ exports.issues = {
1461
1561
  }
1462
1562
  }
1463
1563
  },
1564
+ clickOnly: {
1565
+ why: 'User may misunderstand how to activate a link',
1566
+ wcag: '2.4.4',
1567
+ weight: 1,
1568
+ tools: {
1569
+ aslint: {
1570
+ 'click-verb': {
1571
+ variable: false,
1572
+ quality: 1,
1573
+ what: 'Mouse-specific word click is in the element text'
1574
+ }
1575
+ }
1576
+ }
1577
+ },
1464
1578
  linkNoText: {
1465
1579
  why: 'User cannot get help understanding what a link points to',
1466
1580
  wcag: '2.4.4',
@@ -1478,6 +1592,11 @@ exports.issues = {
1478
1592
  variable: false,
1479
1593
  quality: 1,
1480
1594
  what: 'Element is an image in a link but has no text alternative'
1595
+ },
1596
+ 'empty-link-element': {
1597
+ variable: false,
1598
+ quality: 1,
1599
+ what: 'Element has no visible and accessible name'
1481
1600
  }
1482
1601
  },
1483
1602
  axe: {
@@ -1592,6 +1711,13 @@ exports.issues = {
1592
1711
  wcag: '3.1.4',
1593
1712
  weight: 4,
1594
1713
  tools: {
1714
+ aslint: {
1715
+ 'title-for-abbr': {
1716
+ variable: false,
1717
+ quality: 1,
1718
+ what: 'Element as an abbr but its defining title attribute is missing or empty'
1719
+ }
1720
+ },
1595
1721
  qualWeb: {
1596
1722
  'QW-WCAG-T7': {
1597
1723
  variable: false,
@@ -1702,6 +1828,13 @@ exports.issues = {
1702
1828
  wcag: '2.4.4',
1703
1829
  weight: 2,
1704
1830
  tools: {
1831
+ aslint: {
1832
+ 'links-same-content-different-url': {
1833
+ variable: false,
1834
+ quality: 1,
1835
+ what: 'Links with the same text content have different destination URLs'
1836
+ }
1837
+ },
1705
1838
  qualWeb: {
1706
1839
  'QW-ACT-R9': {
1707
1840
  variable: false,
@@ -1817,6 +1950,13 @@ exports.issues = {
1817
1950
  wcag: '3.2.5',
1818
1951
  weight: 1,
1819
1952
  tools: {
1953
+ aslint: {
1954
+ linkExt: {
1955
+ variable: false,
1956
+ quality: 1,
1957
+ what: 'Indicator that the link opens a new window or tab may be missing'
1958
+ }
1959
+ },
1820
1960
  htmlcs: {
1821
1961
  'WCAG2AAA.Principle3.Guideline3_2.3_2_5.H83.3': {
1822
1962
  variable: false,
@@ -1852,6 +1992,20 @@ exports.issues = {
1852
1992
  }
1853
1993
  }
1854
1994
  },
1995
+ preselectedOption: {
1996
+ why: 'User may risk erroneously submitting a form',
1997
+ wcag: '4.1.2',
1998
+ weight: 1,
1999
+ tools: {
2000
+ aslint: {
2001
+ 'select-initial-option': {
2002
+ variable: false,
2003
+ quality: 1,
2004
+ what: 'No option has been made the default with a selected attribute'
2005
+ }
2006
+ }
2007
+ }
2008
+ },
1855
2009
  buttonAlt: {
1856
2010
  why: 'User cannot get help explaing a button',
1857
2011
  wcag: '4.1.2',
@@ -1878,6 +2032,13 @@ exports.issues = {
1878
2032
  what: 'Button has no accessible name'
1879
2033
  }
1880
2034
  },
2035
+ aslint: {
2036
+ 'empty-button-description': {
2037
+ variable: false,
2038
+ quality: 1,
2039
+ what: 'Button has no visible accessible name'
2040
+ }
2041
+ },
1881
2042
  axe: {
1882
2043
  'aria-command-name': {
1883
2044
  variable: false,
@@ -2109,6 +2270,13 @@ exports.issues = {
2109
2270
  wcag: '1.3.4',
2110
2271
  weight: 4,
2111
2272
  tools: {
2273
+ aslint: {
2274
+ 'orientation': {
2275
+ variable: false,
2276
+ quality: 1,
2277
+ what: 'CSS media query specifies an orientation'
2278
+ }
2279
+ },
2112
2280
  axe: {
2113
2281
  'css-orientation-lock': {
2114
2282
  variable: false,
@@ -2125,6 +2293,20 @@ exports.issues = {
2125
2293
  }
2126
2294
  }
2127
2295
  },
2296
+ orientationRisk: {
2297
+ why: 'User may need to read sideways after rotating a device',
2298
+ wcag: '1.3.4',
2299
+ weight: 1,
2300
+ tools: {
2301
+ aslint: {
2302
+ 'orientationT': {
2303
+ variable: false,
2304
+ quality: 1,
2305
+ what: 'Failure to read a stylesheet prevents testing for orientation violations'
2306
+ }
2307
+ }
2308
+ }
2309
+ },
2128
2310
  metaBansZoom: {
2129
2311
  why: 'User cannot adjust the document size for readability',
2130
2312
  wcag: '1.4.4',
@@ -2134,7 +2316,14 @@ exports.issues = {
2134
2316
  r47: {
2135
2317
  variable: false,
2136
2318
  quality: 1,
2137
- what: 'meta element restricts zooming'
2319
+ what: 'Element restricts zooming'
2320
+ }
2321
+ },
2322
+ aslint: {
2323
+ 'zoom-disabled': {
2324
+ variable: false,
2325
+ quality: 1,
2326
+ what: 'Element specifies a minimum or maximum scale or prohibits zooming'
2138
2327
  }
2139
2328
  },
2140
2329
  axe: {
@@ -2165,6 +2354,20 @@ exports.issues = {
2165
2354
  }
2166
2355
  }
2167
2356
  },
2357
+ deviceRisk: {
2358
+ why: 'User may be unable to produce required device movement',
2359
+ wcag: '2.5.4',
2360
+ weight: 1,
2361
+ tools: {
2362
+ aslint: {
2363
+ 'motion-actuation': {
2364
+ variable: false,
2365
+ quality: 1,
2366
+ what: 'Document listens for device motion or rotation'
2367
+ }
2368
+ }
2369
+ }
2370
+ },
2168
2371
  fontSizeAbsolute: {
2169
2372
  why: 'User cannot adjust the document size for readability',
2170
2373
  wcag: '1.4.4',
@@ -2490,6 +2693,13 @@ exports.issues = {
2490
2693
  what: 'iframe has no accessible name'
2491
2694
  }
2492
2695
  },
2696
+ aslint: {
2697
+ 'title-iframe': {
2698
+ variable: false,
2699
+ quality: 1,
2700
+ what: 'Element is an iframe or object but its title attribute is missing or empty'
2701
+ }
2702
+ },
2493
2703
  axe: {
2494
2704
  'frame-title': {
2495
2705
  variable: false,
@@ -3142,7 +3352,14 @@ exports.issues = {
3142
3352
  r10: {
3143
3353
  variable: false,
3144
3354
  quality: 1,
3145
- what: 'Autocomplete attribute has no valid value'
3355
+ what: 'autocomplete attribute has no valid value'
3356
+ }
3357
+ },
3358
+ aslint: {
3359
+ 'identify-input-purpose': {
3360
+ variable: false,
3361
+ quality: 1,
3362
+ what: 'autocomplete attribute has an invalid value'
3146
3363
  }
3147
3364
  },
3148
3365
  axe: {
@@ -3260,6 +3477,23 @@ exports.issues = {
3260
3477
  what: 'Text outside widget has subminimum contrast'
3261
3478
  }
3262
3479
  },
3480
+ aslint: {
3481
+ 'color-contrast-aa': {
3482
+ variable: false,
3483
+ quality: 1,
3484
+ what: 'Text has contrast less than 4.5:1'
3485
+ },
3486
+ 'color-contrast-state-pseudo-classes-abstract3': {
3487
+ variable: false,
3488
+ quality: 1,
3489
+ what: 'Text has contrast less than 3:1'
3490
+ },
3491
+ 'color-contrast-state-pseudo-classes-abstract4': {
3492
+ variable: false,
3493
+ quality: 1,
3494
+ what: 'Text has contrast less than 4.5:1'
3495
+ }
3496
+ },
3263
3497
  axe: {
3264
3498
  'color-contrast': {
3265
3499
  variable: false,
@@ -3326,6 +3560,20 @@ exports.issues = {
3326
3560
  }
3327
3561
  }
3328
3562
  },
3563
+ colorNamedRisk: {
3564
+ why: 'Content is impossible to perceive under some conditions',
3565
+ wcag: '1.4.1',
3566
+ weight: 1,
3567
+ tools: {
3568
+ qualWeb: {
3569
+ 'text-color-convey-information': {
3570
+ variable: false,
3571
+ quality: 1,
3572
+ what: 'Text naming a color may require the ability to distinguish colors'
3573
+ }
3574
+ }
3575
+ }
3576
+ },
3329
3577
  contrastAAA: {
3330
3578
  why: 'Text is difficult to read',
3331
3579
  wcag: '1.4.6',
@@ -3338,6 +3586,18 @@ exports.issues = {
3338
3586
  what: 'Text contrast less than AAA requires'
3339
3587
  }
3340
3588
  },
3589
+ aslint: {
3590
+ 'color-contrast-aaa4': {
3591
+ variable: false,
3592
+ quality: 1,
3593
+ what: 'Text has contrast less than 4.5:1'
3594
+ },
3595
+ 'color-contrast-aaa7': {
3596
+ variable: false,
3597
+ quality: 1,
3598
+ what: 'Text has contrast less than 7:1'
3599
+ }
3600
+ },
3341
3601
  axe: {
3342
3602
  'color-contrast-enhanced': {
3343
3603
  variable: false,
@@ -3371,6 +3631,23 @@ exports.issues = {
3371
3631
  wcag: '1.4.3',
3372
3632
  weight: 1,
3373
3633
  tools: {
3634
+ aslint: {
3635
+ 'color-contrast-state-pseudo-classes-abstractF': {
3636
+ variable: false,
3637
+ quality: 1,
3638
+ what: 'Fixed position of the element prevents contrast measurement'
3639
+ },
3640
+ 'color-contrast-state-pseudo-classes-abstractB': {
3641
+ variable: false,
3642
+ quality: 1,
3643
+ what: 'Transparent background color of the element prevents contrast measurement'
3644
+ },
3645
+ 'color-contrast-aaaB': {
3646
+ variable: false,
3647
+ quality: 1,
3648
+ what: 'Transparent background color of the element prevents contrast measurement'
3649
+ }
3650
+ },
3374
3651
  htmlcs: {
3375
3652
  'AAA.1_4_3_F24.F24.BGColour': {
3376
3653
  variable: false,
@@ -3480,6 +3757,13 @@ exports.issues = {
3480
3757
  what: 'Heading has no non-empty accessible name'
3481
3758
  }
3482
3759
  },
3760
+ aslint: {
3761
+ 'empty-heading': {
3762
+ variable: false,
3763
+ quality: 1,
3764
+ what: 'Element is a heading but is empty'
3765
+ }
3766
+ },
3483
3767
  axe: {
3484
3768
  'empty-heading': {
3485
3769
  variable: false,
@@ -3726,6 +4010,27 @@ exports.issues = {
3726
4010
  }
3727
4011
  }
3728
4012
  },
4013
+ pageTitleBad: {
4014
+ why: 'Browser processes the document improperly',
4015
+ wcag: '1.3.1',
4016
+ weight: 4,
4017
+ tools: {
4018
+ aslint: {
4019
+ 'page-titleU': {
4020
+ variable: false,
4021
+ quality: 1,
4022
+ what: 'Page title does not identify the contents or purpose of the page'
4023
+ }
4024
+ },
4025
+ wave: {
4026
+ title_invalid: {
4027
+ variable: false,
4028
+ quality: 1,
4029
+ what: 'Missing or uninformative page title'
4030
+ }
4031
+ }
4032
+ }
4033
+ },
3729
4034
  pageTitle: {
3730
4035
  why: 'User is not informed of the topic of the document',
3731
4036
  wcag: '2.4.2',
@@ -3738,6 +4043,13 @@ exports.issues = {
3738
4043
  what: 'Document has no valid title element'
3739
4044
  }
3740
4045
  },
4046
+ aslint: {
4047
+ 'page-titleN': {
4048
+ variable: false,
4049
+ quality: 1,
4050
+ what: 'Page title is missing or empty'
4051
+ }
4052
+ },
3741
4053
  axe: {
3742
4054
  'document-title': {
3743
4055
  variable: false,
@@ -3777,13 +4089,6 @@ exports.issues = {
3777
4089
  quality: 1,
3778
4090
  what: 'HTML page has no title'
3779
4091
  }
3780
- },
3781
- wave: {
3782
- title_invalid: {
3783
- variable: false,
3784
- quality: 1,
3785
- what: 'Missing or uninformative page title'
3786
- }
3787
4092
  }
3788
4093
  }
3789
4094
  },
@@ -3878,7 +4183,7 @@ exports.issues = {
3878
4183
  }
3879
4184
  }
3880
4185
  },
3881
- noHeading: {
4186
+ headingNone: {
3882
4187
  why: 'User cannot survey parts of the document',
3883
4188
  wcag: '1.3.1',
3884
4189
  weight: 3,
@@ -3890,6 +4195,13 @@ exports.issues = {
3890
4195
  what: 'Document has no headings'
3891
4196
  }
3892
4197
  },
4198
+ aslint: {
4199
+ 'no-headings': {
4200
+ variable: false,
4201
+ quality: 1,
4202
+ what: 'Document has no headings'
4203
+ }
4204
+ },
3893
4205
  qualWeb: {
3894
4206
  'QW-BP1': {
3895
4207
  variable: false,
@@ -4449,6 +4761,13 @@ exports.issues = {
4449
4761
  wcag: '1.3.1',
4450
4762
  weight: 1,
4451
4763
  tools: {
4764
+ aslint: {
4765
+ 'group-elements-name-attribute': {
4766
+ variable: false,
4767
+ quality: 1,
4768
+ what: 'Element is an input with a name attribute but has no fieldset parent'
4769
+ }
4770
+ },
4452
4771
  htmlcs: {
4453
4772
  'AAA.1_3_1.H71.SameName': {
4454
4773
  variable: false,
@@ -4477,11 +4796,23 @@ exports.issues = {
4477
4796
  wcag: '4.1.2',
4478
4797
  weight: 2,
4479
4798
  tools: {
4799
+ aslint: {
4800
+ 'fieldset-no-legend': {
4801
+ variable: false,
4802
+ quality: 1,
4803
+ what: 'First child element of the element is not a legend'
4804
+ },
4805
+ 'legend-first-child-of-fieldset': {
4806
+ variable: false,
4807
+ quality: 1,
4808
+ what: 'First child element of the element is not a legend'
4809
+ }
4810
+ },
4480
4811
  htmlcs: {
4481
4812
  'AAA.1_3_1.H71.NoLegend': {
4482
4813
  variable: false,
4483
4814
  quality: 1,
4484
- what: 'fieldset has no legend element'
4815
+ what: 'Element has no legend element'
4485
4816
  }
4486
4817
  },
4487
4818
  ibm: {
@@ -4493,7 +4824,7 @@ exports.issues = {
4493
4824
  fieldset_legend_valid: {
4494
4825
  variable: false,
4495
4826
  quality: 1,
4496
- what: 'fieldset element does not have a legend element'
4827
+ what: 'Element does not have a legend element'
4497
4828
  }
4498
4829
  },
4499
4830
  qualWeb: {
@@ -4507,7 +4838,7 @@ exports.issues = {
4507
4838
  legend_missing: {
4508
4839
  variable: false,
4509
4840
  quality: 1,
4510
- what: 'fieldset has no legend element'
4841
+ what: 'Element has no legend element'
4511
4842
  }
4512
4843
  }
4513
4844
  }
@@ -4802,6 +5133,13 @@ exports.issues = {
4802
5133
  wcag: '1.3.1',
4803
5134
  weight: 3,
4804
5135
  tools: {
5136
+ aslint: {
5137
+ 'table-row-and-column-headersRC': {
5138
+ variable: false,
5139
+ quality: 1,
5140
+ what: 'None of the cells in the table is a header'
5141
+ }
5142
+ },
4805
5143
  ibm: {
4806
5144
  RPT_Table_DataHeadingsAria: {
4807
5145
  variable: false,
@@ -4883,7 +5221,35 @@ exports.issues = {
4883
5221
  th_empty: {
4884
5222
  variable: false,
4885
5223
  quality: 1,
4886
- what: 'th (table header) contains no text'
5224
+ what: 'Element contains no text'
5225
+ }
5226
+ }
5227
+ }
5228
+ },
5229
+ tableHead: {
5230
+ why: 'User cannot get help on parts of a table',
5231
+ wcag: '1.3.1',
5232
+ weight: 1,
5233
+ tools: {
5234
+ aslint: {
5235
+ 'table-row-and-column-headersH': {
5236
+ variable: false,
5237
+ quality: 1,
5238
+ what: 'Element does not contain a thead element'
5239
+ }
5240
+ }
5241
+ }
5242
+ },
5243
+ tableBody: {
5244
+ why: 'User cannot get help on parts of a table',
5245
+ wcag: '1.3.1',
5246
+ weight: 1,
5247
+ tools: {
5248
+ aslint: {
5249
+ 'table-row-and-column-headersB': {
5250
+ variable: false,
5251
+ quality: 1,
5252
+ what: 'Element does not contain a tbody element'
4887
5253
  }
4888
5254
  }
4889
5255
  }
@@ -4961,11 +5327,18 @@ exports.issues = {
4961
5327
  wcag: '2.4.6',
4962
5328
  weight: 4,
4963
5329
  tools: {
5330
+ aslint: {
5331
+ 'label-visually-hidden-only': {
5332
+ variable: false,
5333
+ quality: 1,
5334
+ what: 'Form control has a label but it is not visible'
5335
+ }
5336
+ },
4964
5337
  axe: {
4965
5338
  'label-title-only': {
4966
5339
  variable: false,
4967
5340
  quality: 1,
4968
- what: 'Form element has no visible label'
5341
+ what: 'Form control has no visible label'
4969
5342
  }
4970
5343
  }
4971
5344
  }
@@ -5981,16 +6354,23 @@ exports.issues = {
5981
6354
  wcag: '1.3.1',
5982
6355
  weight: 4,
5983
6356
  tools: {
6357
+ aslint: {
6358
+ 'label-implicitly-associatedM': {
6359
+ variable: false,
6360
+ quality: 1,
6361
+ what: 'Element contains more than 1 labelable element.'
6362
+ }
6363
+ },
5984
6364
  nuVal: {
5985
6365
  'The label element may contain at most one button, input, meter, output, progress, select, or textarea descendant.': {
5986
6366
  variable: false,
5987
6367
  quality: 1,
5988
- what: 'label element has more than 1 labelable descendant.'
6368
+ what: 'Element has more than 1 labelable descendant.'
5989
6369
  },
5990
6370
  'label element with multiple labelable descendants.': {
5991
6371
  variable: false,
5992
6372
  quality: 1,
5993
- what: 'label element has multiple labelable descendants.'
6373
+ what: 'Element has multiple labelable descendants.'
5994
6374
  }
5995
6375
  }
5996
6376
  }
@@ -6131,18 +6511,37 @@ exports.issues = {
6131
6511
  wcag: '1.3.1',
6132
6512
  weight: 2,
6133
6513
  tools: {
6134
- axe: {
6135
- 'form-field-multiple-labels': {
6514
+ testaro: {
6515
+ labClash: {
6136
6516
  variable: false,
6137
6517
  quality: 1,
6138
- what: 'Form field has multiple label elements'
6518
+ what: 'Incompatible label types'
6519
+ }
6520
+ }
6521
+ }
6522
+ },
6523
+ labelNot1: {
6524
+ why: 'User cannot get reliable help on the topics of form items',
6525
+ wcag: '1.3.1',
6526
+ weight: 1,
6527
+ tools: {
6528
+ aslint: {
6529
+ 'duplicated-for-attribute': {
6530
+ variable: false,
6531
+ quality: 1,
6532
+ what: 'More than 1 label element has the same for attribute'
6533
+ },
6534
+ 'missing-labelM': {
6535
+ variable: false,
6536
+ quality: 1,
6537
+ what: 'More than 1 label element refers to the element'
6139
6538
  }
6140
6539
  },
6141
- testaro: {
6142
- labClash: {
6540
+ axe: {
6541
+ 'form-field-multiple-labels': {
6143
6542
  variable: false,
6144
6543
  quality: 1,
6145
- what: 'Incompatible label types'
6544
+ what: 'Form field has multiple label elements'
6146
6545
  }
6147
6546
  },
6148
6547
  ibm: {
@@ -6171,6 +6570,23 @@ exports.issues = {
6171
6570
  wcag: '1.3.1',
6172
6571
  weight: 3,
6173
6572
  tools: {
6573
+ aslint: {
6574
+ 'empty-label-element': {
6575
+ variable: false,
6576
+ quality: 1,
6577
+ what: 'Element has no content'
6578
+ },
6579
+ 'label-implicitly-associatedW': {
6580
+ variable: false,
6581
+ quality: 1,
6582
+ what: 'Element has no labeling content except whitespace'
6583
+ },
6584
+ 'aria-labelledby-association-empty-element': {
6585
+ variable: false,
6586
+ quality: 1,
6587
+ what: 'Referenced label has no content'
6588
+ }
6589
+ },
6174
6590
  htmlcs: {
6175
6591
  'AAA.1_3_1.ARIA6': {
6176
6592
  variable: false,
@@ -6192,11 +6608,37 @@ exports.issues = {
6192
6608
  }
6193
6609
  }
6194
6610
  },
6611
+ labelRisk: {
6612
+ why: 'User may misunderstand a form control',
6613
+ wcag: '3.3.2',
6614
+ weight: 1,
6615
+ tools: {
6616
+ aslint: {
6617
+ 'missing-labelI': {
6618
+ variable: false,
6619
+ quality: 1,
6620
+ what: 'Element has no id attribute for an explicit label to reference'
6621
+ },
6622
+ 'missing-labelN': {
6623
+ variable: false,
6624
+ quality: 1,
6625
+ what: 'Element has an id attribute but no explicit label references it'
6626
+ }
6627
+ }
6628
+ }
6629
+ },
6195
6630
  linkComprehensionRisk: {
6196
6631
  why: 'User may misunderstand what a link points to',
6197
6632
  wcag: '2.4.4',
6198
6633
  weight: 1,
6199
6634
  tools: {
6635
+ aslint: {
6636
+ 'link-with-unclear-purpose': {
6637
+ variable: false,
6638
+ quality: 1,
6639
+ what: 'Element is a link but has vague or generic content'
6640
+ }
6641
+ },
6200
6642
  wave: {
6201
6643
  link_suspicious: {
6202
6644
  variable: false,
@@ -6249,11 +6691,18 @@ exports.issues = {
6249
6691
  what: 'Inline link is not distinct from the surrounding text except by color'
6250
6692
  }
6251
6693
  },
6694
+ aslint: {
6695
+ 'links-not-visually-evident-without-color-vision': {
6696
+ variable: false,
6697
+ quality: 1,
6698
+ what: 'Element is a link, but its style properties do not differentiate it from its parent'
6699
+ }
6700
+ },
6252
6701
  axe: {
6253
6702
  'link-in-text-block': {
6254
6703
  variable: false,
6255
6704
  quality: 1,
6256
- what: 'Link is not distinct from surrounding text without reliance on color'
6705
+ what: 'Element is not distinct from surrounding text without reliance on color'
6257
6706
  }
6258
6707
  },
6259
6708
  testaro: {
@@ -6318,6 +6767,32 @@ exports.issues = {
6318
6767
  quality: 1,
6319
6768
  what: 'Change of visible content not requested by user'
6320
6769
  }
6770
+ },
6771
+ aslint: {
6772
+ animationM: {
6773
+ variable: false,
6774
+ quality: 1,
6775
+ what: 'Animation may fail to give user a pause, stop, or hide mechanism'
6776
+ }
6777
+ }
6778
+ }
6779
+ },
6780
+ animationLong: {
6781
+ why: 'Motion-sensitive user may suffer harm',
6782
+ wcag: '2.2.2',
6783
+ weight: 3,
6784
+ tools: {
6785
+ aslint: {
6786
+ animationD: {
6787
+ variable: false,
6788
+ quality: 1,
6789
+ what: 'Animation lasts more than 5 seconds'
6790
+ },
6791
+ animationI: {
6792
+ variable: false,
6793
+ quality: 1,
6794
+ what: 'Animation is repetitive'
6795
+ }
6321
6796
  }
6322
6797
  }
6323
6798
  },
@@ -6326,11 +6801,18 @@ exports.issues = {
6326
6801
  wcag: '2.2.2',
6327
6802
  weight: 4,
6328
6803
  tools: {
6804
+ aslint: {
6805
+ 'blink-element': {
6806
+ variable: false,
6807
+ quality: 1,
6808
+ what: 'Element is blink'
6809
+ }
6810
+ },
6329
6811
  qualWeb: {
6330
6812
  'QW-WCAG-T13': {
6331
6813
  variable: false,
6332
6814
  quality: 1,
6333
- what: 'blink element used'
6815
+ what: 'Element is blink'
6334
6816
  },
6335
6817
  'QW-WCAG-T30': {
6336
6818
  variable: false,
@@ -6345,18 +6827,25 @@ exports.issues = {
6345
6827
  wcag: '1.4.2',
6346
6828
  weight: 2,
6347
6829
  tools: {
6830
+ aslint: {
6831
+ 'autoplay-audio-video': {
6832
+ variable: false,
6833
+ quality: 1,
6834
+ what: 'Element plays automatically'
6835
+ }
6836
+ },
6348
6837
  axe: {
6349
6838
  'no-autoplay-audio': {
6350
6839
  variable: false,
6351
6840
  quality: 1,
6352
- what: 'video or audio element plays automatically'
6841
+ what: 'Element plays automatically'
6353
6842
  }
6354
6843
  },
6355
6844
  qualWeb: {
6356
6845
  'QW-ACT-R15': {
6357
6846
  variable: false,
6358
6847
  quality: 1,
6359
- what: 'audio or video has audio that plays automatically'
6848
+ what: 'Element has audio that plays automatically'
6360
6849
  }
6361
6850
  }
6362
6851
  }
@@ -6370,7 +6859,7 @@ exports.issues = {
6370
6859
  'QW-ACT-R49': {
6371
6860
  variable: false,
6372
6861
  quality: 1,
6373
- what: 'audio or video that plays automatically has audio lasting more than 3 seconds'
6862
+ what: 'Element that plays automatically has audio lasting more than 3 seconds'
6374
6863
  }
6375
6864
  }
6376
6865
  }
@@ -6390,20 +6879,27 @@ exports.issues = {
6390
6879
  }
6391
6880
  },
6392
6881
  refresh: {
6393
- why: 'Delayed document change may surprise a user',
6882
+ why: 'Document change may surprise a user',
6394
6883
  wcag: '2.2.1',
6395
6884
  weight: 3,
6396
6885
  tools: {
6886
+ aslint: {
6887
+ 'no-meta-http-equiv-refresh': {
6888
+ variable: false,
6889
+ quality: 1,
6890
+ what: 'Element forces a page reload'
6891
+ }
6892
+ },
6397
6893
  qualWeb: {
6398
6894
  'QW-ACT-R4': {
6399
6895
  variable: false,
6400
6896
  quality: 1,
6401
- what: 'meta element refreshes or redirects with delay'
6897
+ what: 'Element refreshes or redirects with delay'
6402
6898
  },
6403
6899
  'QW-ACT-R71': {
6404
6900
  variable: false,
6405
6901
  quality: 1,
6406
- what: 'meta element has a refresh delay (no exception)'
6902
+ what: 'Element has a refresh delay (no exception)'
6407
6903
  }
6408
6904
  }
6409
6905
  }
@@ -6476,6 +6972,13 @@ exports.issues = {
6476
6972
  wcag: '2.4.3',
6477
6973
  weight: 1,
6478
6974
  tools: {
6975
+ aslint: {
6976
+ 'positive-tabindex': {
6977
+ variable: false,
6978
+ quality: 1,
6979
+ what: 'Element has a positive tabIndex value'
6980
+ }
6981
+ },
6479
6982
  axe: {
6480
6983
  tabindex: {
6481
6984
  variable: false,
@@ -6520,6 +7023,20 @@ exports.issues = {
6520
7023
  }
6521
7024
  }
6522
7025
  },
7026
+ tabIndexExtra: {
7027
+ why: 'Revision risks interfering with navigation by a no-mouse user',
7028
+ wcag: '1.3.1',
7029
+ weight: 1,
7030
+ tools: {
7031
+ aslint: {
7032
+ 'misused-tabindex-attribute': {
7033
+ variable: true,
7034
+ quality: 1,
7035
+ what: 'Element has an implicit tabIndex value 0, but also has a tabindex attribute'
7036
+ }
7037
+ }
7038
+ }
7039
+ },
6523
7040
  avNoText: {
6524
7041
  why: 'User cannot get help reading speech as text',
6525
7042
  wcag: '1.2.1',
@@ -6750,18 +7267,32 @@ exports.issues = {
6750
7267
  }
6751
7268
  }
6752
7269
  },
6753
- scrollRisk: {
6754
- why: 'User may be unable to see all of an item without scrolling in both dimensions',
7270
+ positionSticky: {
7271
+ why: 'User may be unable to see needed content or may be forced to scroll in both dimensions',
6755
7272
  wcag: '1.4.10',
6756
7273
  weight: 1,
6757
7274
  tools: {
7275
+ aslint: {
7276
+ 'position-sticky': {
7277
+ variable: false,
7278
+ quality: 1,
7279
+ what: 'Element has a sticky position'
7280
+ }
7281
+ },
6758
7282
  htmlcs: {
6759
7283
  'AAA.1_4_10.C32,C31,C33,C38,SCR34,G206': {
6760
7284
  variable: false,
6761
7285
  quality: 1,
6762
7286
  what: 'Fixed-position element may force bidirectional scrolling'
6763
7287
  }
6764
- },
7288
+ }
7289
+ }
7290
+ },
7291
+ scrollRisk: {
7292
+ why: 'User may be unable to see all of an item without scrolling in both dimensions',
7293
+ wcag: '1.4.10',
7294
+ weight: 1,
7295
+ tools: {
6765
7296
  qualWeb: {
6766
7297
  'QW-BP18': {
6767
7298
  variable: false,
@@ -6864,9 +7395,16 @@ exports.issues = {
6864
7395
  },
6865
7396
  submitButton: {
6866
7397
  why: 'User cannot easily submit a form',
6867
- wcag: '2.5.6',
7398
+ wcag: '3.2.2',
6868
7399
  weight: 3,
6869
7400
  tools: {
7401
+ aslint: {
7402
+ 'missing-submit-button': {
7403
+ variable: false,
7404
+ quality: 1,
7405
+ what: 'Element is a form but contains no input or button element for submission'
7406
+ }
7407
+ },
6870
7408
  htmlcs: {
6871
7409
  'AAA.3_2_2.H32.2': {
6872
7410
  variable: false,
@@ -7551,7 +8089,7 @@ exports.issues = {
7551
8089
  quality: 1,
7552
8090
  what: 'longdesc attribute has a value that is not a URL (and is obsolete)'
7553
8091
  }
7554
- },
8092
+ }
7555
8093
  }
7556
8094
  },
7557
8095
  slashParseRisk: {