diff --git a/app/src/components/Markdown.tsx b/app/src/components/Markdown.tsx index 7d04963..72e0f8d 100644 --- a/app/src/components/Markdown.tsx +++ b/app/src/components/Markdown.tsx @@ -16,10 +16,21 @@ type MarkdownProps = { function Markdown({ children, className }: MarkdownProps) { useEffect(() => { - document.querySelectorAll(".file-instance").forEach((e) => { - e.addEventListener("click", () => { - const filename = e.getAttribute("file") as string; - const data = e.getAttribute("content") as string; + document.querySelectorAll(".file-instance").forEach((el) => { + el.removeEventListener("click", () => {}); + el.addEventListener("click", (e) => { + e.preventDefault(); + e.stopPropagation(); + // prevent double click + // @ts-ignore + if (window.hasOwnProperty("file") && window.file + 250 > new Date().getTime()) { + return; + } else { + // @ts-ignore + window.file = new Date().getTime(); + } + const filename = el.getAttribute("file") as string; + const data = el.getAttribute("content") as string; if (data) { saveAsFile(filename, data); } diff --git a/app/src/components/Message.tsx b/app/src/components/Message.tsx index 463962f..87e9cc8 100644 --- a/app/src/components/Message.tsx +++ b/app/src/components/Message.tsx @@ -14,7 +14,7 @@ import { ContextMenuItem, ContextMenuTrigger, } from "./ui/context-menu.tsx"; -import { copyClipboard, saveAsFile, useInputValue } from "../utils.ts"; +import {copyClipboard, filterMessage, saveAsFile, useInputValue} from "../utils.ts"; import { useTranslation } from "react-i18next"; import { Tooltip, @@ -56,18 +56,18 @@ function MessageSegment({ message }: MessageProps) { - copyClipboard(message.content)}> + copyClipboard(filterMessage(message.content))}> {t("message.copy")} - saveAsFile(`message-${message.role}.txt`, message.content) + saveAsFile(`message-${message.role}.txt`, filterMessage(message.content)) } > {t("message.save")} useInputValue("input", message.content)} + onClick={() => useInputValue("input", filterMessage(message.content))} > {t("message.use")} diff --git a/app/src/routes/Home.tsx b/app/src/routes/Home.tsx index 74f0887..e173f44 100644 --- a/app/src/routes/Home.tsx +++ b/app/src/routes/Home.tsx @@ -30,7 +30,7 @@ import { updateConversationList, } from "../conversation/history.ts"; import React, { useEffect, useRef, useState } from "react"; -import {formatMessage, mobile, useAnimation, useEffectAsync} from "../utils.ts"; +import {filterMessage, formatMessage, mobile, useAnimation, useEffectAsync} from "../utils.ts"; import { useToast } from "../components/ui/use-toast.ts"; import { ConversationInstance, Message } from "../conversation/types.ts"; import { @@ -122,7 +122,7 @@ function SideBar() { }} > -
{conversation.name}
+
{filterMessage(conversation.name)}
{conversation.id}
@@ -136,7 +136,7 @@ function SideBar() { {t("conversation.remove-description")} - {conversation.name} + {filterMessage(conversation.name)} {t("end")} diff --git a/app/src/utils.ts b/app/src/utils.ts index 06f0906..22e2815 100644 --- a/app/src/utils.ts +++ b/app/src/utils.ts @@ -157,6 +157,21 @@ ${message}`; } } +export function filterMessage(message: string): string { + /** + * remove file block + * :::file + * [[]] + * + * ::: + */ + + return message.replace( + /:::file\n\[\[.*]]\n[\s\S]*?\n:::\n\n/g, + "", + ); +} + export function useDraggableInput( t: any, toast: any,