From e465791a3d6bb6fe08fd52eff140a1bcb2267d82 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Tue, 14 Sep 2021 21:46:00 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20bbcode=20=E5=9B=BE=E7=89=87=E9=A2=84?= =?UTF-8?q?=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/plugins/com.msgbyte.bbcode/src/tags/ImgTag.tsx | 12 ++++++++++++ web/plugins/com.msgbyte.bbcode/src/tags/__all__.ts | 2 ++ web/src/components/Image.tsx | 13 +++++++++++++ web/src/components/modals/ImageUploadPreviewer.tsx | 2 +- web/src/plugin/component/index.tsx | 3 ++- web/src/styles/antd/overwrite.less | 4 ++++ 6 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 web/plugins/com.msgbyte.bbcode/src/tags/ImgTag.tsx create mode 100644 web/src/components/Image.tsx diff --git a/web/plugins/com.msgbyte.bbcode/src/tags/ImgTag.tsx b/web/plugins/com.msgbyte.bbcode/src/tags/ImgTag.tsx new file mode 100644 index 00000000..acda5a64 --- /dev/null +++ b/web/plugins/com.msgbyte.bbcode/src/tags/ImgTag.tsx @@ -0,0 +1,12 @@ +import React from 'react'; +import { Image } from '@capital/component'; +import type { TagProps } from '../bbcode/type'; + +export const ImgTag: React.FC = React.memo((props) => { + const { node } = props; + const text = node.content.join(''); + const url = node.attrs.url ?? text; + + return ; +}); +ImgTag.displayName = 'ImgTag'; diff --git a/web/plugins/com.msgbyte.bbcode/src/tags/__all__.ts b/web/plugins/com.msgbyte.bbcode/src/tags/__all__.ts index e492127b..35308c24 100644 --- a/web/plugins/com.msgbyte.bbcode/src/tags/__all__.ts +++ b/web/plugins/com.msgbyte.bbcode/src/tags/__all__.ts @@ -1,6 +1,8 @@ import { registerBBCodeTag } from '../bbcode/parser'; +import { ImgTag } from './ImgTag'; import { PlainText } from './PlainText'; import { UrlTag } from './UrlTag'; registerBBCodeTag('_text', PlainText); registerBBCodeTag('url', UrlTag); +registerBBCodeTag('img', ImgTag); diff --git a/web/src/components/Image.tsx b/web/src/components/Image.tsx new file mode 100644 index 00000000..b7f78b14 --- /dev/null +++ b/web/src/components/Image.tsx @@ -0,0 +1,13 @@ +import React from 'react'; +import { Image as AntdImage, ImageProps as AntdImageProps } from 'antd'; + +export const Image: React.FC = React.memo((props) => { + return ( + + ); +}); +Image.displayName = 'Image'; diff --git a/web/src/components/modals/ImageUploadPreviewer.tsx b/web/src/components/modals/ImageUploadPreviewer.tsx index e7a31e83..5e2fbd62 100644 --- a/web/src/components/modals/ImageUploadPreviewer.tsx +++ b/web/src/components/modals/ImageUploadPreviewer.tsx @@ -21,7 +21,7 @@ export const ImageUploadPreviewer: React.FC =
- +
diff --git a/web/src/plugin/component/index.tsx b/web/src/plugin/component/index.tsx index cf911aa8..24ac375c 100644 --- a/web/src/plugin/component/index.tsx +++ b/web/src/plugin/component/index.tsx @@ -1,4 +1,5 @@ import Button from 'antd/lib/button'; import TextArea from 'antd/lib/input/TextArea'; +import { Image } from '@/components/Image'; -export { Button, TextArea }; +export { Button, TextArea, Image }; diff --git a/web/src/styles/antd/overwrite.less b/web/src/styles/antd/overwrite.less index c2911d64..384bd6fa 100644 --- a/web/src/styles/antd/overwrite.less +++ b/web/src/styles/antd/overwrite.less @@ -20,3 +20,7 @@ background-color: black; } } + +.ant-image-preview-img { + display: inline; +}