ux(storage): dedupe Leválasztás + self-documenting drive action labels
Two Leválasztás buttons rendered per USB drive (registry safe-disconnect + the agent eject the D1 merge carried over like-for-like) and four near-synonymous labels covered very different operations. The agent eject now hides when the card offers the registry safe-disconnect (one detach per card; non-USB + unregistered drives keep eject). Labels are self-documenting with explanatory title tooltips: Új telepítések letiltása/engedélyezése, Biztonságos leválasztás, Eltávolítás a listából, Végleges leszerelés, Formázás…. Endpoints and semantics unchanged.
This commit is contained in:
@@ -1,5 +1,21 @@
|
||||
## Changelog
|
||||
|
||||
### v0.98.2 — drive-card action clarity: dedupe + self-documenting labels (2026-07-02)
|
||||
|
||||
User feedback: two "Leválasztás" buttons per drive, and four near-synonymous labels (Letiltás /
|
||||
Leválasztás / Eltávolítás / Leszerelés) for very different operations. storage.html only:
|
||||
|
||||
- **Dedupe:** the agent-level eject no longer renders on a card that already offers the registry
|
||||
safe-disconnect (enrichCard passes `hasSafeDisconnect`, detected from the card's own
|
||||
storageDisconnect button) — one detach affordance per card. Non-USB registered drives (no
|
||||
safe-disconnect) and unregistered drives keep the agent eject.
|
||||
- **Labels + tooltips (endpoints unchanged):** Letiltás/Engedélyezés → "Új telepítések
|
||||
letiltása/engedélyezése"; registry Leválasztás → "Biztonságos leválasztás" (apps stop, safe
|
||||
unplug, reconnectable); Eltávolítás → "Eltávolítás a listából" (registry-entry removal only,
|
||||
data untouched); Leszerelés → "Végleges leszerelés" (permanent, optional migrate-first); agent
|
||||
Törlés… → "Formázás…" (that's what it does). Every action button carries an explanatory `title`.
|
||||
|
||||
|
||||
### v0.98.1 — drive-card spacing: enrichment rows no longer touch (2026-07-02)
|
||||
|
||||
User feedback: on the Meghajtók cards the agent tag row ("Felhasználói adat", "lassú", uuid) and the
|
||||
|
||||
@@ -126,25 +126,25 @@
|
||||
{{$.CSRFField}}
|
||||
<input type="hidden" name="storage_path" value="{{.Path}}">
|
||||
<input type="hidden" name="schedulable" value="false">
|
||||
<button type="submit" class="btn btn-xs btn-outline">Letiltás</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" title="A meghajtó kimarad az új alkalmazás-telepítésekből. A rajta lévő alkalmazások változatlanul futnak.">Új telepítések letiltása</button>
|
||||
</form>
|
||||
{{else}}
|
||||
<form method="POST" action="/settings/storage/schedulable" style="display:inline">
|
||||
{{$.CSRFField}}
|
||||
<input type="hidden" name="storage_path" value="{{.Path}}">
|
||||
<input type="hidden" name="schedulable" value="true">
|
||||
<button type="submit" class="btn btn-xs btn-outline">Engedélyezés</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" title="A meghajtó újra választható az új alkalmazás-telepítéseknél.">Új telepítések engedélyezése</button>
|
||||
</form>
|
||||
{{end}}
|
||||
{{if .IsUSB}}
|
||||
<button class="btn btn-xs btn-danger-outline" onclick="storageDisconnect('{{.Path}}', '{{.Label}}', {{.AppCount}})">Leválasztás</button>
|
||||
<button class="btn btn-xs btn-danger-outline" onclick="storageDisconnect('{{.Path}}', '{{.Label}}', {{.AppCount}})" title="Az itt tárolt alkalmazások leállnak, a meghajtó biztonságosan kihúzható. Az adatok megmaradnak; a meghajtó később újra csatlakoztatható.">Biztonságos leválasztás</button>
|
||||
{{end}}
|
||||
{{if and (not .IsDefault) (eq .AppCount 0)}}
|
||||
<form method="POST" action="/settings/storage/remove" style="display:inline"
|
||||
onsubmit="return storageRemoveDialog(event, this, 'Biztosan eltávolítja a(z) {{.Path}} adattárolót?')">
|
||||
{{$.CSRFField}}
|
||||
<input type="hidden" name="storage_path" value="{{.Path}}">
|
||||
<button type="submit" class="btn btn-xs btn-danger-outline">Eltávolítás</button>
|
||||
<button type="submit" class="btn btn-xs btn-danger-outline" title="Csak a nyilvántartásból törli a meghajtót — az adatok és a fájlrendszer érintetlenül maradnak.">Eltávolítás a listából</button>
|
||||
</form>
|
||||
{{end}}
|
||||
{{if and (gt .AppCount 0) .HasOtherPaths}}
|
||||
@@ -157,7 +157,7 @@
|
||||
<button class="btn btn-xs btn-outline" onclick="storageMigrateAll('{{.Path}}','{{.Label}}')">Összes adat áthelyezése</button>
|
||||
</span>
|
||||
{{end}}
|
||||
<button class="btn btn-xs btn-danger-outline" onclick="storageDecommission('{{.Path}}','{{.Label}}',{{.AppCount}})">Leszerelés</button>
|
||||
<button class="btn btn-xs btn-danger-outline" onclick="storageDecommission('{{.Path}}','{{.Label}}',{{.AppCount}})" title="A meghajtó végleges kivonása a rendszerből. Ha céltárolót választ, előbb minden adat átkerül oda; áthelyezés nélkül az adatok a meghajtón maradnak.">Végleges leszerelés</button>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
@@ -290,7 +290,7 @@ window.__registeredPaths=[{{range .StoragePaths}}{{if .Path}}"{{.Path}}",{{end}}
|
||||
return '<div class="drive-cap meter '+usageColorClass(pct)+'"><div class="meter-track"><div class="meter-fill" style="width:'+pct.toFixed(1)+'%"></div></div>'
|
||||
+'<div class="drive-cap-label">'+hum(d.used_bytes)+' / '+hum(d.total_bytes)+' ('+pct.toFixed(0)+'%)</div></div>';
|
||||
}
|
||||
function actions(d, registered){
|
||||
function actions(d, registered, hasSafeDisconnect){
|
||||
// Destructive controls ONLY for user-data drives that are mounted under /mnt. System/backup get none.
|
||||
if(d.role!=='user-data' || !d.mount_path || d.mount_path.indexOf('/mnt/')!==0) return '';
|
||||
var dev = esc(d.backing_device||''), mpRaw = esc(d.mount_path), reg = esc(regKey(d));
|
||||
@@ -304,9 +304,13 @@ window.__registeredPaths=[{{range .StoragePaths}}{{if .Path}}"{{.Path}}",{{end}}
|
||||
if(!registered[regKey(d)]){
|
||||
btns += '<button class="btn btn-xs btn-primary" onclick="registerDrive(\''+mpRaw+'\')">Regisztrálás</button> ';
|
||||
}
|
||||
btns += '<button class="btn btn-xs btn-danger-outline" onclick="confirmEject(\''+reg+'\')">Leválasztás</button>';
|
||||
if(d.backing_device){ btns += ' <button class="btn btn-xs btn-danger-outline" onclick="confirmWipe(\''+dev+'\',\''+reg+'\')">Törlés…</button>'; }
|
||||
return '<div class="drive-actions">'+btns+'</div>';
|
||||
// Dedupe: if the registry card already offers "Biztonságos leválasztás" (USB safe-disconnect),
|
||||
// don't render the overlapping agent-level eject next to it — one detach affordance per card.
|
||||
if(!hasSafeDisconnect){
|
||||
btns += '<button class="btn btn-xs btn-danger-outline" onclick="confirmEject(\''+reg+'\')" title="A meghajtó lecsatolása és törlése a nyilvántartásból. Az adatok megmaradnak.">Leválasztás</button>';
|
||||
}
|
||||
if(d.backing_device){ btns += (btns?' ':'') + '<button class="btn btn-xs btn-danger-outline" onclick="confirmWipe(\''+dev+'\',\''+reg+'\')" title="A meghajtó formázása — a rajta lévő MINDEN adat véglegesen törlődik.">Formázás…</button>'; }
|
||||
return btns ? '<div class="drive-actions">'+btns+'</div>' : '';
|
||||
}
|
||||
// Unified drive view (D1): the agent disk list ENRICHES the registry cards in place
|
||||
// (role tag + durable-id + agent-only actions), and two extra groups render below:
|
||||
@@ -328,12 +332,14 @@ window.__registeredPaths=[{{range .StoragePaths}}{{if .Path}}"{{.Path}}",{{end}}
|
||||
function enrichCard(d, registered){
|
||||
var slot=document.getElementById('agent-extra-'+regKey(d));
|
||||
if(!slot) return false;
|
||||
var card=slot.closest('.storage-path-item');
|
||||
var hasSafeDisconnect=!!(card && card.querySelector('[onclick^="storageDisconnect"]'));
|
||||
var extra='<div class="metarows">'
|
||||
+'<span class="metarow">'+roleTag(d.role)+'</span>'
|
||||
+(d.class?'<span class="metarow">'+classTag(d)+'</span>':'')
|
||||
+(d.durable_id?'<span class="metarow mono" title="Tartós azonosító">'+esc(d.durable_id)+'</span>':'')
|
||||
+'</div>'
|
||||
+actions(d,registered);
|
||||
+actions(d,registered,hasSafeDisconnect);
|
||||
slot.innerHTML=extra;
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user