feat: shows error when copy is not supported (#4318)

This commit is contained in:
Amir Raminfar
2026-01-04 17:57:46 -08:00
committed by GitHub
parent 65b2ac9181
commit a8a76e29c9
19 changed files with 57 additions and 10 deletions
+22 -4
View File
@@ -44,18 +44,29 @@
{{ $t("action.see-in-context") }}
</router-link>
</li>
<li v-if="isSupported">
<a @click="copyLogMessage()">
<li>
<a
@click="copyLogMessage()"
:disabled="!isSupported"
:title="!isSupported ? $t('error.copy-not-supported') : ''"
:class="{ 'cursor-not-allowed opacity-50': !isSupported }"
>
<material-symbols:content-copy />
{{ $t("action.copy-log") }}
</a>
</li>
<li v-if="isSupported">
<a @click="copyPermalink()">
<li>
<a
@click="copyPermalink()"
:disabled="!isSupported"
:title="!isSupported ? $t('error.copy-not-supported') : ''"
:class="{ 'cursor-not-allowed opacity-50': !isSupported }"
>
<material-symbols:link />
{{ $t("action.copy-link") }}
</a>
</li>
<li v-if="logEntry instanceof ComplexLogEntry">
<a @click="showDrawer(LogDetails, { entry: logEntry })">
<material-symbols:code-blocks-rounded />
@@ -86,6 +97,10 @@ const { copy, isSupported, copied } = useClipboard();
const { t } = useI18n();
async function copyLogMessage() {
if (!isSupported.value) {
return;
}
if (logEntry instanceof ComplexLogEntry) {
await copy(stripAnsi(logEntry.rawMessage));
} else if (logEntry instanceof SimpleLogEntry) {
@@ -105,6 +120,9 @@ async function copyLogMessage() {
}
async function copyPermalink() {
if (!isSupported.value) {
return;
}
const url = router.resolve({
name: "/container/[id].time.[datetime]",
params: { id: container.id, datetime: logEntry.date.toISOString() },
@@ -14,8 +14,12 @@ exports[`<ContainerEventSource /> > render html correctly > should render dates
</svg></button>
<ul tabindex="0" class="menu dropdown-content rounded-box bg-base-200 border-base-content/20 z-50 w-52 border p-1 text-sm shadow-sm">
<!--v-if-->
<!--v-if-->
<!--v-if-->
<li><a disabled="true" title="error.copy-not-supported" class="cursor-not-allowed opacity-50"><svg viewBox="0 0 24 24" width="1.2em" height="1.2em">
<path fill="currentColor" d="M9 18q-.825 0-1.412-.587T7 16V4q0-.825.588-1.412T9 2h9q.825 0 1.413.588T20 4v12q0 .825-.587 1.413T18 18zm-4 4q-.825 0-1.412-.587T3 20V6h2v14h11v2z"></path>
</svg> action.copy-log</a></li>
<li><a disabled="true" title="error.copy-not-supported" class="cursor-not-allowed opacity-50"><svg viewBox="0 0 24 24" width="1.2em" height="1.2em">
<path fill="currentColor" d="M11 17H7q-2.075 0-3.537-1.463T2 12t1.463-3.537T7 7h4v2H7q-1.25 0-2.125.875T4 12t.875 2.125T7 15h4zm-3-4v-2h8v2zm5 4v-2h4q1.25 0 2.125-.875T20 12t-.875-2.125T17 9h-4V7h4q2.075 0 3.538 1.463T22 12t-1.463 3.538T17 17z"></path>
</svg> action.copy-link</a></li>
<!--v-if-->
</ul>
</div>
@@ -48,8 +52,12 @@ exports[`<ContainerEventSource /> > render html correctly > should render dates
</svg></button>
<ul tabindex="0" class="menu dropdown-content rounded-box bg-base-200 border-base-content/20 z-50 w-52 border p-1 text-sm shadow-sm">
<!--v-if-->
<!--v-if-->
<!--v-if-->
<li><a disabled="true" title="error.copy-not-supported" class="cursor-not-allowed opacity-50"><svg viewBox="0 0 24 24" width="1.2em" height="1.2em">
<path fill="currentColor" d="M9 18q-.825 0-1.412-.587T7 16V4q0-.825.588-1.412T9 2h9q.825 0 1.413.588T20 4v12q0 .825-.587 1.413T18 18zm-4 4q-.825 0-1.412-.587T3 20V6h2v14h11v2z"></path>
</svg> action.copy-log</a></li>
<li><a disabled="true" title="error.copy-not-supported" class="cursor-not-allowed opacity-50"><svg viewBox="0 0 24 24" width="1.2em" height="1.2em">
<path fill="currentColor" d="M11 17H7q-2.075 0-3.537-1.463T2 12t1.463-3.537T7 7h4v2H7q-1.25 0-2.125.875T4 12t.875 2.125T7 15h4zm-3-4v-2h8v2zm5 4v-2h4q1.25 0 2.125-.875T20 12t-.875-2.125T17 9h-4V7h4q2.075 0 3.538 1.463T22 12t-1.463 3.538T17 17z"></path>
</svg> action.copy-link</a></li>
<!--v-if-->
</ul>
</div>
@@ -82,8 +90,12 @@ exports[`<ContainerEventSource /> > render html correctly > should render messag
</svg></button>
<ul tabindex="0" class="menu dropdown-content rounded-box bg-base-200 border-base-content/20 z-50 w-52 border p-1 text-sm shadow-sm">
<!--v-if-->
<!--v-if-->
<!--v-if-->
<li><a disabled="true" title="error.copy-not-supported" class="cursor-not-allowed opacity-50"><svg viewBox="0 0 24 24" width="1.2em" height="1.2em">
<path fill="currentColor" d="M9 18q-.825 0-1.412-.587T7 16V4q0-.825.588-1.412T9 2h9q.825 0 1.413.588T20 4v12q0 .825-.587 1.413T18 18zm-4 4q-.825 0-1.412-.587T3 20V6h2v14h11v2z"></path>
</svg> action.copy-log</a></li>
<li><a disabled="true" title="error.copy-not-supported" class="cursor-not-allowed opacity-50"><svg viewBox="0 0 24 24" width="1.2em" height="1.2em">
<path fill="currentColor" d="M11 17H7q-2.075 0-3.537-1.463T2 12t1.463-3.537T7 7h4v2H7q-1.25 0-2.125.875T4 12t.875 2.125T7 15h4zm-3-4v-2h8v2zm5 4v-2h4q1.25 0 2.125-.875T20 12t-.875-2.125T17 9h-4V7h4q2.075 0 3.538 1.463T22 12t-1.463 3.538T17 17z"></path>
</svg> action.copy-link</a></li>
<!--v-if-->
</ul>
</div>
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Denne side eksisterer ikke
invalid-auth: Brugernavn eller kodeord er ikke gyldig
copy-not-supported: Kopiering til udklipsholder understøttes ikke i din browser
logs-skipped: Vis {total} skjulte indtastninger
container-not-found: Container ikke fundet
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Diese Seite existiert nicht.
invalid-auth: Benutzername und Passwort sind ungültig.
copy-not-supported: Kopieren in die Zwischenablage wird von Ihrem Browser nicht unterstützt
logs-skipped: Zeige {total} versteckte Einträge
container-not-found: Container nicht gefunden.
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: This page does not exist
invalid-auth: Username or password are not valid
copy-not-supported: Copy to clipboard is not supported in your browser
logs-skipped: Show {total} hidden entries
container-not-found: Container not found
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Esta página no existe.
invalid-auth: El nombre de usuario y la contraseña no son válidos.
copy-not-supported: Copiar al portapapeles no está soportado en su navegador
logs-skipped: Mostrar {total} entradas ocultas
container-not-found: Contenedor no encontrado.
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Cette page n'existe pas
invalid-auth: Nom d'utilisateur ou mot de passe non valides
copy-not-supported: La copie dans le presse-papiers n'est pas prise en charge par votre navigateur
logs-skipped: Afficher {total} entrées cachées
container-not-found: Conteneur non trouvé
events-stream:
+1
View File
@@ -53,6 +53,7 @@ tooltip:
error:
page-not-found: Halaman ini tidak ada
invalid-auth: Nama pengguna atau kata sandi tidak valid
copy-not-supported: Salin ke clipboard tidak didukung di browser Anda
logs-skipped: Tampilkan {total} entri tersembunyi
container-not-found: Kontainer tidak ditemukan
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Questa pagina non esiste
invalid-auth: Username o password non valide
copy-not-supported: La copia negli appunti non è supportata dal tuo browser
logs-skipped: Mostra {total} voci nascoste
container-not-found: Container non trovato
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: 페이지를 찾을 수 없습니다
invalid-auth: 사용자 이름 또는 비밀번호가 올바르지 않습니다
copy-not-supported: 클립보드 복사는 브라우저에서 지원되지 않습니다
logs-skipped: 숨겨진 항목 {total}개 보기
container-not-found: 컨테이너를 찾을 수 없습니다
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Deze pagina bestaat niet
invalid-auth: Gebruikersnaam of wachtwoord is ongeldig
copy-not-supported: Kopiëren naar klembord wordt niet ondersteund in je browser
logs-skipped: Toon {total} verborgen items
container-not-found: Container niet gevonden
events-stream:
+1
View File
@@ -54,6 +54,7 @@ tooltip:
error:
page-not-found: Ta strona nie istnieje
invalid-auth: Nazwa użytkownika lub hasło są niepoprawne
copy-not-supported: Kopiowanie do schowka nie jest obsługiwane w twojej przeglądarce
logs-skipped: Pokaż {total} ukrytych wpisów
container-not-found: Kontener nie został znaleziony
events-stream:
+1
View File
@@ -54,6 +54,7 @@ tooltip:
error:
page-not-found: Esta página não existe.
invalid-auth: O nome de usuário e a senha não são válidos.
copy-not-supported: Copiar para a área de transferência não é suportado no seu navegador
logs-skipped: Mostrar {total} entradas ocultas
container-not-found: Contentor não encontrado.
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Esta página não existe
invalid-auth: Usuário ou senha inválidos
copy-not-supported: Copiar para a área de transferência não é suportado no seu navegador
logs-skipped: Mostrar {total} entradas ocultas
container-not-found: Container não encontrado
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Эта страница не доступна.
invalid-auth: Имя пользователя или пароль неверны.
copy-not-supported: Копирование в буфер обмена не поддерживается вашим браузером
logs-skipped: Показать {total} скрытых записей
container-not-found: Контейнер не найден.
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: Ta stran ne obstaja
invalid-auth: Uporabniško ime ali geslo nista veljavna
copy-not-supported: Kopiranje v odložišče ni podprto v vašem brskalniku
logs-skipped: Prikaži {total} skritih vnosov
events-stream:
title: Nepričakovana napaka
+1
View File
@@ -56,6 +56,7 @@ tooltip:
error:
page-not-found: Bu sayfa bulunamadı
invalid-auth: Kullanıcı adı veya şifre geçersiz
copy-not-supported: Panoya kopyalama tarayıcınızda desteklenmiyor
logs-skipped: "{total} gizli girişi göster"
container-not-found: Konteyner bulunamadı
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: 此頁面不存在
invalid-auth: 使用者名稱或密碼不正確
copy-not-supported: 您的瀏覽器不支援複製到剪貼簿
logs-skipped: 顯示 {total} 個隱藏項目
container-not-found: 找不到容器
events-stream:
+1
View File
@@ -50,6 +50,7 @@ tooltip:
error:
page-not-found: 此页面不存在。
invalid-auth: 用户名和密码无效。
copy-not-supported: 您的浏览器不支持复制到剪贴板
logs-skipped: 显示 {total} 个隐藏条目
container-not-found: 容器未找到。
events-stream: