-
Notifications
You must be signed in to change notification settings - Fork 1.7k
/
Copy pathdropdown-keyboard-nav.ts
54 lines (45 loc) · 1.2 KB
/
dropdown-keyboard-nav.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import {Directive, ElementRef} from 'angular2/core';
import {Dropdown} from './dropdown';
@Directive({
selector: '[dropdown][keyboard-nav]',
host: {
'(keydown)': 'onKeydown($event)'
}
})
export class KeyboardNav {
constructor(private dd:Dropdown, private el:ElementRef) {
console.warn('keyboard-nav deprecated');
dd.keyboardNav = true;
}
onKeydown(event:KeyboardEvent) {
if (event.which !== 40 && event.which !== 38) {
return;
}
event.preventDefault();
event.stopPropagation();
let elems = this.dd.menuEl.nativeElement.getElementsByTagName('a');
switch (event.which) {
case (40):
if (typeof this.dd.selectedOption !== 'number') {
this.dd.selectedOption = 0;
break;
}
if (this.dd.selectedOption === elems.length - 1) {
break;
}
this.dd.selectedOption++;
break;
case (38):
if (typeof this.dd.selectedOption !== 'number') {
return;
}
if (this.dd.selectedOption === 0) {
// todo: return?
break;
}
this.dd.selectedOption--;
break;
}
elems[this.dd.selectedOption].nativeElement.focus();
}
}