testilo 44.2.1 → 44.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/procs/score/tic.js +146 -42
package/package.json
CHANGED
package/procs/score/tic.js
CHANGED
|
@@ -209,6 +209,11 @@ exports.issues = {
|
|
|
209
209
|
quality: 1,
|
|
210
210
|
what: 'Multiple landmarks with the same parent region are not distinguished from one another [invalid on invisible elements]'
|
|
211
211
|
},
|
|
212
|
+
html_lang_exists: {
|
|
213
|
+
variable: false,
|
|
214
|
+
quality: 1,
|
|
215
|
+
what: 'Page detected as HTML, but has no lang attribute [invalid]'
|
|
216
|
+
},
|
|
212
217
|
style_background_decorative: {
|
|
213
218
|
variable: false,
|
|
214
219
|
quality: 1,
|
|
@@ -1376,6 +1381,11 @@ exports.issues = {
|
|
|
1376
1381
|
variable: false,
|
|
1377
1382
|
quality: 1,
|
|
1378
1383
|
what: 'img element with alt="" has a role attribute'
|
|
1384
|
+
},
|
|
1385
|
+
'An img element with a role attribute must not have an alt attribute whose value is the empty string.': {
|
|
1386
|
+
variable: false,
|
|
1387
|
+
quality: 1,
|
|
1388
|
+
what: 'img element with a role attribute has alt=""'
|
|
1379
1389
|
}
|
|
1380
1390
|
},
|
|
1381
1391
|
nuVnu: {
|
|
@@ -1383,6 +1393,11 @@ exports.issues = {
|
|
|
1383
1393
|
variable: false,
|
|
1384
1394
|
quality: 1,
|
|
1385
1395
|
what: 'img element with alt="" has a role attribute'
|
|
1396
|
+
},
|
|
1397
|
+
'An img element with a role attribute must not have an alt attribute whose value is the empty string.': {
|
|
1398
|
+
variable: false,
|
|
1399
|
+
quality: 1,
|
|
1400
|
+
what: 'img element with a role attribute has alt=""'
|
|
1386
1401
|
}
|
|
1387
1402
|
},
|
|
1388
1403
|
qualWeb: {
|
|
@@ -1434,13 +1449,6 @@ exports.issues = {
|
|
|
1434
1449
|
what: 'html element has no lang or xml:lang attribute'
|
|
1435
1450
|
}
|
|
1436
1451
|
},
|
|
1437
|
-
ibm: {
|
|
1438
|
-
html_lang_exists: {
|
|
1439
|
-
variable: false,
|
|
1440
|
-
quality: 1,
|
|
1441
|
-
what: 'Page detected as HTML, but has no lang attribute'
|
|
1442
|
-
}
|
|
1443
|
-
},
|
|
1444
1452
|
nuVal: {
|
|
1445
1453
|
'Consider adding a lang attribute to the html start tag to declare the language of this document.': {
|
|
1446
1454
|
variable: false,
|
|
@@ -4040,6 +4048,16 @@ exports.issues = {
|
|
|
4040
4048
|
variable: false,
|
|
4041
4049
|
quality: 1,
|
|
4042
4050
|
what: 'Element is script and has a src attribute but its type is not empty, a JS MIME type, or module'
|
|
4051
|
+
},
|
|
4052
|
+
'A script element with a type attribute whose value is neither a JavaScript MIME type, module, importmap, nor speculationrules (i.e., a data block) must not have a defer attribute.': {
|
|
4053
|
+
variable: false,
|
|
4054
|
+
quality: 1,
|
|
4055
|
+
what: 'Element is not eligible for a defer attribute but has one'
|
|
4056
|
+
},
|
|
4057
|
+
'A script element with a type attribute whose value is neither a JavaScript MIME type, module, importmap, nor speculationrules (i.e., a data block) must not have an async attribute.': {
|
|
4058
|
+
variable: false,
|
|
4059
|
+
quality: 1,
|
|
4060
|
+
what: 'Element is not eligible for an async attribute but has one'
|
|
4043
4061
|
}
|
|
4044
4062
|
},
|
|
4045
4063
|
nuVnu: {
|
|
@@ -4057,6 +4075,38 @@ exports.issues = {
|
|
|
4057
4075
|
variable: false,
|
|
4058
4076
|
quality: 1,
|
|
4059
4077
|
what: 'Element is script and has a src attribute but its type is not empty, a JS MIME type, or module'
|
|
4078
|
+
},
|
|
4079
|
+
'A script element with a type attribute whose value is neither a JavaScript MIME type, module, importmap, nor speculationrules (i.e., a data block) must not have a defer attribute.': {
|
|
4080
|
+
variable: false,
|
|
4081
|
+
quality: 1,
|
|
4082
|
+
what: 'Element is not eligible for a defer attribute but has one'
|
|
4083
|
+
},
|
|
4084
|
+
'A script element with a type attribute whose value is neither a JavaScript MIME type, module, importmap, nor speculationrules (i.e., a data block) must not have an async attribute.': {
|
|
4085
|
+
variable: false,
|
|
4086
|
+
quality: 1,
|
|
4087
|
+
what: 'Element is not eligible for an async attribute but has one'
|
|
4088
|
+
}
|
|
4089
|
+
}
|
|
4090
|
+
}
|
|
4091
|
+
},
|
|
4092
|
+
specRulesScriptBad: {
|
|
4093
|
+
summary: 'speculation rules script element invalid',
|
|
4094
|
+
why: 'Document navigation performs poorly',
|
|
4095
|
+
wcag: '1.3.1',
|
|
4096
|
+
weight: 1,
|
|
4097
|
+
tools: {
|
|
4098
|
+
nuVal: {
|
|
4099
|
+
'The href_matches property in a document rule must be a string.': {
|
|
4100
|
+
variable: false,
|
|
4101
|
+
quality: 1,
|
|
4102
|
+
what: 'Element is script with type=speculationrules but its href_matches value is not a string'
|
|
4103
|
+
}
|
|
4104
|
+
},
|
|
4105
|
+
nuVnu: {
|
|
4106
|
+
'The href_matches property in a document rule must be a string.': {
|
|
4107
|
+
variable: false,
|
|
4108
|
+
quality: 1,
|
|
4109
|
+
what: 'Element is script with type=speculationrules but its href_matches value is not a string'
|
|
4060
4110
|
}
|
|
4061
4111
|
}
|
|
4062
4112
|
}
|
|
@@ -4515,35 +4565,10 @@ exports.issues = {
|
|
|
4515
4565
|
quality: 1,
|
|
4516
4566
|
what: 'Page includes more than one autofocus attribute'
|
|
4517
4567
|
},
|
|
4518
|
-
'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.': {
|
|
4519
|
-
variable: false,
|
|
4520
|
-
quality: 1,
|
|
4521
|
-
what: 'link element has a sizes attribute but no icon-type rel attribute'
|
|
4522
|
-
},
|
|
4523
4568
|
'An input element with a type attribute whose value is hidden must not have any aria-* attributes.': {
|
|
4524
4569
|
variable: false,
|
|
4525
4570
|
quality: 1,
|
|
4526
4571
|
what: 'hidden-type input element has an ARIA attribute'
|
|
4527
|
-
},
|
|
4528
|
-
'The sizes attribute may be specified only if the srcset attribute is also present.': {
|
|
4529
|
-
variable: false,
|
|
4530
|
-
quality: 1,
|
|
4531
|
-
what: 'Element has a sizes attribute but no srcset attribute'
|
|
4532
|
-
},
|
|
4533
|
-
'The sizes attribute must only be specified if the srcset attribute is also specified.': {
|
|
4534
|
-
variable: false,
|
|
4535
|
-
quality: 1,
|
|
4536
|
-
what: 'Element has a sizes attribute but no srcset attribute'
|
|
4537
|
-
},
|
|
4538
|
-
'When the srcset attribute has any image candidate string with a width descriptor, the sizes attribute must also be present.': {
|
|
4539
|
-
variable: false,
|
|
4540
|
-
quality: 1,
|
|
4541
|
-
what: 'Element with a srcset attribute with a width has no sizes attribute'
|
|
4542
|
-
},
|
|
4543
|
-
'When the srcset attribute has any image candidate string with a width descriptor, the sizes attribute must also be specified.': {
|
|
4544
|
-
variable: false,
|
|
4545
|
-
quality: 1,
|
|
4546
|
-
what: 'Element with a srcset attribute with a width has no valid sizes attribute'
|
|
4547
4572
|
}
|
|
4548
4573
|
},
|
|
4549
4574
|
nuVnu: {
|
|
@@ -4582,15 +4607,37 @@ exports.issues = {
|
|
|
4582
4607
|
quality: 1,
|
|
4583
4608
|
what: 'Page includes more than one autofocus attribute'
|
|
4584
4609
|
},
|
|
4585
|
-
'
|
|
4610
|
+
'An input element with a type attribute whose value is hidden must not have any aria-* attributes.': {
|
|
4586
4611
|
variable: false,
|
|
4587
4612
|
quality: 1,
|
|
4588
|
-
what: '
|
|
4613
|
+
what: 'hidden-type input element has an ARIA attribute'
|
|
4614
|
+
}
|
|
4615
|
+
},
|
|
4616
|
+
wax: {
|
|
4617
|
+
'Elements must only use allowed ARIA attributes': {
|
|
4618
|
+
variable: false,
|
|
4619
|
+
quality: 1,
|
|
4620
|
+
what: 'Element has an ARIA attribute that is not allowed'
|
|
4589
4621
|
},
|
|
4590
|
-
'
|
|
4622
|
+
'Ensure ARIA attributes used are permitted for the element\'s role.': {
|
|
4591
4623
|
variable: false,
|
|
4592
4624
|
quality: 1,
|
|
4593
|
-
what: '
|
|
4625
|
+
what: 'Element has an ARIA attribute that is invalid for the role of the element'
|
|
4626
|
+
}
|
|
4627
|
+
}
|
|
4628
|
+
}
|
|
4629
|
+
},
|
|
4630
|
+
sizesAttributeBad: {
|
|
4631
|
+
summary: 'sizes attribute invalid',
|
|
4632
|
+
why: 'Item behaves improperly',
|
|
4633
|
+
wcag: '1.3.1',
|
|
4634
|
+
weight: 4,
|
|
4635
|
+
tools: {
|
|
4636
|
+
nuVal: {
|
|
4637
|
+
'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.': {
|
|
4638
|
+
variable: false,
|
|
4639
|
+
quality: 1,
|
|
4640
|
+
what: 'link element has a sizes attribute but no icon-type rel attribute'
|
|
4594
4641
|
},
|
|
4595
4642
|
'The sizes attribute may be specified only if the srcset attribute is also present.': {
|
|
4596
4643
|
variable: false,
|
|
@@ -4611,20 +4658,45 @@ exports.issues = {
|
|
|
4611
4658
|
variable: false,
|
|
4612
4659
|
quality: 1,
|
|
4613
4660
|
what: 'Element with a srcset attribute with a width has no valid sizes attribute'
|
|
4661
|
+
},
|
|
4662
|
+
'The sizes attribute value starting with auto is only valid for lazy-loaded images. Add loading=lazy to this element.': {
|
|
4663
|
+
variable: false,
|
|
4664
|
+
quality: 1,
|
|
4665
|
+
what: 'Element with a sizes=auto… attribute has no loading=lazy attribute'
|
|
4614
4666
|
}
|
|
4615
4667
|
},
|
|
4616
|
-
|
|
4617
|
-
'
|
|
4668
|
+
nuVnu: {
|
|
4669
|
+
'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.': {
|
|
4618
4670
|
variable: false,
|
|
4619
4671
|
quality: 1,
|
|
4620
|
-
what: '
|
|
4672
|
+
what: 'link element has a sizes attribute but no icon-type rel attribute'
|
|
4621
4673
|
},
|
|
4622
|
-
'
|
|
4674
|
+
'The sizes attribute may be specified only if the srcset attribute is also present.': {
|
|
4623
4675
|
variable: false,
|
|
4624
4676
|
quality: 1,
|
|
4625
|
-
what: 'Element has
|
|
4677
|
+
what: 'Element has a sizes attribute but no srcset attribute'
|
|
4678
|
+
},
|
|
4679
|
+
'The sizes attribute must only be specified if the srcset attribute is also specified.': {
|
|
4680
|
+
variable: false,
|
|
4681
|
+
quality: 1,
|
|
4682
|
+
what: 'Element has a sizes attribute but no srcset attribute'
|
|
4683
|
+
},
|
|
4684
|
+
'When the srcset attribute has any image candidate string with a width descriptor, the sizes attribute must also be present.': {
|
|
4685
|
+
variable: false,
|
|
4686
|
+
quality: 1,
|
|
4687
|
+
what: 'Element with a srcset attribute with a width has no sizes attribute'
|
|
4688
|
+
},
|
|
4689
|
+
'When the srcset attribute has any image candidate string with a width descriptor, the sizes attribute must also be specified.': {
|
|
4690
|
+
variable: false,
|
|
4691
|
+
quality: 1,
|
|
4692
|
+
what: 'Element with a srcset attribute with a width has no valid sizes attribute'
|
|
4693
|
+
},
|
|
4694
|
+
'The sizes attribute value starting with auto is only valid for lazy-loaded images. Add loading=lazy to this element.': {
|
|
4695
|
+
variable: false,
|
|
4696
|
+
quality: 1,
|
|
4697
|
+
what: 'Element with a sizes=auto… attribute has no loading=lazy attribute'
|
|
4626
4698
|
}
|
|
4627
|
-
}
|
|
4699
|
+
}
|
|
4628
4700
|
}
|
|
4629
4701
|
},
|
|
4630
4702
|
attributeValueBad: {
|
|
@@ -4703,6 +4775,28 @@ exports.issues = {
|
|
|
4703
4775
|
}
|
|
4704
4776
|
}
|
|
4705
4777
|
},
|
|
4778
|
+
attributeValueRisk: {
|
|
4779
|
+
summary: 'attribute value bad?',
|
|
4780
|
+
why: 'Item may behave improperly',
|
|
4781
|
+
wcag: '4.1.2',
|
|
4782
|
+
weight: 1,
|
|
4783
|
+
tools: {
|
|
4784
|
+
nuVal: {
|
|
4785
|
+
'^Potentially bad value .+ for attribute .+ on element .+Typo for .+\?.*$': {
|
|
4786
|
+
variable: true,
|
|
4787
|
+
quality: 1,
|
|
4788
|
+
what: 'Attribute value may be a typographical error'
|
|
4789
|
+
}
|
|
4790
|
+
},
|
|
4791
|
+
nuVnu: {
|
|
4792
|
+
'^Potentially bad value .+ for attribute .+ on element .+Typo for .+\?.*$': {
|
|
4793
|
+
variable: true,
|
|
4794
|
+
quality: 1,
|
|
4795
|
+
what: 'Attribute value may be a typographical error'
|
|
4796
|
+
}
|
|
4797
|
+
}
|
|
4798
|
+
}
|
|
4799
|
+
},
|
|
4706
4800
|
attributeMissing: {
|
|
4707
4801
|
summary: 'attribute missing',
|
|
4708
4802
|
why: 'Item behaves improperly',
|
|
@@ -6353,6 +6447,11 @@ exports.issues = {
|
|
|
6353
6447
|
variable: false,
|
|
6354
6448
|
quality: 1,
|
|
6355
6449
|
what: 'Page contains more than 1 h1 element'
|
|
6450
|
+
},
|
|
6451
|
+
'Consider using the h1 element as a top-level heading only — or else use the headingoffset attribute (otherwise, all h1 elements are treated as top-level headings by many screen readers and other tools).': {
|
|
6452
|
+
variable: false,
|
|
6453
|
+
quality: 1,
|
|
6454
|
+
what: 'Page contains more than 1 h1 element'
|
|
6356
6455
|
}
|
|
6357
6456
|
},
|
|
6358
6457
|
nuVnu: {
|
|
@@ -6360,6 +6459,11 @@ exports.issues = {
|
|
|
6360
6459
|
variable: false,
|
|
6361
6460
|
quality: 1,
|
|
6362
6461
|
what: 'Page contains more than 1 h1 element'
|
|
6462
|
+
},
|
|
6463
|
+
'Consider using the h1 element as a top-level heading only — or else use the headingoffset attribute (otherwise, all h1 elements are treated as top-level headings by many screen readers and other tools).': {
|
|
6464
|
+
variable: false,
|
|
6465
|
+
quality: 1,
|
|
6466
|
+
what: 'Page contains more than 1 h1 element'
|
|
6363
6467
|
}
|
|
6364
6468
|
},
|
|
6365
6469
|
wave: {
|