From c90dee2d73bdaaec52ef38b5b06edd4a594e5fcf Mon Sep 17 00:00:00 2001 From: mmalerba Date: Fri, 10 Mar 2017 13:05:02 -0800 Subject: [PATCH] feat(datepicker): add aria-* attrs and keyboard bindings to datepicker input (#3542) * add aria-* attrs and keyboard bindings to datepicker input * fix rebase errors * added comment --- src/lib/datepicker/datepicker-input.ts | 14 +++++++++++++- src/lib/datepicker/datepicker.html | 1 + src/lib/datepicker/datepicker.ts | 16 ++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/lib/datepicker/datepicker-input.ts b/src/lib/datepicker/datepicker-input.ts index 12ab3b830c3b..f24dddf04c3d 100644 --- a/src/lib/datepicker/datepicker-input.ts +++ b/src/lib/datepicker/datepicker-input.ts @@ -14,6 +14,7 @@ import {SimpleDate} from '../core/datetime/simple-date'; import {CalendarLocale} from '../core/datetime/calendar-locale'; import {Subscription} from 'rxjs'; import {MdInputContainer} from '../input/input-container'; +import {DOWN_ARROW} from '../core/keyboard/keycodes'; export const MD_DATEPICKER_VALUE_ACCESSOR: any = { @@ -28,8 +29,12 @@ export const MD_DATEPICKER_VALUE_ACCESSOR: any = { selector: 'input[mdDatepicker], input[matDatepicker]', providers: [MD_DATEPICKER_VALUE_ACCESSOR], host: { + '[attr.aria-expanded]': '_datepicker?.opened || "false"', + '[attr.aria-haspopup]': 'true', + '[attr.aria-owns]': '_datepicker?.id', '(input)': '_onChange($event.target.value)', '(blur)': '_onTouched()', + '(keydown)': '_onKeydown($event)', } }) export class MdDatepickerInput implements AfterContentInit, ControlValueAccessor, OnDestroy { @@ -40,7 +45,7 @@ export class MdDatepickerInput implements AfterContentInit, ControlValueAccessor this._datepicker._registerInput(this); } } - private _datepicker: MdDatepicker; + _datepicker: MdDatepicker; @Input() get value(): SimpleDate { @@ -107,4 +112,11 @@ export class MdDatepickerInput implements AfterContentInit, ControlValueAccessor setDisabledState(disabled: boolean): void { this._renderer.setElementProperty(this._elementRef.nativeElement, 'disabled', disabled); } + + _onKeydown(event: KeyboardEvent) { + if (event.altKey && event.keyCode === DOWN_ARROW) { + this._datepicker.open(); + event.preventDefault(); + } + } } diff --git a/src/lib/datepicker/datepicker.html b/src/lib/datepicker/datepicker.html index c7cf5a083d31..bf20f86edd3d 100644 --- a/src/lib/datepicker/datepicker.html +++ b/src/lib/datepicker/datepicker.html @@ -1,5 +1,6 @@