浏览代码

Merge pull request #2180 from austenadler/dev

Always open links in chat in a new tab
Timothy Jaeryang Baek 11 月之前
父节点
当前提交
6e89a481be
共有 2 个文件被更改,包括 11 次插入1 次删除
  1. 7 0
      src/lib/components/chat/Messages/ResponseMessage.svelte
  2. 4 1
      src/lib/utils/index.ts

+ 7 - 0
src/lib/components/chat/Messages/ResponseMessage.svelte

@@ -80,6 +80,13 @@
 		return `<code>${code.replaceAll('&amp;', '&')}</code>`;
 	};
 
+	// Open all links in a new tab/window (from https://github.com/markedjs/marked/issues/655#issuecomment-383226346)
+	const origLinkRenderer = renderer.link;
+	renderer.link =	(href, title, text) => {
+		const html = origLinkRenderer.call(renderer, href, title, text);
+		return html.replace(/^<a /, '<a target="_blank" rel="nofollow" ');
+	};
+
 	const { extensions, ...defaults } = marked.getDefaults() as marked.MarkedOptions & {
 		// eslint-disable-next-line @typescript-eslint/no-explicit-any
 		extensions: any;

+ 4 - 1
src/lib/utils/index.ts

@@ -12,11 +12,14 @@ export const sanitizeResponseContent = (content: string) => {
 		.replace(/<$/, '')
 		.replaceAll(/<\|[a-z]+\|>/g, ' ')
 		.replaceAll('<', '&lt;')
+		.replaceAll('>', '&gt;')
 		.trim();
 };
 
 export const revertSanitizedResponseContent = (content: string) => {
-	return content.replaceAll('&lt;', '<');
+	return content
+		.replaceAll('&lt;', '<')
+		.replaceAll('&gt;', '>');
 };
 
 export const capitalizeFirstLetter = (string) => {