From a7214f81e6fd7f4d953f87f01d8ee8a3d2857853 Mon Sep 17 00:00:00 2001 From: Ulas Date: Thu, 26 Mar 2026 23:13:15 +0100 Subject: [PATCH] =?UTF-8?q?fix:=204=20Bugs=20behoben=20=E2=80=94=20Dark-Mo?= =?UTF-8?q?de=20Inputs,=20Essensplan,=20Dashboard-Refresh,=20Mengenfeld?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Dark Mode: .form-input hatte kein Styling, Browser-Default führte zu weißem Text auf weißem Hintergrund. Jetzt mit .input zusammengefasst. 2. Essensplan: DATE_RE fehlte im Import (ReferenceError), db.transaction() wurde doppelt aufgerufen (3 Stellen). 3. Dashboard: Router-Guard verhinderte Re-Render bei Rücknavigation, Widgets zeigten veraltete Daten. 4. Einkaufsliste: Mengenfeld hatte abweichende Hintergrundfarbe und überdimensionierte min-height. Co-Authored-By: Claude Opus 4.6 --- public/router.js | 1 - public/styles/layout.css | 12 ++++++++---- public/styles/shopping.css | 6 +++--- server/routes/meals.js | 8 ++++---- 4 files changed, 15 insertions(+), 12 deletions(-) diff --git a/public/router.js b/public/router.js index cd9ee85..2e199fb 100644 --- a/public/router.js +++ b/public/router.js @@ -60,7 +60,6 @@ async function navigate(path, userOrPushState = true, pushState = true) { pushState = userOrPushState; } - if (path === currentPath) return; currentPath = path; const route = ROUTES.find((r) => r.path === path) ?? ROUTES.find((r) => r.path === '/'); diff --git a/public/styles/layout.css b/public/styles/layout.css index c6a7f53..cff0133 100644 --- a/public/styles/layout.css +++ b/public/styles/layout.css @@ -805,7 +805,8 @@ /* -------------------------------------------------------- * Form-Elemente * -------------------------------------------------------- */ -.input { +.input, +.form-input { width: 100%; padding: var(--space-2) var(--space-3); border-radius: var(--radius-sm); @@ -818,19 +819,22 @@ } @media (min-width: 1024px) { - .input { + .input, + .form-input { min-height: var(--target-md); font-size: var(--text-base); } } -.input:focus { +.input:focus, +.form-input:focus { outline: none; border-color: var(--color-accent); box-shadow: 0 0 0 3px var(--color-accent-light); } -.input::placeholder { +.input::placeholder, +.form-input::placeholder { color: var(--color-text-disabled); } diff --git a/public/styles/shopping.css b/public/styles/shopping.css index 421a108..1292d2e 100644 --- a/public/styles/shopping.css +++ b/public/styles/shopping.css @@ -178,11 +178,11 @@ padding: var(--space-1) var(--space-2); border-radius: var(--radius-xs); border: 1px solid var(--color-border); - background-color: var(--color-surface-2); - color: var(--color-text-secondary); + background-color: var(--color-surface); + color: var(--color-text-primary); font-size: var(--text-sm); text-align: center; - min-height: var(--target-lg); + min-height: auto; height: auto; } diff --git a/server/routes/meals.js b/server/routes/meals.js index 8c2a8c4..e415a7b 100644 --- a/server/routes/meals.js +++ b/server/routes/meals.js @@ -9,7 +9,7 @@ const express = require('express'); const router = express.Router(); const db = require('../db'); -const { str, oneOf, date, collectErrors, MAX_TITLE, MAX_TEXT, MAX_SHORT } = require('../middleware/validate'); +const { str, oneOf, date, collectErrors, MAX_TITLE, MAX_TEXT, MAX_SHORT, DATE_RE } = require('../middleware/validate'); const VALID_MEAL_TYPES = ['breakfast', 'lunch', 'dinner', 'snack']; @@ -181,7 +181,7 @@ router.post('/', (req, res) => { LEFT JOIN users u ON u.id = m.created_by WHERE m.id = ? `).get(mealId); - })(); + }); // Zutaten anhängen const ings = db.get().prepare( @@ -403,7 +403,7 @@ router.post('/:id/to-shopping-list', (req, res) => { count++; } return count; - })(); + }); res.json({ data: { transferred } }); } catch (err) { @@ -459,7 +459,7 @@ router.post('/week-to-shopping-list', (req, res) => { count++; } return count; - })(); + }); res.json({ data: { transferred } }); } catch (err) {