From f28c0e2b90c5f746715844cf9032660c042504be Mon Sep 17 00:00:00 2001 From: duffyduck Date: Tue, 3 Nov 2026 09:01:07 +0100 Subject: [PATCH] fix(diagnostic): Nachricht mit URL+Satzzeichen verschwand im Chat linkifyText nahm Satzzeichen am Ende mit in die URL ("(http://host:8080),") und new URL() warf "Invalid URL" -- die ganze Bubble wurde nicht gerendert. Satzzeichen am Ende abtrennen (Klammer bleibt, wenn die URL sie selbst oeffnet), ungueltige URLs bleiben Text. Co-Authored-By: Claude Opus 5.5 --- diagnostic/index.html | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/diagnostic/index.html b/diagnostic/index.html index bd2d80b..c2eb367 100644 --- a/diagnostic/index.html +++ b/diagnostic/index.html @@ -3558,16 +3558,26 @@ function linkifyText(escaped) { // URLs in escaped HTML erkennen und ersetzen - return escaped.replace(/(https?:\/\/[^\s<&]+)/g, function(url) { - const decoded = url.replace(/&/g, '&'); - const pathname = new URL(decoded).pathname; + return escaped.replace(/(https?:\/\/[^\s<&]+)/g, function(match) { + // Satzzeichen am Ende gehoeren nicht zur URL: "(http://host:8080)," — + // sonst wirft new URL() und die ganze Nachricht wird nicht angezeigt. + let url = match, rest = ''; + while (/[.,;:!?)\]'"]$/.test(url)) { + // ")" gehoert zur URL, wenn sie selbst eine "(" offen hat (Wikipedia) + if (url.endsWith(')') && url.split('(').length >= url.split(')').length) break; + rest = url.slice(-1) + rest; + url = url.slice(0, -1); + } + let pathname; + try { pathname = new URL(url.replace(/&/g, '&')).pathname; } + catch (e) { return match; } // keine gueltige URL: als Text lassen if (MEDIA_IMG.test(pathname)) { - return `${url}`; + return `${url}` + rest; } if (MEDIA_VID.test(pathname)) { - return `${url}`; + return `${url}` + rest; } - return `${url}`; + return `${url}` + rest; }); }