testaro-issues 0.4.1 → 0.5.1
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/dist/index.cjs +169 -75
- package/dist/index.d.cts +11 -1
- package/dist/index.d.mts +11 -1
- package/dist/index.mjs +169 -75
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,21 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
2
|
//#region src/index.ts
|
|
3
|
+
const outcomes = ["failed", "cantTell"];
|
|
4
|
+
const uncertainties = [
|
|
5
|
+
"not-computable",
|
|
6
|
+
"judgement-required",
|
|
7
|
+
"runtime-dependent",
|
|
8
|
+
"spec-only",
|
|
9
|
+
"equivalence-unknown",
|
|
10
|
+
"out-of-scope"
|
|
11
|
+
];
|
|
12
|
+
const whyIgnore = [
|
|
13
|
+
"duplicative",
|
|
14
|
+
"invalid",
|
|
15
|
+
"irrelevant",
|
|
16
|
+
"speculative",
|
|
17
|
+
"unreliable"
|
|
18
|
+
];
|
|
3
19
|
const issuesData = {
|
|
4
20
|
"ignorable": {
|
|
5
21
|
"summary": "ignorable",
|
|
@@ -2245,18 +2261,21 @@ const rulesData = {
|
|
|
2245
2261
|
"cantTellTextContrast": {
|
|
2246
2262
|
"issueID": "ignorable",
|
|
2247
2263
|
"quality": 1,
|
|
2248
|
-
"what": "Test of text contrast could not give a conclusive result
|
|
2264
|
+
"what": "Test of text contrast could not give a conclusive result",
|
|
2265
|
+
"whyIgnore": "invalid",
|
|
2249
2266
|
"supersededBy": null
|
|
2250
2267
|
},
|
|
2251
2268
|
"r73": {
|
|
2252
2269
|
"issueID": "ignorable",
|
|
2253
2270
|
"quality": 1,
|
|
2254
|
-
"what": "Text line height is not at least 1.5
|
|
2271
|
+
"what": "Text line height is not at least 1.5",
|
|
2272
|
+
"whyIgnore": "invalid"
|
|
2255
2273
|
},
|
|
2256
2274
|
"r87": {
|
|
2257
2275
|
"issueID": "ignorable",
|
|
2258
2276
|
"quality": .5,
|
|
2259
|
-
"what": "First focusable element is not a link to the main content
|
|
2277
|
+
"what": "First focusable element is not a link to the main content",
|
|
2278
|
+
"whyIgnore": "invalid"
|
|
2260
2279
|
},
|
|
2261
2280
|
"r3": {
|
|
2262
2281
|
"issueID": "duplicateID",
|
|
@@ -2572,87 +2591,104 @@ const rulesData = {
|
|
|
2572
2591
|
"capital_letters_words": {
|
|
2573
2592
|
"issueID": "ignorable",
|
|
2574
2593
|
"quality": 1,
|
|
2575
|
-
"what": "Element or its title has entirely upper-case words
|
|
2594
|
+
"what": "Element or its title has entirely upper-case words",
|
|
2595
|
+
"whyIgnore": "invalid"
|
|
2576
2596
|
},
|
|
2577
2597
|
"color_contrast_aa": {
|
|
2578
2598
|
"issueID": "ignorable",
|
|
2579
2599
|
"quality": 0,
|
|
2580
|
-
"what": "Text has contrast less than 4.5:1
|
|
2600
|
+
"what": "Text has contrast less than 4.5:1",
|
|
2601
|
+
"whyIgnore": "speculative"
|
|
2581
2602
|
},
|
|
2582
2603
|
"color_contrast_aaa": {
|
|
2583
2604
|
"issueID": "ignorable",
|
|
2584
2605
|
"quality": 1,
|
|
2585
|
-
"what": "Text contrast may be less than enhanced but the element is invisible
|
|
2606
|
+
"what": "Text contrast may be less than enhanced but the element is invisible",
|
|
2607
|
+
"whyIgnore": "invalid"
|
|
2586
2608
|
},
|
|
2587
2609
|
"css_images_convey_information": {
|
|
2588
2610
|
"issueID": "ignorable",
|
|
2589
2611
|
"quality": 1,
|
|
2590
|
-
"what": "Background image may be informative
|
|
2612
|
+
"what": "Background image may be informative",
|
|
2613
|
+
"whyIgnore": "speculative"
|
|
2591
2614
|
},
|
|
2592
2615
|
"empty_link_element": {
|
|
2593
2616
|
"issueID": "ignorable",
|
|
2594
2617
|
"quality": 1,
|
|
2595
|
-
"what": "Element has no visible and accessible name
|
|
2618
|
+
"what": "Element has no visible and accessible name",
|
|
2619
|
+
"whyIgnore": "invalid"
|
|
2596
2620
|
},
|
|
2597
2621
|
"fieldset_no_legend": {
|
|
2598
2622
|
"issueID": "ignorable",
|
|
2599
2623
|
"quality": 1,
|
|
2600
|
-
"what": "First child element of the element is not a legend
|
|
2624
|
+
"what": "First child element of the element is not a legend",
|
|
2625
|
+
"whyIgnore": "duplicative"
|
|
2601
2626
|
},
|
|
2602
2627
|
"flickering": {
|
|
2603
2628
|
"issueID": "ignorable",
|
|
2604
2629
|
"quality": 0,
|
|
2605
|
-
"what": "Excessive flashing may exist
|
|
2630
|
+
"what": "Excessive flashing may exist",
|
|
2631
|
+
"whyIgnore": "speculative"
|
|
2606
2632
|
},
|
|
2607
2633
|
"links_language_destination": {
|
|
2608
2634
|
"issueID": "ignorable",
|
|
2609
2635
|
"quality": 1,
|
|
2610
|
-
"what": "Link destination has a named host and may be in an unexpected language
|
|
2636
|
+
"what": "Link destination has a named host and may be in an unexpected language",
|
|
2637
|
+
"whyIgnore": "speculative"
|
|
2611
2638
|
},
|
|
2612
2639
|
"links_not_visually_evident_without_color_vision": {
|
|
2613
2640
|
"issueID": "ignorable",
|
|
2614
2641
|
"quality": 1,
|
|
2615
|
-
"what": "Element is a link, but its style properties do not differentiate it from its parent
|
|
2642
|
+
"what": "Element is a link, but its style properties do not differentiate it from its parent",
|
|
2643
|
+
"whyIgnore": "irrelevant"
|
|
2616
2644
|
},
|
|
2617
2645
|
"links_same_content_different_url": {
|
|
2618
2646
|
"issueID": "ignorable",
|
|
2619
2647
|
"quality": 1,
|
|
2620
|
-
"what": "Links with the same text content have different destination URLs
|
|
2648
|
+
"what": "Links with the same text content have different destination URLs",
|
|
2649
|
+
"whyIgnore": "invalid"
|
|
2621
2650
|
},
|
|
2622
2651
|
"meaningful_content_sequence": {
|
|
2623
2652
|
"issueID": "ignorable",
|
|
2624
2653
|
"quality": 0,
|
|
2625
|
-
"what": "The content sequence may fail to be meaningful
|
|
2654
|
+
"what": "The content sequence may fail to be meaningful",
|
|
2655
|
+
"whyIgnore": "speculative"
|
|
2626
2656
|
},
|
|
2627
2657
|
"missing_alt_attribute": {
|
|
2628
2658
|
"issueID": "ignorable",
|
|
2629
2659
|
"quality": 1,
|
|
2630
|
-
"what": "Image has no alt attribute
|
|
2660
|
+
"what": "Image has no alt attribute",
|
|
2661
|
+
"whyIgnore": "invalid"
|
|
2631
2662
|
},
|
|
2632
2663
|
"motion_actuation": {
|
|
2633
2664
|
"issueID": "ignorable",
|
|
2634
2665
|
"quality": 0,
|
|
2635
|
-
"what": "Document listens for device motion or rotation
|
|
2666
|
+
"what": "Document listens for device motion or rotation",
|
|
2667
|
+
"whyIgnore": "speculative"
|
|
2636
2668
|
},
|
|
2637
2669
|
"overlay": {
|
|
2638
2670
|
"issueID": "ignorable",
|
|
2639
2671
|
"quality": 0,
|
|
2640
|
-
"what": "Document contains a commercial overlay modifier that may fail or invalidate test results
|
|
2672
|
+
"what": "Document contains a commercial overlay modifier that may fail or invalidate test results",
|
|
2673
|
+
"whyIgnore": "unreliable"
|
|
2641
2674
|
},
|
|
2642
2675
|
"object_missing_body": {
|
|
2643
2676
|
"issueID": "ignorable",
|
|
2644
2677
|
"quality": 0,
|
|
2645
|
-
"what": "object element has no body to act as a text alternative
|
|
2678
|
+
"what": "object element has no body to act as a text alternative",
|
|
2679
|
+
"whyIgnore": "invalid"
|
|
2646
2680
|
},
|
|
2647
2681
|
"reflow": {
|
|
2648
2682
|
"issueID": "ignorable",
|
|
2649
2683
|
"quality": 0,
|
|
2650
|
-
"what": "Page may require horizontal scrolling
|
|
2684
|
+
"what": "Page may require horizontal scrolling",
|
|
2685
|
+
"whyIgnore": "speculative"
|
|
2651
2686
|
},
|
|
2652
2687
|
"text_color_convey_information": {
|
|
2653
2688
|
"issueID": "ignorable",
|
|
2654
2689
|
"quality": 1,
|
|
2655
|
-
"what": "Color may give information not given also by text
|
|
2690
|
+
"what": "Color may give information not given also by text",
|
|
2691
|
+
"whyIgnore": "speculative"
|
|
2656
2692
|
},
|
|
2657
2693
|
"duplicated_id_attribute": {
|
|
2658
2694
|
"issueID": "duplicateID",
|
|
@@ -3272,17 +3308,20 @@ const rulesData = {
|
|
|
3272
3308
|
"css-orientation-lock": {
|
|
3273
3309
|
"issueID": "ignorable",
|
|
3274
3310
|
"quality": 0,
|
|
3275
|
-
"what": "CSS media query locks display orientation
|
|
3311
|
+
"what": "CSS media query locks display orientation",
|
|
3312
|
+
"whyIgnore": "unreliable"
|
|
3276
3313
|
},
|
|
3277
3314
|
"frame-tested": {
|
|
3278
3315
|
"issueID": "ignorable",
|
|
3279
3316
|
"quality": 0,
|
|
3280
|
-
"what": "Some content is in an iframe and so may not be testable for accessibility
|
|
3317
|
+
"what": "Some content is in an iframe and so may not be testable for accessibility",
|
|
3318
|
+
"whyIgnore": "speculative"
|
|
3281
3319
|
},
|
|
3282
3320
|
"hidden-content": {
|
|
3283
3321
|
"issueID": "ignorable",
|
|
3284
3322
|
"quality": 0,
|
|
3285
|
-
"what": "Some content is hidden and so may not be testable for accessibility
|
|
3323
|
+
"what": "Some content is hidden and so may not be testable for accessibility",
|
|
3324
|
+
"whyIgnore": "speculative"
|
|
3286
3325
|
},
|
|
3287
3326
|
"duplicate-id": {
|
|
3288
3327
|
"issueID": "duplicateID",
|
|
@@ -3702,37 +3741,44 @@ const rulesData = {
|
|
|
3702
3741
|
"altNull": {
|
|
3703
3742
|
"issueID": "ignorable",
|
|
3704
3743
|
"quality": 0,
|
|
3705
|
-
"what": "img element not inside a link has an empty alt attribute
|
|
3744
|
+
"what": "img element not inside a link has an empty alt attribute",
|
|
3745
|
+
"whyIgnore": "speculative"
|
|
3706
3746
|
},
|
|
3707
3747
|
"altPartOfLinkWithText": {
|
|
3708
3748
|
"issueID": "ignorable",
|
|
3709
3749
|
"quality": 0,
|
|
3710
|
-
"what": "Name of the link enclosing the img element includes its alt attribute, so may be unclear
|
|
3750
|
+
"what": "Name of the link enclosing the img element includes its alt attribute, so may be unclear",
|
|
3751
|
+
"whyIgnore": "speculative"
|
|
3711
3752
|
},
|
|
3712
3753
|
"embedAudio": {
|
|
3713
3754
|
"issueID": "ignorable",
|
|
3714
3755
|
"quality": 0,
|
|
3715
|
-
"what": "Element is audio, so may lack an accurate transcript
|
|
3756
|
+
"what": "Element is audio, so may lack an accurate transcript",
|
|
3757
|
+
"whyIgnore": "speculative"
|
|
3716
3758
|
},
|
|
3717
3759
|
"embedCustom": {
|
|
3718
3760
|
"issueID": "ignorable",
|
|
3719
3761
|
"quality": 0,
|
|
3720
|
-
"what": "Embedded custom element may fail to be accessible
|
|
3762
|
+
"what": "Embedded custom element may fail to be accessible",
|
|
3763
|
+
"whyIgnore": "speculative"
|
|
3721
3764
|
},
|
|
3722
3765
|
"embedTwitter": {
|
|
3723
3766
|
"issueID": "ignorable",
|
|
3724
3767
|
"quality": 0,
|
|
3725
|
-
"what": "Element is a Twitter feed, so may add many items on scroll and thus be impractical to exit by keyboard
|
|
3768
|
+
"what": "Element is a Twitter feed, so may add many items on scroll and thus be impractical to exit by keyboard",
|
|
3769
|
+
"whyIgnore": "speculative"
|
|
3726
3770
|
},
|
|
3727
3771
|
"embedVideo": {
|
|
3728
3772
|
"issueID": "ignorable",
|
|
3729
3773
|
"quality": 0,
|
|
3730
|
-
"what": "Element is video, so may lack captions
|
|
3774
|
+
"what": "Element is video, so may lack captions",
|
|
3775
|
+
"whyIgnore": "speculative"
|
|
3731
3776
|
},
|
|
3732
3777
|
"embedVisualization": {
|
|
3733
3778
|
"issueID": "ignorable",
|
|
3734
3779
|
"quality": 0,
|
|
3735
|
-
"what": "Element is a visualization, so may lack a nonvisual equivalent
|
|
3780
|
+
"what": "Element is a visualization, so may lack a nonvisual equivalent",
|
|
3781
|
+
"whyIgnore": "speculative"
|
|
3736
3782
|
},
|
|
3737
3783
|
"altMissing": {
|
|
3738
3784
|
"issueID": "imageNoText",
|
|
@@ -3877,7 +3923,8 @@ const rulesData = {
|
|
|
3877
3923
|
"W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48": {
|
|
3878
3924
|
"issueID": "ignorable",
|
|
3879
3925
|
"quality": 1,
|
|
3880
|
-
"what": "If element contains a navigation section, it is recommended that it be marked up as a list
|
|
3926
|
+
"what": "If element contains a navigation section, it is recommended that it be marked up as a list",
|
|
3927
|
+
"whyIgnore": "speculative"
|
|
3881
3928
|
},
|
|
3882
3929
|
"E-AAA.4_1_1.F77": {
|
|
3883
3930
|
"issueID": "duplicateID",
|
|
@@ -4782,22 +4829,26 @@ const rulesData = {
|
|
|
4782
4829
|
"aria_child_valid": {
|
|
4783
4830
|
"issueID": "ignorable",
|
|
4784
4831
|
"quality": 1,
|
|
4785
|
-
"what": "Child element has a role not allowed for the role of the parent
|
|
4832
|
+
"what": "Child element has a role not allowed for the role of the parent",
|
|
4833
|
+
"whyIgnore": "invalid"
|
|
4786
4834
|
},
|
|
4787
4835
|
"aria_landmark_name_unique": {
|
|
4788
4836
|
"issueID": "ignorable",
|
|
4789
4837
|
"quality": 1,
|
|
4790
|
-
"what": "Multiple landmarks with the same parent region are not distinguished from one another
|
|
4838
|
+
"what": "Multiple landmarks with the same parent region are not distinguished from one another (invalid on invisible elements)",
|
|
4839
|
+
"whyIgnore": "invalid"
|
|
4791
4840
|
},
|
|
4792
4841
|
"html_lang_exists": {
|
|
4793
4842
|
"issueID": "ignorable",
|
|
4794
4843
|
"quality": 1,
|
|
4795
|
-
"what": "Page detected as HTML, but has no lang attribute
|
|
4844
|
+
"what": "Page detected as HTML, but has no lang attribute",
|
|
4845
|
+
"whyIgnore": "invalid"
|
|
4796
4846
|
},
|
|
4797
4847
|
"style_background_decorative": {
|
|
4798
4848
|
"issueID": "ignorable",
|
|
4799
4849
|
"quality": 1,
|
|
4800
|
-
"what": "CSS background image may be informative
|
|
4850
|
+
"what": "CSS background image may be informative",
|
|
4851
|
+
"whyIgnore": "speculative"
|
|
4801
4852
|
},
|
|
4802
4853
|
"element_id_unique": {
|
|
4803
4854
|
"issueID": "duplicateID",
|
|
@@ -5403,22 +5454,26 @@ const rulesData = {
|
|
|
5403
5454
|
"Element head is missing a required instance of child element title.": {
|
|
5404
5455
|
"issueID": "ignorable",
|
|
5405
5456
|
"quality": 1,
|
|
5406
|
-
"what": "head element has no child title element
|
|
5457
|
+
"what": "head element has no child title element",
|
|
5458
|
+
"whyIgnore": "invalid"
|
|
5407
5459
|
},
|
|
5408
5460
|
"Element img is missing required attribute src.": {
|
|
5409
5461
|
"issueID": "ignorable",
|
|
5410
5462
|
"quality": 1,
|
|
5411
|
-
"what": "img element has no src attribute
|
|
5463
|
+
"what": "img element has no src attribute",
|
|
5464
|
+
"whyIgnore": "invalid"
|
|
5412
5465
|
},
|
|
5413
5466
|
"Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)": {
|
|
5414
5467
|
"issueID": "ignorable",
|
|
5415
5468
|
"quality": 0,
|
|
5416
|
-
"what": "Element contains a prohibited mediaelementwrapper element
|
|
5469
|
+
"what": "Element contains a prohibited mediaelementwrapper element",
|
|
5470
|
+
"whyIgnore": "invalid"
|
|
5417
5471
|
},
|
|
5418
5472
|
"Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.": {
|
|
5419
5473
|
"issueID": "ignorable",
|
|
5420
5474
|
"quality": 1,
|
|
5421
|
-
"what": "Void element has a useless trailing slash.
|
|
5475
|
+
"what": "Void element has a useless trailing slash.",
|
|
5476
|
+
"whyIgnore": "invalid"
|
|
5422
5477
|
},
|
|
5423
5478
|
"The aria-placeholder attribute must not be specified on elements that have a placeholder attribute.": {
|
|
5424
5479
|
"issueID": "placeholderPlusAria",
|
|
@@ -6949,22 +7004,26 @@ const rulesData = {
|
|
|
6949
7004
|
"Element head is missing a required instance of child element title.": {
|
|
6950
7005
|
"issueID": "ignorable",
|
|
6951
7006
|
"quality": 1,
|
|
6952
|
-
"what": "head element has no child title element
|
|
7007
|
+
"what": "head element has no child title element",
|
|
7008
|
+
"whyIgnore": "invalid"
|
|
6953
7009
|
},
|
|
6954
7010
|
"Element img is missing required attribute src.": {
|
|
6955
7011
|
"issueID": "ignorable",
|
|
6956
7012
|
"quality": 1,
|
|
6957
|
-
"what": "img element has no src attribute
|
|
7013
|
+
"what": "img element has no src attribute",
|
|
7014
|
+
"whyIgnore": "invalid"
|
|
6958
7015
|
},
|
|
6959
7016
|
"Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)": {
|
|
6960
7017
|
"issueID": "ignorable",
|
|
6961
7018
|
"quality": 0,
|
|
6962
|
-
"what": "Element contains a prohibited mediaelementwrapper element
|
|
7019
|
+
"what": "Element contains a prohibited mediaelementwrapper element",
|
|
7020
|
+
"whyIgnore": "invalid"
|
|
6963
7021
|
},
|
|
6964
7022
|
"Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.": {
|
|
6965
7023
|
"issueID": "ignorable",
|
|
6966
7024
|
"quality": 1,
|
|
6967
|
-
"what": "Void element has a useless trailing slash.
|
|
7025
|
+
"what": "Void element has a useless trailing slash.",
|
|
7026
|
+
"whyIgnore": "invalid"
|
|
6968
7027
|
},
|
|
6969
7028
|
"The aria-placeholder attribute must not be specified on elements that have a placeholder attribute.": {
|
|
6970
7029
|
"issueID": "placeholderPlusAria",
|
|
@@ -8495,157 +8554,188 @@ const rulesData = {
|
|
|
8495
8554
|
"QW-ACT-R10": {
|
|
8496
8555
|
"issueID": "ignorable",
|
|
8497
8556
|
"quality": 1,
|
|
8498
|
-
"what": "iframe elements with identical accessible names have different purposes
|
|
8557
|
+
"what": "iframe elements with identical accessible names have different purposes (on invisible elements)",
|
|
8558
|
+
"whyIgnore": "invalid"
|
|
8499
8559
|
},
|
|
8500
8560
|
"QW-ACT-R13": {
|
|
8501
8561
|
"issueID": "ignorable",
|
|
8502
8562
|
"quality": 1,
|
|
8503
|
-
"what": "Element with aria-hidden has focusable content
|
|
8563
|
+
"what": "Element with aria-hidden has focusable content",
|
|
8564
|
+
"whyIgnore": "invalid"
|
|
8504
8565
|
},
|
|
8505
8566
|
"QW-ACT-R41": {
|
|
8506
8567
|
"issueID": "ignorable",
|
|
8507
8568
|
"quality": 1,
|
|
8508
|
-
"what": "Error message describes no invalid form field value
|
|
8569
|
+
"what": "Error message describes no invalid form field value",
|
|
8570
|
+
"whyIgnore": "speculative"
|
|
8509
8571
|
},
|
|
8510
8572
|
"QW-ACT-R52": {
|
|
8511
8573
|
"issueID": "ignorable",
|
|
8512
8574
|
"quality": 0,
|
|
8513
|
-
"what": "video element visual-only content has no description track
|
|
8575
|
+
"what": "video element visual-only content has no description track (description tracks and this ACT rule have been deprecated)",
|
|
8576
|
+
"whyIgnore": "irrelevant"
|
|
8514
8577
|
},
|
|
8515
8578
|
"QW-ACT-R57": {
|
|
8516
8579
|
"issueID": "ignorable",
|
|
8517
8580
|
"quality": 0,
|
|
8518
|
-
"what": "video element visual content has no description track
|
|
8581
|
+
"what": "video element visual content has no description track (description tracks and this ACT rule have been deprecated)",
|
|
8582
|
+
"whyIgnore": "irrelevant"
|
|
8519
8583
|
},
|
|
8520
8584
|
"QW-ACT-R62": {
|
|
8521
8585
|
"issueID": "ignorable",
|
|
8522
8586
|
"quality": 0,
|
|
8523
|
-
"what": "Element in the sequential focus order may have no visible focus
|
|
8587
|
+
"what": "Element in the sequential focus order may have no visible focus",
|
|
8588
|
+
"whyIgnore": "speculative"
|
|
8524
8589
|
},
|
|
8525
8590
|
"QW-ACT-R63": {
|
|
8526
8591
|
"issueID": "ignorable",
|
|
8527
8592
|
"quality": 0,
|
|
8528
|
-
"what": "Document has no landmark with non-repeated content
|
|
8593
|
+
"what": "Document has no landmark with non-repeated content",
|
|
8594
|
+
"whyIgnore": "invalid"
|
|
8529
8595
|
},
|
|
8530
8596
|
"QW-ACT-R64": {
|
|
8531
8597
|
"issueID": "ignorable",
|
|
8532
8598
|
"quality": 0,
|
|
8533
|
-
"what": "Document has no heading for non-repeated content
|
|
8599
|
+
"what": "Document has no heading for non-repeated content",
|
|
8600
|
+
"whyIgnore": "invalid"
|
|
8534
8601
|
},
|
|
8535
8602
|
"QW-ACT-R73": {
|
|
8536
8603
|
"issueID": "ignorable",
|
|
8537
8604
|
"quality": 0,
|
|
8538
|
-
"what": "Block of repeated content is not collapsible
|
|
8605
|
+
"what": "Block of repeated content is not collapsible",
|
|
8606
|
+
"whyIgnore": "invalid"
|
|
8539
8607
|
},
|
|
8540
8608
|
"QW-ACT-R74": {
|
|
8541
8609
|
"issueID": "ignorable",
|
|
8542
8610
|
"quality": 0,
|
|
8543
|
-
"what": "Document has no instrument to move focus to non-repeated content
|
|
8611
|
+
"what": "Document has no instrument to move focus to non-repeated content",
|
|
8612
|
+
"whyIgnore": "invalid"
|
|
8544
8613
|
},
|
|
8545
8614
|
"QW-ACT-R75": {
|
|
8546
8615
|
"issueID": "ignorable",
|
|
8547
8616
|
"quality": 0,
|
|
8548
|
-
"what": "Blocks of repeated content cannot be bypassed
|
|
8617
|
+
"what": "Blocks of repeated content cannot be bypassed",
|
|
8618
|
+
"whyIgnore": "invalid"
|
|
8549
8619
|
},
|
|
8550
8620
|
"QW-BP1": {
|
|
8551
8621
|
"issueID": "ignorable",
|
|
8552
8622
|
"quality": 0,
|
|
8553
|
-
"what": "h1-h6 may fail to be used to identify headings
|
|
8623
|
+
"what": "h1-h6 may fail to be used to identify headings",
|
|
8624
|
+
"whyIgnore": "speculative"
|
|
8554
8625
|
},
|
|
8555
8626
|
"QW-BP2": {
|
|
8556
8627
|
"issueID": "ignorable",
|
|
8557
8628
|
"quality": 1,
|
|
8558
|
-
"what": "Image text alternative is not concise
|
|
8629
|
+
"what": "Image text alternative is not concise",
|
|
8630
|
+
"whyIgnore": "invalid"
|
|
8559
8631
|
},
|
|
8560
8632
|
"QW-BP17": {
|
|
8561
8633
|
"issueID": "ignorable",
|
|
8562
8634
|
"quality": 1,
|
|
8563
|
-
"what": "No link at the beginning of a block of repeated content goes to the end of the block
|
|
8635
|
+
"what": "No link at the beginning of a block of repeated content goes to the end of the block",
|
|
8636
|
+
"whyIgnore": "invalid"
|
|
8564
8637
|
},
|
|
8565
8638
|
"QW-BP20": {
|
|
8566
8639
|
"issueID": "ignorable",
|
|
8567
8640
|
"quality": 1,
|
|
8568
|
-
"what": "Document has more than 1 banner landmark
|
|
8641
|
+
"what": "Document has more than 1 banner landmark (counts hidden elements)",
|
|
8642
|
+
"whyIgnore": "invalid"
|
|
8569
8643
|
},
|
|
8570
8644
|
"QW-BP22": {
|
|
8571
8645
|
"issueID": "ignorable",
|
|
8572
8646
|
"quality": 1,
|
|
8573
|
-
"what": "Document has more than 1 element with a main role
|
|
8647
|
+
"what": "Document has more than 1 element with a main role",
|
|
8648
|
+
"whyIgnore": "invalid"
|
|
8574
8649
|
},
|
|
8575
8650
|
"QW-BP23": {
|
|
8576
8651
|
"issueID": "ignorable",
|
|
8577
8652
|
"quality": .1,
|
|
8578
|
-
"what": "Element is not in a true list
|
|
8653
|
+
"what": "Element is not in a true list",
|
|
8654
|
+
"whyIgnore": "invalid"
|
|
8579
8655
|
},
|
|
8580
8656
|
"QW-BP24": {
|
|
8581
8657
|
"issueID": "ignorable",
|
|
8582
8658
|
"quality": 1,
|
|
8583
|
-
"what": "ul or ol element has a child other than li, script, or template
|
|
8659
|
+
"what": "ul or ol element has a child other than li, script, or template",
|
|
8660
|
+
"whyIgnore": "invalid"
|
|
8584
8661
|
},
|
|
8585
8662
|
"QW-BP28": {
|
|
8586
8663
|
"issueID": "ignorable",
|
|
8587
8664
|
"quality": 1,
|
|
8588
|
-
"what": "h1 element missing or used more than once
|
|
8665
|
+
"what": "h1 element missing or used more than once",
|
|
8666
|
+
"whyIgnore": "invalid"
|
|
8589
8667
|
},
|
|
8590
8668
|
"QW-BP29": {
|
|
8591
8669
|
"issueID": "ignorable",
|
|
8592
8670
|
"quality": 0,
|
|
8593
|
-
"what": "lang and xml:lang attribute of html element differ
|
|
8671
|
+
"what": "lang and xml:lang attribute of html element differ",
|
|
8672
|
+
"whyIgnore": "invalid"
|
|
8594
8673
|
},
|
|
8595
8674
|
"QW-WCAG-T4": {
|
|
8596
8675
|
"issueID": "ignorable",
|
|
8597
8676
|
"quality": 0,
|
|
8598
|
-
"what": "summary attribute is not used to give an overview of a data table
|
|
8677
|
+
"what": "summary attribute is not used to give an overview of a data table",
|
|
8678
|
+
"whyIgnore": "invalid"
|
|
8599
8679
|
},
|
|
8600
8680
|
"QW-WCAG-T8": {
|
|
8601
8681
|
"issueID": "ignorable",
|
|
8602
8682
|
"quality": 1,
|
|
8603
|
-
"what": "Text alternative is suspect
|
|
8683
|
+
"what": "Text alternative is suspect",
|
|
8684
|
+
"whyIgnore": "invalid"
|
|
8604
8685
|
},
|
|
8605
8686
|
"QW-WCAG-T9": {
|
|
8606
8687
|
"issueID": "ignorable",
|
|
8607
8688
|
"quality": 0,
|
|
8608
|
-
"what": "Page may fail to be organized using headings
|
|
8689
|
+
"what": "Page may fail to be organized using headings",
|
|
8690
|
+
"whyIgnore": "speculative"
|
|
8609
8691
|
},
|
|
8610
8692
|
"QW-WCAG-T15": {
|
|
8611
8693
|
"issueID": "ignorable",
|
|
8612
8694
|
"quality": 0,
|
|
8613
|
-
"what": "link element may be used for navigation but not in the head
|
|
8695
|
+
"what": "link element may be used for navigation but not in the head",
|
|
8696
|
+
"whyIgnore": "invalid"
|
|
8614
8697
|
},
|
|
8615
8698
|
"QW-WCAG-T20": {
|
|
8616
8699
|
"issueID": "ignorable",
|
|
8617
8700
|
"quality": 0,
|
|
8618
|
-
"what": "Link title may fail to describe the link correctly
|
|
8701
|
+
"what": "Link title may fail to describe the link correctly",
|
|
8702
|
+
"whyIgnore": "speculative"
|
|
8619
8703
|
},
|
|
8620
8704
|
"QW-WCAG-T23": {
|
|
8621
8705
|
"issueID": "ignorable",
|
|
8622
8706
|
"quality": 0,
|
|
8623
|
-
"what": "No link at the top of the page goes directly to the main content area
|
|
8707
|
+
"what": "No link at the top of the page goes directly to the main content area",
|
|
8708
|
+
"whyIgnore": "invalid"
|
|
8624
8709
|
},
|
|
8625
8710
|
"QW-WCAG-T24": {
|
|
8626
8711
|
"issueID": "ignorable",
|
|
8627
8712
|
"quality": .5,
|
|
8628
|
-
"what": "Script removes the focus when focus is received
|
|
8713
|
+
"what": "Script removes the focus when focus is received",
|
|
8714
|
+
"whyIgnore": "invalid"
|
|
8629
8715
|
},
|
|
8630
8716
|
"QW-WCAG-T28": {
|
|
8631
8717
|
"issueID": "ignorable",
|
|
8632
8718
|
"quality": .8,
|
|
8633
|
-
"what": "Font size set to an absolute unit value
|
|
8719
|
+
"what": "Font size set to an absolute unit value",
|
|
8720
|
+
"whyIgnore": "invalid"
|
|
8634
8721
|
},
|
|
8635
8722
|
"QW-WCAG-T31": {
|
|
8636
8723
|
"issueID": "ignorable",
|
|
8637
8724
|
"quality": 1,
|
|
8638
|
-
"what": "Foreground or background color is specified but not both
|
|
8725
|
+
"what": "Foreground or background color is specified but not both (on invisible elements)",
|
|
8726
|
+
"whyIgnore": "invalid"
|
|
8639
8727
|
},
|
|
8640
8728
|
"QW-WCAG-T32": {
|
|
8641
8729
|
"issueID": "ignorable",
|
|
8642
8730
|
"quality": 1,
|
|
8643
|
-
"what": "ol, ul or dl may fail to be used for a list or group of links
|
|
8731
|
+
"what": "ol, ul or dl may fail to be used for a list or group of links",
|
|
8732
|
+
"whyIgnore": "speculative"
|
|
8644
8733
|
},
|
|
8645
8734
|
"QW-WCAG-T35": {
|
|
8646
8735
|
"issueID": "ignorable",
|
|
8647
8736
|
"quality": 1,
|
|
8648
|
-
"what": "Several elements have this id attribute value
|
|
8737
|
+
"what": "Several elements have this id attribute value",
|
|
8738
|
+
"whyIgnore": "invalid"
|
|
8649
8739
|
},
|
|
8650
8740
|
"QW-ACT-R18": {
|
|
8651
8741
|
"issueID": "duplicateID",
|
|
@@ -9747,7 +9837,7 @@ const rules = deepFreeze(rulesData);
|
|
|
9747
9837
|
const makeIssueRules = (ruleTable, issueTable = issues) => {
|
|
9748
9838
|
const errors = [];
|
|
9749
9839
|
const checkEntry = (engineID, variabilityName, ruleID, entry, engineRuleIDs) => {
|
|
9750
|
-
const { issueID, quality, what, supersededBy } = entry;
|
|
9840
|
+
const { issueID, quality, what, supersededBy, outcome, uncertainty, toCheck, whyIgnore: entryWhyIgnore } = entry;
|
|
9751
9841
|
if (!ruleID.length) errors.push(`${engineID}.${variabilityName} has a rule with an empty ruleID`);
|
|
9752
9842
|
if (typeof issueID !== "string" || !issueID.length || !(issueID in issueTable)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid issueID (${JSON.stringify(issueID)})`);
|
|
9753
9843
|
if (typeof quality !== "number") errors.push(`${engineID}.${variabilityName}.${ruleID} has a non-numeric quality (${JSON.stringify(quality)})`);
|
|
@@ -9757,6 +9847,10 @@ const makeIssueRules = (ruleTable, issueTable = issues) => {
|
|
|
9757
9847
|
else if (supersededBy === ruleID) errors.push(`${engineID}.${variabilityName}.${ruleID} has supersededBy naming itself`);
|
|
9758
9848
|
else if (!engineRuleIDs.has(supersededBy)) errors.push(`${engineID}.${variabilityName}.${ruleID} has supersededBy (${supersededBy}), which is not a rule of ${engineID}`);
|
|
9759
9849
|
}
|
|
9850
|
+
if (outcome !== void 0 && !outcomes.includes(outcome)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid outcome (${JSON.stringify(outcome)})`);
|
|
9851
|
+
if (uncertainty !== void 0 && !uncertainties.includes(uncertainty)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid uncertainty (${JSON.stringify(uncertainty)})`);
|
|
9852
|
+
if (toCheck !== void 0 && (typeof toCheck !== "string" || !toCheck.length)) errors.push(`${engineID}.${variabilityName}.${ruleID} has a non-string or empty toCheck (${JSON.stringify(toCheck)})`);
|
|
9853
|
+
if (entryWhyIgnore !== void 0 && !whyIgnore.includes(entryWhyIgnore)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid whyIgnore (${JSON.stringify(entryWhyIgnore)})`);
|
|
9760
9854
|
if (variabilityName === "variable") {
|
|
9761
9855
|
if (!/[.*+?^${}()|[\]\\]/.test(ruleID)) errors.push(`${engineID}.${variabilityName}.${ruleID} has no regex metacharacters, so it should be an invariant rule`);
|
|
9762
9856
|
else try {
|
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
//#region src/index.d.ts
|
|
2
|
+
declare const outcomes: readonly ['failed', 'cantTell'];
|
|
3
|
+
declare const uncertainties: readonly ['not-computable', 'judgement-required', 'runtime-dependent', 'spec-only', 'equivalence-unknown', 'out-of-scope'];
|
|
4
|
+
declare const whyIgnore: readonly ['duplicative', 'invalid', 'irrelevant', 'speculative', 'unreliable'];
|
|
2
5
|
type IssueID = keyof typeof issuesData;
|
|
3
6
|
type IssueEngineRuleCounts = Record<string, number>;
|
|
7
|
+
type Outcome = typeof outcomes[number];
|
|
8
|
+
type Uncertainty = typeof uncertainties[number];
|
|
9
|
+
type WhyIgnore = typeof whyIgnore[number];
|
|
4
10
|
interface Issue {
|
|
5
11
|
summary: string;
|
|
6
12
|
why: string;
|
|
@@ -17,6 +23,10 @@ interface RuleEntry {
|
|
|
17
23
|
quality: number;
|
|
18
24
|
what: string;
|
|
19
25
|
supersededBy?: string | null;
|
|
26
|
+
outcome?: Outcome;
|
|
27
|
+
uncertainty?: Uncertainty;
|
|
28
|
+
toCheck?: string;
|
|
29
|
+
whyIgnore?: WhyIgnore;
|
|
20
30
|
}
|
|
21
31
|
interface EngineRules {
|
|
22
32
|
invariant: Record<string, RuleEntry>;
|
|
@@ -2279,4 +2289,4 @@ declare const getEngineRuleCounts: (ruleTable?: Record<string, EngineRules>) =>
|
|
|
2279
2289
|
declare const issueRules: Record<string, Record<string, ruleIDsByType>>;
|
|
2280
2290
|
declare const issueStats: Record<string, IssueEngineRuleCounts>;
|
|
2281
2291
|
//#endregion
|
|
2282
|
-
export { IssueEngineRuleCounts, getEditableData, getEngineRuleCounts, getSingleEngineIssues, issueRules, issueStats, issues, makeIssueRules, makeIssueStats, ruleIDsByType, rules };
|
|
2292
|
+
export { IssueEngineRuleCounts, Outcome, Uncertainty, WhyIgnore, getEditableData, getEngineRuleCounts, getSingleEngineIssues, issueRules, issueStats, issues, makeIssueRules, makeIssueStats, ruleIDsByType, rules };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
//#region src/index.d.ts
|
|
2
|
+
declare const outcomes: readonly ['failed', 'cantTell'];
|
|
3
|
+
declare const uncertainties: readonly ['not-computable', 'judgement-required', 'runtime-dependent', 'spec-only', 'equivalence-unknown', 'out-of-scope'];
|
|
4
|
+
declare const whyIgnore: readonly ['duplicative', 'invalid', 'irrelevant', 'speculative', 'unreliable'];
|
|
2
5
|
type IssueID = keyof typeof issuesData;
|
|
3
6
|
type IssueEngineRuleCounts = Record<string, number>;
|
|
7
|
+
type Outcome = typeof outcomes[number];
|
|
8
|
+
type Uncertainty = typeof uncertainties[number];
|
|
9
|
+
type WhyIgnore = typeof whyIgnore[number];
|
|
4
10
|
interface Issue {
|
|
5
11
|
summary: string;
|
|
6
12
|
why: string;
|
|
@@ -17,6 +23,10 @@ interface RuleEntry {
|
|
|
17
23
|
quality: number;
|
|
18
24
|
what: string;
|
|
19
25
|
supersededBy?: string | null;
|
|
26
|
+
outcome?: Outcome;
|
|
27
|
+
uncertainty?: Uncertainty;
|
|
28
|
+
toCheck?: string;
|
|
29
|
+
whyIgnore?: WhyIgnore;
|
|
20
30
|
}
|
|
21
31
|
interface EngineRules {
|
|
22
32
|
invariant: Record<string, RuleEntry>;
|
|
@@ -2279,4 +2289,4 @@ declare const getEngineRuleCounts: (ruleTable?: Record<string, EngineRules>) =>
|
|
|
2279
2289
|
declare const issueRules: Record<string, Record<string, ruleIDsByType>>;
|
|
2280
2290
|
declare const issueStats: Record<string, IssueEngineRuleCounts>;
|
|
2281
2291
|
//#endregion
|
|
2282
|
-
export { IssueEngineRuleCounts, getEditableData, getEngineRuleCounts, getSingleEngineIssues, issueRules, issueStats, issues, makeIssueRules, makeIssueStats, ruleIDsByType, rules };
|
|
2292
|
+
export { IssueEngineRuleCounts, Outcome, Uncertainty, WhyIgnore, getEditableData, getEngineRuleCounts, getSingleEngineIssues, issueRules, issueStats, issues, makeIssueRules, makeIssueStats, ruleIDsByType, rules };
|
package/dist/index.mjs
CHANGED
|
@@ -1,4 +1,20 @@
|
|
|
1
1
|
//#region src/index.ts
|
|
2
|
+
const outcomes = ["failed", "cantTell"];
|
|
3
|
+
const uncertainties = [
|
|
4
|
+
"not-computable",
|
|
5
|
+
"judgement-required",
|
|
6
|
+
"runtime-dependent",
|
|
7
|
+
"spec-only",
|
|
8
|
+
"equivalence-unknown",
|
|
9
|
+
"out-of-scope"
|
|
10
|
+
];
|
|
11
|
+
const whyIgnore = [
|
|
12
|
+
"duplicative",
|
|
13
|
+
"invalid",
|
|
14
|
+
"irrelevant",
|
|
15
|
+
"speculative",
|
|
16
|
+
"unreliable"
|
|
17
|
+
];
|
|
2
18
|
const issuesData = {
|
|
3
19
|
"ignorable": {
|
|
4
20
|
"summary": "ignorable",
|
|
@@ -2244,18 +2260,21 @@ const rulesData = {
|
|
|
2244
2260
|
"cantTellTextContrast": {
|
|
2245
2261
|
"issueID": "ignorable",
|
|
2246
2262
|
"quality": 1,
|
|
2247
|
-
"what": "Test of text contrast could not give a conclusive result
|
|
2263
|
+
"what": "Test of text contrast could not give a conclusive result",
|
|
2264
|
+
"whyIgnore": "invalid",
|
|
2248
2265
|
"supersededBy": null
|
|
2249
2266
|
},
|
|
2250
2267
|
"r73": {
|
|
2251
2268
|
"issueID": "ignorable",
|
|
2252
2269
|
"quality": 1,
|
|
2253
|
-
"what": "Text line height is not at least 1.5
|
|
2270
|
+
"what": "Text line height is not at least 1.5",
|
|
2271
|
+
"whyIgnore": "invalid"
|
|
2254
2272
|
},
|
|
2255
2273
|
"r87": {
|
|
2256
2274
|
"issueID": "ignorable",
|
|
2257
2275
|
"quality": .5,
|
|
2258
|
-
"what": "First focusable element is not a link to the main content
|
|
2276
|
+
"what": "First focusable element is not a link to the main content",
|
|
2277
|
+
"whyIgnore": "invalid"
|
|
2259
2278
|
},
|
|
2260
2279
|
"r3": {
|
|
2261
2280
|
"issueID": "duplicateID",
|
|
@@ -2571,87 +2590,104 @@ const rulesData = {
|
|
|
2571
2590
|
"capital_letters_words": {
|
|
2572
2591
|
"issueID": "ignorable",
|
|
2573
2592
|
"quality": 1,
|
|
2574
|
-
"what": "Element or its title has entirely upper-case words
|
|
2593
|
+
"what": "Element or its title has entirely upper-case words",
|
|
2594
|
+
"whyIgnore": "invalid"
|
|
2575
2595
|
},
|
|
2576
2596
|
"color_contrast_aa": {
|
|
2577
2597
|
"issueID": "ignorable",
|
|
2578
2598
|
"quality": 0,
|
|
2579
|
-
"what": "Text has contrast less than 4.5:1
|
|
2599
|
+
"what": "Text has contrast less than 4.5:1",
|
|
2600
|
+
"whyIgnore": "speculative"
|
|
2580
2601
|
},
|
|
2581
2602
|
"color_contrast_aaa": {
|
|
2582
2603
|
"issueID": "ignorable",
|
|
2583
2604
|
"quality": 1,
|
|
2584
|
-
"what": "Text contrast may be less than enhanced but the element is invisible
|
|
2605
|
+
"what": "Text contrast may be less than enhanced but the element is invisible",
|
|
2606
|
+
"whyIgnore": "invalid"
|
|
2585
2607
|
},
|
|
2586
2608
|
"css_images_convey_information": {
|
|
2587
2609
|
"issueID": "ignorable",
|
|
2588
2610
|
"quality": 1,
|
|
2589
|
-
"what": "Background image may be informative
|
|
2611
|
+
"what": "Background image may be informative",
|
|
2612
|
+
"whyIgnore": "speculative"
|
|
2590
2613
|
},
|
|
2591
2614
|
"empty_link_element": {
|
|
2592
2615
|
"issueID": "ignorable",
|
|
2593
2616
|
"quality": 1,
|
|
2594
|
-
"what": "Element has no visible and accessible name
|
|
2617
|
+
"what": "Element has no visible and accessible name",
|
|
2618
|
+
"whyIgnore": "invalid"
|
|
2595
2619
|
},
|
|
2596
2620
|
"fieldset_no_legend": {
|
|
2597
2621
|
"issueID": "ignorable",
|
|
2598
2622
|
"quality": 1,
|
|
2599
|
-
"what": "First child element of the element is not a legend
|
|
2623
|
+
"what": "First child element of the element is not a legend",
|
|
2624
|
+
"whyIgnore": "duplicative"
|
|
2600
2625
|
},
|
|
2601
2626
|
"flickering": {
|
|
2602
2627
|
"issueID": "ignorable",
|
|
2603
2628
|
"quality": 0,
|
|
2604
|
-
"what": "Excessive flashing may exist
|
|
2629
|
+
"what": "Excessive flashing may exist",
|
|
2630
|
+
"whyIgnore": "speculative"
|
|
2605
2631
|
},
|
|
2606
2632
|
"links_language_destination": {
|
|
2607
2633
|
"issueID": "ignorable",
|
|
2608
2634
|
"quality": 1,
|
|
2609
|
-
"what": "Link destination has a named host and may be in an unexpected language
|
|
2635
|
+
"what": "Link destination has a named host and may be in an unexpected language",
|
|
2636
|
+
"whyIgnore": "speculative"
|
|
2610
2637
|
},
|
|
2611
2638
|
"links_not_visually_evident_without_color_vision": {
|
|
2612
2639
|
"issueID": "ignorable",
|
|
2613
2640
|
"quality": 1,
|
|
2614
|
-
"what": "Element is a link, but its style properties do not differentiate it from its parent
|
|
2641
|
+
"what": "Element is a link, but its style properties do not differentiate it from its parent",
|
|
2642
|
+
"whyIgnore": "irrelevant"
|
|
2615
2643
|
},
|
|
2616
2644
|
"links_same_content_different_url": {
|
|
2617
2645
|
"issueID": "ignorable",
|
|
2618
2646
|
"quality": 1,
|
|
2619
|
-
"what": "Links with the same text content have different destination URLs
|
|
2647
|
+
"what": "Links with the same text content have different destination URLs",
|
|
2648
|
+
"whyIgnore": "invalid"
|
|
2620
2649
|
},
|
|
2621
2650
|
"meaningful_content_sequence": {
|
|
2622
2651
|
"issueID": "ignorable",
|
|
2623
2652
|
"quality": 0,
|
|
2624
|
-
"what": "The content sequence may fail to be meaningful
|
|
2653
|
+
"what": "The content sequence may fail to be meaningful",
|
|
2654
|
+
"whyIgnore": "speculative"
|
|
2625
2655
|
},
|
|
2626
2656
|
"missing_alt_attribute": {
|
|
2627
2657
|
"issueID": "ignorable",
|
|
2628
2658
|
"quality": 1,
|
|
2629
|
-
"what": "Image has no alt attribute
|
|
2659
|
+
"what": "Image has no alt attribute",
|
|
2660
|
+
"whyIgnore": "invalid"
|
|
2630
2661
|
},
|
|
2631
2662
|
"motion_actuation": {
|
|
2632
2663
|
"issueID": "ignorable",
|
|
2633
2664
|
"quality": 0,
|
|
2634
|
-
"what": "Document listens for device motion or rotation
|
|
2665
|
+
"what": "Document listens for device motion or rotation",
|
|
2666
|
+
"whyIgnore": "speculative"
|
|
2635
2667
|
},
|
|
2636
2668
|
"overlay": {
|
|
2637
2669
|
"issueID": "ignorable",
|
|
2638
2670
|
"quality": 0,
|
|
2639
|
-
"what": "Document contains a commercial overlay modifier that may fail or invalidate test results
|
|
2671
|
+
"what": "Document contains a commercial overlay modifier that may fail or invalidate test results",
|
|
2672
|
+
"whyIgnore": "unreliable"
|
|
2640
2673
|
},
|
|
2641
2674
|
"object_missing_body": {
|
|
2642
2675
|
"issueID": "ignorable",
|
|
2643
2676
|
"quality": 0,
|
|
2644
|
-
"what": "object element has no body to act as a text alternative
|
|
2677
|
+
"what": "object element has no body to act as a text alternative",
|
|
2678
|
+
"whyIgnore": "invalid"
|
|
2645
2679
|
},
|
|
2646
2680
|
"reflow": {
|
|
2647
2681
|
"issueID": "ignorable",
|
|
2648
2682
|
"quality": 0,
|
|
2649
|
-
"what": "Page may require horizontal scrolling
|
|
2683
|
+
"what": "Page may require horizontal scrolling",
|
|
2684
|
+
"whyIgnore": "speculative"
|
|
2650
2685
|
},
|
|
2651
2686
|
"text_color_convey_information": {
|
|
2652
2687
|
"issueID": "ignorable",
|
|
2653
2688
|
"quality": 1,
|
|
2654
|
-
"what": "Color may give information not given also by text
|
|
2689
|
+
"what": "Color may give information not given also by text",
|
|
2690
|
+
"whyIgnore": "speculative"
|
|
2655
2691
|
},
|
|
2656
2692
|
"duplicated_id_attribute": {
|
|
2657
2693
|
"issueID": "duplicateID",
|
|
@@ -3271,17 +3307,20 @@ const rulesData = {
|
|
|
3271
3307
|
"css-orientation-lock": {
|
|
3272
3308
|
"issueID": "ignorable",
|
|
3273
3309
|
"quality": 0,
|
|
3274
|
-
"what": "CSS media query locks display orientation
|
|
3310
|
+
"what": "CSS media query locks display orientation",
|
|
3311
|
+
"whyIgnore": "unreliable"
|
|
3275
3312
|
},
|
|
3276
3313
|
"frame-tested": {
|
|
3277
3314
|
"issueID": "ignorable",
|
|
3278
3315
|
"quality": 0,
|
|
3279
|
-
"what": "Some content is in an iframe and so may not be testable for accessibility
|
|
3316
|
+
"what": "Some content is in an iframe and so may not be testable for accessibility",
|
|
3317
|
+
"whyIgnore": "speculative"
|
|
3280
3318
|
},
|
|
3281
3319
|
"hidden-content": {
|
|
3282
3320
|
"issueID": "ignorable",
|
|
3283
3321
|
"quality": 0,
|
|
3284
|
-
"what": "Some content is hidden and so may not be testable for accessibility
|
|
3322
|
+
"what": "Some content is hidden and so may not be testable for accessibility",
|
|
3323
|
+
"whyIgnore": "speculative"
|
|
3285
3324
|
},
|
|
3286
3325
|
"duplicate-id": {
|
|
3287
3326
|
"issueID": "duplicateID",
|
|
@@ -3701,37 +3740,44 @@ const rulesData = {
|
|
|
3701
3740
|
"altNull": {
|
|
3702
3741
|
"issueID": "ignorable",
|
|
3703
3742
|
"quality": 0,
|
|
3704
|
-
"what": "img element not inside a link has an empty alt attribute
|
|
3743
|
+
"what": "img element not inside a link has an empty alt attribute",
|
|
3744
|
+
"whyIgnore": "speculative"
|
|
3705
3745
|
},
|
|
3706
3746
|
"altPartOfLinkWithText": {
|
|
3707
3747
|
"issueID": "ignorable",
|
|
3708
3748
|
"quality": 0,
|
|
3709
|
-
"what": "Name of the link enclosing the img element includes its alt attribute, so may be unclear
|
|
3749
|
+
"what": "Name of the link enclosing the img element includes its alt attribute, so may be unclear",
|
|
3750
|
+
"whyIgnore": "speculative"
|
|
3710
3751
|
},
|
|
3711
3752
|
"embedAudio": {
|
|
3712
3753
|
"issueID": "ignorable",
|
|
3713
3754
|
"quality": 0,
|
|
3714
|
-
"what": "Element is audio, so may lack an accurate transcript
|
|
3755
|
+
"what": "Element is audio, so may lack an accurate transcript",
|
|
3756
|
+
"whyIgnore": "speculative"
|
|
3715
3757
|
},
|
|
3716
3758
|
"embedCustom": {
|
|
3717
3759
|
"issueID": "ignorable",
|
|
3718
3760
|
"quality": 0,
|
|
3719
|
-
"what": "Embedded custom element may fail to be accessible
|
|
3761
|
+
"what": "Embedded custom element may fail to be accessible",
|
|
3762
|
+
"whyIgnore": "speculative"
|
|
3720
3763
|
},
|
|
3721
3764
|
"embedTwitter": {
|
|
3722
3765
|
"issueID": "ignorable",
|
|
3723
3766
|
"quality": 0,
|
|
3724
|
-
"what": "Element is a Twitter feed, so may add many items on scroll and thus be impractical to exit by keyboard
|
|
3767
|
+
"what": "Element is a Twitter feed, so may add many items on scroll and thus be impractical to exit by keyboard",
|
|
3768
|
+
"whyIgnore": "speculative"
|
|
3725
3769
|
},
|
|
3726
3770
|
"embedVideo": {
|
|
3727
3771
|
"issueID": "ignorable",
|
|
3728
3772
|
"quality": 0,
|
|
3729
|
-
"what": "Element is video, so may lack captions
|
|
3773
|
+
"what": "Element is video, so may lack captions",
|
|
3774
|
+
"whyIgnore": "speculative"
|
|
3730
3775
|
},
|
|
3731
3776
|
"embedVisualization": {
|
|
3732
3777
|
"issueID": "ignorable",
|
|
3733
3778
|
"quality": 0,
|
|
3734
|
-
"what": "Element is a visualization, so may lack a nonvisual equivalent
|
|
3779
|
+
"what": "Element is a visualization, so may lack a nonvisual equivalent",
|
|
3780
|
+
"whyIgnore": "speculative"
|
|
3735
3781
|
},
|
|
3736
3782
|
"altMissing": {
|
|
3737
3783
|
"issueID": "imageNoText",
|
|
@@ -3876,7 +3922,8 @@ const rulesData = {
|
|
|
3876
3922
|
"W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48": {
|
|
3877
3923
|
"issueID": "ignorable",
|
|
3878
3924
|
"quality": 1,
|
|
3879
|
-
"what": "If element contains a navigation section, it is recommended that it be marked up as a list
|
|
3925
|
+
"what": "If element contains a navigation section, it is recommended that it be marked up as a list",
|
|
3926
|
+
"whyIgnore": "speculative"
|
|
3880
3927
|
},
|
|
3881
3928
|
"E-AAA.4_1_1.F77": {
|
|
3882
3929
|
"issueID": "duplicateID",
|
|
@@ -4781,22 +4828,26 @@ const rulesData = {
|
|
|
4781
4828
|
"aria_child_valid": {
|
|
4782
4829
|
"issueID": "ignorable",
|
|
4783
4830
|
"quality": 1,
|
|
4784
|
-
"what": "Child element has a role not allowed for the role of the parent
|
|
4831
|
+
"what": "Child element has a role not allowed for the role of the parent",
|
|
4832
|
+
"whyIgnore": "invalid"
|
|
4785
4833
|
},
|
|
4786
4834
|
"aria_landmark_name_unique": {
|
|
4787
4835
|
"issueID": "ignorable",
|
|
4788
4836
|
"quality": 1,
|
|
4789
|
-
"what": "Multiple landmarks with the same parent region are not distinguished from one another
|
|
4837
|
+
"what": "Multiple landmarks with the same parent region are not distinguished from one another (invalid on invisible elements)",
|
|
4838
|
+
"whyIgnore": "invalid"
|
|
4790
4839
|
},
|
|
4791
4840
|
"html_lang_exists": {
|
|
4792
4841
|
"issueID": "ignorable",
|
|
4793
4842
|
"quality": 1,
|
|
4794
|
-
"what": "Page detected as HTML, but has no lang attribute
|
|
4843
|
+
"what": "Page detected as HTML, but has no lang attribute",
|
|
4844
|
+
"whyIgnore": "invalid"
|
|
4795
4845
|
},
|
|
4796
4846
|
"style_background_decorative": {
|
|
4797
4847
|
"issueID": "ignorable",
|
|
4798
4848
|
"quality": 1,
|
|
4799
|
-
"what": "CSS background image may be informative
|
|
4849
|
+
"what": "CSS background image may be informative",
|
|
4850
|
+
"whyIgnore": "speculative"
|
|
4800
4851
|
},
|
|
4801
4852
|
"element_id_unique": {
|
|
4802
4853
|
"issueID": "duplicateID",
|
|
@@ -5402,22 +5453,26 @@ const rulesData = {
|
|
|
5402
5453
|
"Element head is missing a required instance of child element title.": {
|
|
5403
5454
|
"issueID": "ignorable",
|
|
5404
5455
|
"quality": 1,
|
|
5405
|
-
"what": "head element has no child title element
|
|
5456
|
+
"what": "head element has no child title element",
|
|
5457
|
+
"whyIgnore": "invalid"
|
|
5406
5458
|
},
|
|
5407
5459
|
"Element img is missing required attribute src.": {
|
|
5408
5460
|
"issueID": "ignorable",
|
|
5409
5461
|
"quality": 1,
|
|
5410
|
-
"what": "img element has no src attribute
|
|
5462
|
+
"what": "img element has no src attribute",
|
|
5463
|
+
"whyIgnore": "invalid"
|
|
5411
5464
|
},
|
|
5412
5465
|
"Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)": {
|
|
5413
5466
|
"issueID": "ignorable",
|
|
5414
5467
|
"quality": 0,
|
|
5415
|
-
"what": "Element contains a prohibited mediaelementwrapper element
|
|
5468
|
+
"what": "Element contains a prohibited mediaelementwrapper element",
|
|
5469
|
+
"whyIgnore": "invalid"
|
|
5416
5470
|
},
|
|
5417
5471
|
"Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.": {
|
|
5418
5472
|
"issueID": "ignorable",
|
|
5419
5473
|
"quality": 1,
|
|
5420
|
-
"what": "Void element has a useless trailing slash.
|
|
5474
|
+
"what": "Void element has a useless trailing slash.",
|
|
5475
|
+
"whyIgnore": "invalid"
|
|
5421
5476
|
},
|
|
5422
5477
|
"The aria-placeholder attribute must not be specified on elements that have a placeholder attribute.": {
|
|
5423
5478
|
"issueID": "placeholderPlusAria",
|
|
@@ -6948,22 +7003,26 @@ const rulesData = {
|
|
|
6948
7003
|
"Element head is missing a required instance of child element title.": {
|
|
6949
7004
|
"issueID": "ignorable",
|
|
6950
7005
|
"quality": 1,
|
|
6951
|
-
"what": "head element has no child title element
|
|
7006
|
+
"what": "head element has no child title element",
|
|
7007
|
+
"whyIgnore": "invalid"
|
|
6952
7008
|
},
|
|
6953
7009
|
"Element img is missing required attribute src.": {
|
|
6954
7010
|
"issueID": "ignorable",
|
|
6955
7011
|
"quality": 1,
|
|
6956
|
-
"what": "img element has no src attribute
|
|
7012
|
+
"what": "img element has no src attribute",
|
|
7013
|
+
"whyIgnore": "invalid"
|
|
6957
7014
|
},
|
|
6958
7015
|
"Element mediaelementwrapper not allowed as child of element div in this context. (Suppressing further errors from this subtree.)": {
|
|
6959
7016
|
"issueID": "ignorable",
|
|
6960
7017
|
"quality": 0,
|
|
6961
|
-
"what": "Element contains a prohibited mediaelementwrapper element
|
|
7018
|
+
"what": "Element contains a prohibited mediaelementwrapper element",
|
|
7019
|
+
"whyIgnore": "invalid"
|
|
6962
7020
|
},
|
|
6963
7021
|
"Trailing slash on void elements has no effect and interacts badly with unquoted attribute values.": {
|
|
6964
7022
|
"issueID": "ignorable",
|
|
6965
7023
|
"quality": 1,
|
|
6966
|
-
"what": "Void element has a useless trailing slash.
|
|
7024
|
+
"what": "Void element has a useless trailing slash.",
|
|
7025
|
+
"whyIgnore": "invalid"
|
|
6967
7026
|
},
|
|
6968
7027
|
"The aria-placeholder attribute must not be specified on elements that have a placeholder attribute.": {
|
|
6969
7028
|
"issueID": "placeholderPlusAria",
|
|
@@ -8494,157 +8553,188 @@ const rulesData = {
|
|
|
8494
8553
|
"QW-ACT-R10": {
|
|
8495
8554
|
"issueID": "ignorable",
|
|
8496
8555
|
"quality": 1,
|
|
8497
|
-
"what": "iframe elements with identical accessible names have different purposes
|
|
8556
|
+
"what": "iframe elements with identical accessible names have different purposes (on invisible elements)",
|
|
8557
|
+
"whyIgnore": "invalid"
|
|
8498
8558
|
},
|
|
8499
8559
|
"QW-ACT-R13": {
|
|
8500
8560
|
"issueID": "ignorable",
|
|
8501
8561
|
"quality": 1,
|
|
8502
|
-
"what": "Element with aria-hidden has focusable content
|
|
8562
|
+
"what": "Element with aria-hidden has focusable content",
|
|
8563
|
+
"whyIgnore": "invalid"
|
|
8503
8564
|
},
|
|
8504
8565
|
"QW-ACT-R41": {
|
|
8505
8566
|
"issueID": "ignorable",
|
|
8506
8567
|
"quality": 1,
|
|
8507
|
-
"what": "Error message describes no invalid form field value
|
|
8568
|
+
"what": "Error message describes no invalid form field value",
|
|
8569
|
+
"whyIgnore": "speculative"
|
|
8508
8570
|
},
|
|
8509
8571
|
"QW-ACT-R52": {
|
|
8510
8572
|
"issueID": "ignorable",
|
|
8511
8573
|
"quality": 0,
|
|
8512
|
-
"what": "video element visual-only content has no description track
|
|
8574
|
+
"what": "video element visual-only content has no description track (description tracks and this ACT rule have been deprecated)",
|
|
8575
|
+
"whyIgnore": "irrelevant"
|
|
8513
8576
|
},
|
|
8514
8577
|
"QW-ACT-R57": {
|
|
8515
8578
|
"issueID": "ignorable",
|
|
8516
8579
|
"quality": 0,
|
|
8517
|
-
"what": "video element visual content has no description track
|
|
8580
|
+
"what": "video element visual content has no description track (description tracks and this ACT rule have been deprecated)",
|
|
8581
|
+
"whyIgnore": "irrelevant"
|
|
8518
8582
|
},
|
|
8519
8583
|
"QW-ACT-R62": {
|
|
8520
8584
|
"issueID": "ignorable",
|
|
8521
8585
|
"quality": 0,
|
|
8522
|
-
"what": "Element in the sequential focus order may have no visible focus
|
|
8586
|
+
"what": "Element in the sequential focus order may have no visible focus",
|
|
8587
|
+
"whyIgnore": "speculative"
|
|
8523
8588
|
},
|
|
8524
8589
|
"QW-ACT-R63": {
|
|
8525
8590
|
"issueID": "ignorable",
|
|
8526
8591
|
"quality": 0,
|
|
8527
|
-
"what": "Document has no landmark with non-repeated content
|
|
8592
|
+
"what": "Document has no landmark with non-repeated content",
|
|
8593
|
+
"whyIgnore": "invalid"
|
|
8528
8594
|
},
|
|
8529
8595
|
"QW-ACT-R64": {
|
|
8530
8596
|
"issueID": "ignorable",
|
|
8531
8597
|
"quality": 0,
|
|
8532
|
-
"what": "Document has no heading for non-repeated content
|
|
8598
|
+
"what": "Document has no heading for non-repeated content",
|
|
8599
|
+
"whyIgnore": "invalid"
|
|
8533
8600
|
},
|
|
8534
8601
|
"QW-ACT-R73": {
|
|
8535
8602
|
"issueID": "ignorable",
|
|
8536
8603
|
"quality": 0,
|
|
8537
|
-
"what": "Block of repeated content is not collapsible
|
|
8604
|
+
"what": "Block of repeated content is not collapsible",
|
|
8605
|
+
"whyIgnore": "invalid"
|
|
8538
8606
|
},
|
|
8539
8607
|
"QW-ACT-R74": {
|
|
8540
8608
|
"issueID": "ignorable",
|
|
8541
8609
|
"quality": 0,
|
|
8542
|
-
"what": "Document has no instrument to move focus to non-repeated content
|
|
8610
|
+
"what": "Document has no instrument to move focus to non-repeated content",
|
|
8611
|
+
"whyIgnore": "invalid"
|
|
8543
8612
|
},
|
|
8544
8613
|
"QW-ACT-R75": {
|
|
8545
8614
|
"issueID": "ignorable",
|
|
8546
8615
|
"quality": 0,
|
|
8547
|
-
"what": "Blocks of repeated content cannot be bypassed
|
|
8616
|
+
"what": "Blocks of repeated content cannot be bypassed",
|
|
8617
|
+
"whyIgnore": "invalid"
|
|
8548
8618
|
},
|
|
8549
8619
|
"QW-BP1": {
|
|
8550
8620
|
"issueID": "ignorable",
|
|
8551
8621
|
"quality": 0,
|
|
8552
|
-
"what": "h1-h6 may fail to be used to identify headings
|
|
8622
|
+
"what": "h1-h6 may fail to be used to identify headings",
|
|
8623
|
+
"whyIgnore": "speculative"
|
|
8553
8624
|
},
|
|
8554
8625
|
"QW-BP2": {
|
|
8555
8626
|
"issueID": "ignorable",
|
|
8556
8627
|
"quality": 1,
|
|
8557
|
-
"what": "Image text alternative is not concise
|
|
8628
|
+
"what": "Image text alternative is not concise",
|
|
8629
|
+
"whyIgnore": "invalid"
|
|
8558
8630
|
},
|
|
8559
8631
|
"QW-BP17": {
|
|
8560
8632
|
"issueID": "ignorable",
|
|
8561
8633
|
"quality": 1,
|
|
8562
|
-
"what": "No link at the beginning of a block of repeated content goes to the end of the block
|
|
8634
|
+
"what": "No link at the beginning of a block of repeated content goes to the end of the block",
|
|
8635
|
+
"whyIgnore": "invalid"
|
|
8563
8636
|
},
|
|
8564
8637
|
"QW-BP20": {
|
|
8565
8638
|
"issueID": "ignorable",
|
|
8566
8639
|
"quality": 1,
|
|
8567
|
-
"what": "Document has more than 1 banner landmark
|
|
8640
|
+
"what": "Document has more than 1 banner landmark (counts hidden elements)",
|
|
8641
|
+
"whyIgnore": "invalid"
|
|
8568
8642
|
},
|
|
8569
8643
|
"QW-BP22": {
|
|
8570
8644
|
"issueID": "ignorable",
|
|
8571
8645
|
"quality": 1,
|
|
8572
|
-
"what": "Document has more than 1 element with a main role
|
|
8646
|
+
"what": "Document has more than 1 element with a main role",
|
|
8647
|
+
"whyIgnore": "invalid"
|
|
8573
8648
|
},
|
|
8574
8649
|
"QW-BP23": {
|
|
8575
8650
|
"issueID": "ignorable",
|
|
8576
8651
|
"quality": .1,
|
|
8577
|
-
"what": "Element is not in a true list
|
|
8652
|
+
"what": "Element is not in a true list",
|
|
8653
|
+
"whyIgnore": "invalid"
|
|
8578
8654
|
},
|
|
8579
8655
|
"QW-BP24": {
|
|
8580
8656
|
"issueID": "ignorable",
|
|
8581
8657
|
"quality": 1,
|
|
8582
|
-
"what": "ul or ol element has a child other than li, script, or template
|
|
8658
|
+
"what": "ul or ol element has a child other than li, script, or template",
|
|
8659
|
+
"whyIgnore": "invalid"
|
|
8583
8660
|
},
|
|
8584
8661
|
"QW-BP28": {
|
|
8585
8662
|
"issueID": "ignorable",
|
|
8586
8663
|
"quality": 1,
|
|
8587
|
-
"what": "h1 element missing or used more than once
|
|
8664
|
+
"what": "h1 element missing or used more than once",
|
|
8665
|
+
"whyIgnore": "invalid"
|
|
8588
8666
|
},
|
|
8589
8667
|
"QW-BP29": {
|
|
8590
8668
|
"issueID": "ignorable",
|
|
8591
8669
|
"quality": 0,
|
|
8592
|
-
"what": "lang and xml:lang attribute of html element differ
|
|
8670
|
+
"what": "lang and xml:lang attribute of html element differ",
|
|
8671
|
+
"whyIgnore": "invalid"
|
|
8593
8672
|
},
|
|
8594
8673
|
"QW-WCAG-T4": {
|
|
8595
8674
|
"issueID": "ignorable",
|
|
8596
8675
|
"quality": 0,
|
|
8597
|
-
"what": "summary attribute is not used to give an overview of a data table
|
|
8676
|
+
"what": "summary attribute is not used to give an overview of a data table",
|
|
8677
|
+
"whyIgnore": "invalid"
|
|
8598
8678
|
},
|
|
8599
8679
|
"QW-WCAG-T8": {
|
|
8600
8680
|
"issueID": "ignorable",
|
|
8601
8681
|
"quality": 1,
|
|
8602
|
-
"what": "Text alternative is suspect
|
|
8682
|
+
"what": "Text alternative is suspect",
|
|
8683
|
+
"whyIgnore": "invalid"
|
|
8603
8684
|
},
|
|
8604
8685
|
"QW-WCAG-T9": {
|
|
8605
8686
|
"issueID": "ignorable",
|
|
8606
8687
|
"quality": 0,
|
|
8607
|
-
"what": "Page may fail to be organized using headings
|
|
8688
|
+
"what": "Page may fail to be organized using headings",
|
|
8689
|
+
"whyIgnore": "speculative"
|
|
8608
8690
|
},
|
|
8609
8691
|
"QW-WCAG-T15": {
|
|
8610
8692
|
"issueID": "ignorable",
|
|
8611
8693
|
"quality": 0,
|
|
8612
|
-
"what": "link element may be used for navigation but not in the head
|
|
8694
|
+
"what": "link element may be used for navigation but not in the head",
|
|
8695
|
+
"whyIgnore": "invalid"
|
|
8613
8696
|
},
|
|
8614
8697
|
"QW-WCAG-T20": {
|
|
8615
8698
|
"issueID": "ignorable",
|
|
8616
8699
|
"quality": 0,
|
|
8617
|
-
"what": "Link title may fail to describe the link correctly
|
|
8700
|
+
"what": "Link title may fail to describe the link correctly",
|
|
8701
|
+
"whyIgnore": "speculative"
|
|
8618
8702
|
},
|
|
8619
8703
|
"QW-WCAG-T23": {
|
|
8620
8704
|
"issueID": "ignorable",
|
|
8621
8705
|
"quality": 0,
|
|
8622
|
-
"what": "No link at the top of the page goes directly to the main content area
|
|
8706
|
+
"what": "No link at the top of the page goes directly to the main content area",
|
|
8707
|
+
"whyIgnore": "invalid"
|
|
8623
8708
|
},
|
|
8624
8709
|
"QW-WCAG-T24": {
|
|
8625
8710
|
"issueID": "ignorable",
|
|
8626
8711
|
"quality": .5,
|
|
8627
|
-
"what": "Script removes the focus when focus is received
|
|
8712
|
+
"what": "Script removes the focus when focus is received",
|
|
8713
|
+
"whyIgnore": "invalid"
|
|
8628
8714
|
},
|
|
8629
8715
|
"QW-WCAG-T28": {
|
|
8630
8716
|
"issueID": "ignorable",
|
|
8631
8717
|
"quality": .8,
|
|
8632
|
-
"what": "Font size set to an absolute unit value
|
|
8718
|
+
"what": "Font size set to an absolute unit value",
|
|
8719
|
+
"whyIgnore": "invalid"
|
|
8633
8720
|
},
|
|
8634
8721
|
"QW-WCAG-T31": {
|
|
8635
8722
|
"issueID": "ignorable",
|
|
8636
8723
|
"quality": 1,
|
|
8637
|
-
"what": "Foreground or background color is specified but not both
|
|
8724
|
+
"what": "Foreground or background color is specified but not both (on invisible elements)",
|
|
8725
|
+
"whyIgnore": "invalid"
|
|
8638
8726
|
},
|
|
8639
8727
|
"QW-WCAG-T32": {
|
|
8640
8728
|
"issueID": "ignorable",
|
|
8641
8729
|
"quality": 1,
|
|
8642
|
-
"what": "ol, ul or dl may fail to be used for a list or group of links
|
|
8730
|
+
"what": "ol, ul or dl may fail to be used for a list or group of links",
|
|
8731
|
+
"whyIgnore": "speculative"
|
|
8643
8732
|
},
|
|
8644
8733
|
"QW-WCAG-T35": {
|
|
8645
8734
|
"issueID": "ignorable",
|
|
8646
8735
|
"quality": 1,
|
|
8647
|
-
"what": "Several elements have this id attribute value
|
|
8736
|
+
"what": "Several elements have this id attribute value",
|
|
8737
|
+
"whyIgnore": "invalid"
|
|
8648
8738
|
},
|
|
8649
8739
|
"QW-ACT-R18": {
|
|
8650
8740
|
"issueID": "duplicateID",
|
|
@@ -9746,7 +9836,7 @@ const rules = deepFreeze(rulesData);
|
|
|
9746
9836
|
const makeIssueRules = (ruleTable, issueTable = issues) => {
|
|
9747
9837
|
const errors = [];
|
|
9748
9838
|
const checkEntry = (engineID, variabilityName, ruleID, entry, engineRuleIDs) => {
|
|
9749
|
-
const { issueID, quality, what, supersededBy } = entry;
|
|
9839
|
+
const { issueID, quality, what, supersededBy, outcome, uncertainty, toCheck, whyIgnore: entryWhyIgnore } = entry;
|
|
9750
9840
|
if (!ruleID.length) errors.push(`${engineID}.${variabilityName} has a rule with an empty ruleID`);
|
|
9751
9841
|
if (typeof issueID !== "string" || !issueID.length || !(issueID in issueTable)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid issueID (${JSON.stringify(issueID)})`);
|
|
9752
9842
|
if (typeof quality !== "number") errors.push(`${engineID}.${variabilityName}.${ruleID} has a non-numeric quality (${JSON.stringify(quality)})`);
|
|
@@ -9756,6 +9846,10 @@ const makeIssueRules = (ruleTable, issueTable = issues) => {
|
|
|
9756
9846
|
else if (supersededBy === ruleID) errors.push(`${engineID}.${variabilityName}.${ruleID} has supersededBy naming itself`);
|
|
9757
9847
|
else if (!engineRuleIDs.has(supersededBy)) errors.push(`${engineID}.${variabilityName}.${ruleID} has supersededBy (${supersededBy}), which is not a rule of ${engineID}`);
|
|
9758
9848
|
}
|
|
9849
|
+
if (outcome !== void 0 && !outcomes.includes(outcome)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid outcome (${JSON.stringify(outcome)})`);
|
|
9850
|
+
if (uncertainty !== void 0 && !uncertainties.includes(uncertainty)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid uncertainty (${JSON.stringify(uncertainty)})`);
|
|
9851
|
+
if (toCheck !== void 0 && (typeof toCheck !== "string" || !toCheck.length)) errors.push(`${engineID}.${variabilityName}.${ruleID} has a non-string or empty toCheck (${JSON.stringify(toCheck)})`);
|
|
9852
|
+
if (entryWhyIgnore !== void 0 && !whyIgnore.includes(entryWhyIgnore)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid whyIgnore (${JSON.stringify(entryWhyIgnore)})`);
|
|
9759
9853
|
if (variabilityName === "variable") {
|
|
9760
9854
|
if (!/[.*+?^${}()|[\]\\]/.test(ruleID)) errors.push(`${engineID}.${variabilityName}.${ruleID} has no regex metacharacters, so it should be an invariant rule`);
|
|
9761
9855
|
else try {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "testaro-issues",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "A classification of about 1500 rules of 10 rule engines into about 400 issues. The rule engines are those in the ensemble of Testaro, which tests web pages for front-end quality (accessibility, usability, and standards conformance).",
|
|
6
6
|
"main": "./dist/index.cjs",
|