From c026b2a603c1a7eb59445632407480db403ce22e Mon Sep 17 00:00:00 2001 From: D4rkst3r Date: Fri, 31 Jul 2026 22:08:42 +0200 Subject: [PATCH] Wichtige Funktionen direkt in der Seitenleiste MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Nach dem Umbau lagen alle Funktionen hinter dem Raster — für die vier, fünf, die man dauernd anfasst, ist das ein Umweg zu viel. Oben in der Seitenleiste steht jetzt „Meine Funktionen": ein Klick öffnet die Seite direkt. Welche dort stehen, entscheidet der Stern auf der Modul-Karte oder auf der Seite selbst. Bewusst nicht alle 35: Deckel bei acht, sonst ist der Gewinn gegenüber dem Raster wieder weg. Der Standard ist eine Vermutung (Devlogs, Willkommen, Tickets, Starboard, Galerie) und ausdrücklich zum Ändern gedacht. Die Auswahl liegt als Einstellung in der Datenbank, nicht im Browser — sie gilt damit auf jedem Gerät und fürs ganze Team. Eine geleerte Auswahl wird als solche gespeichert, sonst käme beim nächsten Laden der Standard zurück. Der Stern ist ungeheftet nur angedeutet und wird erst beim Überfahren deutlich — 35 Karten mit vollen Sternen sähen aus wie ein Sternenhimmel. Nebenbei: bei geöffneter Modul-Seite war sowohl „Module" als auch die Funktion in der Leiste hervorgehoben. Jetzt nur noch die Funktion. Co-Authored-By: Claude Fable 5 --- README.md | 5 +++ frontend/src/components/ModulePage.jsx | 13 +++++- frontend/src/pages/Settings.jsx | 59 +++++++++++++++++++++++++- frontend/src/style.css | 13 ++++++ src/modules.js | 38 +++++++++++++++++ src/web/api.js | 18 +++++++- 6 files changed, 140 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index e2bf816..0eb1487 100644 --- a/README.md +++ b/README.md @@ -91,6 +91,11 @@ statt alles über vier Bereiche verteilt. Für „Willkommen" also Kanal, Karte, Farben, Vorschau und Begrüßungstext an einem Ort. Die Adresse merkt sich die Seite (`/settings#module/welcome`). +Die Funktionen, die man dauernd anfasst, stehen zusätzlich **oben in der +Seitenleiste** unter *Meine Funktionen* — ein Klick statt Umweg übers Raster. +Welche das sind, entscheidet der Stern auf der Modul-Karte (höchstens acht, +damit die Leiste kurz bleibt). + Gebaut wird sie aus den Registern: [`src/modules.js`](src/modules.js) kennt die Felder, [`src/templates.js`](src/templates.js) die Texte, [`src/tuning.js`](src/tuning.js) die Werte — jeweils über `module` verknüpft. Eine neue Funktion bekommt ihre diff --git a/frontend/src/components/ModulePage.jsx b/frontend/src/components/ModulePage.jsx index f164e92..8ee0e55 100644 --- a/frontend/src/components/ModulePage.jsx +++ b/frontend/src/components/ModulePage.jsx @@ -7,7 +7,7 @@ import { useEffect, useState } from 'react'; import { apiGet, apiPut, apiPost } from '../api.js'; import { moduleIcon } from '../module-icons.jsx'; -import { IconArrowLeft, IconWarning, IconCheck, IconRefresh, IconChevronDown } from '../icons.jsx'; +import { IconArrowLeft, IconWarning, IconCheck, IconRefresh, IconChevronDown, IconStar } from '../icons.jsx'; /** Ein Feld aus dem Register — Art entscheidet über die Darstellung */ function Feld({ feld, value, onChange, PickSelect, channelItems, roleItems }) { @@ -64,7 +64,7 @@ function Feld({ feld, value, onChange, PickSelect, channelItems, roleItems }) { */ export default function ModulePage(props) { const { id, onBack, onToggle, form, setForm, PickSelect, channelItems, roleItems, - welcomePreviewUrl, flash, goTab, reloadSettings } = props; + welcomePreviewUrl, flash, goTab, reloadSettings, favorites, onToggleFavorite } = props; const [detail, setDetail] = useState(null); const [fehler, setFehler] = useState(false); @@ -141,6 +141,15 @@ export default function ModulePage(props) {

{detail.name}

{detail.desc}

+ + + ); + })} + + )} + {TAB_SECTIONS.map((section) => { const items = foundTabs.filter((t) => t.section === section.id); if (items.length === 0) return null; @@ -2916,7 +2971,7 @@ export default function Settings({ me }) { {items.map((t) => (