testilo 17.0.11 → 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.
- package/package.json +1 -1
- package/procs/score/tic36.js +257 -9
package/package.json
CHANGED
package/procs/score/tic36.js
CHANGED
|
@@ -30,10 +30,15 @@ exports.issues = {
|
|
|
30
30
|
quality: 0,
|
|
31
31
|
what: 'The content sequence may fail to be meaningful'
|
|
32
32
|
},
|
|
33
|
-
|
|
33
|
+
flickering: {
|
|
34
34
|
variable: false,
|
|
35
35
|
quality: 0,
|
|
36
36
|
what: 'Excessive flashing may exist'
|
|
37
|
+
},
|
|
38
|
+
reflow: {
|
|
39
|
+
variable: false,
|
|
40
|
+
quality: 0,
|
|
41
|
+
what: 'Page may require horizontal scrolling'
|
|
37
42
|
}
|
|
38
43
|
},
|
|
39
44
|
nuVal: {
|
|
@@ -93,7 +98,7 @@ exports.issues = {
|
|
|
93
98
|
}
|
|
94
99
|
}
|
|
95
100
|
},
|
|
96
|
-
|
|
101
|
+
IDUnique: {
|
|
97
102
|
why: 'User may be pointed to the wrong item',
|
|
98
103
|
wcag: '4.1.1',
|
|
99
104
|
weight: 4,
|
|
@@ -105,6 +110,13 @@ exports.issues = {
|
|
|
105
110
|
what: 'Element id attribute value is not unique'
|
|
106
111
|
}
|
|
107
112
|
},
|
|
113
|
+
aslint: {
|
|
114
|
+
'duplicated-id-attribute': {
|
|
115
|
+
variable: false,
|
|
116
|
+
quality: 1,
|
|
117
|
+
what: 'Element id attribute value is not unique'
|
|
118
|
+
}
|
|
119
|
+
},
|
|
108
120
|
axe: {
|
|
109
121
|
'duplicate-id': {
|
|
110
122
|
variable: false,
|
|
@@ -791,7 +803,19 @@ exports.issues = {
|
|
|
791
803
|
r4: {
|
|
792
804
|
variable: false,
|
|
793
805
|
quality: 1,
|
|
794
|
-
what: '
|
|
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'
|
|
795
819
|
}
|
|
796
820
|
},
|
|
797
821
|
axe: {
|
|
@@ -860,6 +884,13 @@ exports.issues = {
|
|
|
860
884
|
what: 'lang attribute has no valid primary language tag'
|
|
861
885
|
}
|
|
862
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
|
+
},
|
|
863
894
|
axe: {
|
|
864
895
|
'html-lang-valid': {
|
|
865
896
|
variable: false,
|
|
@@ -1431,6 +1462,16 @@ exports.issues = {
|
|
|
1431
1462
|
variable: false,
|
|
1432
1463
|
quality: 1,
|
|
1433
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'
|
|
1434
1475
|
}
|
|
1435
1476
|
},
|
|
1436
1477
|
htmlcs: {
|
|
@@ -1520,6 +1561,20 @@ exports.issues = {
|
|
|
1520
1561
|
}
|
|
1521
1562
|
}
|
|
1522
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
|
+
},
|
|
1523
1578
|
linkNoText: {
|
|
1524
1579
|
why: 'User cannot get help understanding what a link points to',
|
|
1525
1580
|
wcag: '2.4.4',
|
|
@@ -1537,6 +1592,11 @@ exports.issues = {
|
|
|
1537
1592
|
variable: false,
|
|
1538
1593
|
quality: 1,
|
|
1539
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'
|
|
1540
1600
|
}
|
|
1541
1601
|
},
|
|
1542
1602
|
axe: {
|
|
@@ -1651,6 +1711,13 @@ exports.issues = {
|
|
|
1651
1711
|
wcag: '3.1.4',
|
|
1652
1712
|
weight: 4,
|
|
1653
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
|
+
},
|
|
1654
1721
|
qualWeb: {
|
|
1655
1722
|
'QW-WCAG-T7': {
|
|
1656
1723
|
variable: false,
|
|
@@ -1761,6 +1828,13 @@ exports.issues = {
|
|
|
1761
1828
|
wcag: '2.4.4',
|
|
1762
1829
|
weight: 2,
|
|
1763
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
|
+
},
|
|
1764
1838
|
qualWeb: {
|
|
1765
1839
|
'QW-ACT-R9': {
|
|
1766
1840
|
variable: false,
|
|
@@ -1876,6 +1950,13 @@ exports.issues = {
|
|
|
1876
1950
|
wcag: '3.2.5',
|
|
1877
1951
|
weight: 1,
|
|
1878
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
|
+
},
|
|
1879
1960
|
htmlcs: {
|
|
1880
1961
|
'WCAG2AAA.Principle3.Guideline3_2.3_2_5.H83.3': {
|
|
1881
1962
|
variable: false,
|
|
@@ -1911,6 +1992,20 @@ exports.issues = {
|
|
|
1911
1992
|
}
|
|
1912
1993
|
}
|
|
1913
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
|
+
},
|
|
1914
2009
|
buttonAlt: {
|
|
1915
2010
|
why: 'User cannot get help explaing a button',
|
|
1916
2011
|
wcag: '4.1.2',
|
|
@@ -1937,6 +2032,13 @@ exports.issues = {
|
|
|
1937
2032
|
what: 'Button has no accessible name'
|
|
1938
2033
|
}
|
|
1939
2034
|
},
|
|
2035
|
+
aslint: {
|
|
2036
|
+
'empty-button-description': {
|
|
2037
|
+
variable: false,
|
|
2038
|
+
quality: 1,
|
|
2039
|
+
what: 'Button has no visible accessible name'
|
|
2040
|
+
}
|
|
2041
|
+
},
|
|
1940
2042
|
axe: {
|
|
1941
2043
|
'aria-command-name': {
|
|
1942
2044
|
variable: false,
|
|
@@ -2168,6 +2270,13 @@ exports.issues = {
|
|
|
2168
2270
|
wcag: '1.3.4',
|
|
2169
2271
|
weight: 4,
|
|
2170
2272
|
tools: {
|
|
2273
|
+
aslint: {
|
|
2274
|
+
'orientation': {
|
|
2275
|
+
variable: false,
|
|
2276
|
+
quality: 1,
|
|
2277
|
+
what: 'CSS media query specifies an orientation'
|
|
2278
|
+
}
|
|
2279
|
+
},
|
|
2171
2280
|
axe: {
|
|
2172
2281
|
'css-orientation-lock': {
|
|
2173
2282
|
variable: false,
|
|
@@ -2184,6 +2293,20 @@ exports.issues = {
|
|
|
2184
2293
|
}
|
|
2185
2294
|
}
|
|
2186
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
|
+
},
|
|
2187
2310
|
metaBansZoom: {
|
|
2188
2311
|
why: 'User cannot adjust the document size for readability',
|
|
2189
2312
|
wcag: '1.4.4',
|
|
@@ -2231,6 +2354,20 @@ exports.issues = {
|
|
|
2231
2354
|
}
|
|
2232
2355
|
}
|
|
2233
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
|
+
},
|
|
2234
2371
|
fontSizeAbsolute: {
|
|
2235
2372
|
why: 'User cannot adjust the document size for readability',
|
|
2236
2373
|
wcag: '1.4.4',
|
|
@@ -2556,6 +2693,13 @@ exports.issues = {
|
|
|
2556
2693
|
what: 'iframe has no accessible name'
|
|
2557
2694
|
}
|
|
2558
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
|
+
},
|
|
2559
2703
|
axe: {
|
|
2560
2704
|
'frame-title': {
|
|
2561
2705
|
variable: false,
|
|
@@ -3208,7 +3352,14 @@ exports.issues = {
|
|
|
3208
3352
|
r10: {
|
|
3209
3353
|
variable: false,
|
|
3210
3354
|
quality: 1,
|
|
3211
|
-
what: '
|
|
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'
|
|
3212
3363
|
}
|
|
3213
3364
|
},
|
|
3214
3365
|
axe: {
|
|
@@ -3606,6 +3757,13 @@ exports.issues = {
|
|
|
3606
3757
|
what: 'Heading has no non-empty accessible name'
|
|
3607
3758
|
}
|
|
3608
3759
|
},
|
|
3760
|
+
aslint: {
|
|
3761
|
+
'empty-heading': {
|
|
3762
|
+
variable: false,
|
|
3763
|
+
quality: 1,
|
|
3764
|
+
what: 'Element is a heading but is empty'
|
|
3765
|
+
}
|
|
3766
|
+
},
|
|
3609
3767
|
axe: {
|
|
3610
3768
|
'empty-heading': {
|
|
3611
3769
|
variable: false,
|
|
@@ -4643,6 +4801,11 @@ exports.issues = {
|
|
|
4643
4801
|
variable: false,
|
|
4644
4802
|
quality: 1,
|
|
4645
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'
|
|
4646
4809
|
}
|
|
4647
4810
|
},
|
|
4648
4811
|
htmlcs: {
|
|
@@ -5164,11 +5327,18 @@ exports.issues = {
|
|
|
5164
5327
|
wcag: '2.4.6',
|
|
5165
5328
|
weight: 4,
|
|
5166
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
|
+
},
|
|
5167
5337
|
axe: {
|
|
5168
5338
|
'label-title-only': {
|
|
5169
5339
|
variable: false,
|
|
5170
5340
|
quality: 1,
|
|
5171
|
-
what: 'Form
|
|
5341
|
+
what: 'Form control has no visible label'
|
|
5172
5342
|
}
|
|
5173
5343
|
}
|
|
5174
5344
|
}
|
|
@@ -6360,6 +6530,11 @@ exports.issues = {
|
|
|
6360
6530
|
variable: false,
|
|
6361
6531
|
quality: 1,
|
|
6362
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'
|
|
6363
6538
|
}
|
|
6364
6539
|
},
|
|
6365
6540
|
axe: {
|
|
@@ -6405,6 +6580,11 @@ exports.issues = {
|
|
|
6405
6580
|
variable: false,
|
|
6406
6581
|
quality: 1,
|
|
6407
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'
|
|
6408
6588
|
}
|
|
6409
6589
|
},
|
|
6410
6590
|
htmlcs: {
|
|
@@ -6428,11 +6608,37 @@ exports.issues = {
|
|
|
6428
6608
|
}
|
|
6429
6609
|
}
|
|
6430
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
|
+
},
|
|
6431
6630
|
linkComprehensionRisk: {
|
|
6432
6631
|
why: 'User may misunderstand what a link points to',
|
|
6433
6632
|
wcag: '2.4.4',
|
|
6434
6633
|
weight: 1,
|
|
6435
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
|
+
},
|
|
6436
6642
|
wave: {
|
|
6437
6643
|
link_suspicious: {
|
|
6438
6644
|
variable: false,
|
|
@@ -6766,6 +6972,13 @@ exports.issues = {
|
|
|
6766
6972
|
wcag: '2.4.3',
|
|
6767
6973
|
weight: 1,
|
|
6768
6974
|
tools: {
|
|
6975
|
+
aslint: {
|
|
6976
|
+
'positive-tabindex': {
|
|
6977
|
+
variable: false,
|
|
6978
|
+
quality: 1,
|
|
6979
|
+
what: 'Element has a positive tabIndex value'
|
|
6980
|
+
}
|
|
6981
|
+
},
|
|
6769
6982
|
axe: {
|
|
6770
6983
|
tabindex: {
|
|
6771
6984
|
variable: false,
|
|
@@ -6810,6 +7023,20 @@ exports.issues = {
|
|
|
6810
7023
|
}
|
|
6811
7024
|
}
|
|
6812
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
|
+
},
|
|
6813
7040
|
avNoText: {
|
|
6814
7041
|
why: 'User cannot get help reading speech as text',
|
|
6815
7042
|
wcag: '1.2.1',
|
|
@@ -7040,18 +7267,32 @@ exports.issues = {
|
|
|
7040
7267
|
}
|
|
7041
7268
|
}
|
|
7042
7269
|
},
|
|
7043
|
-
|
|
7044
|
-
why: 'User may be unable to see
|
|
7270
|
+
positionSticky: {
|
|
7271
|
+
why: 'User may be unable to see needed content or may be forced to scroll in both dimensions',
|
|
7045
7272
|
wcag: '1.4.10',
|
|
7046
7273
|
weight: 1,
|
|
7047
7274
|
tools: {
|
|
7275
|
+
aslint: {
|
|
7276
|
+
'position-sticky': {
|
|
7277
|
+
variable: false,
|
|
7278
|
+
quality: 1,
|
|
7279
|
+
what: 'Element has a sticky position'
|
|
7280
|
+
}
|
|
7281
|
+
},
|
|
7048
7282
|
htmlcs: {
|
|
7049
7283
|
'AAA.1_4_10.C32,C31,C33,C38,SCR34,G206': {
|
|
7050
7284
|
variable: false,
|
|
7051
7285
|
quality: 1,
|
|
7052
7286
|
what: 'Fixed-position element may force bidirectional scrolling'
|
|
7053
7287
|
}
|
|
7054
|
-
}
|
|
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: {
|
|
7055
7296
|
qualWeb: {
|
|
7056
7297
|
'QW-BP18': {
|
|
7057
7298
|
variable: false,
|
|
@@ -7154,9 +7395,16 @@ exports.issues = {
|
|
|
7154
7395
|
},
|
|
7155
7396
|
submitButton: {
|
|
7156
7397
|
why: 'User cannot easily submit a form',
|
|
7157
|
-
wcag: '2.
|
|
7398
|
+
wcag: '3.2.2',
|
|
7158
7399
|
weight: 3,
|
|
7159
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
|
+
},
|
|
7160
7408
|
htmlcs: {
|
|
7161
7409
|
'AAA.3_2_2.H32.2': {
|
|
7162
7410
|
variable: false,
|