Freies Layout: board.pos-Migration aus Auto-Raster, Position als --board-x/y beim Render

This commit is contained in:
2026-06-14 14:55:05 +02:00
parent dcc015abd2
commit 390a9b2f94
2 changed files with 36 additions and 2 deletions
+34 -1
View File
@@ -46,6 +46,27 @@ function createPlusSvg() {
]); ]);
} }
// ---- POS-MIGRATION ----
// Boards ohne pos (Altbestand vor v2.3) aus einem Auto-Raster befuellen,
// damit sie sich nicht alle auf (0,0) stapeln. Raster orientiert sich am
// Wrapper-Padding (110px oben / 40px links) und der Board-Breite.
function ensureBoardPositions() {
const COL_W = 240 + 14; // --board-width (Desktop) + gap
const ROW_H = 220; // grober Board-Hoehen-Schaetzwert fuers Auto-Raster
const startX = 40, startY = 110;
const cols = Math.max(1, Math.floor((window.innerWidth - startX * 2 + 14) / COL_W));
let migrated = false;
boards.forEach((board, i) => {
if (board.pos && typeof board.pos.x === 'number' && typeof board.pos.y === 'number') return;
const col = i % cols;
const row = Math.floor(i / cols);
board.pos = { x: startX + col * COL_W, y: startY + row * ROW_H };
migrated = true;
});
return migrated;
}
// ---- RENDER ---- // ---- RENDER ----
function renderBoards() { function renderBoards() {
const wrapper = document.getElementById('boardsWrapper'); const wrapper = document.getElementById('boardsWrapper');
@@ -70,8 +91,20 @@ function renderBoards() {
return; return;
} }
boards.forEach(board => wrapper.appendChild(createBoardEl(board))); // Altbestand ohne pos migrieren (Auto-Raster), danach einmalig speichern.
const migrated = ensureBoardPositions();
boards.forEach(board => {
const el = createBoardEl(board);
// Position als Custom-Property setzen (nicht inline left/top), damit der
// Mobil-@media-Reset sie ueberschreiben kann.
el.style.setProperty('--board-x', board.pos.x + 'px');
el.style.setProperty('--board-y', board.pos.y + 'px');
wrapper.appendChild(el);
});
initBoardDragDrop(); initBoardDragDrop();
if (migrated) saveBoards();
} }
function createBoardEl(board) { function createBoardEl(board) {
+2 -1
View File
@@ -53,7 +53,8 @@ function getDefaultBoards() {
{ id: uid(), title: 'MDN Web Docs', url: 'https://developer.mozilla.org', desc: '' }, { id: uid(), title: 'MDN Web Docs', url: 'https://developer.mozilla.org', desc: '' },
{ id: uid(), title: 'Next.js Docs', url: 'https://nextjs.org/docs', desc: '' }, { id: uid(), title: 'Next.js Docs', url: 'https://nextjs.org/docs', desc: '' },
], ],
blurred: false blurred: false,
pos: { x: 40, y: 110 }
} }
]; ];
} }