48 lines
1.6 KiB
JavaScript
48 lines
1.6 KiB
JavaScript
// Pulls registered Lottie animations + their animationData into window.__CLONE_CAPTURE__.lottie.
|
|
// Called from __CLONE_FINALIZE__. Supports lottie-web directly; lottie-react uses lottie-web internally.
|
|
(() => {
|
|
function cssPath(el) {
|
|
if (!el || el.nodeType !== 1) return null;
|
|
if (el.id) return `#${el.id}`;
|
|
const parts = [];
|
|
while (el && el.nodeType === 1 && parts.length < 10) {
|
|
let s = el.tagName.toLowerCase();
|
|
const p = el.parentNode;
|
|
if (p) {
|
|
const sibs = Array.from(p.children).filter((c) => c.tagName === el.tagName);
|
|
if (sibs.length > 1) s += `:nth-of-type(${sibs.indexOf(el) + 1})`;
|
|
}
|
|
parts.unshift(s);
|
|
el = el.parentNode;
|
|
}
|
|
return parts.join(' > ');
|
|
}
|
|
|
|
const prevFinalize = window.__CLONE_FINALIZE__;
|
|
window.__CLONE_FINALIZE__ = function () {
|
|
if (prevFinalize)
|
|
try {
|
|
prevFinalize();
|
|
} catch {}
|
|
try {
|
|
const lottie = window.lottie || window.bodymovin;
|
|
if (!lottie || typeof lottie.getRegisteredAnimations !== 'function') return;
|
|
const anims = lottie.getRegisteredAnimations();
|
|
for (const a of anims) {
|
|
try {
|
|
window.__CLONE_CAPTURE__.lottie.push({
|
|
selector: a.wrapper instanceof Element ? cssPath(a.wrapper) : null,
|
|
renderer: a.renderer?.name || 'unknown',
|
|
animationData: a.animationData ? JSON.parse(JSON.stringify(a.animationData)) : null,
|
|
loop: a.loop,
|
|
autoplay: a.autoplay,
|
|
name: a.name,
|
|
});
|
|
} catch {}
|
|
}
|
|
} catch (e) {
|
|
window.__CLONE_CAPTURE__.lottie.push({ error: String(e) });
|
|
}
|
|
};
|
|
})();
|