1
1
var _ = require ( '../util' )
2
- var keyFilter = require ( '../filters' ) . key
3
2
4
- // modifiers
5
- var stopRE = / \. s t o p \b /
6
- var preventRE = / \. p r e v e n t \b /
3
+ // keyCode aliases
4
+ var keyCodes = {
5
+ esc : 27 ,
6
+ tab : 9 ,
7
+ enter : 13 ,
8
+ space : 32 ,
9
+ 'delete' : 46 ,
10
+ up : 38 ,
11
+ left : 37 ,
12
+ right : 39 ,
13
+ down : 40
14
+ }
15
+
16
+ function keyFilter ( handler , keys ) {
17
+ var codes = keys . map ( function ( key ) {
18
+ var code = keyCodes [ key ]
19
+ if ( ! code ) {
20
+ code = parseInt ( key , 10 )
21
+ }
22
+ return code
23
+ } )
24
+ return function keyHandler ( e ) {
25
+ if ( codes . indexOf ( e . keyCode ) > - 1 ) {
26
+ return handler . call ( this , e )
27
+ }
28
+ }
29
+ }
7
30
8
31
function stopFilter ( handler ) {
9
- return function ( e ) {
32
+ return function stopHandler ( e ) {
10
33
e . stopPropagation ( )
11
34
return handler . call ( this , e )
12
35
}
13
36
}
14
37
15
38
function preventFilter ( handler ) {
16
- return function ( e ) {
39
+ return function preventHandler ( e ) {
17
40
e . preventDefault ( )
18
41
return handler . call ( this , e )
19
42
}
@@ -37,29 +60,6 @@ module.exports = {
37
60
}
38
61
}
39
62
40
- var event = this . arg
41
-
42
- // stop modifier
43
- if ( stopRE . test ( event ) ) {
44
- this . stop = true
45
- event = event . replace ( stopRE , '' )
46
- }
47
-
48
- // prevent modifier
49
- if ( preventRE . test ( event ) ) {
50
- this . prevent = true
51
- event = event . replace ( preventRE , '' )
52
- }
53
-
54
- // key modifier
55
- var keyIndex = event . indexOf ( '.' )
56
- if ( keyIndex > - 1 ) {
57
- this . arg = event . slice ( 0 , keyIndex )
58
- this . key = event . slice ( keyIndex + 1 )
59
- } else {
60
- this . arg = event
61
- }
62
-
63
63
// deal with iframes
64
64
if (
65
65
this . el . tagName === 'IFRAME' &&
@@ -76,22 +76,27 @@ module.exports = {
76
76
update : function ( handler ) {
77
77
if ( typeof handler !== 'function' ) {
78
78
process . env . NODE_ENV !== 'production' && _ . warn (
79
- 'Directive v-on=" ' + this . arg + ': ' +
79
+ 'v-on: ' + this . arg + '=" ' +
80
80
this . expression + '" expects a function value, ' +
81
81
'got ' + handler
82
82
)
83
83
return
84
84
}
85
85
86
86
// apply modifiers
87
- if ( this . stop ) {
87
+ if ( this . modifiers . stop ) {
88
88
handler = stopFilter ( handler )
89
89
}
90
- if ( this . prevent ) {
90
+ if ( this . modifiers . prevent ) {
91
91
handler = preventFilter ( handler )
92
92
}
93
- if ( this . key ) {
94
- handler = keyFilter ( handler , this . key )
93
+ // key filter
94
+ var keys = Object . keys ( this . modifiers )
95
+ . filter ( function ( key ) {
96
+ return key !== 'stop' && key !== 'prevent'
97
+ } )
98
+ if ( keys . length ) {
99
+ handler = keyFilter ( handler , keys )
95
100
}
96
101
97
102
this . reset ( )
0 commit comments