GUI : retirer la vue Chaîne redondante
Son contenu (renduChaine) est déjà accessible, par hôte, dans l'onglet « Chaîne » du détail de la vue Inventaire ; la vue ne faisait que le répéter pour tous les hôtes. Retire le bouton, le rendu dessinerArbre et le CSS .arbre-* ; raccourcis clavier ramenés à 1-4. La chaîne reste consultable hôte par hôte. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
738fd2b88c
commit
2f9db3f516
2 changed files with 9 additions and 28 deletions
|
|
@ -30,6 +30,13 @@
|
|||
`roles/client_*`). Le type `liste` (chaîne virgulée → liste YAML dédoublonnée) est
|
||||
ajouté au schéma des intrants.
|
||||
|
||||
### Supprimé
|
||||
- **Vue « Chaîne » du bandeau (redondante).** Son contenu (`renduChaine`) était déjà
|
||||
rendu, par hôte, dans l'onglet « Chaîne » du détail de la vue Inventaire ; la vue ne
|
||||
faisait que le répéter pour tous les hôtes à la fois, sans réseau/proxmox ni boutons
|
||||
d'opération. Retirée (bouton, rendu `dessinerArbre`, CSS `.arbre-*`) ; la chaîne
|
||||
reste consultable hôte par hôte. Raccourcis clavier ramenés à 1-4.
|
||||
|
||||
### Modifié
|
||||
- **Vue Inventaire (cartes) : détail converti en inspection lecture seule.** La vue
|
||||
affichait « généré depuis le plan (lecture seule) » tout en exposant une surface
|
||||
|
|
|
|||
|
|
@ -691,13 +691,6 @@ HTML = r"""<!doctype html>
|
|||
.vue-bascule button { border: none; background: transparent; border-radius: 999px; padding: 6px 13px; font-size: 12.5px; font-weight: 750; color: var(--muted); box-shadow: none; }
|
||||
.vue-bascule button:hover { color: var(--texte); background: transparent; }
|
||||
.vue-bascule button.on { background: var(--surface); color: var(--teal); box-shadow: var(--ombre); }
|
||||
.arbre-vm { background: var(--surface); border: 1px solid var(--ligne); border-radius: var(--rayon); margin-bottom: 10px; box-shadow: var(--ombre); }
|
||||
.arbre-vm > summary { list-style: none; cursor: pointer; padding: 11px 14px; display: flex; align-items: center; gap: 10px; font-size: 14px; }
|
||||
.arbre-vm > summary::-webkit-details-marker { display: none; }
|
||||
.arbre-vm > summary::before { content: "\25B8"; color: var(--faint); }
|
||||
.arbre-vm[open] > summary::before { content: "\25BE"; }
|
||||
.arbre-vm .ch-meta { color: var(--muted); font-size: 12px; margin-left: auto; }
|
||||
.arbre-corps { padding: 2px 16px 14px 32px; display: grid; gap: 9px; }
|
||||
.ch-grp { border-left: 2px solid var(--ligne-forte); padding: 3px 0 3px 12px; }
|
||||
.ch-grp-tete { display: flex; align-items: center; gap: 7px; font-weight: 700; font-size: 13px; flex-wrap: wrap; }
|
||||
.ch-fleche { color: var(--faint); }
|
||||
|
|
@ -756,11 +749,10 @@ HTML = r"""<!doctype html>
|
|||
<span class="chemin" id="chemin"></span>
|
||||
<div class="grandit"></div>
|
||||
<div class="resume" id="resume"></div>
|
||||
<div class="barre" title="Raccourcis clavier — 1-5 : changer de vue · j/k : naviguer les hôtes · v : vérifier · d : déployer · / : filtrer · Ctrl+S : sauvegarder la vue">
|
||||
<div class="barre" title="Raccourcis clavier — 1-4 : changer de vue · j/k : naviguer les hôtes · v : vérifier · d : déployer · / : filtrer · Ctrl+S : sauvegarder la vue">
|
||||
<div class="vue-bascule">
|
||||
<button type="button" id="btn-vue-cartes" class="on" onclick="setVue('cartes')">Inventaire</button>
|
||||
<button type="button" id="btn-vue-serveurs" onclick="setVue('serveurs')">Serveurs</button>
|
||||
<button type="button" id="btn-vue-chaine" onclick="setVue('chaine')">Chaîne</button>
|
||||
<button type="button" id="btn-vue-applications" onclick="setVue('applications')">Applications</button>
|
||||
<button type="button" id="btn-vue-bases" onclick="setVue('bases')">Bases</button>
|
||||
</div>
|
||||
|
|
@ -1021,7 +1013,6 @@ HTML = r"""<!doctype html>
|
|||
vuePrincipale = v;
|
||||
document.getElementById('btn-vue-cartes').classList.toggle('on', v === 'cartes');
|
||||
document.getElementById('btn-vue-serveurs').classList.toggle('on', v === 'serveurs');
|
||||
document.getElementById('btn-vue-chaine').classList.toggle('on', v === 'chaine');
|
||||
document.getElementById('btn-vue-applications').classList.toggle('on', v === 'applications');
|
||||
document.getElementById('btn-vue-bases').classList.toggle('on', v === 'bases');
|
||||
dessinerGrilles();
|
||||
|
|
@ -1031,7 +1022,6 @@ HTML = r"""<!doctype html>
|
|||
function dessinerGrilles() {
|
||||
document.getElementById('chips').style.display = vuePrincipale === 'cartes' ? '' : 'none';
|
||||
if (vuePrincipale === 'serveurs') { dessinerServeurs(); return; }
|
||||
if (vuePrincipale === 'chaine') { dessinerArbre(); return; }
|
||||
if (vuePrincipale === 'applications') { dessinerApplications(); return; }
|
||||
if (vuePrincipale === 'bases') { dessinerBases(); return; }
|
||||
const cible = document.getElementById('grilles');
|
||||
|
|
@ -1095,22 +1085,6 @@ HTML = r"""<!doctype html>
|
|||
return grpHtml + appSection;
|
||||
}
|
||||
|
||||
function dessinerArbre() {
|
||||
const cible = document.getElementById('grilles');
|
||||
const visibles = hotes.map((h, i) => [h, i]).filter(([h]) => correspond(h));
|
||||
if (!visibles.length) { cible.innerHTML = '<div class="vide">Aucun hôte.</div>'; return; }
|
||||
cible.innerHTML = visibles.map(([h]) => {
|
||||
const st = statutHote(h);
|
||||
const cls = st === 'bloque' ? 'bloq' : (h.etat === 'actif' ? 'actif' : 'plan');
|
||||
return `<details class="arbre-vm">
|
||||
<summary><span class="pt ${cls}"></span><b>${echapper(h.nom || '(sans nom)')}</b>
|
||||
<span class="badge-statut ${st}">${libelleStatut(st)}</span>
|
||||
<span class="ch-meta">${(h.groupes || []).length} groupes</span></summary>
|
||||
<div class="arbre-corps">${renduChaine(h)}</div>
|
||||
</details>`;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
function chargerBases(data) {
|
||||
const b = data.bases || {serveurs_bd: {}, bases_donnees: {}};
|
||||
bdServeurs = Object.entries(b.serveurs_bd || {}).map(([nom, s]) => ({
|
||||
|
|
@ -1764,7 +1738,7 @@ HTML = r"""<!doctype html>
|
|||
if ((e.ctrlKey || e.metaKey) && (e.key === 's' || e.key === 'S')) { e.preventDefault(); sauvegarderVue(); return; }
|
||||
const dansSaisie = /^(INPUT|SELECT|TEXTAREA)$/.test((document.activeElement || {}).tagName || '');
|
||||
if (dansSaisie || e.ctrlKey || e.metaKey || e.altKey) return;
|
||||
const vues = {'1': 'cartes', '2': 'serveurs', '3': 'chaine', '4': 'applications', '5': 'bases'};
|
||||
const vues = {'1': 'cartes', '2': 'serveurs', '3': 'applications', '4': 'bases'};
|
||||
if (vues[e.key]) { setVue(vues[e.key]); return; }
|
||||
if (e.key === '/') { e.preventDefault(); const f = document.getElementById('filtre'); if (f) f.focus(); return; }
|
||||
if (vuePrincipale !== 'cartes') return;
|
||||
|
|
|
|||
Loading…
Reference in a new issue