summaryrefslogtreecommitdiff
path: root/graph/web/legacy.js
blob: 4c1b7ef8b7a6603d424432128bf238f3f9f74ed9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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));
}