Skip to content

Commit 4ea4baa

Browse files
mmalerbakara
authored andcommitted
fix(datepicker): remove aria-expanded on datepicker input ... (#5746)
1 parent 69c9dac commit 4ea4baa

File tree

2 files changed

+34
-2
lines changed

2 files changed

+34
-2
lines changed

src/lib/datepicker/datepicker-input.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,8 @@ export const MD_DATEPICKER_VALIDATORS: any = {
5757
selector: 'input[mdDatepicker], input[matDatepicker]',
5858
providers: [MD_DATEPICKER_VALUE_ACCESSOR, MD_DATEPICKER_VALIDATORS],
5959
host: {
60-
'[attr.aria-expanded]': '_datepicker?.opened || "false"',
6160
'[attr.aria-haspopup]': 'true',
62-
'[attr.aria-owns]': '_datepicker?.id',
61+
'[attr.aria-owns]': '(_datepicker?.opened && _datepicker.id) || null',
6362
'[attr.min]': 'min ? _dateAdapter.getISODateString(min) : null',
6463
'[attr.max]': 'max ? _dateAdapter.getISODateString(max) : null',
6564
'[disabled]': 'disabled',

src/lib/datepicker/datepicker.spec.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,39 @@ describe('MdDatepicker', () => {
189189
expect(attachToRef.nativeElement.tagName.toLowerCase())
190190
.toBe('input', 'popup should be attached to native input');
191191
});
192+
193+
it('input should aria-owns calendar after opened in non-touch mode', () => {
194+
let inputEl = fixture.debugElement.query(By.css('input')).nativeElement;
195+
expect(inputEl.getAttribute('aria-owns')).toBeNull();
196+
197+
testComponent.datepicker.open();
198+
fixture.detectChanges();
199+
200+
let ownedElementId = inputEl.getAttribute('aria-owns');
201+
expect(ownedElementId).not.toBeNull();
202+
203+
let ownedElement = document.getElementById(ownedElementId);
204+
expect(ownedElement).not.toBeNull();
205+
expect((ownedElement as Element).tagName.toLowerCase()).toBe('md-calendar');
206+
});
207+
208+
it('input should aria-owns calendar after opened in touch mode', () => {
209+
testComponent.touch = true;
210+
fixture.detectChanges();
211+
212+
let inputEl = fixture.debugElement.query(By.css('input')).nativeElement;
213+
expect(inputEl.getAttribute('aria-owns')).toBeNull();
214+
215+
testComponent.datepicker.open();
216+
fixture.detectChanges();
217+
218+
let ownedElementId = inputEl.getAttribute('aria-owns');
219+
expect(ownedElementId).not.toBeNull();
220+
221+
let ownedElement = document.getElementById(ownedElementId);
222+
expect(ownedElement).not.toBeNull();
223+
expect((ownedElement as Element).tagName.toLowerCase()).toBe('md-calendar');
224+
});
192225
});
193226

194227
describe('datepicker with too many inputs', () => {

0 commit comments

Comments
 (0)