testilo 3.9.2 → 3.9.3
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/sp15a.js +103 -83
package/package.json
CHANGED
package/procs/score/sp15a.js
CHANGED
|
@@ -10,8 +10,8 @@
|
|
|
10
10
|
This proc applies specified weights to the component scores before summing them. An issue reported
|
|
11
11
|
by a test is given a score. That score is determined by:
|
|
12
12
|
Whether the issue is reported as an error or a warning.
|
|
13
|
-
How important the issue is, if the test package is
|
|
14
|
-
Whether the test belongs to a group or is a
|
|
13
|
+
How important the issue is, if the test package is pre-weighted (axe, tenon, and testaro)
|
|
14
|
+
Whether the test belongs to a group or is a solo test.
|
|
15
15
|
How heavily the group is weighted, if the test package is not pre-weighted and the test belongs
|
|
16
16
|
to a group
|
|
17
17
|
|
|
@@ -27,7 +27,7 @@
|
|
|
27
27
|
Browser logging produces a log score, and the prevention of tests produces a prevention score.
|
|
28
28
|
They, too, are added to the total score.
|
|
29
29
|
|
|
30
|
-
Each grouped test has a
|
|
30
|
+
Each grouped test has a quality property, typically set to 1. The value of this property can be
|
|
31
31
|
modified when the test is found to be higher or lower in quality than usual.
|
|
32
32
|
*/
|
|
33
33
|
|
|
@@ -58,21 +58,24 @@ const otherPackages = ['alfa', 'axe', 'continuum', 'htmlcs', 'ibm', 'nuVal', 'te
|
|
|
58
58
|
const preWeightedPackages = ['axe', 'tenon', 'testaro'];
|
|
59
59
|
const testMatchers = {
|
|
60
60
|
nuVal: [
|
|
61
|
-
/^CSS:
|
|
62
|
-
/^CSS:
|
|
63
|
-
/^CSS:
|
|
64
|
-
/^CSS:
|
|
65
|
-
/^
|
|
61
|
+
/^CSS: background-image: .+ is not a background-image value.*$/,
|
|
62
|
+
/^CSS: background: .+ is not a color value.*$/,
|
|
63
|
+
/^CSS: cursor: .+ is not a cursor value.*$/,
|
|
64
|
+
/^CSS: transform: .+ is not a transform value.*$/,
|
|
65
|
+
/^Bad value for attribute id on element .+: An ID must not be the empty string.+$/,
|
|
66
|
+
/^Duplicate ID .+$|^The first occurrence of ID .* was here.*$/,
|
|
66
67
|
/^Start tag .+ seen but an element of the same type was already open.*$/,
|
|
67
68
|
/^End tag .+ violates nesting rules.*$/,
|
|
68
69
|
/^Attribute .+ is not serializable as XML 1\.0.*$/,
|
|
69
|
-
/^Attribute .+ not allowed on element
|
|
70
|
+
/^Attribute .+ not allowed on element meta at this point.*$/,
|
|
70
71
|
/^Attribute .+ not allowed on element .+ at this point.*$/,
|
|
71
|
-
/^Bad value .+ for attribute .+ on element
|
|
72
|
+
/^Bad value .+ for attribute .+ on element meta.*$/,
|
|
72
73
|
/^Bad value .+ for attribute .+ on element .+$/,
|
|
74
|
+
/^Bad value .+ for the attribute .+$/,
|
|
73
75
|
/^Attribute .+ not allowed here.*$/,
|
|
76
|
+
/^The .+ role is unnecessary for element .+$/,
|
|
74
77
|
/^CSS: .+: Property .+ doesn't exist.*$/,
|
|
75
|
-
/^CSS: .+: only
|
|
78
|
+
/^CSS: .+: only 0 can be a length. You must put a unit after your number.*$/,
|
|
76
79
|
/^Element .+ not allowed as child of element .+ in this context.*$/
|
|
77
80
|
]
|
|
78
81
|
};
|
|
@@ -81,7 +84,7 @@ const groups = {
|
|
|
81
84
|
weight: 0,
|
|
82
85
|
packages: {
|
|
83
86
|
nuVal: {
|
|
84
|
-
'Element
|
|
87
|
+
'Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)': {
|
|
85
88
|
quality: 0,
|
|
86
89
|
what: 'Bug in nuVal'
|
|
87
90
|
}
|
|
@@ -130,7 +133,7 @@ const groups = {
|
|
|
130
133
|
}
|
|
131
134
|
},
|
|
132
135
|
nuVal: {
|
|
133
|
-
'^Duplicate ID .+$|^The first occurrence of ID
|
|
136
|
+
'^Duplicate ID .+$|^The first occurrence of ID .* was here.*$': {
|
|
134
137
|
quality: 1,
|
|
135
138
|
what: 'Duplicate id'
|
|
136
139
|
}
|
|
@@ -348,7 +351,7 @@ const groups = {
|
|
|
348
351
|
}
|
|
349
352
|
},
|
|
350
353
|
nuVal: {
|
|
351
|
-
'An
|
|
354
|
+
'An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.': {
|
|
352
355
|
quality: 1,
|
|
353
356
|
what: 'img element has no alt attribute'
|
|
354
357
|
}
|
|
@@ -391,7 +394,7 @@ const groups = {
|
|
|
391
394
|
weight: 4,
|
|
392
395
|
packages: {
|
|
393
396
|
nuVal: {
|
|
394
|
-
'Element
|
|
397
|
+
'Element img is missing required attribute src.': {
|
|
395
398
|
quality: 1,
|
|
396
399
|
what: 'img element has no src attribute'
|
|
397
400
|
}
|
|
@@ -402,7 +405,7 @@ const groups = {
|
|
|
402
405
|
weight: 4,
|
|
403
406
|
packages: {
|
|
404
407
|
nuVal: {
|
|
405
|
-
'^CSS:
|
|
408
|
+
'^CSS: background: .+ is not a color value.*$': {
|
|
406
409
|
quality: 1,
|
|
407
410
|
what: 'CSS background color is misdefined'
|
|
408
411
|
}
|
|
@@ -413,7 +416,7 @@ const groups = {
|
|
|
413
416
|
weight: 4,
|
|
414
417
|
packages: {
|
|
415
418
|
nuVal: {
|
|
416
|
-
'^CSS:
|
|
419
|
+
'^CSS: background-image: .+ is not a background-image value.*$': {
|
|
417
420
|
quality: 1,
|
|
418
421
|
what: 'CSS background image is misdefined'
|
|
419
422
|
}
|
|
@@ -811,7 +814,7 @@ const groups = {
|
|
|
811
814
|
weight: 1,
|
|
812
815
|
packages: {
|
|
813
816
|
nuVal: {
|
|
814
|
-
'Possible misuse of
|
|
817
|
+
'Possible misuse of aria-label. (If you disagree with this warning, file an issue report or send e-mail to www-validator@w3.org.)': {
|
|
815
818
|
quality: 1,
|
|
816
819
|
what: 'aria-label attribute may be misused'
|
|
817
820
|
}
|
|
@@ -898,7 +901,7 @@ const groups = {
|
|
|
898
901
|
}
|
|
899
902
|
},
|
|
900
903
|
nuVal: {
|
|
901
|
-
'The
|
|
904
|
+
'The aria-labelledby attribute must point to an element in the same document.': {
|
|
902
905
|
quality: 1,
|
|
903
906
|
what: 'aria-labelledby attribute references an element not in the document'
|
|
904
907
|
}
|
|
@@ -1185,7 +1188,7 @@ const groups = {
|
|
|
1185
1188
|
weight: 4,
|
|
1186
1189
|
packages: {
|
|
1187
1190
|
nuVal: {
|
|
1188
|
-
'Attribute
|
|
1191
|
+
'Attribute alt not allowed on element button at this point.': {
|
|
1189
1192
|
quality: 1,
|
|
1190
1193
|
what: 'button element has an alt attribute'
|
|
1191
1194
|
}
|
|
@@ -1487,7 +1490,7 @@ const groups = {
|
|
|
1487
1490
|
weight: 4,
|
|
1488
1491
|
packages: {
|
|
1489
1492
|
nuVal: {
|
|
1490
|
-
'Element
|
|
1493
|
+
'Element title not allowed as child of element body in this context. (Suppressing further errors from this subtree.)': {
|
|
1491
1494
|
quality: 1,
|
|
1492
1495
|
what: 'title element is a child of the body element'
|
|
1493
1496
|
}
|
|
@@ -1504,7 +1507,7 @@ const groups = {
|
|
|
1504
1507
|
weight: 4,
|
|
1505
1508
|
packages: {
|
|
1506
1509
|
nuVal: {
|
|
1507
|
-
'A
|
|
1510
|
+
'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.': {
|
|
1508
1511
|
quality: 1,
|
|
1509
1512
|
what: 'link element with a body ancestor has no itemprop or valid rel attribute'
|
|
1510
1513
|
}
|
|
@@ -1515,31 +1518,31 @@ const groups = {
|
|
|
1515
1518
|
weight: 3,
|
|
1516
1519
|
packages: {
|
|
1517
1520
|
nuVal: {
|
|
1518
|
-
'^Attribute .+ not allowed on element
|
|
1521
|
+
'^Attribute .+ not allowed on element meta at this point.*$': {
|
|
1519
1522
|
quality: 1,
|
|
1520
1523
|
what: 'Attribute is not allowed on a meta element here'
|
|
1521
1524
|
},
|
|
1522
|
-
'Element
|
|
1525
|
+
'Element meta is missing one or more of the following attributes: charset, content, http-equiv, itemprop, name, property.': {
|
|
1523
1526
|
quality: 1,
|
|
1524
1527
|
what: 'meta element is missing a charset, content, http-equiv, itemprop, name, or property attribute'
|
|
1525
1528
|
},
|
|
1526
|
-
'A document must not include more than one
|
|
1529
|
+
'A document must not include more than one meta element with its name attribute set to the value description.': {
|
|
1527
1530
|
quality: 1,
|
|
1528
1531
|
what: 'meta element with name="description" is not the only one'
|
|
1529
1532
|
},
|
|
1530
|
-
'A
|
|
1533
|
+
'A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.': {
|
|
1531
1534
|
quality: 1,
|
|
1532
1535
|
what: 'meta element with http-equiv="X-UA-Compatible" has no content="IE=edge"'
|
|
1533
1536
|
},
|
|
1534
|
-
'Element
|
|
1537
|
+
'Element meta is missing one or more of the following attributes: itemprop, property.': {
|
|
1535
1538
|
quality: 1,
|
|
1536
1539
|
what: 'meta element is missing an itemprop or property attribute'
|
|
1537
1540
|
},
|
|
1538
|
-
'A
|
|
1541
|
+
'A charset attribute on a meta element found after the first 1024 bytes.': {
|
|
1539
1542
|
quality: 1,
|
|
1540
1543
|
what: 'charset attribute on a meta element appears after 1024 bytes'
|
|
1541
1544
|
},
|
|
1542
|
-
'^Bad value .+ for attribute .+ on element
|
|
1545
|
+
'^Bad value .+ for attribute .+ on element meta.*$': {
|
|
1543
1546
|
quality: 1,
|
|
1544
1547
|
what: 'attribute of a meta element has an invalid value'
|
|
1545
1548
|
}
|
|
@@ -1550,7 +1553,7 @@ const groups = {
|
|
|
1550
1553
|
weight: 4,
|
|
1551
1554
|
packages: {
|
|
1552
1555
|
nuVal: {
|
|
1553
|
-
'Element
|
|
1556
|
+
'Element script must not have attribute defer unless attribute src is also specified.': {
|
|
1554
1557
|
quality: 1,
|
|
1555
1558
|
what: 'script element has a defer attribute without a src attribute'
|
|
1556
1559
|
}
|
|
@@ -1561,7 +1564,7 @@ const groups = {
|
|
|
1561
1564
|
weight: 4,
|
|
1562
1565
|
packages: {
|
|
1563
1566
|
nuVal: {
|
|
1564
|
-
'The
|
|
1567
|
+
'The itemtype attribute must not be specified on elements that do not have an itemscope attribute specified.': {
|
|
1565
1568
|
quality: 1,
|
|
1566
1569
|
what: 'Element has an itemtype attribute without an itemscope attribute'
|
|
1567
1570
|
}
|
|
@@ -1679,7 +1682,7 @@ const groups = {
|
|
|
1679
1682
|
}
|
|
1680
1683
|
},
|
|
1681
1684
|
nuVal: {
|
|
1682
|
-
'Bad value
|
|
1685
|
+
'Bad value dialog for attribute role on element li.': {
|
|
1683
1686
|
quality: 1,
|
|
1684
1687
|
what: 'dialog role is not valid for an li element'
|
|
1685
1688
|
}
|
|
@@ -1702,21 +1705,9 @@ const groups = {
|
|
|
1702
1705
|
}
|
|
1703
1706
|
},
|
|
1704
1707
|
nuVal: {
|
|
1705
|
-
'The
|
|
1708
|
+
'^The .+ role is unnecessary for element .+$': {
|
|
1706
1709
|
quality: 1,
|
|
1707
|
-
what: '
|
|
1708
|
-
},
|
|
1709
|
-
'The “contentinfo” role is unnecessary for element “footer”.': {
|
|
1710
|
-
quality: 1,
|
|
1711
|
-
what: 'contentinfo role is redundant for a footer element'
|
|
1712
|
-
},
|
|
1713
|
-
'The “main” role is unnecessary for element “main”.': {
|
|
1714
|
-
quality: 1,
|
|
1715
|
-
what: 'main role is redundant for a main element'
|
|
1716
|
-
},
|
|
1717
|
-
'The “navigation” role is unnecessary for element “nav”.': {
|
|
1718
|
-
quality: 1,
|
|
1719
|
-
what: 'navigation role is redundant for a nav element'
|
|
1710
|
+
what: 'explicit role is redundant for its element'
|
|
1720
1711
|
}
|
|
1721
1712
|
}
|
|
1722
1713
|
}
|
|
@@ -1737,7 +1728,7 @@ const groups = {
|
|
|
1737
1728
|
}
|
|
1738
1729
|
},
|
|
1739
1730
|
nuVal: {
|
|
1740
|
-
'Element
|
|
1731
|
+
'Element a is missing required attribute aria-valuenow.': {
|
|
1741
1732
|
quality: 1,
|
|
1742
1733
|
what: 'a element has no aria-valuenow attribute'
|
|
1743
1734
|
}
|
|
@@ -1879,7 +1870,7 @@ const groups = {
|
|
|
1879
1870
|
}
|
|
1880
1871
|
},
|
|
1881
1872
|
nuVal: {
|
|
1882
|
-
'The
|
|
1873
|
+
'The aria-hidden attribute must not be specified on the noscript element.': {
|
|
1883
1874
|
quality: 1,
|
|
1884
1875
|
what: 'noscript element has an aria-hidden attribute'
|
|
1885
1876
|
}
|
|
@@ -2065,7 +2056,7 @@ const groups = {
|
|
|
2065
2056
|
weight: 4,
|
|
2066
2057
|
packages: {
|
|
2067
2058
|
nuVal: {
|
|
2068
|
-
'Bad value
|
|
2059
|
+
'^Bad value for attribute id on element .+: An ID must not be the empty string.+$': {
|
|
2069
2060
|
quality: 1,
|
|
2070
2061
|
what: 'id attribute has an empty value'
|
|
2071
2062
|
}
|
|
@@ -2128,11 +2119,11 @@ const groups = {
|
|
|
2128
2119
|
weight: 1,
|
|
2129
2120
|
packages: {
|
|
2130
2121
|
nuVal: {
|
|
2131
|
-
'The
|
|
2122
|
+
'The type attribute is unnecessary for JavaScript resources.': {
|
|
2132
2123
|
quality: 1,
|
|
2133
2124
|
what: 'type attribute is unnecessary for a JavaScript resource'
|
|
2134
2125
|
},
|
|
2135
|
-
'The
|
|
2126
|
+
'The type attribute for the style element is not needed and should be omitted.': {
|
|
2136
2127
|
quality: 1,
|
|
2137
2128
|
what: 'type attribute is unnecessary for a style element'
|
|
2138
2129
|
}
|
|
@@ -2224,8 +2215,14 @@ const groups = {
|
|
|
2224
2215
|
}
|
|
2225
2216
|
},
|
|
2226
2217
|
docType: {
|
|
2227
|
-
weight:
|
|
2218
|
+
weight: 3,
|
|
2228
2219
|
packages: {
|
|
2220
|
+
nuVal: {
|
|
2221
|
+
'Start tag seen without seeing a doctype first. Expected <!DOCTYPE html>.': {
|
|
2222
|
+
quality: 1,
|
|
2223
|
+
what: 'Page does not start with <!DOCTYPE html>'
|
|
2224
|
+
}
|
|
2225
|
+
},
|
|
2229
2226
|
testaro: {
|
|
2230
2227
|
docType: {
|
|
2231
2228
|
quality: 1,
|
|
@@ -2268,7 +2265,7 @@ const groups = {
|
|
|
2268
2265
|
}
|
|
2269
2266
|
},
|
|
2270
2267
|
nuVal: {
|
|
2271
|
-
'Element
|
|
2268
|
+
'Element head is missing a required instance of child element title.': {
|
|
2272
2269
|
quality: 1,
|
|
2273
2270
|
what: 'head element has no child title element'
|
|
2274
2271
|
}
|
|
@@ -2303,7 +2300,7 @@ const groups = {
|
|
|
2303
2300
|
}
|
|
2304
2301
|
},
|
|
2305
2302
|
nuVal: {
|
|
2306
|
-
'Consider using the
|
|
2303
|
+
'Consider using the h1 element as a top-level heading only (all h1 elements are treated as top-level headings by many screen readers and other tools).': {
|
|
2307
2304
|
quality: 1,
|
|
2308
2305
|
what: 'Page contains more than 1 h1 element'
|
|
2309
2306
|
}
|
|
@@ -2373,11 +2370,26 @@ const groups = {
|
|
|
2373
2370
|
}
|
|
2374
2371
|
}
|
|
2375
2372
|
},
|
|
2373
|
+
articleHeadingless: {
|
|
2374
|
+
weight: 1,
|
|
2375
|
+
packages: {
|
|
2376
|
+
nuVal: {
|
|
2377
|
+
'Article lacks heading. Consider using h2-h6 elements to add identifying headings to all articles.': {
|
|
2378
|
+
quality: 1,
|
|
2379
|
+
what: 'article has no heading'
|
|
2380
|
+
}
|
|
2381
|
+
}
|
|
2382
|
+
}
|
|
2383
|
+
},
|
|
2376
2384
|
sectionHeadingless: {
|
|
2377
2385
|
weight: 1,
|
|
2378
2386
|
packages: {
|
|
2379
2387
|
nuVal: {
|
|
2380
|
-
'Section lacks heading. Consider using
|
|
2388
|
+
'Section lacks heading. Consider using h2-h6 elements to add identifying headings to all sections.': {
|
|
2389
|
+
quality: 1,
|
|
2390
|
+
what: 'section has no heading'
|
|
2391
|
+
},
|
|
2392
|
+
'Section lacks heading. Consider using h2-h6 elements to add identifying headings to all sections, or else use a div element instead for any cases where no heading is needed.': {
|
|
2381
2393
|
quality: 1,
|
|
2382
2394
|
what: 'section has no heading'
|
|
2383
2395
|
}
|
|
@@ -2544,7 +2556,7 @@ const groups = {
|
|
|
2544
2556
|
}
|
|
2545
2557
|
},
|
|
2546
2558
|
nuVal: {
|
|
2547
|
-
'Element
|
|
2559
|
+
'Element li not allowed as child of element div in this context. (Suppressing further errors from this subtree.)': {
|
|
2548
2560
|
quality: 1,
|
|
2549
2561
|
what: 'li element is a child of a div element'
|
|
2550
2562
|
}
|
|
@@ -3500,7 +3512,7 @@ const groups = {
|
|
|
3500
3512
|
weight: 2,
|
|
3501
3513
|
packages: {
|
|
3502
3514
|
nuVal: {
|
|
3503
|
-
'Potentially bad value
|
|
3515
|
+
'Potentially bad value allow-scripts allow-same-origin for attribute sandbox on element iframe: Setting both allow-scripts and allow-same-origin is not recommended, because it effectively enables an embedded page to break out of all sandboxing.': {
|
|
3504
3516
|
quality: 1,
|
|
3505
3517
|
what: 'iframe element has vulnerable sandbox="allow-scripts allow-same-origin"'
|
|
3506
3518
|
}
|
|
@@ -3585,6 +3597,10 @@ const groups = {
|
|
|
3585
3597
|
quality: 1,
|
|
3586
3598
|
what: 'attribute on this element has an invalid value'
|
|
3587
3599
|
},
|
|
3600
|
+
'^Bad value .+ for the attribute .+$': {
|
|
3601
|
+
quality: 1,
|
|
3602
|
+
what: 'attribute has an invalid value'
|
|
3603
|
+
},
|
|
3588
3604
|
'^Attribute .+ not allowed here.*$': {
|
|
3589
3605
|
quality: 1,
|
|
3590
3606
|
what: 'Attribute not allowed here'
|
|
@@ -3710,7 +3726,7 @@ const groups = {
|
|
|
3710
3726
|
weight: 4,
|
|
3711
3727
|
packages: {
|
|
3712
3728
|
nuVal: {
|
|
3713
|
-
'Element
|
|
3729
|
+
'Element div not allowed as child of element button in this context. (Suppressing further errors from this subtree.)': {
|
|
3714
3730
|
quality: 1,
|
|
3715
3731
|
what: 'div element has a button element as its parent'
|
|
3716
3732
|
}
|
|
@@ -3721,7 +3737,7 @@ const groups = {
|
|
|
3721
3737
|
weight: 4,
|
|
3722
3738
|
packages: {
|
|
3723
3739
|
nuVal: {
|
|
3724
|
-
'Element
|
|
3740
|
+
'Element p not allowed as child of element strong in this context. (Suppressing further errors from this subtree.)': {
|
|
3725
3741
|
quality: 1,
|
|
3726
3742
|
what: 'p element has a strong element as its parent'
|
|
3727
3743
|
}
|
|
@@ -3732,19 +3748,19 @@ const groups = {
|
|
|
3732
3748
|
weight: 4,
|
|
3733
3749
|
packages: {
|
|
3734
3750
|
nuVal: {
|
|
3735
|
-
'Element
|
|
3751
|
+
'Element style not allowed as child of element body in this context. (Suppressing further errors from this subtree.)': {
|
|
3736
3752
|
quality: 1,
|
|
3737
3753
|
what: 'style element not allowed as a child of the body element'
|
|
3738
3754
|
},
|
|
3739
|
-
'Element
|
|
3755
|
+
'Element style not allowed as child of element div in this context. (Suppressing further errors from this subtree.)': {
|
|
3740
3756
|
quality: 1,
|
|
3741
3757
|
what: 'style element not allowed as a child of this div element'
|
|
3742
3758
|
},
|
|
3743
|
-
'Element
|
|
3759
|
+
'Element style not allowed as child of element main in this context. (Suppressing further errors from this subtree.)': {
|
|
3744
3760
|
quality: 1,
|
|
3745
3761
|
what: 'style element not allowed as a child of this main element'
|
|
3746
3762
|
},
|
|
3747
|
-
'Element
|
|
3763
|
+
'Element style not allowed as child of element footer in this context. (Suppressing further errors from this subtree.)': {
|
|
3748
3764
|
quality: 1,
|
|
3749
3765
|
what: 'style element not allowed as a child of this footer element'
|
|
3750
3766
|
}
|
|
@@ -4010,35 +4026,39 @@ const groups = {
|
|
|
4010
4026
|
}
|
|
4011
4027
|
},
|
|
4012
4028
|
nuVal: {
|
|
4013
|
-
'The
|
|
4029
|
+
'The charset attribute on the script element is obsolete.': {
|
|
4014
4030
|
quality: 1,
|
|
4015
4031
|
what: 'charset attribute is obsolete on a script element'
|
|
4016
4032
|
},
|
|
4017
|
-
'The only allowed value for the
|
|
4033
|
+
'The only allowed value for the charset attribute for the script element is utf-8. (But the attribute is not needed and should be omitted altogether.)': {
|
|
4018
4034
|
quality: 1,
|
|
4019
4035
|
what: 'charset attribute has a value other than utf-8 and is unnecessary'
|
|
4020
4036
|
},
|
|
4021
|
-
'The
|
|
4037
|
+
'The language attribute on the script element is obsolete. You can safely omit it.': {
|
|
4022
4038
|
quality: 1,
|
|
4023
4039
|
what: 'language attribute is obsolete on a script element'
|
|
4024
4040
|
},
|
|
4025
|
-
'The
|
|
4041
|
+
'The language attribute on the script element is obsolete. Use the type attribute instead.': {
|
|
4026
4042
|
quality: 1,
|
|
4027
4043
|
what: 'language attribute is obsolete on a script element'
|
|
4028
4044
|
},
|
|
4029
|
-
'
|
|
4045
|
+
'Using the meta element to specify the document-wide default language is obsolete. Consider specifying the language on the root element instead.': {
|
|
4046
|
+
quality: 1,
|
|
4047
|
+
what: 'language declaration in a meta element is obsolete'
|
|
4048
|
+
},
|
|
4049
|
+
'The frameborder attribute on the iframe element is obsolete. Use CSS instead.': {
|
|
4030
4050
|
quality: 1,
|
|
4031
4051
|
what: 'frameborder attribute is obsolete'
|
|
4032
4052
|
},
|
|
4033
|
-
'The
|
|
4053
|
+
'The name attribute is obsolete. Consider putting an id attribute on the nearest container instead.': {
|
|
4034
4054
|
quality: 1,
|
|
4035
4055
|
what: 'name attribute is obsolete'
|
|
4036
4056
|
},
|
|
4037
|
-
'The
|
|
4057
|
+
'The allowtransparency attribute on the iframe element is obsolete. Use CSS instead.': {
|
|
4038
4058
|
quality: 1,
|
|
4039
4059
|
what: 'allowtransparency attribute on an iframe element is obsolete'
|
|
4040
4060
|
},
|
|
4041
|
-
'The
|
|
4061
|
+
'The scrolling attribute on the iframe element is obsolete. Use CSS instead.': {
|
|
4042
4062
|
quality: 1,
|
|
4043
4063
|
what: 'scrolling attribute on an iframe element is obsolete'
|
|
4044
4064
|
}
|
|
@@ -4055,31 +4075,31 @@ const groups = {
|
|
|
4055
4075
|
weight: 3,
|
|
4056
4076
|
packages: {
|
|
4057
4077
|
nuVal: {
|
|
4058
|
-
'CSS:
|
|
4078
|
+
'CSS: -webkit-box-flex: Parse Error.': {
|
|
4059
4079
|
quality: 1,
|
|
4060
4080
|
what: 'Invalid -webkit-box-flex in CSS'
|
|
4061
4081
|
},
|
|
4062
|
-
'CSS:
|
|
4082
|
+
'CSS: -webkit-flex: Parse Error.': {
|
|
4063
4083
|
quality: 1,
|
|
4064
4084
|
what: 'Invalid -webkit-flex in CSS'
|
|
4065
4085
|
},
|
|
4066
|
-
'CSS:
|
|
4086
|
+
'CSS: -ms-flex: Parse Error.': {
|
|
4067
4087
|
quality: 1,
|
|
4068
4088
|
what: 'Invalid -ms-flex in CSS'
|
|
4069
4089
|
},
|
|
4070
|
-
'CSS:
|
|
4090
|
+
'CSS: -moz-box-flex: Parse Error.': {
|
|
4071
4091
|
quality: 1,
|
|
4072
4092
|
what: 'Invalid -moz-box-flex in CSS'
|
|
4073
4093
|
},
|
|
4074
|
-
'CSS:
|
|
4094
|
+
'CSS: flex: Parse Error.': {
|
|
4075
4095
|
quality: 1,
|
|
4076
4096
|
what: 'Invalid flex in CSS'
|
|
4077
4097
|
},
|
|
4078
|
-
'^CSS:
|
|
4098
|
+
'^CSS: cursor: .+ is not a cursor value.*$': {
|
|
4079
4099
|
quality: 1,
|
|
4080
4100
|
what: 'Invalid cursor in CSS'
|
|
4081
4101
|
},
|
|
4082
|
-
'^CSS:
|
|
4102
|
+
'^CSS: transform: .+ is not a transform value.*$': {
|
|
4083
4103
|
quality: 1,
|
|
4084
4104
|
what: 'Invalid transform in CSS'
|
|
4085
4105
|
},
|
|
@@ -4087,7 +4107,7 @@ const groups = {
|
|
|
4087
4107
|
quality: 1,
|
|
4088
4108
|
what: 'Invalid property in CSS'
|
|
4089
4109
|
},
|
|
4090
|
-
'^CSS: .+: only
|
|
4110
|
+
'^CSS: .+: only 0 can be a length. You must put a unit after your number.*$': {
|
|
4091
4111
|
quality: 1,
|
|
4092
4112
|
what: 'Length in CSS is nonzero but has no unit'
|
|
4093
4113
|
},
|
|
@@ -4095,7 +4115,7 @@ const groups = {
|
|
|
4095
4115
|
quality: 1,
|
|
4096
4116
|
what: 'Invalid CSS'
|
|
4097
4117
|
},
|
|
4098
|
-
'Stray end tag
|
|
4118
|
+
'Stray end tag head.': {
|
|
4099
4119
|
quality: 1,
|
|
4100
4120
|
what: 'Invalid closing head tag'
|
|
4101
4121
|
},
|
|
@@ -4198,7 +4218,7 @@ exports.scorer = async report => {
|
|
|
4198
4218
|
if (verdict && rule) {
|
|
4199
4219
|
const {ruleID} = rule;
|
|
4200
4220
|
if (ruleID) {
|
|
4201
|
-
// Add 4 per failure, 1 per warning (
|
|
4221
|
+
// Add 4 per failure, 1 per warning (cantTell).
|
|
4202
4222
|
addDetail(which, ruleID, verdict === 'failed' ? 4 : 1);
|
|
4203
4223
|
}
|
|
4204
4224
|
}
|
|
@@ -4283,7 +4303,7 @@ exports.scorer = async report => {
|
|
|
4283
4303
|
items.forEach(issue => {
|
|
4284
4304
|
const {ruleId, level} = issue;
|
|
4285
4305
|
if (ruleId && level) {
|
|
4286
|
-
// Add 4 per violation, 1 per warning (
|
|
4306
|
+
// Add 4 per violation, 1 per warning (recommendation).
|
|
4287
4307
|
addDetail(which, ruleId, level === 'violation' ? 4 : 1);
|
|
4288
4308
|
}
|
|
4289
4309
|
});
|
|
@@ -4329,7 +4349,7 @@ exports.scorer = async report => {
|
|
|
4329
4349
|
testIDs.forEach(testID => {
|
|
4330
4350
|
const {count} = items[testID];
|
|
4331
4351
|
if (count) {
|
|
4332
|
-
// Add 4 per error, 3 per contrast error, 1 per warning (
|
|
4352
|
+
// Add 4 per error, 3 per contrast error, 1 per warning (alert).
|
|
4333
4353
|
addDetail(
|
|
4334
4354
|
which, `${issueClass[0]}:${testID}`, count * classScores[issueClass]
|
|
4335
4355
|
);
|