@@ -41,25 +41,40 @@ function genHandler (
4141 ? handler . value
4242 : `function($event){${ handler . value } }`
4343 } else {
44- let code = 'function($event){'
44+ let code = ''
45+ const keys = [ ]
4546 for ( const key in handler . modifiers ) {
46- code += modifierCode [ key ] || genKeyFilter ( key )
47+ if ( modifierCode [ key ] ) {
48+ code += modifierCode [ key ]
49+ } else {
50+ keys . push ( key )
51+ }
52+ }
53+ if ( keys . length ) {
54+ code = genKeyFilter ( keys ) + code
4755 }
4856 const handlerCode = simplePathRE . test ( handler . value )
4957 ? handler . value + '($event)'
5058 : handler . value
51- return code + handlerCode + '}'
59+ return 'function($event){' + code + handlerCode + '}'
5260 }
5361}
5462
55- function genKeyFilter ( key : string ) : string {
56- const code =
57- parseInt ( key , 10 ) || // number keyCode
58- keyCodes [ key ] || // built-in alias
59- `_k(${ JSON . stringify ( key ) } )` // custom alias
63+ function genKeyFilter ( keys : Array < string > ) : string {
64+ const code = keys . length === 1
65+ ? normalizeKeyCode ( keys [ 0 ] )
66+ : Array . prototype . concat . apply ( [ ] , keys . map ( normalizeKeyCode ) )
6067 if ( Array . isArray ( code ) ) {
6168 return `if(${ code . map ( c => `$event.keyCode!==${ c } ` ) . join ( '&&' ) } )return;`
6269 } else {
6370 return `if($event.keyCode!==${ code } )return;`
6471 }
6572}
73+
74+ function normalizeKeyCode ( key ) {
75+ return (
76+ parseInt ( key , 10 ) || // number keyCode
77+ keyCodes [ key ] || // built-in alias
78+ `_k(${ JSON . stringify ( key ) } )` // custom alias
79+ )
80+ }
0 commit comments