feat(stammbaum): round pan/zoom URL params for readable shared links (#692)
Some checks failed
CI / Unit & Component Tests (pull_request) Failing after 2m36s
CI / OCR Service Tests (pull_request) Successful in 22s
CI / Backend Unit Tests (pull_request) Successful in 3m30s
CI / fail2ban Regex (pull_request) Successful in 45s
CI / Semgrep Security Scan (pull_request) Successful in 22s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m6s
Some checks failed
CI / Unit & Component Tests (pull_request) Failing after 2m36s
CI / OCR Service Tests (pull_request) Successful in 22s
CI / Backend Unit Tests (pull_request) Successful in 3m30s
CI / fail2ban Regex (pull_request) Successful in 45s
CI / Semgrep Security Scan (pull_request) Successful in 22s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m6s
Pan rounded to 2 decimals, zoom to 3, so ?cx/?cy/?z no longer carry float noise like cx=457.8300882631206. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -71,9 +71,18 @@ export function parsePanZoomParams(raw: {
|
||||
};
|
||||
}
|
||||
|
||||
/** Serialise a view state into URL query params (the inverse of {@link parsePanZoomParams}). */
|
||||
/** Format a number with at most `dp` decimals, dropping trailing zeros. */
|
||||
function round(n: number, dp: number): string {
|
||||
return String(Number(n.toFixed(dp)));
|
||||
}
|
||||
|
||||
/**
|
||||
* Serialise a view state into URL query params (the inverse of
|
||||
* {@link parsePanZoomParams}). Pan is rounded to 2 decimals and zoom to 3 so
|
||||
* shared links stay readable (no `cx=457.8300882631206` float noise).
|
||||
*/
|
||||
export function serializePanZoomParams(state: PanZoomState): { cx: string; cy: string; z: string } {
|
||||
return { cx: String(state.x), cy: String(state.y), z: String(state.z) };
|
||||
return { cx: round(state.x, 2), cy: round(state.y, 2), z: round(state.z, 3) };
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user