testaro-issues 0.3.0 → 0.4.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 CHANGED
@@ -9,7 +9,7 @@ const issuesData = {
9
9
  },
10
10
  "duplicateAttribute": {
11
11
  "summary": "duplicate attribute",
12
- "why": "Browser processes the document improperly",
12
+ "why": "Browser processes the page improperly",
13
13
  "wcag": "4.1.1",
14
14
  "weight": 2
15
15
  },
@@ -39,7 +39,7 @@ const issuesData = {
39
39
  },
40
40
  "regionNoText": {
41
41
  "summary": "region not named",
42
- "why": "User cannot get help surveying the parts of the document",
42
+ "why": "User cannot get help surveying the parts of the page",
43
43
  "wcag": "4.1.2",
44
44
  "weight": 4
45
45
  },
@@ -152,7 +152,7 @@ const issuesData = {
152
152
  "weight": 4
153
153
  },
154
154
  "gapBad": {
155
- "summary": "CSS padding invalid",
155
+ "summary": "CSS gap invalid",
156
156
  "why": "Content is displayed improperly",
157
157
  "wcag": "4.1",
158
158
  "weight": 4
@@ -213,14 +213,14 @@ const issuesData = {
213
213
  },
214
214
  "pageLanguage": {
215
215
  "summary": "page language missing",
216
- "why": "Speaking helper may mispronounce the document text",
216
+ "why": "Speaking helper may mispronounce the page text",
217
217
  "wcag": "3.1.1",
218
218
  "weight": 4,
219
219
  "max": 1
220
220
  },
221
221
  "pageLanguageBad": {
222
222
  "summary": "page language invalid",
223
- "why": "Speaking helper may mispronounce the document text",
223
+ "why": "Speaking helper may mispronounce the page text",
224
224
  "wcag": "3.1.1",
225
225
  "weight": 4,
226
226
  "max": 1
@@ -299,7 +299,7 @@ const issuesData = {
299
299
  },
300
300
  "internalLinkBroken": {
301
301
  "summary": "internal link broken",
302
- "why": "User cannot reach a promised document location",
302
+ "why": "User cannot reach a promised page location",
303
303
  "wcag": "1.3.1",
304
304
  "weight": 4
305
305
  },
@@ -497,7 +497,7 @@ const issuesData = {
497
497
  },
498
498
  "pageNewWindow": {
499
499
  "summary": "page immediately opens window",
500
- "why": "User promised a document gets another document, too",
500
+ "why": "User promised a page gets another page, too",
501
501
  "wcag": "3.2.5",
502
502
  "weight": 3,
503
503
  "max": 1
@@ -607,7 +607,7 @@ const issuesData = {
607
607
  },
608
608
  "metaBansZoom": {
609
609
  "summary": "meta bans zoom",
610
- "why": "User cannot adjust the document size for readability",
610
+ "why": "User cannot adjust the page size for readability",
611
611
  "wcag": "1.4.4",
612
612
  "weight": 4,
613
613
  "max": 1
@@ -691,7 +691,7 @@ const issuesData = {
691
691
  "weight": 4
692
692
  },
693
693
  "linkElementMisplaced": {
694
- "summary": "link element invalid",
694
+ "summary": "link element misplaced",
695
695
  "why": "Document fails to get a needed external resource",
696
696
  "wcag": "1.3.1",
697
697
  "weight": 4
@@ -740,25 +740,25 @@ const issuesData = {
740
740
  },
741
741
  "stylesheetBanned": {
742
742
  "summary": "stylesheet prohibited",
743
- "why": "Browser displays the document improperly",
743
+ "why": "Browser displays the page improperly",
744
744
  "wcag": "1.4",
745
745
  "weight": 3
746
746
  },
747
747
  "scriptNotDeferrable": {
748
748
  "summary": "script element invalidly deferred",
749
- "why": "Browser processes the document improperly",
749
+ "why": "Browser processes the page improperly",
750
750
  "wcag": "1.3.1",
751
751
  "weight": 4
752
752
  },
753
753
  "scriptBanned": {
754
754
  "summary": "script prohibited",
755
- "why": "Browser processes the document improperly",
755
+ "why": "Browser processes the page improperly",
756
756
  "wcag": "4.1",
757
757
  "weight": 3
758
758
  },
759
759
  "scriptElementBad": {
760
760
  "summary": "script element invalid",
761
- "why": "Browser processes the document improperly",
761
+ "why": "Browser processes the page improperly",
762
762
  "wcag": "1.3.1",
763
763
  "weight": 4
764
764
  },
@@ -782,7 +782,7 @@ const issuesData = {
782
782
  },
783
783
  "iframeTitleBad": {
784
784
  "summary": "iframe not named",
785
- "why": "User cannot get help on the topic of an embedded document",
785
+ "why": "User cannot get help on the topic of an embedded page",
786
786
  "wcag": "4.1.2",
787
787
  "weight": 4
788
788
  },
@@ -980,13 +980,13 @@ const issuesData = {
980
980
  },
981
981
  "headingEmpty": {
982
982
  "summary": "heading empty",
983
- "why": "User cannot get help on the topic of a part of the document",
983
+ "why": "User cannot get help on the topic of a part of the page",
984
984
  "wcag": "2.4.6",
985
985
  "weight": 3
986
986
  },
987
987
  "headingOfNothing": {
988
988
  "summary": "heading heads nothing",
989
- "why": "Helper misdescribes the document",
989
+ "why": "Helper misdescribes the page",
990
990
  "wcag": "1.3.1",
991
991
  "weight": 2
992
992
  },
@@ -1028,112 +1028,112 @@ const issuesData = {
1028
1028
  },
1029
1029
  "docTypeMissing": {
1030
1030
  "summary": "DOCTYPE missing",
1031
- "why": "Browser processes the document improperly",
1031
+ "why": "Browser processes the page improperly",
1032
1032
  "wcag": "1.3.1",
1033
1033
  "weight": 4,
1034
1034
  "max": 1
1035
1035
  },
1036
1036
  "docTypeMisplaced": {
1037
1037
  "summary": "DOCTYPE in invalid location",
1038
- "why": "Browser processes the document improperly",
1038
+ "why": "Browser processes the page improperly",
1039
1039
  "wcag": "1.3.1",
1040
1040
  "weight": 4,
1041
1041
  "max": 1
1042
1042
  },
1043
1043
  "docTypeBad": {
1044
1044
  "summary": "DOCTYPE invalid",
1045
- "why": "Browser processes the document improperly",
1045
+ "why": "Browser processes the page improperly",
1046
1046
  "wcag": "1.3.1",
1047
1047
  "weight": 3,
1048
1048
  "max": 1
1049
1049
  },
1050
1050
  "pageTitleBad": {
1051
1051
  "summary": "page title invalid",
1052
- "why": "Browser processes the document improperly",
1052
+ "why": "Browser processes the page improperly",
1053
1053
  "wcag": "1.3.1",
1054
1054
  "weight": 3,
1055
1055
  "max": 1
1056
1056
  },
1057
1057
  "pageTitle": {
1058
1058
  "summary": "page title missing",
1059
- "why": "User is not informed of the topic of the document",
1059
+ "why": "User is not informed of the topic of the page",
1060
1060
  "wcag": "2.4.2",
1061
1061
  "weight": 4,
1062
1062
  "max": 1
1063
1063
  },
1064
1064
  "headElementsBad": {
1065
1065
  "summary": "element in head invalid",
1066
- "why": "Browser processes the document improperly",
1066
+ "why": "Browser processes the page improperly",
1067
1067
  "wcag": "4.1.1",
1068
1068
  "weight": 3
1069
1069
  },
1070
1070
  "headingLevelSkip": {
1071
1071
  "summary": "heading level skipped",
1072
- "why": "Helper misdescribes the document",
1072
+ "why": "Helper misdescribes the page",
1073
1073
  "wcag": "1.3.1",
1074
1074
  "weight": 2
1075
1075
  },
1076
1076
  "headingStructure": {
1077
1077
  "summary": "heading structure illogical",
1078
- "why": "Helper misdescribes the document",
1078
+ "why": "Helper misdescribes the page",
1079
1079
  "wcag": "1.3.1",
1080
1080
  "weight": 2
1081
1081
  },
1082
1082
  "headingConfusion": {
1083
1083
  "summary": "heading names repeated",
1084
- "why": "User cannot differentiate parts of the document",
1084
+ "why": "User cannot differentiate parts of the page",
1085
1085
  "wcag": "1.3.1",
1086
1086
  "weight": 2
1087
1087
  },
1088
1088
  "headingMisuseRisk": {
1089
1089
  "summary": "heading used for styling?",
1090
- "why": "User cannot understand the document structure",
1090
+ "why": "User cannot understand the page structure",
1091
1091
  "wcag": "1.3.1",
1092
1092
  "weight": 2
1093
1093
  },
1094
1094
  "headingNone": {
1095
1095
  "summary": "headings missing",
1096
- "why": "User cannot survey parts of the document",
1096
+ "why": "User cannot survey parts of the page",
1097
1097
  "wcag": "1.3.1",
1098
1098
  "weight": 3,
1099
1099
  "max": 1
1100
1100
  },
1101
1101
  "h1Not1": {
1102
1102
  "summary": "not exactly 1 h1 heading",
1103
- "why": "User cannot understand the topic of the document",
1103
+ "why": "User cannot understand the topic of the page",
1104
1104
  "wcag": "1.3.1",
1105
1105
  "weight": 2,
1106
1106
  "max": 1
1107
1107
  },
1108
1108
  "h1Not1st": {
1109
1109
  "summary": "h1 not 1st heading",
1110
- "why": "User cannot understand the topic of the document",
1110
+ "why": "User cannot understand the topic of the page",
1111
1111
  "wcag": "1.3.1",
1112
1112
  "weight": 3,
1113
1113
  "max": 1
1114
1114
  },
1115
1115
  "docHeadingNotH1": {
1116
1116
  "summary": "primary heading not h1",
1117
- "why": "User cannot understand the topic of the document",
1117
+ "why": "User cannot understand the topic of the page",
1118
1118
  "wcag": "1.3.1",
1119
1119
  "weight": 2,
1120
1120
  "max": 1
1121
1121
  },
1122
1122
  "articleHeadingless": {
1123
1123
  "summary": "article heading missing",
1124
- "why": "User cannot understand the topic of a part of the document",
1124
+ "why": "User cannot understand the topic of a part of the page",
1125
1125
  "wcag": "1.3.1",
1126
1126
  "weight": 1
1127
1127
  },
1128
1128
  "sectionHeadingless": {
1129
1129
  "summary": "section heading missing",
1130
- "why": "User cannot understand the topic of a part of the document",
1130
+ "why": "User cannot understand the topic of a part of the page",
1131
1131
  "wcag": "1.3.1",
1132
1132
  "weight": 1
1133
1133
  },
1134
1134
  "headingLength": {
1135
1135
  "summary": "heading abnormally long",
1136
- "why": "User has difficulty understanding the topic of a part of the document",
1136
+ "why": "User has difficulty understanding the topic of a part of the page",
1137
1137
  "wcag": "1.3.1",
1138
1138
  "weight": 1
1139
1139
  },
@@ -1163,7 +1163,7 @@ const issuesData = {
1163
1163
  },
1164
1164
  "hrConfusionRisk": {
1165
1165
  "summary": "hr misused",
1166
- "why": "User cannot get help on the nature of segments of the document",
1166
+ "why": "User cannot get help on the nature of segments of the page",
1167
1167
  "wcag": "1.3.1",
1168
1168
  "weight": 1
1169
1169
  },
@@ -1181,7 +1181,7 @@ const issuesData = {
1181
1181
  },
1182
1182
  "pseudoHeadingRisk": {
1183
1183
  "summary": "heading-like styles dubious",
1184
- "why": "User may be unable to understand the topic of a part of the document",
1184
+ "why": "User may be unable to understand the topic of a part of the page",
1185
1185
  "wcag": "1.3.1",
1186
1186
  "weight": 1
1187
1187
  },
@@ -1511,7 +1511,7 @@ const issuesData = {
1511
1511
  },
1512
1512
  "visibleBulk": {
1513
1513
  "summary": "large visible-element count",
1514
- "why": "User cannot easily find items in the document",
1514
+ "why": "User cannot easily find items in the page",
1515
1515
  "wcag": "2.4",
1516
1516
  "weight": 1,
1517
1517
  "max": 1
@@ -1578,90 +1578,90 @@ const issuesData = {
1578
1578
  },
1579
1579
  "noLandmarks": {
1580
1580
  "summary": "no landmarks",
1581
- "why": "User cannot get help on how the document is organized",
1581
+ "why": "User cannot get help on how the page is organized",
1582
1582
  "wcag": "1.3.6",
1583
1583
  "weight": 2,
1584
1584
  "max": 1
1585
1585
  },
1586
1586
  "contentBeyondLandmarks": {
1587
1587
  "summary": "content beyond landmarks",
1588
- "why": "User cannot get help on how some of the document is organized",
1588
+ "why": "User cannot get help on how some of the page is organized",
1589
1589
  "wcag": "1.3.6",
1590
1590
  "weight": 1
1591
1591
  },
1592
1592
  "footerNotTop": {
1593
1593
  "summary": "footer child of landmark",
1594
- "why": "User cannot get help on how some of the document is organized",
1594
+ "why": "User cannot get help on how some of the page is organized",
1595
1595
  "wcag": "1.3.6",
1596
1596
  "weight": 1
1597
1597
  },
1598
1598
  "asideNotTop": {
1599
1599
  "summary": "aside child of landmark",
1600
- "why": "User cannot get help on how some of the document is organized",
1600
+ "why": "User cannot get help on how some of the page is organized",
1601
1601
  "wcag": "1.3.6",
1602
1602
  "weight": 2
1603
1603
  },
1604
1604
  "mainNotTop": {
1605
1605
  "summary": "main child of landmark",
1606
- "why": "User cannot get help on how some of the document is organized",
1606
+ "why": "User cannot get help on how some of the page is organized",
1607
1607
  "wcag": "1.3.6",
1608
1608
  "weight": 2
1609
1609
  },
1610
1610
  "mainConfusion": {
1611
1611
  "summary": "mains not distinctly named",
1612
- "why": "User cannot get help on how some of the document is organized",
1612
+ "why": "User cannot get help on how some of the page is organized",
1613
1613
  "wcag": "1.3.6",
1614
1614
  "weight": 3
1615
1615
  },
1616
1616
  "mainNone": {
1617
1617
  "summary": "main missing",
1618
- "why": "User cannot get help on how some of the document is organized",
1618
+ "why": "User cannot get help on how some of the page is organized",
1619
1619
  "wcag": "1.3.6",
1620
1620
  "weight": 2,
1621
1621
  "max": 1
1622
1622
  },
1623
1623
  "mainNot1": {
1624
1624
  "summary": "multiple mains",
1625
- "why": "User cannot get help on how some of the document is organized",
1625
+ "why": "User cannot get help on how some of the page is organized",
1626
1626
  "wcag": "1.3.6",
1627
1627
  "weight": 2,
1628
1628
  "max": 1
1629
1629
  },
1630
1630
  "bannerNot1": {
1631
1631
  "summary": "multiple banners",
1632
- "why": "User cannot get help on how some of the document is organized",
1632
+ "why": "User cannot get help on how some of the page is organized",
1633
1633
  "wcag": "1.3.6",
1634
1634
  "weight": 2,
1635
1635
  "max": 1
1636
1636
  },
1637
1637
  "bannerNotTop": {
1638
1638
  "summary": "banner child of landmark",
1639
- "why": "User cannot get help on how some of the document is organized",
1639
+ "why": "User cannot get help on how some of the page is organized",
1640
1640
  "wcag": "1.3.6",
1641
1641
  "weight": 2
1642
1642
  },
1643
1643
  "footerConfusion": {
1644
1644
  "summary": "contentinfos not distinctly named",
1645
- "why": "User cannot get help on how some of the document is organized",
1645
+ "why": "User cannot get help on how some of the page is organized",
1646
1646
  "wcag": "1.3.6",
1647
1647
  "weight": 3
1648
1648
  },
1649
1649
  "footerNot1": {
1650
1650
  "summary": "multiple contentinfos",
1651
- "why": "User cannot get help on how some of the document is organized",
1651
+ "why": "User cannot get help on how some of the page is organized",
1652
1652
  "wcag": "1.3.6",
1653
1653
  "weight": 2,
1654
1654
  "max": 1
1655
1655
  },
1656
1656
  "landmarkConfusion": {
1657
1657
  "summary": "landmarks not distinctly named",
1658
- "why": "User cannot get help on how some of the document is organized",
1658
+ "why": "User cannot get help on how some of the page is organized",
1659
1659
  "wcag": "1.3.6",
1660
1660
  "weight": 3
1661
1661
  },
1662
1662
  "documentConfusion": {
1663
- "summary": "document elements not distinctly named",
1664
- "why": "User cannot get help on how some of the document is organized",
1663
+ "summary": "page elements not distinctly named",
1664
+ "why": "User cannot get help on how some of the page is organized",
1665
1665
  "wcag": "1.3.6",
1666
1666
  "weight": 3
1667
1667
  },
@@ -1673,61 +1673,61 @@ const issuesData = {
1673
1673
  },
1674
1674
  "formConfusion": {
1675
1675
  "summary": "forms not distinctly named",
1676
- "why": "User cannot get help on how some of the document is organized",
1676
+ "why": "User cannot get help on how some of the page is organized",
1677
1677
  "wcag": "1.3.6",
1678
1678
  "weight": 3
1679
1679
  },
1680
1680
  "applicationNoText": {
1681
1681
  "summary": "application not named",
1682
- "why": "User cannot get help on how some of the document is organized",
1682
+ "why": "User cannot get help on how some of the page is organized",
1683
1683
  "wcag": "1.3.6",
1684
1684
  "weight": 4
1685
1685
  },
1686
1686
  "applicationConfusion": {
1687
1687
  "summary": "applications not distinctly named",
1688
- "why": "User cannot get help on how some of the document is organized",
1688
+ "why": "User cannot get help on how some of the page is organized",
1689
1689
  "wcag": "1.3.6",
1690
1690
  "weight": 3
1691
1691
  },
1692
1692
  "asideConfusion": {
1693
1693
  "summary": "asides not distinctly named",
1694
- "why": "User cannot get help on how some of the document is organized",
1694
+ "why": "User cannot get help on how some of the page is organized",
1695
1695
  "wcag": "1.3.6",
1696
1696
  "weight": 3
1697
1697
  },
1698
1698
  "bannerConfusion": {
1699
1699
  "summary": "banners not distinctly named",
1700
- "why": "User cannot get help on how some of the document is organized",
1700
+ "why": "User cannot get help on how some of the page is organized",
1701
1701
  "wcag": "1.3.6",
1702
1702
  "weight": 3
1703
1703
  },
1704
1704
  "navConfusion": {
1705
1705
  "summary": "navigations not distinctly named",
1706
- "why": "User cannot get help on how some of the document is organized",
1706
+ "why": "User cannot get help on how some of the page is organized",
1707
1707
  "wcag": "1.3.6",
1708
1708
  "weight": 3
1709
1709
  },
1710
1710
  "landmarkInNav": {
1711
1711
  "summary": "invalid landmark child of navigation role",
1712
- "why": "User cannot get help on how some of the document is organized",
1712
+ "why": "User cannot get help on how some of the page is organized",
1713
1713
  "wcag": "1.3.6",
1714
1714
  "weight": 4
1715
1715
  },
1716
1716
  "regionConfusion": {
1717
1717
  "summary": "regions not distinctly named",
1718
- "why": "User cannot get help on how some of the document is organized",
1718
+ "why": "User cannot get help on how some of the page is organized",
1719
1719
  "wcag": "1.3.6",
1720
1720
  "weight": 3
1721
1721
  },
1722
1722
  "searchConfusion": {
1723
1723
  "summary": "searches not distinctly named",
1724
- "why": "User cannot get help on how some of the document is organized",
1724
+ "why": "User cannot get help on how some of the page is organized",
1725
1725
  "wcag": "1.3.6",
1726
1726
  "weight": 3
1727
1727
  },
1728
1728
  "complementaryNoText": {
1729
1729
  "summary": "complementary not named",
1730
- "why": "User cannot get help on how some of the document is organized",
1730
+ "why": "User cannot get help on how some of the page is organized",
1731
1731
  "wcag": "1.3.6",
1732
1732
  "weight": 1
1733
1733
  },
@@ -1787,14 +1787,14 @@ const issuesData = {
1787
1787
  },
1788
1788
  "contentHidden": {
1789
1789
  "summary": "page hidden",
1790
- "why": "User cannot get the document content",
1790
+ "why": "User cannot get the page content",
1791
1791
  "wcag": "2.4.7",
1792
1792
  "weight": 4,
1793
1793
  "max": 1
1794
1794
  },
1795
1795
  "hideFailureRisk": {
1796
1796
  "summary": "false aria-hidden value risky",
1797
- "why": "User may be misled by erroneously hidden or revealed document content",
1797
+ "why": "User may be misled by erroneously hidden or revealed page content",
1798
1798
  "wcag": "2.4.6",
1799
1799
  "weight": 1
1800
1800
  },
@@ -1812,19 +1812,19 @@ const issuesData = {
1812
1812
  },
1813
1813
  "hoverIndication": {
1814
1814
  "summary": "hover indication poor",
1815
- "why": "User cannot explore the document reliably with a mouse",
1815
+ "why": "User cannot explore the page reliably with a mouse",
1816
1816
  "wcag": "3.3.2",
1817
1817
  "weight": 3
1818
1818
  },
1819
1819
  "hoverSurprise": {
1820
1820
  "summary": "hovering changes content",
1821
- "why": "User cannot explore the document reliably with a mouse",
1821
+ "why": "User cannot explore the page reliably with a mouse",
1822
1822
  "wcag": "3.2.5",
1823
1823
  "weight": 1
1824
1824
  },
1825
1825
  "formSurpriseRisk": {
1826
1826
  "summary": "form interaction changes content?",
1827
- "why": "User experiences unexpected document change when using a form",
1827
+ "why": "User experiences unexpected page change when using a form",
1828
1828
  "wcag": "3.2.5",
1829
1829
  "weight": 1
1830
1830
  },
@@ -2071,14 +2071,14 @@ const issuesData = {
2071
2071
  },
2072
2072
  "skipRepeatedContent": {
2073
2073
  "summary": "skip method missing or invalid",
2074
- "why": "Keyboard-only user cannot easily reach the specific content of the document",
2074
+ "why": "Keyboard-only user cannot easily reach the specific content of the page",
2075
2075
  "wcag": "2.4.1",
2076
2076
  "weight": 3,
2077
2077
  "max": 2
2078
2078
  },
2079
2079
  "repeatedContentRisk": {
2080
2080
  "summary": "skip method missing or invalid?",
2081
- "why": "Keyboard-only user may be unable easily to reach the specific content of the document",
2081
+ "why": "Keyboard-only user may be unable easily to reach the specific content of the page",
2082
2082
  "wcag": "2.4.1",
2083
2083
  "weight": 1,
2084
2084
  "max": 2
@@ -2170,25 +2170,25 @@ const issuesData = {
2170
2170
  },
2171
2171
  "characterBad": {
2172
2172
  "summary": "invalid character",
2173
- "why": "Invalid character makes the document behave incorrectly",
2173
+ "why": "Invalid character makes the page behave incorrectly",
2174
2174
  "wcag": "4.1",
2175
2175
  "weight": 3
2176
2176
  },
2177
2177
  "entityBad": {
2178
2178
  "summary": "named character reference invalid",
2179
- "why": "User may be unable to read all the document text",
2179
+ "why": "User may be unable to read all the page text",
2180
2180
  "wcag": "4.1",
2181
2181
  "weight": 4
2182
2182
  },
2183
2183
  "textContentBad": {
2184
2184
  "summary": "element text content invalid",
2185
- "why": "User may be unable to read all the document text",
2185
+ "why": "User may be unable to read all the page text",
2186
2186
  "wcag": "4.1",
2187
2187
  "weight": 3
2188
2188
  },
2189
2189
  "parseError": {
2190
2190
  "summary": "code invalid",
2191
- "why": "Invalid code in the document may prevent a helper from working",
2191
+ "why": "Invalid code in the page may prevent a helper from working",
2192
2192
  "wcag": "4.1",
2193
2193
  "weight": 3
2194
2194
  },
@@ -2214,7 +2214,7 @@ const issuesData = {
2214
2214
  },
2215
2215
  "captcha2": {
2216
2216
  "summary": "captcha2",
2217
- "why": "User is prevented from consuming the document",
2217
+ "why": "User is prevented from consuming the page",
2218
2218
  "wcag": "1.1.1",
2219
2219
  "weight": 1,
2220
2220
  "max": 1
@@ -2245,7 +2245,8 @@ const rulesData = {
2245
2245
  "cantTellTextContrast": {
2246
2246
  "issueID": "ignorable",
2247
2247
  "quality": 1,
2248
- "what": "Test of text contrast could not give a conclusive result [invalid]"
2248
+ "what": "Test of text contrast could not give a conclusive result [invalid]",
2249
+ "supersededBy": null
2249
2250
  },
2250
2251
  "r73": {
2251
2252
  "issueID": "ignorable",
@@ -2560,7 +2561,8 @@ const rulesData = {
2560
2561
  "cantTell": {
2561
2562
  "issueID": "notValidatable",
2562
2563
  "quality": 1,
2563
- "what": "Test could not give a conclusive result"
2564
+ "what": "Test could not give a conclusive result",
2565
+ "supersededBy": "r66"
2564
2566
  }
2565
2567
  },
2566
2568
  "variable": {}
@@ -3880,7 +3882,8 @@ const rulesData = {
3880
3882
  "E-AAA.4_1_1.F77": {
3881
3883
  "issueID": "duplicateID",
3882
3884
  "quality": 1,
3883
- "what": "Duplicate id attribute value"
3885
+ "what": "Duplicate id attribute value",
3886
+ "supersededBy": "E-WCAG2AAA.Principle4.Guideline4_1.4_1_1.F77"
3884
3887
  },
3885
3888
  "E-WCAG2AAA.Principle4.Guideline4_1.4_1_1.F77": {
3886
3889
  "issueID": "duplicateID",
@@ -3930,7 +3933,8 @@ const rulesData = {
3930
3933
  "E-H36": {
3931
3934
  "issueID": "imageButtonNoText",
3932
3935
  "quality": 1,
3933
- "what": "Image submit button has no alt attribute"
3936
+ "what": "Image submit button has no alt attribute",
3937
+ "supersededBy": "E-AAA.1_1_1.H36"
3934
3938
  },
3935
3939
  "E-AAA.1_1_1.H36": {
3936
3940
  "issueID": "imageButtonNoText",
@@ -3945,7 +3949,8 @@ const rulesData = {
3945
3949
  "E-AAA.1_1_1.H37": {
3946
3950
  "issueID": "imageNoText",
3947
3951
  "quality": 1,
3948
- "what": "img element has no alt attribute"
3952
+ "what": "img element has no alt attribute",
3953
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_1.1_1_1.H37"
3949
3954
  },
3950
3955
  "E-WCAG2AAA.Principle1.Guideline1_1.1_1_1.H37": {
3951
3956
  "issueID": "imageNoText",
@@ -3970,7 +3975,8 @@ const rulesData = {
3970
3975
  "E-AAA.3_1_1.H57.2": {
3971
3976
  "issueID": "pageLanguage",
3972
3977
  "quality": 1,
3973
- "what": "html element has no lang or xml:lang attribute"
3978
+ "what": "html element has no lang or xml:lang attribute",
3979
+ "supersededBy": "E-WCAG2AAA.Principle3.Guideline3_1.3_1_1.H57.2"
3974
3980
  },
3975
3981
  "E-WCAG2AAA.Principle3.Guideline3_1.3_1_1.H57.2": {
3976
3982
  "issueID": "pageLanguage",
@@ -4015,7 +4021,8 @@ const rulesData = {
4015
4021
  "W-AAA.2_1_1.G90": {
4016
4022
  "issueID": "eventKeyboardRisk",
4017
4023
  "quality": 1,
4018
- "what": "Event handler functionality is not available by keyboard?"
4024
+ "what": "Event handler functionality is not available by keyboard?",
4025
+ "supersededBy": "W-WCAG2AAA.Principle2.Guideline2_1.2_1_1.G90"
4019
4026
  },
4020
4027
  "W-WCAG2AAA.Principle2.Guideline2_1.2_1_1.G90": {
4021
4028
  "issueID": "eventKeyboardRisk",
@@ -4025,7 +4032,8 @@ const rulesData = {
4025
4032
  "W-AAA.2_1_1.SCR20.MouseOut": {
4026
4033
  "issueID": "eventKeyboardRisk",
4027
4034
  "quality": 1,
4028
- "what": "Mousing-out functionality is not available by keyboard?"
4035
+ "what": "Mousing-out functionality is not available by keyboard?",
4036
+ "supersededBy": "W-WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOut"
4029
4037
  },
4030
4038
  "W-WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOut": {
4031
4039
  "issueID": "eventKeyboardRisk",
@@ -4035,7 +4043,8 @@ const rulesData = {
4035
4043
  "W-AAA.2_1_1.SCR20.MouseOver": {
4036
4044
  "issueID": "eventKeyboardRisk",
4037
4045
  "quality": 1,
4038
- "what": "Mousing-over functionality is not available by keyboard?"
4046
+ "what": "Mousing-over functionality is not available by keyboard?",
4047
+ "supersededBy": "W-WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOver"
4039
4048
  },
4040
4049
  "W-WCAG2AAA.Principle2.Guideline2_1.2_1_1.SCR20.MouseOver": {
4041
4050
  "issueID": "eventKeyboardRisk",
@@ -4055,7 +4064,8 @@ const rulesData = {
4055
4064
  "E-AAA.2_4_1.G1,G123,G124.NoSuchID": {
4056
4065
  "issueID": "internalLinkBroken",
4057
4066
  "quality": 1,
4058
- "what": "Internal link references a nonexistent destination"
4067
+ "what": "Internal link references a nonexistent destination",
4068
+ "supersededBy": "E-WCAG2AAA.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchID"
4059
4069
  },
4060
4070
  "E-WCAG2AAA.Principle2.Guideline2_4.2_4_1.G1,G123,G124.NoSuchID": {
4061
4071
  "issueID": "internalLinkBroken",
@@ -4080,7 +4090,8 @@ const rulesData = {
4080
4090
  "E-AAA.1_3_1.ARIA16,ARIA9": {
4081
4091
  "issueID": "labelBadID",
4082
4092
  "quality": 1,
4083
- "what": "aria-labelledby attribute references a nonexistent element"
4093
+ "what": "aria-labelledby attribute references a nonexistent element",
4094
+ "supersededBy": "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.ARIA16,ARIA9"
4084
4095
  },
4085
4096
  "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.ARIA16,ARIA9": {
4086
4097
  "issueID": "labelBadID",
@@ -4095,7 +4106,8 @@ const rulesData = {
4095
4106
  "E-AAA.4_1_2.H91.A.Empty": {
4096
4107
  "issueID": "linkNoText",
4097
4108
  "quality": 1,
4098
- "what": "a element has an id attribute but no href attribute or text"
4109
+ "what": "a element has an id attribute but no href attribute or text",
4110
+ "supersededBy": "W-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.Empty"
4099
4111
  },
4100
4112
  "W-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.Empty": {
4101
4113
  "issueID": "linkNoText",
@@ -4105,7 +4117,8 @@ const rulesData = {
4105
4117
  "E-AAA.4_1_2.H91.A.EmptyNoId": {
4106
4118
  "issueID": "linkNoText",
4107
4119
  "quality": 1,
4108
- "what": "Link has no name or id attribute or value"
4120
+ "what": "Link has no name or id attribute or value",
4121
+ "supersededBy": "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.EmptyNoId"
4109
4122
  },
4110
4123
  "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.EmptyNoId": {
4111
4124
  "issueID": "linkNoText",
@@ -4130,7 +4143,8 @@ const rulesData = {
4130
4143
  "E-AAA.1_1_1.H30.2": {
4131
4144
  "issueID": "imageLinkNoText",
4132
4145
  "quality": 1,
4133
- "what": "img element is the only link content but has no text alternative"
4146
+ "what": "img element is the only link content but has no text alternative",
4147
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_1.1_1_1.H30.2"
4134
4148
  },
4135
4149
  "E-WCAG2AAA.Principle1.Guideline1_1.1_1_1.H30.2": {
4136
4150
  "issueID": "imageLinkNoText",
@@ -4140,7 +4154,8 @@ const rulesData = {
4140
4154
  "E-AAA.4_1_2.H91.A.Placeholder": {
4141
4155
  "issueID": "linkBrokenRisk",
4142
4156
  "quality": 1,
4143
- "what": "Link has text but no href, id, or name attribute"
4157
+ "what": "Link has text but no href, id, or name attribute",
4158
+ "supersededBy": "W-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.Placeholder"
4144
4159
  },
4145
4160
  "W-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.A.Placeholder": {
4146
4161
  "issueID": "linkBrokenRisk",
@@ -4150,7 +4165,8 @@ const rulesData = {
4150
4165
  "E-AAA.2_4_8.H59.2b": {
4151
4166
  "issueID": "linkElNoHref",
4152
4167
  "quality": 1,
4153
- "what": "link element is missing a non-empty href for the linked resource"
4168
+ "what": "link element is missing a non-empty href for the linked resource",
4169
+ "supersededBy": "E-WCAG2AAA.Principle2.Guideline2_4.2_4_8.H59.2b"
4154
4170
  },
4155
4171
  "E-WCAG2AAA.Principle2.Guideline2_4.2_4_8.H59.2b": {
4156
4172
  "issueID": "linkElNoHref",
@@ -4170,7 +4186,8 @@ const rulesData = {
4170
4186
  "E-AAA.4_1_2.H91.Textarea.Name": {
4171
4187
  "issueID": "textAreaNoText",
4172
4188
  "quality": 1,
4173
- "what": "textarea element has no accessible name"
4189
+ "what": "textarea element has no accessible name",
4190
+ "supersededBy": "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Textarea.Name"
4174
4191
  },
4175
4192
  "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Textarea.Name": {
4176
4193
  "issueID": "textAreaNoText",
@@ -4180,7 +4197,8 @@ const rulesData = {
4180
4197
  "E-AAA.1_1_1.H2.EG3": {
4181
4198
  "issueID": "linkAltSame",
4182
4199
  "quality": 1,
4183
- "what": "alt value of the link img element duplicates the text of a link beside it"
4200
+ "what": "alt value of the link img element duplicates the text of a link beside it",
4201
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_1.1_1_1.H2.EG3"
4184
4202
  },
4185
4203
  "E-WCAG2AAA.Principle1.Guideline1_1.1_1_1.H2.EG3": {
4186
4204
  "issueID": "linkAltSame",
@@ -4210,7 +4228,8 @@ const rulesData = {
4210
4228
  "E-AAA.4_1_2.H91.Div.Name": {
4211
4229
  "issueID": "buttonNoText",
4212
4230
  "quality": 1,
4213
- "what": "div element with button role has no accessible name"
4231
+ "what": "div element with button role has no accessible name",
4232
+ "supersededBy": "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Div.Name"
4214
4233
  },
4215
4234
  "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Div.Name": {
4216
4235
  "issueID": "buttonNoText",
@@ -4245,7 +4264,8 @@ const rulesData = {
4245
4264
  "E-AAA.1_3_1.F92,ARIA4": {
4246
4265
  "issueID": "presentationChild",
4247
4266
  "quality": 1,
4248
- "what": "Element has presentation role but semantic child"
4267
+ "what": "Element has presentation role but semantic child",
4268
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.F92,ARIA4"
4249
4269
  },
4250
4270
  "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.F92,ARIA4": {
4251
4271
  "issueID": "presentationChild",
@@ -4265,7 +4285,8 @@ const rulesData = {
4265
4285
  "E-AAA.2_4_8.H59.2a": {
4266
4286
  "issueID": "linkElementBad",
4267
4287
  "quality": 1,
4268
- "what": "Element has no nonempty rel attribute for the type"
4288
+ "what": "Element has no nonempty rel attribute for the type",
4289
+ "supersededBy": "E-WCAG2AAA.Principle2.Guideline2_4.2_4_8.H59.2a"
4269
4290
  },
4270
4291
  "E-WCAG2AAA.Principle2.Guideline2_4.2_4_8.H59.2a": {
4271
4292
  "issueID": "linkElementBad",
@@ -4290,7 +4311,8 @@ const rulesData = {
4290
4311
  "E-AAA.1_3_5.H98": {
4291
4312
  "issueID": "autocompleteBad",
4292
4313
  "quality": 1,
4293
- "what": "autocomplete attribute and the input type are mismatched"
4314
+ "what": "autocomplete attribute and the input type are mismatched",
4315
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_3.1_3_5.H98"
4294
4316
  },
4295
4317
  "E-WCAG2AAA.Principle1.Guideline1_3.1_3_5.H98": {
4296
4318
  "issueID": "autocompleteBad",
@@ -4315,7 +4337,8 @@ const rulesData = {
4315
4337
  "E-AAA.1_4_6.G18.Fail": {
4316
4338
  "issueID": "contrastAA",
4317
4339
  "quality": 1,
4318
- "what": "Contrast between the text and its background is less than 4.5:1"
4340
+ "what": "Contrast between the text and its background is less than 4.5:1",
4341
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_4.1_4_6.G18.Fail"
4319
4342
  },
4320
4343
  "E-WCAG2AAA.Principle1.Guideline1_4.1_4_6.G18.Fail": {
4321
4344
  "issueID": "contrastAA",
@@ -4430,7 +4453,8 @@ const rulesData = {
4430
4453
  "E-AAA.1_3_1.H42.2": {
4431
4454
  "issueID": "headingEmpty",
4432
4455
  "quality": 1,
4433
- "what": "Heading is empty"
4456
+ "what": "Heading is empty",
4457
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H42.2"
4434
4458
  },
4435
4459
  "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H42.2": {
4436
4460
  "issueID": "headingEmpty",
@@ -4450,7 +4474,8 @@ const rulesData = {
4450
4474
  "W-AAA.1_3_1.H65": {
4451
4475
  "issueID": "titleEmpty",
4452
4476
  "quality": .5,
4453
- "what": "title attribute of the form control is empty or only whitespace"
4477
+ "what": "title attribute of the form control is empty or only whitespace",
4478
+ "supersededBy": "W-AAA.4_1_2.H65"
4454
4479
  },
4455
4480
  "W-AAA.4_1_2.H65": {
4456
4481
  "issueID": "titleEmpty",
@@ -4485,7 +4510,8 @@ const rulesData = {
4485
4510
  "E-AAA.1_3_1.H49.I": {
4486
4511
  "issueID": "nonSemanticText",
4487
4512
  "quality": 1,
4488
- "what": "Special text is italicized nonsemantically"
4513
+ "what": "Special text is italicized nonsemantically",
4514
+ "supersededBy": "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.I"
4489
4515
  },
4490
4516
  "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.I": {
4491
4517
  "issueID": "nonSemanticText",
@@ -4500,7 +4526,8 @@ const rulesData = {
4500
4526
  "E-AAA.1_3_1.H49.Small": {
4501
4527
  "issueID": "nonSemanticText",
4502
4528
  "quality": 1,
4503
- "what": "Special text is made small nonsemantically"
4529
+ "what": "Special text is made small nonsemantically",
4530
+ "supersededBy": "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.Small"
4504
4531
  },
4505
4532
  "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.Small": {
4506
4533
  "issueID": "nonSemanticText",
@@ -4515,7 +4542,8 @@ const rulesData = {
4515
4542
  "W-AAA.1_3_1.H42": {
4516
4543
  "issueID": "pseudoHeadingRisk",
4517
4544
  "quality": 1,
4518
- "what": "Heading coding is not used but the element is intended as a heading?"
4545
+ "what": "Heading coding is not used but the element is intended as a heading?",
4546
+ "supersededBy": "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H42"
4519
4547
  },
4520
4548
  "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H42": {
4521
4549
  "issueID": "pseudoHeadingRisk",
@@ -4525,7 +4553,8 @@ const rulesData = {
4525
4553
  "W-AAA.1_3_1.H48.1": {
4526
4554
  "issueID": "pseudoListRisk",
4527
4555
  "quality": 1,
4528
- "what": "Content simulates an unordered list without a ul?"
4556
+ "what": "Content simulates an unordered list without a ul?",
4557
+ "supersededBy": "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48.1"
4529
4558
  },
4530
4559
  "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48.1": {
4531
4560
  "issueID": "pseudoListRisk",
@@ -4535,7 +4564,8 @@ const rulesData = {
4535
4564
  "W-AAA.1_3_1.H48.2": {
4536
4565
  "issueID": "pseudoOrderedListRisk",
4537
4566
  "quality": 1,
4538
- "what": "Ordered list fails to be coded as such?"
4567
+ "what": "Ordered list fails to be coded as such?",
4568
+ "supersededBy": "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48.2"
4539
4569
  },
4540
4570
  "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H48.2": {
4541
4571
  "issueID": "pseudoOrderedListRisk",
@@ -4560,7 +4590,8 @@ const rulesData = {
4560
4590
  "E-AAA.4_1_2.H91.Select.Value": {
4561
4591
  "issueID": "selectNoText",
4562
4592
  "quality": 1,
4563
- "what": "Element is select but its value has no accessible name"
4593
+ "what": "Element is select but its value has no accessible name",
4594
+ "supersededBy": "W-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Select.Value"
4564
4595
  },
4565
4596
  "W-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Select.Value": {
4566
4597
  "issueID": "selectNoText",
@@ -4570,7 +4601,8 @@ const rulesData = {
4570
4601
  "W-AAA.1_3_1.H85.2": {
4571
4602
  "issueID": "selectFlatRisk",
4572
4603
  "quality": 1,
4573
- "what": "Selection list contains groups of related options not grouped with optgroup?"
4604
+ "what": "Selection list contains groups of related options not grouped with optgroup?",
4605
+ "supersededBy": "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H85.2"
4574
4606
  },
4575
4607
  "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H85.2": {
4576
4608
  "issueID": "selectFlatRisk",
@@ -4590,7 +4622,8 @@ const rulesData = {
4590
4622
  "E-AAA.1_3_1.H71.NoLegend": {
4591
4623
  "issueID": "legendMissing",
4592
4624
  "quality": 1,
4593
- "what": "Element has no legend element"
4625
+ "what": "Element has no legend element",
4626
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H71.NoLegend"
4594
4627
  },
4595
4628
  "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H71.NoLegend": {
4596
4629
  "issueID": "legendMissing",
@@ -4600,7 +4633,8 @@ const rulesData = {
4600
4633
  "E-AAA.4_1_2.H91.Fieldset.Name": {
4601
4634
  "issueID": "groupName",
4602
4635
  "quality": 1,
4603
- "what": "fieldset element has no accessible name"
4636
+ "what": "fieldset element has no accessible name",
4637
+ "supersededBy": "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Fieldset.Name"
4604
4638
  },
4605
4639
  "E-WCAG2AAA.Principle4.Guideline4_1.4_1_2.H91.Fieldset.Name": {
4606
4640
  "issueID": "groupName",
@@ -4665,7 +4699,8 @@ const rulesData = {
4665
4699
  "E-AAA.1_3_1.ARIA6": {
4666
4700
  "issueID": "labelEmpty",
4667
4701
  "quality": 1,
4668
- "what": "Value of the aria-label attribute of the form control is empty or only whitespace"
4702
+ "what": "Value of the aria-label attribute of the form control is empty or only whitespace",
4703
+ "supersededBy": "E-AAA.4_1_2.ARIA6"
4669
4704
  },
4670
4705
  "E-AAA.4_1_2.ARIA6": {
4671
4706
  "issueID": "labelEmpty",
@@ -4690,7 +4725,8 @@ const rulesData = {
4690
4725
  "E-AAA.3_2_2.H32.2": {
4691
4726
  "issueID": "submitButton",
4692
4727
  "quality": 1,
4693
- "what": "Form has no submit button"
4728
+ "what": "Form has no submit button",
4729
+ "supersededBy": "E-WCAG2AAA.Principle3.Guideline3_2.3_2_2.H32.2"
4694
4730
  },
4695
4731
  "E-WCAG2AAA.Principle3.Guideline3_2.3_2_2.H32.2": {
4696
4732
  "issueID": "submitButton",
@@ -4700,14 +4736,15 @@ const rulesData = {
4700
4736
  "E-AAA.1_3_1.H49.AlignAttr": {
4701
4737
  "issueID": "attributeObsolete",
4702
4738
  "quality": 1,
4703
- "what": "align attribute is obsolete"
4739
+ "what": "align attribute is obsolete",
4740
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.AlignAttr"
4704
4741
  },
4705
- "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.AlignAttr": {
4742
+ "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.AlignAttr": {
4706
4743
  "issueID": "attributeObsolete",
4707
4744
  "quality": 1,
4708
4745
  "what": "align attribute is obsolete"
4709
4746
  },
4710
- "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.AlignAttr": {
4747
+ "W-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.AlignAttr": {
4711
4748
  "issueID": "attributeObsolete",
4712
4749
  "quality": 1,
4713
4750
  "what": "align attribute is obsolete"
@@ -4725,7 +4762,8 @@ const rulesData = {
4725
4762
  "E-AAA.1_3_1.H49.Font": {
4726
4763
  "issueID": "elementObsolete",
4727
4764
  "quality": 1,
4728
- "what": "font element is obsolete"
4765
+ "what": "font element is obsolete",
4766
+ "supersededBy": "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.Font"
4729
4767
  },
4730
4768
  "E-WCAG2AAA.Principle1.Guideline1_3.1_3_1.H49.Font": {
4731
4769
  "issueID": "elementObsolete",
@@ -4919,7 +4957,8 @@ const rulesData = {
4919
4957
  "Rpt_Aria_ContentinfoWithNoMain_Implicit": {
4920
4958
  "issueID": "roleBad",
4921
4959
  "quality": 1,
4922
- "what": "Element has a contentinfo role when no element has a main role"
4960
+ "what": "Element has a contentinfo role when no element has a main role",
4961
+ "supersededBy": "aria_contentinfo_misuse"
4923
4962
  },
4924
4963
  "aria_contentinfo_misuse": {
4925
4964
  "issueID": "roleBad",
@@ -4929,22 +4968,24 @@ const rulesData = {
4929
4968
  "Rpt_Aria_ValidRole": {
4930
4969
  "issueID": "roleBad",
4931
4970
  "quality": 1,
4932
- "what": "Element has an invalid role"
4971
+ "what": "Element has an invalid role",
4972
+ "supersededBy": "aria_role_allowed"
4933
4973
  },
4934
4974
  "aria_role_allowed": {
4935
4975
  "issueID": "roleBad",
4936
4976
  "quality": 1,
4937
4977
  "what": "Element has an invalid role"
4938
4978
  },
4939
- "aria_eventhandler_role_valid": {
4979
+ "Rpt_Aria_EventHandlerMissingRole_Native_Host_Sematics": {
4940
4980
  "issueID": "roleBad",
4941
4981
  "quality": 1,
4942
- "what": "Element with an onclick, onmouseout, or onmouseover attribute has no valid ARIA role"
4982
+ "what": "Element has an event handler but no valid ARIA role",
4983
+ "supersededBy": "aria_eventhandler_role_valid"
4943
4984
  },
4944
- "Rpt_Aria_EventHandlerMissingRole_Native_Host_Sematics": {
4985
+ "aria_eventhandler_role_valid": {
4945
4986
  "issueID": "roleBad",
4946
4987
  "quality": 1,
4947
- "what": "Element has an event handler but no valid ARIA role"
4988
+ "what": "Element with an onclick, onmouseout, or onmouseover attribute has no valid ARIA role"
4948
4989
  },
4949
4990
  "combobox_haspopup_valid": {
4950
4991
  "issueID": "roleBad",
@@ -4971,11 +5012,6 @@ const rulesData = {
4971
5012
  "quality": 1,
4972
5013
  "what": "ARIA attribute is invalid for the role of its element"
4973
5014
  },
4974
- "aria_attribute_value_valid": {
4975
- "issueID": "attributeValueBad",
4976
- "quality": 1,
4977
- "what": "Value of an attribute on the element is not valid"
4978
- },
4979
5015
  "aria_attribute_required": {
4980
5016
  "issueID": "ariaMissing",
4981
5017
  "quality": 1,
@@ -4989,7 +5025,8 @@ const rulesData = {
4989
5025
  "Rpt_Aria_ValidProperty": {
4990
5026
  "issueID": "ariaAttributeBad",
4991
5027
  "quality": 1,
4992
- "what": "ARIA attribute is invalid for the role"
5028
+ "what": "ARIA attribute is invalid for the role",
5029
+ "supersededBy": "aria_attribute_allowed"
4993
5030
  },
4994
5031
  "aria_attribute_allowed": {
4995
5032
  "issueID": "ariaAttributeBad",
@@ -5002,9 +5039,15 @@ const rulesData = {
5002
5039
  "what": "ARIA attribute has an empty value"
5003
5040
  },
5004
5041
  "Rpt_Aria_ValidPropertyValue": {
5005
- "issueID": "ariaAttributeBad",
5042
+ "issueID": "attributeValueBad",
5006
5043
  "quality": 1,
5007
- "what": "ARIA property value is invalid"
5044
+ "what": "ARIA property value is invalid",
5045
+ "supersededBy": "aria_attribute_value_valid"
5046
+ },
5047
+ "aria_attribute_value_valid": {
5048
+ "issueID": "attributeValueBad",
5049
+ "quality": 1,
5050
+ "what": "Value of an ARIA attribute on the element is invalid"
5008
5051
  },
5009
5052
  "aria_attribute_redundant": {
5010
5053
  "issueID": "ariaRedundant",
@@ -5146,12 +5189,13 @@ const rulesData = {
5146
5189
  "quality": 1,
5147
5190
  "what": "input element label invisible?"
5148
5191
  },
5149
- "label_name_visible": {
5192
+ "WCAG21_Label_Accessible": {
5150
5193
  "issueID": "visibleLabelNotInName",
5151
5194
  "quality": 1,
5152
- "what": "Accessible name does not match or contain the visible label text"
5195
+ "what": "Accessible name does not match or contain the visible label text",
5196
+ "supersededBy": "label_name_visible"
5153
5197
  },
5154
- "WCAG21_Label_Accessible": {
5198
+ "label_name_visible": {
5155
5199
  "issueID": "visibleLabelNotInName",
5156
5200
  "quality": 1,
5157
5201
  "what": "Accessible name does not match or contain the visible label text"
@@ -9702,12 +9746,17 @@ const issues = deepFreeze(issuesData);
9702
9746
  const rules = deepFreeze(rulesData);
9703
9747
  const makeIssueRules = (ruleTable, issueTable = issues) => {
9704
9748
  const errors = [];
9705
- const checkEntry = (engineID, variabilityName, ruleID, entry) => {
9706
- const { issueID, quality, what } = entry;
9749
+ const checkEntry = (engineID, variabilityName, ruleID, entry, engineRuleIDs) => {
9750
+ const { issueID, quality, what, supersededBy } = entry;
9707
9751
  if (!ruleID.length) errors.push(`${engineID}.${variabilityName} has a rule with an empty ruleID`);
9708
9752
  if (typeof issueID !== "string" || !issueID.length || !(issueID in issueTable)) errors.push(`${engineID}.${variabilityName}.${ruleID} has an invalid issueID (${JSON.stringify(issueID)})`);
9709
9753
  if (typeof quality !== "number") errors.push(`${engineID}.${variabilityName}.${ruleID} has a non-numeric quality (${JSON.stringify(quality)})`);
9710
9754
  if (typeof what !== "string" || !what.length) errors.push(`${engineID}.${variabilityName}.${ruleID} has a non-string or empty what (${JSON.stringify(what)})`);
9755
+ if (supersededBy !== void 0 && supersededBy !== null) {
9756
+ if (typeof supersededBy !== "string" || !supersededBy.length) errors.push(`${engineID}.${variabilityName}.${ruleID} has a non-string, non-null, or empty supersededBy (${JSON.stringify(supersededBy)})`);
9757
+ else if (supersededBy === ruleID) errors.push(`${engineID}.${variabilityName}.${ruleID} has supersededBy naming itself`);
9758
+ else if (!engineRuleIDs.has(supersededBy)) errors.push(`${engineID}.${variabilityName}.${ruleID} has supersededBy (${supersededBy}), which is not a rule of ${engineID}`);
9759
+ }
9711
9760
  if (variabilityName === "variable") {
9712
9761
  if (!/[.*+?^${}()|[\]\\]/.test(ruleID)) errors.push(`${engineID}.${variabilityName}.${ruleID} has no regex metacharacters, so it should be an invariant rule`);
9713
9762
  else try {
@@ -9719,8 +9768,9 @@ const makeIssueRules = (ruleTable, issueTable = issues) => {
9719
9768
  };
9720
9769
  const issueRules = {};
9721
9770
  Object.entries(ruleTable).forEach(([engineID, { invariant, variable }]) => {
9771
+ const engineRuleIDs = /* @__PURE__ */ new Set([...Object.keys(invariant), ...Object.keys(variable)]);
9722
9772
  Object.entries(invariant).forEach(([ruleID, entry]) => {
9723
- checkEntry(engineID, "invariant", ruleID, entry);
9773
+ checkEntry(engineID, "invariant", ruleID, entry, engineRuleIDs);
9724
9774
  const { issueID } = entry;
9725
9775
  issueRules[issueID] ??= {};
9726
9776
  issueRules[issueID][engineID] ??= {
@@ -9730,7 +9780,7 @@ const makeIssueRules = (ruleTable, issueTable = issues) => {
9730
9780
  issueRules[issueID][engineID].invariant.push(ruleID);
9731
9781
  });
9732
9782
  Object.entries(variable).forEach(([ruleID, entry]) => {
9733
- checkEntry(engineID, "variable", ruleID, entry);
9783
+ checkEntry(engineID, "variable", ruleID, entry, engineRuleIDs);
9734
9784
  const { issueID } = entry;
9735
9785
  issueRules[issueID] ??= {};
9736
9786
  issueRules[issueID][engineID] ??= {
@@ -9773,8 +9823,19 @@ const getEngineRuleCounts = (ruleTable = rules) => {
9773
9823
  });
9774
9824
  return counts;
9775
9825
  };
9826
+ const checkIssuesData = (issueTable) => {
9827
+ const errors = [];
9828
+ const issueIDsBySummary = {};
9829
+ Object.entries(issueTable).forEach(([issueID, { summary }]) => {
9830
+ const ownerID = issueIDsBySummary[summary];
9831
+ if (ownerID) errors.push(`issues.${issueID} has the summary "${summary}", already used by issues.${ownerID}`);
9832
+ else issueIDsBySummary[summary] = issueID;
9833
+ });
9834
+ if (errors.length) throw new Error(`${errors[0]} (1 of ${errors.length} problems found)`);
9835
+ };
9776
9836
  const issueRules = makeIssueRules(rules);
9777
9837
  const issueStats = makeIssueStats(issueRules);
9838
+ checkIssuesData(issues);
9778
9839
  //#endregion
9779
9840
  exports.getEditableData = getEditableData;
9780
9841
  exports.getEngineRuleCounts = getEngineRuleCounts;