Files
FHC-Core/public/js/directives/Calendar/Click.js
T
2025-07-15 11:17:49 +02:00

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);
}
}
}