Die Knoepfe stehen nicht mehr vor dem Text -- und verteilt wird bei "Eure Aufgaben"
ZWEI WUENSCHE, EINE URSACHE: beide gehen auf den Block "Noch jemanden dazunehmen" zurueck, der am 21.09. ins Aufgabenformular kam. 1. "DIE ZWEI BUTTONS SOLLEN NICHT VOR DEM TEXT STEHEN" Gemessen bei 1280 px: "Anlegen" und "Abbrechen" lagen ueber zwei Hinweisen, mit 363x27 und 363x10 Pixeln Ueberlappung. Die Ursache ist eine Regel vom 17.09., und sie ist richtig: Der Hinweis haengt ABSOLUT unter seinem Feld, damit die Eingaben auf einer Linie bleiben. Was aus dem Fluss genommen wird, belegt aber keinen Platz -- solange darunter nur der Rasterabstand kam, fiel das nicht auf. Mit dem neuen Knopf wurde die Zelle hoeher, und der Hinweis wanderte mit, direkt auf die Knoepfe. Jetzt bekommt das Raster unter sich 44 px, wenn es einen haengenden Hinweis gibt (`:has()`, nicht pauschal -- ein Formular ohne Hinweis bekaeme sonst Leere geschenkt). Die Hoehe ist gemessen: ein Hinweis ist zweizeilig 35 px hoch plus 4 px Abstand. UND EIN ZWEITER FUND AN DERSELBEN STELLE: Der Block sass IN der Zelle "Wer macht es?". Dadurch stand deren Eingabe bei 780..824, die Nachbarin "Fuer welchen Kanal?" bei 833..877 -- 53 Pixel Versatz, und genau das sieht man als "verzogen". Er steht jetzt als eigene Rasterzeile hinter beiden; danach sind sie wieder buendig. Als eigene Zeile ist er ausserdem ehrlicher: "Noch jemanden dazunehmen" ist ein zweiter Schritt, kein Teil des ersten. Gefunden hat beides pruef-formulare, die seit dem 07.09. auf buendige Unterkanten prueft und seit dem 21.09. rot war. 2. "BEI EURE AUFGABEN DIE AUFGABEN VERTEILEN" Filipe, zum wiederholten Mal -- und so stand es auch im Auftrag vom 21.09. (Abschnitt 2). Auf "Eure Aufgaben" steht jetzt ein Band "Aufgabe verteilen". Es nimmt die gerade gewaehlte Person mit: "Aufgabe fuer Kessi" fuehrt auf das Aufgabenbrett, oeffnet das Formular und traegt sie ein. EIN WEG, KEIN ZWEITES FORMULAR. Zwei Formulare fuer dieselbe Sache waeren zwei Gelegenheiten, eines zu vergessen -- und man wuesste nie, welches das richtige ist. Beim Bauen gemessen: Das Band blieb unsichtbar, bis man eine Person anklickte -- `window.__ich` kommt ueber das Netz und steht beim ersten Aufruf noch nicht. Jetzt wird darauf gewartet, laengstens drei Sekunden, statt eine Zahl aus dem Kopf zu setzen. Zwei Pruefungen waren selbst kaputt: pruef-formulare zaehlte ein Eingabefeld mit, das in einem zugeklappten Block liegt und Hoehe 0 hat -- ein Feld, das man nicht sieht, kann nicht schief stehen. pruef-entwicklung verlangte, dass ein Modi "Eure Aufgaben" NICHT bekommt; das hat Filipe heute umgedreht. Geprueft: pruef-formulare 19/0 (war 18 ok / 1 FEHL), pruef-entwicklung 48/0 (war 45/1), pruef-aufgabenbrett 49/0, pruef-css-klassen 30/0. Der ganze Weg am Bildschirm gemessen: Band sichtbar, Person mitgenommen, Formular offen, richtige Person gewaehlt, keine Skriptfehler.
This commit is contained in:
@@ -1274,6 +1274,39 @@
|
||||
Server, und vorher weiss diese Datei es nicht. */
|
||||
$('neu-oeffnen').hidden = !darfAnlegen();
|
||||
|
||||
/* VON "EURE AUFGABEN" HERGEKOMMEN (22.09.2026).
|
||||
----------------------------------------------------------------
|
||||
Dort steht der Knopf "Aufgabe fuer <Name>". Er fuehrt hierher
|
||||
und bringt zwei Dinge mit: dass das Formular offen sein soll und
|
||||
fuer wen. Ohne das muesste man nach dem Klick noch zweimal
|
||||
suchen -- und genau solche Zwischenschritte waren gemeint mit
|
||||
"es darf keine unnoetigen schritte geben". */
|
||||
try {
|
||||
const frage = new URLSearchParams(location.search);
|
||||
if (frage.get('neu') === '1' && darfAnlegen()) {
|
||||
formularUmschalten(true);
|
||||
const fuer = frage.get('fuer');
|
||||
if (fuer) {
|
||||
/* Die Auswahl steht erst, wenn die Leute geladen sind --
|
||||
deshalb nachtraeglich und nur, wenn es die Person gibt. */
|
||||
const setzen = () => {
|
||||
const f = $('f-verant');
|
||||
if (!f) return false;
|
||||
if (![...f.options].some((o) => o.value === fuer)) return false;
|
||||
f.value = fuer;
|
||||
f.dispatchEvent(new Event('change'));
|
||||
return true;
|
||||
};
|
||||
if (!setzen()) {
|
||||
let versuche = 0;
|
||||
const uhr = setInterval(() => {
|
||||
if (setzen() || ++versuche > 40) clearInterval(uhr);
|
||||
}, 150);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (f) { /* unbrauchbare Adresse -> dann eben ohne */ }
|
||||
|
||||
/* EINE BEDINGUNG, NICHT ZWEI (berichtigt 21.09.2026).
|
||||
|
||||
Hier stand `LEITUNG.has(ich.rolle)` -- eine Menge aus
|
||||
|
||||
@@ -223,6 +223,10 @@
|
||||
dann scrollte, wusste nicht mehr, wen er offen hat. */
|
||||
k.setAttribute('aria-pressed', 'false');
|
||||
k.dataset.person = String(p.id);
|
||||
/* Der Name als Angabe, nicht nur als Text: Das Verteil-Band nennt
|
||||
ihn ("Aufgabe fuer Kessi"), und `textContent` der ganzen Kachel
|
||||
waere Name + Rolle + drei Zahlen. */
|
||||
k.dataset.name = p.name;
|
||||
k.append(el('span', 'e-person__name', p.name));
|
||||
k.append(el('span', 'e-person__rolle', p.rolle_name));
|
||||
|
||||
@@ -293,6 +297,54 @@
|
||||
Höhe gehalten: Der Neuaufbau kann die Karte kürzer oder länger
|
||||
machen (eine Zeile „Schritt läuft“ kommt dazu), und dann rutscht
|
||||
alles darunter weg. */
|
||||
/* DAS VERTEIL-BAND (22.09.2026).
|
||||
------------------------------------------------------------------
|
||||
Es steht nur da, wenn die Person auch verteilen darf -- gefragt
|
||||
wird `darf_verteilen` vom Server (ueber window.__ich, das kopf.js
|
||||
ohnehin holt). Ein Rollenname stuende hier in einer Datei, die
|
||||
jeder herunterlaedt, und waere am Tag der naechsten Aenderung
|
||||
falsch. */
|
||||
function verteilBandZeigen(personId, name) {
|
||||
const band = $('verteilen-band');
|
||||
if (!band) return;
|
||||
/* `window.__ich` KOMMT SPAETER ALS DIESE SEITE (22.09.2026).
|
||||
----------------------------------------------------------------
|
||||
kopf.js holt die Auskunft ueber das Netz; beim ersten Aufruf hier
|
||||
steht sie noch nicht. Gemessen: Das Band blieb unsichtbar, bis
|
||||
man eine Person anklickte -- also genau dann, wenn man es zum
|
||||
ersten Mal gebraucht haette.
|
||||
|
||||
Ein festes `setTimeout` waere eine Zahl aus dem Kopf. Gewartet
|
||||
wird stattdessen darauf, dass die Auskunft DA ist, und laengstens
|
||||
drei Sekunden. */
|
||||
if (window.__ich === undefined) {
|
||||
let versuche = 0;
|
||||
const uhr = setInterval(() => {
|
||||
if (window.__ich !== undefined || ++versuche > 30) {
|
||||
clearInterval(uhr);
|
||||
if (window.__ich !== undefined) verteilBandZeigen(personId, name);
|
||||
}
|
||||
}, 100);
|
||||
return;
|
||||
}
|
||||
const darf = window.__ich?.darf_verteilen === true;
|
||||
band.hidden = !darf;
|
||||
if (!darf) return;
|
||||
const knopf = $('verteilen-knopf');
|
||||
const satz = $('verteilen-satz');
|
||||
if (personId) {
|
||||
knopf.href = `aufgaben.html?neu=1&fuer=${encodeURIComponent(personId)}`;
|
||||
knopf.textContent = name ? `Aufgabe für ${name}` : 'Aufgabe anlegen';
|
||||
satz.textContent = name
|
||||
? `Die Aufgabe landet direkt bei ${name} — mit einer Meldung.`
|
||||
: 'Die Aufgabe landet direkt bei der gewählten Person.';
|
||||
} else {
|
||||
knopf.href = 'aufgaben.html?neu=1';
|
||||
knopf.textContent = 'Aufgabe anlegen';
|
||||
satz.textContent = 'Wähl links jemanden aus — dann legst du die Aufgabe direkt für ihn an.';
|
||||
}
|
||||
}
|
||||
|
||||
async function karte(id, springen = false) {
|
||||
offen = id;
|
||||
/* WER IST GERADE OFFEN? Die Antwort gehoert auf die Kacheln, nicht
|
||||
@@ -302,6 +354,10 @@
|
||||
kachel.setAttribute('aria-pressed',
|
||||
kachel.dataset.person === String(id) ? 'true' : 'false');
|
||||
}
|
||||
{
|
||||
const k = document.querySelector(`#personen .e-person[data-person="${id}"]`);
|
||||
verteilBandZeigen(id, k ? (k.dataset.name || k.textContent.trim()) : null);
|
||||
}
|
||||
const ziel = $('karte');
|
||||
const vorherY = window.scrollY;
|
||||
ziel.hidden = false;
|
||||
@@ -804,6 +860,9 @@
|
||||
stufen = lage.stufen;
|
||||
|
||||
if (lage.leitung) {
|
||||
/* Das Verteil-Band gehoert zur Leitungssicht -- ein Modi sieht
|
||||
hier nur sich selbst und verteilt nichts. */
|
||||
verteilBandZeigen(null, null);
|
||||
$('personen-block').hidden = false;
|
||||
const ziel = $('personen');
|
||||
ziel.textContent = '';
|
||||
|
||||
Reference in New Issue
Block a user