diff --git a/src/lib/utils/url-link-converter.js b/src/lib/utils/url-link-converter.js index 2ac9ca7..461ce9a 100644 --- a/src/lib/utils/url-link-converter.js +++ b/src/lib/utils/url-link-converter.js @@ -42,7 +42,7 @@ export function convertUrlsToLinks(text) { // Extract code blocks and replace with placeholders while ((codeMatch = codeBlockRegex.exec(text)) !== null) { - const placeholder = `<[CODE_BLOCK_${codeIndex}]>`; + const placeholder = `__QRYPTCHAT_CODE_BLOCK_${codeIndex}__`; const codeContent = codeMatch[1]; codeBlocks.push(`
${escapeHtml(codeContent)}`);
textWithPlaceholders = textWithPlaceholders.replace(codeMatch[0], placeholder);
@@ -87,7 +87,7 @@ export function convertUrlsToLinks(text) {
// Restore code blocks from placeholders
codeBlocks.forEach((codeBlock, index) => {
- const placeholder = `<[CODE_BLOCK_${index}]>`;
+ const placeholder = `__QRYPTCHAT_CODE_BLOCK_${index}__`;
result = result.replace(placeholder, codeBlock);
});
diff --git a/src/lib/utils/url-link-converter.test.js b/src/lib/utils/url-link-converter.test.js
index 158ef8b..914172d 100644
--- a/src/lib/utils/url-link-converter.test.js
+++ b/src/lib/utils/url-link-converter.test.js
@@ -9,4 +9,26 @@ describe('convertUrlsToLinks', () => {
expect(html).toContain('href="https://example.com/search?a=1&b=2"');
expect(html).toContain('>https://example.com/search?a=1&b=2');
});
+
+ it('renders fenced code blocks instead of escaped placeholders', () => {
+ const html = convertUrlsToLinks('Before\n```const value = 1;\n```\nAfter');
+
+ expect(html).toContain('const value = 1;\n');
+ expect(html).not.toContain('CODE_BLOCK');
+ expect(html).not.toContain('<[CODE_BLOCK_0]>');
+ });
+
+ it('does not linkify URLs inside fenced code blocks', () => {
+ const html = convertUrlsToLinks('```https://example.com/search?a=1&b=2```');
+
+ expect(html).toContain('https://example.com/search?a=1&b=2');
+ expect(html).not.toContain(' {
+ const html = convertUrlsToLinks('``````');
+
+ expect(html).toContain('<script>alert("x")</script>');
+ expect(html).not.toContain('