This page hosts an <iframe src="/embed"> and sends it a
diagram via postMessage. The iframe announces itself with
arqon:ready; we reply with
{ type: "arqon:diagram", diagram: … }.
const iframe = document.getElementById("viewer");
let ready = false, lastDiagram = null;
window.addEventListener("message", (e) => {
if (e.data?.type === "arqon:ready") ready = true;
if (e.data?.type === "arqon:rendered") console.log("rendered", e.data);
if (e.data?.type === "arqon:error") console.error("embed error:", e.data.error);
});
async function send(id) {
const diagram = await (await fetch("/api/diagrams/" + id)).json();
lastDiagram = diagram;
iframe.contentWindow.postMessage({ type: "arqon:diagram", diagram }, "*");
}