jqlmodule
Version:
DEPRECATED
31 lines (28 loc) • 1.26 kB
JavaScript
import jql from "../index.js";
let handlers = {};
const shouldCaptureEventTypes = [
`load`, `unload`, `scroll`, `focus`, `blur`, `DOMNodeRemovedFromDocument`,
`DOMNodeInsertedIntoDocument`, `loadstart`, `progress`, `error`, `abort`,
`load`, `loadend`, `pointerenter`, `pointerleave`, `readystatechange`];
const getCapture = eventType => !!(shouldCaptureEventTypes.find(t => t === eventType));
export default () => {
const metaHandler = evt => handlers[evt.type].forEach(handler => handler(evt));
const createHandlerForHID = (HID, callback) => {
return evt => {
const target = evt.target?.closest?.(HID);
return target && callback(evt, jql(target));
};
};
const addListenerIfNotExisting = (eventType, capture) => {
if (!handlers[eventType]) {
addEventListener(eventType, metaHandler, getCapture(eventType));
}
};
return (eventType, HIDselector, callback, capture = false) => { /*NODOC*/
addListenerIfNotExisting(eventType, capture);
const fn = !HIDselector ? callback : createHandlerForHID(HIDselector, callback);
handlers = handlers[eventType]
? {...handlers, [eventType]: handlers[eventType].concat(fn)}
: {...handlers, [eventType]: [fn]};
};
};