diff --git a/docs/assets/img/anonymous-dark-1200.webp b/docs/assets/img/anonymous-dark-1200.webp index e373df1..5e1ad1b 100644 Binary files a/docs/assets/img/anonymous-dark-1200.webp and b/docs/assets/img/anonymous-dark-1200.webp differ diff --git a/docs/assets/img/anonymous-dark-2000.webp b/docs/assets/img/anonymous-dark-2000.webp index dcd662b..7fa2f50 100644 Binary files a/docs/assets/img/anonymous-dark-2000.webp and b/docs/assets/img/anonymous-dark-2000.webp differ diff --git a/docs/assets/img/anonymous-dark.png b/docs/assets/img/anonymous-dark.png index 5b75727..57dbc0c 100644 Binary files a/docs/assets/img/anonymous-dark.png and b/docs/assets/img/anonymous-dark.png differ diff --git a/docs/assets/img/anonymous-light-1200.webp b/docs/assets/img/anonymous-light-1200.webp index 28c0972..7778f80 100644 Binary files a/docs/assets/img/anonymous-light-1200.webp and b/docs/assets/img/anonymous-light-1200.webp differ diff --git a/docs/assets/img/anonymous-light-2000.webp b/docs/assets/img/anonymous-light-2000.webp index 9c1dd06..2fed61c 100644 Binary files a/docs/assets/img/anonymous-light-2000.webp and b/docs/assets/img/anonymous-light-2000.webp differ diff --git a/docs/assets/img/anonymous-light.png b/docs/assets/img/anonymous-light.png index 6265441..68cea0a 100644 Binary files a/docs/assets/img/anonymous-light.png and b/docs/assets/img/anonymous-light.png differ diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index fc111ec..7a88a7b 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -4,6 +4,21 @@ import { initEventListeners, destroyEventListeners } from './lib/events'; import { activeView, serverStatus } from './lib/stores'; import { anonymous, toggleAnonymous } from './lib/anonymize'; + import AnonymousBanner from './components/AnonymousBanner.svelte'; + + // The mode can be switched from the sidebar button or from the settings + // panel, and the sidebar button sits directly above the settings one — + // which is how someone turns it on without meaning to. Saying so at the + // moment it changes is what turns a mystery back into a mode. + let lastAnonymous = $anonymous; + $: if ($anonymous !== lastAnonymous) { + lastAnonymous = $anonymous; + if ($anonymous) { + toastInfo($_('anonymous.active')); + } else { + toastSuccess($_('anonymous.off')); + } + } import { theme, toggleTheme } from './lib/theme'; import ServerControls from './components/ServerControls.svelte'; import FilterBar from './components/FilterBar.svelte'; @@ -19,7 +34,7 @@ import CloseDialog from './components/CloseDialog.svelte'; import UnlockScreen from './components/UnlockScreen.svelte'; import { isEncryptionLocked, getUpdateConfig, isCAKeyUnencrypted } from './lib/api'; - import { toastError } from './lib/toast'; + import { toastError, toastInfo, toastSuccess } from './lib/toast'; import { updateStore } from './lib/updateStore'; import UpdateBanner from './components/UpdateBanner.svelte'; @@ -205,6 +220,7 @@
showTLSConfig = true} /> + {#if $activeView === 'logs'} diff --git a/frontend/src/components/AnonymousBanner.svelte b/frontend/src/components/AnonymousBanner.svelte new file mode 100644 index 0000000..40d9e1d --- /dev/null +++ b/frontend/src/components/AnonymousBanner.svelte @@ -0,0 +1,73 @@ + + +{#if $anonymous} +
+ + + {$_('anonymous.active')} + {$_('anonymous.banner')} + + +
+{/if} + + diff --git a/frontend/src/lib/i18n/de.json b/frontend/src/lib/i18n/de.json index df8b9f0..3b48e7d 100644 --- a/frontend/src/lib/i18n/de.json +++ b/frontend/src/lib/i18n/de.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "Anonymer Modus ist aktiv", + "banner": "Hostnamen, Adressen, Benutzernamen und Domains auf dem Bildschirm sind Platzhalter, nicht die empfangenen Werte. Gespeicherte Daten bleiben unverändert.", + "showReal": "Echte Werte anzeigen", + "off": "Anonymer Modus ist aus", "disable": "Anonymen Modus deaktivieren", "enable": "Anonymen Modus aktivieren", "hint": "Ersetzt Hostnamen, Adressen, Benutzernamen, Domains und E-Mail-Adressen durch feste Platzhalter, damit ein Screenshot geteilt werden kann. Nur die Anzeige — gespeicherte Daten und Exporte bleiben unverändert.", diff --git a/frontend/src/lib/i18n/en.json b/frontend/src/lib/i18n/en.json index d2fca86..0d2ecf5 100644 --- a/frontend/src/lib/i18n/en.json +++ b/frontend/src/lib/i18n/en.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "Anonymous mode is on", + "banner": "Hostnames, addresses, user names and domains on screen are stand-ins, not the values received. Stored data is unchanged.", + "showReal": "Show real values", + "off": "Anonymous mode is off", "disable": "Disable anonymous mode", "enable": "Enable anonymous mode", "hint": "Replaces hostnames, addresses, usernames, domains and e-mail addresses with stable stand-ins, so a screenshot can be shared. Display only — stored data and exports are unchanged.", diff --git a/frontend/src/lib/i18n/es.json b/frontend/src/lib/i18n/es.json index c629dfa..de27fd9 100644 --- a/frontend/src/lib/i18n/es.json +++ b/frontend/src/lib/i18n/es.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "Modo anónimo activo", + "banner": "Los nombres de host, direcciones, cuentas y dominios en pantalla son sustitutos, no los valores recibidos. Los datos guardados no cambian.", + "showReal": "Mostrar los valores reales", + "off": "Modo anónimo desactivado", "disable": "Desactivar modo anónimo", "enable": "Activar modo anónimo", "hint": "Sustituye nombres de host, direcciones, usuarios, dominios y correos por alias estables, para poder compartir una captura. Solo la visualización — los datos almacenados y las exportaciones no cambian.", diff --git a/frontend/src/lib/i18n/fr.json b/frontend/src/lib/i18n/fr.json index b233ec6..6f0750c 100644 --- a/frontend/src/lib/i18n/fr.json +++ b/frontend/src/lib/i18n/fr.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "Mode anonyme actif", + "banner": "Les noms d’hôtes, adresses, comptes et domaines affichés sont des substituts, pas les valeurs reçues. Les données enregistrées sont inchangées.", + "showReal": "Afficher les vraies valeurs", + "off": "Mode anonyme désactivé", "disable": "Désactiver le mode anonyme", "enable": "Activer le mode anonyme", "hint": "Remplace les noms d’hôte, adresses, identifiants, domaines et adresses e-mail par des substituts stables, pour pouvoir partager une capture d’écran. Affichage uniquement — les données stockées et les exports sont inchangés.", diff --git a/frontend/src/lib/i18n/it.json b/frontend/src/lib/i18n/it.json index 181509e..06c2bc3 100644 --- a/frontend/src/lib/i18n/it.json +++ b/frontend/src/lib/i18n/it.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "Modalità anonima attiva", + "banner": "Nomi host, indirizzi, account e domini a schermo sono sostituti, non i valori ricevuti. I dati salvati restano invariati.", + "showReal": "Mostra i valori reali", + "off": "Modalità anonima disattivata", "disable": "Disattiva modalità anonima", "enable": "Attiva modalità anonima", "hint": "Sostituisce nomi host, indirizzi, utenti, domini ed e-mail con segnaposto stabili, per poter condividere uno screenshot. Solo visualizzazione — i dati memorizzati e le esportazioni restano invariati.", diff --git a/frontend/src/lib/i18n/ja.json b/frontend/src/lib/i18n/ja.json index c46729e..85ac96b 100644 --- a/frontend/src/lib/i18n/ja.json +++ b/frontend/src/lib/i18n/ja.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "匿名モードが有効です", + "banner": "画面上のホスト名、アドレス、アカウント、ドメインは代替値であり、受信した値ではありません。保存済みデータはそのままです。", + "showReal": "実際の値を表示", + "off": "匿名モードはオフです", "disable": "匿名モードを無効にする", "enable": "匿名モードを有効にする", "hint": "ホスト名、アドレス、ユーザー名、ドメイン、メールアドレスを安定した代替値に置き換え、スクリーンショットを共有できるようにします。表示のみ — 保存されたデータとエクスポートは変更されません。", diff --git a/frontend/src/lib/i18n/pt.json b/frontend/src/lib/i18n/pt.json index ca0687d..5fda477 100644 --- a/frontend/src/lib/i18n/pt.json +++ b/frontend/src/lib/i18n/pt.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "Modo anónimo ativo", + "banner": "Os nomes de anfitrião, endereços, contas e domínios apresentados são substitutos, não os valores recebidos. Os dados guardados não mudam.", + "showReal": "Mostrar os valores reais", + "off": "Modo anónimo desativado", "disable": "Desativar modo anónimo", "enable": "Ativar modo anónimo", "hint": "Substitui nomes de host, endereços, utilizadores, domínios e e-mails por substitutos estáveis, para poder partilhar uma captura de ecrã. Apenas a apresentação — os dados guardados e as exportações não mudam.", diff --git a/frontend/src/lib/i18n/zh.json b/frontend/src/lib/i18n/zh.json index 2772519..1230847 100644 --- a/frontend/src/lib/i18n/zh.json +++ b/frontend/src/lib/i18n/zh.json @@ -377,6 +377,9 @@ }, "anonymous": { "active": "匿名模式已开启", + "banner": "屏幕上的主机名、地址、账户和域名均为替代值,而非接收到的值。已存储的数据不变。", + "showReal": "显示真实值", + "off": "匿名模式已关闭", "disable": "禁用匿名模式", "enable": "启用匿名模式", "hint": "将主机名、地址、用户名、域名和电子邮件替换为固定的替代值,以便分享截图。仅影响显示 — 已存储的数据和导出不会改变。",