mirror of
https://github.com/FH-Complete/FHC-Core.git
synced 2026-06-01 12:19:28 +00:00
49 lines
1.3 KiB
JavaScript
49 lines
1.3 KiB
JavaScript
const clickListeners = [];
|
|
|
|
function saveAddClickListener(el, source, value) {
|
|
const index = clickListeners.findIndex(data => data.el == el);
|
|
if (index >= 0) {
|
|
el.removeEventListener('click', clickListeners[index].listener);
|
|
clickListeners.splice(index, 1);
|
|
}
|
|
const listener = evt => {
|
|
evt.preventDefault();
|
|
evt.stopPropagation();
|
|
const customEvent = new CustomEvent('cal-click', {
|
|
cancelable: true,
|
|
bubbles: true,
|
|
detail: { source, value }
|
|
});
|
|
evt.target.dispatchEvent(customEvent);
|
|
}
|
|
clickListeners.push({el, listener});
|
|
el.addEventListener('click', listener);
|
|
}
|
|
|
|
export default {
|
|
mounted(el, binding, vnode) {
|
|
if (binding.arg == 'container') {
|
|
el.addEventListener('cal-click', evt => {
|
|
const customEvent = new Event('click:' + evt.detail.source, {
|
|
cancelable: true
|
|
});
|
|
binding.instance.$emit('click:' + evt.detail.source, customEvent, evt.detail.value);
|
|
if (!customEvent.defaultPrevented) {
|
|
const finalEvent = new CustomEvent('cal-click-default', {
|
|
cancelable: true,
|
|
bubbles: true,
|
|
detail: evt.detail
|
|
});
|
|
evt.target.dispatchEvent(finalEvent);
|
|
}
|
|
});
|
|
} else {
|
|
saveAddClickListener(el, binding.arg, binding.value);
|
|
}
|
|
},
|
|
updated(el, binding, vnode, prevVnode) {
|
|
if (binding.arg != 'container') {
|
|
saveAddClickListener(el, binding.arg, binding.value);
|
|
}
|
|
}
|
|
} |