Commit Graph
15 Commits
Author SHA1 Message Date
ki 6059748f9b Add BUG-04 test suite + .gitignore for .venv/
Re-holt die Tests vom BUG-04-Branch in diesen Branch, damit CI/Runs
vollständig sind. .gitignore ergänzt um .venv/ und tests/__pycache__/.
2026-08-29 17:43:02 +04:00
ki 9f705ad7e4 BUG-03: Span-Geometrie im Initial-Render (grid-column/grid-row direkt setzen)
Initial-Render hatte keine Span-Geometrie:
  renderGrid() hing Items in die Origin-Cell mit width:100% height:100%.
  Ein 2x2-Item sah damit aus wie eine 1x1-Box mit Mini-Inhalt.

Resize-Code (in BUG-01/02-Branch, applySize) setzte zwar korrekt
grid-column/row per JS — aber nur WÄHREND Resize. Initial war's kaputt.

Fix:
- renderGrid() hängt Items jetzt direkt in den Grid-Container (cont),
  nicht mehr in die Origin-Cell.
- style.gridColumn = '${it.x + 1} / span ${it.w}' setzt die CSS-Span-Geometrie
  direkt im Inline-Style.
- Origin-Cell bekommt nur noch die 'occupied'-Klasse (für die Optik).
- DOM-Baum: Items sind Geschwister der Cells → keine DOM-Kollision mehr,
  Drag-Events auf Nachbar-Cells werden nicht vom Item verschluckt.

Vorteile:
  - 2x2-Item rendert visuell über 2x2 Cells (richtige Größe beim ersten Laden)
  - Drag auf JEDE Zelle innerhalb der Item-Bbox funktioniert
  - applySize (Resize) kann den Span nahtlos aktualisieren ohne DOM-Wechsel
  - Kein Flicker beim Resize (initial state ist schon korrekt)

Beweis: tests/test_span_geometry.js (8/8 grün)
  1. gridColumn wird per JS gesetzt
  2. gridRow wird per JS gesetzt
  3. Item wird in Container (cont) gehängt
  4. Item wird NICHT mehr in Origin-Cell gehängt
  5. Origin-Cell bekommt 'occupied' Klasse
  6. gridColumn Format: <x+1> / span <w>
  7. Keine width:100% im Item-CSS-Block
  8. CSS-Kommentar erwähnt BUG-03

Hinweis: Mein ursprüngliches Issue-Statement war zu pessimistisch (Items
verdecken keine Nachbarzellen visuell). Sie saßen nur 1x1 in der
Origin-Cell. Dennoch ist der Fix substantiell: Initial-Render zeigt jetzt
korrekte Größe, und zukünftige Resize-Codes können sich auf den Span
verlassen ohne DOM-Mutation.

Closes #5
2026-08-29 17:42:49 +04:00
epaper-dashboard 5f74238e0e fix: grid items position:relative to restore multi-cell spans 2026-08-29 17:06:26 +04:00
epaper-dashboard 31d27ffa92 FEAT: 4x4 grid UI fixes, smooth drag-drop ghost preview, WordClock plugin
- Grid items now correctly placed inside .grid-cell divs (CSS Grid children)
- Visual occupied-state feedback during drag (CSS classes, no full re-render)
- Drag ghost preview (green=ok, red=overlap) replaces flicker on dragend
- New clock_wordclock plugin: German/English word clock (QWATCH layout)
2026-08-29 16:52:55 +04:00
epaper-dashboardandHermes 45d854e85e weather.py: nutze fetch_with_retry + render_error_banner
Bei API-Fehler (HTTP 5xx, Timeout, DNS-Fehler, Connection refused) wird
3x retry mit backoff versucht. Bei 3x fail wird ein auffaelliges rotes
"!"-Schild mit Plugin-Name und Fehlermeldung statt leeren Slot gerendert.

base.py: NEU - fetch_url() Helper mit Retry-Logik + Error-Formatting
        + render_error_banner() Funktion fuer Plugin-Slots.

Co-Authored-By: Hermes <noreply@hermes.local>
2026-08-26 22:15:53 +04:00
epaper-dashboardandHermes 81e46a2c60 Cleanup: Helfer-Altlasten aus main entfernen
24 Files geloescht, die nicht zur aktiven Codebasis gehoeren:
- 3 konkurrierende Renderer (renderer.py/2/3.py) - wir nutzen nur dashboard.py
- 4 alternative Admin-Templates (design_a/b/c, preview_all) - nur index.html aktiv
- 9 alte Test-Skripte (test_gradient, test_grid_v2, etc.)
- 5 alte Boot-Skripte (start_admin.sh, install_*.sh, etc.) - durch systemd-units ersetzt
- 2 Misc (50-allow-networkmanager.rules, waveshare_epd_init.py, idx.html, socktest.py)

Aktive Codebasis (was bleibt):
- admin.py, dashboard.py, network_watchdog.py, palette.py, layout.py
- plugins/{base,clock,hello,system,weather,minimax,spotify,strava,gmail}.py
- templates/index.html
- config.example.json, .env.example, README.md, RECOVERY.md
- systemd service units + deploy_dnd.sh

Co-Authored-By: Hermes <noreply@hermes.local>
2026-08-26 22:13:47 +04:00
epaper-dashboardandHermes 6b604b0289 gitignore: schliesse .backup/ aus
Co-Authored-By: Hermes <noreply@hermes.local>
2026-08-26 22:11:46 +04:00
epaper-dashboardandHermes 1f142f5245 Sync to Pi: alle Features die live deployed sind
Aus dem Backup und Live-Pull vom Pi (10.11.3.144):
- dashboard.py: Grid-Linien nur im freien Hintergrund (nicht durch Widgets)
- templates/index.html: komplett redesigned mit Sidebar + Topbar + Toast + Modal
- plugins/clock.py: responsive Layout (1x1 bis 4x4)
- plugins/system.py, weather.py, minimax.py: mit Threshold-Bars und Color-Variants
- plugins/base.py: NEU — fetch_with_retry Helper (3x retry mit backoff)
  + render_error_banner für fehlgeschlagene API-Plugins
  (grosses rotes "!" Icon mit Plugin-Name und Fehler statt Crash)

Cleanup: Helfer-Chaos (renderer.py/2/3, design_a/b/c.html, clock_classic.py,
23x clock_*.png, alte test_*.py) wurde bereits im vorherigen Commit entfernt.

Co-Authored-By: Hermes <noreply@hermes.local>
2026-08-26 22:11:36 +04:00
ki af9a99a379 Add classic design, set as default
Classic = original flat white design (matches reference screenshot)
2026-08-26 15:15:09 +04:00
ki 49de61bb26 Linear design system: new admin UI + display design switcher (8 designs)
Admin UI: Linear.app dark theme — near-black canvas, indigo-violet accent, Inter font
Display: Minimal, Minimal Color, Bold, Analog Clock, Magazine, Cards, Kiosk, Classic
2026-08-26 15:08:17 +04:00
ki a2c4158ba8 Add theme switchers: Admin UI (A/B/C) + Display (5 themes)
Admin UI: Dark Minimal / Retro Terminal / Warm Editorial via header buttons
Display: Classic White / Dark / Sepia / Nord / Terminal via Settings tab
Both switchers persist via localStorage / config.json
2026-08-26 14:41:34 +04:00
ki 99fb5692ef Add 3 alternative admin UI designs: Dark Minimal, Retro Terminal, Warm Editorial 2026-08-26 14:35:39 +04:00
ki 782eb61558 dashboard: remove debug grid lines and item borders from render 2026-08-26 14:16:59 +04:00
ki 502e4459c3 docs: add README with full architecture and plugin guide 2026-08-26 14:15:21 +04:00
ki 28124c5617 Initial commit: epaper-dashboard for 7.3" ACeP 7-Color display
- dashboard.py: plugin-based renderer with 4x4 grid layout
- admin.py: web UI with layout editor + plugin configs
- layout.py: pack algorithm, item placement, grid system
- plugins/: clock, weather, system, spotify, strava, gmail, minimax, hello
- network_watchdog.py: WiFi AP/client mode management
- waveshare_epd_init.py: vendor driver stub
2026-08-26 14:12:43 +04:00