summaryrefslogtreecommitdiff
path: root/graph/web/viewer.js
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2026-09-21 22:53:49 -0700
committerCliff Click <cliffc@acm.org>2026-09-21 22:53:49 -0700
commit92e3013a4cab12747af9d5484e7caad6fc454b1e (patch)
treea3137dd95038c3487848c355a0c7053f4a518721 /graph/web/viewer.js
parente48d59474230869ba81c1712128c01fd822946f5 (diff)
downloadSimple-92e3013a4cab12747af9d5484e7caad6fc454b1e.tar.gz
Simple-92e3013a4cab12747af9d5484e7caad6fc454b1e.zip
Switch over to the new ELK driver
Interact between compiler & browser now hooks several nbew places.
Diffstat (limited to 'graph/web/viewer.js')
-rw-r--r--graph/web/viewer.js17
1 files changed, 16 insertions, 1 deletions
diff --git a/graph/web/viewer.js b/graph/web/viewer.js
index e193a4b3..9aaaa154 100644
--- a/graph/web/viewer.js
+++ b/graph/web/viewer.js
@@ -28,7 +28,20 @@ function updateUI() {
document.getElementById("compile").disabled =
!socket || socket.readyState !== WebSocket.OPEN || compiling || rendering;
document.getElementById("fit").disabled = rendering || current < 0;
+ document.getElementById("save").disabled = rendering || !frames[current]?.snap;
document.getElementById("assocs").disabled = !frames[current]?.snap;
+ document.getElementById("near").disabled = !frames[current]?.evt;
+ const evt = frames[current]?.evt;
+ let label = "";
+ if (evt) {
+ const text = evt.kind === "PHASE" ? "Phase complete" :
+ evt.kind === "BEFORE" ? `Before peephole #${evt.peep} at node #${evt.node}` :
+ evt.kind === "RETURN" ? `Return #${evt.repl} for #${evt.node}` :
+ !evt.repl ? `Removed #${evt.node}` : evt.repl === evt.node ? `Updated #${evt.node}` :
+ `Replaced #${evt.node} with #${evt.repl}`;
+ label = `${evt.phase} ยท ${text}${evt.up ? " (inside peephole #" + evt.up + ")" : ""}`;
+ }
+ document.getElementById("event").textContent = label;
}
function reportError(error) {
@@ -75,7 +88,7 @@ async function render(index) {
if (frame.snap) {
if (!layout) layout = new GraphLayout();
if (!frame.layout) frame.layout = await layout.run(frame.snap);
- if (generation === frameGeneration) renderer.show(frame.snap, frame.layout);
+ if (generation === frameGeneration) renderer.show(frame.snap, frame.layout, frame.evt);
} else {
document.getElementById("detail").hidden = true;
await drawDot(frame.dot);
@@ -108,6 +121,8 @@ document.getElementById("fit").addEventListener("click", () => {
else render(current);
});
document.getElementById("assocs").addEventListener("change", event => renderer.assocs(event.target.checked));
+document.getElementById("near").addEventListener("change", () => renderer.mark());
+document.getElementById("save").addEventListener("click", () => renderer.save(frames[current].snap.step));
document.addEventListener("keydown", event => {
if (event.key === "Escape") renderer.select(0);
});