R-516: the formal forms the gate did not count are in the te-form; the gate's stems widened
49 Hungarian values on the debug (RESET prompt), storage, network-storage, security, system, deploy, restore and remote-backup copy moved from the formal („ön") to the product's te-form („írd be", „add meg", „hozz létre", „biztosan eltávolítod", „engedélyezd", „próbáld", ...). i18n_missing_gate.py's stem list widened by 33 stems (+ one listed third-person exception, „sora adja meg"); it counted 61 on the previous bundle and counts 0 now, ceiling stays 0. Decoys: a widened-stem form convicts, its te-form twin and the third-person phrase pass. 38 parity fixtures changed by exactly those bytes. Seven Go-side keys listed as REWORDED in the go-parity map. Pinned by TestR516_WidenedFormalFormsAreGone; two tests that quoted the old words follow them. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0159rPz1ZhFKsS53msqPYxtS
This commit is contained in:
@@ -106,7 +106,7 @@ func TestR103_ConfirmStatesTheOverwrite(t *testing.T) {
|
||||
html := renderBackupPage(t, "backups_apps", baseBackupData([]AppBackupRow{
|
||||
r103Row(t, true, "2026-08-25T03:30:00Z", true),
|
||||
}))
|
||||
fileConfirmStart := strings.Index(html, "Visszaállítja a hiányzó fájlokat")
|
||||
fileConfirmStart := strings.Index(html, "Visszaállítod a hiányzó fájlokat")
|
||||
if fileConfirmStart < 0 {
|
||||
t.Fatal("the additive confirm is gone — the negative control has nothing to check")
|
||||
}
|
||||
|
||||
@@ -153,3 +153,45 @@ func TestR516_FormalFormsAreGone(t *testing.T) {
|
||||
t.Fatal("the ASCII fold does not work — the negative control proves nothing")
|
||||
}
|
||||
}
|
||||
|
||||
// R-516 (2026-10-06) — the formal („ön") forms the gate's first stem list did not see: the debug RESET
|
||||
// prompt, the storage and network-storage confirms and guides, the security and system pages, the
|
||||
// deploy and restore copy. They are in the te-form now; the i18n gate's widened stems keep new ones out.
|
||||
func TestR516_WidenedFormalFormsAreGone(t *testing.T) {
|
||||
b, err := i18n.Shared()
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
want := map[string]string{
|
||||
"debug.irja_be_reset": "Írd be: RESET",
|
||||
"debug.api.reset_confirm_invalid": "Érvénytelen megerősítés — írd be: RESET",
|
||||
"settings_security.adja_meg_a_jelenlegi_jelszavat": "Add meg a jelenlegi jelszavad",
|
||||
"storage.biztosan_eltavolitja_adattarolot": "Biztosan eltávolítod a(z) {{.Path}} adattárolót?",
|
||||
"storage_network.engedelyezze_a_felhom_gep_ip": "Engedélyezd a Felhom gép IP-címét a megosztáson. Proxmox-fürt esetén minden csomópont IP-címét.",
|
||||
"backups_remote.a_letetben_levo_helyreallitasi_csomag": "A letétben lévő helyreállítási csomag nem fedi a jelenlegi távoli mentési jelszót. Hozz létre új helyreállítási kódot.",
|
||||
"err.selfupdate.mentes_fut_probalja_kesobb": "Mentés fut, próbáld később",
|
||||
"flash.backup.window_invalid_time": "Érvénytelen időpont. Használd az ÓÓ:PP formátumot (például 02:30).",
|
||||
}
|
||||
for key, w := range want {
|
||||
got, fellBack, ok := b.Text("hu", key)
|
||||
if !ok || fellBack || got != w {
|
||||
t.Errorf("%s: %q, want %q", key, got, w)
|
||||
}
|
||||
}
|
||||
fold := strings.NewReplacer("á", "a", "é", "e", "í", "i", "ó", "o", "ö", "o", "ő", "o", "ú", "u", "ü", "u", "ű", "u")
|
||||
stems := []string{"irja be", "hozzon letre", "biztosan eltavolitja", "engedelyezze", "probalja", "valasszon",
|
||||
"jelezze", "biztosan ujrainditja", "folytatja?", "szabaditson", "mentse el", "tavolitsa el"}
|
||||
for _, key := range b.Keys("hu") {
|
||||
v, _, _ := b.Text("hu", key)
|
||||
lv := fold.Replace(strings.ToLower(v))
|
||||
for _, st := range stems {
|
||||
if strings.Contains(lv, st) {
|
||||
t.Errorf("%s still carries the formal %q: %q", key, st, v)
|
||||
}
|
||||
}
|
||||
}
|
||||
// Positive control: the fold must turn a formal sentence into a matching stem, or the loop judged nothing.
|
||||
if lv := fold.Replace(strings.ToLower("Írja be a nevet")); !strings.Contains(lv, "irja be") {
|
||||
t.Fatal("the ASCII fold does not work — the negative control proves nothing")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -820,7 +820,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="okrun">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -903,7 +903,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="oksucc">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
+2
-2
@@ -851,7 +851,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="okrun">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -934,7 +934,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="oksucc">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
+2
-2
@@ -855,7 +855,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="okrun">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -938,7 +938,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="oksucc">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
@@ -849,7 +849,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="okrun">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -932,7 +932,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="oksucc">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
@@ -763,7 +763,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="okrun">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -846,7 +846,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="oksucc">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
@@ -763,7 +763,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="okrun">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -846,7 +846,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="oksucc">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12.">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
@@ -849,7 +849,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="okrun">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi másolat: 2026-09-14 05:12">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
@@ -932,7 +932,7 @@
|
||||
|
||||
<form method="POST" action="/backup/tier2/restore" style="display:inline">
|
||||
<input type="hidden" name="stack_name" value="oksucc">
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítja a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12. Figyelem: a legutóbbi mentési kísérlet nem sikerült, ezért a visszaállított fájlok ennél régebbiek lehetnek.">Fájlok visszaállítása</button>
|
||||
<button type="submit" class="btn btn-xs btn-outline" data-confirm="Visszaállítod a hiányzó fájlokat a másodlagos másolatból? A meglévő fájlok NEM módosulnak és NEM törlődnek. Az alkalmazás a művelet idejére leáll. Legutóbbi sikeres másolat: 2026-09-14 05:12. Figyelem: a legutóbbi mentési kísérlet nem sikerült, ezért a visszaállított fájlok ennél régebbiek lehetnek.">Fájlok visszaállítása</button>
|
||||
</form>
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -224,7 +224,7 @@
|
||||
|
||||
<div class="card" style="border-left:3px solid var(--warn);margin:.75rem 0;padding:.75rem 1rem">
|
||||
<p style="margin:0 0 .35rem"><strong>Helyreállítási kód szükséges</strong></p>
|
||||
<p class="form-hint" style="margin:0 0 .5rem">A távoli mentések csak akkor állíthatók vissza egy teljes meghibásodás után, ha létrehozza a helyreállítási kódot.</p>
|
||||
<p class="form-hint" style="margin:0 0 .5rem">A távoli mentések csak akkor állíthatók vissza egy teljes meghibásodás után, ha létrehozod a helyreállítási kódot.</p>
|
||||
|
||||
|
||||
<a href="/backup/escrow" class="btn btn-sm btn-primary">Helyreállítási kód létrehozása</a>
|
||||
|
||||
+1
-1
@@ -224,7 +224,7 @@
|
||||
|
||||
<div class="card" style="border-left:3px solid var(--warn);margin:.75rem 0;padding:.75rem 1rem">
|
||||
<p style="margin:0 0 .35rem"><strong>Helyreállítási kód szükséges</strong></p>
|
||||
<p class="form-hint" style="margin:0 0 .5rem">A távoli mentések csak akkor állíthatók vissza egy teljes meghibásodás után, ha létrehozza a helyreállítási kódot.</p>
|
||||
<p class="form-hint" style="margin:0 0 .5rem">A távoli mentések csak akkor állíthatók vissza egy teljes meghibásodás után, ha létrehozod a helyreállítási kódot.</p>
|
||||
|
||||
|
||||
<p class="form-hint" style="margin:0">A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik.</p>
|
||||
|
||||
@@ -234,7 +234,7 @@
|
||||
|
||||
<div class="card" style="border-left:3px solid var(--warn);margin:.75rem 0;padding:.75rem 1rem">
|
||||
<p style="margin:0 0 .35rem"><strong>Helyreállítási kód szükséges</strong></p>
|
||||
<p class="form-hint" style="margin:0 0 .5rem">A távoli mentések csak akkor állíthatók vissza egy teljes meghibásodás után, ha létrehozza a helyreállítási kódot.</p>
|
||||
<p class="form-hint" style="margin:0 0 .5rem">A távoli mentések csak akkor állíthatók vissza egy teljes meghibásodás után, ha létrehozod a helyreállítási kódot.</p>
|
||||
|
||||
|
||||
<p class="form-hint" style="margin:0">
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
|
||||
<div class="card" style="border-left:3px solid var(--warn);margin:.75rem 0;padding:.75rem 1rem">
|
||||
<p class="form-hint" style="color:var(--warn);margin:0 0 .5rem">A letétben lévő helyreállítási csomag nem fedi a jelenlegi távoli mentési jelszót. Hozzon létre új helyreállítási kódot.</p>
|
||||
<p class="form-hint" style="color:var(--warn);margin:0 0 .5rem">A letétben lévő helyreállítási csomag nem fedi a jelenlegi távoli mentési jelszót. Hozz létre új helyreállítási kódot.</p>
|
||||
|
||||
<a href="/backup/escrow" class="btn btn-sm btn-primary">Új helyreállítási kód készítése</a>
|
||||
|
||||
|
||||
@@ -223,7 +223,7 @@
|
||||
|
||||
|
||||
<div class="card" style="border-left:3px solid var(--warn);margin:.75rem 0;padding:.75rem 1rem">
|
||||
<p class="form-hint" style="color:var(--warn);margin:0 0 .5rem">A letétben lévő helyreállítási csomag nem fedi a jelenlegi távoli mentési jelszót. Hozzon létre új helyreállítási kódot.</p>
|
||||
<p class="form-hint" style="color:var(--warn);margin:0 0 .5rem">A letétben lévő helyreállítási csomag nem fedi a jelenlegi távoli mentési jelszót. Hozz létre új helyreállítási kódot.</p>
|
||||
|
||||
<p class="form-hint" style="margin:0">A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik.</p>
|
||||
|
||||
|
||||
@@ -336,7 +336,7 @@ function onRestoreAppChange() {
|
||||
typeInfo.style.display = 'none';
|
||||
|
||||
if (!appName) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon alkalmazást —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz alkalmazást —</option>';
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -363,7 +363,7 @@ function onRestoreAppChange() {
|
||||
fetch('/api/backup/snapshots?stack=' + encodeURIComponent(appName))
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(data) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz —</option>';
|
||||
if (data.ok && data.data && data.data.length > 0) {
|
||||
|
||||
var tier1 = data.data.filter(function(s) { return s.tier !== 2; });
|
||||
|
||||
@@ -202,7 +202,7 @@
|
||||
<div class="restore-form-row">
|
||||
<label class="restore-label">Alkalmazás:</label>
|
||||
<select id="restore-app" class="restore-select" onchange="onRestoreAppChange()">
|
||||
<option value="">— Válasszon —</option>
|
||||
<option value="">— Válassz —</option>
|
||||
|
||||
<option value="immich" data-has-hdd="true" data-has-db="true" data-has-volumes="true">Immich Photos</option>
|
||||
|
||||
@@ -219,7 +219,7 @@
|
||||
<div class="restore-form-row">
|
||||
<label class="restore-label">Pillanatkép:</label>
|
||||
<select id="restore-snapshot" class="restore-select" onchange="onRestoreConfirmChange()">
|
||||
<option value="">— Válasszon alkalmazást —</option>
|
||||
<option value="">— Válassz alkalmazást —</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="restore-type-info" class="restore-info" style="display:none;margin-bottom:0.5rem">
|
||||
@@ -565,7 +565,7 @@ function onRestoreAppChange() {
|
||||
typeInfo.style.display = 'none';
|
||||
|
||||
if (!appName) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon alkalmazást —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz alkalmazást —</option>';
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -592,7 +592,7 @@ function onRestoreAppChange() {
|
||||
fetch('/api/backup/snapshots?stack=' + encodeURIComponent(appName))
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(data) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz —</option>';
|
||||
if (data.ok && data.data && data.data.length > 0) {
|
||||
|
||||
var tier1 = data.data.filter(function(s) { return s.tier !== 2; });
|
||||
|
||||
+4
-4
@@ -193,7 +193,7 @@
|
||||
<div class="restore-form-row">
|
||||
<label class="restore-label">Alkalmazás:</label>
|
||||
<select id="restore-app" class="restore-select" onchange="onRestoreAppChange()">
|
||||
<option value="">— Válasszon —</option>
|
||||
<option value="">— Válassz —</option>
|
||||
|
||||
<option value="privatebin" data-has-hdd="" data-has-db="" data-has-volumes=""></option>
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
<div class="restore-form-row">
|
||||
<label class="restore-label">Pillanatkép:</label>
|
||||
<select id="restore-snapshot" class="restore-select" onchange="onRestoreConfirmChange()">
|
||||
<option value="">— Válasszon alkalmazást —</option>
|
||||
<option value="">— Válassz alkalmazást —</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="restore-type-info" class="restore-info" style="display:none;margin-bottom:0.5rem">
|
||||
@@ -424,7 +424,7 @@ function onRestoreAppChange() {
|
||||
typeInfo.style.display = 'none';
|
||||
|
||||
if (!appName) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon alkalmazást —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz alkalmazást —</option>';
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -451,7 +451,7 @@ function onRestoreAppChange() {
|
||||
fetch('/api/backup/snapshots?stack=' + encodeURIComponent(appName))
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(data) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz —</option>';
|
||||
if (data.ok && data.data && data.data.length > 0) {
|
||||
|
||||
var tier1 = data.data.filter(function(s) { return s.tier !== 2; });
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
<div class="restore-form-row">
|
||||
<label class="restore-label">Alkalmazás:</label>
|
||||
<select id="restore-app" class="restore-select" onchange="onRestoreAppChange()">
|
||||
<option value="">— Válasszon —</option>
|
||||
<option value="">— Válassz —</option>
|
||||
|
||||
<option value="privatebin" data-has-hdd="" data-has-db="" data-has-volumes=""></option>
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
<div class="restore-form-row">
|
||||
<label class="restore-label">Pillanatkép:</label>
|
||||
<select id="restore-snapshot" class="restore-select" onchange="onRestoreConfirmChange()">
|
||||
<option value="">— Válasszon alkalmazást —</option>
|
||||
<option value="">— Válassz alkalmazást —</option>
|
||||
</select>
|
||||
</div>
|
||||
<div id="restore-type-info" class="restore-info" style="display:none;margin-bottom:0.5rem">
|
||||
@@ -412,7 +412,7 @@ function onRestoreAppChange() {
|
||||
typeInfo.style.display = 'none';
|
||||
|
||||
if (!appName) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon alkalmazást —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz alkalmazást —</option>';
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -439,7 +439,7 @@ function onRestoreAppChange() {
|
||||
fetch('/api/backup/snapshots?stack=' + encodeURIComponent(appName))
|
||||
.then(function(r) { return r.json(); })
|
||||
.then(function(data) {
|
||||
snapSel.innerHTML = '<option value="">— Válasszon —</option>';
|
||||
snapSel.innerHTML = '<option value="">— Válassz —</option>';
|
||||
if (data.ok && data.data && data.data.length > 0) {
|
||||
|
||||
var tier1 = data.data.filter(function(s) { return s.tier !== 2; });
|
||||
|
||||
@@ -379,7 +379,7 @@
|
||||
|
||||
<span class="tag tag-warn" title="Az alkalmazás adattárolója nem elérhető. Csatlakoztasd újra a meghajtót, vagy helyezd át az adatokat egy másik tárhelyre."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hiányzó tárhely: HDD egy</span>
|
||||
<span class="tag tag-warn" title="Az alkalmazás egyik folyamatát a rendszer leállította, mert elfogyott a memóriája. Lehet, hogy egy feladat nem fejeződött be. Indítsd újra az alkalmazást; ha ismétlődik, jelezd az üzemeltetőnek."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Memória elfogyott</span>
|
||||
<span class="tag tag-warn" title="Az alkalmazás környezetében a hálózati tárhely helyén üres helyi könyvtár van — az adatok nem a NAS-ra kerülnek. Jelezze az üzemeltetőnek."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hálózati tárhely hibás — az alkalmazás nem a NAS-t látja</span>
|
||||
<span class="tag tag-warn" title="Az alkalmazás környezetében a hálózati tárhely helyén üres helyi könyvtár van — az adatok nem a NAS-ra kerülnek. Jelezd az üzemeltetőnek."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hálózati tárhely hibás — az alkalmazás nem a NAS-t látja</span>
|
||||
<span class="tag tag-warn" title="A hálózati tárhely (NAS) jelenleg nem érhető el. Az alkalmazás fut; az adatok elérése a NAS visszatértével helyreáll."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hálózati tárhely nem elérhető: NAS egy</span>
|
||||
<span class="tag tag-warn" title="A proxy (Traefik) csak egészséges konténerhez publikál nyilvános útvonalat. Amíg az alkalmazás nem egészséges, az URL 404-et ad, pedig a konténer fut."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>URL nem elérhető</span>
|
||||
|
||||
|
||||
+3
-3
@@ -327,7 +327,7 @@
|
||||
<p style="color:var(--crit);font-weight:600">Vészhelyzet szimuláció</p>
|
||||
<p class="text-muted" style="font-size:.85rem;margin-bottom:.5rem">Ez törli az ügyfél azonosítót és újraindítja a controllert setup módba. A konfigurációs fájlok megmaradnak a meghajtókon.</p>
|
||||
<div class="debug-form-row">
|
||||
<label>Írja be "RESET" a megerősítéshez:</label>
|
||||
<label>Írd be "RESET" a megerősítéshez:</label>
|
||||
<input type="text" id="dr-confirm-input" class="form-control debug-confirm-input" placeholder="RESET" autocomplete="off">
|
||||
<button class="btn btn-danger btn-sm" id="btn-dr-trigger" data-label="Újraindítás setup módban" onclick="triggerDR()">Újraindítás setup módban</button>
|
||||
<span class="debug-result" id="btn-dr-trigger-result"></span>
|
||||
@@ -624,11 +624,11 @@ function triggerDR() {
|
||||
if (input.value !== 'RESET') {
|
||||
var result = document.getElementById('btn-dr-trigger-result');
|
||||
result.className = 'debug-result debug-result-error';
|
||||
result.textContent = 'Írja be: RESET';
|
||||
result.textContent = 'Írd be: RESET';
|
||||
return;
|
||||
}
|
||||
var btn = document.getElementById('btn-dr-trigger');
|
||||
felhomConfirm(btn, 'FIGYELEM! Ez újraindítja a controllert setup módba. Biztosan folytatja?', function () {
|
||||
felhomConfirm(btn, 'FIGYELEM! Ez újraindítja a controllert setup módba. Biztosan folytatod?', function () {
|
||||
var result = document.getElementById('btn-dr-trigger-result');
|
||||
btn.disabled = true;
|
||||
btn.textContent = 'Folyamatban...';
|
||||
|
||||
+1
-1
@@ -1207,7 +1207,7 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
for (const pf of passwordFields) {
|
||||
if (!pf.disabled && pf.value.trim() === '') {
|
||||
const label = pf.closest('.form-group').querySelector('label').textContent.trim();
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználja a Generálás gombot vagy írjon be egy jelszót.');
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználd a Generálás gombot vagy írj be egy jelszót.');
|
||||
pf.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1210,7 +1210,7 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
for (const pf of passwordFields) {
|
||||
if (!pf.disabled && pf.value.trim() === '') {
|
||||
const label = pf.closest('.form-group').querySelector('label').textContent.trim();
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználja a Generálás gombot vagy írjon be egy jelszót.');
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználd a Generálás gombot vagy írj be egy jelszót.');
|
||||
pf.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -623,7 +623,7 @@
|
||||
<div class="alert alert-warning" style="margin-bottom:1rem">
|
||||
<svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg> Nincs elég szabad tárhely a telepítéshez. Jelenleg 1 GB szabad, és a rendszer
|
||||
5 GB tartalékot tart fenn az alapszolgáltatások (vezérlő, proxy) védelmében.
|
||||
A telepítés ezért átmenetileg le van tiltva — szabadítson fel helyet, vagy bővítse a tárhelyet.
|
||||
A telepítés ezért átmenetileg le van tiltva — szabadíts fel helyet, vagy bővítsd a tárhelyet.
|
||||
</div>
|
||||
|
||||
|
||||
@@ -778,7 +778,7 @@
|
||||
placeholder="/mnt/valahol"
|
||||
required
|
||||
disabled>
|
||||
<span class="form-hint" style="color:var(--warn)">Nincs regisztrált adattároló — adja meg kézzel az útvonalat</span>
|
||||
<span class="form-hint" style="color:var(--warn)">Nincs regisztrált adattároló — add meg kézzel az útvonalat</span>
|
||||
|
||||
|
||||
|
||||
@@ -1137,7 +1137,7 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
for (const pf of passwordFields) {
|
||||
if (!pf.disabled && pf.value.trim() === '') {
|
||||
const label = pf.closest('.form-group').querySelector('label').textContent.trim();
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználja a Generálás gombot vagy írjon be egy jelszót.');
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználd a Generálás gombot vagy írj be egy jelszót.');
|
||||
pf.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -636,7 +636,7 @@
|
||||
<div class="form-section">
|
||||
<h4>Automatikusan generált értékek</h4>
|
||||
|
||||
<p class="form-section-desc">Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezze fel a szükséges jelszavakat!</p>
|
||||
<p class="form-section-desc">Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat!</p>
|
||||
|
||||
|
||||
|
||||
@@ -1189,7 +1189,7 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
for (const pf of passwordFields) {
|
||||
if (!pf.disabled && pf.value.trim() === '') {
|
||||
const label = pf.closest('.form-group').querySelector('label').textContent.trim();
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználja a Generálás gombot vagy írjon be egy jelszót.');
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználd a Generálás gombot vagy írj be egy jelszót.');
|
||||
pf.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -606,14 +606,14 @@
|
||||
<div class="alert alert-warning" style="margin-bottom:1rem">
|
||||
<svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg> Nincs elég szabad tárhely a telepítéshez. Jelenleg 1 GB szabad, és a rendszer
|
||||
5 GB tartalékot tart fenn az alapszolgáltatások (vezérlő, proxy) védelmében.
|
||||
A telepítés ezért átmenetileg le van tiltva — szabadítson fel helyet, vagy bővítse a tárhelyet.
|
||||
A telepítés ezért átmenetileg le van tiltva — szabadíts fel helyet, vagy bővítsd a tárhelyet.
|
||||
</div>
|
||||
|
||||
|
||||
<div class="form-section">
|
||||
<h4>Automatikusan generált értékek</h4>
|
||||
|
||||
<p class="form-section-desc">Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezze fel a szükséges jelszavakat!</p>
|
||||
<p class="form-section-desc">Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat!</p>
|
||||
|
||||
|
||||
|
||||
@@ -774,7 +774,7 @@
|
||||
placeholder="/mnt/valahol"
|
||||
required
|
||||
>
|
||||
<span class="form-hint" style="color:var(--warn)">Nincs regisztrált adattároló — adja meg kézzel az útvonalat</span>
|
||||
<span class="form-hint" style="color:var(--warn)">Nincs regisztrált adattároló — add meg kézzel az útvonalat</span>
|
||||
|
||||
|
||||
|
||||
@@ -1138,7 +1138,7 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
for (const pf of passwordFields) {
|
||||
if (!pf.disabled && pf.value.trim() === '') {
|
||||
const label = pf.closest('.form-group').querySelector('label').textContent.trim();
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználja a Generálás gombot vagy írjon be egy jelszót.');
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználd a Generálás gombot vagy írj be egy jelszót.');
|
||||
pf.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
+2
-2
@@ -613,7 +613,7 @@
|
||||
<div class="form-section">
|
||||
<h4>Automatikusan generált értékek</h4>
|
||||
|
||||
<p class="form-section-desc">Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezze fel a szükséges jelszavakat!</p>
|
||||
<p class="form-section-desc">Ezek az értékek a telepítéssel együtt mentésre kerülnek. Jegyezd fel a szükséges jelszavakat!</p>
|
||||
|
||||
|
||||
|
||||
@@ -1168,7 +1168,7 @@ document.getElementById('deploy-form').addEventListener('submit', async function
|
||||
for (const pf of passwordFields) {
|
||||
if (!pf.disabled && pf.value.trim() === '') {
|
||||
const label = pf.closest('.form-group').querySelector('label').textContent.trim();
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználja a Generálás gombot vagy írjon be egy jelszót.');
|
||||
showAlert('Kötelező mező: ' + label + '\nHasználd a Generálás gombot vagy írj be egy jelszót.');
|
||||
pf.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -178,7 +178,7 @@
|
||||
</div>
|
||||
|
||||
|
||||
<div class="alert alert-info">A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik. Próbálja újra később.</div>
|
||||
<div class="alert alert-info">A funkcióhoz az ügynök frissítése szükséges — a frissítés automatikusan megérkezik. Próbáld újra később.</div>
|
||||
|
||||
|
||||
</main>
|
||||
|
||||
@@ -181,7 +181,7 @@
|
||||
<div class="form-group">
|
||||
<label for="current_password">Jelenlegi jelszó</label>
|
||||
<input type="password" id="current_password" name="current_password" required
|
||||
placeholder="Adja meg a jelenlegi jelszavát" class="form-control">
|
||||
placeholder="Add meg a jelenlegi jelszavad" class="form-control">
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="new_password">Új jelszó</label>
|
||||
@@ -346,7 +346,7 @@ function openDialog(opts){
|
||||
window.removeCountry = function(code) {
|
||||
if (code === 'HU') {
|
||||
openDialog({title:'Figyelem', confirmLabel:'Eltávolítás',
|
||||
message:'Figyelem: Magyarország eltávolítása azt jelenti, hogy magyar IP-ről sem lesz elérhető a rendszer távolról. Biztosan folytatja?',
|
||||
message:'Figyelem: Magyarország eltávolítása azt jelenti, hogy magyar IP-ről sem lesz elérhető a rendszer távolról. Biztosan folytatod?',
|
||||
onConfirm:function(){ doRemoveCountry(code); }});
|
||||
return;
|
||||
}
|
||||
@@ -405,7 +405,7 @@ function openDialog(opts){
|
||||
if (idx >= 0) {
|
||||
if (code === 'HU') {
|
||||
openDialog({title:'Figyelem', confirmLabel:'Eltávolítás',
|
||||
message:'Magyarország eltávolítása nem ajánlott. Folytatja?',
|
||||
message:'Magyarország eltávolítása nem ajánlott. Folytatod?',
|
||||
onConfirm:function(){ ov.allowed_countries.splice(ov.allowed_countries.indexOf(code), 1); },
|
||||
onCancel:function(){ el.checked = true; }});
|
||||
return;
|
||||
@@ -624,7 +624,7 @@ function openDialog(opts){
|
||||
<div class="settings-card">
|
||||
<h3>Vészhelyzeti információk</h3>
|
||||
<p class="settings-card-desc">
|
||||
Ezeket az adatokat mentse el biztos helyre. Újratelepítés esetén szükség lesz rájuk a rendszer visszaállításához.
|
||||
Ezeket az adatokat mentsd el biztos helyre. Újratelepítés esetén szükség lesz rájuk a rendszer visszaállításához.
|
||||
</p>
|
||||
<div class="settings-grid">
|
||||
<div class="settings-row">
|
||||
|
||||
@@ -277,7 +277,7 @@ function openDialog(opts){
|
||||
window.removeCountry = function(code) {
|
||||
if (code === 'HU') {
|
||||
openDialog({title:'Figyelem', confirmLabel:'Eltávolítás',
|
||||
message:'Figyelem: Magyarország eltávolítása azt jelenti, hogy magyar IP-ről sem lesz elérhető a rendszer távolról. Biztosan folytatja?',
|
||||
message:'Figyelem: Magyarország eltávolítása azt jelenti, hogy magyar IP-ről sem lesz elérhető a rendszer távolról. Biztosan folytatod?',
|
||||
onConfirm:function(){ doRemoveCountry(code); }});
|
||||
return;
|
||||
}
|
||||
@@ -336,7 +336,7 @@ function openDialog(opts){
|
||||
if (idx >= 0) {
|
||||
if (code === 'HU') {
|
||||
openDialog({title:'Figyelem', confirmLabel:'Eltávolítás',
|
||||
message:'Magyarország eltávolítása nem ajánlott. Folytatja?',
|
||||
message:'Magyarország eltávolítása nem ajánlott. Folytatod?',
|
||||
onConfirm:function(){ ov.allowed_countries.splice(ov.allowed_countries.indexOf(code), 1); },
|
||||
onCancel:function(){ el.checked = true; }});
|
||||
return;
|
||||
|
||||
@@ -465,8 +465,8 @@ function pollUntilBack() {
|
||||
<div class="settings-card">
|
||||
<h3>Vezérlő újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatja — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásai futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatod — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásaid futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
</p>
|
||||
<div id="restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-controller" onclick="restartController()">Vezérlő újraindítása</button>
|
||||
@@ -476,7 +476,7 @@ function pollUntilBack() {
|
||||
<div class="settings-card">
|
||||
<h3>Kiszolgáló újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használja, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használd, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
</p>
|
||||
<div id="server-restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-server" onclick="restartServer()">Kiszolgáló újraindítása</button>
|
||||
@@ -485,7 +485,7 @@ function pollUntilBack() {
|
||||
<script>
|
||||
function restartController() {
|
||||
openDialog({title:'Vezérlő újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
message:'Biztosan újraindítod a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
onConfirm:doRestartController});
|
||||
}
|
||||
function doRestartController() {
|
||||
@@ -499,7 +499,7 @@ function doRestartController() {
|
||||
}
|
||||
function restartServer() {
|
||||
openDialog({title:'Kiszolgáló újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
message:'Biztosan újraindítod a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
onConfirm:doRestartServer});
|
||||
}
|
||||
function doRestartServer() {
|
||||
@@ -514,7 +514,7 @@ function doRestartServer() {
|
||||
function pollRestart(attempt) {
|
||||
if (attempt > 60) {
|
||||
document.getElementById('restart-status').innerHTML =
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltse újra az oldalt kézzel.</div>';
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltsd újra az oldalt kézzel.</div>';
|
||||
return;
|
||||
}
|
||||
setTimeout(function(){
|
||||
|
||||
@@ -529,8 +529,8 @@ pollUntilBack();
|
||||
<div class="settings-card">
|
||||
<h3>Vezérlő újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatja — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásai futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatod — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásaid futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
</p>
|
||||
<div id="restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-controller" onclick="restartController()">Vezérlő újraindítása</button>
|
||||
@@ -540,7 +540,7 @@ pollUntilBack();
|
||||
<div class="settings-card">
|
||||
<h3>Kiszolgáló újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használja, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használd, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
</p>
|
||||
<div id="server-restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-server" onclick="restartServer()">Kiszolgáló újraindítása</button>
|
||||
@@ -549,7 +549,7 @@ pollUntilBack();
|
||||
<script>
|
||||
function restartController() {
|
||||
openDialog({title:'Vezérlő újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
message:'Biztosan újraindítod a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
onConfirm:doRestartController});
|
||||
}
|
||||
function doRestartController() {
|
||||
@@ -563,7 +563,7 @@ function doRestartController() {
|
||||
}
|
||||
function restartServer() {
|
||||
openDialog({title:'Kiszolgáló újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
message:'Biztosan újraindítod a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
onConfirm:doRestartServer});
|
||||
}
|
||||
function doRestartServer() {
|
||||
@@ -578,7 +578,7 @@ function doRestartServer() {
|
||||
function pollRestart(attempt) {
|
||||
if (attempt > 60) {
|
||||
document.getElementById('restart-status').innerHTML =
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltse újra az oldalt kézzel.</div>';
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltsd újra az oldalt kézzel.</div>';
|
||||
return;
|
||||
}
|
||||
setTimeout(function(){
|
||||
|
||||
@@ -414,8 +414,8 @@ function pollUntilBack() {
|
||||
<div class="settings-card">
|
||||
<h3>Vezérlő újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatja — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásai futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatod — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásaid futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
</p>
|
||||
<div id="restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-controller" onclick="restartController()">Vezérlő újraindítása</button>
|
||||
@@ -425,7 +425,7 @@ function pollUntilBack() {
|
||||
<div class="settings-card">
|
||||
<h3>Kiszolgáló újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használja, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használd, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
</p>
|
||||
<div id="server-restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-server" onclick="restartServer()">Kiszolgáló újraindítása</button>
|
||||
@@ -434,7 +434,7 @@ function pollUntilBack() {
|
||||
<script>
|
||||
function restartController() {
|
||||
openDialog({title:'Vezérlő újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
message:'Biztosan újraindítod a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
onConfirm:doRestartController});
|
||||
}
|
||||
function doRestartController() {
|
||||
@@ -448,7 +448,7 @@ function doRestartController() {
|
||||
}
|
||||
function restartServer() {
|
||||
openDialog({title:'Kiszolgáló újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
message:'Biztosan újraindítod a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
onConfirm:doRestartServer});
|
||||
}
|
||||
function doRestartServer() {
|
||||
@@ -463,7 +463,7 @@ function doRestartServer() {
|
||||
function pollRestart(attempt) {
|
||||
if (attempt > 60) {
|
||||
document.getElementById('restart-status').innerHTML =
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltse újra az oldalt kézzel.</div>';
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltsd újra az oldalt kézzel.</div>';
|
||||
return;
|
||||
}
|
||||
setTimeout(function(){
|
||||
|
||||
@@ -455,8 +455,8 @@ function pollUntilBack() {
|
||||
<div class="settings-card">
|
||||
<h3>Vezérlő újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatja — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásai futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
Ha a vezérlő hibásan működik, itt biztonságosan újraindíthatod — nem kell az egész szervert újraindítani.
|
||||
Az alkalmazásaid futnak tovább; csak a vezérlő indul újra (néhány másodperc).
|
||||
</p>
|
||||
<div id="restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-controller" onclick="restartController()">Vezérlő újraindítása</button>
|
||||
@@ -466,7 +466,7 @@ function pollUntilBack() {
|
||||
<div class="settings-card">
|
||||
<h3>Kiszolgáló újraindítása</h3>
|
||||
<p class="settings-card-desc">
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használja, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
Az egész kiszolgáló (szerver) újraindítása. Minden alkalmazás rövid időre leáll, és a vezérlőpult kb. 30 másodpercig nem elérhető. Akkor használd, ha a teljes rendszer újraindítására van szükség — egyébként a fenti „Vezérlő újraindítása” elegendő.
|
||||
</p>
|
||||
<div id="server-restart-status"></div>
|
||||
<button type="button" class="btn btn-outline" id="btn-restart-server" onclick="restartServer()">Kiszolgáló újraindítása</button>
|
||||
@@ -475,7 +475,7 @@ function pollUntilBack() {
|
||||
<script>
|
||||
function restartController() {
|
||||
openDialog({title:'Vezérlő újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
message:'Biztosan újraindítod a vezérlőt? A művelet néhány másodpercig tart, és a felület rövid időre elérhetetlen lesz.',
|
||||
onConfirm:doRestartController});
|
||||
}
|
||||
function doRestartController() {
|
||||
@@ -489,7 +489,7 @@ function doRestartController() {
|
||||
}
|
||||
function restartServer() {
|
||||
openDialog({title:'Kiszolgáló újraindítása', confirmLabel:'Újraindítás',
|
||||
message:'Biztosan újraindítja a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
message:'Biztosan újraindítod a kiszolgálót? Az alkalmazások és a vezérlőpult kb. 30 másodpercre elérhetetlenné válnak.',
|
||||
onConfirm:doRestartServer});
|
||||
}
|
||||
function doRestartServer() {
|
||||
@@ -504,7 +504,7 @@ function doRestartServer() {
|
||||
function pollRestart(attempt) {
|
||||
if (attempt > 60) {
|
||||
document.getElementById('restart-status').innerHTML =
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltse újra az oldalt kézzel.</div>';
|
||||
'<div class="alert alert-error">Az újraindítás a vártnál tovább tart. Töltsd újra az oldalt kézzel.</div>';
|
||||
return;
|
||||
}
|
||||
setTimeout(function(){
|
||||
|
||||
@@ -518,7 +518,7 @@
|
||||
|
||||
|
||||
<span class="tag tag-warn" title="Az alkalmazás adattárolója nem elérhető. Csatlakoztasd újra a meghajtót, vagy helyezd át az adatokat."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hiányzó tárhely: HDD egy</span>
|
||||
<span class="tag tag-warn" title="Az alkalmazás környezetében a hálózati tárhely helyén üres helyi könyvtár van — az adatok nem a NAS-ra kerülnek. Jelezze az üzemeltetőnek."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hálózati tárhely hibás — az alkalmazás nem a NAS-t látja</span>
|
||||
<span class="tag tag-warn" title="Az alkalmazás környezetében a hálózati tárhely helyén üres helyi könyvtár van — az adatok nem a NAS-ra kerülnek. Jelezd az üzemeltetőnek."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hálózati tárhely hibás — az alkalmazás nem a NAS-t látja</span>
|
||||
<span class="tag tag-warn" title="A hálózati tárhely (NAS) jelenleg nem érhető el. Az alkalmazás fut; az adatok elérése a NAS visszatértével helyreáll."><svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg>Hálózati tárhely nem elérhető: NAS egy</span>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -236,7 +236,7 @@ async function loadDisks(){
|
||||
var r = await fetch('/api/disks/candidates'); var j = await r.json();
|
||||
if(!j.ok){ throw new Error(j.error||'Hiba'); }
|
||||
var cands = (j.data&&j.data.attach)||[];
|
||||
if(cands.length===0){ document.getElementById('disk-list').innerHTML='<p class="form-hint">Nincs csatolható meghajtó — a csatoláshoz olyan (még nem használt) meghajtó kell, amelyen már van fájlrendszer. Új, üres meghajtóhoz használja az „Inicializálás” lehetőséget.</p>'; return; }
|
||||
if(cands.length===0){ document.getElementById('disk-list').innerHTML='<p class="form-hint">Nincs csatolható meghajtó — a csatoláshoz olyan (még nem használt) meghajtó kell, amelyen már van fájlrendszer. Új, üres meghajtóhoz használd az „Inicializálás” lehetőséget.</p>'; return; }
|
||||
var html='<div class="drive-list">';
|
||||
cands.forEach(function(d,i){
|
||||
var title = d.model ? esc(d.model) : esc(d.device);
|
||||
|
||||
@@ -412,7 +412,7 @@ window.__registeredPaths=[];
|
||||
+'<div class="alert alert-warning">'+esc(opts.danger)+'</div>'
|
||||
+appsHtml
|
||||
+copiesHtml
|
||||
+'<div class="confirm-input"><label>Megerősítéshez írja be a csatlakoztatási nevet: <strong class="mono">'+esc(opts.mountName)+'</strong></label>'
|
||||
+'<div class="confirm-input"><label>Megerősítéshez írd be a csatlakoztatási nevet: <strong class="mono">'+esc(opts.mountName)+'</strong></label>'
|
||||
+'<input type="text" id="confirm-type" class="form-control" autocomplete="off" placeholder="'+esc(opts.mountName)+'" oninput="document.getElementById(\'confirm-go\').disabled=(this.value!==\''+esc(opts.mountName)+'\')"></div>'
|
||||
+'<div class="form-actions"><button id="confirm-go" class="btn btn-danger-outline" disabled>Megerősítés</button>'
|
||||
+'<button class="btn btn-outline" onclick="__closeConfirm()">Mégsem</button></div>'
|
||||
@@ -434,7 +434,7 @@ window.__registeredPaths=[];
|
||||
|
||||
var name=where.split('/').filter(Boolean).pop()||where;
|
||||
openConfirm({title:'Meghajtó leválasztása', mount:where, mountName:name,
|
||||
danger:'A meghajtó leválasztásra kerül. Az adatok megmaradnak, de az ott tárolt alkalmazások elvesztik a tárhelyüket, amíg újra nem csatolja.',
|
||||
danger:'A meghajtó leválasztásra kerül. Az adatok megmaradnak, de az ott tárolt alkalmazások elvesztik a tárhelyüket, amíg újra nem csatolod.',
|
||||
onConfirm:async function(){
|
||||
var out=document.getElementById('confirm-result'); out.innerHTML='<p class="form-hint">Leválasztás folyamatban…</p>';
|
||||
try{
|
||||
@@ -500,7 +500,7 @@ function openDialog(opts){
|
||||
+'<h3>'+escText(opts.title||'Megerősítés')+'</h3>'
|
||||
+'<p style="white-space:pre-line">'+escText(opts.message||'')+'</p>';
|
||||
if(typeGate){
|
||||
html+='<div class="confirm-input"><label>Megerősítéshez írja be: <strong class="mono">'+escText(typeGate)+'</strong></label>'
|
||||
html+='<div class="confirm-input"><label>Megerősítéshez írd be: <strong class="mono">'+escText(typeGate)+'</strong></label>'
|
||||
+'<input type="text" id="dialog-type" class="form-control" autocomplete="off" placeholder="'+escText(typeGate)+'"></div>';
|
||||
}
|
||||
html+='<div class="form-actions"><button id="dialog-go" class="btn '+(typeGate?'btn-danger-outline':'btn-primary')+'"'+(typeGate?' disabled':'')+'>'+escText(opts.confirmLabel||'Megerősítés')+'</button>'
|
||||
@@ -535,7 +535,7 @@ function editStorageLabel(path, currentLabel) {
|
||||
wrap.querySelector('input[name=storage_label]').focus();
|
||||
}
|
||||
function storageDisconnect(path, label, appCount) {
|
||||
var msg = 'Biztos leválasztja a meghajtót: ' + label + '?';
|
||||
var msg = 'Biztosan leválasztod a meghajtót: ' + label + '?';
|
||||
if (appCount > 0) msg += '\n\nA rajta futó ' + appCount + ' alkalmazás le fog állni.';
|
||||
msg += '\n\nA meghajtó ezután biztonságosan eltávolítható.';
|
||||
openDialog({title:'Meghajtó leválasztása', message:msg, confirmLabel:'Leválasztás', onConfirm:function(){ doStorageDisconnect(path); }});
|
||||
@@ -600,7 +600,7 @@ function storageDecommission(path, label, appCount) {
|
||||
} else {
|
||||
var name = path.split('/').pop();
|
||||
openDialog({title:'Meghajtó leszerelése', confirmLabel:'Leszerelés', typeToConfirm:name,
|
||||
message:'A(z) ' + label + ' leszereléséhez (áthelyezés nélkül) írja be a meghajtó nevét megerősítésként.' +
|
||||
message:'A(z) ' + label + ' leszereléséhez (áthelyezés nélkül) írd be a meghajtó nevét megerősítésként.' +
|
||||
(appCount > 0 ? '\n\nFIGYELEM: ' + appCount + ' alkalmazás leáll (az adatok megmaradnak).' : ''),
|
||||
onConfirm:function(){ doStorageDecommission({where: path, mode: 'anyway', mount_name: name}); }});
|
||||
}
|
||||
@@ -619,7 +619,7 @@ function doStorageDecommission(body) {
|
||||
|
||||
function storageReEnroll(path, label) {
|
||||
openDialog({title:'Visszacsatlakoztatás', confirmLabel:'Visszacsatlakoztatás',
|
||||
message:'Visszacsatlakoztatja a(z) ' + label + ' meghajtót?\n\nAz adatok érintetlenek; a leállított alkalmazások újraindulnak.',
|
||||
message:'Visszacsatlakoztatod a(z) ' + label + ' meghajtót?\n\nAz adatok érintetlenek; a leállított alkalmazások újraindulnak.',
|
||||
onConfirm:function(){ doStorageReEnroll(path); }});
|
||||
}
|
||||
function doStorageReEnroll(path) {
|
||||
|
||||
@@ -238,7 +238,7 @@
|
||||
<div class="storage-path-actions">
|
||||
<button class="btn btn-xs btn-primary" onclick="storageReEnroll('\/mnt\/old','Régi lemez kettő')">Visszacsatlakoztatás</button>
|
||||
<form method="POST" action="/settings/storage/remove" style="display:inline"
|
||||
onsubmit="return storageRemoveDialog(event, this, 'Biztosan eltávolítja a(z) Régi lemez kettő (\/mnt\/old) meghajtót a rendszerből?\n\nA meghajtó adatai NEM törlődnek.')">
|
||||
onsubmit="return storageRemoveDialog(event, this, 'Biztosan eltávolítod a(z) Régi lemez kettő (\/mnt\/old) meghajtót a rendszerből?\n\nA meghajtó adatai NEM törlődnek.')">
|
||||
|
||||
<input type="hidden" name="storage_path" value="/mnt/old">
|
||||
<button type="submit" class="btn btn-xs btn-outline">Eltávolítás a rendszerből</button>
|
||||
@@ -405,7 +405,7 @@
|
||||
|
||||
|
||||
<form method="POST" action="/settings/storage/remove" style="display:inline"
|
||||
onsubmit="return storageRemoveDialog(event, this, 'Biztosan eltávolítja a(z) \/mnt\/hdd2 adattárolót?')">
|
||||
onsubmit="return storageRemoveDialog(event, this, 'Biztosan eltávolítod a(z) \/mnt\/hdd2 adattárolót?')">
|
||||
|
||||
<input type="hidden" name="storage_path" value="/mnt/hdd2">
|
||||
<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>
|
||||
@@ -712,7 +712,7 @@ window.__registeredPaths=["\/mnt\/usb1","\/mnt\/old","\/mnt\/hdd1","\/mnt\/hdd2"
|
||||
+'<div class="alert alert-warning">'+esc(opts.danger)+'</div>'
|
||||
+appsHtml
|
||||
+copiesHtml
|
||||
+'<div class="confirm-input"><label>Megerősítéshez írja be a csatlakoztatási nevet: <strong class="mono">'+esc(opts.mountName)+'</strong></label>'
|
||||
+'<div class="confirm-input"><label>Megerősítéshez írd be a csatlakoztatási nevet: <strong class="mono">'+esc(opts.mountName)+'</strong></label>'
|
||||
+'<input type="text" id="confirm-type" class="form-control" autocomplete="off" placeholder="'+esc(opts.mountName)+'" oninput="document.getElementById(\'confirm-go\').disabled=(this.value!==\''+esc(opts.mountName)+'\')"></div>'
|
||||
+'<div class="form-actions"><button id="confirm-go" class="btn btn-danger-outline" disabled>Megerősítés</button>'
|
||||
+'<button class="btn btn-outline" onclick="__closeConfirm()">Mégsem</button></div>'
|
||||
@@ -734,7 +734,7 @@ window.__registeredPaths=["\/mnt\/usb1","\/mnt\/old","\/mnt\/hdd1","\/mnt\/hdd2"
|
||||
|
||||
var name=where.split('/').filter(Boolean).pop()||where;
|
||||
openConfirm({title:'Meghajtó leválasztása', mount:where, mountName:name,
|
||||
danger:'A meghajtó leválasztásra kerül. Az adatok megmaradnak, de az ott tárolt alkalmazások elvesztik a tárhelyüket, amíg újra nem csatolja.',
|
||||
danger:'A meghajtó leválasztásra kerül. Az adatok megmaradnak, de az ott tárolt alkalmazások elvesztik a tárhelyüket, amíg újra nem csatolod.',
|
||||
onConfirm:async function(){
|
||||
var out=document.getElementById('confirm-result'); out.innerHTML='<p class="form-hint">Leválasztás folyamatban…</p>';
|
||||
try{
|
||||
@@ -800,7 +800,7 @@ function openDialog(opts){
|
||||
+'<h3>'+escText(opts.title||'Megerősítés')+'</h3>'
|
||||
+'<p style="white-space:pre-line">'+escText(opts.message||'')+'</p>';
|
||||
if(typeGate){
|
||||
html+='<div class="confirm-input"><label>Megerősítéshez írja be: <strong class="mono">'+escText(typeGate)+'</strong></label>'
|
||||
html+='<div class="confirm-input"><label>Megerősítéshez írd be: <strong class="mono">'+escText(typeGate)+'</strong></label>'
|
||||
+'<input type="text" id="dialog-type" class="form-control" autocomplete="off" placeholder="'+escText(typeGate)+'"></div>';
|
||||
}
|
||||
html+='<div class="form-actions"><button id="dialog-go" class="btn '+(typeGate?'btn-danger-outline':'btn-primary')+'"'+(typeGate?' disabled':'')+'>'+escText(opts.confirmLabel||'Megerősítés')+'</button>'
|
||||
@@ -835,7 +835,7 @@ function editStorageLabel(path, currentLabel) {
|
||||
wrap.querySelector('input[name=storage_label]').focus();
|
||||
}
|
||||
function storageDisconnect(path, label, appCount) {
|
||||
var msg = 'Biztos leválasztja a meghajtót: ' + label + '?';
|
||||
var msg = 'Biztosan leválasztod a meghajtót: ' + label + '?';
|
||||
if (appCount > 0) msg += '\n\nA rajta futó ' + appCount + ' alkalmazás le fog állni.';
|
||||
msg += '\n\nA meghajtó ezután biztonságosan eltávolítható.';
|
||||
openDialog({title:'Meghajtó leválasztása', message:msg, confirmLabel:'Leválasztás', onConfirm:function(){ doStorageDisconnect(path); }});
|
||||
@@ -900,7 +900,7 @@ function storageDecommission(path, label, appCount) {
|
||||
} else {
|
||||
var name = path.split('/').pop();
|
||||
openDialog({title:'Meghajtó leszerelése', confirmLabel:'Leszerelés', typeToConfirm:name,
|
||||
message:'A(z) ' + label + ' leszereléséhez (áthelyezés nélkül) írja be a meghajtó nevét megerősítésként.' +
|
||||
message:'A(z) ' + label + ' leszereléséhez (áthelyezés nélkül) írd be a meghajtó nevét megerősítésként.' +
|
||||
(appCount > 0 ? '\n\nFIGYELEM: ' + appCount + ' alkalmazás leáll (az adatok megmaradnak).' : ''),
|
||||
onConfirm:function(){ doStorageDecommission({where: path, mode: 'anyway', mount_name: name}); }});
|
||||
}
|
||||
@@ -919,7 +919,7 @@ function doStorageDecommission(body) {
|
||||
|
||||
function storageReEnroll(path, label) {
|
||||
openDialog({title:'Visszacsatlakoztatás', confirmLabel:'Visszacsatlakoztatás',
|
||||
message:'Visszacsatlakoztatja a(z) ' + label + ' meghajtót?\n\nAz adatok érintetlenek; a leállított alkalmazások újraindulnak.',
|
||||
message:'Visszacsatlakoztatod a(z) ' + label + ' meghajtót?\n\nAz adatok érintetlenek; a leállított alkalmazások újraindulnak.',
|
||||
onConfirm:function(){ doStorageReEnroll(path); }});
|
||||
}
|
||||
function doStorageReEnroll(path) {
|
||||
|
||||
@@ -216,7 +216,7 @@
|
||||
</label>
|
||||
<div class="alert alert-warning" id="warn-databearing" style="display:none;margin-bottom:1rem">
|
||||
<svg class="ico ico-sm"><use href="#i-triangle-alert"/></svg> A kiválasztott meghajtó <strong>adatot tartalmaz</strong>. Az inicializálás (formázás) törli a rajta lévő
|
||||
összes adatot — a folytatáshoz meg kell erősítenie.
|
||||
összes adatot — a folytatáshoz meg kell erősítened.
|
||||
</div>
|
||||
<div class="form-actions" style="gap:.75rem">
|
||||
<button type="submit" class="btn btn-danger-outline" id="init-btn">Inicializálás indítása</button>
|
||||
@@ -341,7 +341,7 @@ async function submitInit(ev){
|
||||
function renderConfirm(durableId, out, btn){
|
||||
var name=document.getElementById('mount-name').value;
|
||||
out.innerHTML='<div class="alert alert-warning">A meghajtó adatot tartalmaz. A formázás <strong>véglegesen törli</strong> a rajta lévő összes adatot.</div>'
|
||||
+'<div class="confirm-input"><label>Megerősítéshez írja be a csatlakoztatási nevet: <strong class="mono">'+esc(name)+'</strong></label>'
|
||||
+'<div class="confirm-input"><label>Megerősítéshez írd be a csatlakoztatási nevet: <strong class="mono">'+esc(name)+'</strong></label>'
|
||||
+'<input type="text" id="init-confirm-type" class="form-control" autocomplete="off" oninput="document.getElementById(\'init-confirm-go\').disabled=(this.value!==\''+esc(name)+'\')"></div>'
|
||||
+'<div class="form-actions" style="gap:.6rem;margin-top:.75rem"><button id="init-confirm-go" class="btn btn-danger-outline" disabled>Törlés és inicializálás megerősítése</button></div>'
|
||||
+'<div id="init-confirm-result" style="margin-top:.6rem"></div>';
|
||||
|
||||
@@ -190,7 +190,7 @@
|
||||
<div class="storage-path-info">
|
||||
<span class="storage-path-label">NAS a</span>
|
||||
<span class="storage-path-path mono">nfs · nas.example:/export/a → /mnt/net/a</span>
|
||||
<span class="form-hint">A megosztás be van állítva a gazdagépen, de nincs regisztrálva — egy megszakadt csatlakoztatás maradványa. Távolítsa el, vagy adja hozzá újra ugyanezzel a névvel.</span>
|
||||
<span class="form-hint">A megosztás be van állítva a gazdagépen, de nincs regisztrálva — egy megszakadt csatlakoztatás maradványa. Távolítsd el, vagy add hozzá újra ugyanezzel a névvel.</span>
|
||||
</div>
|
||||
<div class="storage-path-badges">
|
||||
<span class="badge badge-warn" title="Beállítva a gazdagépen, de nincs regisztrálva">Árva</span>
|
||||
@@ -346,20 +346,20 @@
|
||||
<h3>Mit kell beállítani a NAS-on?</h3>
|
||||
<details>
|
||||
<summary>Útmutató megjelenítése</summary>
|
||||
<p>Engedélyezze a Felhom gép IP-címét a megosztáson. Proxmox-fürt esetén minden csomópont IP-címét.</p>
|
||||
<p>Engedélyezd a Felhom gép IP-címét a megosztáson. Proxmox-fürt esetén minden csomópont IP-címét.</p>
|
||||
<h4>SMB (Synology, QNAP — a legtöbb NAS)</h4>
|
||||
<p>Hozzon létre (vagy jelöljön ki) egy felhasználót a NAS-on, és adjon neki írás-olvasás jogot a
|
||||
<p>Hozz létre (vagy jelölj ki) egy felhasználót a NAS-on, és adj neki írás-olvasás jogot a
|
||||
megosztásra. Más beállítás nem szükséges — a fájlok a NAS-on ennek a felhasználónak a nevében
|
||||
jönnek létre.</p>
|
||||
<h4>NFS</h4>
|
||||
<p>Synology (DSM, ellenőrzött lépések): először kapcsolja be az NFS-t — Vezérlőpult → File
|
||||
Services → NFS fül → „Enable NFS service”, és állítsa a „Maximum NFS protocol” értékét
|
||||
<p>Synology (DSM, ellenőrzött lépések): először kapcsold be az NFS-t — Vezérlőpult → File
|
||||
Services → NFS fül → „Enable NFS service”, és állítsd a „Maximum NFS protocol” értékét
|
||||
NFSv4.1-re (az alapértelmezett NFSv3 nem elegendő a csatlakoztatáshoz). Ezután a megosztott
|
||||
mappa szerkesztésében az „NFS Permissions” fülön hozzon létre szabályt a Felhom gép
|
||||
mappa szerkesztésében az „NFS Permissions” fülön hozz létre szabályt a Felhom gép
|
||||
IP-címére, Read/Write jogosultsággal, a Squash mezőben a „Map all users to admin” opcióval.
|
||||
A megosztás elérési útja ugyanezen a fülön látható (pl. /volume1/<mappa>) — ez kerül a
|
||||
fenti „Megosztás” mezőbe.</p>
|
||||
<p>Egyszerű (más NAS-okhoz): kapcsolja be az exporton a „minden felhasználó leképezése” (map all
|
||||
<p>Egyszerű (más NAS-okhoz): kapcsold be az exporton a „minden felhasználó leképezése” (map all
|
||||
users / all squash) opciót írás-olvasás móddal — bármelyik helyi felhasználóra. A fájlok
|
||||
tulajdonosa a rendszerben „nobody”-ként látszik; az alkalmazások túlnyomó többségének ez megfelelő.</p>
|
||||
<p>Teljes értékű (TrueNAS / Linux szerver): export a következő opciókkal:
|
||||
@@ -452,7 +452,7 @@ function nsShowError(message, detail){
|
||||
|
||||
function netStorageRemove(name,label){
|
||||
openDialog({title:'Hálózati tárhely eltávolítása', confirmLabel:'Eltávolítás',
|
||||
message:'Biztosan eltávolítja a(z) '+label+' hálózati tárhelyet?\n\nA megosztás leválasztásra kerül; a NAS-on lévő adatok érintetlenek maradnak.',
|
||||
message:'Biztosan eltávolítod a(z) '+label+' hálózati tárhelyet?\n\nA megosztás leválasztásra kerül; a NAS-on lévő adatok érintetlenek maradnak.',
|
||||
onConfirm:function(){
|
||||
fetch('/api/storage/netstorage/remove',{method:'POST',headers:Object.assign({'Content-Type':'application/json'},csrfHeaders()),body:JSON.stringify({name:name})})
|
||||
.then(function(r){return r.json();}).then(function(d){
|
||||
|
||||
+7
-7
@@ -201,20 +201,20 @@
|
||||
<h3>Mit kell beállítani a NAS-on?</h3>
|
||||
<details>
|
||||
<summary>Útmutató megjelenítése</summary>
|
||||
<p>Engedélyezze a Felhom gép IP-címét a megosztáson. Proxmox-fürt esetén minden csomópont IP-címét.</p>
|
||||
<p>Engedélyezd a Felhom gép IP-címét a megosztáson. Proxmox-fürt esetén minden csomópont IP-címét.</p>
|
||||
<h4>SMB (Synology, QNAP — a legtöbb NAS)</h4>
|
||||
<p>Hozzon létre (vagy jelöljön ki) egy felhasználót a NAS-on, és adjon neki írás-olvasás jogot a
|
||||
<p>Hozz létre (vagy jelölj ki) egy felhasználót a NAS-on, és adj neki írás-olvasás jogot a
|
||||
megosztásra. Más beállítás nem szükséges — a fájlok a NAS-on ennek a felhasználónak a nevében
|
||||
jönnek létre.</p>
|
||||
<h4>NFS</h4>
|
||||
<p>Synology (DSM, ellenőrzött lépések): először kapcsolja be az NFS-t — Vezérlőpult → File
|
||||
Services → NFS fül → „Enable NFS service”, és állítsa a „Maximum NFS protocol” értékét
|
||||
<p>Synology (DSM, ellenőrzött lépések): először kapcsold be az NFS-t — Vezérlőpult → File
|
||||
Services → NFS fül → „Enable NFS service”, és állítsd a „Maximum NFS protocol” értékét
|
||||
NFSv4.1-re (az alapértelmezett NFSv3 nem elegendő a csatlakoztatáshoz). Ezután a megosztott
|
||||
mappa szerkesztésében az „NFS Permissions” fülön hozzon létre szabályt a Felhom gép
|
||||
mappa szerkesztésében az „NFS Permissions” fülön hozz létre szabályt a Felhom gép
|
||||
IP-címére, Read/Write jogosultsággal, a Squash mezőben a „Map all users to admin” opcióval.
|
||||
A megosztás elérési útja ugyanezen a fülön látható (pl. /volume1/<mappa>) — ez kerül a
|
||||
fenti „Megosztás” mezőbe.</p>
|
||||
<p>Egyszerű (más NAS-okhoz): kapcsolja be az exporton a „minden felhasználó leképezése” (map all
|
||||
<p>Egyszerű (más NAS-okhoz): kapcsold be az exporton a „minden felhasználó leképezése” (map all
|
||||
users / all squash) opciót írás-olvasás móddal — bármelyik helyi felhasználóra. A fájlok
|
||||
tulajdonosa a rendszerben „nobody”-ként látszik; az alkalmazások túlnyomó többségének ez megfelelő.</p>
|
||||
<p>Teljes értékű (TrueNAS / Linux szerver): export a következő opciókkal:
|
||||
@@ -307,7 +307,7 @@ function nsShowError(message, detail){
|
||||
|
||||
function netStorageRemove(name,label){
|
||||
openDialog({title:'Hálózati tárhely eltávolítása', confirmLabel:'Eltávolítás',
|
||||
message:'Biztosan eltávolítja a(z) '+label+' hálózati tárhelyet?\n\nA megosztás leválasztásra kerül; a NAS-on lévő adatok érintetlenek maradnak.',
|
||||
message:'Biztosan eltávolítod a(z) '+label+' hálózati tárhelyet?\n\nA megosztás leválasztásra kerül; a NAS-on lévő adatok érintetlenek maradnak.',
|
||||
onConfirm:function(){
|
||||
fetch('/api/storage/netstorage/remove',{method:'POST',headers:Object.assign({'Content-Type':'application/json'},csrfHeaders()),body:JSON.stringify({name:name})})
|
||||
.then(function(r){return r.json();}).then(function(d){
|
||||
|
||||
Reference in New Issue
Block a user