Skip to content

Commit 87eb570

Browse files
committed
feat: 代码编辑器中增加新属性previewStyleClass用于实现自定义高亮代码主题。#1861
1 parent 18e63c4 commit 87eb570

File tree

4 files changed

+52
-5
lines changed

4 files changed

+52
-5
lines changed

packages/devui-vue/devui/editor-md/src/components/md-render.tsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,10 @@ export default defineComponent({
88
props: mdRenderProps,
99
emits: ['mdRenderChange', 'checkedChange'],
1010
setup(props: MdRenderProps, ctx: SetupContext) {
11-
const { previewRef, renderService, onPreviewClick, setContainerContent } = useEditorMdRender(props, ctx);
11+
const { previewRef, renderService, previewStyleClass, onPreviewClick, setContainerContent } = useEditorMdRender(props, ctx);
1212
useMdRenderWatcher(props, renderService, setContainerContent);
13-
1413
return () => (
15-
<div ref={previewRef} class="dp-editor-md-preview-container dp-md-view" onClick={onPreviewClick}>
14+
<div ref={previewRef} class={`dp-editor-md-preview-container ${previewStyleClass.value}`} onClick={onPreviewClick}>
1615
{ctx.slots.default?.()}
1716
</div>
1817
);

packages/devui-vue/devui/editor-md/src/composables/use-editor-md-render.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { MdPlugin, MdRenderProps } from '../editor-md-types';
33
import { MDRenderService } from './md-render-service';
44

55
export function useEditorMdRender(props: MdRenderProps, ctx: SetupContext) {
6-
const { content, customParse, disableRender } = toRefs(props);
6+
const { content, customParse, disableRender, previewStyleClass } = toRefs(props);
77
const renderService = new MDRenderService();
88
const previewRef = ref();
99
let timer: ReturnType<typeof setTimeout> | null = null;
@@ -58,7 +58,7 @@ export function useEditorMdRender(props: MdRenderProps, ctx: SetupContext) {
5858
}
5959
};
6060

61-
return { previewRef, renderService, onPreviewClick, setContainerContent };
61+
return { previewRef, renderService, previewStyleClass, onPreviewClick, setContainerContent };
6262
}
6363

6464
export function useMdRenderWatcher(props: MdRenderProps, renderService: MDRenderService, setContainerContent: () => void) {

packages/devui-vue/devui/editor-md/src/editor-md-types.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ const commonProps = {
6161
type: Array as PropType<Array<MdPlugin>>,
6262
default: () => [],
6363
},
64+
previewStyleClass: {
65+
type: String,
66+
default: 'dp-md-view',
67+
},
6468
};
6569

6670
export interface HintConfigItem {

packages/devui-vue/docs/components/editor-md/index.md

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,48 @@ export default defineComponent({
120120

121121
:::
122122

123+
### 自定义代码高亮
124+
125+
`devui`的代码编辑器本身的高亮是由`highlight.js`和一些自定义颜色实现的。传入`preview-style-class`属性则可以覆盖默认类实现自定义高亮样式。
126+
127+
:::demo 使用 highlight.js进行代码高亮或自定义类覆盖高亮样式
128+
129+
```vue
130+
<template>
131+
<d-md-render :preview-style-class="`custom-blank`" :content="content" :md-rules="mdRules" base-url="https://test-base-url"></d-md-render>
132+
<d-md-render preview-style-class :content="content" :md-rules="mdRules" base-url="https://test-base-url"></d-md-render>
133+
<d-md-render :content="content" :md-rules="mdRules" base-url="https://test-base-url"></d-md-render>
134+
</template>
135+
136+
<script>
137+
import { defineComponent, reactive, ref } from 'vue';
138+
139+
export default defineComponent({
140+
setup() {
141+
const content = ref('# h1 \n [link](#test)');
142+
const mdRules = reactive({
143+
linkify: {
144+
fuzzyLink: false,
145+
},
146+
});
147+
148+
return { content, mdRules };
149+
},
150+
});
151+
</script>
152+
<style>
153+
.custom-blank h1{
154+
font-size: 48px;
155+
font-weight: 700;
156+
}
157+
.custom-blank p > a:hover{
158+
color: blue;
159+
}
160+
</style>
161+
```
162+
163+
:::
164+
123165
### 单列渲染模式
124166

125167
:::demo 通过 mode 控制不同的显示模式
@@ -630,6 +672,8 @@ Bob-->>John: Jolly good!
630672
| fullscreen-z-index | `number` | 10 | 编辑器全屏状态的 z-index |
631673
| image-upload-to-server | `boolean` | false | 是否打开图片自定义上传开关(打开后将将监听图片的复制,toolbar 图片功能上传,传出事件回调) |
632674
|editor-container-height|`number`|--|可选,编辑器内容区高度||
675+
|preview-style-class|`string`|--|可选,自定义代码渲染的高亮样式 [自定义代码高亮](#自定义代码高亮)||
676+
633677
634678
### EditorMd 事件
635679

0 commit comments

Comments
 (0)