- {@html m["settings.vertd.description"]()}
+ {@html sanitize(m["settings.vertd.description"]())}
- {@html link(
+ {@html sanitize(link(
"vertd_link",
m["settings.vertd.hosting_info"](),
GITHUB_URL_VERTD,
- )}
+ ))}
diff --git a/src/lib/store/index.svelte.ts b/src/lib/store/index.svelte.ts
index b134bae3..3eab49c6 100644
--- a/src/lib/store/index.svelte.ts
+++ b/src/lib/store/index.svelte.ts
@@ -8,6 +8,7 @@ import { addDialog } from "./DialogProvider";
import PQueue from "p-queue";
import { getLocale, setLocale } from "$lib/paraglide/runtime";
import { m } from "$lib/paraglide/messages";
+import sanitizeHtml from "sanitize-html";
class Files {
public files = $state([]);
@@ -372,3 +373,17 @@ export function link(
return result;
}
+
+export function sanitize(
+ html: string,
+ allowedTags: string[] = ["a", "b", "code", "br"],
+): string {
+ return sanitizeHtml(html, {
+ allowedTags: allowedTags,
+ allowedAttributes: {
+ a: ["href", "target", "rel", "class"],
+ "*": ["class"],
+ },
+ allowedSchemes: ["http", "https", "mailto"],
+ });
+}
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index d20ed6bd..33b86954 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -11,6 +11,7 @@
import "overlayscrollbars/overlayscrollbars.css";
import { onMount } from "svelte";
import type { WorkerStatus } from "$lib/converters/converter.svelte";
+ import { sanitize } from "$lib/store/index.svelte";
const getSupportedFormats = (name: string) =>
converters
@@ -215,9 +216,9 @@
{/if}
- {@html m["upload.cards.status.text"]({
+ {@html sanitize(m["upload.cards.status.text"]({
status: getStatusText(s.status),
- })}
+ }))}
Date: Sun, 19 Oct 2025 17:38:46 +0300
Subject: [PATCH 07/12] refactor: remove jepgify
---
messages/de.json | 12 +-
messages/el.json | 12 +-
messages/en.json | 12 +-
messages/es.json | 12 +-
messages/fr.json | 12 +-
messages/hr.json | 12 +-
messages/it.json | 12 +-
messages/ja.json | 12 +-
messages/tr.json | 12 +-
src/lib/components/functional/Uploader.svelte | 17 +--
src/lib/components/layout/Gradients.svelte | 5 -
src/lib/sections/about/Credits.svelte | 50 ++++----
src/routes/+layout.svelte | 29 ++---
src/routes/jpegify/+page.svelte | 118 ------------------
14 files changed, 60 insertions(+), 267 deletions(-)
delete mode 100644 src/routes/jpegify/+page.svelte
diff --git a/messages/de.json b/messages/de.json
index 90e7de1b..bc484355 100644
--- a/messages/de.json
+++ b/messages/de.json
@@ -17,8 +17,7 @@
"subtitle": "Die Verarbeitung aller Bild-, Audio- und Dokumentdateien findet auf deinem Gerät statt. Videos werden auf unseren blitzschnellen Servern konvertiert. Kein Dateigrößenlimit, keine Werbung und vollständig Open-Source.",
"uploader": {
"text": "Dateien hier ablegen oder klicken zum {action}",
- "convert": "Konvertieren",
- "jpegify": "Jpegifizieren"
+ "convert": "Konvertieren"
},
"cards": {
"title": "VERT unterstützt...",
@@ -190,7 +189,7 @@
"notable_contributors": "Besonders erwähnenswerte Mitwirkende",
"notable_description": "Wir möchten diesen Personen für ihre wichtigen Beiträge zu VERT danken.",
"github_contributors": "GitHub-Mitwirkende",
- "github_description": "Ein großes [jpegify_link]Dankeschön[/jpegify_link] an all diese Leute für ihre Hilfe! [github_link]Möchtest du auch helfen?[/github_link]",
+ "github_description": "Ein großes Dankeschön an all diese Leute für ihre Hilfe! [github_link]Möchtest du auch helfen?[/github_link]",
"no_contributors": "Scheint, als hätte noch niemand beigetragen... [contribute_link]sei der Erste, der beiträgt![/contribute_link]",
"libraries": "Bibliotheken",
"libraries_description": "Ein großes Dankeschön an FFmpeg (Audio, Video), ImageMagick (Bilder) und Pandoc (Dokumente) für die Pflege solch exzellenter Bibliotheken über so viele Jahre. VERT verlässt sich auf sie, um dir deine Konvertierungen zu ermöglichen.",
@@ -215,12 +214,5 @@
"no_audio": "Kein Audiostream gefunden.",
"invalid_rate": "Ungültige Abtastrate angegeben: {rate}Hz"
}
- },
- "jpegify": {
- "title": "GEHEIMES JPEGIFIZIEREN!!!",
- "subtitle": "(psst... sag es niemandem!)",
- "button": "JPEGIFIZIEREN {compression}%!!!",
- "download": "Herunterladen",
- "delete": "Löschen"
}
}
\ No newline at end of file
diff --git a/messages/el.json b/messages/el.json
index 5bfdc82f..49cc484f 100644
--- a/messages/el.json
+++ b/messages/el.json
@@ -17,8 +17,7 @@
"subtitle": "Όλη η επεξεργασία εικόνων, ήχου και εγγράφων γίνεται στη συσκευή σας. Τα βίντεο μετατρέπονται στους κεραυνοβόλα γρήγορους διακομιστές μας. Χωρίς όριο μεγέθους αρχείου, χωρίς διαφημίσεις και εντελώς ανοιχτού κώδικα.",
"uploader": {
"text": "Σύρετε ή κάντε κλικ για {action}",
- "convert": "μετατροπή",
- "jpegify": "μετατροπή σε jpeg"
+ "convert": "μετατροπή"
},
"cards": {
"title": "Το VERT υποστηρίζει...",
@@ -216,7 +215,7 @@
"notable_contributors": "Αξιόλογοι συνεισφέροντες",
"notable_description": "Θα θέλαμε να ευχαριστήσουμε αυτά τα άτομα για τις σημαντικές συνεισφορές τους στο VERT.",
"github_contributors": "Συνεισφέροντες στο GitHub",
- "github_description": "Μεγάλες [jpegify_link]ευχαριστίες[/jpegify_link] σε όλα αυτά τα άτομα που βοήθησαν! [github_link]Θέλετε να βοηθήσετε κι εσείς;[/github_link]",
+ "github_description": "Μεγάλες ευχαριστίες σε όλα αυτά τα άτομα που βοήθησαν! [github_link]Θέλετε να βοηθήσετε κι εσείς;[/github_link]",
"no_contributors": "Φαίνεται ότι κανείς δεν έχει συνεισφέρει ακόμα... [contribute_link]γίνετε ο πρώτος που θα συνεισφέρει![/contribute_link]",
"libraries": "Βιβλιοθήκες",
"libraries_description": "Μεγάλες ευχαριστίες στα FFmpeg (ήχος, βίντεο), ImageMagick (εικόνες) και Pandoc (έγγραφα) που διατηρούν τέτοιες εξαιρετικές βιβλιοθήκες για τόσα χρόνια. Το VERT βασίζεται σε αυτές για να σας παρέχει τις μετατροπές σας.",
@@ -241,12 +240,5 @@
"no_audio": "Δεν βρέθηκε ροή ήχου.",
"invalid_rate": "Καθορίστηκε μη έγκυρος ρυθμός δειγματοληψίας: {rate}Hz"
}
- },
- "jpegify": {
- "title": "ΜΥΣΤΙΚΟ JPEGIFY!!!",
- "subtitle": "(σσσ... μην το πεις σε κανέναν!)",
- "button": "JPEGIFY {compression}%!!!",
- "download": "Λήψη",
- "delete": "Διαγραφή"
}
}
\ No newline at end of file
diff --git a/messages/en.json b/messages/en.json
index 84fe77c4..efd41ba6 100644
--- a/messages/en.json
+++ b/messages/en.json
@@ -18,8 +18,7 @@
"subtitle": "All image, audio, and document processing is done on your device. Videos are converted on our lightning-fast servers. No file size limit, no ads, and completely open source.",
"uploader": {
"text": "Drop or click to {action}",
- "convert": "convert",
- "jpegify": "jpegify"
+ "convert": "convert"
},
"cards": {
"title": "VERT supports...",
@@ -225,7 +224,7 @@
"notable_contributors": "Notable contributors",
"notable_description": "We'd like to thank these people for their major contributions to VERT.",
"github_contributors": "GitHub contributors",
- "github_description": "Big [jpegify_link]thanks[/jpegify_link] to all these people for helping out! [github_link]Want to help too?[/github_link]",
+ "github_description": "Big thanks to all these people for helping out! [github_link]Want to help too?[/github_link]",
"no_contributors": "Seems like no one has contributed yet... [contribute_link]be the first to contribute![/contribute_link]",
"libraries": "Libraries",
"libraries_description": "A big thanks to FFmpeg (audio, video), ImageMagick (images) and Pandoc (documents) for maintaining such excellent libraries for so many years. VERT relies on them to provide you with your conversions.",
@@ -251,13 +250,6 @@
"invalid_rate": "Invalid sample rate specified: {rate}Hz"
}
},
- "jpegify": {
- "title": "SECRET JPEGIFY!!!",
- "subtitle": "(shh... don't tell anyone!)",
- "button": "JPEGIFY {compression}%!!!",
- "download": "Download",
- "delete": "Delete"
- },
"privacy": {
"title": "Privacy Policy"
}
diff --git a/messages/es.json b/messages/es.json
index 2256a16c..9882f7fc 100644
--- a/messages/es.json
+++ b/messages/es.json
@@ -17,8 +17,7 @@
"subtitle": "Todo el procesamiento de imágenes, audio y documentos es hecho en tu dispositivo. Los vídeos son convertidos en nuestros servidores ultra rápidos. Sin límite de tamaño de archivo, sin anuncios y de código abierto.",
"uploader": {
"text": "Arrastra o haz clic para {action}",
- "convert": "convertir",
- "jpegify": "jpegificar"
+ "convert": "convertir"
},
"cards": {
"title": "VERT soporta...",
@@ -210,7 +209,7 @@
"notable_contributors": "Colaboradores destacados",
"notable_description": "Queremos dar las gracias a las siguientes personas por sus importantes contribuciones a VERT.",
"github_contributors": "Contribuidores de GitHub",
- "github_description": "¡Muchas [jpegify_link]gracias[/jpegify_link] a todos los que han contribuido! [github_link]¿Quieres contribuir también?[/github_link]",
+ "github_description": "¡Muchas gracias a todos los que han contribuido! [github_link]¿Quieres contribuir también?[/github_link]",
"no_contributors": "Parece que nadie ha contribuido todavía... [contribute_link]¡Sé el primero en hacerlo![/contribute_link]",
"libraries": "Librerías",
"libraries_description": "Muchas gracias a FFmpeg (audio, vídeo), ImageMagick (imágenes) y Pandoc (documentos) por mantener librerías excelentes por tantos años. VERT depende de ellas para proporcionar tus conversiones.",
@@ -235,12 +234,5 @@
"no_audio": "No se encontró una pista de audio.",
"invalid_rate": "La tasa de muestreo especificada no es válida: {rate}Hz"
}
- },
- "jpegify": {
- "title": "¡¡¡JPEGIFICADOR SECRETO!!!",
- "subtitle": "(shh... ¡no se lo digas a nadie!)",
- "button": "¡¡¡JPEGIFICAR {compression}%!!!",
- "download": "Descargar",
- "delete": "Eliminar"
}
}
diff --git a/messages/fr.json b/messages/fr.json
index 48f2c005..d7d30ac0 100644
--- a/messages/fr.json
+++ b/messages/fr.json
@@ -17,8 +17,7 @@
"subtitle": "Tout le traitement des images, des fichiers audio et des documents s'effectue sur votre appareil. Les vidéos sont converties sur nos serveurs ultra-rapides. Aucune limite de taille de fichier, aucune publicité et entièrement open source.",
"uploader": {
"text": "Déposer ou cliquer pour {action}",
- "convert": "convertir",
- "jpegify": "jpegify"
+ "convert": "convertir"
},
"cards": {
"title": "VERT supports...",
@@ -190,7 +189,7 @@
"notable_contributors": "Contributeurs notables",
"notable_description": "Nous tenons à remercier ces personnes pour leurs contributions majeures à VERT.",
"github_contributors": "Les contributeurs de GitHub",
- "github_description": "Un grand [jpegify_link]merci[/jpegify_link] à toutes ces personnes pour leur aide ! [github_link]Vous voulez aussi aider ?[/github_link]",
+ "github_description": "Un grand merci à toutes ces personnes pour leur aide ! [github_link]Vous voulez aussi aider ?[/github_link]",
"no_contributors": "Il semble que personne n'ait encore contribué... [contribute_link]soyez le premier à contribuer ![/contribute_link]",
"libraries": "Bibliothèques",
"libraries_description": "un grand merci à FFmpeg (audio, video), ImageMagick (images) et Pandoc (documents) pour avoir maintenu d'aussi excellentes bibliothèques pendant tant d'années, VERT compte sur eux pour vous fournir vos conversions.",
@@ -215,12 +214,5 @@
"no_audio": "Aucun flux audio détécté.",
"invalid_rate": "Taux d'échantillonnage spécifié non valide: {rate}Hz"
}
- },
- "jpegify": {
- "title": "SECRET JPEGIFY!!!",
- "subtitle": "(chut... ne le dis à personne !)",
- "button": "JPEGIFY {compression}%!!!",
- "download": "Télécharger",
- "delete": "Supprimer"
}
}
\ No newline at end of file
diff --git a/messages/hr.json b/messages/hr.json
index 3d3113c5..94d02143 100644
--- a/messages/hr.json
+++ b/messages/hr.json
@@ -17,8 +17,7 @@
"subtitle": "Cijelokupna obrada slika, zvuka i dokumenata se odvija na vašem uređaju. Videozapisi se pretvaraju na našim izrazito brzim serverima. Nema nikakvih ograničenja veličine niti reklama i potpuno je open source.",
"uploader": {
"text": "Ubaci ili klikni da {action}",
- "convert": "pretvori",
- "jpegify": "jpegiraj"
+ "convert": "pretvori"
},
"cards": {
"title": "VERT podržava...",
@@ -190,7 +189,7 @@
"notable_contributors": "Značajni suradnici",
"notable_description": "Želimo zahvaliti ovim ljudima za njihove ogromne doprinose VERTu.",
"github_contributors": "GitHub suradnici",
- "github_description": "Velike [jpegify_link]zahvale[/jpegify_link] svim ovim ljudima koji su nam pomogli! [github_link]Želiš nam i ti pomoći?[/github_link]",
+ "github_description": "Velike zahvale svim ovim ljudima koji su nam pomogli! [github_link]Želiš nam i ti pomoći?[/github_link]",
"no_contributors": "Čini se kako nitko nije još doprinio... [contribute_link]budite prvi koji će doprinjeti![/contribute_link]",
"libraries": "Biblioteke",
"libraries_description": "Velike zahvale prema FFmpeg (audio, video), ImageMagick (slike) i Pandoc (dokumenti) što su održavali tako odlične biblioteke svih ovih godina. VERT se oslanja na njih da bi Vam pružili pretvorbu.",
@@ -214,12 +213,5 @@
"no_audio": "Nije pronađen audio.",
"invalid_rate": "Upisan nevažeći sample rate: {rate}Hz!"
}
- },
- "jpegify": {
- "title": "TAJNI JPEGIFY!!!",
- "subtitle": "(shhhh... nemoj reći nikome!)",
- "button": "JPEGIRAJ {compression}%!!!",
- "download": "Preuzmi",
- "delete": "Obriši"
}
}
diff --git a/messages/it.json b/messages/it.json
index 6e04e0cf..11b02ead 100644
--- a/messages/it.json
+++ b/messages/it.json
@@ -17,8 +17,7 @@
"subtitle": "Tutta l'elaborazione di immagini, audio e documenti avviene sul tuo dispositivo. I video sono convertiti sui nostri server velocissimi. Nessun limite di dimensione, nessuna pubblicità e completamente open source.",
"uploader": {
"text": "Trascina o clicca per {action}",
- "convert": "convertire",
- "jpegify": "jpegificare"
+ "convert": "convertire"
},
"cards": {
"title": "VERT supporta...",
@@ -216,7 +215,7 @@
"notable_contributors": "Contributori di rilievo",
"notable_description": "Vorremmo ringraziare queste persone per i loro importanti contributi a VERT.",
"github_contributors": "Contributori GitHub",
- "github_description": "Un grande [jpegify_link]grazie[/jpegify_link] a tutte queste persone per aver dato una mano! [github_link]Vuoi aiutare anche tu?[/github_link]",
+ "github_description": "Un grande grazie a tutte queste persone per aver dato una mano! [github_link]Vuoi aiutare anche tu?[/github_link]",
"no_contributors": "Sembra che nessuno abbia ancora contribuito... [contribute_link]sii il primo a contribuire![/contribute_link]",
"libraries": "Librerie",
"libraries_description": "Un grande ringraziamento a FFmpeg (audio, video), ImageMagick (immagini) e Pandoc (documenti) per aver mantenuto librerie così eccellenti per così tanti anni. VERT si affida a loro per fornirti le tue conversioni.",
@@ -241,12 +240,5 @@
"no_audio": "Nessuno *stream* audio trovato.",
"invalid_rate": "Frequenza di campionamento specificata non valida: {rate}Hz"
}
- },
- "jpegify": {
- "title": "JPEGIFY SEGRETO!!!",
- "subtitle": "(shh... non dirlo a nessuno!)",
- "button": "JPEGIFY {compression}%!!!",
- "download": "Scarica",
- "delete": "Elimina"
}
}
diff --git a/messages/ja.json b/messages/ja.json
index 04019378..77f5b2f0 100644
--- a/messages/ja.json
+++ b/messages/ja.json
@@ -17,8 +17,7 @@
"subtitle": "すべての画像・音声・ドキュメント処理はデバイス上で行われます。動画は超高速サーバーで変換されます。ファイルサイズ制限なし、広告なし、完全オープンソース。",
"uploader": {
"text": "ドロップまたはクリックして{action}",
- "convert": "変換",
- "jpegify": "JPEG化"
+ "convert": "変換"
},
"cards": {
"title": "VERTがサポートしている形式",
@@ -210,7 +209,7 @@
"notable_contributors": "特筆すべき貢献者",
"notable_description": "VERTに大きく貢献してくださった方々に感謝します。",
"github_contributors": "GitHubの貢献者",
- "github_description": "多くの方々に[jpegify_link]感謝[/jpegify_link]します![github_link]あなたも参加してみませんか?[/github_link]",
+ "github_description": "多くの方々に感謝します![github_link]あなたも参加してみませんか?[/github_link]",
"no_contributors": "まだ誰も貢献していないようです… [contribute_link]最初の貢献者になりましょう![/contribute_link]",
"libraries": "ライブラリ",
"libraries_description": "長年にわたり優れたライブラリを提供してくれているFFmpeg(音声・動画)、ImageMagick(画像)、Pandoc(ドキュメント)に感謝します。VERTはこれらに依存して動作しています。",
@@ -235,12 +234,5 @@
"no_audio": "音声ストリームが見つかりません。",
"invalid_rate": "無効なサンプリングレートが指定されました: {rate}Hz"
}
- },
- "jpegify": {
- "title": "秘密のJPEGIFY!!!",
- "subtitle": "(しっ…誰にも言わないで!)",
- "button": "JPEGIFY {compression}%!!!",
- "download": "ダウンロード",
- "delete": "削除"
}
}
diff --git a/messages/tr.json b/messages/tr.json
index 696727ba..4b1fa076 100644
--- a/messages/tr.json
+++ b/messages/tr.json
@@ -17,8 +17,7 @@
"subtitle": "Tüm görüntü, ses ve belge işlemleri cihazınızda gerçekleştirilir. Videolar, ışık hızındaki sunucularımızda dönüştürülür. Dosya boyutu sınırı ve reklam yoktur. Tamamen açık kaynaklıdır.",
"uploader": {
"text": "{action} için sürükleyip bırakın veya dosya seçin",
- "convert": "dönüştürmek",
- "jpegify": "jpegify"
+ "convert": "dönüştürmek"
},
"cards": {
"title": "VERT'in desteklediği formatlar...",
@@ -211,7 +210,7 @@
"notable_contributors": "Önemli katılımcılar",
"notable_description": "VERT'e sağladıkları büyük katkılardan dolayı bu kişilere teşekkür ederiz.",
"github_contributors": "GitHub katılımcıları",
- "github_description": "Yardımcı olan herkese çok [jpegify_link]teşekkürler[/jpegify_link]! [github_link]Sen de yardım etmek ister misin?[/github_link]",
+ "github_description": "Yardımcı olan herkese çok teşekkürler! [github_link]Sen de yardım etmek ister misin?[/github_link]",
"no_contributors": "Henüz kimse katkıda bulunmamış gibi görünüyor... [contribute_link]ilk katkıda bulunan sen ol![/contribute_link]",
"libraries": "Kütüphaneler",
"libraries_description": "Bu mükemmel kütüphaneleri yıllardır geliştirdikleri için FFmpeg (ses, video), ImageMagick (görseller) ve Pandoc (belgeler)'a çok teşekkür ederiz. VERT, dönüştürme işlemleri için bu kütüphaneleri kullanmaktadır.",
@@ -236,12 +235,5 @@
"no_audio": "Ses akışı bulunamadı.",
"invalid_rate": "Geçersiz örnekleme hızı: {hız}Hz"
}
- },
- "jpegify": {
- "title": "GİZLİ JPEGIFY!!!",
- "subtitle": "(şşş... kimseye söyleme!)",
- "button": "JPEGIFY {compression}%!!!",
- "download": "İndir",
- "delete": "Sil"
}
}
diff --git a/src/lib/components/functional/Uploader.svelte b/src/lib/components/functional/Uploader.svelte
index 7feb8dfc..a12929b8 100644
--- a/src/lib/components/functional/Uploader.svelte
+++ b/src/lib/components/functional/Uploader.svelte
@@ -11,10 +11,9 @@
type Props = {
class?: string;
- jpegify?: boolean;
};
- const { class: classList, jpegify }: Props = $props();
+ const { class: classList }: Props = $props();
let uploaderButton = $state();
let fileInput = $state();
@@ -43,13 +42,9 @@
const handleFileChange = (e: Event) => {
if (!fileInput) return;
- if (page.url.pathname !== "/jpegify/") {
- const oldLength = files.files.length;
- files.add(fileInput.files);
- if (oldLength !== files.files.length) goto("/convert");
- } else {
- files.add(fileInput.files);
- }
+ const oldLength = files.files.length;
+ files.add(fileInput.files);
+ if (oldLength !== files.files.length) goto("/convert");
};
onMount(() => {
@@ -100,9 +95,7 @@
{m["upload.uploader.text"]({
- action: jpegify
- ? m["upload.uploader.jpegify"]()
- : m["upload.uploader.convert"](),
+ action: m["upload.uploader.convert"]()
})}
diff --git a/src/lib/components/layout/Gradients.svelte b/src/lib/components/layout/Gradients.svelte
index 27df8e79..3e3cd8f3 100644
--- a/src/lib/components/layout/Gradients.svelte
+++ b/src/lib/components/layout/Gradients.svelte
@@ -36,11 +36,6 @@
color: "var(--bg-gradient-from)",
at: 25,
},
- {
- matcher: (path) => path === "/jpegify/",
- color: "var(--bg-gradient-red-from)",
- at: 100,
- },
{
matcher: (path) => path === "/privacy/",
color: "var(--bg-gradient-red-from)",
diff --git a/src/lib/sections/about/Credits.svelte b/src/lib/sections/about/Credits.svelte
index 4ad16f09..162519ca 100644
--- a/src/lib/sections/about/Credits.svelte
+++ b/src/lib/sections/about/Credits.svelte
@@ -94,30 +94,34 @@
{m["about.credits.github_contributors"]()}
-
+
+ {#if ghContribs && ghContribs.length > 0}
+
+ {@html sanitize(
+ link(
+ "github_link",
+ m["about.credits.github_description"](),
+ GITHUB_URL_VERT,
+ true,
+ "text-blue-500 font-normal hover:underline",
+ ),
+ )}
+
+ {:else}
+
+ {@html sanitize(
+ link(
+ "contribute_link",
+ m["about.credits.no_contributors"](),
+ GITHUB_URL_VERT,
+ true,
+ "text-blue-500 font-normal hover:underline",
+ ),
+ )}
+
+ {/if}
+
{#if ghContribs && ghContribs.length > 0}
-
- {@html sanitize(link(
- ["jpegify_link", "github_link"],
- m["about.credits.github_description"](),
- ["/jpegify", GITHUB_URL_VERT],
- [false, true],
- [
- "text-black dynadark:text-white",
- "text-blue-500 font-normal hover:underline",
- ],
- ))}
-
- {:else}
-
- {@html sanitize(link(
- "contribute_link",
- m["about.credits.no_contributors"](),
- GITHUB_URL_VERT,
- ))}
-
- {/if}
-