Kommentare je Gewerk klar getrennt, abgewählte Gewerke ausgeblendet
- Kommentare mehrerer Gewerke mit Überschrift und Linie: Gewerk in seiner Farbe, rechts Verfasser und Zeit, darunter der Text (Projekt-Dashboard, Projektliste, Wandtafel, Verlauf-Kacheln) - Behoben: Im Projekt-Dashboard erschienen Kommentare von Gewerken, die das Projekt nicht mehr hat (z. B. HLS bei 21-4030); Anzeige und Verlauf zeigen nur noch Gewerke des Projekts - Sitzungswechsel übernimmt nur noch Kommentare der Gewerke des Projekts Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
e291ca8438
commit
4ac3d8d53d
7 files changed
+95
-24
No files matched your search
+39
-8
@@ -385,8 +385,21 @@ function kommentarGewerk(){
|
||||
// Verfasser/Zeit des jüngsten, besprochen nur, wenn ALLE Gewerke des
|
||||
// Projekts es abgehakt haben. Parameter: p (Projekt), g (Gewerk oder
|
||||
// null/undefined). Rückgabe: { status, statusAuthor, statusAt, besprochen }.
|
||||
function kommentarVon(p, g){
|
||||
// kommentareDesProjekts: die Kommentare nur der Gewerke, die das Projekt hat.
|
||||
// Ein Kommentar eines Gewerks, das dem Projekt nicht (mehr) gehört — etwa aus
|
||||
// einer Zeit, als es noch HLS hatte —, gehört nicht in die Gesamtanzeige
|
||||
// (Eriks Meldung zu 21-4030). Ohne gepflegte Gewerke: alle. Rückgabe: Objekt.
|
||||
function kommentareDesProjekts(p){
|
||||
const alle = (p && p.kommentare) || {};
|
||||
const gewerke = Array.isArray(p && p.gewerke) ? p.gewerke : [];
|
||||
if(!gewerke.length) return alle;
|
||||
const aus = {};
|
||||
Object.keys(alle).forEach(k => { if(gewerke.includes(k)) aus[k] = alle[k]; });
|
||||
return aus;
|
||||
}
|
||||
|
||||
function kommentarVon(p, g){
|
||||
const alle = g ? ((p && p.kommentare) || {}) : kommentareDesProjekts(p);
|
||||
if(g){
|
||||
const e = alle[g] || {};
|
||||
return { status: e.status || '', statusAuthor: e.statusAuthor || '', statusAt: e.statusAt || '', besprochen: !!e.besprochen };
|
||||
@@ -408,19 +421,37 @@ function kommentarVon(p, g){
|
||||
}
|
||||
|
||||
// kommentarAnzeigeHtml: der Kommentar zur ANZEIGE, bereinigt. Mit Gewerk g
|
||||
// nur dessen Text; ohne Gewerk die Texte aller Gewerke, bei mehreren je mit
|
||||
// dem Gewerk als eigener, dezenter Beschriftung (.kommentar-gewerk) —
|
||||
// Systemtext, nicht Teil des Kommentars (anders als die fette "ELT:"-Zeile,
|
||||
// die kommentarVon() für Klartext-Vorschauen einfügt). Rückgabe: HTML ('' ohne Text).
|
||||
function kommentarAnzeigeHtml(p, g){
|
||||
// nur dessen Text; ohne Gewerk die Texte aller Gewerke des Projekts. Bei
|
||||
// mehreren Gewerken Darstellung „B – Überschrift mit Linie“ (Eriks Wahl):
|
||||
// je Gewerk eine Kopfzeile mit dem Gewerk in seiner Farbe, einer feinen Linie
|
||||
// und (mitMeta) Verfasser und Zeit, darunter der Text — Systemtext, nicht
|
||||
// Teil des Kommentars (anders als die fette "ELT:"-Zeile, die kommentarVon()
|
||||
// für Klartext-Vorschauen einfügt). Parameter: p, g, mitMeta.
|
||||
// Rückgabe: HTML ('' ohne Text).
|
||||
function kommentarAnzeigeHtml(p, g, mitMeta){
|
||||
if(g) return sanitizeStatusHtml(kommentarVon(p, g).status || '');
|
||||
const alle = (p && p.kommentare) || {};
|
||||
const alle = kommentareDesProjekts(p);
|
||||
const reihenfolge = (typeof DEPARTMENTS === 'object' && DEPARTMENTS) ? Object.keys(DEPARTMENTS) : ['ELT','HLS','ARCH'];
|
||||
Object.keys(alle).forEach(k => { if(!reihenfolge.includes(k)) reihenfolge.push(k); });
|
||||
const mitText = reihenfolge.filter(k => alle[k] && statusPlainText(alle[k].status) !== '');
|
||||
if(mitText.length === 0) return '';
|
||||
if(mitText.length === 1) return sanitizeStatusHtml(alle[mitText[0]].status);
|
||||
return mitText.map(k => `<div class="kommentar-gewerk">${esc(k)}</div><div>${sanitizeStatusHtml(alle[k].status)}</div>`).join('');
|
||||
return '<div class="kommentar-gewerke">' + mitText.map(k => {
|
||||
const e = alle[k];
|
||||
const zeit = e.statusAt && typeof formatCommentStamp === 'function' ? formatCommentStamp(e.statusAt) : '';
|
||||
const meta = mitMeta ? [e.statusAuthor, zeit].filter(Boolean).join(' · ') : '';
|
||||
return '<div class="kommentar-block">'
|
||||
+ '<div class="kommentar-kopf"><span class="kommentar-gewerk gewerk-' + esc(k.toLowerCase()) + '">' + esc(k) + '</span>'
|
||||
+ '<span class="kommentar-linie"></span>' + (meta ? '<span class="kommentar-meta">' + esc(meta) + '</span>' : '') + '</div>'
|
||||
+ '<div class="kommentar-text">' + sanitizeStatusHtml(e.status) + '</div></div>';
|
||||
}).join('') + '</div>';
|
||||
}
|
||||
|
||||
// kommentarGewerkeMitText: wie viele Gewerke des Projekts einen Kommentar
|
||||
// haben (für die Frage, ob eine gemeinsame Verfasserzeile Sinn ergibt).
|
||||
function kommentarGewerkeMitText(p){
|
||||
const alle = kommentareDesProjekts(p);
|
||||
return Object.keys(alle).filter(k => alle[k] && statusPlainText(alle[k].status) !== '').length;
|
||||
}
|
||||
|
||||
// kommentarSetzen: ändert den Kommentar-Eintrag eines Gewerks (nur die in
|
||||
|
||||
Reference in new issue
Block a user