@@ -14,6 +14,12 @@ const keyCodes = {
14
14
down : 40
15
15
}
16
16
17
+ const eventKeys = [ 'stop' , 'prevent' , 'self' , 'capture' ]
18
+ const modifierKeys = [ 'ctrl' , 'shift' , 'alt' , 'meta' ]
19
+ const namedKeys = eventKeys . concat ( modifierKeys ) . sort ( )
20
+
21
+ var modifierKeyHandlers = { }
22
+
17
23
function keyFilter ( handler , keys ) {
18
24
var codes = keys . map ( function ( key ) {
19
25
var charCode = key . charCodeAt ( 0 )
@@ -58,6 +64,17 @@ function selfFilter (handler) {
58
64
}
59
65
}
60
66
67
+ modifierKeys . forEach ( ( key ) => {
68
+ var keyName = key + 'Key'
69
+ modifierKeyHandlers [ key ] = function ( handler ) {
70
+ return function ( e ) {
71
+ if ( e [ keyName ] ) {
72
+ return handler . call ( this , e )
73
+ }
74
+ }
75
+ }
76
+ } )
77
+
61
78
export default {
62
79
63
80
priority : ON ,
@@ -110,13 +127,15 @@ export default {
110
127
if ( this . modifiers . self ) {
111
128
handler = selfFilter ( handler )
112
129
}
130
+ modifierKeys . forEach ( ( key ) => {
131
+ if ( this . modifiers [ key ] ) {
132
+ handler = modifierKeyHandlers [ key ] ( handler )
133
+ }
134
+ } )
113
135
// key filter
114
136
var keys = Object . keys ( this . modifiers )
115
137
. filter ( function ( key ) {
116
- return key !== 'stop' &&
117
- key !== 'prevent' &&
118
- key !== 'self' &&
119
- key !== 'capture'
138
+ return namedKeys . indexOf ( key ) === - 1
120
139
} )
121
140
if ( keys . length ) {
122
141
handler = keyFilter ( handler , keys )
0 commit comments