v0.321.0: FileBrowser's stale password and its own banners; one backup section on the Data tab; install address of an installed app
gates / gates (push) Successful in 43s
gates / gates (push) Successful in 43s
R-1101: the change-it line is gone for FileBrowser; in the generated state the page asks FileBrowser whether
the stored password still logs in (only its own 401/403 counts) and, refused, says so and offers the
new-password press. The rendered FileBrowser config switches off its update notice and its Install-app
prompt. The Data tab's backup part is one section in plain words (no off-drive, no PBS); the export
password eye is a text button. R-1095: /apps/{slug}/install of an installed app 302s to its settings tab.
Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -88,27 +88,43 @@ function appMigrate(btn,app,label){
|
||||
</script>
|
||||
{{end}}
|
||||
|
||||
{{/* The nightly copy, stated as a fact. It was a card on the settings page; the files it is about
|
||||
live here. */}}
|
||||
<div class="app-section">
|
||||
<h3>{{T "deploy.biztonsagi_mentes"}}</h3>
|
||||
|
||||
<div class="cross-drive-nightly">
|
||||
<span class="form-hint" style="display:block;margin-top:.25rem">
|
||||
{{T "deploy.az_alkalmazas_adatbazisa_es_docker"}}
|
||||
</span>
|
||||
</div>
|
||||
{{/* „BIZTONSAGI MENTES" — ONE section (v0.321.0). The nightly backup and the 2nd copy were two sections with
|
||||
two titles for one subject, and the 2nd copy's state sat in a two-column grid of monospace values. Now: the
|
||||
nightly backup is a row, the 2nd copy's state is rows, then what it means and the form to change it. The words
|
||||
are plain: no „off-drive", no „PBS", no „DB/konfiguráció". Pinned by TestAppData_OneBackupSection. */}}
|
||||
<div class="app-section" id="app-backup-section" data-backup-section="1">
|
||||
<h3>{{T "deploy.biztonsagi_mentes"}}</h3>
|
||||
<div class="app-field-row" data-backup-row="nightly">
|
||||
<div class="app-field-label">{{T "app_page.backup_nightly"}}</div>
|
||||
<div class="app-field-value">{{T "app_page.backup_nightly_text"}} <a href="/backups" class="app-info-link">{{T "app_page.backup_status_link"}}</a></div>
|
||||
</div>
|
||||
|
||||
{{if .Tier2}}
|
||||
{{/* v0.316.0: a SECTION, not a page title over a card. „2. mentés beállítása — <app>" was the
|
||||
heading of a page that no longer exists; the tab already says which app this is. */}}
|
||||
<div class="app-section">
|
||||
<h3>{{T "app_page.second_backup"}}</h3>
|
||||
{{with .Tier2}}
|
||||
<p style="color:var(--text-3);font-size:.9rem;margin-top:0">
|
||||
{{T "tier2_config.a_2_mentes_egy_masik"}}
|
||||
</p>
|
||||
{{- if .Tier2}}{{with .Tier2}}
|
||||
{{- if .IsHDDApp}}
|
||||
<div class="app-field-row" data-backup-row="second">
|
||||
<div class="app-field-label">{{T "tier2_config.2_mentes"}}</div>
|
||||
<div class="app-field-value">{{if .Disabled}}{{T "tier2_config.kikapcsolva"}}{{else}}{{T "tier2_config.bekapcsolva"}}{{end}}</div>
|
||||
</div>
|
||||
{{- if .NoTarget}}
|
||||
<div class="app-field-row" data-backup-row="target">
|
||||
<div class="app-field-label">{{T "tier2_config.cel"}}</div>
|
||||
<div class="app-field-value text-error">{{T "tier2_config.nincs_elerheto_off_drive_cel"}}</div>
|
||||
</div>
|
||||
<div class="app-field-row">
|
||||
<div class="app-field-label">{{T "tier2_config.megjegyzes"}}</div>
|
||||
<div class="app-field-value">{{.NoTargetReason}}</div>
|
||||
</div>
|
||||
{{- else}}
|
||||
<div class="app-field-row" data-backup-row="target">
|
||||
<div class="app-field-label">{{T "tier2_config.cel_meghajto"}}</div>
|
||||
<div class="app-field-value">{{.EffectiveLabel}}{{if .EffectiveIsSSD}} {{T "tier2_config.csak_db_konfiguracio"}}{{end}}</div>
|
||||
</div>
|
||||
<div class="app-field-row">
|
||||
<div class="app-field-label">{{T "tier2_config.kivalasztas_modja"}}</div>
|
||||
<div class="app-field-value">{{if .Preferred}}{{T "tier2_config.kezi_valasztas"}}{{else}}{{T "tier2_config.automatikus_kisbetu"}}{{end}} — {{.EffectiveDesc}}</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{- end}}
|
||||
<p class="app-field-hint" style="margin-top:12px">{{T "tier2_config.a_2_mentes_egy_masik"}}</p>
|
||||
|
||||
{{if not .IsHDDApp}}
|
||||
{{if eq $.SystemBackup "protected"}}
|
||||
@@ -129,40 +145,13 @@ function appMigrate(btn,app,label){
|
||||
</div>
|
||||
{{end}}
|
||||
{{else}}
|
||||
<h3 style="margin-top:1.5rem">{{T "tier2_config.jelenlegi_allapot"}}</h3>
|
||||
<div class="sysinfo-grid">
|
||||
<div class="sysinfo-row">
|
||||
<span class="sysinfo-label">{{T "tier2_config.2_mentes"}}</span>
|
||||
<span class="sysinfo-value">{{if .Disabled}}{{T "tier2_config.kikapcsolva"}}{{else}}{{T "tier2_config.bekapcsolva"}}{{end}}</span>
|
||||
</div>
|
||||
{{if .NoTarget}}
|
||||
<div class="sysinfo-row">
|
||||
<span class="sysinfo-label">{{T "tier2_config.cel"}}</span>
|
||||
<span class="sysinfo-value text-error">{{T "tier2_config.nincs_elerheto_off_drive_cel"}}</span>
|
||||
</div>
|
||||
<div class="sysinfo-row">
|
||||
<span class="sysinfo-label">{{T "tier2_config.megjegyzes"}}</span>
|
||||
<span class="sysinfo-value" style="color:var(--text-3)">{{.NoTargetReason}}</span>
|
||||
</div>
|
||||
{{else}}
|
||||
<div class="sysinfo-row">
|
||||
<span class="sysinfo-label">{{T "tier2_config.cel_meghajto"}}</span>
|
||||
<span class="sysinfo-value">{{.EffectiveLabel}}{{if .EffectiveIsSSD}} {{T "tier2_config.csak_db_konfiguracio"}}{{end}}</span>
|
||||
</div>
|
||||
<div class="sysinfo-row">
|
||||
<span class="sysinfo-label">{{T "tier2_config.kivalasztas_modja"}}</span>
|
||||
<span class="sysinfo-value" style="color:var(--text-3)">{{if .Preferred}}{{T "tier2_config.kezi_valasztas"}}{{else}}{{T "tier2_config.automatikus_kisbetu"}}{{end}} — {{.EffectiveDesc}}</span>
|
||||
</div>
|
||||
{{end}}
|
||||
</div>
|
||||
|
||||
{{if .EffectiveIsSSD}}
|
||||
<div class="app-callout app-callout-warn" style="margin-top:1rem">
|
||||
{{T "tier2_config.jelenleg_csak_a_belso_ssd"}}
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
<form method="POST" action="/stacks/{{$.StackName}}/backup" style="margin-top:1.5rem">
|
||||
<form method="POST" action="/stacks/{{$.StackName}}/backup" style="margin-top:1.5rem" data-second-backup-form="1">
|
||||
{{$.CSRFField}}
|
||||
<div class="form-group">
|
||||
<label style="display:flex;align-items:center;gap:.5rem">
|
||||
@@ -187,9 +176,8 @@ function appMigrate(btn,app,label){
|
||||
<button type="submit" class="btn btn-primary">{{T "tier2_config.mentes"}}</button>
|
||||
</form>
|
||||
{{end}}
|
||||
{{end}}
|
||||
{{end}}{{end}}
|
||||
</div>
|
||||
{{end}}
|
||||
|
||||
{{if .ExportOffered}}
|
||||
<div class="app-section">
|
||||
@@ -242,7 +230,7 @@ function appMigrate(btn,app,label){
|
||||
<h3>{{T "app_export.jelszo_opcionalis"}}</h3>
|
||||
<div style="display:flex;gap:.5rem;margin-bottom:1rem">
|
||||
<input type="password" id="exportPassword" class="form-control" placeholder="{{T "app_export.titkositasi_jelszo"}}" style="flex:1">
|
||||
<button class="btn btn-sm btn-outline" onclick="togglePw()" type="button" title="{{T "app_export.jelszo_mutatasa"}}">👁</button>
|
||||
<button class="btn btn-sm btn-outline" onclick="togglePw(this)" type="button" id="exportPwToggle" aria-label="{{T "app_export.jelszo_mutatasa"}}">{{T "deploy.megjelenites"}}</button>
|
||||
</div>
|
||||
|
||||
<label style="display:flex;align-items:flex-start;gap:.5rem;margin-bottom:.5rem;cursor:pointer">
|
||||
@@ -283,9 +271,11 @@ function csrfH() {
|
||||
return el ? {'X-CSRF-Token': el.content, 'Content-Type': 'application/json'} : {'Content-Type': 'application/json'};
|
||||
}
|
||||
|
||||
function togglePw() {
|
||||
function togglePw(btn) {
|
||||
var inp = document.getElementById('exportPassword');
|
||||
inp.type = inp.type === 'password' ? 'text' : 'password';
|
||||
var show = inp.type === 'password';
|
||||
inp.type = show ? 'text' : 'password';
|
||||
if (btn) { btn.textContent = show ? '{{T "app_info.elrejtes"}}' : '{{T "deploy.megjelenites"}}'; }
|
||||
}
|
||||
|
||||
async function loadEstimate() {
|
||||
|
||||
Reference in New Issue
Block a user