From e48d59474230869ba81c1712128c01fd822946f5 Mon Sep 17 00:00:00 2001 From: Cliff Click Date: Mon, 21 Sep 2026 21:48:15 -0700 Subject: Switch over to the ELK renderer --- graph/web/legacy.js | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 graph/web/legacy.js (limited to 'graph/web/legacy.js') diff --git a/graph/web/legacy.js b/graph/web/legacy.js new file mode 100644 index 00000000..4c1b7ef8 --- /dev/null +++ b/graph/web/legacy.js @@ -0,0 +1,25 @@ +// Only earlier chapters need Graphviz. Load it on the first bare-DOT frame. +let dotView; +async function drawDot(dot) { + if (!dotView) { + dotView = (async () => { + for (const src of ["vendor/graphviz.umd.js", "vendor/d3-graphviz.js"]) { + await new Promise((resolve, reject) => { + const script = document.createElement("script"); + script.src = src; script.onload = resolve; + script.onerror = () => reject(new Error("Cannot load " + src)); + document.head.append(script); + }); + } + return new Promise((resolve, reject) => { + const view = d3.select("#dot").graphviz({useWorker: false, fit: true}) + .onerror(reject).on("initEnd", () => resolve(view)) + .transition(() => d3.transition("main").ease(d3.easeLinear).duration(500)); + }); + })(); + } + const view = await dotView; + const host = document.getElementById("dot"); + view.width(host.clientWidth).height(host.clientHeight); + await new Promise((resolve, reject) => view.onerror(reject).renderDot(dot, resolve)); +} -- cgit v1.2.3