logos-blockchain-testing/book/theme/mermaid-overlay.js
2025-12-01 18:36:58 +01:00

58 lines
1.4 KiB
JavaScript

(function () {
const openOverlay = (svg) => {
const overlay = document.createElement("div");
overlay.className = "mermaid-overlay";
const content = document.createElement("div");
content.className = "mermaid-overlay__content";
const clone = svg.cloneNode(true);
clone.removeAttribute("width");
clone.removeAttribute("height");
clone.style.width = "95vw";
clone.style.maxWidth = "1400px";
clone.style.height = "auto";
clone.style.display = "block";
clone.style.margin = "0 auto";
content.appendChild(clone);
overlay.appendChild(content);
document.body.appendChild(overlay);
const close = () => overlay.remove();
overlay.addEventListener("click", close);
document.addEventListener(
"keydown",
(e) => {
if (e.key === "Escape") {
close();
}
},
{ once: true }
);
};
const bind = () => {
document.querySelectorAll(".mermaid svg").forEach((svg) => {
if (svg.dataset.overlayBound === "true") {
return;
}
svg.style.cursor = "zoom-in";
svg.addEventListener("click", () => openOverlay(svg));
svg.dataset.overlayBound = "true";
});
};
const init = () => {
bind();
// Mermaid renders asynchronously; bind again after a short delay.
setTimeout(bind, 500);
};
if (document.readyState === "loading") {
document.addEventListener("DOMContentLoaded", init);
} else {
init();
}
})();