fix: 移除 input 等输入标签的渲染

This commit is contained in:
kangfenmao 2024-10-12 17:37:56 +08:00
parent 5b357f14e5
commit 969cf8ea21
2 changed files with 15 additions and 11 deletions

View File

@ -55,6 +55,8 @@
p {
margin: 1em 0;
white-space: pre-wrap;
&:last-child {
margin-bottom: 5px;
}

View File

@ -21,15 +21,6 @@ interface Props {
message: Message
}
const rehypePlugins = [rehypeRaw, rehypeMathjax]
const remarkPlugins = [remarkMath, remarkGfm]
const components = {
code: CodeBlock,
a: Link,
img: ImagePreview
}
const Markdown: FC<Props> = ({ message }) => {
const { t } = useTranslation()
const { renderInputMessageAsMarkdown } = useSettings()
@ -41,6 +32,11 @@ const Markdown: FC<Props> = ({ message }) => {
return escapeBrackets(content)
}, [message.content, message.status, t])
const rehypePlugins = useMemo(() => {
const hasUnsafeElements = /<(input|textarea|select)/i.test(messageContent)
return hasUnsafeElements ? [rehypeMathjax] : [rehypeRaw, rehypeMathjax]
}, [messageContent])
if (message.role === 'user' && !renderInputMessageAsMarkdown) {
return <p style={{ marginBottom: 5, whiteSpace: 'pre-wrap' }}>{messageContent}</p>
}
@ -49,8 +45,14 @@ const Markdown: FC<Props> = ({ message }) => {
<ReactMarkdown
className="markdown"
rehypePlugins={rehypePlugins}
remarkPlugins={remarkPlugins}
components={components as Partial<Components>}
remarkPlugins={[remarkMath, remarkGfm]}
components={
{
a: Link,
code: CodeBlock,
img: ImagePreview
} as Partial<Components>
}
remarkRehypeOptions={{
footnoteLabel: t('common.footnotes'),
footnoteLabelTagName: 'h4',