testilo 13.10.3 → 14.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/merge.js +4 -9
- package/package.json +1 -1
- package/procs/compare/{tcp27 → tcp31}/index.html +1 -1
- package/procs/compare/{tcp28 → tcp31}/index.js +1 -1
- package/procs/digest/{tdp27 → tdp31}/index.html +1 -1
- package/procs/score/{tic30.js → tic31.js} +53 -245
- package/procs/score/{tsp28.js → tsp31.js} +13 -13
- package/procs/score/tspA11yMessage.js +1 -1
- package/script.js +1 -14
- package/scripts/{ts27.json → ts31.json} +2 -26
- package/procs/compare/cp20sqrt/index.html +0 -48
- package/procs/compare/cp20sqrt/index.js +0 -66
- package/procs/compare/tcp24/index.html +0 -47
- package/procs/compare/tcp24/index.js +0 -64
- package/procs/compare/tcp27/index.js +0 -83
- package/procs/compare/tcp28/index.html +0 -47
- package/procs/digest/tdp24/index.html +0 -54
- package/procs/digest/tdp24/index.js +0 -117
- package/procs/digest/tdp27/index.js +0 -105
- package/procs/digest/tdp28/index.html +0 -72
- package/procs/score/tic25.js +0 -6966
- package/procs/score/tic27.js +0 -7404
- package/procs/score/tic28.js +0 -7472
- package/procs/score/tic29.js +0 -7430
- package/procs/score/tsp26.js +0 -111
- package/procs/score/tsp27.js +0 -241
- package/scripts/ts26.json +0 -97
- /package/procs/digest/{tdp28 → tdp31}/index.js +0 -0
package/merge.js
CHANGED
|
@@ -15,17 +15,12 @@ require('dotenv').config();
|
|
|
15
15
|
// ########## CONSTANTS
|
|
16
16
|
|
|
17
17
|
const stdRequester = process.env.REQUESTER;
|
|
18
|
-
//
|
|
18
|
+
// Tools that alter the page.
|
|
19
19
|
const contaminantNames = new Set([
|
|
20
20
|
'axe',
|
|
21
21
|
'continuum',
|
|
22
22
|
'htmlcs',
|
|
23
|
-
'ibm'
|
|
24
|
-
'wave'
|
|
25
|
-
]);
|
|
26
|
-
// Tests that are immune to page alteration.
|
|
27
|
-
const immuneNames = new Set([
|
|
28
|
-
'tenon'
|
|
23
|
+
'ibm'
|
|
29
24
|
]);
|
|
30
25
|
|
|
31
26
|
// ########## FUNCTIONS
|
|
@@ -38,7 +33,7 @@ exports.merge = (script, batch, requester, isolate = false) => {
|
|
|
38
33
|
// If the requester is unspecified, make it the standard requester.
|
|
39
34
|
requester ||= stdRequester;
|
|
40
35
|
// Create a timestamp.
|
|
41
|
-
const timeStamp = Math.floor((Date.now() - Date.UTC(2023,
|
|
36
|
+
const timeStamp = Math.floor((Date.now() - Date.UTC(2023, 6)) / 2000).toString(36);
|
|
42
37
|
// Create a time description.
|
|
43
38
|
const creationTime = (new Date()).toISOString().slice(0, 19);
|
|
44
39
|
// Initialize a target-independent job.
|
|
@@ -76,7 +71,7 @@ exports.merge = (script, batch, requester, isolate = false) => {
|
|
|
76
71
|
&& contaminantNames.has(act.which)
|
|
77
72
|
&& actIndex < acts.length - 1
|
|
78
73
|
&& nextAct.type !== 'placeholder'
|
|
79
|
-
&& (nextAct.type !== 'test'
|
|
74
|
+
&& (nextAct.type !== 'test')
|
|
80
75
|
) {
|
|
81
76
|
acts[actIndex] = JSON.parse(JSON.stringify([act, lastPlaceholder]));
|
|
82
77
|
}
|
package/package.json
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
<li>Digested by Testilo with procedure <code>__digester__</code></li>
|
|
27
27
|
<li>Compared by Testilo with procedure <code>__comparer__</code></li>
|
|
28
28
|
</ol>
|
|
29
|
-
<p>Testaro used
|
|
29
|
+
<p>Testaro used nine tools (Alfa, Axe, Continuum, Equal Access, HTML CodeSniffer, Nu Html Checker, Testaro, and WAVE) to perform about 900 automated accessibility tests. Testilo used its scoring procedure to assign a score to each page, with 0 being perfect.</p>
|
|
30
30
|
<h2>Comparison</h2>
|
|
31
31
|
<table class="allBorder">
|
|
32
32
|
<caption>Accessibility scores of web pages</caption>
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
</header>
|
|
31
31
|
<h2>Introduction</h2>
|
|
32
32
|
<p>This is a digest of results from a battery of <a href="https://www.w3.org/WAI/">web accessibility</a> tests.</p>
|
|
33
|
-
<p>
|
|
33
|
+
<p>Nine different <dfn>tools</dfn> (Alfa, Axe, Continuum, Equal Access, HTML CodeSniffer, Nu Html Checker, QualWeb, Testaro, and WAVE) tested the web page of __org__ at __url__ to check its compliance with various <dfn>rules</dfn>. There were a total of about 900 rules, classified into about 260 accessibility <dfn>issues</dfn>.</p>
|
|
34
34
|
<p>The results were interpreted to yield an aggregate score of __total__, where 0 would be <q>perfect</q>.</p>
|
|
35
35
|
<h2>Total score</h2>
|
|
36
36
|
<p>The total score is the sum of five components.</p>
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
/*
|
|
2
|
-
|
|
3
|
-
Testilo issue classification
|
|
2
|
+
tic31
|
|
3
|
+
Testilo issue classification 31
|
|
4
4
|
|
|
5
|
-
Classifies rules of the tools of Testaro into issues.
|
|
5
|
+
Classifies 918 rules of the tools of Testaro into 257 issues.
|
|
6
6
|
|
|
7
7
|
Issue properties:
|
|
8
8
|
wcag: WCAG Principle, Guideline, Success Criterion, or Technique, if any, most closely
|
|
@@ -1144,19 +1144,6 @@ exports.issues = {
|
|
|
1144
1144
|
}
|
|
1145
1145
|
}
|
|
1146
1146
|
},
|
|
1147
|
-
keyboardAccess: {
|
|
1148
|
-
wcag: '2.1.1',
|
|
1149
|
-
weight: 4,
|
|
1150
|
-
tools: {
|
|
1151
|
-
tenon: {
|
|
1152
|
-
180: {
|
|
1153
|
-
variable: false,
|
|
1154
|
-
quality: 1,
|
|
1155
|
-
what: 'Element is interactive but has a negative tabindex value'
|
|
1156
|
-
}
|
|
1157
|
-
}
|
|
1158
|
-
}
|
|
1159
|
-
},
|
|
1160
1147
|
eventKeyboardRisk: {
|
|
1161
1148
|
wcag: '2.1.1',
|
|
1162
1149
|
weight: 1,
|
|
@@ -1532,18 +1519,6 @@ exports.issues = {
|
|
|
1532
1519
|
what: 'Accessible name is not provided for an image which is the only content in a link'
|
|
1533
1520
|
}
|
|
1534
1521
|
},
|
|
1535
|
-
tenon: {
|
|
1536
|
-
57: {
|
|
1537
|
-
variable: false,
|
|
1538
|
-
quality: 1,
|
|
1539
|
-
what: 'Link has no text inside it'
|
|
1540
|
-
},
|
|
1541
|
-
91: {
|
|
1542
|
-
variable: false,
|
|
1543
|
-
quality: 1,
|
|
1544
|
-
what: 'Link has a background image but no text inside it'
|
|
1545
|
-
}
|
|
1546
|
-
},
|
|
1547
1522
|
wave: {
|
|
1548
1523
|
link_empty: {
|
|
1549
1524
|
variable: false,
|
|
@@ -1591,30 +1566,10 @@ exports.issues = {
|
|
|
1591
1566
|
}
|
|
1592
1567
|
}
|
|
1593
1568
|
},
|
|
1594
|
-
acronymNoTitle: {
|
|
1595
|
-
wcag: '3.1.4',
|
|
1596
|
-
weight: 4,
|
|
1597
|
-
tools: {
|
|
1598
|
-
tenon: {
|
|
1599
|
-
117: {
|
|
1600
|
-
variable: false,
|
|
1601
|
-
quality: 1,
|
|
1602
|
-
what: 'acronym element has no useful title value (and is deprecated; use abbr)'
|
|
1603
|
-
}
|
|
1604
|
-
}
|
|
1605
|
-
}
|
|
1606
|
-
},
|
|
1607
1569
|
abbreviationNoTitle: {
|
|
1608
1570
|
wcag: '3.1.4',
|
|
1609
1571
|
weight: 4,
|
|
1610
1572
|
tools: {
|
|
1611
|
-
tenon: {
|
|
1612
|
-
233: {
|
|
1613
|
-
variable: false,
|
|
1614
|
-
quality: 1,
|
|
1615
|
-
what: 'abbr element is first for its abbreviation but has no useful title value'
|
|
1616
|
-
}
|
|
1617
|
-
},
|
|
1618
1573
|
qualWeb: {
|
|
1619
1574
|
'QW-WCAG-T7': {
|
|
1620
1575
|
variable: false,
|
|
@@ -1713,24 +1668,11 @@ exports.issues = {
|
|
|
1713
1668
|
what: 'Links with identical accessible names and context serve different purposes'
|
|
1714
1669
|
}
|
|
1715
1670
|
},
|
|
1716
|
-
|
|
1717
|
-
|
|
1718
|
-
variable: false,
|
|
1719
|
-
quality: 1,
|
|
1720
|
-
what: 'Links have the same text but different destinations'
|
|
1721
|
-
}
|
|
1722
|
-
}
|
|
1723
|
-
}
|
|
1724
|
-
},
|
|
1725
|
-
areaDestinationsSame: {
|
|
1726
|
-
wcag: '2.4.4',
|
|
1727
|
-
weight: 2,
|
|
1728
|
-
tools: {
|
|
1729
|
-
tenon: {
|
|
1730
|
-
132: {
|
|
1671
|
+
testaro: {
|
|
1672
|
+
'linkAmb': {
|
|
1731
1673
|
variable: false,
|
|
1732
1674
|
quality: 1,
|
|
1733
|
-
what: '
|
|
1675
|
+
what: 'Links with the same text content have different destinations'
|
|
1734
1676
|
}
|
|
1735
1677
|
}
|
|
1736
1678
|
}
|
|
@@ -1777,13 +1719,6 @@ exports.issues = {
|
|
|
1777
1719
|
what: 'Consecutive links have the same href and one contains an image'
|
|
1778
1720
|
}
|
|
1779
1721
|
},
|
|
1780
|
-
tenon: {
|
|
1781
|
-
184: {
|
|
1782
|
-
variable: false,
|
|
1783
|
-
quality: 1,
|
|
1784
|
-
what: 'Adjacent links point to the same destination'
|
|
1785
|
-
}
|
|
1786
|
-
},
|
|
1787
1722
|
wave: {
|
|
1788
1723
|
link_redundant: {
|
|
1789
1724
|
variable: false,
|
|
@@ -1806,32 +1741,6 @@ exports.issues = {
|
|
|
1806
1741
|
}
|
|
1807
1742
|
}
|
|
1808
1743
|
},
|
|
1809
|
-
formNewWindow: {
|
|
1810
|
-
wcag: '3.2.5',
|
|
1811
|
-
weight: 2,
|
|
1812
|
-
tools: {
|
|
1813
|
-
tenon: {
|
|
1814
|
-
214: {
|
|
1815
|
-
variable: false,
|
|
1816
|
-
quality: 1,
|
|
1817
|
-
what: 'Form submission opens a new window'
|
|
1818
|
-
}
|
|
1819
|
-
}
|
|
1820
|
-
}
|
|
1821
|
-
},
|
|
1822
|
-
externalLinkSurprise: {
|
|
1823
|
-
wcag: '3.2.5',
|
|
1824
|
-
weight: 3,
|
|
1825
|
-
tools: {
|
|
1826
|
-
tenon: {
|
|
1827
|
-
218: {
|
|
1828
|
-
variable: false,
|
|
1829
|
-
quality: 1,
|
|
1830
|
-
what: 'Link opens in a new window without user control'
|
|
1831
|
-
}
|
|
1832
|
-
}
|
|
1833
|
-
}
|
|
1834
|
-
},
|
|
1835
1744
|
externalLink: {
|
|
1836
1745
|
wcag: '3.2.5',
|
|
1837
1746
|
weight: 1,
|
|
@@ -2138,19 +2047,6 @@ exports.issues = {
|
|
|
2138
2047
|
}
|
|
2139
2048
|
}
|
|
2140
2049
|
},
|
|
2141
|
-
textRotated: {
|
|
2142
|
-
wcag: '1.4.8',
|
|
2143
|
-
weight: 2,
|
|
2144
|
-
tools: {
|
|
2145
|
-
tenon: {
|
|
2146
|
-
271: {
|
|
2147
|
-
variable: false,
|
|
2148
|
-
quality: 1,
|
|
2149
|
-
what: 'Text is needlessly rotated 60+ degrees or more, hurting comprehension'
|
|
2150
|
-
}
|
|
2151
|
-
}
|
|
2152
|
-
}
|
|
2153
|
-
},
|
|
2154
2050
|
metaBansZoom: {
|
|
2155
2051
|
wcag: '1.4.4',
|
|
2156
2052
|
weight: 4,
|
|
@@ -2233,13 +2129,6 @@ exports.issues = {
|
|
|
2233
2129
|
what: 'Font size is smaller than 9 pixels'
|
|
2234
2130
|
}
|
|
2235
2131
|
},
|
|
2236
|
-
tenon: {
|
|
2237
|
-
134: {
|
|
2238
|
-
variable: false,
|
|
2239
|
-
quality: 1,
|
|
2240
|
-
what: 'Text is very small'
|
|
2241
|
-
}
|
|
2242
|
-
},
|
|
2243
2132
|
testaro: {
|
|
2244
2133
|
miniText: {
|
|
2245
2134
|
variable: false,
|
|
@@ -2306,7 +2195,7 @@ exports.issues = {
|
|
|
2306
2195
|
}
|
|
2307
2196
|
}
|
|
2308
2197
|
},
|
|
2309
|
-
|
|
2198
|
+
lineHeightLow: {
|
|
2310
2199
|
wcag: '1.4.8',
|
|
2311
2200
|
weight: 2,
|
|
2312
2201
|
tools: {
|
|
@@ -2314,22 +2203,15 @@ exports.issues = {
|
|
|
2314
2203
|
r73: {
|
|
2315
2204
|
variable: false,
|
|
2316
2205
|
quality: 1,
|
|
2317
|
-
what: '
|
|
2206
|
+
what: 'Text line height is not at least 1.5'
|
|
2318
2207
|
}
|
|
2319
2208
|
}
|
|
2320
2209
|
}
|
|
2321
2210
|
},
|
|
2322
|
-
|
|
2211
|
+
lineHeightLowForFont: {
|
|
2323
2212
|
wcag: '1.4.8',
|
|
2324
2213
|
weight: 2,
|
|
2325
2214
|
tools: {
|
|
2326
|
-
tenon: {
|
|
2327
|
-
144: {
|
|
2328
|
-
variable: false,
|
|
2329
|
-
quality: 1,
|
|
2330
|
-
what: 'Line height is insufficent to properly display the computed font size'
|
|
2331
|
-
}
|
|
2332
|
-
},
|
|
2333
2215
|
testaro: {
|
|
2334
2216
|
lineHeight: {
|
|
2335
2217
|
variable: false,
|
|
@@ -3511,13 +3393,6 @@ exports.issues = {
|
|
|
3511
3393
|
quality: 1,
|
|
3512
3394
|
what: 'Text has less than the enhanced minimum contrast'
|
|
3513
3395
|
}
|
|
3514
|
-
},
|
|
3515
|
-
tenon: {
|
|
3516
|
-
95: {
|
|
3517
|
-
variable: false,
|
|
3518
|
-
quality: 1,
|
|
3519
|
-
what: 'Element has insufficient color contrast (Level AAA)'
|
|
3520
|
-
}
|
|
3521
3396
|
}
|
|
3522
3397
|
}
|
|
3523
3398
|
},
|
|
@@ -3734,13 +3609,6 @@ exports.issues = {
|
|
|
3734
3609
|
what: 'Text alternative of the link image duplicates text in the same or an adjacent link'
|
|
3735
3610
|
}
|
|
3736
3611
|
},
|
|
3737
|
-
tenon: {
|
|
3738
|
-
138: {
|
|
3739
|
-
variable: false,
|
|
3740
|
-
quality: 1,
|
|
3741
|
-
what: 'Image link alternative text repeats text in the link'
|
|
3742
|
-
}
|
|
3743
|
-
},
|
|
3744
3612
|
wave: {
|
|
3745
3613
|
alt_redundant: {
|
|
3746
3614
|
variable: false,
|
|
@@ -3788,11 +3656,11 @@ exports.issues = {
|
|
|
3788
3656
|
what: 'Link text content is equal to the title attribute'
|
|
3789
3657
|
}
|
|
3790
3658
|
},
|
|
3791
|
-
|
|
3792
|
-
|
|
3659
|
+
testaro: {
|
|
3660
|
+
'linkTitle': {
|
|
3793
3661
|
variable: false,
|
|
3794
3662
|
quality: 1,
|
|
3795
|
-
what: 'Link
|
|
3663
|
+
what: 'Link title value is also contained in the link text'
|
|
3796
3664
|
}
|
|
3797
3665
|
},
|
|
3798
3666
|
wave: {
|
|
@@ -3960,13 +3828,6 @@ exports.issues = {
|
|
|
3960
3828
|
quality: 1,
|
|
3961
3829
|
what: 'Heading level is incorrect'
|
|
3962
3830
|
}
|
|
3963
|
-
},
|
|
3964
|
-
tenon: {
|
|
3965
|
-
155: {
|
|
3966
|
-
variable: false,
|
|
3967
|
-
quality: 1,
|
|
3968
|
-
what: 'Headings are not structured in a hierarchical manner'
|
|
3969
|
-
}
|
|
3970
3831
|
}
|
|
3971
3832
|
}
|
|
3972
3833
|
},
|
|
@@ -4099,13 +3960,6 @@ exports.issues = {
|
|
|
4099
3960
|
what: 'Paragraph text is fully justified'
|
|
4100
3961
|
}
|
|
4101
3962
|
},
|
|
4102
|
-
tenon: {
|
|
4103
|
-
36: {
|
|
4104
|
-
variable: false,
|
|
4105
|
-
quality: 1,
|
|
4106
|
-
what: 'Text is fully justified'
|
|
4107
|
-
}
|
|
4108
|
-
},
|
|
4109
3963
|
qualWeb: {
|
|
4110
3964
|
'QW-WCAG-T27': {
|
|
4111
3965
|
variable: false,
|
|
@@ -4183,41 +4037,41 @@ exports.issues = {
|
|
|
4183
4037
|
}
|
|
4184
4038
|
}
|
|
4185
4039
|
},
|
|
4186
|
-
|
|
4040
|
+
pseudoList: {
|
|
4187
4041
|
wcag: '1.3.1',
|
|
4188
4042
|
weight: 1,
|
|
4189
4043
|
tools: {
|
|
4190
|
-
|
|
4191
|
-
|
|
4044
|
+
qualWeb: {
|
|
4045
|
+
'QW-BP11': {
|
|
4192
4046
|
variable: false,
|
|
4193
4047
|
quality: 1,
|
|
4194
|
-
what: '
|
|
4048
|
+
what: 'br is used to make a list'
|
|
4195
4049
|
}
|
|
4196
4050
|
}
|
|
4197
4051
|
}
|
|
4198
4052
|
},
|
|
4199
|
-
|
|
4053
|
+
pseudoCodeRisk: {
|
|
4200
4054
|
wcag: '1.3.1',
|
|
4201
4055
|
weight: 1,
|
|
4202
4056
|
tools: {
|
|
4203
|
-
|
|
4204
|
-
|
|
4057
|
+
alfa: {
|
|
4058
|
+
r79: {
|
|
4205
4059
|
variable: false,
|
|
4206
4060
|
quality: 1,
|
|
4207
|
-
what: '
|
|
4061
|
+
what: 'pre element is not used for a figure or for code, kbd, and samp elements'
|
|
4208
4062
|
}
|
|
4209
4063
|
}
|
|
4210
4064
|
}
|
|
4211
4065
|
},
|
|
4212
|
-
|
|
4066
|
+
pseudoParagraphRisk: {
|
|
4213
4067
|
wcag: '1.3.1',
|
|
4214
4068
|
weight: 1,
|
|
4215
4069
|
tools: {
|
|
4216
|
-
|
|
4217
|
-
|
|
4070
|
+
testaro: {
|
|
4071
|
+
pseudoP: {
|
|
4218
4072
|
variable: false,
|
|
4219
4073
|
quality: 1,
|
|
4220
|
-
what: '
|
|
4074
|
+
what: 'Element contains sequential br elements instead of p'
|
|
4221
4075
|
}
|
|
4222
4076
|
}
|
|
4223
4077
|
}
|
|
@@ -4253,13 +4107,6 @@ exports.issues = {
|
|
|
4253
4107
|
wcag: '1.3.1',
|
|
4254
4108
|
weight: 1,
|
|
4255
4109
|
tools: {
|
|
4256
|
-
tenon: {
|
|
4257
|
-
129: {
|
|
4258
|
-
variable: false,
|
|
4259
|
-
quality: 1,
|
|
4260
|
-
what: 'CSS underline on text that is not a link'
|
|
4261
|
-
}
|
|
4262
|
-
},
|
|
4263
4110
|
wave: {
|
|
4264
4111
|
underline: {
|
|
4265
4112
|
variable: false,
|
|
@@ -4499,13 +4346,6 @@ exports.issues = {
|
|
|
4499
4346
|
what: 'Accesskey attribute value on an element is not unique for the page'
|
|
4500
4347
|
}
|
|
4501
4348
|
},
|
|
4502
|
-
tenon: {
|
|
4503
|
-
101: {
|
|
4504
|
-
variable: false,
|
|
4505
|
-
quality: 1,
|
|
4506
|
-
what: 'Duplicate accesskey value'
|
|
4507
|
-
}
|
|
4508
|
-
},
|
|
4509
4349
|
wave: {
|
|
4510
4350
|
accesskey: {
|
|
4511
4351
|
variable: false,
|
|
@@ -5045,13 +4885,6 @@ exports.issues = {
|
|
|
5045
4885
|
wcag: '2.5.5',
|
|
5046
4886
|
weight: 3,
|
|
5047
4887
|
tools: {
|
|
5048
|
-
tenon: {
|
|
5049
|
-
152: {
|
|
5050
|
-
variable: false,
|
|
5051
|
-
quality: 1,
|
|
5052
|
-
what: 'Actionable element is smaller than the minimum required size'
|
|
5053
|
-
}
|
|
5054
|
-
},
|
|
5055
4888
|
testaro: {
|
|
5056
4889
|
targetSize: {
|
|
5057
4890
|
variable: false,
|
|
@@ -5250,11 +5083,11 @@ exports.issues = {
|
|
|
5250
5083
|
what: 'Paragraph text is uppercased'
|
|
5251
5084
|
}
|
|
5252
5085
|
},
|
|
5253
|
-
|
|
5254
|
-
|
|
5086
|
+
testaro: {
|
|
5087
|
+
allCaps: {
|
|
5255
5088
|
variable: false,
|
|
5256
5089
|
quality: 1,
|
|
5257
|
-
what: '
|
|
5090
|
+
what: 'Element has a text substring of at least 8 upper-case characters'
|
|
5258
5091
|
}
|
|
5259
5092
|
}
|
|
5260
5093
|
}
|
|
@@ -5270,11 +5103,31 @@ exports.issues = {
|
|
|
5270
5103
|
what: 'Text of the paragraph is all italic'
|
|
5271
5104
|
}
|
|
5272
5105
|
},
|
|
5273
|
-
|
|
5274
|
-
|
|
5106
|
+
testaro: {
|
|
5107
|
+
allSlanted: {
|
|
5275
5108
|
variable: false,
|
|
5276
5109
|
quality: 1,
|
|
5277
|
-
what: '
|
|
5110
|
+
what: 'Element has a text substring of at least 40 italic or oblique characters'
|
|
5111
|
+
}
|
|
5112
|
+
}
|
|
5113
|
+
}
|
|
5114
|
+
},
|
|
5115
|
+
textDistortion: {
|
|
5116
|
+
wcag: '3.1.5',
|
|
5117
|
+
weight: 1,
|
|
5118
|
+
tools: {
|
|
5119
|
+
testaro: {
|
|
5120
|
+
distortion: {
|
|
5121
|
+
variable: false,
|
|
5122
|
+
quality: 1,
|
|
5123
|
+
what: 'Element text is distorted by a transform style property'
|
|
5124
|
+
}
|
|
5125
|
+
},
|
|
5126
|
+
testaro: {
|
|
5127
|
+
allCaps: {
|
|
5128
|
+
variable: false,
|
|
5129
|
+
quality: 1,
|
|
5130
|
+
what: 'Element has a text substring of at least 8 upper-case characters'
|
|
5278
5131
|
}
|
|
5279
5132
|
}
|
|
5280
5133
|
}
|
|
@@ -5786,7 +5639,7 @@ exports.issues = {
|
|
|
5786
5639
|
focOp: {
|
|
5787
5640
|
variable: false,
|
|
5788
5641
|
quality: 1,
|
|
5789
|
-
what: 'Tab-focusable elements
|
|
5642
|
+
what: 'Tab-focusable elements are inoperable or operable elements are not Tab-focusable'
|
|
5790
5643
|
}
|
|
5791
5644
|
}
|
|
5792
5645
|
}
|
|
@@ -5859,18 +5712,6 @@ exports.issues = {
|
|
|
5859
5712
|
quality: 1,
|
|
5860
5713
|
what: 'Element with aria-hidden has focusable content'
|
|
5861
5714
|
}
|
|
5862
|
-
},
|
|
5863
|
-
tenon: {
|
|
5864
|
-
189: {
|
|
5865
|
-
variable: false,
|
|
5866
|
-
quality: 1,
|
|
5867
|
-
what: 'Element is typically used for interaction but has a presentation role'
|
|
5868
|
-
},
|
|
5869
|
-
194: {
|
|
5870
|
-
variable: false,
|
|
5871
|
-
quality: 1,
|
|
5872
|
-
what: 'Visible element is focusable but has a presentation role or aria-hidden=true attribute'
|
|
5873
|
-
}
|
|
5874
5715
|
}
|
|
5875
5716
|
}
|
|
5876
5717
|
},
|
|
@@ -6003,7 +5844,7 @@ exports.issues = {
|
|
|
6003
5844
|
hovInd: {
|
|
6004
5845
|
variable: false,
|
|
6005
5846
|
quality: 1,
|
|
6006
|
-
what: 'Hovering
|
|
5847
|
+
what: 'Hovering is unclearly indicated'
|
|
6007
5848
|
}
|
|
6008
5849
|
}
|
|
6009
5850
|
}
|
|
@@ -6123,19 +5964,6 @@ exports.issues = {
|
|
|
6123
5964
|
}
|
|
6124
5965
|
}
|
|
6125
5966
|
},
|
|
6126
|
-
linkVague: {
|
|
6127
|
-
wcag: '2.4.4',
|
|
6128
|
-
weight: 3,
|
|
6129
|
-
tools: {
|
|
6130
|
-
tenon: {
|
|
6131
|
-
73: {
|
|
6132
|
-
variable: false,
|
|
6133
|
-
quality: 1,
|
|
6134
|
-
what: 'Link text is too generic to communicate the purpose or destination'
|
|
6135
|
-
}
|
|
6136
|
-
}
|
|
6137
|
-
}
|
|
6138
|
-
},
|
|
6139
5967
|
linkIndication: {
|
|
6140
5968
|
wcag: '1.3.3',
|
|
6141
5969
|
weight: 2,
|
|
@@ -6364,7 +6192,7 @@ exports.issues = {
|
|
|
6364
6192
|
zIndex: {
|
|
6365
6193
|
variable: false,
|
|
6366
6194
|
quality: 1,
|
|
6367
|
-
what: '
|
|
6195
|
+
what: 'Element has a nondefault z-index value'
|
|
6368
6196
|
}
|
|
6369
6197
|
}
|
|
6370
6198
|
}
|
|
@@ -6417,13 +6245,6 @@ exports.issues = {
|
|
|
6417
6245
|
quality: 1,
|
|
6418
6246
|
what: 'Enabled element with a textbox role has no nonpositive tabindex attribute'
|
|
6419
6247
|
}
|
|
6420
|
-
},
|
|
6421
|
-
tenon: {
|
|
6422
|
-
190: {
|
|
6423
|
-
variable: false,
|
|
6424
|
-
quality: 1,
|
|
6425
|
-
what: 'Interactive item is not natively actionable, but has no tabindex=0 attribute'
|
|
6426
|
-
}
|
|
6427
6248
|
}
|
|
6428
6249
|
}
|
|
6429
6250
|
},
|
|
@@ -6632,19 +6453,6 @@ exports.issues = {
|
|
|
6632
6453
|
}
|
|
6633
6454
|
}
|
|
6634
6455
|
},
|
|
6635
|
-
horizontalScrolling: {
|
|
6636
|
-
wcag: '1.4.10',
|
|
6637
|
-
weight: 3,
|
|
6638
|
-
tools: {
|
|
6639
|
-
tenon: {
|
|
6640
|
-
28: {
|
|
6641
|
-
variable: false,
|
|
6642
|
-
quality: 1,
|
|
6643
|
-
what: 'Layout or sizing of the page causes horizontal scrolling'
|
|
6644
|
-
}
|
|
6645
|
-
}
|
|
6646
|
-
}
|
|
6647
|
-
},
|
|
6648
6456
|
scrollRisk: {
|
|
6649
6457
|
wcag: '1.4.10',
|
|
6650
6458
|
weight: 1,
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/*
|
|
2
|
-
|
|
3
|
-
Testilo score proc
|
|
2
|
+
tsp31
|
|
3
|
+
Testilo score proc 31
|
|
4
4
|
|
|
5
|
-
Computes target score data and adds them to a
|
|
5
|
+
Computes target score data and adds them to a ts31 report.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
// IMPORTS
|
|
9
9
|
|
|
10
|
-
const {
|
|
10
|
+
const {issues} = require('./tic31');
|
|
11
11
|
|
|
12
12
|
// CONSTANTS
|
|
13
13
|
|
|
14
14
|
// ID of this proc.
|
|
15
|
-
const scoreProcID = '
|
|
15
|
+
const scoreProcID = 'tsp31';
|
|
16
16
|
// Configuration disclosures.
|
|
17
17
|
const severityWeights = [1, 2, 3, 4];
|
|
18
18
|
const toolWeight = 0.1;
|
|
@@ -33,14 +33,14 @@ const preventionWeight = 300;
|
|
|
33
33
|
// Indexes of issues.
|
|
34
34
|
const issueIndex = {};
|
|
35
35
|
const issueMatcher = [];
|
|
36
|
-
Object.keys(
|
|
37
|
-
Object.keys(
|
|
38
|
-
Object.keys(
|
|
36
|
+
Object.keys(issues).forEach(issueName => {
|
|
37
|
+
Object.keys(issues[issueName].tools).forEach(toolName => {
|
|
38
|
+
Object.keys(issues[issueName].tools[toolName]).forEach(issueID => {
|
|
39
39
|
if (! issueIndex[toolName]) {
|
|
40
40
|
issueIndex[toolName] = {};
|
|
41
41
|
}
|
|
42
|
-
issueIndex[toolName][issueID] =
|
|
43
|
-
if (
|
|
42
|
+
issueIndex[toolName][issueID] = issueName;
|
|
43
|
+
if (issues[issueName].tools[toolName][issueID].variable) {
|
|
44
44
|
issueMatcher.push(issueID);
|
|
45
45
|
}
|
|
46
46
|
})
|
|
@@ -112,7 +112,7 @@ exports.scorer = report => {
|
|
|
112
112
|
details.issue[issueID] = {
|
|
113
113
|
score: 0,
|
|
114
114
|
maxCount: 0,
|
|
115
|
-
weight:
|
|
115
|
+
weight: issues[issueID].weight,
|
|
116
116
|
tools: {}
|
|
117
117
|
};
|
|
118
118
|
}
|
|
@@ -120,7 +120,7 @@ exports.scorer = report => {
|
|
|
120
120
|
details.issue[issueID].tools[which] = {};
|
|
121
121
|
}
|
|
122
122
|
if (! details.issue[issueID].tools[which][ruleID]) {
|
|
123
|
-
const ruleData =
|
|
123
|
+
const ruleData = issues[issueID].tools[which][ruleID];
|
|
124
124
|
details.issue[issueID].tools[which][ruleID] = {
|
|
125
125
|
quality: ruleData.quality,
|
|
126
126
|
what: ruleData.what,
|
|
@@ -147,7 +147,7 @@ exports.scorer = report => {
|
|
|
147
147
|
}
|
|
148
148
|
}
|
|
149
149
|
else {
|
|
150
|
-
console.log(`ERROR: ${instance.ruleID} of ${which} not found in
|
|
150
|
+
console.log(`ERROR: ${instance.ruleID} of ${which} not found in issues`);
|
|
151
151
|
}
|
|
152
152
|
});
|
|
153
153
|
}
|