diff --git a/tools/community-blick.mjs b/tools/community-blick.mjs index 914ac208..c356fead 100644 --- a/tools/community-blick.mjs +++ b/tools/community-blick.mjs @@ -140,6 +140,13 @@ for (const b of BRETTER) { { const d = new DatabaseSync(DB); const wer = d.prepare("SELECT id FROM personen WHERE rolle = 'gast' AND name = 'Jonas'").get(); + /* GEGENPROBE ZU „NUR OFFENE" (18.09.2026). Der Knopf erscheint + seit heute nur, wenn es etwas zu filtern gibt -- sonst stand er + auf fuenf Brettern, die gar keine Zustaende kennen, und tat dort + nichts. Die Gefahr dabei: dass er auch dort verschwindet, wo er + gebraucht wird. Ein erledigter Wunsch beweist das Gegenteil. */ + d.prepare("UPDATE eintraege SET status = 'erledigt' WHERE bereich = 'wunsch'" + + " AND id = (SELECT MIN(id) FROM eintraege WHERE bereich = 'wunsch')").run(); d.prepare(`INSERT INTO eintraege (bereich, art, titel, text, datum, status, erstellt, erstellt_von) VALUES ('treff','frage',?,?,?, 'offen', ?, ?)`) .run("Kommt Casper auch mal in den Stream?", @@ -210,12 +217,26 @@ for (const b of BRETTER) { startkatalog: !!document.querySelector("#startkatalog")?.children?.length, leerText: document.querySelector(".leer, .leer-hinweis, .hinweis")?.textContent?.trim().slice(0, 80) || "", hoehe: document.body.scrollHeight, + /* Wie viele Filterknoepfe, und sind die Karten gleich hoch? */ + filterZahl: document.querySelectorAll('#filter button').length, + kartenHoehen: [...new Set([...document.querySelectorAll('.eintrag-karte')] + .map((k) => Math.round(k.getBoundingClientRect().height)))].length, + /* Der Kopf des Bretts: Was steht da, und wohin fuehrt der Link? */ + ober: document.querySelector('.brettkopf__ober, .ober')?.textContent?.trim() || '', + unter: document.querySelector('.brettkopf__unter, .unterzeile, .brettkopf p')?.textContent?.trim() || '', + kopflink: (() => { + const a2 = document.querySelector('.brettkopf a, .kopfkasten a'); + return a2 ? a2.textContent.trim() + ' -> ' + (a2.getAttribute('href') || '') : '(keiner)'; + })(), /* Sichtbare Sternchenpaare -- gemeint war Fettschrift. */ sternchen: (document.body.innerText.match(/\*\*/g) || []).length, })); console.log(`${b.padEnd(11)} „${z.titel}" · ${z.karten} Karten` + ` · Schreibfeld: ${z.schreibfeld ? "ja" : "NEIN"}` + ` · Karte ${z.hoeheJeKarte}px · melden: ${z.meldenGesamt}` + + ` · Filter: ${z.filterZahl} · Kartenhoehen: ${z.kartenHoehen}` + + ` + Kopf: „${z.ober}" / „${z.unter}" · Link: ${z.kopflink}` + (z.sternchen ? ` · STERNCHEN: ${z.sternchen}` : "") + (z.leerText ? ` · „${z.leerText}"` : "")); const pfad = `C:/Users/qciga/AppData/Local/Temp/comm-${b}${BREITE < 700 ? "-handy" : ""}.png`; diff --git a/workspace/app.webmanifest b/workspace/app.webmanifest index 8375e538..8b3aa0f9 100644 --- a/workspace/app.webmanifest +++ b/workspace/app.webmanifest @@ -22,25 +22,25 @@ }, "icons": [ { - "src": "/assets/img/app-symbole/workspace-192.png?v=202609182010", + "src": "/assets/img/app-symbole/workspace-192.png?v=202609182015", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-512.png?v=202609182010", + "src": "/assets/img/app-symbole/workspace-512.png?v=202609182015", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609182010", + "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609182015", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609182010", + "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609182015", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/assets/css/bereich.css b/workspace/assets/css/bereich.css index c7c8f30e..8c5fab74 100644 --- a/workspace/assets/css/bereich.css +++ b/workspace/assets/css/bereich.css @@ -862,7 +862,14 @@ #liste[data-galerie="ja"] { display: grid; gap: 16px; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); - align-items: start; + /* GLEICH HOCH, nicht oben buendig (18.09.2026). + + Mit `start` endete jede Karte dort, wo ihr Text aufhoerte -- drei + nebeneinander hoerten auf drei verschiedenen Hoehen auf, und die + Reihe sah aus, als waere beim Laden etwas schiefgegangen. Eine + Galerie ist ein Raster; ungleiche Kanten liest man als Fehler, + nicht als Absicht. */ + align-items: stretch; } /* Der Bildstreifen auf einer Karte. */ diff --git a/workspace/assets/js/bereich.js b/workspace/assets/js/bereich.js index 68cf7822..fa662539 100644 --- a/workspace/assets/js/bereich.js +++ b/workspace/assets/js/bereich.js @@ -82,7 +82,32 @@ }; const $ = (id) => document.getElementById(id); + /* ---- DIE SIEBEN COMMUNITY-BRETTER (18.09.2026) ----------------- + + Sie hatten hier keinen Eintrag. Ein Mitglied sah deshalb nur: + + — TERMINE + Was ansteht + Hier schreibt das Team. + + Die Oberzeile ist eine Kategorie, kein Satz; darunter stand + ausschliesslich, OB man schreiben darf. Was das Brett IST und was + man damit tut, stand nirgends -- auf drei Brettern sogar + wortgleich dasselbe („Ab „Dabei" kannst du hier schreiben"). + + Jeder Satz sagt deshalb zwei Dinge: wofuer das Brett da ist und + was man hier konkret tut. Der Hinweis auf das Schreibrecht haengt + sich dahinter -- in dieser Reihenfolge, weil „was ist das hier" + vor „darf ich mitmachen" kommt. */ const UNTERZEILE = { + treff: 'Der offene Raum: Hallo sagen, fragen, loben – und sagen, wenn etwas nicht stimmt.', + anschlag: 'Was gerade gilt, kurz und an einer Stelle. Mehr als ein paar Sachen hängen hier nie.', + ansteht: 'Die nächsten Streams, Events und Turniere – mit Countdown, damit du nichts verpasst.', + wunsch: 'Was ihr euch wünscht. Drück „Will ich auch“ – danach wird sortiert, was am meisten gewollt ist.', + highlight: 'Eure Clips, Bilder und Fanart. Der Knopf führt zu TikTok – dort zählt das Liken wirklich.', + regeln: 'Wie es hier läuft – zum Nachschlagen, nicht zum Auswendiglernen. Oben steht, wo was steht.', + mitmachen: 'Wie du dazugehören kannst: was gerade gesucht wird und wie du dich meldest.', + live: 'Vorbereitung, Mitschrift und Auswertung – LIVE systematisch verbessern.', content: 'Ideen, Produktion und Veröffentlichtes an einer Stelle statt in Chats.', technik: 'Setups, Fehlerbilder und Lösungen pro Creator sauber dokumentiert.', @@ -1216,7 +1241,24 @@ return b; }; ziel.append(knopf('', 'Alle')); - ziel.append(knopf('offen', 'Nur offene')); + + /* „NUR OFFENE" NUR, WENN ES ETWAS ZU FILTERN GIBT (18.09.2026). + + Fuenf der sieben Community-Bretter kennen gar keine Zustaende -- + ein Clip ist nicht „offen" oder „erledigt". Der Knopf stand + trotzdem ueberall und tat dort nichts. Ein Knopf, der nichts + tut, kostet das Vertrauen in den naechsten: Man drueckt ihn, + nichts passiert, und beim uebernaechsten fragt man sich, ob man + etwas falsch macht. + + Dieselbe Regel wie bei der Kanalzeile: Sie erscheint nur, wenn + es mehr als eine Moeglichkeit gibt. + + `|| filter === 'offen'` ist kein Beiwerk: Ist der Filter aktiv, + sieht man gerade KEINE erledigten mehr -- der Knopf wuerde unter + der eigenen Hand verschwinden, und man kaeme nicht zurueck. */ + const gibtErledigte = eintraege.some((e) => e.status && e.status !== 'offen'); + if (gibtErledigte || filter === 'offen') ziel.append(knopf('offen', 'Nur offene')); for (const [wert, name] of Object.entries(einstellung.arten)) ziel.append(knopf(wert, name)); /* ---- UND DIE KANALZEILE, wenn hier Videos liegen ---------------- diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index 7e608cc3..3353b2c5 100644 --- a/workspace/aufgaben.html +++ b/workspace/aufgaben.html @@ -12,19 +12,19 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - + + + + + + - +
@@ -291,10 +291,10 @@ - - - - - + + + + +