@caspingus/lt
Version:
A utility library of helpers and extensions useful when working with Learnosity APIs.
43 lines (42 loc) • 1.52 kB
JavaScript
import e from "./logger.js";
//#region src/utils/dom.js
function t(e, n, r = 5) {
let i = document.getElementById(e);
i ? n(i) : r > 0 ? setTimeout(() => t(e, n, r - 1), 10) : console.warn(`Element with ID "${e}" not found after ${r} attempts.`);
}
function n(t, n, i) {
let a = i.dispatchEvent || !1, o = i.name || "lt:datatable", s = i.root || document.body, c = i.state || { activeObservers: /* @__PURE__ */ new Set() }, l = {
childList: !0,
subtree: !0,
...i.observeConfig
};
if (c.activeObservers.has(t)) return e.debug(`${c.logPrefix}Already observing`, t), () => {};
let u = s.querySelector(t);
if (u) return e.debug(`${c.logPrefix}Element already in DOM`, t), n(u), () => {};
c.activeObservers.add(t);
let d = new MutationObserver((i, l) => {
for (let u of i) if (u.type === "childList") {
for (let i of u.addedNodes) if (i.nodeType === 1) {
if (e.debug(`${c.logPrefix}Observing changes: `, s, i), i.matches && i.matches(t)) {
l.disconnect(), e.debug(`${c.logPrefix}Disconnecting ${t}`), c.activeObservers.delete(t), r(t, o, a), n(i);
return;
}
if (i.querySelector) {
let s = i.querySelector(t);
if (s) {
l.disconnect(), e.debug(`${c.logPrefix}Disconnecting ${t}`), c.activeObservers.delete(t), r(t, o, a), n(s);
return;
}
}
}
}
});
e.debug(`${c.logPrefix}Observing for ${t}`), d.observe(s, l);
}
function r(e, t, n) {
if (!n) return;
let r = new CustomEvent(t);
document.dispatchEvent(r);
}
//#endregion
export { t as n, n as t };