1
1
var _ = require ( '../../util' )
2
2
3
- // modifiers
4
- var stopRE = / \. s t o p \b /
5
- var preventRE = / \. p r e v e n t \b /
6
-
7
3
// keyCode aliases
8
4
var keyCodes = {
9
5
esc : 27 ,
@@ -17,27 +13,30 @@ var keyCodes = {
17
13
down : 40
18
14
}
19
15
20
- function keyFilter ( handler , key ) {
21
- var code = keyCodes [ key ]
22
- if ( ! code ) {
23
- code = parseInt ( key , 10 )
24
- }
25
- return function ( e ) {
26
- if ( e . keyCode === code ) {
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 ) {
27
26
return handler . call ( this , e )
28
27
}
29
28
}
30
29
}
31
30
32
31
function stopFilter ( handler ) {
33
- return function ( e ) {
32
+ return function stopHandler ( e ) {
34
33
e . stopPropagation ( )
35
34
return handler . call ( this , e )
36
35
}
37
36
}
38
37
39
38
function preventFilter ( handler ) {
40
- return function ( e ) {
39
+ return function preventHandler ( e ) {
41
40
e . preventDefault ( )
42
41
return handler . call ( this , e )
43
42
}
@@ -49,38 +48,14 @@ module.exports = {
49
48
priority : 700 ,
50
49
51
50
bind : function ( ) {
52
- // 1.0.0 key filter
53
- var event = this . arg
54
-
55
- // stop modifier
56
- if ( stopRE . test ( event ) ) {
57
- this . stop = true
58
- event = event . replace ( stopRE , '' )
59
- }
60
-
61
- // prevent modifier
62
- if ( preventRE . test ( event ) ) {
63
- this . prevent = true
64
- event = event . replace ( preventRE , '' )
65
- }
66
-
67
- // key modifier
68
- var keyIndex = event . indexOf ( '.' )
69
- if ( keyIndex > - 1 ) {
70
- this . event = event . slice ( 0 , keyIndex )
71
- this . key = event . slice ( keyIndex + 1 )
72
- } else {
73
- this . event = event
74
- }
75
-
76
51
// deal with iframes
77
52
if (
<
8000
/td>78
53
this . el . tagName === 'IFRAME' &&
79
- this . event !== 'load'
54
+ this . arg !== 'load'
80
55
) {
81
56
var self = this
82
57
this . iframeBind = function ( ) {
83
- _ . on ( self . el . contentWindow , self . event , self . handler )
58
+ _ . on ( self . el . contentWindow , self . arg , self . handler )
84
59
}
85
60
this . on ( 'load' , this . iframeBind )
86
61
}
@@ -89,22 +64,27 @@ module.exports = {
89
64
update : function ( handler ) {
90
65
if ( typeof handler !== 'function' ) {
91
66
process . env . NODE_ENV !== 'production' && _ . warn (
92
- 'v-on:' + this . event + '="' +
67
+ 'v-on:' + this . arg + '="' +
93
68
this . expression + '" expects a function value, ' +
94
69
'got ' + handler
95
70
)
96
71
return
97
72
}
98
73
99
74
// apply modifiers
100
- if ( this . stop ) {
75
+ if ( this . modifiers . stop ) {
101
76
handler = stopFilter ( handler )
102
77
}
103
- if ( this . prevent ) {
78
+ if ( this . modifiers . prevent ) {
104
79
handler = preventFilter ( handler )
105
80
}
106
- if ( this . key ) {
107
- handler = keyFilter ( handler , this . key )
81
+ // key filter
82
+ var keys = Object . keys ( this . modifiers )
83
+ . filter ( function ( key ) {
84
+ return key !== 'stop' && key !== 'prevent'
85
+ } )
86
+ if ( keys . length ) {
87
+ handler = keyFilter ( handler , keys )
108
88
}
109
89
110
90
this . reset ( )
@@ -118,7 +98,7 @@ module.exports = {
118
98
if ( this . iframeBind ) {
119
99
this . iframeBind ( )
120
100
} else {
121
- _ . on ( this . el , this . event , this . handler )
101
+ _ . on ( this . el , this . arg , this . handler )
122
102
}
123
103
} ,
124
104
@@ -127,7 +107,7 @@ module.exports = {
127
107
? this . el . contentWindow
128
108
: this . el
129
109
if ( this . handler ) {
130
- _ . off ( el , this . event , this . handler )
110
+ _ . off ( el , this . arg , this . handler )
131
111
}
132
112
} ,
133
113
0 commit comments