Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit d18494b

Browse files
KingMarioyyx990803
authored andcommitted
Modifiers key modifier for directive on (vuejs#4033)
* Modifiers key modifier for directive on * meta modifier key modifier for directive on
1 parent a8d6330 commit d18494b

File tree

2 files changed

+370
-4
lines changed

2 files changed

+370
-4
lines changed

‎src/directives/public/on.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,12 @@ const keyCodes = {
1414
down: 40
1515
}
1616

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+
1723
function keyFilter (handler, keys) {
1824
var codes = keys.map(function (key) {
1925
var charCode = key.charCodeAt(0)
@@ -58,6 +64,17 @@ function selfFilter (handler) {
5864
}
5965
}
6066

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+
6178
export default {
6279

6380
priority: ON,
@@ -110,13 +127,15 @@ export default {
110127
if (this.modifiers.self) {
111128
handler = selfFilter(handler)
112129
}
130+
modifierKeys.forEach((key) => {
131+
if (this.modifiers[key]) {
132+
handler = modifierKeyHandlers[key](handler)
133+
}
134+
})
113135
// key filter
114136
var keys = Object.keys(this.modifiers)
115137
.filter(function (key) {
116-
return key !== 'stop' &&
117-
key !== 'prevent' &&
118-
key !== 'self' &&
119-
key !== 'capture'
138+
return namedKeys.indexOf(key) === -1
120139
})
121140
if (keys.length) {
122141
handler = keyFilter(handler, keys)

0 commit comments

Comments
 (0)