testilo 17.0.8 → 17.0.11

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.
Files changed (2) hide show
  1. package/package.json +1 -1
  2. package/procs/score/tic36.js +495 -45
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testilo",
3
- "version": "17.0.8",
3
+ "version": "17.0.11",
4
4
  "description": "Prepares and processes Testaro reports",
5
5
  "main": "aim.js",
6
6
  "scripts": {
@@ -24,6 +24,18 @@ exports.issues = {
24
24
  wcag: '',
25
25
  weight: 0,
26
26
  tools: {
27
+ aslint: {
28
+ 'meaningful-content-sequence': {
29
+ variable: false,
30
+ quality: 0,
31
+ what: 'The content sequence may fail to be meaningful'
32
+ },
33
+ 'flickering': {
34
+ variable: false,
35
+ quality: 0,
36
+ what: 'Excessive flashing may exist'
37
+ }
38
+ },
27
39
  nuVal: {
28
40
  'Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)': {
29
41
  variable: false,
@@ -34,12 +46,12 @@ exports.issues = {
34
46
  qualWeb: {
35
47
  'QW-ACT-R52': {
36
48
  variable: false,
37
- quality: 1,
49
+ quality: 0,
38
50
  what: 'video element visual-only content has no description track (description tracks and this ACT rule have been deprecated)'
39
51
  },
40
52
  'QW-ACT-R57': {
41
53
  variable: false,
42
- quality: 1,
54
+ quality: 0,
43
55
  what: 'video element visual content has no description track (description tracks and this ACT rule have been deprecated)'
44
56
  },
45
57
  'QW-WCAG-T4': {
@@ -49,12 +61,12 @@ exports.issues = {
49
61
  },
50
62
  'QW-WCAG-T15': {
51
63
  variable: false,
52
- quality: 1,
64
+ quality: 0,
53
65
  what: 'link element may be used for navigation but not in the head'
54
66
  },
55
67
  'QW-WCAG-T20': {
56
68
  variable: false,
57
- quality: 1,
69
+ quality: 0,
58
70
  what: 'Link text is not supplemented with a title attribute'
59
71
  }
60
72
  }
@@ -545,6 +557,11 @@ exports.issues = {
545
557
  variable: false,
546
558
  quality: 1,
547
559
  what: 'Image may be better described by a revised text alternative and an aria-label attribute'
560
+ },
561
+ 'alt-color-convey-information': {
562
+ variable: false,
563
+ quality: 1,
564
+ what: 'Text alternative may fail to give information provided by colors'
548
565
  }
549
566
  }
550
567
  }
@@ -1032,6 +1049,20 @@ exports.issues = {
1032
1049
  }
1033
1050
  }
1034
1051
  },
1052
+ objectAudioRisk: {
1053
+ why: 'User may get inadequate help consuming audio content',
1054
+ wcag: '1.1.1',
1055
+ weight: 1,
1056
+ tools: {
1057
+ aslint: {
1058
+ 'audio-alternative': {
1059
+ variable: false,
1060
+ quality: 1,
1061
+ what: 'Element is inferior to an audio element if it plays audio'
1062
+ }
1063
+ }
1064
+ }
1065
+ },
1035
1066
  appletNoText: {
1036
1067
  why: 'User cannot get help on how to use a custom item',
1037
1068
  wcag: '1.1.1',
@@ -1126,6 +1157,20 @@ exports.issues = {
1126
1157
  }
1127
1158
  }
1128
1159
  },
1160
+ customKeyboardRisk: {
1161
+ why: 'Custom item may prevent a no-mouse user from operating it',
1162
+ wcag: '2.1.1',
1163
+ weight: 1,
1164
+ tools: {
1165
+ htmlcs: {
1166
+ 'link-button-space-key': {
1167
+ variable: false,
1168
+ quality: 1,
1169
+ what: 'Element has a button role but may fail to be keyboard-operable'
1170
+ }
1171
+ }
1172
+ }
1173
+ },
1129
1174
  objectBlurKeyboardRisk: {
1130
1175
  why: 'Custom item may trap a no-mouse user',
1131
1176
  wcag: '2.1.1',
@@ -1193,6 +1238,13 @@ exports.issues = {
1193
1238
  wcag: '1.3.1',
1194
1239
  weight: 4,
1195
1240
  tools: {
1241
+ aslint: {
1242
+ 'broken-same-page-link': {
1243
+ variable: false,
1244
+ quality: 1,
1245
+ what: 'Same-page destination of the link does not exist'
1246
+ }
1247
+ },
1196
1248
  htmlcs: {
1197
1249
  'AAA.2_4_1.G1,G123,G124.NoSuchID': {
1198
1250
  variable: false,
@@ -1214,6 +1266,13 @@ exports.issues = {
1214
1266
  wcag: '1.3.1',
1215
1267
  weight: 3,
1216
1268
  tools: {
1269
+ aslint: {
1270
+ 'label-inappropriate-associationN': {
1271
+ variable: false,
1272
+ quality: 1,
1273
+ what: 'Element referenced by the for attribute is not a form control'
1274
+ }
1275
+ },
1217
1276
  htmlcs: {
1218
1277
  'AAA.1_3_1.H44.NotFormControl': {
1219
1278
  variable: false,
@@ -1296,6 +1355,13 @@ exports.issues = {
1296
1355
  wcag: '1.3.1',
1297
1356
  weight: 4,
1298
1357
  tools: {
1358
+ aslint: {
1359
+ 'aria-describedby-association': {
1360
+ variable: false,
1361
+ quality: 1,
1362
+ what: 'aria-describedby attribute references a missing or empty element'
1363
+ }
1364
+ },
1299
1365
  nuVal: {
1300
1366
  'The aria-describedby attribute must point to an element in the same document.': {
1301
1367
  variable: false,
@@ -1317,6 +1383,13 @@ exports.issues = {
1317
1383
  wcag: '3.3.2',
1318
1384
  weight: 1,
1319
1385
  tools: {
1386
+ aslint: {
1387
+ 'incorrect-label-placement': {
1388
+ variable: false,
1389
+ quality: 1,
1390
+ what: 'label element precedes the labeled radio button or checkbox'
1391
+ }
1392
+ },
1320
1393
  ibm: {
1321
1394
  WCAG20_Input_LabelBefore: {
1322
1395
  variable: false,
@@ -1353,6 +1426,13 @@ exports.issues = {
1353
1426
  wcag: '1.3.1',
1354
1427
  weight: 4,
1355
1428
  tools: {
1429
+ aslint: {
1430
+ 'label-inappropriate-associationM': {
1431
+ variable: false,
1432
+ quality: 1,
1433
+ what: 'Element referenced by the for attribute is missing'
1434
+ }
1435
+ },
1356
1436
  htmlcs: {
1357
1437
  'AAA.1_3_1.H44.NonExistentFragment': {
1358
1438
  variable: false,
@@ -2047,7 +2127,7 @@ exports.issues = {
2047
2127
  }
2048
2128
  },
2049
2129
  aslint: {
2050
- 'accessible-svgN': {
2130
+ 'accessible-svg': {
2051
2131
  variable: false,
2052
2132
  quality: 1,
2053
2133
  what: 'Element has no title, description, text, attribute label, or role description'
@@ -2113,7 +2193,14 @@ exports.issues = {
2113
2193
  r47: {
2114
2194
  variable: false,
2115
2195
  quality: 1,
2116
- what: 'meta element restricts zooming'
2196
+ what: 'Element restricts zooming'
2197
+ }
2198
+ },
2199
+ aslint: {
2200
+ 'zoom-disabled': {
2201
+ variable: false,
2202
+ quality: 1,
2203
+ what: 'Element specifies a minimum or maximum scale or prohibits zooming'
2117
2204
  }
2118
2205
  },
2119
2206
  axe: {
@@ -3239,6 +3326,23 @@ exports.issues = {
3239
3326
  what: 'Text outside widget has subminimum contrast'
3240
3327
  }
3241
3328
  },
3329
+ aslint: {
3330
+ 'color-contrast-aa': {
3331
+ variable: false,
3332
+ quality: 1,
3333
+ what: 'Text has contrast less than 4.5:1'
3334
+ },
3335
+ 'color-contrast-state-pseudo-classes-abstract3': {
3336
+ variable: false,
3337
+ quality: 1,
3338
+ what: 'Text has contrast less than 3:1'
3339
+ },
3340
+ 'color-contrast-state-pseudo-classes-abstract4': {
3341
+ variable: false,
3342
+ quality: 1,
3343
+ what: 'Text has contrast less than 4.5:1'
3344
+ }
3345
+ },
3242
3346
  axe: {
3243
3347
  'color-contrast': {
3244
3348
  variable: false,
@@ -3305,6 +3409,20 @@ exports.issues = {
3305
3409
  }
3306
3410
  }
3307
3411
  },
3412
+ colorNamedRisk: {
3413
+ why: 'Content is impossible to perceive under some conditions',
3414
+ wcag: '1.4.1',
3415
+ weight: 1,
3416
+ tools: {
3417
+ qualWeb: {
3418
+ 'text-color-convey-information': {
3419
+ variable: false,
3420
+ quality: 1,
3421
+ what: 'Text naming a color may require the ability to distinguish colors'
3422
+ }
3423
+ }
3424
+ }
3425
+ },
3308
3426
  contrastAAA: {
3309
3427
  why: 'Text is difficult to read',
3310
3428
  wcag: '1.4.6',
@@ -3317,6 +3435,18 @@ exports.issues = {
3317
3435
  what: 'Text contrast less than AAA requires'
3318
3436
  }
3319
3437
  },
3438
+ aslint: {
3439
+ 'color-contrast-aaa4': {
3440
+ variable: false,
3441
+ quality: 1,
3442
+ what: 'Text has contrast less than 4.5:1'
3443
+ },
3444
+ 'color-contrast-aaa7': {
3445
+ variable: false,
3446
+ quality: 1,
3447
+ what: 'Text has contrast less than 7:1'
3448
+ }
3449
+ },
3320
3450
  axe: {
3321
3451
  'color-contrast-enhanced': {
3322
3452
  variable: false,
@@ -3350,6 +3480,23 @@ exports.issues = {
3350
3480
  wcag: '1.4.3',
3351
3481
  weight: 1,
3352
3482
  tools: {
3483
+ aslint: {
3484
+ 'color-contrast-state-pseudo-classes-abstractF': {
3485
+ variable: false,
3486
+ quality: 1,
3487
+ what: 'Fixed position of the element prevents contrast measurement'
3488
+ },
3489
+ 'color-contrast-state-pseudo-classes-abstractB': {
3490
+ variable: false,
3491
+ quality: 1,
3492
+ what: 'Transparent background color of the element prevents contrast measurement'
3493
+ },
3494
+ 'color-contrast-aaaB': {
3495
+ variable: false,
3496
+ quality: 1,
3497
+ what: 'Transparent background color of the element prevents contrast measurement'
3498
+ }
3499
+ },
3353
3500
  htmlcs: {
3354
3501
  'AAA.1_4_3_F24.F24.BGColour': {
3355
3502
  variable: false,
@@ -3705,6 +3852,27 @@ exports.issues = {
3705
3852
  }
3706
3853
  }
3707
3854
  },
3855
+ pageTitleBad: {
3856
+ why: 'Browser processes the document improperly',
3857
+ wcag: '1.3.1',
3858
+ weight: 4,
3859
+ tools: {
3860
+ aslint: {
3861
+ 'page-titleU': {
3862
+ variable: false,
3863
+ quality: 1,
3864
+ what: 'Page title does not identify the contents or purpose of the page'
3865
+ }
3866
+ },
3867
+ wave: {
3868
+ title_invalid: {
3869
+ variable: false,
3870
+ quality: 1,
3871
+ what: 'Missing or uninformative page title'
3872
+ }
3873
+ }
3874
+ }
3875
+ },
3708
3876
  pageTitle: {
3709
3877
  why: 'User is not informed of the topic of the document',
3710
3878
  wcag: '2.4.2',
@@ -3717,6 +3885,13 @@ exports.issues = {
3717
3885
  what: 'Document has no valid title element'
3718
3886
  }
3719
3887
  },
3888
+ aslint: {
3889
+ 'page-titleN': {
3890
+ variable: false,
3891
+ quality: 1,
3892
+ what: 'Page title is missing or empty'
3893
+ }
3894
+ },
3720
3895
  axe: {
3721
3896
  'document-title': {
3722
3897
  variable: false,
@@ -3756,13 +3931,6 @@ exports.issues = {
3756
3931
  quality: 1,
3757
3932
  what: 'HTML page has no title'
3758
3933
  }
3759
- },
3760
- wave: {
3761
- title_invalid: {
3762
- variable: false,
3763
- quality: 1,
3764
- what: 'Missing or uninformative page title'
3765
- }
3766
3934
  }
3767
3935
  }
3768
3936
  },
@@ -3820,6 +3988,13 @@ exports.issues = {
3820
3988
  wcag: '1.3.1',
3821
3989
  weight: 2,
3822
3990
  tools: {
3991
+ aslint: {
3992
+ 'headings-hierarchy': {
3993
+ variable: false,
3994
+ quality: 1,
3995
+ what: 'Heading level is illogical in its context'
3996
+ }
3997
+ },
3823
3998
  htmlcs: {
3824
3999
  'AAA.1_3_1_AAA.G141': {
3825
4000
  variable: false,
@@ -3850,7 +4025,7 @@ exports.issues = {
3850
4025
  }
3851
4026
  }
3852
4027
  },
3853
- noHeading: {
4028
+ headingNone: {
3854
4029
  why: 'User cannot survey parts of the document',
3855
4030
  wcag: '1.3.1',
3856
4031
  weight: 3,
@@ -3862,6 +4037,13 @@ exports.issues = {
3862
4037
  what: 'Document has no headings'
3863
4038
  }
3864
4039
  },
4040
+ aslint: {
4041
+ 'no-headings': {
4042
+ variable: false,
4043
+ quality: 1,
4044
+ what: 'Document has no headings'
4045
+ }
4046
+ },
3865
4047
  qualWeb: {
3866
4048
  'QW-BP1': {
3867
4049
  variable: false,
@@ -4421,6 +4603,13 @@ exports.issues = {
4421
4603
  wcag: '1.3.1',
4422
4604
  weight: 1,
4423
4605
  tools: {
4606
+ aslint: {
4607
+ 'group-elements-name-attribute': {
4608
+ variable: false,
4609
+ quality: 1,
4610
+ what: 'Element is an input with a name attribute but has no fieldset parent'
4611
+ }
4612
+ },
4424
4613
  htmlcs: {
4425
4614
  'AAA.1_3_1.H71.SameName': {
4426
4615
  variable: false,
@@ -4449,11 +4638,18 @@ exports.issues = {
4449
4638
  wcag: '4.1.2',
4450
4639
  weight: 2,
4451
4640
  tools: {
4641
+ aslint: {
4642
+ 'fieldset-no-legend': {
4643
+ variable: false,
4644
+ quality: 1,
4645
+ what: 'First child element of the element is not a legend'
4646
+ }
4647
+ },
4452
4648
  htmlcs: {
4453
4649
  'AAA.1_3_1.H71.NoLegend': {
4454
4650
  variable: false,
4455
4651
  quality: 1,
4456
- what: 'fieldset has no legend element'
4652
+ what: 'Element has no legend element'
4457
4653
  }
4458
4654
  },
4459
4655
  ibm: {
@@ -4465,7 +4661,7 @@ exports.issues = {
4465
4661
  fieldset_legend_valid: {
4466
4662
  variable: false,
4467
4663
  quality: 1,
4468
- what: 'fieldset element does not have a legend element'
4664
+ what: 'Element does not have a legend element'
4469
4665
  }
4470
4666
  },
4471
4667
  qualWeb: {
@@ -4479,7 +4675,7 @@ exports.issues = {
4479
4675
  legend_missing: {
4480
4676
  variable: false,
4481
4677
  quality: 1,
4482
- what: 'fieldset has no legend element'
4678
+ what: 'Element has no legend element'
4483
4679
  }
4484
4680
  }
4485
4681
  }
@@ -4588,6 +4784,18 @@ exports.issues = {
4588
4784
  wcag: '1.3.1',
4589
4785
  weight: 1,
4590
4786
  tools: {
4787
+ aslint: {
4788
+ 'table-missing-descriptionC': {
4789
+ variable: false,
4790
+ quality: 1,
4791
+ what: 'Element contains no caption element'
4792
+ },
4793
+ 'table-missing-descriptionE': {
4794
+ variable: false,
4795
+ quality: 1,
4796
+ what: 'Element contains a caption element, but it is empty'
4797
+ }
4798
+ },
4591
4799
  axe: {
4592
4800
  'table-fake-caption': {
4593
4801
  variable: false,
@@ -4599,7 +4807,7 @@ exports.issues = {
4599
4807
  'AAA.1_3_1.H39.3.NoCaption': {
4600
4808
  variable: false,
4601
4809
  quality: 1,
4602
- what: 'Table has no caption element'
4810
+ what: 'Element contains no caption element'
4603
4811
  }
4604
4812
  },
4605
4813
  qualWeb: {
@@ -4625,6 +4833,72 @@ exports.issues = {
4625
4833
  }
4626
4834
  }
4627
4835
  },
4836
+ tableCapSum: {
4837
+ why: 'Helper informs a user repetitively about the topic of a table',
4838
+ wcag: '1.3.1',
4839
+ weight: 2,
4840
+ tools: {
4841
+ aslint: {
4842
+ 'table-caption-summary-identical': {
4843
+ variable: false,
4844
+ quality: 1,
4845
+ what: 'Element has a summary attribute identical to its caption element'
4846
+ }
4847
+ }
4848
+ }
4849
+ },
4850
+ tableSum: {
4851
+ why: 'User cannot get help summarizing a table',
4852
+ wcag: '1.3.1',
4853
+ weight: 4,
4854
+ tools: {
4855
+ aslint: {
4856
+ 'table-missing-descriptionS': {
4857
+ variable: false,
4858
+ quality: 1,
4859
+ what: 'Element has a summary attribute, but it is empty'
4860
+ }
4861
+ }
4862
+ }
4863
+ },
4864
+ tablelabelID: {
4865
+ why: 'User cannot get help on the topic of a table',
4866
+ wcag: '1.3.1',
4867
+ weight: 4,
4868
+ tools: {
4869
+ aslint: {
4870
+ 'table-missing-descriptionLM': {
4871
+ variable: false,
4872
+ quality: 1,
4873
+ what: 'Element has a broken aria-labelledby ID'
4874
+ },
4875
+ 'table-missing-descriptionLE': {
4876
+ variable: false,
4877
+ quality: 1,
4878
+ what: 'Element has an aria-labelledby attribute, but it is empty'
4879
+ }
4880
+ }
4881
+ }
4882
+ },
4883
+ tableDescriptionID: {
4884
+ why: 'User cannot get help on the topic of a table',
4885
+ wcag: '1.3.1',
4886
+ weight: 4,
4887
+ tools: {
4888
+ aslint: {
4889
+ 'table-missing-descriptionDM': {
4890
+ variable: false,
4891
+ quality: 1,
4892
+ what: 'Element has a broken aria-describedby ID'
4893
+ },
4894
+ 'table-missing-descriptionDE': {
4895
+ variable: false,
4896
+ quality: 1,
4897
+ what: 'Element has an aria-describedby attribute, but it is empty'
4898
+ }
4899
+ }
4900
+ }
4901
+ },
4628
4902
  cellHeadersNotInferrable: {
4629
4903
  why: 'User cannot get help on relationships in a table',
4630
4904
  wcag: '1.3.1',
@@ -4696,6 +4970,13 @@ exports.issues = {
4696
4970
  wcag: '1.3.1',
4697
4971
  weight: 3,
4698
4972
  tools: {
4973
+ aslint: {
4974
+ 'table-row-and-column-headersRC': {
4975
+ variable: false,
4976
+ quality: 1,
4977
+ what: 'None of the cells in the table is a header'
4978
+ }
4979
+ },
4699
4980
  ibm: {
4700
4981
  RPT_Table_DataHeadingsAria: {
4701
4982
  variable: false,
@@ -4777,7 +5058,35 @@ exports.issues = {
4777
5058
  th_empty: {
4778
5059
  variable: false,
4779
5060
  quality: 1,
4780
- what: 'th (table header) contains no text'
5061
+ what: 'Element contains no text'
5062
+ }
5063
+ }
5064
+ }
5065
+ },
5066
+ tableHead: {
5067
+ why: 'User cannot get help on parts of a table',
5068
+ wcag: '1.3.1',
5069
+ weight: 1,
5070
+ tools: {
5071
+ aslint: {
5072
+ 'table-row-and-column-headersH': {
5073
+ variable: false,
5074
+ quality: 1,
5075
+ what: 'Element does not contain a thead element'
5076
+ }
5077
+ }
5078
+ }
5079
+ },
5080
+ tableBody: {
5081
+ why: 'User cannot get help on parts of a table',
5082
+ wcag: '1.3.1',
5083
+ weight: 1,
5084
+ tools: {
5085
+ aslint: {
5086
+ 'table-row-and-column-headersB': {
5087
+ variable: false,
5088
+ quality: 1,
5089
+ what: 'Element does not contain a tbody element'
4781
5090
  }
4782
5091
  }
4783
5092
  }
@@ -5875,16 +6184,23 @@ exports.issues = {
5875
6184
  wcag: '1.3.1',
5876
6185
  weight: 4,
5877
6186
  tools: {
6187
+ aslint: {
6188
+ 'label-implicitly-associatedM': {
6189
+ variable: false,
6190
+ quality: 1,
6191
+ what: 'Element contains more than 1 labelable element.'
6192
+ }
6193
+ },
5878
6194
  nuVal: {
5879
6195
  'The label element may contain at most one button, input, meter, output, progress, select, or textarea descendant.': {
5880
6196
  variable: false,
5881
6197
  quality: 1,
5882
- what: 'label element has more than 1 labelable descendant.'
6198
+ what: 'Element has more than 1 labelable descendant.'
5883
6199
  },
5884
6200
  'label element with multiple labelable descendants.': {
5885
6201
  variable: false,
5886
6202
  quality: 1,
5887
- what: 'label element has multiple labelable descendants.'
6203
+ what: 'Element has multiple labelable descendants.'
5888
6204
  }
5889
6205
  }
5890
6206
  }
@@ -6025,18 +6341,32 @@ exports.issues = {
6025
6341
  wcag: '1.3.1',
6026
6342
  weight: 2,
6027
6343
  tools: {
6028
- axe: {
6029
- 'form-field-multiple-labels': {
6344
+ testaro: {
6345
+ labClash: {
6030
6346
  variable: false,
6031
6347
  quality: 1,
6032
- what: 'Form field has multiple label elements'
6348
+ what: 'Incompatible label types'
6349
+ }
6350
+ }
6351
+ }
6352
+ },
6353
+ labelNot1: {
6354
+ why: 'User cannot get reliable help on the topics of form items',
6355
+ wcag: '1.3.1',
6356
+ weight: 1,
6357
+ tools: {
6358
+ aslint: {
6359
+ 'duplicated-for-attribute': {
6360
+ variable: false,
6361
+ quality: 1,
6362
+ what: 'More than 1 label element has the same for attribute'
6033
6363
  }
6034
6364
  },
6035
- testaro: {
6036
- labClash: {
6365
+ axe: {
6366
+ 'form-field-multiple-labels': {
6037
6367
  variable: false,
6038
6368
  quality: 1,
6039
- what: 'Incompatible label types'
6369
+ what: 'Form field has multiple label elements'
6040
6370
  }
6041
6371
  },
6042
6372
  ibm: {
@@ -6065,6 +6395,18 @@ exports.issues = {
6065
6395
  wcag: '1.3.1',
6066
6396
  weight: 3,
6067
6397
  tools: {
6398
+ aslint: {
6399
+ 'empty-label-element': {
6400
+ variable: false,
6401
+ quality: 1,
6402
+ what: 'Element has no content'
6403
+ },
6404
+ 'label-implicitly-associatedW': {
6405
+ variable: false,
6406
+ quality: 1,
6407
+ what: 'Element has no labeling content except whitespace'
6408
+ }
6409
+ },
6068
6410
  htmlcs: {
6069
6411
  'AAA.1_3_1.ARIA6': {
6070
6412
  variable: false,
@@ -6143,11 +6485,18 @@ exports.issues = {
6143
6485
  what: 'Inline link is not distinct from the surrounding text except by color'
6144
6486
  }
6145
6487
  },
6488
+ aslint: {
6489
+ 'links-not-visually-evident-without-color-vision': {
6490
+ variable: false,
6491
+ quality: 1,
6492
+ what: 'Element is a link, but its style properties do not differentiate it from its parent'
6493
+ }
6494
+ },
6146
6495
  axe: {
6147
6496
  'link-in-text-block': {
6148
6497
  variable: false,
6149
6498
  quality: 1,
6150
- what: 'Link is not distinct from surrounding text without reliance on color'
6499
+ what: 'Element is not distinct from surrounding text without reliance on color'
6151
6500
  }
6152
6501
  },
6153
6502
  testaro: {
@@ -6212,6 +6561,32 @@ exports.issues = {
6212
6561
  quality: 1,
6213
6562
  what: 'Change of visible content not requested by user'
6214
6563
  }
6564
+ },
6565
+ aslint: {
6566
+ animationM: {
6567
+ variable: false,
6568
+ quality: 1,
6569
+ what: 'Animation may fail to give user a pause, stop, or hide mechanism'
6570
+ }
6571
+ }
6572
+ }
6573
+ },
6574
+ animationLong: {
6575
+ why: 'Motion-sensitive user may suffer harm',
6576
+ wcag: '2.2.2',
6577
+ weight: 3,
6578
+ tools: {
6579
+ aslint: {
6580
+ animationD: {
6581
+ variable: false,
6582
+ quality: 1,
6583
+ what: 'Animation lasts more than 5 seconds'
6584
+ },
6585
+ animationI: {
6586
+ variable: false,
6587
+ quality: 1,
6588
+ what: 'Animation is repetitive'
6589
+ }
6215
6590
  }
6216
6591
  }
6217
6592
  },
@@ -6220,11 +6595,18 @@ exports.issues = {
6220
6595
  wcag: '2.2.2',
6221
6596
  weight: 4,
6222
6597
  tools: {
6598
+ aslint: {
6599
+ 'blink-element': {
6600
+ variable: false,
6601
+ quality: 1,
6602
+ what: 'Element is blink'
6603
+ }
6604
+ },
6223
6605
  qualWeb: {
6224
6606
  'QW-WCAG-T13': {
6225
6607
  variable: false,
6226
6608
  quality: 1,
6227
- what: 'blink element used'
6609
+ what: 'Element is blink'
6228
6610
  },
6229
6611
  'QW-WCAG-T30': {
6230
6612
  variable: false,
@@ -6239,18 +6621,25 @@ exports.issues = {
6239
6621
  wcag: '1.4.2',
6240
6622
  weight: 2,
6241
6623
  tools: {
6624
+ aslint: {
6625
+ 'autoplay-audio-video': {
6626
+ variable: false,
6627
+ quality: 1,
6628
+ what: 'Element plays automatically'
6629
+ }
6630
+ },
6242
6631
  axe: {
6243
6632
  'no-autoplay-audio': {
6244
6633
  variable: false,
6245
6634
  quality: 1,
6246
- what: 'video or audio element plays automatically'
6635
+ what: 'Element plays automatically'
6247
6636
  }
6248
6637
  },
6249
6638
  qualWeb: {
6250
6639
  'QW-ACT-R15': {
6251
6640
  variable: false,
6252
6641
  quality: 1,
6253
- what: 'audio or video has audio that plays automatically'
6642
+ what: 'Element has audio that plays automatically'
6254
6643
  }
6255
6644
  }
6256
6645
  }
@@ -6264,7 +6653,7 @@ exports.issues = {
6264
6653
  'QW-ACT-R49': {
6265
6654
  variable: false,
6266
6655
  quality: 1,
6267
- what: 'audio or video that plays automatically has audio lasting more than 3 seconds'
6656
+ what: 'Element that plays automatically has audio lasting more than 3 seconds'
6268
6657
  }
6269
6658
  }
6270
6659
  }
@@ -6284,20 +6673,27 @@ exports.issues = {
6284
6673
  }
6285
6674
  },
6286
6675
  refresh: {
6287
- why: 'Delayed document change may surprise a user',
6676
+ why: 'Document change may surprise a user',
6288
6677
  wcag: '2.2.1',
6289
6678
  weight: 3,
6290
6679
  tools: {
6680
+ aslint: {
6681
+ 'no-meta-http-equiv-refresh': {
6682
+ variable: false,
6683
+ quality: 1,
6684
+ what: 'Element forces a page reload'
6685
+ }
6686
+ },
6291
6687
  qualWeb: {
6292
6688
  'QW-ACT-R4': {
6293
6689
  variable: false,
6294
6690
  quality: 1,
6295
- what: 'meta element refreshes or redirects with delay'
6691
+ what: 'Element refreshes or redirects with delay'
6296
6692
  },
6297
6693
  'QW-ACT-R71': {
6298
6694
  variable: false,
6299
6695
  quality: 1,
6300
- what: 'meta element has a refresh delay (no exception)'
6696
+ what: 'Element has a refresh delay (no exception)'
6301
6697
  }
6302
6698
  }
6303
6699
  }
@@ -6414,43 +6810,78 @@ exports.issues = {
6414
6810
  }
6415
6811
  }
6416
6812
  },
6813
+ avNoText: {
6814
+ why: 'User cannot get help reading speech as text',
6815
+ wcag: '1.2.1',
6816
+ weight: 4,
6817
+ tools: {
6818
+ aslint: {
6819
+ 'audio-video-captions': {
6820
+ variable: false,
6821
+ quality: 1,
6822
+ what: 'Element is audio or video but contains no caption track element'
6823
+ }
6824
+ }
6825
+ }
6826
+ },
6417
6827
  audioNoText: {
6418
6828
  why: 'User cannot get help reading speech as text',
6419
6829
  wcag: '1.2.1',
6420
6830
  weight: 4,
6421
6831
  tools: {
6832
+ aslint: {
6833
+ 'audio-alternativeT': {
6834
+ variable: false,
6835
+ quality: 1,
6836
+ what: 'Element contains no track element'
6837
+ }
6838
+ },
6422
6839
  axe: {
6423
6840
  'audio-caption': {
6424
6841
  variable: false,
6425
6842
  quality: 1,
6426
- what: 'audio element has no captions track'
6843
+ what: 'Element has no captions track'
6427
6844
  }
6428
6845
  },
6429
6846
  qualWeb: {
6430
6847
  'QW-ACT-R26': {
6431
6848
  variable: false,
6432
6849
  quality: 1,
6433
- what: 'video element auditory content has no accessible alternative'
6850
+ what: 'Auditory content of the element has no accessible alternative'
6434
6851
  },
6435
6852
  'QW-ACT-R29': {
6436
6853
  variable: false,
6437
6854
  quality: 1,
6438
- what: 'audio element content has no text alternative'
6855
+ what: 'Content of the element has no text alternative'
6439
6856
  },
6440
6857
  'QW-ACT-R58': {
6441
6858
  variable: false,
6442
6859
  quality: 1,
6443
- what: 'audio element content has no transcript'
6860
+ what: 'Content of the element has no transcript'
6444
6861
  },
6445
6862
  'QW-ACT-R59': {
6446
6863
  variable: false,
6447
6864
  quality: 1,
6448
- what: 'audio element content is not a media alternative for text'
6865
+ what: 'Element content is not a media alternative for text'
6449
6866
  },
6450
6867
  'QW-ACT-R60': {
6451
6868
  variable: false,
6452
6869
  quality: 1,
6453
- what: 'video element auditory content has no captions'
6870
+ what: 'Auditory content of the element has no captions'
6871
+ }
6872
+ }
6873
+ }
6874
+ },
6875
+ audioTextRisk: {
6876
+ why: 'User may be unable to get help reading speech as text',
6877
+ wcag: '1.2.1',
6878
+ weight: 1,
6879
+ tools: {
6880
+ aslint: {
6881
+ 'audio-alternativeA': {
6882
+ variable: false,
6883
+ quality: 1,
6884
+ what: 'Referenced description or another text alternative may be missing'
6454
6885
  }
6455
6886
  }
6456
6887
  }
@@ -6464,7 +6895,7 @@ exports.issues = {
6464
6895
  'video-caption': {
6465
6896
  variable: false,
6466
6897
  quality: 1,
6467
- what: 'video element has no captions'
6898
+ what: 'Element has no captions'
6468
6899
  }
6469
6900
  },
6470
6901
  qualWeb: {
@@ -6562,12 +6993,26 @@ exports.issues = {
6562
6993
  'QW-ACT-R54': {
6563
6994
  variable: false,
6564
6995
  quality: 1,
6565
- what: 'video element visual-only content has no audio track alternative'
6996
+ what: 'Visual-only content of the element has no audio track alternative'
6997
+ }
6998
+ }
6999
+ }
7000
+ },
7001
+ videoAlternative: {
7002
+ why: 'User cannot get help consuming a video recording as text or speech',
7003
+ wcag: '1.2.1',
7004
+ weight: 4,
7005
+ tools: {
7006
+ aslint: {
7007
+ 'video-audio-descriptions': {
7008
+ variable: false,
7009
+ quality: 1,
7010
+ what: 'Element has neither an audio source nor a description track'
6566
7011
  }
6567
7012
  }
6568
7013
  }
6569
7014
  },
6570
- notKeyboardScrollable: {
7015
+ keyboardScroll: {
6571
7016
  why: 'No-mouse user cannot scroll an item',
6572
7017
  wcag: '2.1.1',
6573
7018
  weight: 4,
@@ -6896,6 +7341,11 @@ exports.issues = {
6896
7341
  variable: false,
6897
7342
  quality: 1,
6898
7343
  what: 'Element is obsolete'
7344
+ },
7345
+ 'audio-alternativeB': {
7346
+ variable: false,
7347
+ quality: 1,
7348
+ what: 'Element is obsolete and inferior to an audio element'
6899
7349
  }
6900
7350
  },
6901
7351
  htmlcs: {
@@ -7391,7 +7841,7 @@ exports.issues = {
7391
7841
  quality: 1,
7392
7842
  what: 'longdesc attribute has a value that is not a URL (and is obsolete)'
7393
7843
  }
7394
- },
7844
+ }
7395
7845
  }
7396
7846
  },
7397
7847
  slashParseRisk: {