Rollen: optionale aufklappbare Kurzbeschreibung (Texte folgen)
- Neue Tabelle ROLLEN_DESC (1 Satz je Rolle) zum Befuellen durch Frank/Patrick. Leer = Rolle bleibt schlichte Zeile; sobald Text drin ist, wird die Rolle in der Uebersicht UND im linken Rollen-Panel aufklappbar (touch-tauglich, <details>). - Gemeinsamer Helfer rolleItemHtml(r,color) fuer beide Render-Stellen. - CSS fuer aufklappbare Rollenzeile + Beschreibung. - sw.js Cache hochgezaehlt. Verifiziert: leer -> 16 schlichte Zeilen (keine Regression); mit Text -> aufklappbar. Service-Artefakte (Akte) bewusst NICHT angefasst (nur Rollen gewuenscht). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
47c8c9109e
commit
cf6b58a2e4
2 changed files with 26 additions and 7 deletions
|
|
@ -115,6 +115,11 @@
|
||||||
#rollenList h3 { font-size:11px; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); margin:14px 0 4px; }
|
#rollenList h3 { font-size:11px; text-transform:uppercase; letter-spacing:.8px; color:var(--muted); margin:14px 0 4px; }
|
||||||
.rolleItem { display:flex; align-items:center; gap:10px; padding:6px 4px; font-size:13px; }
|
.rolleItem { display:flex; align-items:center; gap:10px; padding:6px 4px; font-size:13px; }
|
||||||
.rolleItem .rDot { width:12px; height:12px; border-radius:50%; flex:none; border:1px solid rgba(0,0,0,.18); }
|
.rolleItem .rDot { width:12px; height:12px; border-radius:50%; flex:none; border:1px solid rgba(0,0,0,.18); }
|
||||||
|
.rolleDetails > summary.rolleItem { cursor:pointer; list-style:none; }
|
||||||
|
.rolleDetails > summary.rolleItem::-webkit-details-marker { display:none; }
|
||||||
|
.rolleDetails > summary.rolleItem::after { content:"▸"; margin-left:auto; font-size:11px; color:var(--muted); transition:transform .15s; }
|
||||||
|
.rolleDetails[open] > summary.rolleItem::after { transform:rotate(90deg); }
|
||||||
|
.rolleDesc { margin:0 0 8px 22px; font-size:12.5px; line-height:1.45; color:var(--muted); }
|
||||||
.navTop { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
|
.navTop { display:flex; align-items:center; justify-content:space-between; margin-bottom:8px; }
|
||||||
.navTop b { font-size:13px; text-transform:uppercase; letter-spacing:.6px; color:var(--muted); }
|
.navTop b { font-size:13px; text-transform:uppercase; letter-spacing:.6px; color:var(--muted); }
|
||||||
.navTop button { border:none; background:none; font-size:20px; line-height:1; color:var(--muted); cursor:pointer; padding:4px 8px; }
|
.navTop button { border:none; background:none; font-size:20px; line-height:1; color:var(--muted); cursor:pointer; padding:4px 8px; }
|
||||||
|
|
@ -488,6 +493,15 @@ const ROLLEN = {
|
||||||
testmanagement:"Testmanagement", architektur:"IT-Architekt",
|
testmanagement:"Testmanagement", architektur:"IT-Architekt",
|
||||||
lieferant:"Lieferant", operations_manager:"Operation Manager (AL B&C/App)", dpm:"Demand Portfolio Manager"
|
lieferant:"Lieferant", operations_manager:"Operation Manager (AL B&C/App)", dpm:"Demand Portfolio Manager"
|
||||||
};
|
};
|
||||||
|
/* Rollen-Kurzbeschreibungen (1 Satz je Rolle) — von Frank/Patrick zu liefern.
|
||||||
|
Leerer String = keine Beschreibung -> Rolle bleibt eine normale Zeile. Sobald Text
|
||||||
|
eingetragen ist, wird die Rolle in der Übersicht aufklappbar (Übersicht + linkes Panel). */
|
||||||
|
const ROLLEN_DESC = {
|
||||||
|
spm:"", sor:"", service_owner:"", support_manager:"", problem_manager:"",
|
||||||
|
projektleitung:"", betriebsteam:"", service_support_team:"", projektteam:"",
|
||||||
|
queue_koordinator:"", first_level_agent:"", second_level_agent:"",
|
||||||
|
testmanagement:"", architektur:"", lieferant:"", operations_manager:"", dpm:""
|
||||||
|
};
|
||||||
// Rollen-Glossar fuer das Overlay: gruppiert/eingefaerbt nach den 6 Figuren-Kategorien
|
// Rollen-Glossar fuer das Overlay: gruppiert/eingefaerbt nach den 6 Figuren-Kategorien
|
||||||
// (Farbe = Filamentfarbe der Figuren). Deckt alle ROLLEN-Eintraege ab.
|
// (Farbe = Filamentfarbe der Figuren). Deckt alle ROLLEN-Eintraege ab.
|
||||||
const ROLLEN_GRUPPEN = [
|
const ROLLEN_GRUPPEN = [
|
||||||
|
|
@ -498,6 +512,15 @@ const ROLLEN_GRUPPEN = [
|
||||||
{ label:"Externe", color:"#cfd6df", roles:["lieferant"] },
|
{ label:"Externe", color:"#cfd6df", roles:["lieferant"] },
|
||||||
{ label:"Teams (Sonderfiguren)", color:"#2f9e57", roles:["betriebsteam","service_support_team","projektteam"] }
|
{ label:"Teams (Sonderfiguren)", color:"#2f9e57", roles:["betriebsteam","service_support_team","projektteam"] }
|
||||||
];
|
];
|
||||||
|
/* Eine Rollen-Zeile: mit Beschreibung -> aufklappbar (<details>), sonst schlichte Zeile. */
|
||||||
|
function rolleItemHtml(r, color){
|
||||||
|
if(!ROLLEN[r]) return "";
|
||||||
|
const dot = `<span class="rDot" style="background:${color}"></span>`;
|
||||||
|
const desc = (ROLLEN_DESC && ROLLEN_DESC[r]) ? ROLLEN_DESC[r].trim() : "";
|
||||||
|
return desc
|
||||||
|
? `<details class="rolleDetails"><summary class="rolleItem">${dot}<span>${ROLLEN[r]}</span></summary><div class="rolleDesc">${desc}</div></details>`
|
||||||
|
: `<div class="rolleItem">${dot}<span>${ROLLEN[r]}</span></div>`;
|
||||||
|
}
|
||||||
const PHASEN = {
|
const PHASEN = {
|
||||||
design:{label:"Design", color:"var(--design)"},
|
design:{label:"Design", color:"var(--design)"},
|
||||||
transition:{label:"Transition", color:"var(--transition)"},
|
transition:{label:"Transition", color:"var(--transition)"},
|
||||||
|
|
@ -1414,10 +1437,7 @@ function renderRollen(){
|
||||||
html += `<div class="akteCount">RACI-Rollen im Lebenszyklus · Farbe = Figuren-Kategorie</div>`;
|
html += `<div class="akteCount">RACI-Rollen im Lebenszyklus · Farbe = Figuren-Kategorie</div>`;
|
||||||
for(const g of ROLLEN_GRUPPEN){
|
for(const g of ROLLEN_GRUPPEN){
|
||||||
html += `<h3>${g.label}</h3>`;
|
html += `<h3>${g.label}</h3>`;
|
||||||
g.roles.forEach(r=>{
|
g.roles.forEach(r=>{ html += rolleItemHtml(r, g.color); });
|
||||||
if(!ROLLEN[r]) return;
|
|
||||||
html += `<div class="rolleItem"><span class="rDot" style="background:${g.color}"></span><span>${ROLLEN[r]}</span></div>`;
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
$("#rollenList").innerHTML = html;
|
$("#rollenList").innerHTML = html;
|
||||||
const c = $("#rollenClose"); if(c) c.onclick = ()=> document.body.classList.remove("rollenOpen");
|
const c = $("#rollenClose"); if(c) c.onclick = ()=> document.body.classList.remove("rollenOpen");
|
||||||
|
|
@ -1879,8 +1899,7 @@ function raciLegendHtml(){
|
||||||
function rollenLegendHtml(){
|
function rollenLegendHtml(){
|
||||||
let body = "";
|
let body = "";
|
||||||
for(const g of ROLLEN_GRUPPEN){
|
for(const g of ROLLEN_GRUPPEN){
|
||||||
const items = g.roles.filter(r=>ROLLEN[r])
|
const items = g.roles.filter(r=>ROLLEN[r]).map(r=>rolleItemHtml(r, g.color)).join("");
|
||||||
.map(r=>`<div class="rolleItem"><span class="rDot" style="background:${g.color}"></span><span>${ROLLEN[r]}</span></div>`).join("");
|
|
||||||
if(!items) continue;
|
if(!items) continue;
|
||||||
body += `<div class="rlGroup"><div class="rlGroupHead">${g.label}</div>${items}</div>`;
|
body += `<div class="rlGroup"><div class="rlGroupHead">${g.label}</div>${items}</div>`;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
/* Service Worker — SLC-Workshop Companion (App-Shell, offline-first) */
|
/* Service Worker — SLC-Workshop Companion (App-Shell, offline-first) */
|
||||||
const CACHE = "slc-companion-v37";
|
const CACHE = "slc-companion-v38";
|
||||||
const SHELL = ["./", "index.html", "manifest.webmanifest", "icon.svg"];
|
const SHELL = ["./", "index.html", "manifest.webmanifest", "icon.svg"];
|
||||||
// Action-Card-Grafiken (cards/s<service>-c<change>.png) fuer Offline vorab cachen (alle 24).
|
// Action-Card-Grafiken (cards/s<service>-c<change>.png) fuer Offline vorab cachen (alle 24).
|
||||||
const CARDS = [];
|
const CARDS = [];
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue