

来康康vue3环境下的markdown编辑器md-editor-v3吧,支持tsx,暗黑模式哦~
source link: https://segmentfault.com/a/1190000040352568
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

来康康vue3环境下的markdown编辑器md-editor-v3吧,支持tsx,暗黑模式哦~
这一切都源于在开发vue3-admin的demo内容时,没有合适的编辑器组件。
仅支持 vue3 项目下使用,使用 jsx 语法开发,支持在 tsx 项目使用。为了减小插入,没有使用less.modifyVars
方法来切换主题,而采用了替换 class 名称的方式。
代码仓库:md-editor-v3
- 快捷插入内容工具栏、编辑器浏览器全屏、页面内全屏等;
- 内置的白色主题和暗黑主题,支持绑定切换;
- 支持快捷键插入内容;
- 支持使用 prettier 格式化内容(使用 CDN 方式引入,只支持格式化 md 内容,可在代码内设置关闭);
- 支持多语言,支持自行扩展语言;
- 支持复制粘贴上传图片;
更多功能待后续更新,若有想要的功能未开发,请留言~
默认模式下:
暗黑模式下:
主题跟随前往vue3-admin尝试~~
编辑器主页演示没开发完~~~
注意在 jsx 下需使用 modelValue 配合 onChange 方法完成数据绑定,在 vue 模板语法下,可以直接使用 v-modal 指令~
props
名称类型默认值说明modelValueString''md 编辑内容,vue 模板支持双向绑定(v-model="value")editorClassString''编辑器最外层样式hljsObjectnull项目中使用到了 highlight,可将实例直接传递,生产环境则不会请求 CDN,需要手动导入支持的高亮代码样式highlightJsStringhighlight.jshighlightJs CDNhighlightCssStringatom-one-dark预览高亮代码样式historyLengthNumber10最大记录操作数(太大会占用内存)pageFullScreenBooleanfalse浏览器内全屏previewBooleantrue预览模式htmlPreviewBooleanfalsehtml 预览languageString'zh-CN'内置中英文('zh-CN','en-US'),可自行扩展其他语言,同时可覆盖内置的中英文languageUserDefinedArray[{key: StaticTextDefaultValue}]通过这里扩展语言,修改 language 值为扩展 key 即可,类型申明可手动导入toolbarsArray[all]选择性展示工具栏,可选内容如下[toolbars]prettierBooleantrue是否启用 prettier 优化 md 内容prettierCDNStringstandalone prettierMDCDNStringparser-markdowneditorNameString'editor'当在同一页面放置了多个编辑器,最好提供该属性以区别某些带有 ID 的内容[toolbars]
[
'bold',
'underline',
'italic',
'strikeThrough',
'title',
'sub',
'sup',
'quote',
'unorderedList',
'orderedList',
'codeRow',
'code',
'link',
'image',
'table',
'revoke',
'next',
'save',
'pageFullscreen',
'fullscreen',
'preview',
'htmlPreview',
'github'
];
自定义语言,需要替换的内容如下(某些字段若不主动提供,可能会造成页面不美观):
[StaticTextDefaultValue]
export interface StaticTextDefaultValue {
toolbarTips?: ToolbarTips;
titleItem?: {
h1?: string;
h2?: string;
h3?: string;
h4?: string;
h5?: string;
h6?: string;
};
linkModalTips?: {
title?: string;
descLable?: string;
descLablePlaceHolder?: string;
urlLable?: string;
UrlLablePlaceHolder?: string;
buttonOK?: string;
buttonUpload?: string;
};
}
名称入参说明onChangev:String内容变化事件(当前与textare
的oninput
事件绑定,每输入一个单字即会触发)onSavev:String保存事件,快捷键与保存按钮均会触发onUploadImgfiles:FileList, callback:Function上传图片事件,弹窗会等待上传结果,务必将上传后的 urls 作为 callback 入参回传主要以CTRL
搭配对应功能英文单词首字母,冲突项添加SHIFT
,再冲突替换为ALT
。
onSave
回调√CTRL + B加粗**加粗**
√CTRL + U下划线<u>下划线</u>
√CTRL + I斜体*斜体*
√CTRL + 1-61-6 级标题# 标题
√CTRL + ↑上角标<sup>上角标</sup>
√CTRL + ↓下角标<sub>下角标</sub>
√CTRL + Q引用> 引用
√CTRL + O有序列表1. 有序列表
√CTRL + L链接[链接](https://imbf.cc)
√CTRL + T表格`\表格\` 放弃开发(无法实现)xCTRL + Z撤回触发编辑器内内容撤回,与系统无关√CTRL + SHIFT + S删除线~删除线~
√CTRL + SHIFT + U无序列表- 无序列表
√CTRL + SHIFT + C块级代码多行代码块√CTRL + SHIFT + I图片链接
√CTRL + SHIFT + Z前进一步触发编辑器内内容前进,与系统无关√CTRL + SHIFT + F美化内容 √CTRL + ALT + C行内代码行内代码块√yarn add md-editor-v3
jsx 语法项目
import { defineComponent, reactive } from 'vue';
import Editor from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';
import hljs from 'highlight.js';
import 'highlight.js/styles/atom-one-dark.css';
export default defineComponent({
setup() {
const md = reactive({
text: 'default markdown content'
});
return () => (
<Editor hljs={hljs} modelValue={md.text} onChange={(value) => (md.text = value)} />
);
}
});
vue 模板项目
<template>
<editor v-model="text" pageFullScreen></editor>
</template>
<script>
import { defineComponent } from 'vue';
import Editor from 'md-editor-v3';
import 'md-editor-v3/lib/style.css';
export default defineComponent({
name: 'VueTemplateDemo',
components: { Editor },
data() {
return {
text: '默认值'
};
}
});
</script>
默认可以选择多张图片,支持粘贴板上传图片。
注意:粘贴板上传时,如果是网页上的 gif 图,无法正确上传为 gif 格式!
async onUploadImg(files: FileList, callback: (urls: string[]) => void) {
const res = await Promise.all(
Array.from(files).map((file) => {
return new Promise((rev, rej) => {
const form = new FormData();
form.append('file', file);
axios
.post('/api/img/upload', form, {
headers: {
'Content-Type': 'multipart/form-data'
}
})
.then((res) => rev(res))
.catch((error) => rej(error));
});
})
);
callback(res.map((item: any) => item.data.url));
}
该项目目前只生存了3周,使用中有bug期待你能留言给我,有想要的功能期待了解哦。另外审美一般,轻喷。
Recommend
-
73
github地址 演示地址 特点 支持简体中文、英语、法语、西班牙语四种语言 移动端适配 语法拓展全面 支持图片上传 文档丰富、功能丰富且可配置 mavonEditor 基于Vue的markdown编辑器 English Documents D
-
43
全球工单系统 - @simonv3ex - 不知道怎么发图了- -<img alt='图片注释' src='http://operates.oss-cn-beijing.aliyuncs.com/BraftEditorImg//201901
-
34
善于利用光影、时间和比例,用大胆前卫的设计手法打破传统,创造出奇幻而令人难忘的舞台的Es Devlin! 文章转载自:一起设计 ID:together-design 原创:一起设计
-
11
一 引言 设计模式就是一种思想,一种设计方式,他可以帮助我们对于一些问题(不一定是技术,如生活中的问题)...
-
11
前端开发经常会用到富文本编辑器,比如CKEditor,动不动一个库几十M的代码量,其中涉及许多你可能用不到的功能特性和相关设置,CKEditor最新版本的代码仓库就有接近2000个JS文件,300,000行代码。 可是如果你只需要一个简易版的编辑器,真的值得引...
-
10
【STN快报第五季43】EA,让我康康可以么_最终幻想【STN快报第五季43】EA,让我康康可以么84.8万播放 · 1.1万弹幕2021-06-26 15:08:23 全站排行榜最高第22名
-
8
有什么 Markdown 编辑器支持 github markdown 的折叠功能? 7 条回复 • 2021-08-17 15:55:47 +08:00 ...
-
8
做AI框架必懂的知识 - 康康OSC的个人空间 - OSCHINA - 中文开源技术交流社区 作者:ZOMI酱 文章来源:https://zhuanlan.zhihu.com/p...
-
12
本文最后更新于 268 天前,文中所描述的信息可能已发生改变这个项目原本是为了升级 XK-Note 而创造的,后来因为功能的不断完善,逐渐的改成了可复用的组件。XK-Note 原本是使用 Editor.md 的编辑器,...
-
8
这篇手写 Promise 你一定要康康更新日期: 2022-06-13阅读量: 22标签: Promise分...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK