Setup: gruene Bestaetigung statt Zuruecksetzen-Knopf (2026.9.1.11)
Passt die zugeordnete Entitaet zum Beispielnamen der Rolle (FELDER-Schluessel "beispiel"), faerbt sich das Feld leicht gruen. Dieselbe Pruefung, die entitaetScore() ohnehin mit 8 gewichtet - hier nur fuers Auge, damit man eine richtig belegte Rolle sieht, ohne den langen Entity-Namen Zeichen fuer Zeichen mit dem Beispiel daneben zu vergleichen. Bewusst nur ein Hinweis, keine Bedingung: Installationen mit anderer Datenquelle haben andere Namen und sind trotzdem richtig zugeordnet. Deshalb gruen als Bestaetigung, aber kein Rot und keine Warnung, wenn es fehlt. Und nicht waehrend gesucht wird - dann steht die Sucheingabe im Feld, nicht die Zuordnung. Die Farbe kommt per color-mix aus dem vorhandenen --ok-Ton und dem Feldgrund statt aus einem eigenen Gruen, damit sie in beiden Themen ruhig bleibt. "Auf Standard zurueckstellen" entfernt (Wunsch des Eigentuemers): Knopf, Symbol, Zuhoerer, CSS und der nur dafuer vorhandene Helfer setupStandardwert(). Keine verwaisten Verweise mehr im Quelltext. Panel als Modul geparst, Bundle und Manifest auf 2026.9.1.11. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -1 +1 @@
|
||||
{"version":"2026.9.1.10","sha256":"ea987e424774f4d2d0e7ea87f38f4b265f0605730515cacfd7193b2bb309b647","bytes":265700,"gebaut":"2026-09-01T15:30:31Z"}
|
||||
{"version":"2026.9.1.11","sha256":"02c280790b205ea78638997a92aca00dbe7c099c2ad897ccf7eee50394e598b2","bytes":265708,"gebaut":"2026-09-01T16:21:24Z"}
|
||||
Binary file not shown.
@@ -3179,13 +3179,24 @@ function setupSchliessen() {
|
||||
setupOffen = false; setupSucheOffen = null; setupZuordnung = null; setupZuordnungStart = null; render();
|
||||
}
|
||||
|
||||
/* Standardwert (aus einstellungen.py, vor jedem Override) für ein Feld bzw.
|
||||
eine Listenposition - Grundlage für den Zurücksetzen-Button. */
|
||||
function setupStandardwert(key, idx) {
|
||||
const standard = (ENTITAETEN && ENTITAETEN.standardwerte) || {};
|
||||
const wert = standard[key];
|
||||
if (idx == null) return wert || "";
|
||||
return (wert || [])[idx] || "";
|
||||
/* Passt die zugeordnete Entität zum Beispielnamen der Rolle?
|
||||
|
||||
Der Beispielname steht im Feld-Katalog (FELDER in einstellungen.py,
|
||||
Schlüssel "beispiel") und ist der treffsicherste Hinweis, den es gibt -
|
||||
entitaetScore() gewichtet ihn deshalb mit 8, mehr als jedes Stichwort.
|
||||
Dieselbe Prüfung hier noch einmal, nur fürs Auge: wer eine Rolle richtig
|
||||
belegt hat, soll das sehen, ohne den langen Entity-Namen mit dem Beispiel
|
||||
daneben Zeichen für Zeichen zu vergleichen.
|
||||
|
||||
Bewusst nur ein Hinweis, keine Bedingung: es gibt Installationen mit
|
||||
anderer Datenquelle, deren Namen nicht passen und die trotzdem richtig
|
||||
zugeordnet sind. Deshalb grün als Bestätigung, aber kein Rot und keine
|
||||
Warnung, wenn es fehlt. */
|
||||
function entitaetPasstZumBeispiel(key, wert) {
|
||||
if (!wert) return false;
|
||||
const feld = setupKatalog().find((f) => f.key === key);
|
||||
if (!feld || !feld.beispiel) return false;
|
||||
return String(wert).toLowerCase().includes(String(feld.beispiel).toLowerCase());
|
||||
}
|
||||
|
||||
/* Entity-IDs, die im Arbeitsstand mehr als einer Rolle zugeordnet sind. */
|
||||
@@ -4516,20 +4527,19 @@ function entitaetZeilenMarkup(feldId, key, suchtext, aktuellerWert) {
|
||||
}).join("");
|
||||
}
|
||||
|
||||
const RESET_SVG = `<svg viewBox="0 0 20 20" width="15" height="15" fill="none" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"><path d="M16 10a6 6 0 1 1-2-4.5"/><path d="M16 3v4h-4"/></svg>`;
|
||||
|
||||
function entitaetCombo(key, idx) {
|
||||
const feldId = idx == null ? key : `${key}:${idx}`;
|
||||
const wert = idx == null ? setupZuordnung[key] : (setupZuordnung[key] || [])[idx];
|
||||
const offen = setupSucheOffen === feldId;
|
||||
const anzeige = offen ? setupSuchtext : entitaetName(wert);
|
||||
const standard = setupStandardwert(key, idx);
|
||||
const zeigeReset = wert !== standard;
|
||||
// Waehrend gesucht wird nicht gruen faerben - der Text im Feld ist dann
|
||||
// die Sucheingabe und nicht die Zuordnung, die Faerbung wuerde ihm
|
||||
// widersprechen.
|
||||
const treffer = !offen && entitaetPasstZumBeispiel(key, wert);
|
||||
return `<div class="entitaet-combo">
|
||||
<span class="entitaet-combo-icon">${LUPE_SVG}</span>
|
||||
<input type="text" class="entitaet-combo-input" autocomplete="off" spellcheck="false"
|
||||
<input type="text" class="entitaet-combo-input${treffer ? " passend" : ""}" autocomplete="off" spellcheck="false"
|
||||
placeholder="Entität suchen …" value="${esc(anzeige)}" data-setup-suche="${esc(feldId)}">
|
||||
${zeigeReset ? `<button type="button" class="entitaet-combo-reset" title="Auf Standard zurücksetzen" data-setup-reset="${esc(feldId)}">${RESET_SVG}</button>` : ""}
|
||||
${offen ? `<div class="entitaet-liste" data-setup-liste="${esc(feldId)}">${entitaetZeilenMarkup(feldId, key, setupSuchtext, wert)}</div>` : ""}
|
||||
</div>`;
|
||||
}
|
||||
@@ -5202,15 +5212,6 @@ function ereignisseVerdrahten() {
|
||||
setupSucheOffen = null; setupSuchtext = ""; render();
|
||||
return;
|
||||
}
|
||||
const reset = e.target.closest("[data-setup-reset]");
|
||||
if (reset) {
|
||||
const feldId = reset.dataset.setupReset;
|
||||
const teile = feldId.split(":");
|
||||
if (teile.length === 2) setupZuordnung[teile[0]][Number(teile[1])] = setupStandardwert(teile[0], Number(teile[1]));
|
||||
else setupZuordnung[feldId] = setupStandardwert(feldId, null);
|
||||
render();
|
||||
return;
|
||||
}
|
||||
if (e.target.closest("[data-setup-speichern]")) {
|
||||
if (setupSpeichertLaeuft) return;
|
||||
const duplikate = setupDuplikate();
|
||||
|
||||
@@ -1395,12 +1395,18 @@ img.carfix.klein { aspect-ratio: auto; height: auto; }
|
||||
-webkit-appearance: none; appearance: none;
|
||||
}
|
||||
.entitaet-combo-input:focus { outline: none; border-color: var(--red); }
|
||||
.entitaet-combo-reset {
|
||||
position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
|
||||
width: 26px; height: 26px; display: flex; align-items: center; justify-content: center;
|
||||
background: none; border: none; color: var(--fg3); cursor: pointer; padding: 0;
|
||||
/* Die Zuordnung passt zum Beispielnamen der Rolle (siehe
|
||||
entitaetPasstZumBeispiel). Bewusst zurueckhaltend: eine Bestaetigung im
|
||||
Vorbeigehen, kein Ausrufezeichen. Deshalb die Farbe ueber color-mix aus dem
|
||||
vorhandenen Erfolgs-Ton und dem Feldgrund statt eines eigenen Gruens - so
|
||||
bleibt sie in beiden Themen ruhig und passt zum Rest der Oberflaeche.
|
||||
Der Rahmen traegt etwas mehr Farbe als die Flaeche, sonst verschwindet die
|
||||
Markierung auf dunklem Grund. */
|
||||
.entitaet-combo-input.passend {
|
||||
background: color-mix(in srgb, var(--ok, #2e7d32) 9%, var(--tile-deckend, var(--canvas)));
|
||||
border-color: color-mix(in srgb, var(--ok, #2e7d32) 38%, var(--line));
|
||||
}
|
||||
.entitaet-combo-reset:active { color: var(--fg); }
|
||||
.entitaet-combo-input.passend:focus { border-color: var(--red); }
|
||||
.entitaet-liste {
|
||||
position: absolute; z-index: 5; left: 0; right: 0; top: calc(100% + 4px);
|
||||
max-height: 240px; overflow-y: auto;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"domain": "audi_dashboard",
|
||||
"name": "Audi Dashboard",
|
||||
"version": "2026.9.1.10",
|
||||
"version": "2026.9.1.11",
|
||||
"documentation": "https://gitea.nothaft.cloud/paul/audi-app/src/branch/main/README.md",
|
||||
"issue_tracker": "https://gitea.nothaft.cloud/paul/audi-app/issues",
|
||||
"codeowners": ["@paul"],
|
||||
|
||||
Reference in New Issue
Block a user