balm-ui
Version:
A modular and customizable UI library based on Material Design and Vue 3
58 lines (46 loc) • 1.15 kB
JavaScript
const DATALIST_EVENTS = {
CLICK: 'click'
};
function isElementInContainer(event, containerEl) {
let currentEl = event.target;
let inContainer = currentEl === containerEl;
while (currentEl && !inContainer) {
currentEl = currentEl.parentNode;
if (currentEl === containerEl) {
inContainer = true;
}
}
return inContainer;
}
function createDatalistEventListener(el, callback) {
const listener = (e) => {
const inContainer = isElementInContainer(e, el);
if (!inContainer) {
callback();
}
};
return listener;
}
function addDatalistEventListener({ el, listener, callback }) {
if (!listener) {
listener = createDatalistEventListener(el, callback);
}
document.addEventListener(DATALIST_EVENTS.CLICK, listener, {
capture: true
});
}
function removeDatalistEventListener(listener) {
if (listener) {
document.removeEventListener(DATALIST_EVENTS.CLICK, listener, {
capture: true
});
}
}
function useDatalist() {
return {
createDatalistEventListener,
addDatalistEventListener,
removeDatalistEventListener
};
}
export { DATALIST_EVENTS, useDatalist };