Skip to content

Commit e8d6bd9

Browse files
committed
allow modifier key modifiers on keyboard events and warn overwriting in config.keyCodes
1 parent 80bf5d6 commit e8d6bd9

File tree

4 files changed

+19
-13
lines changed

4 files changed

+19
-13
lines changed

flow/component.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ declare interface Component {
105105
// apply v-bind object
106106
_b: (data: any, value: any, asProp?: boolean) => VNodeData;
107107
// check custom keyCode
108-
_k: (eventKeyCode: number, key: string, buildinAlias: number | Array<number> | void) => boolean;
108+
_k: (eventKeyCode: number, key: string, builtInAlias: number | Array<number> | void) => boolean;
109109

110110
// allow dynamic method registration
111111
[key: string]: any

src/compiler/codegen/events.js

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,7 @@ const keyCodes = {
1919
const modifierCode = {
2020
stop: '$event.stopPropagation();',
2121
prevent: '$event.preventDefault();',
22-
self: 'if($event.target !== $event.currentTarget)return;'
23-
}
24-
25-
const isMouseEventRE = /^mouse|^pointer|^(click|dblclick|contextmenu|wheel)$/
26-
const mouseEventModifierCode = {
22+
self: 'if($event.target !== $event.currentTarget)return;',
2723
ctrl: 'if(!$event.ctrlKey)return;',
2824
shift: 'if(!$event.shiftKey)return;',
2925
alt: 'if(!$event.altKey)return;',
@@ -53,12 +49,9 @@ function genHandler (
5349
} else {
5450
let code = ''
5551
const keys = []
56-
const isMouseEvnet = isMouseEventRE.test(name)
5752
for (const key in handler.modifiers) {
5853
if (modifierCode[key]) {
5954
code += modifierCode[key]
60-
} else if (isMouseEvnet && mouseEventModifierCode[key]) {
61-
code += mouseEventModifierCode[key]
6255
} else {
6356
keys.push(key)
6457
}
@@ -74,8 +67,7 @@ function genHandler (
7467
}
7568

7669
function genKeyFilter (keys: Array<string>): string {
77-
const code = keys.map(genFilterCode)
78-
return `if(${code.join('&&')})return;`
70+
return `if(${keys.map(genFilterCode).join('&&')})return;`
7971
}
8072

8173
function genFilterCode (key: number | string): string {

src/core/instance/proxy.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/* not type checking this file because flow doesn't play well with Proxy */
22

3+
import config from 'core/config'
34
import { warn, makeMap } from '../util/index'
45

56
let initProxy
@@ -25,6 +26,19 @@ if (process.env.NODE_ENV !== 'production') {
2526
typeof Proxy !== 'undefined' &&
2627
Proxy.toString().match(/native code/)
2728

29+
if (hasProxy) {
30+
const isBuiltInModifier = makeMap('stop,prevent,self,ctrl,shift,alt,meta')
31+
config.keyCodes = new Proxy(config.keyCodes, {
32+
set (target, key, value) {
33+
if (isBuiltInModifier(key)) {
34+
warn(`Avoid overwriting built-in modifier in config.keyCodes: .${key}`)
35+
} else {
36+
target[key] = value
37+
}
38+
}
39+
})
40+
}
41+
2842
const hasHandler = {
2943
has (target, key) {
3044
const has = key in target

src/core/instance/render.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,9 @@ export function renderMixin (Vue: Class<Component>) {
242242
Vue.prototype._k = function checkKeyCodes (
243243
eventKeyCode: number,
244244
key: string,
245-
buildinAlias: number | Array<number> | void
245+
builtInAlias: number | Array<number> | void
246246
): boolean {
247-
const keyCodes = config.keyCodes[key] || buildinAlias
247+
const keyCodes = config.keyCodes[key] || builtInAlias
248248
if (Array.isArray(keyCodes)) {
249249
return keyCodes.indexOf(eventKeyCode) === -1
250250
} else {

0 commit comments

Comments
 (0)