87 lines
2.1 KiB
JavaScript
87 lines
2.1 KiB
JavaScript
|
import Vue from 'vue';
|
||
|
export default Vue.extend({
|
||
|
name: 'mouse',
|
||
|
methods: {
|
||
|
getDefaultMouseEventHandlers(suffix, getEvent) {
|
||
|
return this.getMouseEventHandlers({
|
||
|
['click' + suffix]: {
|
||
|
event: 'click'
|
||
|
},
|
||
|
['contextmenu' + suffix]: {
|
||
|
event: 'contextmenu',
|
||
|
prevent: true,
|
||
|
result: false
|
||
|
},
|
||
|
['mousedown' + suffix]: {
|
||
|
event: 'mousedown'
|
||
|
},
|
||
|
['mousemove' + suffix]: {
|
||
|
event: 'mousemove'
|
||
|
},
|
||
|
['mouseup' + suffix]: {
|
||
|
event: 'mouseup'
|
||
|
},
|
||
|
['mouseenter' + suffix]: {
|
||
|
event: 'mouseenter'
|
||
|
},
|
||
|
['mouseleave' + suffix]: {
|
||
|
event: 'mouseleave'
|
||
|
},
|
||
|
['touchstart' + suffix]: {
|
||
|
event: 'touchstart'
|
||
|
},
|
||
|
['touchmove' + suffix]: {
|
||
|
event: 'touchmove'
|
||
|
},
|
||
|
['touchend' + suffix]: {
|
||
|
event: 'touchend'
|
||
|
}
|
||
|
}, getEvent);
|
||
|
},
|
||
|
|
||
|
getMouseEventHandlers(events, getEvent) {
|
||
|
const on = {};
|
||
|
|
||
|
for (const event in events) {
|
||
|
const eventOptions = events[event];
|
||
|
if (!this.$listeners[event]) continue; // TODO somehow pull in modifiers
|
||
|
|
||
|
const prefix = eventOptions.passive ? '&' : (eventOptions.once ? '~' : '') + (eventOptions.capture ? '!' : '');
|
||
|
const key = prefix + eventOptions.event;
|
||
|
|
||
|
const handler = e => {
|
||
|
const mouseEvent = e;
|
||
|
|
||
|
if (eventOptions.button === undefined || mouseEvent.buttons > 0 && mouseEvent.button === eventOptions.button) {
|
||
|
if (eventOptions.prevent) {
|
||
|
e.preventDefault();
|
||
|
}
|
||
|
|
||
|
if (eventOptions.stop) {
|
||
|
e.stopPropagation();
|
||
|
}
|
||
|
|
||
|
this.$emit(event, getEvent(e));
|
||
|
}
|
||
|
|
||
|
return eventOptions.result;
|
||
|
};
|
||
|
|
||
|
if (key in on) {
|
||
|
/* istanbul ignore next */
|
||
|
if (Array.isArray(on[key])) {
|
||
|
on[key].push(handler);
|
||
|
} else {
|
||
|
on[key] = [on[key], handler];
|
||
|
}
|
||
|
} else {
|
||
|
on[key] = handler;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return on;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
});
|
||
|
//# sourceMappingURL=mouse.js.map
|