testilo 43.3.10 → 44.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/README.md +1 -1
- package/package.json +1 -1
- package/procs/analyze/axeFrac.js +6 -0
- package/procs/score/tic.js +1579 -37
- package/procs/util.js +2 -1
- package/script.js +1 -1
package/procs/score/tic.js
CHANGED
|
@@ -237,6 +237,28 @@ exports.issues = {
|
|
|
237
237
|
what: 'Void element has a useless trailing slash. [invalid]'
|
|
238
238
|
}
|
|
239
239
|
},
|
|
240
|
+
nuVnu: {
|
|
241
|
+
'Element head is missing a required instance of child element title.': {
|
|
242
|
+
variable: false,
|
|
243
|
+
quality: 1,
|
|
244
|
+
what: 'head element has no child title element [invalid]'
|
|
245
|
+
},
|
|
246
|
+
'Element img is missing required attribute src.': {
|
|
247
|
+
variable: false,
|
|
248
|
+
quality: 1,
|
|
249
|
+
what: 'img element has no src attribute [invalid]'
|
|
250
|
+
},
|
|
251
|
+
'Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)': {
|
|
252
|
+
variable: false,
|
|
253
|
+
quality: 0,
|
|
254
|
+
what: 'Element contains a prohibited mediaelementwrapper element [invalid]'
|
|
255
|
+
},
|
|
256
|
+
'Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.': {
|
|
257
|
+
variable: false,
|
|
258
|
+
quality: 1,
|
|
259
|
+
what: 'Void element has a useless trailing slash. [invalid]'
|
|
260
|
+
}
|
|
261
|
+
},
|
|
240
262
|
qualWeb: {
|
|
241
263
|
'QW-ACT-R10': {
|
|
242
264
|
variable: false,
|
|
@@ -421,6 +443,13 @@ exports.issues = {
|
|
|
421
443
|
what: 'Source code of the element contains 2 or more of the same attribute'
|
|
422
444
|
}
|
|
423
445
|
},
|
|
446
|
+
nuVnu: {
|
|
447
|
+
'^Duplicate attribute.*$': {
|
|
448
|
+
variable: true,
|
|
449
|
+
quality: 1,
|
|
450
|
+
what: 'Source code of the element contains 2 or more of the same attribute'
|
|
451
|
+
}
|
|
452
|
+
},
|
|
424
453
|
testaro: {
|
|
425
454
|
dupAtt: {
|
|
426
455
|
variable: false,
|
|
@@ -488,6 +517,13 @@ exports.issues = {
|
|
|
488
517
|
what: 'Duplicate id'
|
|
489
518
|
}
|
|
490
519
|
},
|
|
520
|
+
nuVnu: {
|
|
521
|
+
'^Duplicate ID .+$|^The first occurrence of ID .* was here.*$': {
|
|
522
|
+
variable: true,
|
|
523
|
+
quality: 1,
|
|
524
|
+
what: 'Duplicate id'
|
|
525
|
+
}
|
|
526
|
+
},
|
|
491
527
|
qualWeb: {
|
|
492
528
|
'QW-ACT-R18': {
|
|
493
529
|
variable: false,
|
|
@@ -696,6 +732,13 @@ exports.issues = {
|
|
|
696
732
|
quality: 1,
|
|
697
733
|
what: 'Element has both placeholder and aria-placeholder attributes'
|
|
698
734
|
}
|
|
735
|
+
},
|
|
736
|
+
nuVnu: {
|
|
737
|
+
'The aria-placeholder attribute must not be specified on elements that have a placeholder attribute.': {
|
|
738
|
+
variable: false,
|
|
739
|
+
quality: 1,
|
|
740
|
+
what: 'Element has both placeholder and aria-placeholder attributes'
|
|
741
|
+
}
|
|
699
742
|
}
|
|
700
743
|
}
|
|
701
744
|
},
|
|
@@ -874,6 +917,13 @@ exports.issues = {
|
|
|
874
917
|
what: 'img element has no alt attribute'
|
|
875
918
|
}
|
|
876
919
|
},
|
|
920
|
+
nuVnu: {
|
|
921
|
+
'An img element must have an alt attribute, except under certain conditions. For details, consult guidance on providing text alternatives for images.': {
|
|
922
|
+
variable: false,
|
|
923
|
+
quality: 1,
|
|
924
|
+
what: 'img element has no alt attribute'
|
|
925
|
+
}
|
|
926
|
+
},
|
|
877
927
|
qualWeb: {
|
|
878
928
|
'QW-ACT-R17': {
|
|
879
929
|
variable: false,
|
|
@@ -1064,6 +1114,13 @@ exports.issues = {
|
|
|
1064
1114
|
quality: 1,
|
|
1065
1115
|
what: 'src attribute is empty'
|
|
1066
1116
|
}
|
|
1117
|
+
},
|
|
1118
|
+
nuVnu: {
|
|
1119
|
+
'^Bad value for attribute src on element .+: Must be non-empty.*$': {
|
|
1120
|
+
variable: true,
|
|
1121
|
+
quality: 1,
|
|
1122
|
+
what: 'src attribute is empty'
|
|
1123
|
+
}
|
|
1067
1124
|
}
|
|
1068
1125
|
}
|
|
1069
1126
|
},
|
|
@@ -1079,6 +1136,13 @@ exports.issues = {
|
|
|
1079
1136
|
quality: 1,
|
|
1080
1137
|
what: 'CSS border includes a negative-valued property'
|
|
1081
1138
|
}
|
|
1139
|
+
},
|
|
1140
|
+
nuVnu: {
|
|
1141
|
+
'^CSS: border-.+ negative values are not allowed.*$': {
|
|
1142
|
+
variable: true,
|
|
1143
|
+
quality: 1,
|
|
1144
|
+
what: 'CSS border includes a negative-valued property'
|
|
1145
|
+
}
|
|
1082
1146
|
}
|
|
1083
1147
|
}
|
|
1084
1148
|
},
|
|
@@ -1094,6 +1158,13 @@ exports.issues = {
|
|
|
1094
1158
|
quality: 1,
|
|
1095
1159
|
what: 'CSS flex value is negative'
|
|
1096
1160
|
}
|
|
1161
|
+
},
|
|
1162
|
+
nuVnu: {
|
|
1163
|
+
'^CSS: flex: .+ negative values are not allowed.*$': {
|
|
1164
|
+
variable: true,
|
|
1165
|
+
quality: 1,
|
|
1166
|
+
what: 'CSS flex value is negative'
|
|
1167
|
+
}
|
|
1097
1168
|
}
|
|
1098
1169
|
}
|
|
1099
1170
|
},
|
|
@@ -1109,6 +1180,13 @@ exports.issues = {
|
|
|
1109
1180
|
quality: 1,
|
|
1110
1181
|
what: 'One of the CSS padding values is negative'
|
|
1111
1182
|
}
|
|
1183
|
+
},
|
|
1184
|
+
nuVnu: {
|
|
1185
|
+
'^CSS: padding[-a-z]*: .+ negative values are not allowed.*$': {
|
|
1186
|
+
variable: true,
|
|
1187
|
+
quality: 1,
|
|
1188
|
+
what: 'One of the CSS padding values is negative'
|
|
1189
|
+
}
|
|
1112
1190
|
}
|
|
1113
1191
|
}
|
|
1114
1192
|
},
|
|
@@ -1124,6 +1202,13 @@ exports.issues = {
|
|
|
1124
1202
|
quality: 1,
|
|
1125
1203
|
what: 'CSS gap value is negative'
|
|
1126
1204
|
}
|
|
1205
|
+
},
|
|
1206
|
+
nuVnu: {
|
|
1207
|
+
'^CSS: gap: .+ negative values are not allowed.*$': {
|
|
1208
|
+
variable: true,
|
|
1209
|
+
quality: 1,
|
|
1210
|
+
what: 'CSS gap value is negative'
|
|
1211
|
+
}
|
|
1127
1212
|
}
|
|
1128
1213
|
}
|
|
1129
1214
|
},
|
|
@@ -1149,6 +1234,23 @@ exports.issues = {
|
|
|
1149
1234
|
quality: 1,
|
|
1150
1235
|
what: 'CSS background URL is invalid'
|
|
1151
1236
|
}
|
|
1237
|
+
},
|
|
1238
|
+
nuVnu: {
|
|
1239
|
+
'^CSS: background: .+ is not a color value.*$': {
|
|
1240
|
+
variable: true,
|
|
1241
|
+
quality: 1,
|
|
1242
|
+
what: 'CSS background color is misdefined'
|
|
1243
|
+
},
|
|
1244
|
+
'^CSS: background: The .+ argument to the .+ function should be .+, not .+$': {
|
|
1245
|
+
variable: true,
|
|
1246
|
+
quality: 1,
|
|
1247
|
+
what: 'CSS background function has an invalid argument'
|
|
1248
|
+
},
|
|
1249
|
+
'^CSS: _background: url.+ is an incorrect URL.*$': {
|
|
1250
|
+
variable: true,
|
|
1251
|
+
quality: 1,
|
|
1252
|
+
what: 'CSS background URL is invalid'
|
|
1253
|
+
}
|
|
1152
1254
|
}
|
|
1153
1255
|
}
|
|
1154
1256
|
},
|
|
@@ -1169,6 +1271,18 @@ exports.issues = {
|
|
|
1169
1271
|
quality: 1,
|
|
1170
1272
|
what: 'CSS background image is misdefined'
|
|
1171
1273
|
}
|
|
1274
|
+
},
|
|
1275
|
+
nuVnu: {
|
|
1276
|
+
'^CSS: background-image: .+ is not a background-image value.*$': {
|
|
1277
|
+
variable: true,
|
|
1278
|
+
quality: 1,
|
|
1279
|
+
what: 'CSS background image is misdefined'
|
|
1280
|
+
},
|
|
1281
|
+
'^CSS: background-image: url.+ is an incorrect URL.*$': {
|
|
1282
|
+
variable: true,
|
|
1283
|
+
quality: 1,
|
|
1284
|
+
what: 'CSS background image is misdefined'
|
|
1285
|
+
}
|
|
1172
1286
|
}
|
|
1173
1287
|
}
|
|
1174
1288
|
},
|
|
@@ -1284,6 +1398,13 @@ exports.issues = {
|
|
|
1284
1398
|
what: 'img element with alt="" has a role attribute'
|
|
1285
1399
|
}
|
|
1286
1400
|
},
|
|
1401
|
+
nuVnu: {
|
|
1402
|
+
'An img element which has an alt attribute whose value is the empty string must not have a role attribute.': {
|
|
1403
|
+
variable: false,
|
|
1404
|
+
quality: 1,
|
|
1405
|
+
what: 'img element with alt="" has a role attribute'
|
|
1406
|
+
}
|
|
1407
|
+
},
|
|
1287
1408
|
qualWeb: {
|
|
1288
1409
|
'QW-ACT-R48': {
|
|
1289
1410
|
variable: false,
|
|
@@ -1352,6 +1473,18 @@ exports.issues = {
|
|
|
1352
1473
|
what: 'html start tag has no lang attribute to declare the language of the page'
|
|
1353
1474
|
}
|
|
1354
1475
|
},
|
|
1476
|
+
nuVnu: {
|
|
1477
|
+
'Consider adding a lang attribute to the html start tag to declare the language of this document.': {
|
|
1478
|
+
variable: false,
|
|
1479
|
+
quality: 1,
|
|
1480
|
+
what: 'html start tag has no lang attribute to declare the language of the page'
|
|
1481
|
+
},
|
|
1482
|
+
'^This document appears to be written in .+ Consider .+ing lang=.+$': {
|
|
1483
|
+
variable: true,
|
|
1484
|
+
quality: 1,
|
|
1485
|
+
what: 'html start tag has no lang attribute to declare the language of the page'
|
|
1486
|
+
}
|
|
1487
|
+
},
|
|
1355
1488
|
qualWeb: {
|
|
1356
1489
|
'QW-ACT-R2': {
|
|
1357
1490
|
variable: false,
|
|
@@ -1470,6 +1603,13 @@ exports.issues = {
|
|
|
1470
1603
|
what: 'Element has no lang attrbute matching its xml:lang attribute'
|
|
1471
1604
|
}
|
|
1472
1605
|
},
|
|
1606
|
+
nuVnu: {
|
|
1607
|
+
'When the attribute xml:lang in no namespace is specified, the element must also have the attribute lang present with the same value.': {
|
|
1608
|
+
variable: false,
|
|
1609
|
+
quality: 1,
|
|
1610
|
+
what: 'Element has no lang attrbute matching its xml:lang attribute'
|
|
1611
|
+
}
|
|
1612
|
+
},
|
|
1473
1613
|
qualWeb: {
|
|
1474
1614
|
'QW-ACT-R22': {
|
|
1475
1615
|
variable: false,
|
|
@@ -1875,6 +2015,13 @@ exports.issues = {
|
|
|
1875
2015
|
what: 'for attribute of the label element does not reference a non-hidden form control'
|
|
1876
2016
|
}
|
|
1877
2017
|
},
|
|
2018
|
+
nuVnu: {
|
|
2019
|
+
'The value of the for attribute of the label element must be the ID of a non-hidden form control.': {
|
|
2020
|
+
variable: false,
|
|
2021
|
+
quality: 1,
|
|
2022
|
+
what: 'for attribute of the label element does not reference a non-hidden form control'
|
|
2023
|
+
}
|
|
2024
|
+
},
|
|
1878
2025
|
wax: {
|
|
1879
2026
|
'This label\'s "for" attribute contains an ID for an element that is not a form control. Ensure that you have entered the correct ID for the intended element.': {
|
|
1880
2027
|
variable: false,
|
|
@@ -1896,6 +2043,13 @@ exports.issues = {
|
|
|
1896
2043
|
quality: 1,
|
|
1897
2044
|
what: 'label element has a labelable descendant whose ID differs from the for attribute of the label'
|
|
1898
2045
|
}
|
|
2046
|
+
},
|
|
2047
|
+
nuVnu: {
|
|
2048
|
+
'^Any .+ descendant of a label element with a for attribute must have an ID value that matches that for attribute.*$': {
|
|
2049
|
+
variable: true,
|
|
2050
|
+
quality: 1,
|
|
2051
|
+
what: 'label element has a labelable descendant whose ID differs from the for attribute of the label'
|
|
2052
|
+
}
|
|
1899
2053
|
}
|
|
1900
2054
|
}
|
|
1901
2055
|
},
|
|
@@ -1911,6 +2065,13 @@ exports.issues = {
|
|
|
1911
2065
|
quality: 1,
|
|
1912
2066
|
what: 'Element with a non-labelable role has an aria-label attribute'
|
|
1913
2067
|
}
|
|
2068
|
+
},
|
|
2069
|
+
nuVnu: {
|
|
2070
|
+
'The aria-label attribute must not be specified on any div element unless the element has a role value other than caption, code, deletion, emphasis, generic, insertion, paragraph, presentation, strong, subscript, or superscript.': {
|
|
2071
|
+
variable: false,
|
|
2072
|
+
quality: 1,
|
|
2073
|
+
what: 'Element with a non-labelable role has an aria-label attribute'
|
|
2074
|
+
}
|
|
1914
2075
|
}
|
|
1915
2076
|
}
|
|
1916
2077
|
},
|
|
@@ -1926,6 +2087,13 @@ exports.issues = {
|
|
|
1926
2087
|
quality: 1,
|
|
1927
2088
|
what: 'aria-label attribute is misused?'
|
|
1928
2089
|
}
|
|
2090
|
+
},
|
|
2091
|
+
nuVnu: {
|
|
2092
|
+
'Possible misuse of aria-label. (If you disagree with this warning, file an issue report or send e-mail to www-validator@w3.org.)': {
|
|
2093
|
+
variable: false,
|
|
2094
|
+
quality: 1,
|
|
2095
|
+
what: 'aria-label attribute is misused?'
|
|
2096
|
+
}
|
|
1929
2097
|
}
|
|
1930
2098
|
}
|
|
1931
2099
|
},
|
|
@@ -1948,6 +2116,13 @@ exports.issues = {
|
|
|
1948
2116
|
quality: 1,
|
|
1949
2117
|
what: 'Element has no aria-owns attribute but its aria-activedescendant attribute references a non-descendant'
|
|
1950
2118
|
}
|
|
2119
|
+
},
|
|
2120
|
+
nuVnu: {
|
|
2121
|
+
'Attribute aria-activedescendant value should either refer to a descendant element, or should be accompanied by attribute aria-owns.': {
|
|
2122
|
+
variable: false,
|
|
2123
|
+
quality: 1,
|
|
2124
|
+
what: 'Element has no aria-owns attribute but its aria-activedescendant attribute references a non-descendant'
|
|
2125
|
+
}
|
|
1951
2126
|
}
|
|
1952
2127
|
}
|
|
1953
2128
|
},
|
|
@@ -1975,6 +2150,18 @@ exports.issues = {
|
|
|
1975
2150
|
quality: 1,
|
|
1976
2151
|
what: 'aria-owns attribute references an element not in the document'
|
|
1977
2152
|
}
|
|
2153
|
+
},
|
|
2154
|
+
nuVnu: {
|
|
2155
|
+
'The aria-controls attribute must point to an element in the same document.': {
|
|
2156
|
+
variable: false,
|
|
2157
|
+
quality: 1,
|
|
2158
|
+
what: 'aria-controls attribute references an element not in the document'
|
|
2159
|
+
},
|
|
2160
|
+
'The aria-owns attribute must point to an element in the same document.': {
|
|
2161
|
+
variable: false,
|
|
2162
|
+
quality: 1,
|
|
2163
|
+
what: 'aria-owns attribute references an element not in the document'
|
|
2164
|
+
}
|
|
1978
2165
|
}
|
|
1979
2166
|
}
|
|
1980
2167
|
},
|
|
@@ -1998,6 +2185,13 @@ exports.issues = {
|
|
|
1998
2185
|
what: 'aria-describedby attribute references an element not in the document'
|
|
1999
2186
|
}
|
|
2000
2187
|
},
|
|
2188
|
+
nuVnu: {
|
|
2189
|
+
'The aria-describedby attribute must point to an element in the same document.': {
|
|
2190
|
+
variable: false,
|
|
2191
|
+
quality: 1,
|
|
2192
|
+
what: 'aria-describedby attribute references an element not in the document'
|
|
2193
|
+
}
|
|
2194
|
+
},
|
|
2001
2195
|
testaro: {
|
|
2002
2196
|
adbID: {
|
|
2003
2197
|
variable: false,
|
|
@@ -2093,6 +2287,18 @@ exports.issues = {
|
|
|
2093
2287
|
what: 'aria-labelledby attribute references an element not in the document'
|
|
2094
2288
|
}
|
|
2095
2289
|
},
|
|
2290
|
+
nuVnu: {
|
|
2291
|
+
'Any input descendant of a label element with a for attribute must have an ID value that matches that for attribute.': {
|
|
2292
|
+
variable: false,
|
|
2293
|
+
quality: 1,
|
|
2294
|
+
what: 'input id differs from the value of the for attribute of the enclosing label element'
|
|
2295
|
+
},
|
|
2296
|
+
'The aria-labelledby attribute must point to an element in the same document.': {
|
|
2297
|
+
variable: false,
|
|
2298
|
+
quality: 1,
|
|
2299
|
+
what: 'aria-labelledby attribute references an element not in the document'
|
|
2300
|
+
}
|
|
2301
|
+
},
|
|
2096
2302
|
wave: {
|
|
2097
2303
|
label_orphaned: {
|
|
2098
2304
|
variable: false,
|
|
@@ -2385,6 +2591,18 @@ exports.issues = {
|
|
|
2385
2591
|
what: 'Element has an empty href attribute'
|
|
2386
2592
|
}
|
|
2387
2593
|
},
|
|
2594
|
+
nuVnu: {
|
|
2595
|
+
'Bad value for attribute href on element link: Must be non-empty.': {
|
|
2596
|
+
variable: false,
|
|
2597
|
+
quality: 1,
|
|
2598
|
+
what: 'link element has an empty href attribute'
|
|
2599
|
+
},
|
|
2600
|
+
'Attribute href without an explicit value seen. The attribute may be dropped by IE7.': {
|
|
2601
|
+
variable: false,
|
|
2602
|
+
quality: 1,
|
|
2603
|
+
what: 'Element has an empty href attribute'
|
|
2604
|
+
}
|
|
2605
|
+
},
|
|
2388
2606
|
wax: {
|
|
2389
2607
|
'Link element is missing a non-empty href attribute pointing to the resource being linked.': {
|
|
2390
2608
|
variable: false,
|
|
@@ -2406,6 +2624,13 @@ exports.issues = {
|
|
|
2406
2624
|
quality: 1,
|
|
2407
2625
|
what: 'link element has neither an href nor an imagesrcset attribute'
|
|
2408
2626
|
}
|
|
2627
|
+
},
|
|
2628
|
+
nuVnu: {
|
|
2629
|
+
'A link element must have an href or imagesrcset attribute, or both.': {
|
|
2630
|
+
variable: false,
|
|
2631
|
+
quality: 1,
|
|
2632
|
+
what: 'link element has neither an href nor an imagesrcset attribute'
|
|
2633
|
+
}
|
|
2409
2634
|
}
|
|
2410
2635
|
}
|
|
2411
2636
|
},
|
|
@@ -2456,6 +2681,13 @@ exports.issues = {
|
|
|
2456
2681
|
what: 'a element has no href attribute'
|
|
2457
2682
|
}
|
|
2458
2683
|
},
|
|
2684
|
+
nuVnu: {
|
|
2685
|
+
'Element a is missing required attribute href.': {
|
|
2686
|
+
variable: false,
|
|
2687
|
+
quality: 1,
|
|
2688
|
+
what: 'a element has no href attribute'
|
|
2689
|
+
}
|
|
2690
|
+
},
|
|
2459
2691
|
testaro: {
|
|
2460
2692
|
linkTo: {
|
|
2461
2693
|
variable: false,
|
|
@@ -2792,6 +3024,28 @@ exports.issues = {
|
|
|
2792
3024
|
quality: 1,
|
|
2793
3025
|
what: 'Element is select and has no child option element, but its attributes require one'
|
|
2794
3026
|
}
|
|
3027
|
+
},
|
|
3028
|
+
nuVnu: {
|
|
3029
|
+
'The document role is not allowed for element select without a multiple attribute and without a size attribute whose value is greater than 1.': {
|
|
3030
|
+
variable: false,
|
|
3031
|
+
quality: 1,
|
|
3032
|
+
what: 'select element is not multiple or has no size greater than 1 but has a document role'
|
|
3033
|
+
},
|
|
3034
|
+
'The first child option element of a select element with a required attribute, and without a multiple attribute, and without a size attribute whose value is greater than 1, must have either an empty value attribute, or must have no text content. Consider either adding a placeholder option label, or adding a size attribute with a value equal to the number of option elements.': {
|
|
3035
|
+
variable: false,
|
|
3036
|
+
quality: 1,
|
|
3037
|
+
what: 'option element has a nonempty value'
|
|
3038
|
+
},
|
|
3039
|
+
'The select element cannot have more than one selected option descendant unless the multiple attribute is specified.': {
|
|
3040
|
+
variable: false,
|
|
3041
|
+
quality: 1,
|
|
3042
|
+
what: 'Element is select and has no multiple attribute, but has more than 1 selected option'
|
|
3043
|
+
},
|
|
3044
|
+
'A select element with a required attribute, and without a multiple attribute, and without a size attribute whose value is greater than 1, must have a child option element.': {
|
|
3045
|
+
variable: false,
|
|
3046
|
+
quality: 1,
|
|
3047
|
+
what: 'Element is select and has no child option element, but its attributes require one'
|
|
3048
|
+
}
|
|
2795
3049
|
}
|
|
2796
3050
|
}
|
|
2797
3051
|
},
|
|
@@ -2807,6 +3061,13 @@ exports.issues = {
|
|
|
2807
3061
|
quality: 1,
|
|
2808
3062
|
what: 'button element has an alt attribute'
|
|
2809
3063
|
}
|
|
3064
|
+
},
|
|
3065
|
+
nuVnu: {
|
|
3066
|
+
'Attribute alt not allowed on element button at this point.': {
|
|
3067
|
+
variable: false,
|
|
3068
|
+
quality: 1,
|
|
3069
|
+
what: 'button element has an alt attribute'
|
|
3070
|
+
}
|
|
2810
3071
|
}
|
|
2811
3072
|
}
|
|
2812
3073
|
},
|
|
@@ -2894,6 +3155,13 @@ exports.issues = {
|
|
|
2894
3155
|
what: 'input element with type=button has no nonempty value attribute'
|
|
2895
3156
|
}
|
|
2896
3157
|
},
|
|
3158
|
+
nuVnu: {
|
|
3159
|
+
'Element input with attribute type whose value is button must have non-empty attribute value.': {
|
|
3160
|
+
variable: false,
|
|
3161
|
+
quality: 1,
|
|
3162
|
+
what: 'input element with type=button has no nonempty value attribute'
|
|
3163
|
+
}
|
|
3164
|
+
},
|
|
2897
3165
|
qualWeb: {
|
|
2898
3166
|
'QW-ACT-R11': {
|
|
2899
3167
|
variable: false,
|
|
@@ -3001,6 +3269,13 @@ exports.issues = {
|
|
|
3001
3269
|
what: 'Element has no required container or owner'
|
|
3002
3270
|
}
|
|
3003
3271
|
},
|
|
3272
|
+
nuVnu: {
|
|
3273
|
+
'^An element with role=.+ must be contained in, or owned by, an element with role=.+$': {
|
|
3274
|
+
variable: true,
|
|
3275
|
+
quality: 1,
|
|
3276
|
+
what: 'Element has no required container or owner'
|
|
3277
|
+
}
|
|
3278
|
+
},
|
|
3004
3279
|
qualWeb: {
|
|
3005
3280
|
'QW-ACT-R33': {
|
|
3006
3281
|
variable: false,
|
|
@@ -3049,6 +3324,13 @@ exports.issues = {
|
|
|
3049
3324
|
what: 'Element is missing a required child'
|
|
3050
3325
|
}
|
|
3051
3326
|
},
|
|
3327
|
+
nuVnu: {
|
|
3328
|
+
'^Element .+ is missing a required instance of child element .+$': {
|
|
3329
|
+
variable: true,
|
|
3330
|
+
quality: 1,
|
|
3331
|
+
what: 'Element is missing a required child'
|
|
3332
|
+
}
|
|
3333
|
+
},
|
|
3052
3334
|
qualWeb: {
|
|
3053
3335
|
'QW-ACT-R38': {
|
|
3054
3336
|
variable: false,
|
|
@@ -3243,11 +3525,18 @@ exports.issues = {
|
|
|
3243
3525
|
what: 'viewport value prevents users from resizing the document'
|
|
3244
3526
|
}
|
|
3245
3527
|
},
|
|
3246
|
-
|
|
3247
|
-
'
|
|
3528
|
+
nuVnu: {
|
|
3529
|
+
'Consider avoiding viewport values that prevent users from resizing documents.': {
|
|
3248
3530
|
variable: false,
|
|
3249
3531
|
quality: 1,
|
|
3250
|
-
what: '
|
|
3532
|
+
what: 'viewport value prevents users from resizing the document'
|
|
3533
|
+
}
|
|
3534
|
+
},
|
|
3535
|
+
qualWeb: {
|
|
3536
|
+
'QW-ACT-R14': {
|
|
3537
|
+
variable: false,
|
|
3538
|
+
quality: 1,
|
|
3539
|
+
what: 'meta viewport prevents zoom'
|
|
3251
3540
|
}
|
|
3252
3541
|
},
|
|
3253
3542
|
wax: {
|
|
@@ -3427,6 +3716,13 @@ exports.issues = {
|
|
|
3427
3716
|
quality: 1,
|
|
3428
3717
|
what: 'Text line height is negative'
|
|
3429
3718
|
}
|
|
3719
|
+
},
|
|
3720
|
+
nuVnu: {
|
|
3721
|
+
'^CSS: line-height: .* negative values are not allowed.*$': {
|
|
3722
|
+
variable: true,
|
|
3723
|
+
quality: 1,
|
|
3724
|
+
what: 'Text line height is negative'
|
|
3725
|
+
}
|
|
3430
3726
|
}
|
|
3431
3727
|
}
|
|
3432
3728
|
},
|
|
@@ -3492,6 +3788,13 @@ exports.issues = {
|
|
|
3492
3788
|
quality: 1,
|
|
3493
3789
|
what: 'Element does not exist in HTML'
|
|
3494
3790
|
}
|
|
3791
|
+
},
|
|
3792
|
+
nuVnu: {
|
|
3793
|
+
'^Saw a start tag [a-z]+.*$': {
|
|
3794
|
+
variable: true,
|
|
3795
|
+
quality: 1,
|
|
3796
|
+
what: 'Element does not exist in HTML'
|
|
3797
|
+
}
|
|
3495
3798
|
}
|
|
3496
3799
|
}
|
|
3497
3800
|
},
|
|
@@ -3530,6 +3833,13 @@ exports.issues = {
|
|
|
3530
3833
|
what: 'Element has a body ancestor but no itemprop or valid rel attribute'
|
|
3531
3834
|
}
|
|
3532
3835
|
},
|
|
3836
|
+
nuVnu: {
|
|
3837
|
+
'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.': {
|
|
3838
|
+
variable: false,
|
|
3839
|
+
quality: 1,
|
|
3840
|
+
what: 'Element has a body ancestor but no itemprop or valid rel attribute'
|
|
3841
|
+
}
|
|
3842
|
+
},
|
|
3533
3843
|
wax: {
|
|
3534
3844
|
'Link elements can only be located in the head section of the document.': {
|
|
3535
3845
|
variable: false,
|
|
@@ -3574,6 +3884,23 @@ exports.issues = {
|
|
|
3574
3884
|
what: 'Element has a color attribute but no rel attribute with mask-icon as its value'
|
|
3575
3885
|
}
|
|
3576
3886
|
},
|
|
3887
|
+
nuVnu: {
|
|
3888
|
+
'A link element with an as attribute must have a rel attribute that contains the value preload or the value modulepreload or the value prefetch.': {
|
|
3889
|
+
variable: false,
|
|
3890
|
+
quality: 1,
|
|
3891
|
+
what: 'Element has an as attribute but no rel attribute with preload, modulepreload, or prefetch as its value'
|
|
3892
|
+
},
|
|
3893
|
+
'A link element with an as attribute must have a rel attribute that contains the value preload or the value modulepreload.': {
|
|
3894
|
+
variable: false,
|
|
3895
|
+
quality: 1,
|
|
3896
|
+
what: 'Element has an as attribute but no rel attribute with preload or modulepreload as its value'
|
|
3897
|
+
},
|
|
3898
|
+
'A link element with a color attribute must have a rel attribute that contains the value mask-icon.': {
|
|
3899
|
+
variable: false,
|
|
3900
|
+
quality: 1,
|
|
3901
|
+
what: 'Element has a color attribute but no rel attribute with mask-icon as its value'
|
|
3902
|
+
}
|
|
3903
|
+
},
|
|
3577
3904
|
wax: {
|
|
3578
3905
|
'Link element is missing a non-empty rel attribute identifying the link type.': {
|
|
3579
3906
|
variable: false,
|
|
@@ -3635,6 +3962,53 @@ exports.issues = {
|
|
|
3635
3962
|
quality: 1,
|
|
3636
3963
|
what: 'Attribute of a meta element has an invalid value'
|
|
3637
3964
|
}
|
|
3965
|
+
},
|
|
3966
|
+
nuVnu: {
|
|
3967
|
+
'^Attribute .+ not allowed on element meta at this point.*$': {
|
|
3968
|
+
variable: true,
|
|
3969
|
+
quality: 1,
|
|
3970
|
+
what: 'Attribute is not allowed on a meta element here'
|
|
3971
|
+
},
|
|
3972
|
+
'^Element meta is missing one or more of the following attributes: .+$': {
|
|
3973
|
+
variable: true,
|
|
3974
|
+
quality: 1,
|
|
3975
|
+
what: 'Element is missing a required attribute'
|
|
3976
|
+
},
|
|
3977
|
+
'A document must not include more than one meta element with its name attribute set to the value description.': {
|
|
3978
|
+
variable: false,
|
|
3979
|
+
quality: 1,
|
|
3980
|
+
what: 'Element with name="description" is not the only meta element with that name'
|
|
3981
|
+
},
|
|
3982
|
+
'A document must not include both a meta element with an http-equiv attribute whose value is content-type, and a meta element with a charset attribute.': {
|
|
3983
|
+
variable: false,
|
|
3984
|
+
quality: 1,
|
|
3985
|
+
what: 'Element with http-equiv="content-type" is incompatible with the meta element with a charset attribute'
|
|
3986
|
+
},
|
|
3987
|
+
'A document must not include more than one meta element with a http-equiv attribute whose value is content-type.': {
|
|
3988
|
+
variable: false,
|
|
3989
|
+
quality: 1,
|
|
3990
|
+
what: 'Page has more than 1 meta element with http-equiv="content-type"'
|
|
3991
|
+
},
|
|
3992
|
+
'A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.': {
|
|
3993
|
+
variable: false,
|
|
3994
|
+
quality: 1,
|
|
3995
|
+
what: 'Element with http-equiv="X-UA-Compatible" has no content="IE=edge"'
|
|
3996
|
+
},
|
|
3997
|
+
'A document must not include more than one meta element with a charset attribute.': {
|
|
3998
|
+
variable: false,
|
|
3999
|
+
quality: 1,
|
|
4000
|
+
what: 'More than 1 meta element has a charset attribute'
|
|
4001
|
+
},
|
|
4002
|
+
'A charset attribute on a meta element found after the first 1024 bytes.': {
|
|
4003
|
+
variable: false,
|
|
4004
|
+
quality: 1,
|
|
4005
|
+
what: 'charset attribute on a meta element appears after 1024 bytes'
|
|
4006
|
+
},
|
|
4007
|
+
'^Bad value .+ for attribute .+ on element meta.*$': {
|
|
4008
|
+
variable: true,
|
|
4009
|
+
quality: 1,
|
|
4010
|
+
what: 'Attribute of a meta element has an invalid value'
|
|
4011
|
+
}
|
|
3638
4012
|
}
|
|
3639
4013
|
}
|
|
3640
4014
|
},
|
|
@@ -3650,6 +4024,13 @@ exports.issues = {
|
|
|
3650
4024
|
quality: 1,
|
|
3651
4025
|
what: 'meta element is between the head and body elements'
|
|
3652
4026
|
}
|
|
4027
|
+
},
|
|
4028
|
+
nuVnu: {
|
|
4029
|
+
'meta element between head and body.': {
|
|
4030
|
+
variable: false,
|
|
4031
|
+
quality: 1,
|
|
4032
|
+
what: 'meta element is between the head and body elements'
|
|
4033
|
+
}
|
|
3653
4034
|
}
|
|
3654
4035
|
}
|
|
3655
4036
|
},
|
|
@@ -3675,6 +4056,23 @@ exports.issues = {
|
|
|
3675
4056
|
quality: 1,
|
|
3676
4057
|
what: 'Element is script and has a src attribute but its type is not empty, a JS MIME type, or module'
|
|
3677
4058
|
}
|
|
4059
|
+
},
|
|
4060
|
+
nuVnu: {
|
|
4061
|
+
'Element script must not have attribute defer unless attribute src is also specified.': {
|
|
4062
|
+
variable: false,
|
|
4063
|
+
quality: 1,
|
|
4064
|
+
what: 'Element is script and has a defer attribute but no src attribute'
|
|
4065
|
+
},
|
|
4066
|
+
'Element script should not have attribute fetchpriority unless attribute src is also specified.': {
|
|
4067
|
+
variable: false,
|
|
4068
|
+
quality: 1,
|
|
4069
|
+
what: 'Element is script and has a fetchpriority attribute but no src attribute'
|
|
4070
|
+
},
|
|
4071
|
+
'A script element with a src attribute must not have a type attribute whose value is anything other than the empty string, a JavaScript MIME type, or module.': {
|
|
4072
|
+
variable: false,
|
|
4073
|
+
quality: 1,
|
|
4074
|
+
what: 'Element is script and has a src attribute but its type is not empty, a JS MIME type, or module'
|
|
4075
|
+
}
|
|
3678
4076
|
}
|
|
3679
4077
|
}
|
|
3680
4078
|
},
|
|
@@ -3690,6 +4088,13 @@ exports.issues = {
|
|
|
3690
4088
|
quality: 1,
|
|
3691
4089
|
what: 'Element has an itemid attribute without both an itemscope and an itemtype attribute'
|
|
3692
4090
|
}
|
|
4091
|
+
},
|
|
4092
|
+
nuVnu: {
|
|
4093
|
+
'The itemid attribute must not be specified on elements that do not have both an itemscope attribute and an itemtype attribute specified.': {
|
|
4094
|
+
variable: false,
|
|
4095
|
+
quality: 1,
|
|
4096
|
+
what: 'Element has an itemid attribute without both an itemscope and an itemtype attribute'
|
|
4097
|
+
}
|
|
3693
4098
|
}
|
|
3694
4099
|
}
|
|
3695
4100
|
},
|
|
@@ -3705,6 +4110,13 @@ exports.issues = {
|
|
|
3705
4110
|
quality: 1,
|
|
3706
4111
|
what: 'Element has an itemtype attribute without an itemscope attribute'
|
|
3707
4112
|
}
|
|
4113
|
+
},
|
|
4114
|
+
nuVnu: {
|
|
4115
|
+
'The itemtype attribute must not be specified on elements that do not have an itemscope attribute specified.': {
|
|
4116
|
+
variable: false,
|
|
4117
|
+
quality: 1,
|
|
4118
|
+
what: 'Element has an itemtype attribute without an itemscope attribute'
|
|
4119
|
+
}
|
|
3708
4120
|
}
|
|
3709
4121
|
}
|
|
3710
4122
|
},
|
|
@@ -3896,6 +4308,23 @@ exports.issues = {
|
|
|
3896
4308
|
what: 'Invalid role'
|
|
3897
4309
|
}
|
|
3898
4310
|
},
|
|
4311
|
+
nuVnu: {
|
|
4312
|
+
'Bad value dialog for attribute role on element li.': {
|
|
4313
|
+
variable: false,
|
|
4314
|
+
quality: 1,
|
|
4315
|
+
what: 'dialog role is not valid for an li element'
|
|
4316
|
+
},
|
|
4317
|
+
'An img element with no alt attribute must not have a role attribute.': {
|
|
4318
|
+
variable: false,
|
|
4319
|
+
quality: 1,
|
|
4320
|
+
what: 'img element has a role attribute but no alt attribute'
|
|
4321
|
+
},
|
|
4322
|
+
'^Discarding unrecognized token .+ from value of attribute role. Browsers ignore any token that is not a defined ARIA non-abstract role.*$': {
|
|
4323
|
+
variable: true,
|
|
4324
|
+
quality: 1,
|
|
4325
|
+
what: 'Invalid role'
|
|
4326
|
+
}
|
|
4327
|
+
},
|
|
3899
4328
|
qualWeb: {
|
|
3900
4329
|
'QW-ACT-R20': {
|
|
3901
4330
|
variable: false,
|
|
@@ -3934,6 +4363,18 @@ exports.issues = {
|
|
|
3934
4363
|
quality: 1,
|
|
3935
4364
|
what: 'Table cell has a role attribute'
|
|
3936
4365
|
}
|
|
4366
|
+
},
|
|
4367
|
+
nuVnu: {
|
|
4368
|
+
'A figure element with a figcaption descendant must not have a role attribute.': {
|
|
4369
|
+
variable: false,
|
|
4370
|
+
quality: 1,
|
|
4371
|
+
what: 'figure element has a figcaption descendant but has a role attribute'
|
|
4372
|
+
},
|
|
4373
|
+
'^The role attribute must not be used on a .+ element which has a table ancestor with no role attribute, or with a role attribute whose value is table, grid, or treegrid.*$': {
|
|
4374
|
+
variable: true,
|
|
4375
|
+
quality: 1,
|
|
4376
|
+
what: 'Table cell has a role attribute'
|
|
4377
|
+
}
|
|
3937
4378
|
}
|
|
3938
4379
|
}
|
|
3939
4380
|
},
|
|
@@ -3971,6 +4412,28 @@ exports.issues = {
|
|
|
3971
4412
|
quality: 1,
|
|
3972
4413
|
what: 'explicit role is redundant for a text-type input element without a list attribute'
|
|
3973
4414
|
}
|
|
4415
|
+
},
|
|
4416
|
+
nuVnu: {
|
|
4417
|
+
'^The .+ role is unnecessary for element .+$': {
|
|
4418
|
+
variable: true,
|
|
4419
|
+
quality: 1,
|
|
4420
|
+
what: 'explicit role is redundant for its element'
|
|
4421
|
+
},
|
|
4422
|
+
'^Element .+ does not need a role attribute.*$': {
|
|
4423
|
+
variable: true,
|
|
4424
|
+
quality: 1,
|
|
4425
|
+
what: 'Element needs no role attribute'
|
|
4426
|
+
},
|
|
4427
|
+
'The searchbox role is unnecessary for an input element that has no list attribute and whose type is search.': {
|
|
4428
|
+
variable: false,
|
|
4429
|
+
quality: 1,
|
|
4430
|
+
what: 'explicit role is redundant for a search-type input element without a list attribute'
|
|
4431
|
+
},
|
|
4432
|
+
'The textbox role is unnecessary for an input element that has no list attribute and whose type is text.': {
|
|
4433
|
+
variable: false,
|
|
4434
|
+
quality: 1,
|
|
4435
|
+
what: 'explicit role is redundant for a text-type input element without a list attribute'
|
|
4436
|
+
}
|
|
3974
4437
|
}
|
|
3975
4438
|
}
|
|
3976
4439
|
},
|
|
@@ -4098,6 +4561,73 @@ exports.issues = {
|
|
|
4098
4561
|
what: 'Element with a srcset attribute with a width has no valid sizes attribute'
|
|
4099
4562
|
}
|
|
4100
4563
|
},
|
|
4564
|
+
nuVnu: {
|
|
4565
|
+
'The itemprop attribute was specified, but the element is not a property of any item.': {
|
|
4566
|
+
variable: false,
|
|
4567
|
+
quality: 1,
|
|
4568
|
+
what: 'itemprop attribute is on an element that is not a property of an item'
|
|
4569
|
+
},
|
|
4570
|
+
'An aria-disabled attribute whose value is true should not be specified on an a element that has an href attribute.': {
|
|
4571
|
+
variable: false,
|
|
4572
|
+
quality: 1,
|
|
4573
|
+
what: 'a element has aria-disabled=true but has an href attribute'
|
|
4574
|
+
},
|
|
4575
|
+
'^Attribute .+ not allowed on element .+ at this point.*$': {
|
|
4576
|
+
variable: true,
|
|
4577
|
+
quality: 1,
|
|
4578
|
+
what: 'Attribute not allowed on this element'
|
|
4579
|
+
},
|
|
4580
|
+
'^Attribute .+ not allowed here.*$': {
|
|
4581
|
+
variable: true,
|
|
4582
|
+
quality: 1,
|
|
4583
|
+
what: 'Attribute not allowed here'
|
|
4584
|
+
},
|
|
4585
|
+
'^Attribute .+ is not serializable as XML 1[.]0.*$': {
|
|
4586
|
+
variable: true,
|
|
4587
|
+
quality: 1,
|
|
4588
|
+
what: 'Attribute is invalidly nonserializable'
|
|
4589
|
+
},
|
|
4590
|
+
'^Attribute .+ is only allowed when .+$': {
|
|
4591
|
+
variable: true,
|
|
4592
|
+
quality: 1,
|
|
4593
|
+
what: 'Attribute is invalid here'
|
|
4594
|
+
},
|
|
4595
|
+
'A document must not include more than one autofocus attribute.': {
|
|
4596
|
+
variable: false,
|
|
4597
|
+
quality: 1,
|
|
4598
|
+
what: 'Page includes more than one autofocus attribute'
|
|
4599
|
+
},
|
|
4600
|
+
'A link element with a sizes attribute must have a rel attribute that contains the value icon or the value apple-touch-icon or the value apple-touch-icon-precomposed.': {
|
|
4601
|
+
variable: false,
|
|
4602
|
+
quality: 1,
|
|
4603
|
+
what: 'link element has a sizes attribute but no icon-type rel attribute'
|
|
4604
|
+
},
|
|
4605
|
+
'An input element with a type attribute whose value is hidden must not have any aria-* attributes.': {
|
|
4606
|
+
variable: false,
|
|
4607
|
+
quality: 1,
|
|
4608
|
+
what: 'hidden-type input element has an ARIA attribute'
|
|
4609
|
+
},
|
|
4610
|
+
'The sizes attribute may be specified only if the srcset attribute is also present.': {
|
|
4611
|
+
variable: false,
|
|
4612
|
+
quality: 1,
|
|
4613
|
+
what: 'Element has a sizes attribute but no srcset attribute'
|
|
4614
|
+
},
|
|
4615
|
+
'The sizes attribute must only be specified if the srcset attribute is also specified.': {
|
|
4616
|
+
variable: false,
|
|
4617
|
+
quality: 1,
|
|
4618
|
+
what: 'Element has a sizes attribute but no srcset attribute'
|
|
4619
|
+
},
|
|
4620
|
+
'When the srcset attribute has any image candidate string with a width descriptor, the sizes attribute must also be present.': {
|
|
4621
|
+
variable: false,
|
|
4622
|
+
quality: 1,
|
|
4623
|
+
what: 'Element with a srcset attribute with a width has no sizes attribute'
|
|
4624
|
+
},
|
|
4625
|
+
'When the srcset attribute has any image candidate string with a width descriptor, the sizes attribute must also be specified.': {
|
|
4626
|
+
variable: false,
|
|
4627
|
+
quality: 1,
|
|
4628
|
+
what: 'Element with a srcset attribute with a width has no valid sizes attribute'
|
|
4629
|
+
}
|
|
4630
|
+
},
|
|
4101
4631
|
wax: {
|
|
4102
4632
|
'Elements must only use allowed ARIA attributes': {
|
|
4103
4633
|
variable: false,
|
|
@@ -4152,28 +4682,82 @@ exports.issues = {
|
|
|
4152
4682
|
what: 'script element with a defer attribute has type="module"'
|
|
4153
4683
|
}
|
|
4154
4684
|
},
|
|
4155
|
-
|
|
4156
|
-
'
|
|
4157
|
-
variable: false,
|
|
4158
|
-
quality: 1,
|
|
4159
|
-
what: 'Value of an ARIA attribute on the element is invalid'
|
|
4160
|
-
}
|
|
4161
|
-
}
|
|
4162
|
-
}
|
|
4163
|
-
},
|
|
4164
|
-
attributeMissing: {
|
|
4165
|
-
summary: 'attribute missing',
|
|
4166
|
-
why: 'Item behaves improperly',
|
|
4167
|
-
wcag: '4.1.2',
|
|
4168
|
-
weight: 4,
|
|
4169
|
-
tools: {
|
|
4170
|
-
nuVal: {
|
|
4171
|
-
'^Element image is missing required attribute (?:height|width).*$': {
|
|
4685
|
+
nuVnu: {
|
|
4686
|
+
'^Bad value .* for attribute .+ on element .+$': {
|
|
4172
4687
|
variable: true,
|
|
4173
4688
|
quality: 1,
|
|
4174
|
-
what: '
|
|
4689
|
+
what: 'Attribute on this element has an invalid value'
|
|
4175
4690
|
},
|
|
4176
|
-
'^
|
|
4691
|
+
'^Bad value .+ for the attribute .+$': {
|
|
4692
|
+
variable: true,
|
|
4693
|
+
quality: 1,
|
|
4694
|
+
what: 'Attribute has an invalid value'
|
|
4695
|
+
},
|
|
4696
|
+
'^Bad value for attribute .+ on element .+: Must not be empty.*$': {
|
|
4697
|
+
variable: true,
|
|
4698
|
+
quality: 1,
|
|
4699
|
+
what: 'Attribute has an invalidly empty value'
|
|
4700
|
+
},
|
|
4701
|
+
'^Bad value for attribute (?:width|height) on element img: The empty string is not a valid non-negative integer.*$': {
|
|
4702
|
+
variable: true,
|
|
4703
|
+
quality: 1,
|
|
4704
|
+
what: 'Attribute has an empty value'
|
|
4705
|
+
},
|
|
4706
|
+
'A script element with a defer attribute must not have a type attribute with the value module.': {
|
|
4707
|
+
variable: false,
|
|
4708
|
+
quality: 1,
|
|
4709
|
+
what: 'script element with a defer attribute has type="module"'
|
|
4710
|
+
}
|
|
4711
|
+
},
|
|
4712
|
+
wax: {
|
|
4713
|
+
'Ensure ARIA attributes have valid values as per specifications.': {
|
|
4714
|
+
variable: false,
|
|
4715
|
+
quality: 1,
|
|
4716
|
+
what: 'Value of an ARIA attribute on the element is invalid'
|
|
4717
|
+
}
|
|
4718
|
+
}
|
|
4719
|
+
}
|
|
4720
|
+
},
|
|
4721
|
+
attributeMissing: {
|
|
4722
|
+
summary: 'attribute missing',
|
|
4723
|
+
why: 'Item behaves improperly',
|
|
4724
|
+
wcag: '4.1.2',
|
|
4725
|
+
weight: 4,
|
|
4726
|
+
tools: {
|
|
4727
|
+
nuVal: {
|
|
4728
|
+
'^Element image is missing required attribute (?:height|width).*$': {
|
|
4729
|
+
variable: true,
|
|
4730
|
+
quality: 1,
|
|
4731
|
+
what: 'image element has no height attribute or has no width attribute'
|
|
4732
|
+
},
|
|
4733
|
+
'^Element .+ is missing one or more of the following attributes: .+$': {
|
|
4734
|
+
variable: true,
|
|
4735
|
+
quality: 1,
|
|
4736
|
+
what: 'Element is missing a required attribute'
|
|
4737
|
+
},
|
|
4738
|
+
'A link element with a rel attribute that contains the value preload must have an as attribute.': {
|
|
4739
|
+
variable: false,
|
|
4740
|
+
quality: 1,
|
|
4741
|
+
what: 'link element with rel="preload" is missing an as attribute'
|
|
4742
|
+
},
|
|
4743
|
+
'A source element that has a following sibling source element or img element with a srcset attribute must have a media attribute and/or type attribute.': {
|
|
4744
|
+
variable: false,
|
|
4745
|
+
quality: 1,
|
|
4746
|
+
what: 'source or img element is missing a media or type attribute'
|
|
4747
|
+
},
|
|
4748
|
+
'^Element .+ is missing required attribute .+$': {
|
|
4749
|
+
variable: true,
|
|
4750
|
+
quality: 1,
|
|
4751
|
+
what: 'Element is missing a required attribute'
|
|
4752
|
+
}
|
|
4753
|
+
},
|
|
4754
|
+
nuVnu: {
|
|
4755
|
+
'^Element image is missing required attribute (?:height|width).*$': {
|
|
4756
|
+
variable: true,
|
|
4757
|
+
quality: 1,
|
|
4758
|
+
what: 'image element has no height attribute or has no width attribute'
|
|
4759
|
+
},
|
|
4760
|
+
'^Element .+ is missing one or more of the following attributes: .+$': {
|
|
4177
4761
|
variable: true,
|
|
4178
4762
|
quality: 1,
|
|
4179
4763
|
what: 'Element is missing a required attribute'
|
|
@@ -4208,6 +4792,13 @@ exports.issues = {
|
|
|
4208
4792
|
quality: 1,
|
|
4209
4793
|
what: 'Element has no role attribute'
|
|
4210
4794
|
}
|
|
4795
|
+
},
|
|
4796
|
+
nuVnu: {
|
|
4797
|
+
'^Element .+ is missing required attribute role.*$': {
|
|
4798
|
+
variable: true,
|
|
4799
|
+
quality: 1,
|
|
4800
|
+
what: 'Element has no role attribute'
|
|
4801
|
+
}
|
|
4211
4802
|
}
|
|
4212
4803
|
}
|
|
4213
4804
|
},
|
|
@@ -4223,6 +4814,13 @@ exports.issues = {
|
|
|
4223
4814
|
quality: 1,
|
|
4224
4815
|
what: 'Element has no role attribute but needs one?'
|
|
4225
4816
|
}
|
|
4817
|
+
},
|
|
4818
|
+
nuVnu: {
|
|
4819
|
+
'^Element .+ is missing one or more of the following attributes: role.*$': {
|
|
4820
|
+
variable: true,
|
|
4821
|
+
quality: 1,
|
|
4822
|
+
what: 'Element has no role attribute but needs one?'
|
|
4823
|
+
}
|
|
4226
4824
|
}
|
|
4227
4825
|
}
|
|
4228
4826
|
},
|
|
@@ -4260,6 +4858,13 @@ exports.issues = {
|
|
|
4260
4858
|
what: 'Element is missing a required ARIA attribute'
|
|
4261
4859
|
}
|
|
4262
4860
|
},
|
|
4861
|
+
nuVnu: {
|
|
4862
|
+
'^Element .+ is missing required attribute aria-.+$': {
|
|
4863
|
+
variable: true,
|
|
4864
|
+
quality: 1,
|
|
4865
|
+
what: 'Element is missing a required ARIA attribute'
|
|
4866
|
+
}
|
|
4867
|
+
},
|
|
4263
4868
|
qualWeb: {
|
|
4264
4869
|
'QW-ACT-R28': {
|
|
4265
4870
|
variable: false,
|
|
@@ -4410,6 +5015,53 @@ exports.issues = {
|
|
|
4410
5015
|
what: 'input element with a button role and type="checkbox" has no aria-pressed="true"'
|
|
4411
5016
|
}
|
|
4412
5017
|
},
|
|
5018
|
+
nuVnu: {
|
|
5019
|
+
'The aria-hidden attribute must not be specified on the noscript element.': {
|
|
5020
|
+
variable: false,
|
|
5021
|
+
quality: 1,
|
|
5022
|
+
what: 'noscript element has an aria-hidden attribute'
|
|
5023
|
+
},
|
|
5024
|
+
'The aria-checked attribute should not be used on an input element which has a type attribute whose value is radio.': {
|
|
5025
|
+
variable: false,
|
|
5026
|
+
quality: 1,
|
|
5027
|
+
what: 'input element with type="radio" has an aria-checked attribute'
|
|
5028
|
+
},
|
|
5029
|
+
'^Bad value for attribute .+ on element .+: Must be non-empty.*$': {
|
|
5030
|
+
variable: true,
|
|
5031
|
+
quality: 1,
|
|
5032
|
+
what: 'Attribute value is empty'
|
|
5033
|
+
},
|
|
5034
|
+
'^Bad value for attribute aria-hidden on element .+$': {
|
|
5035
|
+
variable: true,
|
|
5036
|
+
quality: 1,
|
|
5037
|
+
what: 'aria-hidden attribute has an empty value'
|
|
5038
|
+
},
|
|
5039
|
+
'The form attribute must refer to a form element.': {
|
|
5040
|
+
variable: false,
|
|
5041
|
+
quality: 1,
|
|
5042
|
+
what: 'form attribute does not reference a form element'
|
|
5043
|
+
},
|
|
5044
|
+
'The aria-checked attribute should not be used on an input element which has a type attribute whose value is checkbox.': {
|
|
5045
|
+
variable: false,
|
|
5046
|
+
quality: 1,
|
|
5047
|
+
what: 'input element with type checkbox has an aria-checked attribute'
|
|
5048
|
+
},
|
|
5049
|
+
'The aria-checked attribute must not be used on an input element which has a type attribute whose value is checkbox.': {
|
|
5050
|
+
variable: false,
|
|
5051
|
+
quality: 1,
|
|
5052
|
+
what: 'input element with type checkbox has an aria-checked attribute'
|
|
5053
|
+
},
|
|
5054
|
+
'An img element with no alt attribute must not have any aria-* attributes other than aria-hidden.': {
|
|
5055
|
+
variable: false,
|
|
5056
|
+
quality: 1,
|
|
5057
|
+
what: 'img element has no alt attribute but has an ARIA attribute other than aria-hidden'
|
|
5058
|
+
},
|
|
5059
|
+
'An input element with a type attribute whose value is checkbox and with a role attribute whose value is button must have an aria-pressed attribute whose value is true.': {
|
|
5060
|
+
variable: false,
|
|
5061
|
+
quality: 1,
|
|
5062
|
+
what: 'input element with a button role and type="checkbox" has no aria-pressed="true"'
|
|
5063
|
+
}
|
|
5064
|
+
},
|
|
4413
5065
|
qualWeb: {
|
|
4414
5066
|
'QW-ACT-R25': {
|
|
4415
5067
|
variable: false,
|
|
@@ -4465,6 +5117,18 @@ exports.issues = {
|
|
|
4465
5117
|
quality: 1,
|
|
4466
5118
|
what: 'Element has the max attribute but also the aria-valuemax attribute'
|
|
4467
5119
|
}
|
|
5120
|
+
},
|
|
5121
|
+
nuVnu: {
|
|
5122
|
+
'^Attribute aria-.+ is unnecessary for elements that have attribute .+$': {
|
|
5123
|
+
variable: true,
|
|
5124
|
+
quality: 1,
|
|
5125
|
+
what: 'ARIA attribute is redundant with the synonymous native attribute'
|
|
5126
|
+
},
|
|
5127
|
+
'The aria-valuemax attribute must not be used on an element which has a max attribute.': {
|
|
5128
|
+
variable: false,
|
|
5129
|
+
quality: 1,
|
|
5130
|
+
what: 'Element has the max attribute but also the aria-valuemax attribute'
|
|
5131
|
+
}
|
|
4468
5132
|
}
|
|
4469
5133
|
}
|
|
4470
5134
|
},
|
|
@@ -4558,6 +5222,18 @@ exports.issues = {
|
|
|
4558
5222
|
what: 'autocomplete attribute belongs to a hidden element but has an on or off value'
|
|
4559
5223
|
}
|
|
4560
5224
|
},
|
|
5225
|
+
nuVnu: {
|
|
5226
|
+
'Bad value for attribute autocomplete on element input: Must not be empty.': {
|
|
5227
|
+
variable: false,
|
|
5228
|
+
quality: 1,
|
|
5229
|
+
what: 'autocomplete attribute has an empty value'
|
|
5230
|
+
},
|
|
5231
|
+
'An input element with a type attribute whose value is hidden must not have an autocomplete attribute whose value is on or off.': {
|
|
5232
|
+
variable: false,
|
|
5233
|
+
quality: 1,
|
|
5234
|
+
what: 'autocomplete attribute belongs to a hidden element but has an on or off value'
|
|
5235
|
+
}
|
|
5236
|
+
},
|
|
4561
5237
|
qualWeb: {
|
|
4562
5238
|
'QW-ACT-R24': {
|
|
4563
5239
|
variable: false,
|
|
@@ -4946,6 +5622,18 @@ exports.issues = {
|
|
|
4946
5622
|
quality: 1,
|
|
4947
5623
|
what: 'aria-owns attribute has an empty value'
|
|
4948
5624
|
}
|
|
5625
|
+
},
|
|
5626
|
+
nuVnu: {
|
|
5627
|
+
'^Bad value for attribute .+ on element .+: An ID must not be the empty string.*$': {
|
|
5628
|
+
variable: true,
|
|
5629
|
+
quality: 1,
|
|
5630
|
+
what: 'id attribute has an empty value'
|
|
5631
|
+
},
|
|
5632
|
+
'^Bad value for attribute aria-owns on element .+: An IDREFS value must contain at least one non-whitespace character.*$': {
|
|
5633
|
+
variable: true,
|
|
5634
|
+
quality: 1,
|
|
5635
|
+
what: 'aria-owns attribute has an empty value'
|
|
5636
|
+
}
|
|
4949
5637
|
}
|
|
4950
5638
|
}
|
|
4951
5639
|
},
|
|
@@ -4961,6 +5649,13 @@ exports.issues = {
|
|
|
4961
5649
|
quality: 1,
|
|
4962
5650
|
what: 'target attribute on an a element is empty'
|
|
4963
5651
|
}
|
|
5652
|
+
},
|
|
5653
|
+
nuVnu: {
|
|
5654
|
+
'Bad value for attribute target on element a: Browsing context name must be at least one character long.': {
|
|
5655
|
+
variable: false,
|
|
5656
|
+
quality: 1,
|
|
5657
|
+
what: 'target attribute on an a element is empty'
|
|
5658
|
+
}
|
|
4964
5659
|
}
|
|
4965
5660
|
}
|
|
4966
5661
|
},
|
|
@@ -4976,6 +5671,13 @@ exports.issues = {
|
|
|
4976
5671
|
quality: 1,
|
|
4977
5672
|
what: 'Heading is within a heading'
|
|
4978
5673
|
}
|
|
5674
|
+
},
|
|
5675
|
+
nuVnu: {
|
|
5676
|
+
'Heading cannot be a child of another heading.': {
|
|
5677
|
+
variable: false,
|
|
5678
|
+
quality: 1,
|
|
5679
|
+
what: 'Heading is within a heading'
|
|
5680
|
+
}
|
|
4979
5681
|
}
|
|
4980
5682
|
}
|
|
4981
5683
|
},
|
|
@@ -5034,6 +5736,13 @@ exports.issues = {
|
|
|
5034
5736
|
what: 'Empty heading'
|
|
5035
5737
|
}
|
|
5036
5738
|
},
|
|
5739
|
+
nuVnu: {
|
|
5740
|
+
'Empty heading.': {
|
|
5741
|
+
variable: false,
|
|
5742
|
+
quality: 1,
|
|
5743
|
+
what: 'Empty heading'
|
|
5744
|
+
}
|
|
5745
|
+
},
|
|
5037
5746
|
qualWeb: {
|
|
5038
5747
|
'QW-ACT-R35': {
|
|
5039
5748
|
variable: false,
|
|
@@ -5084,6 +5793,13 @@ exports.issues = {
|
|
|
5084
5793
|
quality: 1,
|
|
5085
5794
|
what: 'type attribute is invalid'
|
|
5086
5795
|
}
|
|
5796
|
+
},
|
|
5797
|
+
nuVnu: {
|
|
5798
|
+
'The only allowed value for the type attribute for the style element is text/css (with no parameters). (But the attribute is not needed and should be omitted altogether.)': {
|
|
5799
|
+
variable: false,
|
|
5800
|
+
quality: 1,
|
|
5801
|
+
what: 'type attribute is invalid'
|
|
5802
|
+
}
|
|
5087
5803
|
}
|
|
5088
5804
|
}
|
|
5089
5805
|
},
|
|
@@ -5104,6 +5820,18 @@ exports.issues = {
|
|
|
5104
5820
|
quality: 1,
|
|
5105
5821
|
what: 'type attribute is unnecessary for a style element'
|
|
5106
5822
|
}
|
|
5823
|
+
},
|
|
5824
|
+
nuVnu: {
|
|
5825
|
+
'The type attribute is unnecessary for JavaScript resources.': {
|
|
5826
|
+
variable: false,
|
|
5827
|
+
quality: 1,
|
|
5828
|
+
what: 'type attribute is unnecessary for a JavaScript resource'
|
|
5829
|
+
},
|
|
5830
|
+
'The type attribute for the style element is not needed and should be omitted.': {
|
|
5831
|
+
variable: false,
|
|
5832
|
+
quality: 1,
|
|
5833
|
+
what: 'type attribute is unnecessary for a style element'
|
|
5834
|
+
}
|
|
5107
5835
|
}
|
|
5108
5836
|
}
|
|
5109
5837
|
},
|
|
@@ -5248,6 +5976,13 @@ exports.issues = {
|
|
|
5248
5976
|
what: 'Element has an empty title attribute'
|
|
5249
5977
|
}
|
|
5250
5978
|
},
|
|
5979
|
+
nuVnu: {
|
|
5980
|
+
'Element title must not be empty.': {
|
|
5981
|
+
variable: false,
|
|
5982
|
+
quality: 1,
|
|
5983
|
+
what: 'Element has an empty title attribute'
|
|
5984
|
+
}
|
|
5985
|
+
},
|
|
5251
5986
|
wax: {
|
|
5252
5987
|
'This form control has a "title" attribute that is empty or contains only spaces. It will be ignored for labelling test purposes.': {
|
|
5253
5988
|
variable: false,
|
|
@@ -5276,6 +6011,18 @@ exports.issues = {
|
|
|
5276
6011
|
what: 'Page does not include <!DOCTYPE html>'
|
|
5277
6012
|
}
|
|
5278
6013
|
},
|
|
6014
|
+
nuVnu: {
|
|
6015
|
+
'Start tag seen without seeing a doctype first. Expected <!DOCTYPE html>.': {
|
|
6016
|
+
variable: false,
|
|
6017
|
+
quality: 1,
|
|
6018
|
+
what: 'Page does not start with <!DOCTYPE html>'
|
|
6019
|
+
},
|
|
6020
|
+
'End of file seen without seeing a doctype first. Expected <!DOCTYPE html>.': {
|
|
6021
|
+
variable: false,
|
|
6022
|
+
quality: 1,
|
|
6023
|
+
what: 'Page does not include <!DOCTYPE html>'
|
|
6024
|
+
}
|
|
6025
|
+
},
|
|
5279
6026
|
testaro: {
|
|
5280
6027
|
docType: {
|
|
5281
6028
|
variable: false,
|
|
@@ -5298,6 +6045,13 @@ exports.issues = {
|
|
|
5298
6045
|
quality: 1,
|
|
5299
6046
|
what: 'DOCTYPE is in an invalid location'
|
|
5300
6047
|
}
|
|
6048
|
+
},
|
|
6049
|
+
nuVnu: {
|
|
6050
|
+
'Stray doctype.': {
|
|
6051
|
+
variable: false,
|
|
6052
|
+
quality: 1,
|
|
6053
|
+
what: 'DOCTYPE is in an invalid location'
|
|
6054
|
+
}
|
|
5301
6055
|
}
|
|
5302
6056
|
}
|
|
5303
6057
|
},
|
|
@@ -5314,6 +6068,13 @@ exports.issues = {
|
|
|
5314
6068
|
quality: 1,
|
|
5315
6069
|
what: 'document type declaration differs from <!DOCTYPE html>'
|
|
5316
6070
|
}
|
|
6071
|
+
},
|
|
6072
|
+
nuVnu: {
|
|
6073
|
+
'Almost standards mode doctype. Expected <!DOCTYPE html>.': {
|
|
6074
|
+
variable: false,
|
|
6075
|
+
quality: 1,
|
|
6076
|
+
what: 'document type declaration differs from <!DOCTYPE html>'
|
|
6077
|
+
}
|
|
5317
6078
|
}
|
|
5318
6079
|
}
|
|
5319
6080
|
},
|
|
@@ -5609,6 +6370,13 @@ exports.issues = {
|
|
|
5609
6370
|
what: 'Page contains more than 1 h1 element'
|
|
5610
6371
|
}
|
|
5611
6372
|
},
|
|
6373
|
+
nuVnu: {
|
|
6374
|
+
'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).': {
|
|
6375
|
+
variable: false,
|
|
6376
|
+
quality: 1,
|
|
6377
|
+
what: 'Page contains more than 1 h1 element'
|
|
6378
|
+
}
|
|
6379
|
+
},
|
|
5612
6380
|
wave: {
|
|
5613
6381
|
'h1_missing': {
|
|
5614
6382
|
variable: false,
|
|
@@ -5662,6 +6430,13 @@ exports.issues = {
|
|
|
5662
6430
|
quality: 1,
|
|
5663
6431
|
what: 'article has no heading'
|
|
5664
6432
|
}
|
|
6433
|
+
},
|
|
6434
|
+
nuVnu: {
|
|
6435
|
+
'Article lacks heading. Consider using h2-h6 elements to add identifying headings to all articles.': {
|
|
6436
|
+
variable: false,
|
|
6437
|
+
quality: 1,
|
|
6438
|
+
what: 'article has no heading'
|
|
6439
|
+
}
|
|
5665
6440
|
}
|
|
5666
6441
|
}
|
|
5667
6442
|
},
|
|
@@ -5682,6 +6457,18 @@ exports.issues = {
|
|
|
5682
6457
|
quality: 1,
|
|
5683
6458
|
what: 'section has no heading'
|
|
5684
6459
|
}
|
|
6460
|
+
},
|
|
6461
|
+
nuVnu: {
|
|
6462
|
+
'Section lacks heading. Consider using h2-h6 elements to add identifying headings to all sections.': {
|
|
6463
|
+
variable: false,
|
|
6464
|
+
quality: 1,
|
|
6465
|
+
what: 'section has no heading'
|
|
6466
|
+
},
|
|
6467
|
+
'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.': {
|
|
6468
|
+
variable: false,
|
|
6469
|
+
quality: 1,
|
|
6470
|
+
what: 'section has no heading'
|
|
6471
|
+
}
|
|
5685
6472
|
}
|
|
5686
6473
|
}
|
|
5687
6474
|
},
|
|
@@ -5980,8 +6767,15 @@ exports.issues = {
|
|
|
5980
6767
|
what: 'dl element has no child element'
|
|
5981
6768
|
}
|
|
5982
6769
|
},
|
|
5983
|
-
|
|
5984
|
-
'
|
|
6770
|
+
nuVnu: {
|
|
6771
|
+
'Element dl is missing a required child element.': {
|
|
6772
|
+
variable: false,
|
|
6773
|
+
quality: 1,
|
|
6774
|
+
what: 'dl element has no child element'
|
|
6775
|
+
}
|
|
6776
|
+
},
|
|
6777
|
+
wax: {
|
|
6778
|
+
'<ul> and <ol> must only directly contain <li>, <script> or <template> elements': {
|
|
5985
6779
|
variable: false,
|
|
5986
6780
|
quality: 1,
|
|
5987
6781
|
what: 'Element is ul or ol but directly contains an element other than li, script, or template'
|
|
@@ -6220,6 +7014,13 @@ exports.issues = {
|
|
|
6220
7014
|
quality: 1,
|
|
6221
7015
|
what: 'option element is empty but has no label attribute'
|
|
6222
7016
|
}
|
|
7017
|
+
},
|
|
7018
|
+
nuVnu: {
|
|
7019
|
+
'Element option without attribute label must not be empty.': {
|
|
7020
|
+
variable: false,
|
|
7021
|
+
quality: 1,
|
|
7022
|
+
what: 'option element is empty but has no label attribute'
|
|
7023
|
+
}
|
|
6223
7024
|
}
|
|
6224
7025
|
}
|
|
6225
7026
|
},
|
|
@@ -6531,6 +7332,23 @@ exports.issues = {
|
|
|
6531
7332
|
quality: 1,
|
|
6532
7333
|
what: 'Element is td but the prior cells in its table column do not exist'
|
|
6533
7334
|
}
|
|
7335
|
+
},
|
|
7336
|
+
nuVnu: {
|
|
7337
|
+
'^A table row was .+ columns wide, which is less than the column count established by the first row.*$': {
|
|
7338
|
+
variable: true,
|
|
7339
|
+
quality: 1,
|
|
7340
|
+
what: 'Table row has a column count smaller than that of the first row'
|
|
7341
|
+
},
|
|
7342
|
+
'^A table row was .+ columns wide and exceeded the column count established by the first row.*$': {
|
|
7343
|
+
variable: true,
|
|
7344
|
+
quality: 1,
|
|
7345
|
+
what: 'Table row has a column count larger than that of the first row'
|
|
7346
|
+
},
|
|
7347
|
+
'^Table column [0-9]+ established by element td has no cells beginning in it.*$': {
|
|
7348
|
+
variable: true,
|
|
7349
|
+
quality: 1,
|
|
7350
|
+
what: 'Element is td but the prior cells in its table column do not exist'
|
|
7351
|
+
}
|
|
6534
7352
|
}
|
|
6535
7353
|
}
|
|
6536
7354
|
},
|
|
@@ -6922,6 +7740,13 @@ exports.issues = {
|
|
|
6922
7740
|
quality: 1,
|
|
6923
7741
|
what: 'div element is inside a table element'
|
|
6924
7742
|
}
|
|
7743
|
+
},
|
|
7744
|
+
nuVnu: {
|
|
7745
|
+
'Start tag div seen in table.': {
|
|
7746
|
+
variable: false,
|
|
7747
|
+
quality: 1,
|
|
7748
|
+
what: 'div element is inside a table element'
|
|
7749
|
+
}
|
|
6925
7750
|
}
|
|
6926
7751
|
}
|
|
6927
7752
|
},
|
|
@@ -6937,6 +7762,13 @@ exports.issues = {
|
|
|
6937
7762
|
quality: 1,
|
|
6938
7763
|
what: 'form element is inside a table element'
|
|
6939
7764
|
}
|
|
7765
|
+
},
|
|
7766
|
+
nuVnu: {
|
|
7767
|
+
'Start tag form seen in table.': {
|
|
7768
|
+
variable: false,
|
|
7769
|
+
quality: 1,
|
|
7770
|
+
what: 'form element is inside a table element'
|
|
7771
|
+
}
|
|
6940
7772
|
}
|
|
6941
7773
|
}
|
|
6942
7774
|
},
|
|
@@ -6952,6 +7784,13 @@ exports.issues = {
|
|
|
6952
7784
|
quality: 1,
|
|
6953
7785
|
what: 'input element is inside a table element'
|
|
6954
7786
|
}
|
|
7787
|
+
},
|
|
7788
|
+
nuVnu: {
|
|
7789
|
+
'Start tag input seen in table.': {
|
|
7790
|
+
variable: false,
|
|
7791
|
+
quality: 1,
|
|
7792
|
+
what: 'input element is inside a table element'
|
|
7793
|
+
}
|
|
6955
7794
|
}
|
|
6956
7795
|
}
|
|
6957
7796
|
},
|
|
@@ -7312,6 +8151,93 @@ exports.issues = {
|
|
|
7312
8151
|
what: 'Element with a menu role is a descendant of an element with a button role'
|
|
7313
8152
|
}
|
|
7314
8153
|
},
|
|
8154
|
+
nuVnu: {
|
|
8155
|
+
'The element a must not appear as a descendant of an element with the attribute role=link.': {
|
|
8156
|
+
variable: false,
|
|
8157
|
+
quality: 1,
|
|
8158
|
+
what: 'a element is a descendant of an element with a link role'
|
|
8159
|
+
},
|
|
8160
|
+
'The element a must not appear as a descendant of an element with the attribute role=button.': {
|
|
8161
|
+
variable: false,
|
|
8162
|
+
quality: 1,
|
|
8163
|
+
what: 'a element is a descendant of an element with a button role'
|
|
8164
|
+
},
|
|
8165
|
+
'The element button must not appear as a descendant of the a element.': {
|
|
8166
|
+
variable: false,
|
|
8167
|
+
quality: 1,
|
|
8168
|
+
what: 'button element is a descendant of an a element'
|
|
8169
|
+
},
|
|
8170
|
+
'An element with the attribute role=button must not appear as a descendant of the a element.': {
|
|
8171
|
+
variable: false,
|
|
8172
|
+
quality: 1,
|
|
8173
|
+
what: 'Element with a button role is a descendant of an a element'
|
|
8174
|
+
},
|
|
8175
|
+
'The element button must not appear as a descendant of an element with the attribute role=button.': {
|
|
8176
|
+
variable: false,
|
|
8177
|
+
quality: 1,
|
|
8178
|
+
what: 'button element is a descendant of an element with a button role'
|
|
8179
|
+
},
|
|
8180
|
+
'An element with the attribute role=button must not appear as a descendant of an element with the attribute role=button.': {
|
|
8181
|
+
variable: false,
|
|
8182
|
+
quality: 1,
|
|
8183
|
+
what: 'Element with a button role is a descendant of an element with a button role'
|
|
8184
|
+
},
|
|
8185
|
+
'An element with the attribute role=button must not appear as a descendant of the button element.': {
|
|
8186
|
+
variable: false,
|
|
8187
|
+
quality: 1,
|
|
8188
|
+
what: 'Element with a button role is a descendant of a button element'
|
|
8189
|
+
},
|
|
8190
|
+
'The element label must not appear as a descendant of an element with the attribute role=button.': {
|
|
8191
|
+
variable: false,
|
|
8192
|
+
quality: 1,
|
|
8193
|
+
what: 'label element is a descendant of an element with a button role'
|
|
8194
|
+
},
|
|
8195
|
+
'The element select must not appear as a descendant of an element with the attribute role=button.': {
|
|
8196
|
+
variable: false,
|
|
8197
|
+
quality: 1,
|
|
8198
|
+
what: 'select element is a descendant of an element with a button role'
|
|
8199
|
+
},
|
|
8200
|
+
'An element with the attribute tabindex must not appear as a descendant of the a element.': {
|
|
8201
|
+
variable: false,
|
|
8202
|
+
quality: 1,
|
|
8203
|
+
what: 'descendant of an a element has a tabindex attribute'
|
|
8204
|
+
},
|
|
8205
|
+
'An element with the attribute tabindex must not appear as a descendant of an element with the attribute role=link.': {
|
|
8206
|
+
variable: false,
|
|
8207
|
+
quality: 1,
|
|
8208
|
+
what: 'descendant of an element with a link role has a tabindex attribute'
|
|
8209
|
+
},
|
|
8210
|
+
'An element with the attribute tabindex must not appear as a descendant of the button element.': {
|
|
8211
|
+
variable: false,
|
|
8212
|
+
quality: 1,
|
|
8213
|
+
what: 'descendant of a button element has a tabindex attribute'
|
|
8214
|
+
},
|
|
8215
|
+
'An element with the attribute tabindex must not appear as a descendant of an element with the attribute role=button.': {
|
|
8216
|
+
variable: false,
|
|
8217
|
+
quality: 1,
|
|
8218
|
+
what: 'descendant of an element with a button role has a tabindex attribute'
|
|
8219
|
+
},
|
|
8220
|
+
'An element with the attribute role=menu must not appear as a descendant of the a element.': {
|
|
8221
|
+
variable: false,
|
|
8222
|
+
quality: 1,
|
|
8223
|
+
what: 'Element with a menu role is a descendant of an a element'
|
|
8224
|
+
},
|
|
8225
|
+
'An element with the attribute role=menuitem must not appear as a descendant of the a element.': {
|
|
8226
|
+
variable: false,
|
|
8227
|
+
quality: 1,
|
|
8228
|
+
what: 'Element with a menuitem role is a descendant of an a element'
|
|
8229
|
+
},
|
|
8230
|
+
'An element with the attribute role=option must not appear as a descendant of the a element.': {
|
|
8231
|
+
variable: false,
|
|
8232
|
+
quality: 1,
|
|
8233
|
+
what: 'Element with an option role is a descendant of an a element'
|
|
8234
|
+
},
|
|
8235
|
+
'An element with the attribute role=menu must not appear as a descendant of an element with the attribute role=button.': {
|
|
8236
|
+
variable: false,
|
|
8237
|
+
quality: 1,
|
|
8238
|
+
what: 'Element with a menu role is a descendant of an element with a button role'
|
|
8239
|
+
}
|
|
8240
|
+
},
|
|
7315
8241
|
testaro: {
|
|
7316
8242
|
embAc: {
|
|
7317
8243
|
variable: false,
|
|
@@ -7717,6 +8643,13 @@ exports.issues = {
|
|
|
7717
8643
|
what: 'Page includes more than 1 visible main element'
|
|
7718
8644
|
}
|
|
7719
8645
|
},
|
|
8646
|
+
nuVnu: {
|
|
8647
|
+
'A document must not include more than one visible main element.': {
|
|
8648
|
+
variable: false,
|
|
8649
|
+
quality: 1,
|
|
8650
|
+
what: 'Page includes more than 1 visible main element'
|
|
8651
|
+
}
|
|
8652
|
+
},
|
|
7720
8653
|
wax: {
|
|
7721
8654
|
'Include only one main landmark in the document.': {
|
|
7722
8655
|
variable: false,
|
|
@@ -7915,6 +8848,13 @@ exports.issues = {
|
|
|
7915
8848
|
quality: 1,
|
|
7916
8849
|
what: 'form element nested within another form element'
|
|
7917
8850
|
}
|
|
8851
|
+
},
|
|
8852
|
+
nuVnu: {
|
|
8853
|
+
'Saw a form start tag, but there was already an active form element. Nested forms are not allowed. Ignoring the tag.': {
|
|
8854
|
+
variable: false,
|
|
8855
|
+
quality: 1,
|
|
8856
|
+
what: 'form element nested within another form element'
|
|
8857
|
+
}
|
|
7918
8858
|
}
|
|
7919
8859
|
}
|
|
7920
8860
|
},
|
|
@@ -8247,6 +9187,18 @@ exports.issues = {
|
|
|
8247
9187
|
quality: 1,
|
|
8248
9188
|
what: 'Element has multiple labelable descendants.'
|
|
8249
9189
|
}
|
|
9190
|
+
},
|
|
9191
|
+
nuVnu: {
|
|
9192
|
+
'The label element may contain at most one button, input, meter, output, progress, select, or textarea descendant.': {
|
|
9193
|
+
variable: false,
|
|
9194
|
+
quality: 1,
|
|
9195
|
+
what: 'Element has more than 1 labelable descendant.'
|
|
9196
|
+
},
|
|
9197
|
+
'label element with multiple labelable descendants.': {
|
|
9198
|
+
variable: false,
|
|
9199
|
+
quality: 1,
|
|
9200
|
+
what: 'Element has multiple labelable descendants.'
|
|
9201
|
+
}
|
|
8250
9202
|
}
|
|
8251
9203
|
}
|
|
8252
9204
|
},
|
|
@@ -8340,6 +9292,13 @@ exports.issues = {
|
|
|
8340
9292
|
quality: 1,
|
|
8341
9293
|
what: 'iframe element has a vulnerable sandbox value containing both allow-scripts and allow-same-origin'
|
|
8342
9294
|
}
|
|
9295
|
+
},
|
|
9296
|
+
nuVnu: {
|
|
9297
|
+
'^Potentially bad value .+ 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.*$': {
|
|
9298
|
+
variable: true,
|
|
9299
|
+
quality: 1,
|
|
9300
|
+
what: 'iframe element has a vulnerable sandbox value containing both allow-scripts and allow-same-origin'
|
|
9301
|
+
}
|
|
8343
9302
|
}
|
|
8344
9303
|
}
|
|
8345
9304
|
},
|
|
@@ -8866,6 +9825,13 @@ exports.issues = {
|
|
|
8866
9825
|
quality: 1,
|
|
8867
9826
|
what: 'Element has an invalid parent'
|
|
8868
9827
|
}
|
|
9828
|
+
},
|
|
9829
|
+
nuVnu: {
|
|
9830
|
+
'^Element .+ not allowed as child of element .+ in this context.*$': {
|
|
9831
|
+
variable: true,
|
|
9832
|
+
quality: 1,
|
|
9833
|
+
what: 'Element has an invalid parent'
|
|
9834
|
+
}
|
|
8869
9835
|
}
|
|
8870
9836
|
}
|
|
8871
9837
|
},
|
|
@@ -8952,6 +9918,13 @@ exports.issues = {
|
|
|
8952
9918
|
quality: 1,
|
|
8953
9919
|
what: 'tabindex attribute has an empty value instead of an integer'
|
|
8954
9920
|
}
|
|
9921
|
+
},
|
|
9922
|
+
nuVnu: {
|
|
9923
|
+
'^Bad value for attribute tabindex on element .+: The empty string is not a valid integer.*$': {
|
|
9924
|
+
variable: true,
|
|
9925
|
+
quality: 1,
|
|
9926
|
+
what: 'tabindex attribute has an empty value instead of an integer'
|
|
9927
|
+
}
|
|
8955
9928
|
}
|
|
8956
9929
|
}
|
|
8957
9930
|
},
|
|
@@ -9479,6 +10452,13 @@ exports.issues = {
|
|
|
9479
10452
|
quality: 1,
|
|
9480
10453
|
what: 'inputmode attribute is unsupported by some browsers'
|
|
9481
10454
|
}
|
|
10455
|
+
},
|
|
10456
|
+
nuVnu: {
|
|
10457
|
+
'The inputmode attribute is not supported in all browsers. Please be sure to test, and consider using a polyfill.': {
|
|
10458
|
+
variable: false,
|
|
10459
|
+
quality: 1,
|
|
10460
|
+
what: 'inputmode attribute is unsupported by some browsers'
|
|
10461
|
+
}
|
|
9482
10462
|
}
|
|
9483
10463
|
}
|
|
9484
10464
|
},
|
|
@@ -9546,6 +10526,38 @@ exports.issues = {
|
|
|
9546
10526
|
what: 'Attribute value is a deprecated language subtag'
|
|
9547
10527
|
}
|
|
9548
10528
|
},
|
|
10529
|
+
nuVnu: {
|
|
10530
|
+
'The border attribute is obsolete. Consider specifying img { border: 0; } in CSS instead.': {
|
|
10531
|
+
variable: false,
|
|
10532
|
+
quality: 1,
|
|
10533
|
+
what: 'border element is obsolete'
|
|
10534
|
+
},
|
|
10535
|
+
'^The .+ attribute on the .+ element is obsolete.*$': {
|
|
10536
|
+
variable: true,
|
|
10537
|
+
quality: 1,
|
|
10538
|
+
what: 'Attribute is obsolete on its element'
|
|
10539
|
+
},
|
|
10540
|
+
'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.)': {
|
|
10541
|
+
variable: false,
|
|
10542
|
+
quality: 1,
|
|
10543
|
+
what: 'charset attribute has a value other than utf-8 and is unnecessary'
|
|
10544
|
+
},
|
|
10545
|
+
'The only allowed value for the charset attribute for the meta element is utf-8.': {
|
|
10546
|
+
variable: false,
|
|
10547
|
+
quality: 1,
|
|
10548
|
+
what: 'charset attribute has a value other than utf-8 and is unnecessary'
|
|
10549
|
+
},
|
|
10550
|
+
'The name attribute is obsolete. Consider putting an id attribute on the nearest container instead.': {
|
|
10551
|
+
variable: false,
|
|
10552
|
+
quality: 1,
|
|
10553
|
+
what: 'name attribute is obsolete'
|
|
10554
|
+
},
|
|
10555
|
+
'^Potentially bad value .+ for attribute .+ on element .+: The language subtag .+ is deprecated.*$': {
|
|
10556
|
+
variable: true,
|
|
10557
|
+
quality: 1,
|
|
10558
|
+
what: 'Attribute value is a deprecated language subtag'
|
|
10559
|
+
}
|
|
10560
|
+
},
|
|
9549
10561
|
testaro: {
|
|
9550
10562
|
linkOldAtt: {
|
|
9551
10563
|
variable: false,
|
|
@@ -9623,6 +10635,23 @@ exports.issues = {
|
|
|
9623
10635
|
what: 'Language declaration in a meta element is obsolete'
|
|
9624
10636
|
}
|
|
9625
10637
|
},
|
|
10638
|
+
nuVnu: {
|
|
10639
|
+
'The center element is obsolete. Use CSS instead.': {
|
|
10640
|
+
variable: false,
|
|
10641
|
+
quality: 1,
|
|
10642
|
+
what: 'center element is obsolete'
|
|
10643
|
+
},
|
|
10644
|
+
'The font element is obsolete. Use CSS instead.': {
|
|
10645
|
+
variable: false,
|
|
10646
|
+
quality: 1,
|
|
10647
|
+
what: 'font element is obsolete'
|
|
10648
|
+
},
|
|
10649
|
+
'Using the meta element to specify the document-wide default language is obsolete. Consider specifying the language on the root element instead.': {
|
|
10650
|
+
variable: false,
|
|
10651
|
+
quality: 1,
|
|
10652
|
+
what: 'Language declaration in a meta element is obsolete'
|
|
10653
|
+
}
|
|
10654
|
+
},
|
|
9626
10655
|
qualWeb: {
|
|
9627
10656
|
'QW-BP10': {
|
|
9628
10657
|
variable: false,
|
|
@@ -9671,6 +10700,23 @@ exports.issues = {
|
|
|
9671
10700
|
quality: 1,
|
|
9672
10701
|
what: 'Media feature is deprecated'
|
|
9673
10702
|
}
|
|
10703
|
+
},
|
|
10704
|
+
nuVnu: {
|
|
10705
|
+
'Legacy doctype. Expected <!DOCTYPE html>.': {
|
|
10706
|
+
variable: false,
|
|
10707
|
+
quality: 1,
|
|
10708
|
+
what: 'doctype is obsolete'
|
|
10709
|
+
},
|
|
10710
|
+
'Obsolete doctype. Expected <!DOCTYPE html>.': {
|
|
10711
|
+
variable: false,
|
|
10712
|
+
quality: 1,
|
|
10713
|
+
what: 'DOCTYPE is obsolete instead of html'
|
|
10714
|
+
},
|
|
10715
|
+
'^CSS: Deprecated media feature .+$': {
|
|
10716
|
+
variable: true,
|
|
10717
|
+
quality: 1,
|
|
10718
|
+
what: 'Media feature is deprecated'
|
|
10719
|
+
}
|
|
9674
10720
|
}
|
|
9675
10721
|
}
|
|
9676
10722
|
},
|
|
@@ -9701,19 +10747,203 @@ exports.issues = {
|
|
|
9701
10747
|
quality: 1,
|
|
9702
10748
|
what: 'CSS @import at-rule is after an at-rule other than @charset or @import'
|
|
9703
10749
|
}
|
|
9704
|
-
}
|
|
9705
|
-
|
|
9706
|
-
|
|
9707
|
-
|
|
9708
|
-
|
|
9709
|
-
|
|
9710
|
-
|
|
9711
|
-
|
|
9712
|
-
|
|
9713
|
-
|
|
9714
|
-
|
|
9715
|
-
|
|
9716
|
-
|
|
10750
|
+
},
|
|
10751
|
+
nuVnu: {
|
|
10752
|
+
'^CSS: Unrecognized at-rule @.+$': {
|
|
10753
|
+
variable: true,
|
|
10754
|
+
quality: 1,
|
|
10755
|
+
what: 'At-rule not recognized by CSS'
|
|
10756
|
+
},
|
|
10757
|
+
'CSS: This profile has a very specific syntax for @charset: @charset followed by exactly one space, followed by the name of the encoding in quotes, followed immediately by a semicolon.': {
|
|
10758
|
+
variable: false,
|
|
10759
|
+
quality: 1,
|
|
10760
|
+
what: 'CSS @charset at-rule has an invalid format'
|
|
10761
|
+
},
|
|
10762
|
+
'CSS: The @charset rule may only occur at the start of the style sheet. Please check that there are no spaces before it.': {
|
|
10763
|
+
variable: false,
|
|
10764
|
+
quality: 1,
|
|
10765
|
+
what: 'CSS @charset at-rule is not at the start of its style sheet'
|
|
10766
|
+
},
|
|
10767
|
+
'CSS: @import are not allowed after any valid statement other than @charset and @import.': {
|
|
10768
|
+
variable: false,
|
|
10769
|
+
quality: 1,
|
|
10770
|
+
what: 'CSS @import at-rule is after an at-rule other than @charset or @import'
|
|
10771
|
+
}
|
|
10772
|
+
}
|
|
10773
|
+
}
|
|
10774
|
+
},
|
|
10775
|
+
cssInvalid: {
|
|
10776
|
+
summary: 'CSS invalid',
|
|
10777
|
+
why: 'Document cannot be properly displayed',
|
|
10778
|
+
wcag: '4.1',
|
|
10779
|
+
weight: 3,
|
|
10780
|
+
tools: {
|
|
10781
|
+
nuVal: {
|
|
10782
|
+
'CSS: z-index: This number should be an integer.': {
|
|
10783
|
+
variable: false,
|
|
10784
|
+
quality: 1,
|
|
10785
|
+
what: 'z-index style property has a non-integer value'
|
|
10786
|
+
},
|
|
10787
|
+
'^CSS: .+: Character .+ is neither a decimal digit number.*$': {
|
|
10788
|
+
variable: true,
|
|
10789
|
+
quality: 1,
|
|
10790
|
+
what: 'Nonnumeric character in a numeric style property'
|
|
10791
|
+
},
|
|
10792
|
+
'CSS: Parse Error. Style sheets should not include HTML syntax.': {
|
|
10793
|
+
variable: false,
|
|
10794
|
+
quality: 1,
|
|
10795
|
+
what: 'CSS style sheet includes HTML syntax'
|
|
10796
|
+
},
|
|
10797
|
+
'^CSS: column-count: .+ is not valid, only values greater than 0 allowed.*$': {
|
|
10798
|
+
variable: true,
|
|
10799
|
+
quality: 1,
|
|
10800
|
+
what: 'CSS column-count property has a nonpositive value'
|
|
10801
|
+
},
|
|
10802
|
+
'CSS: font-size: One operand must be a number.': {
|
|
10803
|
+
variable: false,
|
|
10804
|
+
quality: 1,
|
|
10805
|
+
what: 'CSS font-size property has no numeric operand'
|
|
10806
|
+
},
|
|
10807
|
+
'^CSS: font-weight: .+ is not valid, only values greater than or equal to 1.0 are allowed.*$': {
|
|
10808
|
+
variable: true,
|
|
10809
|
+
quality: 1,
|
|
10810
|
+
what: 'CSS font-weight property has a value smaller than 1'
|
|
10811
|
+
},
|
|
10812
|
+
'^CSS: font-weight: .+ is not valid, only values lower than or equal to 1000.0 are allowed.*$': {
|
|
10813
|
+
variable: true,
|
|
10814
|
+
quality: 1,
|
|
10815
|
+
what: 'CSS font-weight property has a value greater than 1000'
|
|
10816
|
+
},
|
|
10817
|
+
'^CSS: .+: Parse Error.*$': {
|
|
10818
|
+
variable: true,
|
|
10819
|
+
quality: 1,
|
|
10820
|
+
what: 'Invalid CSS'
|
|
10821
|
+
},
|
|
10822
|
+
'^CSS: .+: .+ is not a valid color 3 or 6 hexadecimals numbers.*$': {
|
|
10823
|
+
variable: true,
|
|
10824
|
+
quality: 1,
|
|
10825
|
+
what: 'Invalid hexadecimal color in CSS'
|
|
10826
|
+
},
|
|
10827
|
+
'^CSS: .+: .+ is not a .+ value.*$': {
|
|
10828
|
+
variable: true,
|
|
10829
|
+
quality: 1,
|
|
10830
|
+
what: 'Invalid value in CSS'
|
|
10831
|
+
},
|
|
10832
|
+
'^CSS: .+: Property .+ doesn\'t exist.*$': {
|
|
10833
|
+
variable: true,
|
|
10834
|
+
quality: 1,
|
|
10835
|
+
what: 'Invalid property in CSS'
|
|
10836
|
+
},
|
|
10837
|
+
'^CSS: .+: only 0 can be a length. You must put a unit after your number.*$': {
|
|
10838
|
+
variable: true,
|
|
10839
|
+
quality: 1,
|
|
10840
|
+
what: 'Length in CSS is nonzero but has no unit'
|
|
10841
|
+
},
|
|
10842
|
+
'^CSS: .*only 0 can be a unit. You must put a unit after your number.*$': {
|
|
10843
|
+
variable: true,
|
|
10844
|
+
quality: 1,
|
|
10845
|
+
what: 'Number in CSS is nonzero but has no unit'
|
|
10846
|
+
},
|
|
10847
|
+
'CSS: Parse Error.': {
|
|
10848
|
+
variable: false,
|
|
10849
|
+
quality: 1,
|
|
10850
|
+
what: 'Invalid CSS'
|
|
10851
|
+
},
|
|
10852
|
+
'^CSS: .+: Too many values or values are not recognized.*$': {
|
|
10853
|
+
variable: true,
|
|
10854
|
+
quality: 1,
|
|
10855
|
+
what: 'Invalid CSS value or too many values'
|
|
10856
|
+
},
|
|
10857
|
+
'^CSS: .+: Invalid type: .+$': {
|
|
10858
|
+
variable: true,
|
|
10859
|
+
quality: 1,
|
|
10860
|
+
what: 'Invalid type of CSS value'
|
|
10861
|
+
},
|
|
10862
|
+
'^CSS: .+: The types are incompatible.*$': {
|
|
10863
|
+
variable: true,
|
|
10864
|
+
quality: 1,
|
|
10865
|
+
what: 'Incompatible types of CSS values'
|
|
10866
|
+
},
|
|
10867
|
+
'^CSS: .+: Unknown dimension.*$': {
|
|
10868
|
+
variable: true,
|
|
10869
|
+
quality: 1,
|
|
10870
|
+
what: 'Unknown CSS dimension'
|
|
10871
|
+
},
|
|
10872
|
+
'^CSS: .+: Character array is missing "e" notation exponential mark.*$': {
|
|
10873
|
+
variable: true,
|
|
10874
|
+
quality: 1,
|
|
10875
|
+
what: 'Character array has no exponent mark e'
|
|
10876
|
+
},
|
|
10877
|
+
'^CSS: .+: is an incorrect operator.*$': {
|
|
10878
|
+
variable: true,
|
|
10879
|
+
quality: 1,
|
|
10880
|
+
what: 'Space is misused as a CSS operator'
|
|
10881
|
+
},
|
|
10882
|
+
'^CSS: .+: , is an incorrect operator.*$': {
|
|
10883
|
+
variable: true,
|
|
10884
|
+
quality: 1,
|
|
10885
|
+
what: 'Comma is misused as a CSS operator'
|
|
10886
|
+
},
|
|
10887
|
+
'^CSS: Unknown pseudo-element or pseudo-class :.+$': {
|
|
10888
|
+
variable: true,
|
|
10889
|
+
quality: 1,
|
|
10890
|
+
what: 'Unknown pseudo-element or pseudo-class'
|
|
10891
|
+
},
|
|
10892
|
+
'^CSS: unrecognized media .+$': {
|
|
10893
|
+
variable: true,
|
|
10894
|
+
quality: 1,
|
|
10895
|
+
what: 'Unrecognized media value'
|
|
10896
|
+
},
|
|
10897
|
+
'^CSS: .+ is not a :lang.+ value.*$': {
|
|
10898
|
+
variable: true,
|
|
10899
|
+
quality: 1,
|
|
10900
|
+
what: 'CSS pseudo-class :lang() has an invalid value'
|
|
10901
|
+
},
|
|
10902
|
+
'^CSS: .+: Missing a semicolon before the .+$': {
|
|
10903
|
+
variable: true,
|
|
10904
|
+
quality: 1,
|
|
10905
|
+
what: 'semicolon missing in CSS'
|
|
10906
|
+
},
|
|
10907
|
+
'^CSS: perspective: .+ is not valid, only values greater than 0 allowed.*$': {
|
|
10908
|
+
variable: true,
|
|
10909
|
+
quality: 0.5,
|
|
10910
|
+
what: 'CSS perspective property has a nonpositive value'
|
|
10911
|
+
},
|
|
10912
|
+
'^CSS: .+: Lexical error at line .+, column .+ Encountered: .+$': {
|
|
10913
|
+
variable: true,
|
|
10914
|
+
quality: 1,
|
|
10915
|
+
what: 'CSS property has a value with a lexical error'
|
|
10916
|
+
},
|
|
10917
|
+
'^CSS: transition: .+ is not valid, only values lower than or equal to 1.0 are allowed.*$': {
|
|
10918
|
+
variable: true,
|
|
10919
|
+
quality: 0.5,
|
|
10920
|
+
what: 'CSS transition property has a value greater than 1'
|
|
10921
|
+
},
|
|
10922
|
+
'CSS: -webkit-mask: too few values for the property linear-gradient.': {
|
|
10923
|
+
variable: false,
|
|
10924
|
+
quality: 1,
|
|
10925
|
+
what: 'CSS webkit-mask linear-gradient property has too few values'
|
|
10926
|
+
},
|
|
10927
|
+
'CSS: --solidHeaderNavigationColor: Cannot invoke "org.w3c.css.values.CssValue.getType()" because "val" is null.': {
|
|
10928
|
+
variable: false,
|
|
10929
|
+
quality: 1,
|
|
10930
|
+
what: 'CSS solidHeaderNavigationColor property is null'
|
|
10931
|
+
},
|
|
10932
|
+
'CSS: --gradientHeaderBackgroundColor: Cannot invoke "org.w3c.css.values.CssValue.getType()" because "val" is null.': {
|
|
10933
|
+
variable: false,
|
|
10934
|
+
quality: 1,
|
|
10935
|
+
what: 'CSS gradientHeaderBackgroundColor property is null'
|
|
10936
|
+
},
|
|
10937
|
+
'^CSS: In CSS1, a class name could start with a digit .+, unless it was a dimension .+ In CSS2, such classes are parsed as unknown dimensions .+ To make .+ a valid class, CSS2 requires the first digit to be escaped: .+$': {
|
|
10938
|
+
variable: true,
|
|
10939
|
+
quality: 0.5,
|
|
10940
|
+
what: 'CSS class name starts with an unescaped digit'
|
|
10941
|
+
}
|
|
10942
|
+
},
|
|
10943
|
+
nuVnu: {
|
|
10944
|
+
'CSS: z-index: This number should be an integer.': {
|
|
10945
|
+
variable: false,
|
|
10946
|
+
quality: 1,
|
|
9717
10947
|
what: 'z-index style property has a non-integer value'
|
|
9718
10948
|
},
|
|
9719
10949
|
'^CSS: .+: Character .+ is neither a decimal digit number.*$': {
|
|
@@ -9931,6 +11161,58 @@ exports.issues = {
|
|
|
9931
11161
|
quality: 1,
|
|
9932
11162
|
what: 'End tag has an attribute'
|
|
9933
11163
|
}
|
|
11164
|
+
},
|
|
11165
|
+
nuVnu: {
|
|
11166
|
+
'^Stray start tag .+$': {
|
|
11167
|
+
variable: true,
|
|
11168
|
+
quality: 1,
|
|
11169
|
+
what: 'Invalid start tag'
|
|
11170
|
+
},
|
|
11171
|
+
'^Stray end tag .+$': {
|
|
11172
|
+
variable: true,
|
|
11173
|
+
quality: 1,
|
|
11174
|
+
what: 'Invalid closing tag'
|
|
11175
|
+
},
|
|
11176
|
+
'^End tag [a-z]+\.$': {
|
|
11177
|
+
variable: true,
|
|
11178
|
+
quality: 1,
|
|
11179
|
+
what: 'Closing tag of an ineligible element'
|
|
11180
|
+
},
|
|
11181
|
+
'^Start tag .+ seen but an element of the same type was already open.*$': {
|
|
11182
|
+
variable: true,
|
|
11183
|
+
quality: 1,
|
|
11184
|
+
what: 'Element is invalidly a descendant of another such element'
|
|
11185
|
+
},
|
|
11186
|
+
'^End tag for .+ seen, but there were unclosed elements.*$': {
|
|
11187
|
+
variable: true,
|
|
11188
|
+
quality: 1,
|
|
11189
|
+
what: 'Element is closed while an element within it is unclosed'
|
|
11190
|
+
},
|
|
11191
|
+
'^End tag .+ seen, but there were open elements.*$': {
|
|
11192
|
+
variable: true,
|
|
11193
|
+
quality: 1,
|
|
11194
|
+
what: 'Element is closed while an element within it is unclosed'
|
|
11195
|
+
},
|
|
11196
|
+
'^End tag .+ implied, but there were open elements.*$': {
|
|
11197
|
+
variable: true,
|
|
11198
|
+
quality: 1,
|
|
11199
|
+
what: 'Element is implicitly closed while an element within it is unclosed'
|
|
11200
|
+
},
|
|
11201
|
+
'^Unclosed element .+$': {
|
|
11202
|
+
variable: true,
|
|
11203
|
+
quality: 1,
|
|
11204
|
+
what: 'Element is unclosed'
|
|
11205
|
+
},
|
|
11206
|
+
'^No .+ element in scope but a .+ end tag seen.*$': {
|
|
11207
|
+
variable: true,
|
|
11208
|
+
quality: 1,
|
|
11209
|
+
what: 'End tag for an element that is not in scope'
|
|
11210
|
+
},
|
|
11211
|
+
'End tag had attributes.': {
|
|
11212
|
+
variable: false,
|
|
11213
|
+
quality: 1,
|
|
11214
|
+
what: 'End tag has an attribute'
|
|
11215
|
+
}
|
|
9934
11216
|
}
|
|
9935
11217
|
}
|
|
9936
11218
|
},
|
|
@@ -9946,6 +11228,13 @@ exports.issues = {
|
|
|
9946
11228
|
quality: 1,
|
|
9947
11229
|
what: 'End tag violates nesting rules'
|
|
9948
11230
|
}
|
|
11231
|
+
},
|
|
11232
|
+
nuVnu: {
|
|
11233
|
+
'^End tag .+ violates nesting rules.*$': {
|
|
11234
|
+
variable: true,
|
|
11235
|
+
quality: 1,
|
|
11236
|
+
what: 'End tag violates nesting rules'
|
|
11237
|
+
}
|
|
9949
11238
|
}
|
|
9950
11239
|
}
|
|
9951
11240
|
},
|
|
@@ -10016,6 +11305,68 @@ exports.issues = {
|
|
|
10016
11305
|
quality: 1,
|
|
10017
11306
|
what: 'Numeric character entity represents a carriage return'
|
|
10018
11307
|
}
|
|
11308
|
+
},
|
|
11309
|
+
nuVnu: {
|
|
11310
|
+
'^Bad value [^`]+ Tab, new line or carriage return found.*$': {
|
|
11311
|
+
variable: true,
|
|
11312
|
+
quality: 1,
|
|
11313
|
+
what: 'Attribute value contains an illegal spacing character'
|
|
11314
|
+
},
|
|
11315
|
+
'^Bad character . after <. Probable cause: Unescaped <. Try escaping it as <.*$': {
|
|
11316
|
+
variable: true,
|
|
11317
|
+
quality: 1,
|
|
11318
|
+
what: 'Left angle bracket is followed by an invalid character'
|
|
11319
|
+
},
|
|
11320
|
+
'^Saw .+ when expecting an attribute name. Probable cause: (?:.+ missing|Missing .+) immediately before.*$': {
|
|
11321
|
+
variable: true,
|
|
11322
|
+
quality: 1,
|
|
11323
|
+
what: 'Invalid character appears where an attribute name must appear'
|
|
11324
|
+
},
|
|
11325
|
+
'^Bad element name .*: Code point .* is not allowed*$': {
|
|
11326
|
+
variable: true,
|
|
11327
|
+
quality: 1,
|
|
11328
|
+
what: 'Element name contains an invalid character'
|
|
11329
|
+
},
|
|
11330
|
+
'^Bad value .* for attribute href on element .+: Illegal character in path segment: .+ is not allowed.*$': {
|
|
11331
|
+
variable: true,
|
|
11332
|
+
quality: 1,
|
|
11333
|
+
what: 'href attribute path value contains an invalid character in a segment'
|
|
11334
|
+
},
|
|
11335
|
+
'^Bad value .* for attribute src on element .+: Illegal character in path segment: .+ is not allowed.*$': {
|
|
11336
|
+
variable: true,
|
|
11337
|
+
quality: 1,
|
|
11338
|
+
what: 'src attribute path value contains an invalid character in a segment'
|
|
11339
|
+
},
|
|
11340
|
+
'^Bad value .* for attribute href on element .+: Illegal character in query: .+ is not allowed.*$': {
|
|
11341
|
+
variable: true,
|
|
11342
|
+
quality: 1,
|
|
11343
|
+
what: 'href attribute query value contains an invalid character'
|
|
11344
|
+
},
|
|
11345
|
+
'^Bad value .* for attribute src on element .+: Illegal character in query: .+ is not allowed.*$': {
|
|
11346
|
+
variable: true,
|
|
11347
|
+
quality: 1,
|
|
11348
|
+
what: 'src attribute query value contains an invalid character'
|
|
11349
|
+
},
|
|
11350
|
+
'^Bad value .+ for attribute src on element .+: Tab, new line or carriage return found.*$': {
|
|
11351
|
+
variable: true,
|
|
11352
|
+
quality: 1,
|
|
11353
|
+
what: 'src attribute value contains a tab, newline, or return character'
|
|
11354
|
+
},
|
|
11355
|
+
'Non-space character inside noscript inside head.': {
|
|
11356
|
+
variable: false,
|
|
11357
|
+
quality: 1,
|
|
11358
|
+
what: 'noscript element inside the head element has a nonspace text-node child'
|
|
11359
|
+
},
|
|
11360
|
+
'^.+ in an unquoted attribute value. Probable causes: Attributes running together or a URL query string in an unquoted attribute value.*$': {
|
|
11361
|
+
variable: true,
|
|
11362
|
+
quality: 1,
|
|
11363
|
+
what: 'Attribute has a value containing invalid punctuation'
|
|
11364
|
+
},
|
|
11365
|
+
'A numeric character reference expanded to carriage return.': {
|
|
11366
|
+
variable: false,
|
|
11367
|
+
quality: 1,
|
|
11368
|
+
what: 'Numeric character entity represents a carriage return'
|
|
11369
|
+
}
|
|
10019
11370
|
}
|
|
10020
11371
|
}
|
|
10021
11372
|
},
|
|
@@ -10031,6 +11382,13 @@ exports.issues = {
|
|
|
10031
11382
|
quality: 1,
|
|
10032
11383
|
what: '& not escaped or used in an unterminated character reference'
|
|
10033
11384
|
}
|
|
11385
|
+
},
|
|
11386
|
+
nuVnu: {
|
|
11387
|
+
'Named character reference was not terminated by a semicolon. (Or & should have been escaped as &.)': {
|
|
11388
|
+
variable: false,
|
|
11389
|
+
quality: 1,
|
|
11390
|
+
what: '& not escaped or used in an unterminated character reference'
|
|
11391
|
+
}
|
|
10034
11392
|
}
|
|
10035
11393
|
}
|
|
10036
11394
|
},
|
|
@@ -10051,6 +11409,18 @@ exports.issues = {
|
|
|
10051
11409
|
quality: 1,
|
|
10052
11410
|
what: 'time element has text content that is not in the time-datetime format'
|
|
10053
11411
|
}
|
|
11412
|
+
},
|
|
11413
|
+
nuVnu: {
|
|
11414
|
+
'^The text content of element .+ was not in the required format: Expected .+ but found .+ instead.*$': {
|
|
11415
|
+
variable: true,
|
|
11416
|
+
quality: 1,
|
|
11417
|
+
what: 'Element has text content with invalid format'
|
|
11418
|
+
},
|
|
11419
|
+
'The text content of element time was not in the required format: The literal did not satisfy the time-datetime format.': {
|
|
11420
|
+
variable: false,
|
|
11421
|
+
quality: 1,
|
|
11422
|
+
what: 'time element has text content that is not in the time-datetime format'
|
|
11423
|
+
}
|
|
10054
11424
|
}
|
|
10055
11425
|
}
|
|
10056
11426
|
},
|
|
@@ -10172,6 +11542,118 @@ exports.issues = {
|
|
|
10172
11542
|
what: 'Element start tag contains a nonfinal slash'
|
|
10173
11543
|
}
|
|
10174
11544
|
},
|
|
11545
|
+
nuVnu: {
|
|
11546
|
+
'^End tag .+ did not match the name of the current open element (.+).*$': {
|
|
11547
|
+
variable: true,
|
|
11548
|
+
quality: 1,
|
|
11549
|
+
what: 'End tag clippath conflicts with the current open element.'
|
|
11550
|
+
},
|
|
11551
|
+
'^Self-closing syntax .+ used on a non-void HTML element.*$': {
|
|
11552
|
+
variable: true,
|
|
11553
|
+
quality: 1,
|
|
11554
|
+
what: 'Self-closing syntax used on a non-void element'
|
|
11555
|
+
},
|
|
11556
|
+
'No space between attributes.': {
|
|
11557
|
+
variable: true,
|
|
11558
|
+
quality: 1,
|
|
11559
|
+
what: 'No space between attributes'
|
|
11560
|
+
},
|
|
11561
|
+
'Saw <?. Probable cause: Attempt to use an XML processing instruction in HTML. (XML processing instructions are not supported in HTML.)': {
|
|
11562
|
+
variable: false,
|
|
11563
|
+
quality: 1,
|
|
11564
|
+
what: 'Left angle bracket is followed by a question mark'
|
|
11565
|
+
},
|
|
11566
|
+
'^The aria-hidden attribute must not be specified on the .+ element.*$': {
|
|
11567
|
+
variable: true,
|
|
11568
|
+
quality: 1,
|
|
11569
|
+
what: 'aria-hidden attribute is invalid for its element'
|
|
11570
|
+
},
|
|
11571
|
+
'The aria-hidden attribute must not be specified on an input element whose type attribute has the value hidden.': {
|
|
11572
|
+
variable: false,
|
|
11573
|
+
quality: 1,
|
|
11574
|
+
what: 'aria-hidden attribute is invalid for an input element with type="hidden"'
|
|
11575
|
+
},
|
|
11576
|
+
'^Bad start tag in .+$': {
|
|
11577
|
+
variable: true,
|
|
11578
|
+
quality: 1,
|
|
11579
|
+
what: 'Invalid start tag'
|
|
11580
|
+
},
|
|
11581
|
+
'Saw <!-- within a comment. Probable cause: Nested comment (not allowed).': {
|
|
11582
|
+
variable: false,
|
|
11583
|
+
quality: 1,
|
|
11584
|
+
what: 'Comment is nested within a comment'
|
|
11585
|
+
},
|
|
11586
|
+
'The document is not mappable to XML 1.0 due to two consecutive hyphens in a comment.': {
|
|
11587
|
+
variable: false,
|
|
11588
|
+
quality: 1,
|
|
11589
|
+
what: 'Comment contains --'
|
|
11590
|
+
},
|
|
11591
|
+
'The document is not mappable to XML 1.0 due to a trailing hyphen in a comment.': {
|
|
11592
|
+
variable: false,
|
|
11593
|
+
quality: 1,
|
|
11594
|
+
what: 'Comment ends with -'
|
|
11595
|
+
},
|
|
11596
|
+
'Bogus comment.': {
|
|
11597
|
+
variable: false,
|
|
11598
|
+
quality: 1,
|
|
11599
|
+
what: 'Comment is missing a valid termination'
|
|
11600
|
+
},
|
|
11601
|
+
'^Element name .+ cannot be represented as XML 1[.]0.*$': {
|
|
11602
|
+
variable: true,
|
|
11603
|
+
quality: 1,
|
|
11604
|
+
what: 'Invalid element name'
|
|
11605
|
+
},
|
|
11606
|
+
'^Quote . in attribute name[.] Probable cause: Matching quote missing somewhere earlier.*$': {
|
|
11607
|
+
variable: true,
|
|
11608
|
+
quality: 1,
|
|
11609
|
+
what: 'Attribute name includes an apostrophe or double quotation mark'
|
|
11610
|
+
},
|
|
11611
|
+
'Element script must not have attribute async unless attribute src is also specified or unless attribute type is specified with value module.': {
|
|
11612
|
+
variable: false,
|
|
11613
|
+
quality: 1,
|
|
11614
|
+
what: 'script element has an async attribute but has no src or value=module attribute'
|
|
11615
|
+
},
|
|
11616
|
+
'^Text not allowed in element .+ in this context.*$': {
|
|
11617
|
+
variable: true,
|
|
11618
|
+
quality: 1,
|
|
11619
|
+
what: 'Element contains text, which is not allowed here'
|
|
11620
|
+
},
|
|
11621
|
+
'^The .+ element must not appear as a descendant of the .+ element.*$': {
|
|
11622
|
+
variable: true,
|
|
11623
|
+
quality: 1,
|
|
11624
|
+
what: 'Element has an invalid ancestor'
|
|
11625
|
+
},
|
|
11626
|
+
'^The element .+ must not appear as a descendant of the .+ element.*$': {
|
|
11627
|
+
variable: true,
|
|
11628
|
+
quality: 1,
|
|
11629
|
+
what: 'Element has an invalid ancestor'
|
|
11630
|
+
},
|
|
11631
|
+
'Element script must not have attribute charset unless attribute src is also specified.': {
|
|
11632
|
+
variable: false,
|
|
11633
|
+
quality: 1,
|
|
11634
|
+
what: 'script element has a charset attribute but no src attribute'
|
|
11635
|
+
},
|
|
11636
|
+
'^java.util.concurrent.TimeoutException: Idle timeout expired: .+ ms.*$': {
|
|
11637
|
+
variable: true,
|
|
11638
|
+
quality: 1,
|
|
11639
|
+
what: 'Idle timeout expired'
|
|
11640
|
+
},
|
|
11641
|
+
'style element between head and body.': {
|
|
11642
|
+
variable: false,
|
|
11643
|
+
quality: 1,
|
|
11644
|
+
what: 'style element exists between the head and the body elements'
|
|
11645
|
+
},
|
|
11646
|
+
'^HTML start tag .+ in a foreign namespace context.*$': {
|
|
11647
|
+
variable: true,
|
|
11648
|
+
quality: 1,
|
|
11649
|
+
what: 'Element is invalid because its namespace is not HTML'
|
|
11650
|
+
},
|
|
11651
|
+
'A slash was not immediately followed by >.': {
|
|
11652
|
+
variable: false,
|
|
11653
|
+
quality: 1,
|
|
11654
|
+
what: 'Element start tag contains a nonfinal slash'
|
|
11655
|
+
}
|
|
11656
|
+
},
|
|
10175
11657
|
qualWeb: {
|
|
10176
11658
|
'QW-WCAG-T16': {
|
|
10177
11659
|
variable: false,
|
|
@@ -10201,6 +11683,13 @@ exports.issues = {
|
|
|
10201
11683
|
quality: 1,
|
|
10202
11684
|
what: 'Encoding declaration disagrees with the actual encoding of the page'
|
|
10203
11685
|
}
|
|
11686
|
+
},
|
|
11687
|
+
nuVnu: {
|
|
11688
|
+
'^Internal encoding declaration .+ disagrees with the actual encoding of the document.*$': {
|
|
11689
|
+
variable: true,
|
|
11690
|
+
quality: 1,
|
|
11691
|
+
what: 'Encoding declaration disagrees with the actual encoding of the page'
|
|
11692
|
+
}
|
|
10204
11693
|
}
|
|
10205
11694
|
}
|
|
10206
11695
|
},
|
|
@@ -10231,6 +11720,28 @@ exports.issues = {
|
|
|
10231
11720
|
quality: 1,
|
|
10232
11721
|
what: 'Invalid Unicode code point'
|
|
10233
11722
|
}
|
|
11723
|
+
},
|
|
11724
|
+
nuVnu: {
|
|
11725
|
+
'^Internal encoding declaration named an unsupported chararacter encoding .*$': {
|
|
11726
|
+
variable: true,
|
|
11727
|
+
quality: 1,
|
|
11728
|
+
what: 'Encoding declaration names an unsupported character encoding'
|
|
11729
|
+
},
|
|
11730
|
+
'Text run is not in Unicode Normalization Form C.': {
|
|
11731
|
+
variable: false,
|
|
11732
|
+
quality: 1,
|
|
11733
|
+
what: 'Text run is not in Unicode Normalization Form C'
|
|
11734
|
+
},
|
|
11735
|
+
'^The value of attribute .+ on element .+ from namespace .+ is not in Unicode Normalization Form C.*$': {
|
|
11736
|
+
variable: true,
|
|
11737
|
+
quality: 1,
|
|
11738
|
+
what: 'Value of attribute is not in Unicode Normalization Form C'
|
|
11739
|
+
},
|
|
11740
|
+
'^Forbidden code point U+.*$': {
|
|
11741
|
+
variable: true,
|
|
11742
|
+
quality: 1,
|
|
11743
|
+
what: 'Invalid Unicode code point'
|
|
11744
|
+
}
|
|
10234
11745
|
}
|
|
10235
11746
|
}
|
|
10236
11747
|
},
|
|
@@ -10247,6 +11758,13 @@ exports.issues = {
|
|
|
10247
11758
|
quality: 1,
|
|
10248
11759
|
what: 'Page includes a Unicode PUA character'
|
|
10249
11760
|
}
|
|
11761
|
+
},
|
|
11762
|
+
nuVnu: {
|
|
11763
|
+
'Document uses the Unicode Private Use Area(s), which should not be used in publicly exchanged documents. (Charmod C073)': {
|
|
11764
|
+
variable: false,
|
|
11765
|
+
quality: 1,
|
|
11766
|
+
what: 'Page includes a Unicode PUA character'
|
|
11767
|
+
}
|
|
10250
11768
|
}
|
|
10251
11769
|
}
|
|
10252
11770
|
},
|
|
@@ -10289,6 +11807,23 @@ exports.issues = {
|
|
|
10289
11807
|
quality: 1,
|
|
10290
11808
|
what: 'Testing was interrupted by a fatal excess of the message count'
|
|
10291
11809
|
}
|
|
11810
|
+
},
|
|
11811
|
+
nuVnu: {
|
|
11812
|
+
'Cannot recover after last error. Any further errors will be ignored.': {
|
|
11813
|
+
variable: false,
|
|
11814
|
+
quality: 1,
|
|
11815
|
+
what: 'Testing was interrupted by a fatal error'
|
|
11816
|
+
},
|
|
11817
|
+
'Oops. That was not supposed to happen. A bug manifested itself in the application internals. Unable to continue. Sorry. The admin was notified.': {
|
|
11818
|
+
variable: false,
|
|
11819
|
+
quality: 1,
|
|
11820
|
+
what: 'Testing was interrupted by a fatal application-internal error'
|
|
11821
|
+
},
|
|
11822
|
+
'Too many messages.': {
|
|
11823
|
+
variable: false,
|
|
11824
|
+
quality: 1,
|
|
11825
|
+
what: 'Testing was interrupted by a fatal excess of the message count'
|
|
11826
|
+
}
|
|
10292
11827
|
}
|
|
10293
11828
|
}
|
|
10294
11829
|
},
|
|
@@ -10319,6 +11854,13 @@ exports.issues = {
|
|
|
10319
11854
|
quality: 1,
|
|
10320
11855
|
what: 'SVG version specified is not 1.1 and so nuVal cannot validate it'
|
|
10321
11856
|
}
|
|
11857
|
+
},
|
|
11858
|
+
nuVnu: {
|
|
11859
|
+
'Unsupported SVG version specified. This validator only supports SVG 1.1. The recommended way to suppress this warning is to remove the version attribute altogether.': {
|
|
11860
|
+
variable: false,
|
|
11861
|
+
quality: 1,
|
|
11862
|
+
what: 'SVG version specified is not 1.1 and so nuVal cannot validate it'
|
|
11863
|
+
}
|
|
10322
11864
|
}
|
|
10323
11865
|
}
|
|
10324
11866
|
}
|