testaro-issues 0.2.1 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/index.cjs +162 -97
- package/dist/index.d.cts +117 -84
- package/dist/index.d.mts +117 -84
- package/dist/index.mjs +159 -98
- package/package.json +5 -3
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
@@ -702,39 +702,63 @@ const issuesData = {
|
|
|
702
702
|
"wcag": "1.3.1",
|
|
703
703
|
"weight": 4
|
|
704
704
|
},
|
|
705
|
-
"
|
|
706
|
-
"summary": "meta
|
|
707
|
-
"why": "
|
|
708
|
-
"wcag": "
|
|
705
|
+
"metaAttributesWrong": {
|
|
706
|
+
"summary": "prohibited or missing meta attributes",
|
|
707
|
+
"why": "Browser processes the page incorrectly",
|
|
708
|
+
"wcag": "4.1",
|
|
709
|
+
"weight": 3
|
|
710
|
+
},
|
|
711
|
+
"metaAttributeBad": {
|
|
712
|
+
"summary": "meta attribute value invalid",
|
|
713
|
+
"why": "Browser processes the page incorrectly",
|
|
714
|
+
"wcag": "4.1",
|
|
715
|
+
"weight": 3
|
|
716
|
+
},
|
|
717
|
+
"metaDuplicated": {
|
|
718
|
+
"summary": "meta element duplicated",
|
|
719
|
+
"why": "Browser may process the page incorrectly",
|
|
720
|
+
"wcag": "4.1",
|
|
721
|
+
"weight": 3
|
|
722
|
+
},
|
|
723
|
+
"metaCharsetLate": {
|
|
724
|
+
"summary": "meta charset declared too late",
|
|
725
|
+
"why": "Browser may display incorrect text",
|
|
726
|
+
"wcag": "4.1",
|
|
727
|
+
"weight": 4
|
|
728
|
+
},
|
|
729
|
+
"metaXUACompatible": {
|
|
730
|
+
"summary": "meta X-UA-Compatible incomplete",
|
|
731
|
+
"why": "Internet Explorer may display the page incorrectly",
|
|
732
|
+
"wcag": "4.1",
|
|
709
733
|
"weight": 3
|
|
710
734
|
},
|
|
711
735
|
"metaMisplaced": {
|
|
712
736
|
"summary": "meta element in invalid location",
|
|
713
|
-
"why": "
|
|
714
|
-
"wcag": "
|
|
737
|
+
"why": "Browser may process the page incorrectly",
|
|
738
|
+
"wcag": "4.1",
|
|
715
739
|
"weight": 4
|
|
716
740
|
},
|
|
717
741
|
"stylesheetBanned": {
|
|
718
742
|
"summary": "stylesheet prohibited",
|
|
719
|
-
"why": "Browser displays the
|
|
743
|
+
"why": "Browser displays the page improperly",
|
|
720
744
|
"wcag": "1.4",
|
|
721
745
|
"weight": 3
|
|
722
746
|
},
|
|
723
747
|
"scriptNotDeferrable": {
|
|
724
748
|
"summary": "script element invalidly deferred",
|
|
725
|
-
"why": "Browser processes the
|
|
749
|
+
"why": "Browser processes the page improperly",
|
|
726
750
|
"wcag": "1.3.1",
|
|
727
751
|
"weight": 4
|
|
728
752
|
},
|
|
729
753
|
"scriptBanned": {
|
|
730
754
|
"summary": "script prohibited",
|
|
731
|
-
"why": "Browser processes the
|
|
755
|
+
"why": "Browser processes the page improperly",
|
|
732
756
|
"wcag": "4.1",
|
|
733
757
|
"weight": 3
|
|
734
758
|
},
|
|
735
759
|
"scriptElementBad": {
|
|
736
760
|
"summary": "script element invalid",
|
|
737
|
-
"why": "Browser processes the
|
|
761
|
+
"why": "Browser processes the page improperly",
|
|
738
762
|
"wcag": "1.3.1",
|
|
739
763
|
"weight": 4
|
|
740
764
|
},
|
|
@@ -758,7 +782,7 @@ const issuesData = {
|
|
|
758
782
|
},
|
|
759
783
|
"iframeTitleBad": {
|
|
760
784
|
"summary": "iframe not named",
|
|
761
|
-
"why": "User cannot get help on the topic of an embedded
|
|
785
|
+
"why": "User cannot get help on the topic of an embedded page",
|
|
762
786
|
"wcag": "4.1.2",
|
|
763
787
|
"weight": 4
|
|
764
788
|
},
|
|
@@ -956,13 +980,13 @@ const issuesData = {
|
|
|
956
980
|
},
|
|
957
981
|
"headingEmpty": {
|
|
958
982
|
"summary": "heading empty",
|
|
959
|
-
"why": "User cannot get help on the topic of a part of the
|
|
983
|
+
"why": "User cannot get help on the topic of a part of the page",
|
|
960
984
|
"wcag": "2.4.6",
|
|
961
985
|
"weight": 3
|
|
962
986
|
},
|
|
963
987
|
"headingOfNothing": {
|
|
964
988
|
"summary": "heading heads nothing",
|
|
965
|
-
"why": "Helper misdescribes the
|
|
989
|
+
"why": "Helper misdescribes the page",
|
|
966
990
|
"wcag": "1.3.1",
|
|
967
991
|
"weight": 2
|
|
968
992
|
},
|
|
@@ -1004,112 +1028,112 @@ const issuesData = {
|
|
|
1004
1028
|
},
|
|
1005
1029
|
"docTypeMissing": {
|
|
1006
1030
|
"summary": "DOCTYPE missing",
|
|
1007
|
-
"why": "Browser processes the
|
|
1031
|
+
"why": "Browser processes the page improperly",
|
|
1008
1032
|
"wcag": "1.3.1",
|
|
1009
1033
|
"weight": 4,
|
|
1010
1034
|
"max": 1
|
|
1011
1035
|
},
|
|
1012
1036
|
"docTypeMisplaced": {
|
|
1013
1037
|
"summary": "DOCTYPE in invalid location",
|
|
1014
|
-
"why": "Browser processes the
|
|
1038
|
+
"why": "Browser processes the page improperly",
|
|
1015
1039
|
"wcag": "1.3.1",
|
|
1016
1040
|
"weight": 4,
|
|
1017
1041
|
"max": 1
|
|
1018
1042
|
},
|
|
1019
1043
|
"docTypeBad": {
|
|
1020
1044
|
"summary": "DOCTYPE invalid",
|
|
1021
|
-
"why": "Browser processes the
|
|
1045
|
+
"why": "Browser processes the page improperly",
|
|
1022
1046
|
"wcag": "1.3.1",
|
|
1023
1047
|
"weight": 3,
|
|
1024
1048
|
"max": 1
|
|
1025
1049
|
},
|
|
1026
1050
|
"pageTitleBad": {
|
|
1027
1051
|
"summary": "page title invalid",
|
|
1028
|
-
"why": "Browser processes the
|
|
1052
|
+
"why": "Browser processes the page improperly",
|
|
1029
1053
|
"wcag": "1.3.1",
|
|
1030
1054
|
"weight": 3,
|
|
1031
1055
|
"max": 1
|
|
1032
1056
|
},
|
|
1033
1057
|
"pageTitle": {
|
|
1034
1058
|
"summary": "page title missing",
|
|
1035
|
-
"why": "User is not informed of the topic of the
|
|
1059
|
+
"why": "User is not informed of the topic of the page",
|
|
1036
1060
|
"wcag": "2.4.2",
|
|
1037
1061
|
"weight": 4,
|
|
1038
1062
|
"max": 1
|
|
1039
1063
|
},
|
|
1040
1064
|
"headElementsBad": {
|
|
1041
1065
|
"summary": "element in head invalid",
|
|
1042
|
-
"why": "Browser processes the
|
|
1066
|
+
"why": "Browser processes the page improperly",
|
|
1043
1067
|
"wcag": "4.1.1",
|
|
1044
1068
|
"weight": 3
|
|
1045
1069
|
},
|
|
1046
1070
|
"headingLevelSkip": {
|
|
1047
1071
|
"summary": "heading level skipped",
|
|
1048
|
-
"why": "Helper misdescribes the
|
|
1072
|
+
"why": "Helper misdescribes the page",
|
|
1049
1073
|
"wcag": "1.3.1",
|
|
1050
1074
|
"weight": 2
|
|
1051
1075
|
},
|
|
1052
1076
|
"headingStructure": {
|
|
1053
1077
|
"summary": "heading structure illogical",
|
|
1054
|
-
"why": "Helper misdescribes the
|
|
1078
|
+
"why": "Helper misdescribes the page",
|
|
1055
1079
|
"wcag": "1.3.1",
|
|
1056
1080
|
"weight": 2
|
|
1057
1081
|
},
|
|
1058
1082
|
"headingConfusion": {
|
|
1059
1083
|
"summary": "heading names repeated",
|
|
1060
|
-
"why": "User cannot differentiate parts of the
|
|
1084
|
+
"why": "User cannot differentiate parts of the page",
|
|
1061
1085
|
"wcag": "1.3.1",
|
|
1062
1086
|
"weight": 2
|
|
1063
1087
|
},
|
|
1064
1088
|
"headingMisuseRisk": {
|
|
1065
1089
|
"summary": "heading used for styling?",
|
|
1066
|
-
"why": "User cannot understand the
|
|
1090
|
+
"why": "User cannot understand the page structure",
|
|
1067
1091
|
"wcag": "1.3.1",
|
|
1068
1092
|
"weight": 2
|
|
1069
1093
|
},
|
|
1070
1094
|
"headingNone": {
|
|
1071
1095
|
"summary": "headings missing",
|
|
1072
|
-
"why": "User cannot survey parts of the
|
|
1096
|
+
"why": "User cannot survey parts of the page",
|
|
1073
1097
|
"wcag": "1.3.1",
|
|
1074
1098
|
"weight": 3,
|
|
1075
1099
|
"max": 1
|
|
1076
1100
|
},
|
|
1077
1101
|
"h1Not1": {
|
|
1078
1102
|
"summary": "not exactly 1 h1 heading",
|
|
1079
|
-
"why": "User cannot understand the topic of the
|
|
1103
|
+
"why": "User cannot understand the topic of the page",
|
|
1080
1104
|
"wcag": "1.3.1",
|
|
1081
1105
|
"weight": 2,
|
|
1082
1106
|
"max": 1
|
|
1083
1107
|
},
|
|
1084
1108
|
"h1Not1st": {
|
|
1085
1109
|
"summary": "h1 not 1st heading",
|
|
1086
|
-
"why": "User cannot understand the topic of the
|
|
1110
|
+
"why": "User cannot understand the topic of the page",
|
|
1087
1111
|
"wcag": "1.3.1",
|
|
1088
1112
|
"weight": 3,
|
|
1089
1113
|
"max": 1
|
|
1090
1114
|
},
|
|
1091
1115
|
"docHeadingNotH1": {
|
|
1092
1116
|
"summary": "primary heading not h1",
|
|
1093
|
-
"why": "User cannot understand the topic of the
|
|
1117
|
+
"why": "User cannot understand the topic of the page",
|
|
1094
1118
|
"wcag": "1.3.1",
|
|
1095
1119
|
"weight": 2,
|
|
1096
1120
|
"max": 1
|
|
1097
1121
|
},
|
|
1098
1122
|
"articleHeadingless": {
|
|
1099
1123
|
"summary": "article heading missing",
|
|
1100
|
-
"why": "User cannot understand the topic of a part of the
|
|
1124
|
+
"why": "User cannot understand the topic of a part of the page",
|
|
1101
1125
|
"wcag": "1.3.1",
|
|
1102
1126
|
"weight": 1
|
|
1103
1127
|
},
|
|
1104
1128
|
"sectionHeadingless": {
|
|
1105
1129
|
"summary": "section heading missing",
|
|
1106
|
-
"why": "User cannot understand the topic of a part of the
|
|
1130
|
+
"why": "User cannot understand the topic of a part of the page",
|
|
1107
1131
|
"wcag": "1.3.1",
|
|
1108
1132
|
"weight": 1
|
|
1109
1133
|
},
|
|
1110
1134
|
"headingLength": {
|
|
1111
1135
|
"summary": "heading abnormally long",
|
|
1112
|
-
"why": "User has difficulty understanding the topic of a part of the
|
|
1136
|
+
"why": "User has difficulty understanding the topic of a part of the page",
|
|
1113
1137
|
"wcag": "1.3.1",
|
|
1114
1138
|
"weight": 1
|
|
1115
1139
|
},
|
|
@@ -1139,7 +1163,7 @@ const issuesData = {
|
|
|
1139
1163
|
},
|
|
1140
1164
|
"hrConfusionRisk": {
|
|
1141
1165
|
"summary": "hr misused",
|
|
1142
|
-
"why": "User cannot get help on the nature of segments of the
|
|
1166
|
+
"why": "User cannot get help on the nature of segments of the page",
|
|
1143
1167
|
"wcag": "1.3.1",
|
|
1144
1168
|
"weight": 1
|
|
1145
1169
|
},
|
|
@@ -1157,7 +1181,7 @@ const issuesData = {
|
|
|
1157
1181
|
},
|
|
1158
1182
|
"pseudoHeadingRisk": {
|
|
1159
1183
|
"summary": "heading-like styles dubious",
|
|
1160
|
-
"why": "User may be unable to understand the topic of a part of the
|
|
1184
|
+
"why": "User may be unable to understand the topic of a part of the page",
|
|
1161
1185
|
"wcag": "1.3.1",
|
|
1162
1186
|
"weight": 1
|
|
1163
1187
|
},
|
|
@@ -1487,7 +1511,7 @@ const issuesData = {
|
|
|
1487
1511
|
},
|
|
1488
1512
|
"visibleBulk": {
|
|
1489
1513
|
"summary": "large visible-element count",
|
|
1490
|
-
"why": "User cannot easily find items in the
|
|
1514
|
+
"why": "User cannot easily find items in the page",
|
|
1491
1515
|
"wcag": "2.4",
|
|
1492
1516
|
"weight": 1,
|
|
1493
1517
|
"max": 1
|
|
@@ -1554,90 +1578,90 @@ const issuesData = {
|
|
|
1554
1578
|
},
|
|
1555
1579
|
"noLandmarks": {
|
|
1556
1580
|
"summary": "no landmarks",
|
|
1557
|
-
"why": "User cannot get help on how the
|
|
1581
|
+
"why": "User cannot get help on how the page is organized",
|
|
1558
1582
|
"wcag": "1.3.6",
|
|
1559
1583
|
"weight": 2,
|
|
1560
1584
|
"max": 1
|
|
1561
1585
|
},
|
|
1562
1586
|
"contentBeyondLandmarks": {
|
|
1563
1587
|
"summary": "content beyond landmarks",
|
|
1564
|
-
"why": "User cannot get help on how some of the
|
|
1588
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1565
1589
|
"wcag": "1.3.6",
|
|
1566
1590
|
"weight": 1
|
|
1567
1591
|
},
|
|
1568
1592
|
"footerNotTop": {
|
|
1569
1593
|
"summary": "footer child of landmark",
|
|
1570
|
-
"why": "User cannot get help on how some of the
|
|
1594
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1571
1595
|
"wcag": "1.3.6",
|
|
1572
1596
|
"weight": 1
|
|
1573
1597
|
},
|
|
1574
1598
|
"asideNotTop": {
|
|
1575
1599
|
"summary": "aside child of landmark",
|
|
1576
|
-
"why": "User cannot get help on how some of the
|
|
1600
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1577
1601
|
"wcag": "1.3.6",
|
|
1578
1602
|
"weight": 2
|
|
1579
1603
|
},
|
|
1580
1604
|
"mainNotTop": {
|
|
1581
1605
|
"summary": "main child of landmark",
|
|
1582
|
-
"why": "User cannot get help on how some of the
|
|
1606
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1583
1607
|
"wcag": "1.3.6",
|
|
1584
1608
|
"weight": 2
|
|
1585
1609
|
},
|
|
1586
1610
|
"mainConfusion": {
|
|
1587
1611
|
"summary": "mains not distinctly named",
|
|
1588
|
-
"why": "User cannot get help on how some of the
|
|
1612
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1589
1613
|
"wcag": "1.3.6",
|
|
1590
1614
|
"weight": 3
|
|
1591
1615
|
},
|
|
1592
1616
|
"mainNone": {
|
|
1593
1617
|
"summary": "main missing",
|
|
1594
|
-
"why": "User cannot get help on how some of the
|
|
1618
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1595
1619
|
"wcag": "1.3.6",
|
|
1596
1620
|
"weight": 2,
|
|
1597
1621
|
"max": 1
|
|
1598
1622
|
},
|
|
1599
1623
|
"mainNot1": {
|
|
1600
1624
|
"summary": "multiple mains",
|
|
1601
|
-
"why": "User cannot get help on how some of the
|
|
1625
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1602
1626
|
"wcag": "1.3.6",
|
|
1603
1627
|
"weight": 2,
|
|
1604
1628
|
"max": 1
|
|
1605
1629
|
},
|
|
1606
1630
|
"bannerNot1": {
|
|
1607
1631
|
"summary": "multiple banners",
|
|
1608
|
-
"why": "User cannot get help on how some of the
|
|
1632
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1609
1633
|
"wcag": "1.3.6",
|
|
1610
1634
|
"weight": 2,
|
|
1611
1635
|
"max": 1
|
|
1612
1636
|
},
|
|
1613
1637
|
"bannerNotTop": {
|
|
1614
1638
|
"summary": "banner child of landmark",
|
|
1615
|
-
"why": "User cannot get help on how some of the
|
|
1639
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1616
1640
|
"wcag": "1.3.6",
|
|
1617
1641
|
"weight": 2
|
|
1618
1642
|
},
|
|
1619
1643
|
"footerConfusion": {
|
|
1620
1644
|
"summary": "contentinfos not distinctly named",
|
|
1621
|
-
"why": "User cannot get help on how some of the
|
|
1645
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1622
1646
|
"wcag": "1.3.6",
|
|
1623
1647
|
"weight": 3
|
|
1624
1648
|
},
|
|
1625
1649
|
"footerNot1": {
|
|
1626
1650
|
"summary": "multiple contentinfos",
|
|
1627
|
-
"why": "User cannot get help on how some of the
|
|
1651
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1628
1652
|
"wcag": "1.3.6",
|
|
1629
1653
|
"weight": 2,
|
|
1630
1654
|
"max": 1
|
|
1631
1655
|
},
|
|
1632
1656
|
"landmarkConfusion": {
|
|
1633
1657
|
"summary": "landmarks not distinctly named",
|
|
1634
|
-
"why": "User cannot get help on how some of the
|
|
1658
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1635
1659
|
"wcag": "1.3.6",
|
|
1636
1660
|
"weight": 3
|
|
1637
1661
|
},
|
|
1638
1662
|
"documentConfusion": {
|
|
1639
|
-
"summary": "
|
|
1640
|
-
"why": "User cannot get help on how some of the
|
|
1663
|
+
"summary": "page elements not distinctly named",
|
|
1664
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1641
1665
|
"wcag": "1.3.6",
|
|
1642
1666
|
"weight": 3
|
|
1643
1667
|
},
|
|
@@ -1649,61 +1673,61 @@ const issuesData = {
|
|
|
1649
1673
|
},
|
|
1650
1674
|
"formConfusion": {
|
|
1651
1675
|
"summary": "forms not distinctly named",
|
|
1652
|
-
"why": "User cannot get help on how some of the
|
|
1676
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1653
1677
|
"wcag": "1.3.6",
|
|
1654
1678
|
"weight": 3
|
|
1655
1679
|
},
|
|
1656
1680
|
"applicationNoText": {
|
|
1657
1681
|
"summary": "application not named",
|
|
1658
|
-
"why": "User cannot get help on how some of the
|
|
1682
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1659
1683
|
"wcag": "1.3.6",
|
|
1660
1684
|
"weight": 4
|
|
1661
1685
|
},
|
|
1662
1686
|
"applicationConfusion": {
|
|
1663
1687
|
"summary": "applications not distinctly named",
|
|
1664
|
-
"why": "User cannot get help on how some of the
|
|
1688
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1665
1689
|
"wcag": "1.3.6",
|
|
1666
1690
|
"weight": 3
|
|
1667
1691
|
},
|
|
1668
1692
|
"asideConfusion": {
|
|
1669
1693
|
"summary": "asides not distinctly named",
|
|
1670
|
-
"why": "User cannot get help on how some of the
|
|
1694
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1671
1695
|
"wcag": "1.3.6",
|
|
1672
1696
|
"weight": 3
|
|
1673
1697
|
},
|
|
1674
1698
|
"bannerConfusion": {
|
|
1675
1699
|
"summary": "banners not distinctly named",
|
|
1676
|
-
"why": "User cannot get help on how some of the
|
|
1700
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1677
1701
|
"wcag": "1.3.6",
|
|
1678
1702
|
"weight": 3
|
|
1679
1703
|
},
|
|
1680
1704
|
"navConfusion": {
|
|
1681
1705
|
"summary": "navigations not distinctly named",
|
|
1682
|
-
"why": "User cannot get help on how some of the
|
|
1706
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1683
1707
|
"wcag": "1.3.6",
|
|
1684
1708
|
"weight": 3
|
|
1685
1709
|
},
|
|
1686
1710
|
"landmarkInNav": {
|
|
1687
1711
|
"summary": "invalid landmark child of navigation role",
|
|
1688
|
-
"why": "User cannot get help on how some of the
|
|
1712
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1689
1713
|
"wcag": "1.3.6",
|
|
1690
1714
|
"weight": 4
|
|
1691
1715
|
},
|
|
1692
1716
|
"regionConfusion": {
|
|
1693
1717
|
"summary": "regions not distinctly named",
|
|
1694
|
-
"why": "User cannot get help on how some of the
|
|
1718
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1695
1719
|
"wcag": "1.3.6",
|
|
1696
1720
|
"weight": 3
|
|
1697
1721
|
},
|
|
1698
1722
|
"searchConfusion": {
|
|
1699
1723
|
"summary": "searches not distinctly named",
|
|
1700
|
-
"why": "User cannot get help on how some of the
|
|
1724
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1701
1725
|
"wcag": "1.3.6",
|
|
1702
1726
|
"weight": 3
|
|
1703
1727
|
},
|
|
1704
1728
|
"complementaryNoText": {
|
|
1705
1729
|
"summary": "complementary not named",
|
|
1706
|
-
"why": "User cannot get help on how some of the
|
|
1730
|
+
"why": "User cannot get help on how some of the page is organized",
|
|
1707
1731
|
"wcag": "1.3.6",
|
|
1708
1732
|
"weight": 1
|
|
1709
1733
|
},
|
|
@@ -1763,14 +1787,14 @@ const issuesData = {
|
|
|
1763
1787
|
},
|
|
1764
1788
|
"contentHidden": {
|
|
1765
1789
|
"summary": "page hidden",
|
|
1766
|
-
"why": "User cannot get the
|
|
1790
|
+
"why": "User cannot get the page content",
|
|
1767
1791
|
"wcag": "2.4.7",
|
|
1768
1792
|
"weight": 4,
|
|
1769
1793
|
"max": 1
|
|
1770
1794
|
},
|
|
1771
1795
|
"hideFailureRisk": {
|
|
1772
1796
|
"summary": "false aria-hidden value risky",
|
|
1773
|
-
"why": "User may be misled by erroneously hidden or revealed
|
|
1797
|
+
"why": "User may be misled by erroneously hidden or revealed page content",
|
|
1774
1798
|
"wcag": "2.4.6",
|
|
1775
1799
|
"weight": 1
|
|
1776
1800
|
},
|
|
@@ -1788,19 +1812,19 @@ const issuesData = {
|
|
|
1788
1812
|
},
|
|
1789
1813
|
"hoverIndication": {
|
|
1790
1814
|
"summary": "hover indication poor",
|
|
1791
|
-
"why": "User cannot explore the
|
|
1815
|
+
"why": "User cannot explore the page reliably with a mouse",
|
|
1792
1816
|
"wcag": "3.3.2",
|
|
1793
1817
|
"weight": 3
|
|
1794
1818
|
},
|
|
1795
1819
|
"hoverSurprise": {
|
|
1796
1820
|
"summary": "hovering changes content",
|
|
1797
|
-
"why": "User cannot explore the
|
|
1821
|
+
"why": "User cannot explore the page reliably with a mouse",
|
|
1798
1822
|
"wcag": "3.2.5",
|
|
1799
1823
|
"weight": 1
|
|
1800
1824
|
},
|
|
1801
1825
|
"formSurpriseRisk": {
|
|
1802
1826
|
"summary": "form interaction changes content?",
|
|
1803
|
-
"why": "User experiences unexpected
|
|
1827
|
+
"why": "User experiences unexpected page change when using a form",
|
|
1804
1828
|
"wcag": "3.2.5",
|
|
1805
1829
|
"weight": 1
|
|
1806
1830
|
},
|
|
@@ -2047,14 +2071,14 @@ const issuesData = {
|
|
|
2047
2071
|
},
|
|
2048
2072
|
"skipRepeatedContent": {
|
|
2049
2073
|
"summary": "skip method missing or invalid",
|
|
2050
|
-
"why": "Keyboard-only user cannot easily reach the specific content of the
|
|
2074
|
+
"why": "Keyboard-only user cannot easily reach the specific content of the page",
|
|
2051
2075
|
"wcag": "2.4.1",
|
|
2052
2076
|
"weight": 3,
|
|
2053
2077
|
"max": 2
|
|
2054
2078
|
},
|
|
2055
2079
|
"repeatedContentRisk": {
|
|
2056
2080
|
"summary": "skip method missing or invalid?",
|
|
2057
|
-
"why": "Keyboard-only user may be unable easily to reach the specific content of the
|
|
2081
|
+
"why": "Keyboard-only user may be unable easily to reach the specific content of the page",
|
|
2058
2082
|
"wcag": "2.4.1",
|
|
2059
2083
|
"weight": 1,
|
|
2060
2084
|
"max": 2
|
|
@@ -2146,25 +2170,25 @@ const issuesData = {
|
|
|
2146
2170
|
},
|
|
2147
2171
|
"characterBad": {
|
|
2148
2172
|
"summary": "invalid character",
|
|
2149
|
-
"why": "Invalid character makes the
|
|
2173
|
+
"why": "Invalid character makes the page behave incorrectly",
|
|
2150
2174
|
"wcag": "4.1",
|
|
2151
2175
|
"weight": 3
|
|
2152
2176
|
},
|
|
2153
2177
|
"entityBad": {
|
|
2154
2178
|
"summary": "named character reference invalid",
|
|
2155
|
-
"why": "User may be unable to read all the
|
|
2179
|
+
"why": "User may be unable to read all the page text",
|
|
2156
2180
|
"wcag": "4.1",
|
|
2157
2181
|
"weight": 4
|
|
2158
2182
|
},
|
|
2159
2183
|
"textContentBad": {
|
|
2160
2184
|
"summary": "element text content invalid",
|
|
2161
|
-
"why": "User may be unable to read all the
|
|
2185
|
+
"why": "User may be unable to read all the page text",
|
|
2162
2186
|
"wcag": "4.1",
|
|
2163
2187
|
"weight": 3
|
|
2164
2188
|
},
|
|
2165
2189
|
"parseError": {
|
|
2166
2190
|
"summary": "code invalid",
|
|
2167
|
-
"why": "Invalid code in the
|
|
2191
|
+
"why": "Invalid code in the page may prevent a helper from working",
|
|
2168
2192
|
"wcag": "4.1",
|
|
2169
2193
|
"weight": 3
|
|
2170
2194
|
},
|
|
@@ -2190,7 +2214,7 @@ const issuesData = {
|
|
|
2190
2214
|
},
|
|
2191
2215
|
"captcha2": {
|
|
2192
2216
|
"summary": "captcha2",
|
|
2193
|
-
"why": "User is prevented from consuming the
|
|
2217
|
+
"why": "User is prevented from consuming the page",
|
|
2194
2218
|
"wcag": "1.1.1",
|
|
2195
2219
|
"weight": 1,
|
|
2196
2220
|
"max": 1
|
|
@@ -5508,32 +5532,32 @@ const rulesData = {
|
|
|
5508
5532
|
"what": "Element has a color attribute but no rel attribute with mask-icon as its value"
|
|
5509
5533
|
},
|
|
5510
5534
|
"A document must not include more than one meta element with its name attribute set to the value description.": {
|
|
5511
|
-
"issueID": "
|
|
5535
|
+
"issueID": "metaDuplicated",
|
|
5512
5536
|
"quality": 1,
|
|
5513
5537
|
"what": "Element with name=\"description\" is not the only meta element with that name"
|
|
5514
5538
|
},
|
|
5515
5539
|
"A document must not include both a meta element with an http-equiv attribute whose value is content-type, and a meta element with a charset attribute.": {
|
|
5516
|
-
"issueID": "
|
|
5540
|
+
"issueID": "metaDuplicated",
|
|
5517
5541
|
"quality": 1,
|
|
5518
5542
|
"what": "Element with http-equiv=\"content-type\" is incompatible with the meta element with a charset attribute"
|
|
5519
5543
|
},
|
|
5520
5544
|
"A document must not include more than one meta element with a http-equiv attribute whose value is content-type.": {
|
|
5521
|
-
"issueID": "
|
|
5545
|
+
"issueID": "metaDuplicated",
|
|
5522
5546
|
"quality": 1,
|
|
5523
5547
|
"what": "Page has more than 1 meta element with http-equiv=\"content-type\""
|
|
5524
5548
|
},
|
|
5525
5549
|
"A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.": {
|
|
5526
|
-
"issueID": "
|
|
5550
|
+
"issueID": "metaXUACompatible",
|
|
5527
5551
|
"quality": 1,
|
|
5528
5552
|
"what": "Element with http-equiv=\"X-UA-Compatible\" has no content=\"IE=edge\""
|
|
5529
5553
|
},
|
|
5530
5554
|
"A document must not include more than one meta element with a charset attribute.": {
|
|
5531
|
-
"issueID": "
|
|
5555
|
+
"issueID": "metaDuplicated",
|
|
5532
5556
|
"quality": 1,
|
|
5533
5557
|
"what": "More than 1 meta element has a charset attribute"
|
|
5534
5558
|
},
|
|
5535
5559
|
"A charset attribute on a meta element found after the first 1024 bytes.": {
|
|
5536
|
-
"issueID": "
|
|
5560
|
+
"issueID": "metaCharsetLate",
|
|
5537
5561
|
"quality": 1,
|
|
5538
5562
|
"what": "charset attribute on a meta element appears after 1024 bytes"
|
|
5539
5563
|
},
|
|
@@ -6360,17 +6384,17 @@ const rulesData = {
|
|
|
6360
6384
|
"what": "Element does not exist in HTML"
|
|
6361
6385
|
},
|
|
6362
6386
|
"Attribute .+ not allowed on element meta at this point.*": {
|
|
6363
|
-
"issueID": "
|
|
6387
|
+
"issueID": "metaAttributesWrong",
|
|
6364
6388
|
"quality": 1,
|
|
6365
6389
|
"what": "Attribute is not allowed on a meta element here"
|
|
6366
6390
|
},
|
|
6367
6391
|
"Element meta is missing one or more of the following attributes: .+": {
|
|
6368
|
-
"issueID": "
|
|
6392
|
+
"issueID": "metaAttributesWrong",
|
|
6369
6393
|
"quality": 1,
|
|
6370
6394
|
"what": "Element is missing a required attribute"
|
|
6371
6395
|
},
|
|
6372
6396
|
"Bad value .+ for attribute .+ on element meta.*": {
|
|
6373
|
-
"issueID": "
|
|
6397
|
+
"issueID": "metaAttributeBad",
|
|
6374
6398
|
"quality": 1,
|
|
6375
6399
|
"what": "Attribute of a meta element has an invalid value"
|
|
6376
6400
|
},
|
|
@@ -7054,32 +7078,32 @@ const rulesData = {
|
|
|
7054
7078
|
"what": "Element has a color attribute but no rel attribute with mask-icon as its value"
|
|
7055
7079
|
},
|
|
7056
7080
|
"A document must not include more than one meta element with its name attribute set to the value description.": {
|
|
7057
|
-
"issueID": "
|
|
7081
|
+
"issueID": "metaDuplicated",
|
|
7058
7082
|
"quality": 1,
|
|
7059
7083
|
"what": "Element with name=\"description\" is not the only meta element with that name"
|
|
7060
7084
|
},
|
|
7061
7085
|
"A document must not include both a meta element with an http-equiv attribute whose value is content-type, and a meta element with a charset attribute.": {
|
|
7062
|
-
"issueID": "
|
|
7086
|
+
"issueID": "metaDuplicated",
|
|
7063
7087
|
"quality": 1,
|
|
7064
7088
|
"what": "Element with http-equiv=\"content-type\" is incompatible with the meta element with a charset attribute"
|
|
7065
7089
|
},
|
|
7066
7090
|
"A document must not include more than one meta element with a http-equiv attribute whose value is content-type.": {
|
|
7067
|
-
"issueID": "
|
|
7091
|
+
"issueID": "metaDuplicated",
|
|
7068
7092
|
"quality": 1,
|
|
7069
7093
|
"what": "Page has more than 1 meta element with http-equiv=\"content-type\""
|
|
7070
7094
|
},
|
|
7071
7095
|
"A meta element with an http-equiv attribute whose value is X-UA-Compatible must have a content attribute with the value IE=edge.": {
|
|
7072
|
-
"issueID": "
|
|
7096
|
+
"issueID": "metaXUACompatible",
|
|
7073
7097
|
"quality": 1,
|
|
7074
7098
|
"what": "Element with http-equiv=\"X-UA-Compatible\" has no content=\"IE=edge\""
|
|
7075
7099
|
},
|
|
7076
7100
|
"A document must not include more than one meta element with a charset attribute.": {
|
|
7077
|
-
"issueID": "
|
|
7101
|
+
"issueID": "metaDuplicated",
|
|
7078
7102
|
"quality": 1,
|
|
7079
7103
|
"what": "More than 1 meta element has a charset attribute"
|
|
7080
7104
|
},
|
|
7081
7105
|
"A charset attribute on a meta element found after the first 1024 bytes.": {
|
|
7082
|
-
"issueID": "
|
|
7106
|
+
"issueID": "metaCharsetLate",
|
|
7083
7107
|
"quality": 1,
|
|
7084
7108
|
"what": "charset attribute on a meta element appears after 1024 bytes"
|
|
7085
7109
|
},
|
|
@@ -7906,17 +7930,17 @@ const rulesData = {
|
|
|
7906
7930
|
"what": "Element does not exist in HTML"
|
|
7907
7931
|
},
|
|
7908
7932
|
"Attribute .+ not allowed on element meta at this point.*": {
|
|
7909
|
-
"issueID": "
|
|
7933
|
+
"issueID": "metaAttributesWrong",
|
|
7910
7934
|
"quality": 1,
|
|
7911
7935
|
"what": "Attribute is not allowed on a meta element here"
|
|
7912
7936
|
},
|
|
7913
7937
|
"Element meta is missing one or more of the following attributes: .+": {
|
|
7914
|
-
"issueID": "
|
|
7938
|
+
"issueID": "metaAttributesWrong",
|
|
7915
7939
|
"quality": 1,
|
|
7916
7940
|
"what": "Element is missing a required attribute"
|
|
7917
7941
|
},
|
|
7918
7942
|
"Bad value .+ for attribute .+ on element meta.*": {
|
|
7919
|
-
"issueID": "
|
|
7943
|
+
"issueID": "metaAttributeBad",
|
|
7920
7944
|
"quality": 1,
|
|
7921
7945
|
"what": "Attribute of a meta element has an invalid value"
|
|
7922
7946
|
},
|
|
@@ -9724,10 +9748,51 @@ const getEditableData = () => ({
|
|
|
9724
9748
|
rules: structuredClone(rules),
|
|
9725
9749
|
issueRules: structuredClone(issueRules)
|
|
9726
9750
|
});
|
|
9751
|
+
const makeIssueStats = (issueRuleTable = issueRules) => {
|
|
9752
|
+
const stats = {};
|
|
9753
|
+
Object.entries(issueRuleTable).forEach(([issueID, engineData]) => {
|
|
9754
|
+
stats[issueID] = {};
|
|
9755
|
+
Object.entries(engineData).forEach(([engineID, { invariant, variable }]) => {
|
|
9756
|
+
stats[issueID][engineID] = invariant.length + variable.length;
|
|
9757
|
+
});
|
|
9758
|
+
});
|
|
9759
|
+
return stats;
|
|
9760
|
+
};
|
|
9761
|
+
const getSingleEngineIssues = (stats = issueStats) => Object.entries(stats).filter(([, engineCounts]) => Object.keys(engineCounts).filter((engineID) => engineID !== `nuVnu`).length === 1).map(([issueID, engineCounts]) => {
|
|
9762
|
+
const [engineID, ruleCount] = Object.entries(engineCounts)[0];
|
|
9763
|
+
return {
|
|
9764
|
+
issueID,
|
|
9765
|
+
engineID,
|
|
9766
|
+
ruleCount
|
|
9767
|
+
};
|
|
9768
|
+
}).sort((a, b) => b.ruleCount - a.ruleCount);
|
|
9769
|
+
const getEngineRuleCounts = (ruleTable = rules) => {
|
|
9770
|
+
const counts = {};
|
|
9771
|
+
Object.keys(ruleTable).forEach((engineID) => {
|
|
9772
|
+
counts[engineID] = Object.keys(ruleTable[engineID].invariant).length + Object.keys(ruleTable[engineID].variable).length;
|
|
9773
|
+
});
|
|
9774
|
+
return counts;
|
|
9775
|
+
};
|
|
9776
|
+
const checkIssuesData = (issueTable) => {
|
|
9777
|
+
const errors = [];
|
|
9778
|
+
const issueIDsBySummary = {};
|
|
9779
|
+
Object.entries(issueTable).forEach(([issueID, { summary }]) => {
|
|
9780
|
+
const ownerID = issueIDsBySummary[summary];
|
|
9781
|
+
if (ownerID) errors.push(`issues.${issueID} has the summary "${summary}", already used by issues.${ownerID}`);
|
|
9782
|
+
else issueIDsBySummary[summary] = issueID;
|
|
9783
|
+
});
|
|
9784
|
+
if (errors.length) throw new Error(`${errors[0]} (1 of ${errors.length} problems found)`);
|
|
9785
|
+
};
|
|
9727
9786
|
const issueRules = makeIssueRules(rules);
|
|
9787
|
+
const issueStats = makeIssueStats(issueRules);
|
|
9788
|
+
checkIssuesData(issues);
|
|
9728
9789
|
//#endregion
|
|
9729
9790
|
exports.getEditableData = getEditableData;
|
|
9791
|
+
exports.getEngineRuleCounts = getEngineRuleCounts;
|
|
9792
|
+
exports.getSingleEngineIssues = getSingleEngineIssues;
|
|
9730
9793
|
exports.issueRules = issueRules;
|
|
9794
|
+
exports.issueStats = issueStats;
|
|
9731
9795
|
exports.issues = issues;
|
|
9732
9796
|
exports.makeIssueRules = makeIssueRules;
|
|
9797
|
+
exports.makeIssueStats = makeIssueStats;
|
|
9733
9798
|
exports.rules = rules;
|