Skip to content

Commit 42058ee

Browse files
kingwlKingwl
kingwl
authored andcommitted
support mouse event modifier
1 parent e853d19 commit 42058ee

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
@@ -23,7 +23,10 @@ const modifierCode: { [key: string]: string } = {
2323
ctrl: 'if(!$event.ctrlKey)return;',
2424
shift: 'if(!$event.shiftKey)return;',
2525
alt: 'if(!$event.altKey)return;',
26-
meta: 'if(!$event.metaKey)return;'
26+
meta: 'if(!$event.metaKey)return;',
27+
left: 'if($event.button !== 0)return;',
28+
middle: 'if($event.button !== 1)return;',
29+
right: 'if($event.button !== 2)return;'
2730
}
2831

2932
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
@@ -197,6 +197,49 @@ describe('Directive v-on', () => {
197197
expect(spy).toHaveBeenCalled()
198198
})
199199

200+
it('should support mouse modifier', () => {
201+
const left = 0
202+
const middle = 1
203+
const right = 2
204+
const spyLeft = jasmine.createSpy()
205+
const spyMiddle = jasmine.createSpy()
206+
const spyRight = jasmine.createSpy()
207+
208+
vm = new Vue({
209+
el,
210+
template: `
211+
<div>
212+
<div ref="left" @mousedown.left="foo">left</div>
213+
<div ref="right" @mousedown.right="foo1">right</div>
214+
<div ref="middle" @mousedown.middle="foo2">right</div>
215+
</div>
216+
`,
217+
methods: {
218+
foo: spyLeft,
219+
foo1: spyRight,
220+
foo2: spyMiddle
221+
}
222+
})
223+
224+
triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = right })
225+
triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = middle })
226+
expect(spyLeft).not.toHaveBeenCalled()
227+
triggerEvent(vm.$refs.left, 'mousedown', e => { e.button = left })
228+
expect(spyLeft).toHaveBeenCalled()
229+
230+
triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = left })
231+
triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = middle })
232+
expect(spyRight).not.toHaveBeenCalled()
233+
triggerEvent(vm.$refs.right, 'mousedown', e => { e.button = right })
234+
expect(spyRight).toHaveBeenCalled()
235+
236+
triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = left })
237+
triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = right })
238+
expect(spyMiddle).not.toHaveBeenCalled()
239+
triggerEvent(vm.$refs.middle, 'mousedown', e => { e.button = middle })
240+
expect(spyMiddle).toHaveBeenCalled()
241+
})
242+
200243
it('should support custom keyCode', () => {
201244
Vue.config.keyCodes.test = 1
202245
vm = new Vue({

0 commit comments

Comments
 (0)