W12 family names keep their accents, login made without them; W9 banner link colour; W10 recovery-code page one plain line; W11/W24 remote page hides provider login and key fields behind Haladó; unreleased
gates / gates (push) Successful in 1m33s
gates / gates (push) Successful in 1m33s
This commit is contained in:
@@ -76,7 +76,8 @@
|
||||
<div id="progress-error" class="alert alert-error" style="display:none"></div>
|
||||
</div>
|
||||
|
||||
<!-- 5. Reveal + 6. Typed-back + 7. Finish -->
|
||||
<!-- 5. Reveal + 6. Typed-back + 7. Finish. W10: the headings carry no numbers — cards 2-4 hide as the wizard moves on,
|
||||
so a numbered page read 1 → 5 → 6. -->
|
||||
<div class="settings-card" id="reveal-card" style="display:none">
|
||||
<h3>{{T "backups_escrow.5_a_helyreallitasi_kod"}}</h3>
|
||||
<div id="reveal-gate">
|
||||
@@ -182,6 +183,12 @@ async function loadPreflight(){
|
||||
html+='<li style="padding:.35rem 0"><span style="color:var(--crit)">✗</span> {{T "backups_escrow.a_funkciohoz_az_ugynok_frissitese_2"}}</li>';
|
||||
}
|
||||
html+='</ul>';
|
||||
// W10 (rehearsal 2026-10-20): when every check passed the household sees ONE plain line; the rows (storage ids,
|
||||
// the binary path — operator words) stay behind „Részletek". A failed check still shows the list open.
|
||||
if(d.ok){
|
||||
html='<p><span style="color:var(--blue-bright)">✓</span> {{T "backups_escrow.all_prereqs_ok"}}</p>'+
|
||||
'<details><summary class="form-hint">{{T "backups_escrow.prereq_details"}}</summary>'+html+'</details>';
|
||||
}
|
||||
document.getElementById('pf-list').innerHTML=html;
|
||||
if(d.ok){
|
||||
document.getElementById('warn-card').style.display='block';
|
||||
|
||||
@@ -50,11 +50,20 @@
|
||||
<div class="stat-value" style="font-size:1.15rem">{{if and .Offbox.StatsKnown .Offbox.RepoSizeHuman}}{{numText .Offbox.RepoSizeHuman}}{{else}}–{{end}}</div>
|
||||
<div class="stat-label">{{T "backups_remote.tarolo_meret"}} {{if .Offbox.StatsKnown}}{{T "backups_remote.pillanatkep"}}{{else}}{{T "backups_remote.a_pillanatkepek_szama_meg_ismeretlen"}}{{end}}</div>
|
||||
</div>
|
||||
{{/* W11 (rehearsal 2026-10-20): the Felhom-provided store showed its provider login
|
||||
(„u…@….your-storagebox.de /home/felhom-repo") to the household. It shows its name; the login waits
|
||||
behind „Haladó" below. The household's own NAS keeps its address: they typed it. */}}
|
||||
<div class="stat-card">
|
||||
<div class="stat-value" style="font-size:1.05rem">{{if .Offbox.Enabled}}{{.Offbox.User}}@{{.Offbox.Host}}{{else}}{{T "backups_remote.kikapcsolva"}}{{end}}</div>
|
||||
<div class="stat-label">{{if .Offbox.Enabled}}{{.Offbox.RepoPath}}{{else}}{{T "backups_remote.a_tavoli_mentes_ki_van"}}{{end}}</div>
|
||||
<div class="stat-value" style="font-size:1.05rem">{{if .Offbox.Enabled}}{{if .Offbox.Pinned}}{{T "backups_remote.felhom_store_name"}}{{else}}{{.Offbox.User}}@{{.Offbox.Host}}{{end}}{{else}}{{T "backups_remote.kikapcsolva"}}{{end}}</div>
|
||||
<div class="stat-label">{{if .Offbox.Enabled}}{{if .Offbox.Pinned}}{{T "backups_remote.felhom_store_where"}}{{else}}{{.Offbox.RepoPath}}{{end}}{{else}}{{T "backups_remote.a_tavoli_mentes_ki_van"}}{{end}}</div>
|
||||
</div>
|
||||
</div>
|
||||
{{if .Offbox.Pinned}}
|
||||
<details class="form-hint" id="offbox-advanced" style="margin:.5rem 0">
|
||||
<summary style="cursor:pointer">{{T "backups_remote.halado"}}</summary>
|
||||
<span class="mono">{{.Offbox.User}}@{{.Offbox.Host}} {{.Offbox.RepoPath}}</span>
|
||||
</details>
|
||||
{{end}}
|
||||
{{if and .Offbox.Enabled (gt .Offbox.QuotaGB 0)}}
|
||||
<!-- R-225: the BAR renders only when the fill is known. A 0%-wide bar over an unread store is a
|
||||
picture of emptiness, and a picture is a claim. -->
|
||||
@@ -261,12 +270,17 @@
|
||||
<div class="form-row"><label>{{T "backups_remote.felhasznalo"}}</label><input type="text" name="user" class="form-input" value="{{if .Offbox}}{{.Offbox.User}}{{end}}" placeholder="{{T "backups_remote.pl_felhom"}}"></div>
|
||||
<div class="form-row"><label>{{T "backups_remote.tarolo_utvonala_a_celgepen"}}</label><input type="text" name="repo_path" class="form-input" value="{{if .Offbox}}{{.Offbox.RepoPath}}{{end}}" placeholder="{{T "backups_remote.pl_repo_path"}}"></div>
|
||||
<div class="form-row"><label><input type="checkbox" name="enabled" {{if .Offbox}}{{if .Offbox.Enabled}}checked{{end}}{{else}}checked{{end}}> {{T "backups_remote.napi_automatikus_tavoli_mentes_engedelye"}}</label></div>
|
||||
{{/* W24 (rehearsal 2026-10-20): the key and host-key fields are operator detail; they sit behind
|
||||
„Haladó". A closed <details> still submits its fields. */}}
|
||||
<details class="form-row" id="offbox-key-advanced">
|
||||
<summary style="cursor:pointer">{{T "backups_remote.halado"}}</summary>
|
||||
<div class="form-row"><label>{{T "backups_remote.ssh_privat_kulcs"}} {{if .OffboxConfigured}}{{T "backups_remote.uresen_hagyva_valtozatlan"}}{{end}}</label>
|
||||
<textarea name="ssh_key" class="form-input" rows="4" autocomplete="off" placeholder="-----BEGIN OPENSSH PRIVATE KEY-----"></textarea>
|
||||
<span class="form-hint">{{T "backups_remote.a_kulcsot_0600_as_fajlba"}}</span></div>
|
||||
<div class="form-row"><label>{{T "backups_remote.a_celgep_ismert_host_sora"}} {{if .OffboxConfigured}}{{T "backups_remote.uresen_hagyva_valtozatlan"}}{{end}}</label>
|
||||
<textarea name="known_hosts" class="form-input" rows="2" autocomplete="off" placeholder="nas.local ssh-ed25519 AAAA…"></textarea>
|
||||
<span class="form-hint">{{T "backups_remote.a_host_kulcs_rogzitese_no"}} <span class="mono">ssh-keyscan -p <port> <host></span></span></div>
|
||||
</details>
|
||||
<button type="submit" class="btn btn-sm btn-primary" style="margin-top:.5rem">{{T "backups_remote.mentes"}}</button>
|
||||
</form>
|
||||
</details>
|
||||
|
||||
@@ -411,25 +411,31 @@ function openDialog(opts){
|
||||
<div id="family-list" class="settings-grid"></div>
|
||||
<p id="family-none" class="form-hint" style="display:none">{{T "family_gate.none"}}</p>
|
||||
<div id="family-pw" class="alert alert-info" style="display:none">
|
||||
{{T "family_gate.pw_once"}} <strong id="family-pw-name"></strong> — <span id="family-pw-value" class="mono"></span>
|
||||
{{T "family_gate.pw_once"}} {{T "family_gate.login_label"}} <strong id="family-pw-name" class="mono"></strong> — <span id="family-pw-value" class="mono"></span>
|
||||
</div>
|
||||
<form id="family-add" class="inline-form" onsubmit="familyAct(event, 'add', document.getElementById('family-new').value)">
|
||||
<input type="text" id="family-new" class="form-control" placeholder="{{T "family_gate.name_placeholder"}}" autocapitalize="none" required>
|
||||
<input type="text" id="family-new" class="form-control" placeholder="{{T "family_gate.name_placeholder"}}" required>
|
||||
<button type="submit" class="btn btn-sm btn-primary">{{T "family_gate.add"}}</button>
|
||||
</form>
|
||||
<p class="form-hint">{{T "family_gate.name_hint"}}</p>
|
||||
<span id="family-err" class="form-hint" style="display:none;color:var(--red)"></span>
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var T = {reset: '{{T "family_gate.reset"}}', remove: '{{T "family_gate.remove"}}',
|
||||
var T = {reset: '{{T "family_gate.reset"}}', remove: '{{T "family_gate.remove"}}', login: '{{T "family_gate.login_label"}}',
|
||||
cReset: '{{T "family_gate.confirm_reset"}}', cRemove: '{{T "family_gate.confirm_remove"}}', err: '{{T "family_gate.error"}}'};
|
||||
// W12: each member is {login, display} — the name as the household typed it, and the login made from it.
|
||||
function render(members) {
|
||||
var list = document.getElementById('family-list');
|
||||
list.textContent = '';
|
||||
document.getElementById('family-none').style.display = members.length ? 'none' : '';
|
||||
members.forEach(function (n) {
|
||||
members.forEach(function (p) {
|
||||
var n = p.login;
|
||||
var row = document.createElement('div'); row.className = 'settings-row'; row.setAttribute('data-family-member', n);
|
||||
var label = document.createElement('span'); label.className = 'settings-label mono'; label.textContent = n;
|
||||
var label = document.createElement('span'); label.className = 'settings-label'; label.textContent = p.display;
|
||||
var login = document.createElement('span'); login.className = 'form-hint'; login.textContent = ' ' + T.login + ' ';
|
||||
var code = document.createElement('span'); code.className = 'mono'; code.textContent = n;
|
||||
login.appendChild(code); label.appendChild(login);
|
||||
var val = document.createElement('span'); val.className = 'settings-value';
|
||||
[['reset', T.reset, T.cReset, 'btn-outline'], ['remove', T.remove, T.cRemove, 'btn-danger']].forEach(function (a) {
|
||||
var b = document.createElement('button'); b.type = 'button'; b.className = 'btn btn-xs ' + a[3]; b.textContent = a[1];
|
||||
@@ -447,7 +453,7 @@ function openDialog(opts){
|
||||
headers: {'X-CSRF-Token': '{{.CSRFToken}}', 'Content-Type': 'application/x-www-form-urlencoded'}, body: body})
|
||||
.then(function (r) { return r.json(); }).then(function (j) {
|
||||
if (!j.ok) { err.textContent = j.error || T.err; err.style.display = 'inline'; return; }
|
||||
render(j.data.members || []);
|
||||
render(j.data.people || []);
|
||||
var box = document.getElementById('family-pw');
|
||||
if (j.data.password) {
|
||||
document.getElementById('family-pw-name').textContent = j.data.name;
|
||||
@@ -458,7 +464,7 @@ function openDialog(opts){
|
||||
}).catch(function () { err.textContent = T.err; err.style.display = 'inline'; });
|
||||
};
|
||||
fetch('/family/members', {credentials: 'same-origin'}).then(function (r) { return r.json(); })
|
||||
.then(function (j) { if (j.ok) render(j.data.members || []); });
|
||||
.then(function (j) { if (j.ok) render(j.data.people || []); });
|
||||
})();
|
||||
</script>
|
||||
|
||||
|
||||
@@ -904,6 +904,10 @@ select.form-control option { background: var(--bg-2); color: var(--text-1); }
|
||||
/* The link takes the banner's own colour (it had none and rendered browser-default blue, 2026-10-08). */
|
||||
.alert-link { margin-left: auto; white-space: nowrap; color: inherit; text-decoration: none; }
|
||||
.alert-link:hover { text-decoration: underline; }
|
||||
/* W9 (rehearsal 2026-10-20): a link INSIDE a banner's sentence („Helyreállítási kód létrehozása →") rendered
|
||||
browser-default blue on the amber bar. It takes the banner's colour too, underlined so it still reads as a link. */
|
||||
.alert-message a { color: inherit; text-decoration: underline; text-underline-offset: 2px; }
|
||||
.alert-message a:hover { text-decoration-thickness: 2px; }
|
||||
|
||||
/* Inline storage warnings (under storage bars on dashboard and monitoring) */
|
||||
.inline-warnings { margin-top: 0.75rem; }
|
||||
|
||||
Reference in New Issue
Block a user