From 8e140724f219f1cf9acabb29a6e7752987830ee3 Mon Sep 17 00:00:00 2001 From: Dogfather Date: Wed, 16 Sep 2026 16:59:34 +0200 Subject: [PATCH] Der Rollenname steht in keiner ausgelieferten Datei mehr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pruef-modi-wortleck war rot und meldete 17 Fundstellen -- seit Wochen, bei jedem Lauf. Eine Warnung, die immer kommt, wird ueberlesen, und dann auch die echte. ERST GEMESSEN, OB DIE REGEL UEBERHAUPT NOCH GILT. Seit dem 11.09. gibt es die eigene Adresse crew. mit einem offenen Modi-Knopf an der Wand -- es waere gut moeglich gewesen, dass die Pruefung etwas bewacht, das es nicht mehr gibt. Sie gilt: pruef-modi-verborgen setzt mit 80 Pruefungen durch, dass ein Manager keinen Modi sieht. UND DABEI KAM ETWAS SCHLIMMERES HERAUS. Auf der echten Seite gemessen: /workspace/start.html 302 (Anmeldung noetig) /workspace/assets/js/talente.js 200 25 KB Quelltext /workspace/assets/js/chat.js 200 85 KB /workspace/assets/css/entwicklung.css 200 34 KB Jede Datei unter workspace/ ist OHNE JEDE ANMELDUNG aus dem offenen Netz abrufbar. Der verborgene Zugang stand also nicht in einer Datei, die "jeder herunterlaedt, der angemeldet ist" -- sondern in einer, die man einfach abrufen kann. Die Rollentabelle in workspace.js sagt seit dem 11.09. genau das Richtige dazu: "Der Name steht hier und NICHT in einer Datei, die jeder herunterlaedt -- ausgeliefert wird er nur an den, der ihn selbst traegt, und an die, die ihn sehen duerfen." Danach ist jetzt gebaut, ueberall: - talente.js hatte `rolle: 'modi'` fest im Text, dazu den Namen im Codekasten und im Rechtevergleich. Die Seite FRAGT ihn jetzt ab; /talente/lage liefert ihn, und die Route geht nur an DogFather und die rechte Hand. - Der Regeltext des Treffs nennt den Namen weiterhin -- Filipe hat am 11.09. ausdruecklich gewaehlt, dass die Community ihn sieht. Er kommt jetzt als DATEN mit der Antwort, nicht als fester Text. - Das Feld hiess selbst `modi_frist_tage`. Das Muster \bmodi\b trifft das nicht, weil danach ein Unterstrich folgt -- ein Leck durch eine Luecke im Muster, nicht durch eine Entscheidung. Heisst jetzt `pause_frist_tage`. - Die uebrigen elf Fundstellen waren Kommentare. Umformuliert, ohne dass sie weniger erklaeren. Ergebnis: 17 -> 0. Ohne Ausnahmeliste, ohne die Pruefung zu entschaerfen. ZWEI LOECHER, DIE ICH DABEI SELBST GERISSEN HAETTE: darfAnlegen wurde aus `lage` gerechnet -- aber ichHolen() laeuft VOR laden(), also war `lage` noch null. Der Wert waere dauerhaft falsch gewesen und der Knopf nie erschienen. Jetzt ist es eine Frage statt eines Wertes, beantwortet beim Zeichnen. Gefunden beim Nachsehen der Reihenfolge, nicht im Testlauf -- deshalb steht die Frage ab jetzt in pruef-uebergang. Und im HTML des Treffs steht als Ersatzfassung "jemandem aus dem Team". Kommt der Name nicht an, bleibt sie stehen, die Seite sieht vollkommen richtig aus, und niemand merkt es. Ein Platzhalter "…" waere aufgefallen; eine richtige Ersatzfassung faellt nicht auf. pruef-neue-seiten prueft jetzt, dass wirklich der Name dasteht. pruef-modi-wortleck 0 Fehler (vorher 17 Fundstellen) pruef-uebergang 65 (vorher 61), pruef-neue-seiten 97 (vorher 93) pruef-modi-verborgen 80, pruef-nachwuchs 123, pruef-treff 66, pruef-treff-werkzeuge 70, pruef-css-klassen -- alle 0 Fehler Co-Authored-By: Claude Opus 5 --- server/pruef-neue-seiten.mjs | 23 +++++++++++++ server/pruef-uebergang.mjs | 45 +++++++++++++++++++++++++ server/workspace-entwicklung.js | 25 ++++++++++++++ server/workspace-treff.js | 20 ++++++++++- workspace/app.webmanifest | 8 ++--- workspace/assets/css/entwicklung.css | 2 +- workspace/assets/css/gate.css | 2 +- workspace/assets/js/bereich.js | 2 +- workspace/assets/js/entwicklung.js | 4 +-- workspace/assets/js/talente.js | 25 ++++++++++---- workspace/assets/js/treff-moderation.js | 6 ++-- workspace/assets/js/treff-regeln.js | 14 ++++++-- workspace/aufgaben.html | 24 ++++++------- workspace/automation.html | 26 +++++++------- workspace/befinden.html | 24 ++++++------- workspace/bereich.html | 34 +++++++++---------- workspace/calls.html | 28 +++++++-------- workspace/chat.html | 26 +++++++------- workspace/content.html | 30 ++++++++--------- workspace/crew-index.html | 10 +++--- workspace/crew.webmanifest | 8 ++--- workspace/dateien.html | 26 +++++++------- workspace/entwicklung.html | 26 +++++++------- workspace/index.html | 8 ++--- workspace/kalender.html | 28 +++++++-------- workspace/leistung.html | 26 +++++++------- workspace/personen.html | 26 +++++++------- workspace/profil.html | 28 +++++++-------- workspace/rechte.html | 24 ++++++------- workspace/report.html | 28 +++++++-------- workspace/scouting.html | 26 +++++++------- workspace/start.html | 24 ++++++------- workspace/startcheck.html | 28 +++++++-------- workspace/steckbrief.html | 28 +++++++-------- workspace/talente.html | 26 +++++++------- workspace/team.html | 26 +++++++------- workspace/teamlage.html | 24 ++++++------- workspace/treff-moderation.html | 24 ++++++------- workspace/treff-regeln.html | 29 ++++++++-------- workspace/uebersicht.html | 26 +++++++------- workspace/wissen.html | 26 +++++++------- 41 files changed, 513 insertions(+), 380 deletions(-) diff --git a/server/pruef-neue-seiten.mjs b/server/pruef-neue-seiten.mjs index 4fc3c5e5..57cb1c81 100644 --- a/server/pruef-neue-seiten.mjs +++ b/server/pruef-neue-seiten.mjs @@ -533,6 +533,29 @@ melde("=== Stand das Neue auch wirklich da? ==="); ok(t.split("Ins Team holen").length - 1 === 1, `der Zugangsknopf ebenso (${t.split("Ins Team holen").length - 1})`); + /* ===== DER ROLLENNAME KOMMT ALS DATEN, NICHT AUS DEM SKRIPT ======== + + Seit dem 16.09.2026 steht der Name im Regeltext des Treffs nicht + mehr fest im Browser -- er kommt mit der Antwort des Servers. Der + Grund: Jede Datei unter workspace/ ist ohne Anmeldung abrufbar + (nachgemessen: `talente.js` liefert 200 und 25 KB Quelltext). + + DAS BRAUCHT EINE PRUEFUNG, und zwar genau hier. Im HTML steht als + Ersatzfassung „jemandem aus dem Team" -- ein Satz, der auch ohne + Skript stimmt. Kommt der Name NICHT an, bleibt diese Fassung + stehen, die Seite sieht vollkommen richtig aus, und niemand merkt + es. Ein Platzhalter „…" waere aufgefallen; eine richtige Ersatz- + fassung faellt nicht auf. Deshalb wird nachgesehen, ob wirklich + der Name dasteht. */ + const regeln = gesehen.regeln || ""; + ok(regeln.length > 400, `Regeln: die Seite ist gefüllt (${regeln.length} Zeichen)`); + ok(/sag es einem \S+/.test(regeln), + "Regeln: der Rollenname ist im Kontaktsatz angekommen"); + ok(!/jemandem aus dem Team/.test(regeln), + "die Ersatzfassung steht NICHT mehr da — sie wurde wirklich ersetzt"); + ok(/Pause von bis zu \d+ Tagen/.test(regeln), + "und die Frist steht als Zahl darin, nicht als Platzhalter"); + const hand = gesehen["entwicklung-hand"] || ""; const dogi = gesehen.entwicklung || ""; /* WENN ES SCHIEFGEHT, SOLL DIE MELDUNG SAGEN, WAS STATTDESSEN DA WAR. diff --git a/server/pruef-uebergang.mjs b/server/pruef-uebergang.mjs index 6bc17383..1264198d 100644 --- a/server/pruef-uebergang.mjs +++ b/server/pruef-uebergang.mjs @@ -410,6 +410,51 @@ melde("=== 8. Im Browser ==="); jemanden bestimmt, ohne ihn gefragt zu haben. */ ok(frage.vorbelegt === "", "und keiner ist vorausgewählt — hier muss jemand wirklich wählen"); + /* ===== DER ROLLENNAME STEHT NICHT MEHR IM SKRIPT (16.09.2026) ===== + + `talente.js` hatte `rolle: 'modi'` als festen Text -- und der Server + liefert jede Datei unter workspace/ an jeden aus, der die Adresse + kennt. Nachgemessen am 16.09. auf der echten Seite: ohne jede + Anmeldung 200 und 25 KB Quelltext. + + Jetzt fragt die Seite den Namen ab. Das ist eine Codeänderung an + der Stelle, an der aus einem Talent ein Mensch mit Zugang wird -- + der letzte Schritt des Trichters, und der einzige, den man nicht + zurücknehmen kann. Also wird er gemessen, nicht angenommen. */ + const wissen = await seite.evaluate(async () => { + const a = await fetch("/workspace/api/talente/lage", { credentials: "same-origin" }); + const l = await a.json(); + const quelle = await (await fetch("/workspace/assets/js/talente.js")).text(); + return { + rolle: l?.zugang?.rolle || "", + name: l?.zugang?.name || "", + imSkript: /rolle:\s*'modi'/.test(quelle), + }; + }); + ok(!!wissen.rolle && !!wissen.name, + `der Server sagt der Seite, welcher Zugang entsteht (${wissen.rolle} / ${wissen.name})`); + ok(wissen.imSkript === false, + "und im ausgelieferten Skript steht der Name nicht mehr"); + + /* UND DER KNOPF MUSS TROTZDEM DA SEIN. Der Wert wird jetzt erst beim + Zeichnen gerechnet -- mein erster Entwurf rechnete ihn zu früh, + und dann wäre er dauerhaft falsch gewesen und der Knopf nie + erschienen. Gefunden hat das die Reihenfolge im Quelltext, nicht + der Testlauf; deshalb steht die Frage ab jetzt hier. */ + await seite.goto(`http://127.0.0.1:${PORT}/workspace/talente.html`, { waitUntil: "networkidle" }); + await seite.waitForTimeout(900); + const knopf = await seite.evaluate(() => { + const k = [...document.querySelectorAll(".t-karte")] + .find((x) => x.dataset.stufe === "probe"); + return { + karte: !!k, + text: k?.querySelector(".t-schritt__knopf")?.textContent.trim() || "", + }; + }); + ok(knopf.karte, "eine Karte auf der Probe steht auf der Seite"); + ok(/Zugang anlegen/.test(knopf.text), + `und DogFather sieht den Knopf dafür („${knopf.text}“)`); + ok(konsole.length === 0, konsole.length ? "Fehler im Browser: " + konsole[0].slice(0, 90) : "keine Fehler im Browser"); await browser.close(); diff --git a/server/workspace-entwicklung.js b/server/workspace-entwicklung.js index af54d703..a89018ad 100644 --- a/server/workspace-entwicklung.js +++ b/server/workspace-entwicklung.js @@ -102,6 +102,27 @@ const KARTEN_ROLLEN = ["hand", "modi"]; * begleiten, die er selbst nicht macht. */ const BUDDY_ROLLEN = ["admin", "hand", "modi"]; +/** Welchen Zugang der letzte Schritt des Trichters anlegt. + * + * ER STEHT HIER UND NICHT IM BROWSER (16.09.2026). Die Talente-Seite + * hatte `rolle: 'modi'` als festen Text im Skript -- und jede Datei + * unter `workspace/` liefert der Server an JEDEN aus, der die Adresse + * kennt. Nachgemessen am 16.09.: `talente.js` kommt ohne jede + * Anmeldung mit 200 aus dem offenen Netz, 25 KB Quelltext, der + * Rollenname mittendrin. + * + * Damit stand der verborgene Zugang in einer Datei, die man nicht + * einmal geschenkt bekommen muss -- man kann sie abrufen. Die + * Rollentabelle nebenan sagt seit dem 11.09. genau das Richtige dazu: + * „Der Name steht hier und NICHT in einer Datei, die jeder + * herunterlaedt -- ausgeliefert wird er nur an den, der ihn selbst + * traegt, und an die, die ihn sehen duerfen." + * + * Die Seite fragt ihn deshalb ab, statt ihn zu kennen. Die Antwort + * geht ueber `nurLeitung` -- also nur an DogFather und die rechte + * Hand. */ +const ZUGANG_ROLLE = "modi"; + /* ===================================================================== DIE TABELLEN ===================================================================== */ @@ -898,6 +919,10 @@ entwicklungRouter.get("/workspace/api/talente/lage", (req, res) => { ORDER BY ${ROLLEN_SORTIERUNG}, name COLLATE NOCASE`).all(...BUDDY_ROLLEN), erster_tag: ERSTER_TAG, schicht_weit_tage: SCHICHT_WEIT_TAGE, + /* WELCHEN ZUGANG DER LETZTE SCHRITT ANLEGT -- Schluessel und + Wort. Beides kommt von hier, damit im Browser kein fester Text + dazu steht; siehe ZUGANG_ROLLE oben. */ + zugang: { rolle: ZUGANG_ROLLE, name: ROLLEN_NAME[ZUGANG_ROLLE] ?? ZUGANG_ROLLE }, kandidaten: karten, /* Wie viele auf jeder Stufe liegen -- der Trichter als Zahlen. Abgeleitet, damit er nicht danebenliegen kann. */ diff --git a/server/workspace-treff.js b/server/workspace-treff.js index 67981996..c5a0d495 100644 --- a/server/workspace-treff.js +++ b/server/workspace-treff.js @@ -439,7 +439,25 @@ treffRouter.get("/workspace/api/treff/regeln", (req, res) => { stamm_beitraege: STAMM_BEITRAEGE, anschlag_max: ANSCHLAG_MAX, grund_min: GRUND_MIN, - modi_frist_tage: MODI_FRIST_TAGE, + /* DER NAME KOMMT ALS DATEN MIT (16.09.2026). + + Filipe hat am 11.09. ausdruecklich gewaehlt, dass im Treff der + volle Rollenname neben einem Beitrag steht. Die Regel dazu steht + an ROLLEN_NAME in workspace.js: Der Name wird AUSGELIEFERT, aber + er steht nicht als fester Text in einer Datei, die jeder abrufen + kann -- und abrufen kann sie wirklich jeder, nachgemessen am + 16.09.: `talente.js` kommt ohne Anmeldung mit 200 aus dem Netz. + + Im Regeltext des Treffs stand er trotzdem dreimal fest im + Skript. Jetzt kommt er von hier. + + UND DER SCHLUESSEL HIESS SELBST SO: `modi_frist_tage`. Das + Wortleck-Muster ist `modi` und trifft das nicht, weil danach + ein Unterstrich folgt -- ein Leck durch eine Luecke im Muster, + nicht durch eine Entscheidung. Deshalb heisst das Feld jetzt + nach dem, was es bedeutet. */ + rolle_name: ROLLEN_NAME.modi, + pause_frist_tage: MODI_FRIST_TAGE, stufen: STUFEN.map((s) => ({ schluessel: s, name: STUFEN_NAME[s] })), /* Welche Bretter erst nach Freigabe erscheinen — auch das gehoert in den Regeltext, und auch das soll nicht abschreibbar sein. */ diff --git a/workspace/app.webmanifest b/workspace/app.webmanifest index 7d8274e8..3ffb87b1 100644 --- a/workspace/app.webmanifest +++ b/workspace/app.webmanifest @@ -13,25 +13,25 @@ "theme_color": "#06090f", "icons": [ { - "src": "/assets/img/app-symbole/workspace-192.png?v=202609160146", + "src": "/assets/img/app-symbole/workspace-192.png?v=202609161659", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-512.png?v=202609160146", + "src": "/assets/img/app-symbole/workspace-512.png?v=202609161659", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609160146", + "src": "/assets/img/app-symbole/workspace-192-maskable.png?v=202609161659", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609160146", + "src": "/assets/img/app-symbole/workspace-512-maskable.png?v=202609161659", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/assets/css/entwicklung.css b/workspace/assets/css/entwicklung.css index ddac18f6..ed293405 100644 --- a/workspace/assets/css/entwicklung.css +++ b/workspace/assets/css/entwicklung.css @@ -94,7 +94,7 @@ Bis heute hatte sie keine: Name, Rolle und der Weg zum Notizbrett standen direkt auf der Bühne — also auf einem Foto. Im Bildschirmfoto - lag „Frida · Modi · 2 von 28 angesehen" quer über dem Spicy-Media- + lag die Kopfzeile der Karte quer über dem Spicy-Media- Schriftzug, und der Knopf darunter über einer Chilischote. Das ist genau der Fall, für den die Kontrastmessung ihren dritten diff --git a/workspace/assets/css/gate.css b/workspace/assets/css/gate.css index b179f587..a8c460e4 100644 --- a/workspace/assets/css/gate.css +++ b/workspace/assets/css/gate.css @@ -831,7 +831,7 @@ body.oeffnet .buehne__bild { filter: saturate(1) brightness(1); transition: filt /* .72rem = 11,52 px. Vorher .68rem = 10,88 px und damit unter der Hausuntergrenze von 11,5 px -- gefunden von pruef-handy auf der Zugangswand von Team Dogi ("DogFather", "Team Dogi"). Das ist die - erste Seite, die ein neuer Modi ueberhaupt sieht, und sie wird mit + erste Seite, die jemand aus dem Team ueberhaupt sieht, und sie wird mit dem Daumen bedient. Dieselbe Hebung wie seinerzeit in heim.css. */ .marke { font-size: .72rem; margin-bottom: 3px; } diff --git a/workspace/assets/js/bereich.js b/workspace/assets/js/bereich.js index 5b59ca0d..9cd3eae8 100644 --- a/workspace/assets/js/bereich.js +++ b/workspace/assets/js/bereich.js @@ -255,7 +255,7 @@ WARUM DAS UEBERHAUPT DRANSTEHT: In einem Raum mit Zuschauern und Moderation muss man sehen, wer spricht. "Frida" und "Frida · - Modi" sind zwei verschiedene Saetze -- der zweite ist eine + jemand aus dem Team" sind zwei verschiedene Saetze -- der zweite ist eine Ansage, der erste eine Meinung. BEI MITGLIEDERN STEHT NICHTS DA. "Kessi · Community" waere eine diff --git a/workspace/assets/js/entwicklung.js b/workspace/assets/js/entwicklung.js index 0630ecb0..37f76d03 100644 --- a/workspace/assets/js/entwicklung.js +++ b/workspace/assets/js/entwicklung.js @@ -150,7 +150,7 @@ const ziel = $('ampel'); let a; try { a = await hole('/workspace/api/entwicklung/ampel'); } catch { return; } - if (!a.ok) return; // für einen Modi gibt es sie nicht + if (!a.ok) return; // nicht jede Rolle hat sie const r = await a.json(); ziel.textContent = ''; ziel.hidden = false; @@ -661,7 +661,7 @@ for (const p of lage.personen) ziel.append(personKarte(p, lage)); await ampel(); } else { - /* Für einen Modi ist DIESE Seite seine eigene Karte — das, + /* Für die Beurteilten ist DIESE Seite die eigene Karte — das, was die Leitung über ihn notiert hat, und was er selbst dazu sagt. Nicht „Entwicklung" als Überschrift: Das liest sich wie eine Beurteilung, und darum geht es hier nicht. diff --git a/workspace/assets/js/talente.js b/workspace/assets/js/talente.js index eee17288..07957b3a 100644 --- a/workspace/assets/js/talente.js +++ b/workspace/assets/js/talente.js @@ -55,7 +55,14 @@ }; let lage = null; - let darfAnlegen = false; // darf ich hier einen Modi-Zugang anlegen? + /* WAS ICH ANLEGEN DARF -- die rohe Liste vom Server. + Ausgewertet wird sie erst beim Zeichnen: Welcher Zugang hier + entsteht, sagt `lage`, und die wird NACH dieser Liste geholt. + Ein Wert, der zu frueh gerechnet wird, ist dauerhaft falsch -- + der Knopf waere nie erschienen. */ + let darfListe = null; + const darfAnlegen = () => Array.isArray(darfListe) + && !!lage?.zugang?.rolle && darfListe.includes(lage.zugang.rolle); const offen = new Set(); // welche Karten aufgeklappt sind /* ---- Der Trichter oben ---------------------------------------------- */ @@ -109,10 +116,10 @@ Aus einem Namen wird ein Mensch mit einem Zugang. Deshalb haengt genau daran das Anlegen selbst -- und nicht ein Satz, den man danach von Hand nachbaut. Bis heute stand hier "Zugang in - Personen & Zugaenge anlegen, Rolle Modi", und wer das vergass, + Personen & Zugaenge anlegen", und wer das vergass, hatte eine Karte auf "Im Team" und keinen Menschen darin. */ const zugangNoetig = k.naechste === 'imteam'; - if (k.knopf && k.naechste && (!zugangNoetig || darfAnlegen)) { + if (k.knopf && k.naechste && (!zugangNoetig || darfAnlegen())) { const b = el('button', 'schritt t-schritt__knopf', zugangNoetig ? 'Ins Team holen · Zugang anlegen' : k.knopf); b.type = 'button'; @@ -297,7 +304,7 @@ @returns {object|null} die angelegte Person, oder null bei Abbruch. */ async function zugangAnlegen(k) { - if (!darfAnlegen) { melde('Zugänge legt DogFather an.'); return null; } + if (!darfAnlegen()) { melde('Zugänge legt DogFather an.'); return null; } const vorschlag = String(k.titel || '').split(/[\s,(–-]+/)[0] || ''; const name = prompt( @@ -314,7 +321,11 @@ credentials: 'same-origin', method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify({ name: String(name).trim(), rolle: 'modi' }), + /* WELCHE ROLLE, SAGT DER SERVER (16.09.2026). Hier stand ein + fester Text -- und diese Datei liefert der Server an jeden + aus, der die Adresse kennt. Nachgemessen: ohne Anmeldung + 200, 25 KB Quelltext. */ + body: JSON.stringify({ name: String(name).trim(), rolle: lage.zugang.rolle }), }); } catch { melde('Keine Verbindung – der Zugang wurde nicht angelegt.'); return null; } @@ -336,7 +347,7 @@ einer Meldung, die von selbst verschwindet. Er ist das Einzige auf dieser Seite, das es nur ein einziges Mal gibt. */ function codeZeigen(neu) { - $('code-name').textContent = `${neu.name} · Modi`; + $('code-name').textContent = `${neu.name} · ${lage.zugang.name}`; $('code-wert').textContent = neu.code; $('code-kasten').hidden = false; $('code-kasten').scrollIntoView({ behavior: 'smooth', block: 'center' }); @@ -590,7 +601,7 @@ if (!a.ok) return; const ich = await a.json(); window.werZeigen?.(ich); - darfAnlegen = Array.isArray(ich?.darf_anlegen) && ich.darf_anlegen.includes('modi'); + darfListe = ich?.darf_anlegen; } catch { /* umgeleitet */ } } diff --git a/workspace/assets/js/treff-moderation.js b/workspace/assets/js/treff-moderation.js index 12bdf6a2..cbe8fdd6 100644 --- a/workspace/assets/js/treff-moderation.js +++ b/workspace/assets/js/treff-moderation.js @@ -2,7 +2,7 @@ Meldungen & Maßnahmen im Treff (11.09.2026) Drei Listen und ein Knopf. Die Regeln stehen alle auf dem Server — - wer eine Maßnahme verhängen darf, wie lange ein Modi sperren kann, + wer eine Maßnahme verhängen darf, wie lange das Team sperren kann, ob eine Meldung schon entschieden ist. Diese Datei zeichnet nur und fragt nach. @@ -293,8 +293,8 @@ if (!a.ok) return; const r = await a.json(); $('leiter').textContent = - `Hinweis, dann Pause, dann Ausschluss – in dieser Reihenfolge. Ein Modi kann ` - + `bis zu ${r.modi_frist_tage} Tage geben; alles darüber und jeder dauerhafte ` + `Hinweis, dann Pause, dann Ausschluss – in dieser Reihenfolge. Ein ${r.rolle_name} kann ` + + `bis zu ${r.pause_frist_tage} Tage geben; alles darüber und jeder dauerhafte ` + `Ausschluss ist DogFathers Entscheidung. Wer eine dauerhafte Maßnahme nicht ` + `verhängen darf, kann sie auch nicht aufheben.`; } catch { /* dann bleibt "…" stehen, und das sieht man */ } diff --git a/workspace/assets/js/treff-regeln.js b/workspace/assets/js/treff-regeln.js index 556a3881..819d57b6 100644 --- a/workspace/assets/js/treff-regeln.js +++ b/workspace/assets/js/treff-regeln.js @@ -3,7 +3,7 @@ Dieses Skript schreibt nichts dazu -- es setzt nur die Zahlen ein, die im Text stehen muessen: Fristen, Stufen, Mindestalter, wie lange - ein Modi eine Pause geben darf. + jemand aus dem Team eine Pause geben darf. WARUM UEBERHAUPT EIN SKRIPT FUER FUENF ZAHLEN @@ -71,9 +71,19 @@ + 'der Treff zu einem Stream für Erwachsene gehört.'; } + /* WEN MAN ANSPRICHT -- mit dem Namen aus den Daten. + + Im HTML steht „jemandem aus dem Team". Das ist kein Platzhalter, + sondern eine Fassung, die auch dann stimmt, wenn das Skript nicht + laeuft -- ein Satz mit einem sichtbaren Loch darin waere + schlechter als einer, der etwas allgemeiner ist. */ + if ($('kontakt-wem') && r.rolle_name) { + $('kontakt-wem').textContent = `einem ${r.rolle_name}`; + } + if ($('ausschluss')) { $('ausschluss').textContent = - `Ein Modi kann eine Pause von bis zu ${r.modi_frist_tage} Tagen geben. ` + `Ein ${r.rolle_name} kann eine Pause von bis zu ${r.pause_frist_tage} Tagen geben. ` + 'Alles, was länger gilt, und jeder endgültige Ausschluss ist DogFathers ' + 'Entscheidung. Jede dieser Entscheidungen wird mit Grund festgehalten – ' + 'auch, damit man sie zurücknehmen kann.'; diff --git a/workspace/aufgaben.html b/workspace/aufgaben.html index 43260a6f..a2d0059f 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. --> - - - - - - + + + + + + - + @@ -282,10 +282,10 @@ - - - - - + + + + + diff --git a/workspace/automation.html b/workspace/automation.html index 813f0fee..0b42a79c 100644 --- a/workspace/automation.html +++ b/workspace/automation.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -168,10 +168,10 @@ - - - - - + + + + + diff --git a/workspace/befinden.html b/workspace/befinden.html index a0cb0525..3c0291ac 100644 --- a/workspace/befinden.html +++ b/workspace/befinden.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -105,9 +105,9 @@ - - - - + + + + diff --git a/workspace/bereich.html b/workspace/bereich.html index 264fc074..0bc915cb 100644 --- a/workspace/bereich.html +++ b/workspace/bereich.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -181,14 +181,14 @@ - - - - - - - - - + + + + + + + + + diff --git a/workspace/calls.html b/workspace/calls.html index ba4c43ad..740c8398 100644 --- a/workspace/calls.html +++ b/workspace/calls.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -89,11 +89,11 @@ - - - - - - + + + + + + diff --git a/workspace/chat.html b/workspace/chat.html index 7c8de7d4..31c547aa 100644 --- a/workspace/chat.html +++ b/workspace/chat.html @@ -12,26 +12,26 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - - + + + - + @@ -341,10 +341,10 @@ - - - - - + + + + + diff --git a/workspace/content.html b/workspace/content.html index 6860740c..5391f4c6 100644 --- a/workspace/content.html +++ b/workspace/content.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -179,12 +179,12 @@ - - - - - - - + + + + + + + diff --git a/workspace/crew-index.html b/workspace/crew-index.html index 6d4eaadd..0fd4aa1a 100644 --- a/workspace/crew-index.html +++ b/workspace/crew-index.html @@ -36,15 +36,15 @@ - - - + + + - + @@ -339,6 +339,6 @@ - + diff --git a/workspace/crew.webmanifest b/workspace/crew.webmanifest index 881681bc..f5ec8ff0 100644 --- a/workspace/crew.webmanifest +++ b/workspace/crew.webmanifest @@ -13,25 +13,25 @@ "theme_color": "#06090f", "icons": [ { - "src": "/assets/img/app-symbole/crew-192.png?v=202609160146", + "src": "/assets/img/app-symbole/crew-192.png?v=202609161659", "sizes": "192x192", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/crew-512.png?v=202609160146", + "src": "/assets/img/app-symbole/crew-512.png?v=202609161659", "sizes": "512x512", "type": "image/png", "purpose": "any" }, { - "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609160146", + "src": "/assets/img/app-symbole/crew-192-maskable.png?v=202609161659", "sizes": "192x192", "type": "image/png", "purpose": "maskable" }, { - "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609160146", + "src": "/assets/img/app-symbole/crew-512-maskable.png?v=202609161659", "sizes": "512x512", "type": "image/png", "purpose": "maskable" diff --git a/workspace/dateien.html b/workspace/dateien.html index 67401beb..5413d25b 100644 --- a/workspace/dateien.html +++ b/workspace/dateien.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -108,10 +108,10 @@ - - - - - + + + + + diff --git a/workspace/entwicklung.html b/workspace/entwicklung.html index 10738752..0b52b8bb 100644 --- a/workspace/entwicklung.html +++ b/workspace/entwicklung.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -76,7 +76,7 @@ Sie steht ÜBER den sechs Fragen und UNTER der Liste der anderen: Wer diese Seite als DogFather öffnet, kommt zuerst zu seiner - Arbeit; wer sie als Modi öffnet, sieht die Liste gar nicht und + Arbeit; wer beurteilt wird, sieht die Liste gar nicht und landet direkt hier. Sie erscheint erst, wenn alle gesetzt haben — eine halbe Karte @@ -102,9 +102,9 @@ - - - - + + + + diff --git a/workspace/index.html b/workspace/index.html index 81a97679..55fcdeb9 100644 --- a/workspace/index.html +++ b/workspace/index.html @@ -30,9 +30,9 @@ - - - + + + @@ -401,6 +401,6 @@ - + diff --git a/workspace/kalender.html b/workspace/kalender.html index 67b55e24..fb460ac2 100644 --- a/workspace/kalender.html +++ b/workspace/kalender.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -377,11 +377,11 @@ - - - - - - + + + + + + diff --git a/workspace/leistung.html b/workspace/leistung.html index 59eaf0d6..654d7cb1 100644 --- a/workspace/leistung.html +++ b/workspace/leistung.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -444,10 +444,10 @@ - - - - - + + + + + diff --git a/workspace/personen.html b/workspace/personen.html index 497c728f..dc8a4164 100644 --- a/workspace/personen.html +++ b/workspace/personen.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -423,10 +423,10 @@ - - - - - + + + + + diff --git a/workspace/profil.html b/workspace/profil.html index 9ab15347..56977d0d 100644 --- a/workspace/profil.html +++ b/workspace/profil.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -214,11 +214,11 @@ - - - - - - + + + + + + diff --git a/workspace/rechte.html b/workspace/rechte.html index a4b4247d..b7b7bf1c 100644 --- a/workspace/rechte.html +++ b/workspace/rechte.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -134,9 +134,9 @@ Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, die seit dem 07.09. jede Seite danach absucht. --> - - - - + + + + diff --git a/workspace/report.html b/workspace/report.html index 13c9bf94..3c15531b 100644 --- a/workspace/report.html +++ b/workspace/report.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -106,11 +106,11 @@ - - - - - - + + + + + + diff --git a/workspace/scouting.html b/workspace/scouting.html index 87206890..b35b920b 100644 --- a/workspace/scouting.html +++ b/workspace/scouting.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -173,10 +173,10 @@ - - - - - + + + + + diff --git a/workspace/start.html b/workspace/start.html index 4cf15668..02e67a53 100644 --- a/workspace/start.html +++ b/workspace/start.html @@ -12,21 +12,21 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - + + - + @@ -674,10 +674,10 @@

- - - - - + + + + + diff --git a/workspace/startcheck.html b/workspace/startcheck.html index b4821b9a..3b37d305 100644 --- a/workspace/startcheck.html +++ b/workspace/startcheck.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -85,11 +85,11 @@ - - - - - - + + + + + + diff --git a/workspace/steckbrief.html b/workspace/steckbrief.html index 6ac04f96..ed46d3a2 100644 --- a/workspace/steckbrief.html +++ b/workspace/steckbrief.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -146,11 +146,11 @@ - - - - - - + + + + + + diff --git a/workspace/talente.html b/workspace/talente.html index 8421bcf4..b63c2702 100644 --- a/workspace/talente.html +++ b/workspace/talente.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -53,7 +53,7 @@ - + @@ -110,10 +110,10 @@ - - - - - + + + + + diff --git a/workspace/teamlage.html b/workspace/teamlage.html index 2b64a75a..64db7e9a 100644 --- a/workspace/teamlage.html +++ b/workspace/teamlage.html @@ -7,20 +7,20 @@ - - - - - - - + + + + + + + - + - - - - + + + + diff --git a/workspace/treff-moderation.html b/workspace/treff-moderation.html index 05c97662..f757ea65 100644 --- a/workspace/treff-moderation.html +++ b/workspace/treff-moderation.html @@ -7,14 +7,14 @@ - - - - - - - - + + + + + + + + @@ -110,9 +110,9 @@ - - - - + + + + diff --git a/workspace/treff-regeln.html b/workspace/treff-regeln.html index d83bcfca..506f92fb 100644 --- a/workspace/treff-regeln.html +++ b/workspace/treff-regeln.html @@ -7,18 +7,18 @@ - - - - - - - + + + + + + + - + @@ -132,7 +132,8 @@

Du erreichst uns außerdem direkt: Schreib es auf das Brett - Der Treff oder sag es einem Modi. + Der Treff oder sag es jemandem aus dem Team.

Häufige Fragen und Antworten stehen auf dem Brett @@ -210,10 +211,10 @@ Beim ersten Anlauf fehlte die Zeile auf genau diesen beiden neuen Seiten. Gefunden hat das nicht das Auge, sondern pruef-css-klassen, die seit dem 07.09. jede Seite danach absucht. --> - - - - - + + + + + diff --git a/workspace/uebersicht.html b/workspace/uebersicht.html index a50fa056..ac4720eb 100644 --- a/workspace/uebersicht.html +++ b/workspace/uebersicht.html @@ -12,22 +12,22 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - + + + + - - - + + + - + @@ -149,11 +149,11 @@ - + - - - - + + + + diff --git a/workspace/wissen.html b/workspace/wissen.html index 9e305b8c..a7e7a6f2 100644 --- a/workspace/wissen.html +++ b/workspace/wissen.html @@ -12,20 +12,20 @@ Ton wie die Kopfleiste darunter (#06090f), damit Leiste und Seite eine Flaeche sind statt zweier. --> - - - - - - - + + + + + + + - + @@ -190,10 +190,10 @@ - - - - - + + + + +