Skip to content

Commit 0e2dafa

Browse files
Kingwlyyx990803
authored andcommitted
support mouse event modifier (#4866)
1 parent f7062b9 commit 0e2dafa

File tree

2 files changed

+47
-1
lines changed

2 files changed

+47
-1
lines changed

src/compiler/codegen/events.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,10 @@ const modifierCode: { [key: string]: string } = {
2626
ctrl: 'if(!$event.ctrlKey)return null;',
2727
shift: 'if(!$event.shiftKey)return null;',
2828
alt: 'if(!$event.altKey)return null;',
29-
meta: 'if(!$event.metaKey)return null;'
29+
meta: 'if(!$event.metaKey)return null;',
30+
left: 'if($event.button !== 0)return null;',
31+
middle: 'if($event.button !== 1)return null;',
32+
right: 'if($event.button !== 2)return null;'
3033
}
3134

3235
export function genHandlers (events: ASTElementHandlers, native?: boolean): string {

test/unit/features/directives/on.spec.js

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,49 @@ describe('Directive v-on', () => {
212212
expect(spy).toHaveBeenCalled()
213213
})
214214

215+
it('should support mouse modifier', () => {
216+
const left = 0
217+
const middle = 1
218+
const right = 2
219+
const spyLeft = jasmine.createSpy()
220+
const spyMiddle = jasmine.createSpy()
221+
const spyRight = jasmine.createSpy()
222+
223+
vm = new Vue({
224+
el,
225+
template: `
226+
<div>
227+
<div ref="left" @mousedown.left="foo">left</div>
228+
<div ref="right" @mousedown.right="foo1">right</div>
229+
<div ref="middle" @mousedown.middle="foo2">right</div>
230+
</div>
231+
`,
232+
methods: {
233+
foo: spyLeft,
234+
foo1: spyRight,
235+
foo2: spyMiddle
236+
}
237+
})
238+
239+
triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = right })
240+
triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = middle })
241+
expect(spyLeft).not.toHaveBeenCalled()
242+
triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = left })
243+
expect(spyLeft).toHaveBeenCalled()
244+
245+
triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = left })
246+
triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = middle })
247+
expect(spyRight).not.toHaveBeenCalled()
248+
triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = right })
249+
expect(spyRight).toHaveBeenCalled()
250+
251+
triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = left })
252+
triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = right })
253+
expect(spyMiddle).not.toHaveBeenCalled()
254+
triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = middle })
255+
expect(spyMiddle).toHaveBeenCalled()
256+
})
257+
215258
it('should support custom keyCode', () => {
216259
Vue.config.keyCodes.test = 1
217260
vm = new Vue({

0 commit comments

Comments
 (0)