date-input-control
Version:
Capture dates using day, month and year components
85 lines (84 loc) • 3.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.addListeners = void 0;
const includes = (items, searchElement, fromIndex) => (items.indexOf(searchElement, fromIndex) > -1);
const CAPTURE = { capture: true };
const BUBBLE = { capture: false };
exports.addListeners = (allInputs, listeners) => {
const inputs = Array.from(allInputs);
const callbacks = [];
const { onBlurAll, onBlurAllCapture, onFocusOutAll, onFocusOutAllCapture, onChangeAny, onChangeAnyCapture, onInputAny, onInputAnyCapture, } = listeners;
if (onBlurAll) {
for (const input of inputs) {
const handler = (e) => {
if (includes(inputs, e.relatedTarget))
return;
onBlurAll(e);
};
input.addEventListener('blur', handler, BUBBLE);
callbacks.push(() => input.removeEventListener('blur', handler, BUBBLE));
}
}
if (onBlurAllCapture) {
for (const input of inputs) {
const handler = (e) => {
if (includes(inputs, e.relatedTarget))
return;
onBlurAllCapture(e);
};
input.addEventListener('blur', handler, CAPTURE);
callbacks.push(() => input.removeEventListener('blur', handler, CAPTURE));
}
}
if (onFocusOutAll) {
for (const input of inputs) {
const handler = (e) => {
if (includes(inputs, e.relatedTarget))
return;
onFocusOutAll(e);
};
input.addEventListener('focusout', handler, BUBBLE);
callbacks.push(() => input.removeEventListener('focusout', handler, BUBBLE));
}
}
if (onFocusOutAllCapture) {
for (const input of inputs) {
const handler = (e) => {
if (includes(inputs, e.relatedTarget))
return;
onFocusOutAllCapture(e);
};
input.addEventListener('focusout', handler, CAPTURE);
callbacks.push(() => input.removeEventListener('focusout', handler, CAPTURE));
}
}
if (onChangeAny) {
for (const input of inputs) {
const handler = onChangeAny;
input.addEventListener('change', handler, BUBBLE);
callbacks.push(() => input.removeEventListener('change', handler, BUBBLE));
}
}
if (onChangeAnyCapture) {
for (const input of inputs) {
const handler = onChangeAnyCapture;
input.addEventListener('change', handler, CAPTURE);
callbacks.push(() => input.removeEventListener('change', handler, CAPTURE));
}
}
if (onInputAny) {
for (const input of inputs) {
const handler = onInputAny;
input.addEventListener('input', handler, BUBBLE);
callbacks.push(() => input.removeEventListener('input', handler, BUBBLE));
}
}
if (onInputAnyCapture) {
for (const input of inputs) {
const handler = onInputAnyCapture;
input.addEventListener('input', handler, CAPTURE);
callbacks.push(() => input.removeEventListener('input', handler, CAPTURE));
}
}
return () => callbacks.forEach((fn) => fn());
};