Add Layouts module with Konva.js builder; smart offline polling; UI improvements

- Move board cards from dashboard to top of boards list page
- Fix Werkzeug duplicate polling (WERKZEUG_RUN_MAIN guard)
- Smart offline polling: fast loop for online boards, slow recheck for offline
- Add manual ping endpoint POST /api/boards/<id>/ping
- Add spin animation CSS for ping button

Layouts module (new):
- app/models/layout.py: Layout model (canvas_json, thumbnail_b64)
- app/routes/layouts.py: 5 routes (list, create, builder, save, delete)
- app/templates/layouts/: list and builder templates
- app/static/js/layout_builder.js: full Konva.js builder engine
- app/static/vendor/konva/: vendored Konva.js 9
- Structure mode: wall, room, door, window, fence, text shapes
- Devices mode: drag relay/input/Sonoff channels onto canvas
- Live view mode: click relays/Sonoff to toggle, socket.io state updates
- Device selection: click to select, remove individual device, Delete key
- Fix door/Arc size persistence across save/reload (outerRadius, scaleX/Y)
- Fix Sonoff devices missing from palette (add makeSonoffChip function)
This commit is contained in:
ske087
2026-02-27 13:34:44 +02:00
parent 30806560a6
commit 90cbf4e1f0
15 changed files with 2006 additions and 177 deletions

View File

@@ -51,6 +51,15 @@
box-shadow: 0 4px 24px rgba(0, 0, 0, 0.4);
}
/* ── Spinner for ping button ────────────────────────────────────────────── */
@keyframes spin {
to { transform: rotate(360deg); }
}
.spin {
display: inline-block;
animation: spin 0.8s linear infinite;
}
/* ── Relay buttons ──────────────────────────────────────────────────────── */
.relay-btn {
min-width: 90px;

File diff suppressed because it is too large Load Diff

12
app/static/vendor/konva/konva.min.js vendored Normal file

File diff suppressed because one or more lines are too long