Skip to content

Commit 0e0063c

Browse files
authored
feat: separate form-field-multiple-label from label rule (#1226)
1 parent 70805be commit 0e0063c

File tree

8 files changed

+133
-8
lines changed

8 files changed

+133
-8
lines changed

doc/rule-descriptions.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
| duplicate-id | Ensures every id attribute value is unique | Minor | cat.parsing, wcag2a, wcag411 | true |
2929
| empty-heading | Ensures headings have discernible text | Minor | cat.name-role-value, best-practice | true |
3030
| focus-order-semantics | Ensures elements in the focus order have an appropriate role | Minor | cat.keyboard, best-practice, experimental | true |
31+
| form-field-multiple-labels | Ensures form field does not have multiple label elements | Moderate | cat.forms, wcag2a, wcag332 | true |
3132
| frame-tested | Ensures <iframe> and <frame> elements contain the axe-core script | Critical | cat.structure, review-item | true |
3233
| frame-title-unique | Ensures <iframe> and <frame> elements contain a unique title attribute | Serious | cat.text-alternatives, best-practice | true |
3334
| frame-title | Ensures <iframe> and <frame> elements contain a non-empty title attribute | Serious | cat.text-alternatives, wcag2a, wcag241, wcag412, section508, section508.22.i | true |
@@ -40,7 +41,7 @@
4041
| image-redundant-alt | Ensure button and link text is not repeated as image alternative | Minor | cat.text-alternatives, best-practice | true |
4142
| input-image-alt | Ensures <input type="image"> elements have alternate text | Critical | cat.text-alternatives, wcag2a, wcag111, section508, section508.22.a | true |
4243
| label-title-only | Ensures that every form element is not solely labeled using the title or aria-describedby attributes | Serious | cat.forms, best-practice | true |
43-
| label | Ensures every form element has a label | Minor, Serious, Critical | cat.forms, wcag2a, wcag332, wcag131, section508, section508.22.n | true |
44+
| label | Ensures every form element has a label | Minor, Critical | cat.forms, wcag2a, wcag332, wcag131, section508, section508.22.n | true |
4445
| landmark-banner-is-top-level | Ensures the banner landmark is at top level | Moderate | cat.semantics, best-practice | true |
4546
| landmark-contentinfo-is-top-level | Ensures the contentinfo landmark is at top level | Moderate | cat.semantics, best-practice | true |
4647
| landmark-main-is-top-level | Ensures the main landmark is at top level | Moderate | cat.semantics, best-practice | true |

lib/checks/label/multiple-label.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
"id": "multiple-label",
33
"evaluate": "multiple-label.js",
44
"metadata": {
5-
"impact": "serious",
5+
"impact": "moderate",
66
"messages": {
7-
"pass": "Form element does not have multiple <label> elements",
8-
"fail": "Form element has multiple <label> elements"
7+
"pass": "Form field does not have multiple label elements",
8+
"fail": "Multiple label elements is not widely supported in assistive technologies"
99
}
1010
}
1111
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
{
2+
"id": "form-field-multiple-labels",
3+
"selector": "input, select, textarea",
4+
"matches": "label-matches.js",
5+
"tags": [
6+
"cat.forms",
7+
"wcag2a",
8+
"wcag332"
9+
],
10+
"metadata": {
11+
"description": "Ensures form field does not have multiple label elements",
12+
"help": "Form field must not have multiple label elements"
13+
},
14+
"all": [],
15+
"any": [],
16+
"none": [
17+
"multiple-label"
18+
]
19+
}

lib/rules/label.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
],
2525
"none": [
2626
"help-same-as-label",
27-
"multiple-label",
2827
"hidden-explicit-label"
2928
]
3029
}

test/integration/rules/label/label.html

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@
3737
<textarea id="pass15" title="Label"></textarea>
3838

3939
<label><label><input type="text" id="fail22"></label></label>
40-
<label for="fail23">Hi</label><label for="fail23">Foo</label><input type="text" id="fail23">
4140

4241
<div>
4342
<label>
@@ -68,4 +67,4 @@
6867
</div>
6968

7069
</div>
71-
</form>
70+
</form>

test/integration/rules/label/label.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@
1414
["#fail10"],
1515
["#fail11"],
1616
["#fail22"],
17-
["#fail23"],
1817
["#fail24"],
1918
["#fail25"],
2019
["#fail26"]
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
<!-- Fail -->
2+
<label for="fail1">Hi</label>
3+
<label for="fail1">Foo</label>
4+
<input type="text" id="fail1">
5+
6+
<label for="fail2">label one</label>
7+
<label for="fail2">label two</label>
8+
<input type="checkbox" id="fail2">
9+
10+
<label for="fail3" id="l1">label one</label>
11+
<label for="fail3">label two</label>
12+
<input type="checkbox" id="fail3" aria-labelledby="l1">
13+
14+
<label for="fail4">First Name:</label>
15+
<label>First Name:
16+
<input type="text" id="fail4">
17+
</label>
18+
19+
<label for="fail5">Choose an option:</label>
20+
<label>
21+
Choose an option:
22+
<select id="fail5">
23+
<option selected="selected">Chosen</option>
24+
<option>Not Selected</option>
25+
</select>
26+
</label>
27+
28+
<label for="fail6">Enter your comments:</label>
29+
<label>
30+
Enter your comments:
31+
<textarea id="fail6"></textarea>
32+
</label>
33+
34+
<label>
35+
Enter your comments:
36+
<label>
37+
Enter your comments:
38+
<textarea id="fail7"></textarea>
39+
</label>
40+
</label>
41+
42+
<label>
43+
Enter your comments:
44+
<label>
45+
Enter your comments:
46+
<label>
47+
Enter your comments:
48+
<textarea id="fail8"></textarea>
49+
</label>
50+
</label>
51+
</label>
52+
53+
<label for="fail9">Enter your comments:</label>
54+
<label>
55+
Enter your comments:
56+
<label>
57+
Enter your comments:
58+
<label>
59+
Enter your comments:
60+
<textarea id="fail9"></textarea>
61+
</label>
62+
</label>
63+
</label>
64+
65+
<!-- Pass -->
66+
<label for="pass1">Label</label>
67+
<input type="text" id="pass1">
68+
69+
<textarea id="pass2" title="Label"></textarea>
70+
71+
<label>First Name:
72+
<input type="text" id="pass3">
73+
</label>
74+
75+
<label>
76+
Choose an option:
77+
<select id="pass4">
78+
<option selected="selected">Chosen</option>
79+
<option>Not Selected</option>
80+
</select>
81+
</label>
82+
83+
<label>
84+
Enter your comments:
85+
<textarea id="pass5"></textarea>
86+
</label>
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"description": "form-field-multiple-labels label test",
3+
"rule": "form-field-multiple-labels",
4+
"violations": [
5+
["#fail1"],
6+
["#fail2"],
7+
["#fail3"],
8+
["#fail4"],
9+
["#fail5"],
10+
["#fail6"],
11+
["#fail7"],
12+
["#fail8"],
13+
["#fail9"]
14+
],
15+
"passes": [
16+
["#pass1"],
17+
["#pass2"],
18+
["#pass3"],
19+
["#pass4"],
20+
["#pass5"]
21+
]
22+
}

0 commit comments

Comments
 (0)