Feste Checklisten statt Vorschlaege - in allen vier Bereichen
"Die neuen Sachen in der LIVE-Analyse soll der Creator FEST sehen, auch
schoen kategorisiert, und der Ansprechpartner soll anklicken koennen,
wenn er findet, dass der Creator was verbessern sollte."
DER UMBAU. Vorher waren die Punkte Vorschlaege zum Uebernehmen: Man
holte sie sich und bekam einen eigenen Eintrag. Das war falsch gedacht.
Eine Checkliste, die man erst anfordern muss, ist keine Checkliste --
und schlimmer: Zwei Creator haetten unterschiedliche Listen gehabt, je
nachdem wer sich was geholt hat. Genau das macht einen Vergleich
unmoeglich, und um Vergleich geht es bei einer Betreuung.
Jetzt stehen dieselben Punkte fuer JEDEN fest da, gruppiert:
LIVE 21 Punkte -- vor, waehrend, nach der Sendung
Community 14 Punkte -- Moderation vorbereiten, aufbauen, wenn es kippt
Technik 12 Punkte -- Einrichtung, Ausfall, was geholfen hat
Content 13 Ideen -- nach Saeule (70/20/10) statt nach Ablauf
Jede Gruppe hat einen Satz, der erklaert, wofuer sie da ist. Eine
Ueberschrift allein sagt das nicht.
Was sich je Creator unterscheidet, ist nur der STAND -- und den setzt
die Betreuung: "Passt so" oder "Verbessern". Ein Creator kann sich nicht
selbst bewerten; koennte er es, stuende alles auf gruen. "Verbessern"
verlangt einen Satz, WAS zu verbessern ist -- eine Bewertung, mit der er
nichts anfangen kann, ist nicht streng, sondern nur entmutigend.
Der Creator sieht alles: die Stufe, den Grund, den Namen und den
Zeitpunkt. Und er kann an JEDEM Punkt antworten -- das ist der Kanal,
ueber den er ueberhaupt etwas sagen kann.
Oben steht eine Bilanz in einer Zeile: wie viele passen, wie viele sind
zu verbessern, wie viele hat noch niemand angesehen. Das ist die Frage,
die beide Seiten zuerst haben.
STABILE SCHLUESSEL statt Positionen. Ein Stand haengt am Schluessel des
Punktes ("ton-geprueft"), nicht an seiner Nummer. Haenge er an der
Position, waere beim Einfuegen eines Punktes in der Mitte jede Bewertung
dahinter am falschen Punkt -- und niemand wuerde es merken, weil beides
plausibel aussieht. 64 Punkte haben jetzt einen.
"Offen" loescht den Stand, statt ihn auf "offen" zu setzen: Ein
Datensatz, der nichts aussagt, ist Ballast.
ZWEI EIGENE FEHLER, VON DEN PRUEFUNGEN GEFUNDEN:
1. DAS CSS LAG IN DER FALSCHEN DATEI. Ich hatte es in content.css
geschrieben -- bereich.html laedt die gar nicht. Die Punkte standen
auf drei von vier Seiten nackt und ohne Flaeche da. Es ist derselbe
Fehler wie im August bei .knopf-still, .schalter und .kopf-zeile, und
es gibt seitdem eine Warnung dazu in start.css. Sie hat nichts
genutzt, solange keine Pruefung sie nachhielt.
Jetzt gibt es eine: Sie misst, ob eine Karte wirklich eine Kante und
Polsterung hat -- nicht nur, ob das Element existiert. Gegenprobe
gemacht: Klasse umbenannt, Pruefung meldet "STIL FEHLT".
2. Ein Betreuer sah beim Oeffnen keine Bewertungsknoepfe, weil noch kein
Creator gewaehlt war -- und musste erst raten, dass er oben jemanden
auswaehlen soll. Jetzt nimmt der Server den ersten betreuten Creator,
wenn keiner angegeben ist.
Die alte Oberflaechenpruefung fuer den Vorschlaege-Block wurde entfernt
statt angepasst: Sie verlangte etwas, das es nicht mehr gibt. Eine
dauerhaft rote Pruefung ist schlimmer als keine -- man gewoehnt sich
daran, und beim naechsten echten Fehler sieht niemand hin.
Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -1818,3 +1818,206 @@ body.start #protokoll {
|
||||
text-transform: none; letter-spacing: normal;
|
||||
font-weight: 400; color: var(--text-still);
|
||||
}
|
||||
|
||||
/* Die Checkliste steht auf VIER Seiten (LIVE, Community, Technik,
|
||||
Content-Ideen). Ihr Stil gehoert deshalb hierher und nicht in eine
|
||||
Seitendatei -- genau diesen Fehler habe ich beim ersten Anlauf
|
||||
gemacht: Der Block lag in content.css, und bereich.html laedt die
|
||||
gar nicht. Die Punkte standen dort nackt und ohne Flaeche da.
|
||||
|
||||
Es ist derselbe Fehler wie im August bei .knopf-still, .schalter und
|
||||
.kopf-zeile. Deshalb steht die Warnung weiter oben in dieser Datei --
|
||||
und deshalb hat sie nichts genutzt, solange keine Pruefung sie
|
||||
nachhaelt. Jetzt gibt es eine (pruef-checkliste.mjs misst, ob die
|
||||
Punkte wirklich eine Kante haben). */
|
||||
/* =====================================================================
|
||||
DIE FESTE CHECKLISTE
|
||||
|
||||
Steht auf jeder der vier Seiten (LIVE, Community, Technik,
|
||||
Content-Ideen) und sieht ueberall gleich aus -- es ist dieselbe Sache.
|
||||
|
||||
Drei Zustaende, drei Farben. "Verbessern" ist bewusst warnend und
|
||||
nicht rot: Es ist eine Aufgabe, kein Fehler. Rot waere eine
|
||||
Beschuldigung.
|
||||
===================================================================== */
|
||||
|
||||
.liste-fest { margin: 20px 0 30px; }
|
||||
.liste-fest__kopf {
|
||||
display: flex; align-items: flex-end; justify-content: space-between;
|
||||
gap: 16px; flex-wrap: wrap; margin-bottom: 14px;
|
||||
}
|
||||
.liste-fest__unter {
|
||||
margin: 4px 0 0; max-width: 70ch;
|
||||
font-size: .87rem; line-height: 1.55; color: var(--text-leise);
|
||||
}
|
||||
.liste-fest__wahl { display: grid; gap: 4px; min-width: 0; }
|
||||
|
||||
/* ---------- Die Bilanz oben ---------------------------------------------
|
||||
Wie viele Punkte passen, wie viele sind zu verbessern, wie viele hat
|
||||
noch niemand angesehen. Das ist die Frage, die beide Seiten zuerst
|
||||
haben -- deshalb steht sie vor der Liste und nicht darunter. */
|
||||
.liste-fest__bilanz {
|
||||
display: grid; gap: 9px;
|
||||
grid-template-columns: repeat(auto-fit, minmax(min(150px, 100%), 1fr));
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.bilanz-zahl {
|
||||
--b-ton: #6f89a8;
|
||||
display: flex; align-items: baseline; gap: 9px;
|
||||
padding: 12px 15px;
|
||||
border: 1px solid color-mix(in srgb, var(--b-ton) 26%, var(--rand));
|
||||
border-radius: var(--radius-klein);
|
||||
background:
|
||||
linear-gradient(180deg, color-mix(in srgb, var(--b-ton) 9%, transparent), transparent 60%),
|
||||
var(--flaeche);
|
||||
}
|
||||
.bilanz-zahl[data-stufe="gut"] { --b-ton: #4dab77; }
|
||||
.bilanz-zahl[data-stufe="verbessern"] { --b-ton: #e0a33c; }
|
||||
.bilanz-zahl[data-stufe="offen"] { --b-ton: #6f89a8; }
|
||||
.bilanz-zahl__n {
|
||||
font-size: 1.6rem; font-weight: 700; line-height: 1;
|
||||
color: var(--b-ton); font-variant-numeric: tabular-nums;
|
||||
}
|
||||
.bilanz-zahl__text { font-size: .82rem; color: var(--text-leise); }
|
||||
|
||||
/* ---------- Die Gruppen -------------------------------------------------- */
|
||||
.fest-gruppe { margin-bottom: 24px; }
|
||||
.fest-gruppe__kopf { display: flex; align-items: baseline; gap: 10px; }
|
||||
.fest-gruppe__name {
|
||||
margin: 0; font-size: .96rem; font-weight: 650; color: var(--text);
|
||||
}
|
||||
.fest-gruppe__zahl {
|
||||
padding: 1px 8px;
|
||||
border: 1px solid var(--rand); border-radius: 999px;
|
||||
font-size: .72rem; color: var(--text-still);
|
||||
font-variant-numeric: tabular-nums;
|
||||
}
|
||||
.fest-gruppe__text {
|
||||
margin: 4px 0 12px; max-width: 68ch;
|
||||
font-size: .84rem; line-height: 1.5; color: var(--text-still);
|
||||
}
|
||||
.fest-punkte { display: grid; gap: 9px; }
|
||||
|
||||
/* ---------- Ein Punkt ---------------------------------------------------- */
|
||||
.fest-punkt {
|
||||
--p-ton: #6f89a8;
|
||||
position: relative; overflow: hidden;
|
||||
padding: 13px 15px 12px;
|
||||
border: 1px solid color-mix(in srgb, var(--p-ton) 22%, var(--rand));
|
||||
border-radius: var(--radius-klein);
|
||||
background:
|
||||
linear-gradient(90deg, color-mix(in srgb, var(--p-ton) 7%, transparent), transparent 52%),
|
||||
var(--flaeche);
|
||||
}
|
||||
.fest-punkt::before {
|
||||
content: ""; position: absolute; left: 0; top: 0; bottom: 0; width: 3px;
|
||||
background: linear-gradient(180deg, var(--p-ton),
|
||||
color-mix(in srgb, var(--p-ton) 30%, transparent));
|
||||
}
|
||||
.fest-punkt[data-stufe="gut"] { --p-ton: #4dab77; }
|
||||
/* Warnend, nicht rot: Es ist eine Aufgabe, kein Fehler. Rot waere eine
|
||||
Beschuldigung. */
|
||||
.fest-punkt[data-stufe="verbessern"] { --p-ton: #e0a33c; }
|
||||
.fest-punkt[data-stufe="offen"] { --p-ton: #6f89a8; }
|
||||
|
||||
.fest-punkt__kopf {
|
||||
display: flex; align-items: flex-start; justify-content: space-between;
|
||||
gap: 13px;
|
||||
}
|
||||
.fest-punkt__text { min-width: 0; }
|
||||
.fest-punkt__titel {
|
||||
margin: 0 0 5px; font-size: .93rem; font-weight: 650; color: var(--text);
|
||||
}
|
||||
.fest-punkt__beschreibung {
|
||||
margin: 0; font-size: .84rem; line-height: 1.5; color: var(--text-leise);
|
||||
}
|
||||
/* Der Aufhaenger bei Content-Ideen -- die ersten Sekunden entscheiden,
|
||||
deshalb steht er hervorgehoben und nicht im Fliesstext. */
|
||||
.fest-punkt__hook {
|
||||
margin: 0 0 7px; padding: 8px 11px;
|
||||
border-left: 2px solid var(--ton, var(--akzent));
|
||||
border-radius: 0 6px 6px 0;
|
||||
background: color-mix(in srgb, var(--ton, var(--akzent)) 9%, transparent);
|
||||
font-size: .87rem; line-height: 1.45; color: var(--text);
|
||||
}
|
||||
.fest-punkt__hookschild {
|
||||
display: block; margin-bottom: 2px;
|
||||
font-size: .66rem; letter-spacing: .12em; text-transform: uppercase;
|
||||
color: var(--ton, var(--akzent));
|
||||
}
|
||||
.fest-punkt__marke {
|
||||
display: inline-block; margin-top: 8px; padding: 2px 9px;
|
||||
border: 1px solid var(--rand); border-radius: 999px;
|
||||
font-size: .72rem; color: var(--text-still);
|
||||
}
|
||||
.fest-punkt__marke-stufe {
|
||||
flex: none; padding: 3px 11px;
|
||||
border: 1px solid color-mix(in srgb, var(--p-ton) 36%, transparent);
|
||||
border-radius: 999px;
|
||||
background: color-mix(in srgb, var(--p-ton) 12%, transparent);
|
||||
color: var(--p-ton);
|
||||
font-size: .73rem; font-weight: 600; white-space: nowrap;
|
||||
}
|
||||
|
||||
/* Der Grund in voller Breite -- "verbessern" ohne Grund ist nicht
|
||||
umsetzbar, nur entmutigend. Er darf nicht in eine Ecke. */
|
||||
.fest-punkt__grund {
|
||||
margin-top: 10px; padding: 9px 12px;
|
||||
border-left: 2px solid var(--p-ton);
|
||||
border-radius: 0 6px 6px 0;
|
||||
background: color-mix(in srgb, var(--p-ton) 9%, transparent);
|
||||
}
|
||||
.fest-punkt__grund p { margin: 0; font-size: .86rem; line-height: 1.5; color: var(--text); }
|
||||
.fest-punkt__von {
|
||||
display: block; margin-top: 4px;
|
||||
font-size: .74rem; color: var(--text-still);
|
||||
}
|
||||
|
||||
.fest-punkt__fuss {
|
||||
display: flex; align-items: center; gap: 7px; flex-wrap: wrap;
|
||||
margin-top: 11px;
|
||||
}
|
||||
.stufe-knopf {
|
||||
padding: 6px 13px;
|
||||
border: 1px solid var(--rand); border-radius: 999px;
|
||||
background: rgba(0, 0, 0, .2);
|
||||
color: var(--text-still);
|
||||
font: inherit; font-size: .8rem; cursor: pointer;
|
||||
transition: border-color .18s ease, color .18s ease, background .18s ease;
|
||||
}
|
||||
.stufe-knopf[data-stufe="gut"]:hover,
|
||||
.stufe-knopf[data-stufe="gut"][data-an="ja"] {
|
||||
border-color: rgba(77, 171, 119, .5); color: #6fbd95;
|
||||
background: rgba(77, 171, 119, .13);
|
||||
}
|
||||
.stufe-knopf[data-stufe="verbessern"]:hover,
|
||||
.stufe-knopf[data-stufe="verbessern"][data-an="ja"] {
|
||||
border-color: rgba(224, 163, 60, .5); color: #e0b45c;
|
||||
background: rgba(224, 163, 60, .13);
|
||||
}
|
||||
.fest-punkt__fuss .schritt { margin-left: auto; }
|
||||
|
||||
.punkt-gespraech {
|
||||
margin-top: 11px; padding: 12px 13px;
|
||||
border: 1px solid var(--rand); border-radius: var(--radius-klein);
|
||||
background: rgba(0, 0, 0, .2);
|
||||
}
|
||||
|
||||
@media (max-width: 560px) {
|
||||
.liste-fest__kopf { flex-direction: column; align-items: stretch; }
|
||||
.fest-punkt__kopf { flex-direction: column; }
|
||||
.fest-punkt__marke-stufe { align-self: flex-start; }
|
||||
.fest-punkt__fuss .schritt { margin-left: 0; }
|
||||
.stufe-knopf { flex: 1 1 auto; text-align: center; }
|
||||
}
|
||||
|
||||
/* Die neuen Klassen der festen Checkliste in der Mindestgroesse fuer
|
||||
das Handy -- gemeldet von der Geraetepruefung (10,56 px beim
|
||||
Aufhaenger-Schild). Wer kuenftig eine kleine Marke baut, faellt ihr
|
||||
ebenfalls auf und landet hier. */
|
||||
@media (max-width: 760px) {
|
||||
body.start .fest-punkt__hookschild,
|
||||
body.start .fest-punkt__marke,
|
||||
body.start .fest-punkt__von,
|
||||
body.start .fest-gruppe__zahl { font-size: .75rem; }
|
||||
}
|
||||
|
||||
@@ -205,17 +205,21 @@
|
||||
Welcher Abschnitt gezeigt wird, richtet sich nach dem gewaehlten
|
||||
Filter. Ohne Filter die Vorbereitung -- das ist der Teil, ohne den
|
||||
die anderen beiden gar nicht erst sinnvoll sind. */
|
||||
/* Die FESTE Liste -- nicht mehr Vorschlaege zum Uebernehmen.
|
||||
|
||||
Der Unterschied ist grundlegend: Eine Liste, die man sich erst
|
||||
holen muss, ist keine Checkliste. Und zwei Creator haetten
|
||||
unterschiedliche Listen gehabt, je nachdem wer sich was geholt
|
||||
hat -- was einen Vergleich unmoeglich macht, und um Vergleich
|
||||
geht es bei einer Betreuung.
|
||||
|
||||
Jetzt stehen dieselben Punkte fuer alle fest da, gruppiert. Was
|
||||
sich unterscheidet, ist der Stand je Creator. */
|
||||
async function vorlagenZeigen() {
|
||||
const behaelter = $('vorlagen');
|
||||
if (!behaelter || bereich !== 'live' || !window.vorlagenBlock) return;
|
||||
const abschnitt = ['vorbereitung', 'mitschrift', 'auswertung'].includes(filter)
|
||||
? filter : 'vorbereitung';
|
||||
await window.vorlagenBlock(behaelter, {
|
||||
art: 'live',
|
||||
unterart: abschnitt,
|
||||
creatorId: creatorWahl(),
|
||||
danach: laden,
|
||||
});
|
||||
if (!behaelter || !window.checkliste) return;
|
||||
if (!['live', 'community', 'technik'].includes(bereich)) return;
|
||||
await window.checkliste(behaelter, bereich);
|
||||
}
|
||||
|
||||
/* Fuer wen wird uebernommen? Ein Creator immer fuer sich (der Server
|
||||
|
||||
@@ -0,0 +1,318 @@
|
||||
/* ===================================================================
|
||||
Die feste Checkliste — steht immer da, für jeden gleich.
|
||||
|
||||
Ersetzt die vorherigen "Vorschläge zum Übernehmen". Der Unterschied
|
||||
ist grundlegend: Eine Liste, die man sich erst holen muss, ist keine
|
||||
Checkliste. Und zwei Creator hätten unterschiedliche Listen gehabt,
|
||||
je nachdem, wer sich was geholt hat -- was einen Vergleich unmöglich
|
||||
macht, und um Vergleich geht es bei einer Betreuung.
|
||||
|
||||
Jetzt: dieselben Punkte für alle, gruppiert. Was sich unterscheidet,
|
||||
ist der STAND je Creator -- und den setzt die Betreuung.
|
||||
|
||||
Drei Zustände, drei Farben:
|
||||
offen noch nicht angesehen
|
||||
gut passt so
|
||||
verbessern mit dem Satz, WAS zu verbessern ist
|
||||
|
||||
Der Creator sieht alles, kann aber nichts davon setzen. Antworten
|
||||
kann er -- über die Nachrichten an jedem Punkt.
|
||||
=================================================================== */
|
||||
(() => {
|
||||
'use strict';
|
||||
|
||||
const el = (tag, klasse, text) => {
|
||||
const k = document.createElement(tag);
|
||||
if (klasse) k.className = klasse;
|
||||
if (text !== undefined) k.textContent = text;
|
||||
return k;
|
||||
};
|
||||
|
||||
async function hole(pfad, optionen = {}) {
|
||||
const a = await fetch(pfad, { credentials: 'same-origin', ...optionen });
|
||||
if (a.status === 401) { location.assign('/workspace/'); throw new Error('abgemeldet'); }
|
||||
return a;
|
||||
}
|
||||
|
||||
const wann = (iso) => (iso
|
||||
? new Date(iso).toLocaleString('de-DE',
|
||||
{ day: '2-digit', month: '2-digit', hour: '2-digit', minute: '2-digit' })
|
||||
: '');
|
||||
|
||||
/* Welcher Creator wird gerade angesehen -- bleibt über Neuaufbauten
|
||||
hinweg stehen, sonst springt die Auswahl bei jeder Bewertung zurück
|
||||
auf den ersten. */
|
||||
const gewaehlt = {};
|
||||
|
||||
window.checkliste = async function (behaelter, bereich) {
|
||||
if (!behaelter) return;
|
||||
let daten;
|
||||
try {
|
||||
const wahl = gewaehlt[bereich] ? `?creator_id=${gewaehlt[bereich]}` : '';
|
||||
const a = await hole(`/workspace/api/checkliste/${bereich}${wahl}`);
|
||||
if (!a.ok) return;
|
||||
daten = await a.json();
|
||||
} catch { return; }
|
||||
|
||||
behaelter.textContent = '';
|
||||
const block = el('section', 'liste-fest');
|
||||
|
||||
/* ---- Kopf ---- */
|
||||
const kopf = el('div', 'liste-fest__kopf');
|
||||
const t = el('div', null);
|
||||
t.append(el('p', 'feldschild', 'Feste Punkte'));
|
||||
t.append(el('p', 'liste-fest__unter',
|
||||
daten.darf_bewerten
|
||||
? 'Diese Punkte gelten für alle. Markiere, was gut läuft und was der '
|
||||
+ 'Creator noch verbessern sollte – er sieht es sofort.'
|
||||
: 'Diese Punkte gelten für alle. Deine Betreuung markiert hier, was gut '
|
||||
+ 'läuft und was du noch verbessern solltest. Antworten kannst du an '
|
||||
+ 'jedem Punkt.'));
|
||||
kopf.append(t);
|
||||
|
||||
if (daten.darf_bewerten && daten.creatoren.length) {
|
||||
const feld = el('div', 'liste-fest__wahl');
|
||||
feld.append(el('label', 'feld-schild', 'Creator'));
|
||||
const s = el('select');
|
||||
for (const c of daten.creatoren) s.append(new Option(c.name, String(c.id)));
|
||||
if (daten.creator_id) s.value = String(daten.creator_id);
|
||||
s.addEventListener('change', () => {
|
||||
gewaehlt[bereich] = Number(s.value);
|
||||
window.checkliste(behaelter, bereich);
|
||||
});
|
||||
feld.append(s);
|
||||
kopf.append(feld);
|
||||
if (!gewaehlt[bereich] && daten.creatoren.length) {
|
||||
gewaehlt[bereich] = Number(s.value);
|
||||
}
|
||||
}
|
||||
block.append(kopf);
|
||||
|
||||
/* ---- Fortschritt in einer Zeile ----
|
||||
Wie viele Punkte sind angesehen, wie viele stehen auf "noch
|
||||
verbessern"? Das ist die Frage, die beide zuerst haben. */
|
||||
const alle = daten.gruppen.flatMap((g) => g.punkte);
|
||||
const zuTun = alle.filter((p) => daten.stand[p.schluessel]?.stufe === 'verbessern').length;
|
||||
const gut = alle.filter((p) => daten.stand[p.schluessel]?.stufe === 'gut').length;
|
||||
if (daten.creator_id || !daten.darf_bewerten) {
|
||||
const bilanz = el('div', 'liste-fest__bilanz');
|
||||
bilanz.append(zahl(gut, 'passt so', 'gut'));
|
||||
bilanz.append(zahl(zuTun, zuTun === 1 ? 'zu verbessern' : 'zu verbessern', 'verbessern'));
|
||||
bilanz.append(zahl(alle.length - gut - zuTun, 'noch offen', 'offen'));
|
||||
block.append(bilanz);
|
||||
}
|
||||
|
||||
/* ---- Die Gruppen ---- */
|
||||
for (const g of daten.gruppen) {
|
||||
const abschnitt = el('section', 'fest-gruppe');
|
||||
const gk = el('div', 'fest-gruppe__kopf');
|
||||
gk.append(el('h3', 'fest-gruppe__name', g.name));
|
||||
gk.append(el('span', 'fest-gruppe__zahl', String(g.punkte.length)));
|
||||
abschnitt.append(gk);
|
||||
if (g.text) abschnitt.append(el('p', 'fest-gruppe__text', g.text));
|
||||
|
||||
const liste = el('div', 'fest-punkte');
|
||||
for (const p of g.punkte) {
|
||||
liste.append(punktBauen(p, daten, bereich, behaelter));
|
||||
}
|
||||
abschnitt.append(liste);
|
||||
block.append(abschnitt);
|
||||
}
|
||||
|
||||
behaelter.append(block);
|
||||
behaelter.hidden = false;
|
||||
};
|
||||
|
||||
function zahl(n, text, stufe) {
|
||||
const k = el('div', 'bilanz-zahl');
|
||||
k.dataset.stufe = stufe;
|
||||
k.append(el('span', 'bilanz-zahl__n', String(n)));
|
||||
k.append(el('span', 'bilanz-zahl__text', text));
|
||||
return k;
|
||||
}
|
||||
|
||||
function punktBauen(p, daten, bereich, behaelter) {
|
||||
const stand = daten.stand[p.schluessel];
|
||||
const stufe = stand?.stufe || 'offen';
|
||||
|
||||
const k = el('article', 'fest-punkt');
|
||||
k.dataset.stufe = stufe;
|
||||
|
||||
const kopf = el('div', 'fest-punkt__kopf');
|
||||
const links = el('div', 'fest-punkt__text');
|
||||
links.append(el('h4', 'fest-punkt__titel', p.titel));
|
||||
|
||||
/* Bei Content-Ideen ist der Aufhänger das Wichtigste -- die ersten
|
||||
Sekunden entscheiden. Er steht deshalb hervorgehoben. */
|
||||
if (p.hook) {
|
||||
const h = el('p', 'fest-punkt__hook');
|
||||
h.append(el('span', 'fest-punkt__hookschild', 'Aufhänger'));
|
||||
h.append(document.createTextNode(p.hook));
|
||||
links.append(h);
|
||||
}
|
||||
if (p.text) links.append(el('p', 'fest-punkt__beschreibung', p.text));
|
||||
if (p.format) links.append(el('span', 'fest-punkt__marke', p.format));
|
||||
kopf.append(links);
|
||||
|
||||
/* Die Marke rechts -- immer sichtbar, auch für den Creator, auch
|
||||
wenn sie "noch offen" lautet. Er soll sehen, wo er steht. */
|
||||
const marke = el('span', 'fest-punkt__marke-stufe',
|
||||
stufe === 'gut' ? 'Passt so'
|
||||
: stufe === 'verbessern' ? 'Verbessern' : 'Offen');
|
||||
kopf.append(marke);
|
||||
k.append(kopf);
|
||||
|
||||
/* Der Grund steht in voller Breite -- "verbessern" ohne Grund ist
|
||||
nicht umsetzbar, nur entmutigend. */
|
||||
if (stand?.begruendung) {
|
||||
const g = el('div', 'fest-punkt__grund');
|
||||
g.append(el('p', null, stand.begruendung));
|
||||
g.append(el('span', 'fest-punkt__von',
|
||||
`${stand.von_name || ''} · ${wann(stand.am)}`));
|
||||
k.append(g);
|
||||
}
|
||||
|
||||
/* ---- Was man tun kann ---- */
|
||||
const fuss = el('div', 'fest-punkt__fuss');
|
||||
|
||||
if (daten.darf_bewerten && daten.creator_id) {
|
||||
for (const [wert, name] of [['gut', 'Passt so'], ['verbessern', 'Verbessern']]) {
|
||||
const b = el('button', 'stufe-knopf', name);
|
||||
b.type = 'button';
|
||||
b.dataset.stufe = wert;
|
||||
if (stufe === wert) b.dataset.an = 'ja';
|
||||
b.addEventListener('click', async () => {
|
||||
/* Ein zweiter Klick auf dieselbe Stufe nimmt sie zurück --
|
||||
sonst gäbe es keinen Weg zurück auf "offen". */
|
||||
const neu = stufe === wert ? 'offen' : wert;
|
||||
let grund = stand?.begruendung || '';
|
||||
if (neu === 'verbessern') {
|
||||
grund = prompt(`„${p.titel}“\n\nWas genau soll verbessert werden?\n\n`
|
||||
+ 'Ohne diesen Satz kann er nichts damit anfangen.', grund) || '';
|
||||
if (grund.trim().length < 5) return;
|
||||
}
|
||||
b.disabled = true;
|
||||
try {
|
||||
const a = await hole(`/workspace/api/checkliste/${bereich}/${p.schluessel}`, {
|
||||
method: 'PUT',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ stufe: neu, begruendung: grund,
|
||||
creator_id: daten.creator_id }),
|
||||
});
|
||||
if (!a.ok) {
|
||||
alert((await a.json().catch(() => ({}))).fehler || 'Ging nicht.');
|
||||
b.disabled = false;
|
||||
return;
|
||||
}
|
||||
window.checkliste(behaelter, bereich);
|
||||
} catch { b.disabled = false; }
|
||||
});
|
||||
fuss.append(b);
|
||||
}
|
||||
}
|
||||
|
||||
/* Rückmeldungen -- für beide Seiten. */
|
||||
const anzahl = daten.nachrichten[p.schluessel] || 0;
|
||||
const reden = el('button', 'schritt',
|
||||
anzahl ? `Rückmeldung (${anzahl})` : 'Rückmeldung');
|
||||
reden.type = 'button';
|
||||
reden.addEventListener('click', () => gespraech(k, bereich, p, daten, reden));
|
||||
fuss.append(reden);
|
||||
|
||||
/* Bei Punkten, wo Hilfe angeboten wird, kann der Creator sie hier
|
||||
anfordern -- daraus wird eine Aufgabe bei seinem Betreuer. */
|
||||
if (p.hilfe && !daten.darf_bewerten && window.hilfeKnopf) {
|
||||
fuss.append(window.hilfeKnopf(p.titel, daten.creator_id));
|
||||
}
|
||||
|
||||
k.append(fuss);
|
||||
return k;
|
||||
}
|
||||
|
||||
/* ---------- Das Gespräch an einem Punkt -------------------------------- */
|
||||
|
||||
async function gespraech(karte, bereich, p, daten, knopf) {
|
||||
const offen = karte.querySelector('.punkt-gespraech');
|
||||
if (offen) { offen.remove(); return; }
|
||||
|
||||
let n;
|
||||
try {
|
||||
const a = await hole(
|
||||
`/workspace/api/checkliste/${bereich}/${p.schluessel}/nachrichten`
|
||||
+ (daten.creator_id ? `?creator_id=${daten.creator_id}` : ''));
|
||||
if (!a.ok) return;
|
||||
n = await a.json();
|
||||
} catch { return; }
|
||||
|
||||
const kasten = el('div', 'punkt-gespraech');
|
||||
const verlauf = el('div', 'nachrichten');
|
||||
zeichne(verlauf, n.nachrichten, n.ich);
|
||||
kasten.append(verlauf);
|
||||
|
||||
const form = el('form', 'nachricht-neu');
|
||||
const feld = el('textarea');
|
||||
feld.rows = 2;
|
||||
feld.maxLength = 2000;
|
||||
feld.placeholder = daten.darf_bewerten
|
||||
? 'Rückmeldung an den Creator …'
|
||||
: 'Frage oder Antwort an deine Betreuung …';
|
||||
form.append(feld);
|
||||
const senden = el('button', 'knopf knopf--klein', 'Senden');
|
||||
senden.type = 'submit';
|
||||
form.append(senden);
|
||||
|
||||
form.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
if (!feld.value.trim()) return;
|
||||
senden.disabled = true;
|
||||
try {
|
||||
const a = await hole(
|
||||
`/workspace/api/checkliste/${bereich}/${p.schluessel}/nachrichten`, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify({ text: feld.value, creator_id: daten.creator_id }),
|
||||
});
|
||||
if (!a.ok) { alert((await a.json().catch(() => ({}))).fehler || 'Ging nicht.'); return; }
|
||||
const r = await a.json();
|
||||
feld.value = '';
|
||||
zeichne(verlauf, r.nachrichten, n.ich);
|
||||
knopf.textContent = `Rückmeldung (${r.nachrichten.length})`;
|
||||
} catch { /* umgeleitet */ } finally { senden.disabled = false; }
|
||||
});
|
||||
kasten.append(form);
|
||||
karte.append(kasten);
|
||||
feld.focus();
|
||||
}
|
||||
|
||||
function zeichne(ziel, liste, ichId) {
|
||||
ziel.textContent = '';
|
||||
if (!liste.length) {
|
||||
ziel.append(el('p', 'nachrichten__leer', 'Noch keine Rückmeldung zu diesem Punkt.'));
|
||||
return;
|
||||
}
|
||||
for (const n of liste) {
|
||||
const z = el('div', 'nachricht');
|
||||
if (n.von === ichId) z.dataset.eigen = 'ja';
|
||||
const kopf = el('div', 'nachricht__kopf');
|
||||
kopf.append(el('span', 'nachricht__von', n.von_name || 'Unbekannt'));
|
||||
kopf.append(el('span', 'nachricht__wann', wann(n.am)));
|
||||
if (n.von === ichId) {
|
||||
const weg = el('button', 'nachricht__weg', '×');
|
||||
weg.type = 'button';
|
||||
weg.title = 'Eigene Nachricht zurücknehmen';
|
||||
weg.addEventListener('click', async () => {
|
||||
if (!confirm('Diese Nachricht zurücknehmen?')) return;
|
||||
try {
|
||||
const a = await hole(`/workspace/api/checkliste/nachricht/${n.id}`,
|
||||
{ method: 'DELETE' });
|
||||
if (a.ok) z.remove();
|
||||
} catch { /* umgeleitet */ }
|
||||
});
|
||||
kopf.append(weg);
|
||||
}
|
||||
z.append(kopf);
|
||||
z.append(el('p', 'nachricht__text', n.text));
|
||||
ziel.append(z);
|
||||
}
|
||||
}
|
||||
})();
|
||||
@@ -443,14 +443,12 @@
|
||||
|
||||
/* Fertige Ideen zum Uebernehmen. Steht ueber der Strecke, damit
|
||||
jemand mit leeren Spalten nicht erst daran vorbeiscrollen muss. */
|
||||
/* Die feste Liste der Ideen -- nach Saeule gruppiert (70/20/10).
|
||||
Sie steht fuer jeden gleich da; was sich unterscheidet, ist,
|
||||
was die Betreuung dazu vermerkt hat. */
|
||||
const behaelter = document.getElementById('vorlagen');
|
||||
if (behaelter && window.vorlagenBlock) {
|
||||
const wahl = document.getElementById('creator-wahl');
|
||||
window.vorlagenBlock(behaelter, {
|
||||
art: 'content',
|
||||
creatorId: wahl && wahl.value ? Number(wahl.value) : null,
|
||||
danach: laden,
|
||||
});
|
||||
if (behaelter && window.checkliste) {
|
||||
window.checkliste(behaelter, 'content');
|
||||
}
|
||||
|
||||
filterBauen();
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -139,9 +139,9 @@
|
||||
</form>
|
||||
</dialog>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/aufgaben.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/automation.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -132,9 +132,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/automation.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+12
-11
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/bereich.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -115,12 +115,13 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/ampel.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/schulung.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereich.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/calls.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -54,10 +54,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/calls.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+10
-9
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/content.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -162,10 +162,11 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/content.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/checkliste.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/vorlagen.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/content.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/dateien.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -93,9 +93,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/dateien.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
type="image/webp" media="(max-width: 899px)" />
|
||||
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="gate">
|
||||
@@ -143,6 +143,6 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/gate.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/gate.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/kalender.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -147,9 +147,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kalender.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/personen.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -121,9 +121,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/personen.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -175,10 +175,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/profil.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/report.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -91,10 +91,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/report.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/report.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/scouting.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -124,9 +124,9 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/scouting.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -99,9 +99,9 @@
|
||||
</p>
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/start.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/start.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/startcheck.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -70,10 +70,10 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/ki.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/ki.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/startcheck.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/profil.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -85,9 +85,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/steckbrief.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,9 +7,9 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/uebersicht.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -57,9 +57,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/uebersicht.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
@@ -7,10 +7,10 @@
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="theme-color" content="#05070d" />
|
||||
<link rel="icon" href="assets/img/favicon.png" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609011649" />
|
||||
<link rel="stylesheet" href="assets/css/gate.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/start.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/aufgaben.css?v=202609011707" />
|
||||
<link rel="stylesheet" href="assets/css/wissen.css?v=202609011707" />
|
||||
</head>
|
||||
|
||||
<body class="start">
|
||||
@@ -175,9 +175,9 @@
|
||||
|
||||
</main>
|
||||
|
||||
<script src="assets/js/wahl.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609011649" defer></script>
|
||||
<script src="assets/js/wahl.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/bereiche.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/kopf.js?v=202609011707" defer></script>
|
||||
<script src="assets/js/wissen.js?v=202609011707" defer></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user