@@ -22,31 +22,36 @@ export default class KeyHandler {
22
22
private closeNode : CloseNode ;
23
23
private getSelectedNode : GetSelectedNode ;
24
24
25
- private handleKeyDown = ( e : KeyboardEvent ) : boolean => {
25
+ private handleKeyDown = ( e : KeyboardEvent ) : void => {
26
26
if ( ! this . canHandleKeyboard ( ) ) {
27
- return true ;
27
+ return ;
28
28
}
29
29
30
+ let isKeyHandled = false ;
31
+
30
32
const selectedNode = this . getSelectedNode ( ) ;
31
- if ( ! selectedNode ) {
32
- return true ;
33
+ if ( selectedNode ) {
34
+ switch ( e . key ) {
35
+ case "ArrowDown" :
36
+ isKeyHandled = this . moveDown ( selectedNode ) ;
37
+ break ;
38
+
39
+ case "ArrowUp" :
40
+ isKeyHandled = this . moveUp ( selectedNode ) ;
41
+ break ;
42
+
43
+ case "ArrowRight" :
44
+ isKeyHandled = this . moveRight ( selectedNode ) ;
45
+ break ;
46
+
47
+ case "ArrowLeft" :
48
+ isKeyHandled = this . moveLeft ( selectedNode ) ;
49
+ break ;
50
+ }
33
51
}
34
52
35
- switch ( e . key ) {
36
- case "ArrowDown" :
37
- return this . moveDown ( selectedNode ) ;
38
-
39
- case "ArrowUp" :
40
- return this . moveUp ( selectedNode ) ;
41
-
42
- case "ArrowRight" :
43
- return this . moveRight ( selectedNode ) ;
44
-
45
- case "ArrowLeft" :
46
- return this . moveLeft ( selectedNode ) ;
47
-
48
- default :
49
- return true ;
53
+ if ( isKeyHandled ) {
54
+ e . preventDefault ( ) ;
50
55
}
51
56
} ;
52
57
@@ -72,40 +77,28 @@ export default class KeyHandler {
72
77
this . originalSelectNode = selectNode ;
73
78
74
79
if ( keyboardSupport ) {
75
- this . handleKeyDownHandler = this . handleKeyDown . bind ( this ) ;
76
-
77
- document . addEventListener ( "keydown" , this . handleKeyDownHandler ) ;
80
+ document . addEventListener ( "keydown" , this . handleKeyDown ) ;
78
81
}
79
82
}
80
83
81
84
private canHandleKeyboard ( ) : boolean {
82
85
return this . keyboardSupport && this . isFocusOnTree ( ) ;
83
86
}
84
87
85
- public deinit ( ) : void {
86
- if ( this . handleKeyDownHandler ) {
87
- document . removeEventListener ( "keydown" , this . handleKeyDownHandler ) ;
88
- }
89
- }
90
-
91
- public moveDown ( selectedNode : Node ) : boolean {
92
- return this . selectNode ( selectedNode . getNextVisibleNode ( ) ) ;
93
- }
94
-
95
- public moveLeft ( selectedNode : Node ) : boolean {
88
+ private moveLeft ( selectedNode : Node ) : boolean {
96
89
if ( selectedNode . isFolder ( ) && selectedNode . is_open ) {
97
90
// Left on an open node closes the node
98
91
this . closeNode ( selectedNode ) ;
99
- return false ;
92
+ return true ;
100
93
} else {
101
94
// Left on a closed or end node moves focus to the node's parent
102
95
return this . selectNode ( selectedNode . getParent ( ) ) ;
103
96
}
104
97
}
105
98
106
- public moveRight ( selectedNode : Node ) : boolean {
99
+ private moveRight ( selectedNode : Node ) : boolean {
107
100
if ( ! selectedNode . isFolder ( ) ) {
108
- return true ;
101
+ return false ;
109
102
} else {
110
103
// folder node
111
104
if ( selectedNode . is_open ) {
@@ -114,22 +107,36 @@ export default class KeyHandler {
114
107
} else {
115
108
// Right expands a closed node
116
109
this . openNode ( selectedNode ) ;
117
- return false ;
110
+ return true ;
118
111
}
119
112
}
120
113
}
121
114
122
- public moveUp ( selectedNode : Node ) : boolean {
123
- return this . selectNode ( selectedNode . getPreviousVisibleNode ( ) ) ;
124
- }
125
-
126
- public selectNode ( node : Node | null ) : boolean {
115
+ /* Select the node.
116
+ * Don't do anything if the node is null.
117
+ * Result: a different node was selected.
118
+ */
119
+ private selectNode ( node : Node | null ) : boolean {
127
120
if ( ! node ) {
128
- return true ;
121
+ return false ;
129
122
} else {
130
123
this . originalSelectNode ( node ) ;
131
124
132
- return false ;
125
+ return true ;
133
126
}
134
127
}
128
+
129
+ public deinit ( ) : void {
130
+ if ( this . handleKeyDownHandler ) {
131
+ document . removeEventListener ( "keydown" , this . handleKeyDownHandler ) ;
132
+ }
133
+ }
134
+
135
+ public moveDown ( selectedNode : Node ) : boolean {
136
+ return this . selectNode ( selectedNode . getNextVisibleNode ( ) ) ;
137
+ }
138
+
139
+ public moveUp ( selectedNode : Node ) : boolean {
140
+ return this . selectNode ( selectedNode . getPreviousVisibleNode ( ) ) ;
141
+ }
135
142
}
0 commit comments