fix(layout): Board-Handle-Klick ohne Bewegung ueberschreibt board.pos nicht mehr

Ein reiner Klick/Tap auf den Drag-Handle (ohne echtes Verschieben) hat in onUp den
gegen die Viewport geclampten --board-x/y-Wert zurueckgelesen und als board.pos
persistiert. Bei einem off-screen geclampten Board (nach Fenster-Verkleinerung oder
Import von breiterem Screen) zerstoerte das die wahre Position. Jetzt zaehlt erst eine
Bewegung > 3px als Drag; ohne Bewegung bleibt board.pos unangetastet.
This commit is contained in:
2026-06-14 19:51:15 +02:00
parent b3288b47eb
commit 1d17f4d11f
+10
View File
@@ -31,8 +31,16 @@ function initBoardDragDrop() {
const rect = boardEl.getBoundingClientRect();
const offX = e.clientX - rect.left;
const offY = e.clientY - rect.top;
const startCX = e.clientX, startCY = e.clientY;
// Erst eine echte Bewegung (> 3px) zaehlt als Drag. Ein reiner Klick/Tap auf den Handle darf
// board.pos NICHT ueberschreiben: renderBoards() schreibt in --board-x/y den gegen die Viewport
// GECLAMPTEN Wert, board.pos bleibt absichtlich der wahre (evtl. off-screen) Wert. onUp liest
// --board-x/y zurueck — bei einem No-Move-Klick waere das der Clamp und wuerde die wahre
// Position zerstoeren (Phase-5-Review, HIGH/data-loss).
let moved = false;
function onMove(ev) {
if (Math.abs(ev.clientX - startCX) > 3 || Math.abs(ev.clientY - startCY) > 3) moved = true;
const maxX = window.innerWidth - boardEl.offsetWidth;
const maxY = window.innerHeight - boardEl.offsetHeight;
const x = Math.max(0, Math.min(maxX, ev.clientX - offX));
@@ -54,6 +62,8 @@ function initBoardDragDrop() {
async function onUp() {
cleanup();
// Nur bei echtem Verschieben persistieren — sonst board.pos unangetastet lassen.
if (!moved) return;
const id = boardEl.dataset.boardId;
const board = boards.find(b => b.id === id);
if (board) {