fix: linkify URLs in private messages
Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions

URLs in message content were rendered as plain text. Added linkifyContent()
that converts URLs to clickable links while preserving existing <a> tags.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maciej Pienczyn 2026-04-10 14:23:19 +02:00
parent fcea91fb2a
commit 975087c52e

View File

@ -135,6 +135,30 @@
return tmp.textContent || tmp.innerText || ''; return tmp.textContent || tmp.innerText || '';
} }
// ============================================================
// UTIL: linkify URLs in HTML content
// ============================================================
function linkifyContent(html) {
if (!html) return html;
var tmp = document.createElement('div');
tmp.innerHTML = html;
var walker = document.createTreeWalker(tmp, NodeFilter.SHOW_TEXT, null, false);
var textNodes = [];
while (walker.nextNode()) textNodes.push(walker.currentNode);
var urlRegex = /(https?:\/\/[^\s<>"']+)/g;
textNodes.forEach(function(node) {
if (node.parentNode && node.parentNode.tagName === 'A') return;
if (urlRegex.test(node.nodeValue)) {
var span = document.createElement('span');
span.innerHTML = node.nodeValue.replace(urlRegex, '<a href="$1" target="_blank" rel="noopener" style="color:inherit;text-decoration:underline;">$1</a>');
node.parentNode.replaceChild(span, node);
}
urlRegex.lastIndex = 0;
});
return tmp.innerHTML;
}
// ============================================================ // ============================================================
// UTIL: avatar color from name hash // UTIL: avatar color from name hash
// ============================================================ // ============================================================
@ -547,7 +571,7 @@
// Content // Content
var content = el('div', 'message-content'); var content = el('div', 'message-content');
content.innerHTML = msg.content || ''; content.innerHTML = linkifyContent(msg.content || '');
// Highlight search term if active // Highlight search term if active
if (state.searchHighlight) { if (state.searchHighlight) {