fix: Add link to websocket disconnection

This commit is contained in:
jamesread 2026-03-10 11:40:06 +00:00
parent b33aded230
commit 9d916b7175
7 changed files with 44 additions and 24 deletions

View File

@ -1,7 +1,9 @@
<template> <template>
<span id="connection-banner" v-if="!connectionState.connected" class="inline-notification critical user-info-connection"> <span id="connection-banner" v-if="!connectionState.connected" class="inline-notification critical user-info-connection">
<span class="connection-banner-sr-only" role="status">{{ staticAnnouncement }}</span> <span class="connection-banner-sr-only" role="status">{{ staticAnnouncement }}</span>
<span aria-hidden="true">{{ bannerText }}</span> <span aria-hidden="true">
<a :href="websocketDocsUrl" target="_blank" rel="noopener noreferrer" class="connection-banner-link">{{ linkText }}</a>{{ bannerSuffix }}
</span>
</span> </span>
</template> </template>
@ -12,6 +14,10 @@ import { connectionState } from '../stores/connectionState.js'
const { t } = useI18n() const { t } = useI18n()
const websocketDocsUrl = 'https://docs.olivetin.app/troubleshooting/err-websocket-connection.html'
const linkText = computed(() => t('disconnected-banner-link-text'))
function formatShortRelative(ms) { function formatShortRelative(ms) {
if (ms < 0) return '0s' if (ms < 0) return '0s'
const secs = Math.floor(ms / 1000) const secs = Math.floor(ms / 1000)
@ -49,16 +55,16 @@ onUnmounted(() => {
const staticAnnouncement = computed(() => t('disconnected-banner-announcement')) const staticAnnouncement = computed(() => t('disconnected-banner-announcement'))
const bannerText = computed(() => { const bannerSuffix = computed(() => {
const at = connectionState.disconnectedAt const at = connectionState.disconnectedAt
const next = connectionState.nextReconnectAt const next = connectionState.nextReconnectAt
const n = now.value const n = now.value
const disconnectedSince = formatShortTime(at) const disconnectedSince = formatShortTime(at)
if (next != null && next > n) { if (next != null && next > n) {
const reconnectIn = formatShortRelative(next - n) const reconnectIn = formatShortRelative(next - n)
return t('disconnected-banner', { disconnectedSince, reconnectIn }) return t('disconnected-banner-suffix', { disconnectedSince, reconnectIn })
} }
return t('disconnected-banner-reconnecting', { disconnectedSince }) return t('disconnected-banner-suffix-reconnecting', { disconnectedSince })
}) })
</script> </script>
@ -70,6 +76,10 @@ const bannerText = computed(() => {
border: 0; border: 0;
margin: 0; margin: 0;
} }
.connection-banner-link {
color: inherit;
text-decoration: underline;
}
.connection-banner-sr-only { .connection-banner-sr-only {
position: absolute; position: absolute;
width: 1px; width: 1px;

View File

@ -21,9 +21,10 @@
"diagnostics.useragent-data-error": "Fehler beim Abrufen von userAgentData", "diagnostics.useragent-data-error": "Fehler beim Abrufen von userAgentData",
"diagnostics.where-to-find-help": "Wo Sie Hilfe finden", "diagnostics.where-to-find-help": "Wo Sie Hilfe finden",
"disconnected": "Getrennt", "disconnected": "Getrennt",
"disconnected-banner": "Events-Websocket getrennt seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}.",
"disconnected-banner-announcement": "Events-Websocket getrennt.", "disconnected-banner-announcement": "Events-Websocket getrennt.",
"disconnected-banner-reconnecting": "Events-Websocket getrennt seit {disconnectedSince}. Verbindungsversuch…", "disconnected-banner-link-text": "Events-Websocket getrennt",
"disconnected-banner-suffix": " seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}.",
"disconnected-banner-suffix-reconnecting": " seit {disconnectedSince}. Verbindungsversuch…",
"docs": "Dokumentation", "docs": "Dokumentation",
"language-dialog.browser-languages": "Browser-Sprachen", "language-dialog.browser-languages": "Browser-Sprachen",
"language-dialog.close": "Schließen", "language-dialog.close": "Schließen",
@ -79,9 +80,10 @@
"diagnostics.useragent-data-error": "Error retrieving userAgentData", "diagnostics.useragent-data-error": "Error retrieving userAgentData",
"diagnostics.where-to-find-help": "Where to find help", "diagnostics.where-to-find-help": "Where to find help",
"disconnected": "Disconnected", "disconnected": "Disconnected",
"disconnected-banner": "Events websocket disconnected since {disconnectedSince}. Trying reconnect in {reconnectIn}.",
"disconnected-banner-announcement": "Events websocket disconnected.", "disconnected-banner-announcement": "Events websocket disconnected.",
"disconnected-banner-reconnecting": "Events websocket disconnected since {disconnectedSince}. Trying reconnect…", "disconnected-banner-link-text": "Events websocket disconnected",
"disconnected-banner-suffix": " since {disconnectedSince}. Trying reconnect in {reconnectIn}.",
"disconnected-banner-suffix-reconnecting": " since {disconnectedSince}. Trying reconnect…",
"docs": "Documentation", "docs": "Documentation",
"language-dialog.browser-languages": "Browser languages", "language-dialog.browser-languages": "Browser languages",
"language-dialog.close": "Close", "language-dialog.close": "Close",
@ -137,9 +139,10 @@
"diagnostics.useragent-data-error": "Error al recuperar userAgentData", "diagnostics.useragent-data-error": "Error al recuperar userAgentData",
"diagnostics.where-to-find-help": "Dónde encontrar ayuda", "diagnostics.where-to-find-help": "Dónde encontrar ayuda",
"disconnected": "Desconectado", "disconnected": "Desconectado",
"disconnected-banner": "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión en {reconnectIn}.",
"disconnected-banner-announcement": "Websocket de eventos desconectado.", "disconnected-banner-announcement": "Websocket de eventos desconectado.",
"disconnected-banner-reconnecting": "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión…", "disconnected-banner-link-text": "Websocket de eventos desconectado",
"disconnected-banner-suffix": " desde {disconnectedSince}. Reintentando conexión en {reconnectIn}.",
"disconnected-banner-suffix-reconnecting": " desde {disconnectedSince}. Reintentando conexión…",
"docs": "Documentación", "docs": "Documentación",
"language-dialog.browser-languages": "Idiomas del navegador", "language-dialog.browser-languages": "Idiomas del navegador",
"language-dialog.close": "Cerrar", "language-dialog.close": "Cerrar",
@ -195,9 +198,10 @@
"diagnostics.useragent-data-error": "Errore nel recupero di userAgentData", "diagnostics.useragent-data-error": "Errore nel recupero di userAgentData",
"diagnostics.where-to-find-help": "Dove trovare aiuto", "diagnostics.where-to-find-help": "Dove trovare aiuto",
"disconnected": "Disconnesso", "disconnected": "Disconnesso",
"disconnected-banner": "Websocket eventi disconnesso dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}.",
"disconnected-banner-announcement": "Websocket eventi disconnesso.", "disconnected-banner-announcement": "Websocket eventi disconnesso.",
"disconnected-banner-reconnecting": "Websocket eventi disconnesso dalle {disconnectedSince}. Tentativo di connessione…", "disconnected-banner-link-text": "Websocket eventi disconnesso",
"disconnected-banner-suffix": " dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}.",
"disconnected-banner-suffix-reconnecting": " dalle {disconnectedSince}. Tentativo di connessione…",
"docs": "Documentazione", "docs": "Documentazione",
"language-dialog.browser-languages": "Lingue del browser", "language-dialog.browser-languages": "Lingue del browser",
"language-dialog.close": "Chiudi", "language-dialog.close": "Chiudi",
@ -253,9 +257,10 @@
"diagnostics.useragent-data-error": "检索 userAgentData 时出错", "diagnostics.useragent-data-error": "检索 userAgentData 时出错",
"diagnostics.where-to-find-help": "在哪里找到帮助", "diagnostics.where-to-find-help": "在哪里找到帮助",
"disconnected": "已断开连接", "disconnected": "已断开连接",
"disconnected-banner": "事件 WebSocket 自 {disconnectedSince} 已断开。{reconnectIn} 后尝试重连。",
"disconnected-banner-announcement": "事件 WebSocket 已断开。", "disconnected-banner-announcement": "事件 WebSocket 已断开。",
"disconnected-banner-reconnecting": "事件 WebSocket 自 {disconnectedSince} 已断开。正在尝试重连…", "disconnected-banner-link-text": "事件 WebSocket 已断开",
"disconnected-banner-suffix": "自 {disconnectedSince}。{reconnectIn} 后尝试重连。",
"disconnected-banner-suffix-reconnecting": "自 {disconnectedSince}。正在尝试重连…",
"docs": "文档", "docs": "文档",
"language-dialog.browser-languages": "浏览器语言", "language-dialog.browser-languages": "浏览器语言",
"language-dialog.close": "关闭", "language-dialog.close": "关闭",

View File

@ -8,9 +8,10 @@ translations:
connected: Verbunden connected: Verbunden
disconnected: Getrennt disconnected: Getrennt
reconnecting: Verbinde erneut… reconnecting: Verbinde erneut…
disconnected-banner: "Events-Websocket getrennt seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}."
disconnected-banner-reconnecting: "Events-Websocket getrennt seit {disconnectedSince}. Verbindungsversuch…"
disconnected-banner-announcement: Events-Websocket getrennt. disconnected-banner-announcement: Events-Websocket getrennt.
disconnected-banner-link-text: "Events-Websocket getrennt"
disconnected-banner-suffix: " seit {disconnectedSince}. Erneuter Verbindungsversuch in {reconnectIn}."
disconnected-banner-suffix-reconnecting: " seit {disconnectedSince}. Verbindungsversuch…"
login-button: Login login-button: Login
raise-issue: Ein Problem melden auf GitHub raise-issue: Ein Problem melden auf GitHub
docs: Dokumentation docs: Dokumentation

View File

@ -10,9 +10,10 @@ translations:
connected: Connected connected: Connected
disconnected: Disconnected disconnected: Disconnected
reconnecting: Reconnecting… reconnecting: Reconnecting…
disconnected-banner: "Events websocket disconnected since {disconnectedSince}. Trying reconnect in {reconnectIn}."
disconnected-banner-reconnecting: "Events websocket disconnected since {disconnectedSince}. Trying reconnect…"
disconnected-banner-announcement: Events websocket disconnected. disconnected-banner-announcement: Events websocket disconnected.
disconnected-banner-link-text: "Events websocket disconnected"
disconnected-banner-suffix: " since {disconnectedSince}. Trying reconnect in {reconnectIn}."
disconnected-banner-suffix-reconnecting: " since {disconnectedSince}. Trying reconnect…"
login-button: Login login-button: Login
logs.title: Logs logs.title: Logs
logs.page-description: This is a list of logs from actions that have been executed. You can filter the list by action title. logs.page-description: This is a list of logs from actions that have been executed. You can filter the list by action title.

View File

@ -8,9 +8,10 @@ translations:
connected: Conectado connected: Conectado
disconnected: Desconectado disconnected: Desconectado
reconnecting: Reconectando… reconnecting: Reconectando…
disconnected-banner: "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión en {reconnectIn}."
disconnected-banner-reconnecting: "Websocket de eventos desconectado desde {disconnectedSince}. Reintentando conexión…"
disconnected-banner-announcement: Websocket de eventos desconectado. disconnected-banner-announcement: Websocket de eventos desconectado.
disconnected-banner-link-text: "Websocket de eventos desconectado"
disconnected-banner-suffix: " desde {disconnectedSince}. Reintentando conexión en {reconnectIn}."
disconnected-banner-suffix-reconnecting: " desde {disconnectedSince}. Reintentando conexión…"
login-button: Iniciar sesión login-button: Iniciar sesión
raise-issue: Reportar un problema en GitHub raise-issue: Reportar un problema en GitHub
docs: Documentación docs: Documentación

View File

@ -9,9 +9,10 @@ translations:
connected: Connesso connected: Connesso
disconnected: Disconnesso disconnected: Disconnesso
reconnecting: Riconnessione… reconnecting: Riconnessione…
disconnected-banner: "Websocket eventi disconnesso dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}."
disconnected-banner-reconnecting: "Websocket eventi disconnesso dalle {disconnectedSince}. Tentativo di connessione…"
disconnected-banner-announcement: Websocket eventi disconnesso. disconnected-banner-announcement: Websocket eventi disconnesso.
disconnected-banner-link-text: "Websocket eventi disconnesso"
disconnected-banner-suffix: " dalle {disconnectedSince}. Nuovo tentativo tra {reconnectIn}."
disconnected-banner-suffix-reconnecting: " dalle {disconnectedSince}. Tentativo di connessione…"
login-button: Login login-button: Login
raise-issue: Segnala un problema su GitHub raise-issue: Segnala un problema su GitHub
logs.title: Registri logs.title: Registri

View File

@ -8,9 +8,10 @@ translations:
connected: 已连接 connected: 已连接
disconnected: 已断开连接 disconnected: 已断开连接
reconnecting: 正在重新连接… reconnecting: 正在重新连接…
disconnected-banner: "事件 WebSocket 自 {disconnectedSince} 已断开。{reconnectIn} 后尝试重连。"
disconnected-banner-reconnecting: "事件 WebSocket 自 {disconnectedSince} 已断开。正在尝试重连…"
disconnected-banner-announcement: 事件 WebSocket 已断开。 disconnected-banner-announcement: 事件 WebSocket 已断开。
disconnected-banner-link-text: "事件 WebSocket 已断开"
disconnected-banner-suffix: "自 {disconnectedSince}。{reconnectIn} 后尝试重连。"
disconnected-banner-suffix-reconnecting: "自 {disconnectedSince}。正在尝试重连…"
login-button: 登录 login-button: 登录
raise-issue: 在 GitHub 上报告问题 raise-issue: 在 GitHub 上报告问题
docs: 文档 docs: 文档