Skip to content

Commit 7456ab5

Browse files
authored
fix(ui5-input): aria-required attribute removed (#2552)
Some of the input-based components have had both "required" and "aria-required" attributes rendered to the inner input when the required property of the component is set to true which is not necessary. Now, only "aria-required" attribute is rendered, since it is more appropriate in order to avoid "Invalid entry" to be read out when the component is accessed and has no value, which is the expected behaviour when "required" attribute is set, but is a little bit confusing for the users.
1 parent 766bcc0 commit 7456ab5

12 files changed

+22
-10
lines changed

packages/main/src/ComboBox.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
placeholder="{{placeholder}}"
1010
?disabled={{disabled}}
1111
?readonly={{readonly}}
12-
?required={{required}}
1312
value-state="{{valueState}}"
1413
@input="{{_input}}"
1514
@change="{{_inputChange}}"
@@ -23,6 +22,7 @@
2322
aria-autocomplete="both"
2423
aria-describedby="{{valueStateTextId}}"
2524
aria-label="{{ariaLabelText}}"
25+
aria-required="{{required}}"
2626
/>
2727

2828
{{#if icon}}

packages/main/src/DatePicker.hbs

+1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
type="{{type}}"
1313
value="{{value}}"
1414
?disabled="{{disabled}}"
15+
?required="{{required}}"
1516
?readonly="{{readonly}}"
1617
value-state="{{valueState}}"
1718
@ui5-change="{{_handleInputChange}}"

packages/main/src/DatePicker.js

-1
Original file line numberDiff line numberDiff line change
@@ -823,7 +823,6 @@ class DatePicker extends UI5Element {
823823
"ariaOwns": `${this._id}-responsive-popover`,
824824
"ariaExpanded": this.isOpen(),
825825
"ariaDescription": this.dateAriaDescription,
826-
"ariaRequired": this.required,
827826
"ariaLabel": getEffectiveAriaLabelText(this),
828827
};
829828
}

packages/main/src/Input.hbs

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313
?inner-input-with-icon="{{icon.length}}"
1414
?disabled="{{disabled}}"
1515
?readonly="{{_readonly}}"
16-
?required="{{required}}"
1716
.value="{{value}}"
1817
placeholder="{{placeholder}}"
1918
maxlength="{{maxlength}}"
@@ -25,7 +24,7 @@
2524
aria-autocomplete="{{accInfo.input.ariaAutoComplete}}"
2625
aria-expanded="{{accInfo.input.ariaExpanded}}"
2726
aria-label="{{accInfo.input.ariaLabel}}"
28-
aria-required="{{accInfo.input.ariaRequired}}"
27+
aria-required="{{required}}"
2928
@input="{{_handleInput}}"
3029
@change="{{_handleChange}}"
3130
@keydown="{{_onkeydown}}"

packages/main/src/Input.js

-1
Original file line numberDiff line numberDiff line change
@@ -1067,7 +1067,6 @@ class Input extends UI5Element {
10671067
"ariaExpanded": this._inputAccInfo && this._inputAccInfo.ariaExpanded,
10681068
"ariaDescription": this._inputAccInfo && this._inputAccInfo.ariaDescription,
10691069
"ariaLabel": (this._inputAccInfo && this._inputAccInfo.ariaLabel) || getEffectiveAriaLabelText(this),
1070-
"ariaRequired": (this._inputAccInfo && this._inputAccInfo.ariaRequired) || this.required,
10711070
},
10721071
};
10731072
}

packages/main/src/MultiComboBox.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,6 @@
3838
placeholder="{{placeholder}}"
3939
?disabled={{disabled}}
4040
?readonly={{readonly}}
41-
?required={{required}}
4241
value-state="{{valueState}}"
4342
@input="{{_inputLiveChange}}"
4443
@change={{_inputChange}}
@@ -53,6 +52,7 @@
5352
aria-autocomplete="both"
5453
aria-labelledby="{{_id}}-hiddenText-nMore"
5554
aria-describedby="{{valueStateTextId}}"
55+
aria-required="{{required}}"
5656
/>
5757

5858
{{#if icon}}

packages/main/src/MultiComboBoxPopover.hbs

-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
.value="{{value}}"
3131
inner-input
3232
placeholder="{{placeholder}}"
33-
?required={{required}}
3433
value-state="{{valueState}}"
3534
@input="{{_inputLiveChange}}"
3635
@change={{_inputChange}}

packages/main/src/TextArea.hbs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
placeholder="{{placeholder}}"
2222
?disabled="{{disabled}}"
2323
?readonly="{{readonly}}"
24-
?required="{{required}}"
2524
aria-label="{{ariaLabelText}}"
2625
aria-describedby="{{ariaDescribedBy}}"
26+
aria-required="{{required}}"
2727
maxlength="{{_exceededTextProps.calcedMaxLength}}"
2828
.value="{{value}}"
2929
@input="{{_oninput}}"

packages/main/test/pages/DatePicker_test_page.html

+1
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
<ui5-date-picker id="dp8" value="Jan 6, 2015"></ui5-date-picker>
3737
<ui5-date-picker id="dp9" value="today"></ui5-date-picker>
3838
<ui5-date-picker id="dp10" disabled></ui5-date-picker>
39+
<ui5-date-picker id='dp-required' required></ui5-date-picker>
3940
<ui5-date-picker id="dp11"></ui5-date-picker>
4041
<ui5-date-picker id="dp13"></ui5-date-picker>
4142
<ui5-date-picker id="dp16" format-pattern="long"></ui5-date-picker>

packages/main/test/specs/DatePicker.spec.js

+12
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,18 @@ describe("Date Picker Tests", () => {
8686
assert.ok(!datepicker.hasIcon(), "icon is not displayed");
8787
});
8888

89+
it("required", () => {
90+
datepicker.id = "#dp-required";
91+
92+
assert.ok(datepicker.input.getProperty("required"), "input has required set");
93+
assert.strictEqual(datepicker.innerInput.getAttribute("aria-required"), "true", "Aria-required attribute is set correctly.");
94+
95+
datepicker.root.removeAttribute("required");
96+
97+
assert.notOk(datepicker.input.getProperty("required"), "required property is not set");
98+
assert.strictEqual(datepicker.innerInput.getAttribute("aria-required"), "false", "Aria-required attribute is set correctly.");
99+
});
100+
89101
it("placeholder", () => {
90102
datepicker.root.setAttribute("placeholder", "test placeholder");
91103

packages/main/test/specs/Input.spec.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ describe("Attributes propagation", () => {
2323
});
2424

2525
it("Required attribute is propagated properly", () => {
26-
assert.ok(browser.$("#input-required").shadow$(".ui5-input-inner").getAttribute("required"), "Required property was propagated");
26+
assert.strictEqual(browser.$("#input-required").shadow$(".ui5-input-inner").getAttribute("aria-required"), "true", "Aria-required attribute is set correctly");
27+
assert.strictEqual(browser.$("#input-number").shadow$(".ui5-input-inner").getAttribute("aria-required"), "false", "Aria-required attribute is set correctly");
2728
});
2829

2930
it("Type attribute is propagated properly", () => {

packages/main/test/specs/TextArea.spec.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,8 @@ describe("Attributes propagation", () => {
2323
});
2424

2525
it("Required attribute is propagated properly", () => {
26-
assert.ok(browser.$("#required-textarea").shadow$("textarea").getAttribute("required"), "Required property was propagated");
26+
assert.strictEqual(browser.$("#required-textarea").shadow$("textarea").getAttribute("aria-required"), "true", "Aria-required attribute is set correctly");
27+
assert.strictEqual(browser.$("#basic-textarea").shadow$("textarea").getAttribute("aria-required"), "false", "Aria-required attribute is set correctly");
2728
});
2829

2930
it("Value attribute is propagated properly", () => {

0 commit comments

Comments
 (0)