From 8c2668754a085cc574d34b4f0d61c25f411354a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Ml=C3=A1dek?= Date: Wed, 11 Jan 2023 19:03:31 +0100 Subject: [PATCH] feat: add current position display to Surface view --- webui/src/views/Surface.svelte | 40 ++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/webui/src/views/Surface.svelte b/webui/src/views/Surface.svelte index 5fd9a26..f87c43e 100644 --- a/webui/src/views/Surface.svelte +++ b/webui/src/views/Surface.svelte @@ -18,6 +18,9 @@ let y: string = urlParams.get("y"); let viewMode = "link"; + let currentX = NaN; + let currentY = NaN; + let loaded = false; let viewHeight = 0; let viewWidth = 0; @@ -109,6 +112,16 @@ svg.transition().duration(750).call(zoom.transform, d3.zoomIdentity); } + view.on("mousemove", (ev: MouseEvent) => { + // not using offsetXY because `translate` transforms on .inner mess it up + const viewBBox = (view.node() as HTMLElement).getBoundingClientRect(); + const [x, y] = d3 + .zoomTransform(d3.select(".points").node() as HTMLElement) + .invert([ev.clientX - viewBBox.left, ev.clientY - viewBBox.top]); + currentX = xScale.invert(x); + currentY = yScale.invert(y); + }); + d3.select(".view").call(zoom); loaded = true; }); @@ -130,6 +143,23 @@ +
+ {$i18n.t("Current position")}: +
+ X: + {x} = {(Math.round(currentX * 100) / 100).toLocaleString("en", { + useGrouping: false, + minimumFractionDigits: 2, + })} +
+
+ Y: + {y} = {(Math.round(currentY * 100) / 100).toLocaleString("en", { + useGrouping: false, + minimumFractionDigits: 2, + })} +
+