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.
@@ -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
- qualWeb: {
3247
- 'QW-ACT-R14': {
3528
+ nuVnu: {
3529
+ 'Consider avoiding viewport values that prevent users from resizing documents.': {
3248
3530
  variable: false,
3249
3531
  quality: 1,
3250
- what: 'meta viewport prevents zoom'
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
- wax: {
4156
- 'Ensure ARIA attributes have valid values as per specifications.': {
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: 'image element has no height attribute or has no width attribute'
4689
+ what: 'Attribute on this element has an invalid value'
4175
4690
  },
4176
- '^Element .+ is missing one or more of the following attributes: .+$': {
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
- wax: {
5984
- '<ul> and <ol> must only directly contain <li>, <script> or <template> elements': {
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
- cssInvalid: {
9708
- summary: 'CSS invalid',
9709
- why: 'Document cannot be properly displayed',
9710
- wcag: '4.1',
9711
- weight: 3,
9712
- tools: {
9713
- nuVal: {
9714
- 'CSS: z-index: This number should be an integer.': {
9715
- variable: false,
9716
- quality: 1,
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 &lt;.*$': {
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 &amp;.)': {
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
  }