iripo
Version:
A mutation observer based livequery replacement.
142 lines (141 loc) • 4.57 kB
JavaScript
window.requestIdleCallback = window.requestIdleCallback || function(u) {
var n = Date.now();
return setTimeout(function() {
u({
didTimeout: !1,
timeRemaining: function() {
return Math.max(0, 50 - (Date.now() - n));
}
});
}, 1);
};
window.cancelIdleCallback = window.cancelIdleCallback || function(u) {
clearTimeout(u);
};
const e = window.iripo = {
paused: !1,
// All mutation functions have been paused at a system level, vs at a function level.
allFns: /* @__PURE__ */ new Map(),
pausedFns: /* @__PURE__ */ new Map(),
inWatchers: /* @__PURE__ */ new Map(),
outWatchers: /* @__PURE__ */ new Map(),
processedElems: /* @__PURE__ */ new WeakMap(),
processingQueued: !1,
outElems: /* @__PURE__ */ new Map(),
// Elements which are observed for changes (out functions)
getSymbol: function(n, t) {
const s = Array.from(e.allFns.entries()).find(([a, o]) => {
if (a.description === n && t.toString() === o.toString())
return !0;
});
return s && s[0];
},
getFn: function(n) {
return e.allFns.get(n);
},
setAction: function(n, t, s) {
const a = s.get(n) || /* @__PURE__ */ new Set();
let o = e.getSymbol(n, t);
return o || (o = Symbol(n), e.allFns.set(o, t), s.set(n, a.add(o))), o;
},
in: function(n, t, s) {
const a = e.setAction(n, t, e.inWatchers);
return s && e.processInFns(), a;
},
out: function(n, t) {
return e.setAction(n, t, e.outWatchers);
},
clear: function(n) {
e.allFns.delete(n), e.pausedFns.delete(n), [e.inWatchers, e.outWatchers].forEach(function(t) {
t.forEach(function(s) {
s.delete(n);
});
});
},
pause: function(n) {
return e.pausedFns.set(n, !0), n;
},
pauseAll: function() {
this.paused = !0, e.allFns.forEach(function(n, t) {
e.pause(t);
});
},
resume: function(n, t) {
return typeof t > "u" && (t = !0), this.paused = !1, e.pausedFns.delete(n), t && e.processInFns(), n;
},
resumeAll: function() {
this.paused = !1, e.allFns.forEach(function(n, t) {
e.resume(t, !1);
}), e.processInFns();
},
buildOutFn: function({ elem: n, selector: t, fn: s }) {
e.outElems.has(n) ? e.outElems.get(n).has(t) ? e.outElems.get(n).get(t).add(s) : e.outElems.get(n).set(t, /* @__PURE__ */ new Set([s])) : e.outElems.set(n, /* @__PURE__ */ new Map([[t, /* @__PURE__ */ new Set([s])]]));
},
processInFns: function(n) {
if (e.inWatchers.size > 0) {
const t = Array.from(e.inWatchers.keys()).join(",");
document.querySelectorAll(t).forEach(function(s) {
e.inWatchers.forEach(function(a, o) {
s.matches(o) && a.forEach(function(i) {
if (!e.pausedFns.get(i)) {
const r = e.processedElems.get(s);
if (!r || !r.has(i)) {
const f = e.getFn(i), d = r || /* @__PURE__ */ new Set();
e.processedElems.set(s, d.add(i)), e.buildOutFn({
elem: s,
selector: o,
fn: () => {
var c;
(c = e.processedElems.get(s)) == null || c.delete(i);
}
}), f(s);
}
}
});
});
});
}
if (e.outWatchers.size > 0) {
const t = Array.from(e.outWatchers.keys()).join(",");
document.querySelectorAll(t).forEach(function(s) {
e.outWatchers.forEach(function(a, o) {
s.matches(o) && a.forEach(function(i) {
const r = e.getFn(i);
e.buildOutFn({ elem: s, selector: o, fn: r });
});
});
});
}
},
processOutFns: function(n) {
Array.from(e.outElems.entries()).forEach(([t, s]) => {
Array.from(s.entries()).forEach(([a, o]) => {
(!t.isConnected || !t.matches(a)) && (o.forEach((i) => i(t)), e.outElems.get(t).delete(a)), e.outElems.get(t).size || e.outElems.delete(t);
});
});
}
};
window.addEventListener(
"DOMContentLoaded",
function(n) {
e.paused || e.processInFns();
function t(s) {
e.paused || e.processingQueued || (e.processingQueued = !0, requestIdleCallback(
function() {
e.processInFns(s), e.processOutFns(s), e.processingQueued = !1;
},
{ timeout: 1e3 }
));
}
new MutationObserver(t).observe(
document.documentElement || document.body,
{
attributes: !0,
attributeOldValue: !0,
childList: !0,
subtree: !0
}
);
}
);
//# sourceMappingURL=iripo.es.js.map