Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@discuzq/vditor

Vanessa219344MIT1.0.26TypeScript support: included

♏ 易于使用的 Markdown 编辑器,为适配不同的应用场景而生

editor, markdown, b3log

readme

在 vditor 基础上增加了气泡工具栏

options 中对于气泡工具栏的设置,主要是设置 bubbleToolbartoolbarConfig 字段

  1. bubbleToolbartoolbar 设置一样。默认有加粗、斜体、删除线
  2. toolbarConfig.bubbleHide 是 boolean 值,是否显示气泡工具栏

构建

npm run build

Vditor
易于使用的 Markdown 编辑器,为适配不同的应用场景而生

npm bundle size



English  |  Demo

💡 简介

Vditor 是一款浏览器端的 Markdown 编辑器,支持所见即所得、即时渲染(类似 Typora)和分屏预览模式。它使用 TypeScript 实现,支持原生 JavaScript、Vue、React、Angular,提供桌面版

欢迎到 Vditor 官方讨论区了解更多。同时也欢迎关注 B3log 开源社区微信公众号 B3log开源

b3logos.jpg

🗺️ 背景

随着 Markdown 排版方式的普及,越来越多的应用开始集成 Markdown 编辑器。目前主流可集成的 Markdown 编辑器现状如下:

  • 有的仅支持分屏预览,即编辑区和预览区分离
  • 有的同时支持所见即所得和分屏预览,但所见即所得模式下不能完整支持 Markdown 语法排版
  • 几乎没有类似 Typora 的即时渲染

而这三点恰好对应了三种应用场景:

  • 分屏预览:适配传统的 Markdown 使用场景,适合大屏下编辑排版
  • 所见即所得:对不熟悉 Markdown 的用户友好,熟悉 Markdown 的用户也可以无缝使用
  • 即时渲染:理论上这是最为优雅的 Markdown 编辑方式,让熟悉 Markdown 的用户能够更专注于内容创作

所以,一个能够适配应用场景的 Markdown 编辑器至关重要,它需要考虑到:

  • 传统 Markdown 用户的使用场景,提供分屏预览
  • 富文本编辑用户的使用场景,提供所见即所得
  • 高阶 Markdown 用户的使用场景,提供即时渲染

Vditor 在这些方面做了努力,希望能为现代化的通用 Markdown 编辑领域做出一些贡献。

✨ 特性

  • 支持三种编辑模式:所见即所得(wysiwyg)、即时渲染(ir)、分屏预览(sv)
  • 支持大纲、数学公式、脑图、图表、流程图、甘特图、时序图、五线谱、多媒体、语音阅读、标题锚点、代码高亮及复制、graphviz 渲染、plantumlUML图
  • 内置安全过滤、导出、图片懒加载、任务列表、多平台预览、多主题切换、复制到微信公众号/知乎功能
  • 实现 CommonMark 和 GFM 规范,可对 Markdown 进行格式化和语法树查看,并支持10+项配置
  • 工具栏包含 36+ 项操作,除支持扩展外还可对每一项中的快捷键、提示、提示位置、图标、点击事件、类名、子工具栏进行自定义
  • 表情/at/话题等自动补全扩展
  • 可使用拖拽、剪切板粘贴上传,显示实时上传进度,支持 CORS 跨域上传
  • 实时保存内容,防止意外丢失
  • 录音支持,用户可直接发布语音
  • 粘贴 HTML 自动转换为 Markdown,如粘贴中包含外链图片可通过指定接口上传到服务器
  • 支持主窗口大小拖拽、字符计数
  • 多主题支持,内置黑白绿三套主题
  • 多语言支持,内置中、英、韩文本地化
  • 支持主流浏览器,对移动端友好

editor.png

preview.png

🔮 编辑模式

所见即所得(WYSIWYG)

所见即所得模式对不熟悉 Markdown 的用户较为友好,熟悉 Markdown 的话也可以无缝使用。

vditor-wysiwyg

即时渲染(IR)

即时渲染模式对熟悉 Typora 的用户应该不会感到陌生,理论上这是最优雅的 Markdown 编辑方式。

vditor-ir

分屏预览(SV)

传统的分屏预览模式适合大屏下的 Markdown 编辑。

vditor-sv

🍱 语法支持

  • 所有 CommonMark 语法:分隔线、ATX 标题、Setext 标题、缩进代码块、围栏代码块、HTML 块、链接引用定义、段落、块引用、列表、反斜杠转义、HTML 实体、行级代码、强调、加粗、链接、图片、行级 HTML、硬换行、软换行和纯文本。
  • 所有 GFM 语法:表格、任务列表项、删除线、自动链接、XSS 过滤
  • 常用 Markdown 扩展语法:脚注、ToC、自定义标题 ID
  • 图表语法
    • 流程图、时序图、甘特图,通过 Mermaid 支持
    • Graphviz
    • 折线图、饼图、脑图等,通过 ECharts 支持
  • 五线谱:通过 abc.js 支持
  • 数学公式:数学公式块、行级数学公式,通过 MathJax 和 KaTeX 支持
  • YAML Front Matter
  • 中文语境优化
    • 中西文之间插入空格
    • 术语拼写修正
    • 中文后跟英文逗号句号等标点替换为中文对应标点

以上大部分特性可以通过开关配置是否启用,开发者可根据自己的应用场景选择搭配。

🗃 案例

  • Sym 一款用 Java 实现的现代化社区(论坛/BBS/社交网络/博客)平台
  • Solo & Pipe B3log 分布式社区的博客端节点,欢迎加入下一代社区网络
  • 思源笔记 一款 Markdown 块级引用和双向链接的网状笔记应用
  • Arya 基于 Vue、Vditor,所构建的在线 Markdown 编辑器
  • 更多案例

🛠️ 使用文档

CommonJS

  • 安装依赖
npm install vditor --save
  • 在代码中引入并初始化对象,可参考 index.js
import Vditor from 'vditor'
import "~vditor/src/assets/scss/index"

const vditor = new Vditor(id, {options...})

HTML script

  • 在 HTML 中插入 CSS 和 JavaScript,可参考 demo
<!-- ⚠️生产环境请指定版本号,如 https://cdn.jsdelivr.net/npm/vditor@x.x.x/dist... -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/vditor/dist/index.css" />
<script src="https://cdn.jsdelivr.net/npm/vditor/dist/index.min.js"></script>

示例代码

主题

编辑器主题

编辑器所展现的外观。内置classic,dark 2 套主题。

  • 编辑器初始化时可通过 options.theme 设置内置主题
  • 初始化完成后可通过 setTheme 更新编辑器主题
  • 可通过修改 index.scss 中的变量对主题颜色进行定制
  • 可参考现有结构和类名在原有基础上进行修改

内容主题

Markdown 输出的 HTML 所展现的外观。内置 light,dark,wechat 3 套主题。支持内容主题扩展接口。

  • 需在显示元素上添加 class="vditor-reset"
  • 编辑器初始化时可通过 options.preview.theme 设置内置或自己开发的主题列表
  • 内容渲染初始化时可通过 IPreviewOptions.theme 设置内置或自己开发的主题
  • 初始化完成后可通过 setThemesetContentTheme 更新内容主题

代码主题

代码块所展现的外观。内置 github 等 36 套主题。

  • 编辑器初始化时可通过 options.preview.hljs 对代码块样式、行号、是否启用进行设置
  • 内容渲染初始化时可通过 IPreviewOptions.hljs 对代码块样式、行号、是否启用进行设置
  • 初始化完成后可通过 setThemesetCodeTheme 更新代码主题

API

id

可填入元素 id 或元素自身 HTMLElement

⚠️:当填入元素自身的 HTMLElement 时需设置 options.cache.id 或将 options.cache.enable 设置为 false

options

| | 说明 | 默认值 | | - | - | - | | undoDelay | 历史记录间隔 | - | | after | 编辑器异步渲染完成后的回调方法 | - | | height | 编辑器总高度 | 'auto' | | minHeight | 编辑区域最小高度 | - | | width | 编辑器总宽度,支持 % | 'auto' | | placeholder | 输入区域为空时的提示 | '' | | lang | 多语言:en_US, ja_JP, ko_KR, ru_RU, zh_CN | 'zh_CN' | | input(value: string) | 输入后触发 | - | | focus(value: string) | 聚焦后触发 | - | | blur(value: string) | 失焦后触发 | - | | esc(value: string) | <kbd>esc</kbd> 按下后触发 | - | | ctrlEnter(value: string) | <kbd>⌘/ctrl+enter</kbd> 按下后触发 | - | | select(value: string) | 编辑器中选中文字后触发 | - | | tab | <kbd>tab</kbd> 键操作字符串,支持 \t 及任意字符串 | - | | typewriterMode | 是否启用打字机模式 | false | | cdn | 配置自建 CDN 地址 | https://cdn.jsdelivr.net/npm/vditor@${VDITOR_VERSION} | | mode | 可选模式:sv, ir, wysiwyg | 'ir' | | debugger | 是否显示日志 | false | | value | 编辑器初始化值 | '' | | theme | 主题:classic, dark | 'classic' | | icon | 图标风格:ant, material | 'ant' |

options.toolbar

  • 工具栏,可使用 name 进行简写: toolbar: ['emoji', 'br', 'bold', '|', 'line'] 。默认值参见 src/ts/util/Options.ts
  • name 可枚举为: emoji , headings , bold , italic , strike , | , line , quote , list , ordered-list , check ,outdent ,indent , code , inline-code , insert-after , insert-before ,undo , redo , upload , link , table , record , edit-mode , both , preview , fullscreen , outline , code-theme , content-theme , export, devtools , info , help , br
  • name 不在枚举中时,可以添加自定义按钮,格式如下:
new Vditor('vditor', {
  toolbar: [
    {
      hotkey: '⇧⌘S',
      name: 'sponsor',
      tipPosition: 's',
      tip: '成为赞助者',
      className: 'right',
      icon: '<svg t="1589994565028" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2808" width="32" height="32"><path d="M506.6 423.6m-29.8 0a29.8 29.8 0 1 0 59.6 0 29.8 29.8 0 1 0-59.6 0Z" fill="#0F0F0F" p-id="2809"></path><path d="M717.8 114.5c-83.5 0-158.4 65.4-211.2 122-52.7-56.6-127.7-122-211.2-122-159.5 0-273.9 129.3-273.9 288.9C21.5 562.9 429.3 913 506.6 913s485.1-350.1 485.1-509.7c0.1-159.5-114.4-288.8-273.9-288.8z" fill="#FAFCFB" p-id="2810"></path><path d="M506.6 926c-22 0-61-20.1-116-59.6-51.5-37-109.9-86.4-164.6-139-65.4-63-217.5-220.6-217.5-324 0-81.4 28.6-157.1 80.6-213.1 53.2-57.2 126.4-88.8 206.3-88.8 40 0 81.8 14.1 124.2 41.9 28.1 18.4 56.6 42.8 86.9 74.2 30.3-31.5 58.9-55.8 86.9-74.2 42.5-27.8 84.3-41.9 124.2-41.9 79.9 0 153.2 31.5 206.3 88.8 52 56 80.6 131.7 80.6 213.1 0 103.4-152.1 261-217.5 324-54.6 52.6-113.1 102-164.6 139-54.8 39.5-93.8 59.6-115.8 59.6zM295.4 127.5c-72.6 0-139.1 28.6-187.3 80.4-47.5 51.2-73.7 120.6-73.7 195.4 0 64.8 78.3 178.9 209.6 305.3 53.8 51.8 111.2 100.3 161.7 136.6 56.1 40.4 88.9 54.8 100.9 54.8s44.7-14.4 100.9-54.8c50.5-36.3 108-84.9 161.7-136.6 131.2-126.4 209.6-240.5 209.6-305.3 0-74.9-26.2-144.2-73.7-195.4-48.2-51.9-114.7-80.4-187.3-80.4-61.8 0-127.8 38.5-201.7 117.9-2.5 2.6-5.9 4.1-9.5 4.1s-7.1-1.5-9.5-4.1C423.2 166 357.2 127.5 295.4 127.5z" fill="#141414" p-id="2811"></path><path d="M353.9 415.6m-33.8 0a33.8 33.8 0 1 0 67.6 0 33.8 33.8 0 1 0-67.6 0Z" fill="#0F0F0F" p-id="2812"></path><path d="M659.3 415.6m-33.8 0a33.8 33.8 0 1 0 67.6 0 33.8 33.8 0 1 0-67.6 0Z" fill="#0F0F0F" p-id="2813"></path><path d="M411.6 538.5c0 52.3 42.8 95 95 95 52.3 0 95-42.8 95-95v-31.7h-190v31.7z" fill="#5B5143" p-id="2814"></path><path d="M506.6 646.5c-59.6 0-108-48.5-108-108v-31.7c0-7.2 5.8-13 13-13h190.1c7.2 0 13 5.8 13 13v31.7c0 59.5-48.5 108-108.1 108z m-82-126.7v18.7c0 45.2 36.8 82 82 82s82-36.8 82-82v-18.7h-164z" fill="#141414" p-id="2815"></path><path d="M450.4 578.9a54.7 27.5 0 1 0 109.4 0 54.7 27.5 0 1 0-109.4 0Z" fill="#EA64F9" p-id="2816"></path><path d="M256 502.7a32.1 27.5 0 1 0 64.2 0 32.1 27.5 0 1 0-64.2 0Z" fill="#EFAFF9" p-id="2817"></path><path d="M703.3 502.7a32.1 27.5 0 1 0 64.2 0 32.1 27.5 0 1 0-64.2 0Z" fill="#EFAFF9" p-id="2818"></path></svg>',
      click () {alert('捐赠地址:https://ld246.com/sponsor')},
    }],
})

| | 说明 | 默认值 | | - | - | - | | name | 唯一标示 | - | | icon | svg 图标 | - | | tip | 提示 | - | | tipPosition | 提示位置:'n', 'ne', 'nw', 's', 'se', 'sw', 'w', 'e' | - | | hotkey | 快捷键,格式为<kbd>⇧⌘</kbd>/<kbd>⌘</kbd>/<kbd>⌥⌘</kbd>| - | | suffix | 插入编辑器中的后缀 | - | | prefix | 插入编辑器中的前缀 | - | | click(event: Event, vditor: IVditor) | 自定义按钮点击时触发的事件 | - | | className | 样式名 | '' | | toolbar?: Array<options.toolbar> | 子菜单 | - |

options.toolbarConfig

| | 说明 | 默认值 | | - | - | - | | hide | 是否隐藏工具栏 | false | | pin | 是否固定工具栏 | false |

options.counter

| | 说明 | 默认值 | | - | - | - | | enable | 是否启用计数器 | false | | tipPosition(length: number, counter: options.counter): void | 字数统计回调 | - | | max | 允许输入的最大值 | - | | type | 统计类型:'markdown', 'text' | 'markdown' |

options.cache

| | 说明 | 默认值 | | - | - | - | | enable | 是否使用 localStorage 进行缓存 | true | | id | 缓存 key,第一个参数为元素且启用缓存时必填 | - | | after(html: string): string | 缓存后的回调 | - |

options.comment

⚠️:仅支持 wysiwyg 模式

| | 说明 | 默认值 | | - | - | - | | enable | 是否启用评论模式 | false | | add(id: string, text: string, commentsData: ICommentsData[]) | 添加评论回调 | - | | remove(ids: string[]) | 删除评论回调 | - | | scroll(top: number) | 滚动回调 | - | | adjustTop(commentsData: ICommentsData[]) | 文档修改时,适配评论高度 | - |

options.preview

| | 说明 | 默认值 | | - | - | - | | delay | 预览 debounce 毫秒间隔 | 1000 | | maxWidth | 预览区域最大宽度 | 800 | | mode | 显示模式:both, editor | 'both' | | url | md 解析请求 | - | | parse(element: HTMLElement) | 预览回调 | - | | transform(html: string): string | 渲染之前回调 | - |

options.preview.hljs

| | 说明 | 默认值 | | - | - | - | | enable | 是否启用代码高亮 | true | | style | 可选值参见Chroma | github | | lineNumber | 是否启用行号 | false |

options.preview.markdown

| | 说明 | 默认值 | | - | - | - | | autoSpace | 自动空格 | false | | fixTermTypo | 自动矫正术语 | false | | toc | 插入目录 | false | | footnotes | 脚注 | true | | codeBlockPreview | wysiwyg 和 ir 模式下是否对代码块进行渲染 | true | | mathBlockPreview | wysiwyg 和 ir 模式下是否对数学公式进行渲染 | true | | paragraphBeginningSpace | 段落开头空两个 | false | | sanitize | 是否启用过滤 XSS | true | | listStyle | 为列表添加 data-style 属性 | false | | linkBase | 链接相对路径前缀 | '' | | linkPrefix | 链接强制前缀 | '' | | mark | 启用 mark 标记 | false |

options.preview.theme

| | 说明 | 默认值 | | - | - | - | | current | 当前主题 | "light" | | list | 可选主题列表 | { dark: "Dark", light: "Light", wechat: "WeChat" } | | path | 主题样式地址 | https://cdn.jsdelivr.net/npm/vditor@${VDITOR_VERSION}/dist/css/content-theme |

options.preview.math

| | 说明 | 默认值 | | - | - | - | | inlineDigit | 内联数学公式起始 $ 后是否允许数字 | false | | macros | 使用 MathJax 渲染时传入的宏定义 | {} | | engine | 数学公式渲染引擎:KaTeX, MathJax | 'KaTeX' |

options.preview.actions?: Array<IPreviewAction | IPreviewActionCustom>

默认值为 ["desktop", "tablet", "mobile", "mp-wechat", "zhihu"]。 可从默认值中挑选进行配置,也可使用以下字段进行自定制开发。

| | 说明 | 默认值 | | - | - | - | | key | 按钮唯一标识,不能为空 | - | | text | 按钮文字 | - | | tooltip | 提示 | - | | className | 按钮类名 | - | | click(key: string) | 按钮点击回调事件 | - |

options.hint

| | 说明 | 默认值 | | - | - | - | | parse | 是否进行 md 解析 | true | | delay | 提示 debounce 毫秒间隔 | 200 | | emoji | 默认表情,可从lute/emoji_map 中选取,也可自定义 | { '+1': '👍', '-1': '👎', 'heart': '❤️', 'cold_sweat': '😰' } | | emojiTail | 常用表情提示 | - | | emojiPath | 表情图片地址 | https://cdn.jsdelivr.net/npm/vditor@${VDITOR_VERSION}/dist/images/emoji | | extend: IHintExtend[] | 对 @/话题等关键字自动补全的扩展 | [] |

interface IHintExtend {
    key: string;

    hint?(value: string): Array<{
        html: string;
        value: string;
    }>;
}

options.upload

  • 文件上传的数据结构如下。后端返回的数据结构不一致时,可使用 format 进行转换。
// POST data
xhr.send(formData);  // formData = FormData.append("file[]", File)
// return data
{
 "msg": "",
 "code": 0,
 "data": {
 "errFiles": ['filename', 'filename2'],
 "succMap": {
   "filename3": "filepath3",
   "filename3": "filepath3"
   }
 }
}
  • 为了防止站外图片失效, linkToImgUrl 可将剪贴板中的站外图片地址传到服务器端进行保存处理,其数据结构如下:
// POST data
xhr.send(JSON.stringify({url: src})); // src 为站外图片地址
// return data
{
 msg: '',
 code: 0,
 data : {
   originalURL: '',
   url: ''
 }
}
  • successformaterror 不会同时触发,具体调用情况如下:
if (xhr.status === 200) {
    if (vditor.options.upload.success) {
        vditor.options.upload.success(editorElement, xhr.responseText);
    } else {
        let responseText = xhr.responseText;
        if (vditor.options.upload.format) {
            responseText = vditor.options.upload.format(files as File [], xhr.responseText);
        }
        genUploadedLabel(responseText, vditor);
    }
} else {
    if (vditor.options.upload.error) {
        vditor.options.upload.error(xhr.responseText);
    } else {
        vditor.tip.show(xhr.responseText);
    }
}

| | 说明 | 默认值 | | - | - | - | | url | 上传 url,为空则不会触发上传相关事件 | '' | | max | 上传文件最大 Byte | 10 * 1024 * 1024 | | linkToImgUrl | 剪切板中包含图片地址时,使用此 url 重新上传 | '' | | linkToImgCallback(responseText: string) | 图片地址上传回调 | - | | linkToImgFormat(responseText: string): string | 对图片地址上传的返回值进行格式化 | - | | success(editor: HTMLPreElement, msg: string) | 上传成功回调 | - | | error(msg: string) | 上传失败回调 | - | | token | CORS 上传验证,头为 X-Upload-Token | - | | withCredentials | 跨站点访问控制 | false | | headers | 请求头设置 | - | | filename(name: string): string | 文件名安全处理 | name => name.replace(/\W/g, '') | | accept | 文件上传类型,同input accept | - | | validate(files: File[]) => string | boolean | 校验,成功时返回 true 否则返回错误信息 | - | | handler(files: File[]) => string | null | 自定义上传,当发生错误时返回错误信息 | - | | format(files: File[], responseText: string): string | 对服务端返回的数据进行转换,以满足内置的数据结构 | - | | file(files: File[]): File[] | 将上传的文件处理后再返回 | - | | setHeaders(): { [key: string]: string } | 上传前使用返回值设置头 | - | | extraData: { [key: string]: string | Blob } | 为 FormData 添加额外的参数 | - | | multiple | 上传文件是否为多个 | true | | fieldName | 上传字段名称 | 'file[]' |

options.resize

| | 说明 | 默认值 | | - | - | - | | enable | 是否支持大小拖拽 | false | | position | 拖拽栏位置:'top', 'bottom' | 'bottom' | | after(height: number) | 拖拽结束的回调 | - |

options.classes

| | 说明 | 默认值 | | - | - | - | | preview | 预览元素上的 className | '' |

options.fullscreen

| | 说明 | 默认值 | | - | - | - | | index | 全屏层级 | 90 |

options.outline

| | 说明 | 默认值 | | - | - | - | | enable | 初始化是否展现大纲 | false | | position | 大纲位置:'left', 'right' | 'left' |

methods

| | 说明 | | - | - | | getValue() | 获取 Markdown 内容 | | getHTML() | 获取 HTML 内容 | | insertValue(value: string, render = true) | 在焦点处插入内容,并默认进行 Markdown 渲染 | | focus() | 聚焦到编辑器 | | blur() | 让编辑器失焦 | | disabled() | 禁用编辑器 | | enable() | 解除编辑器禁用 | | getSelection(): string | 返回选中的字符串 | | setValue(markdown: string, clearStack = false) | 设置编辑器内容且选中清空历史栈 | | clearStack() | 清空撤销和重做记录栈| | renderPreview(value?: string) | 设置预览区域内容 | | getCursorPosition():{top: number, left: number} | 获取焦点位置 | | deleteValue() | 删除选中内容 | | updateValue(value: string) | 更新选中内容 | | isUploading() | 上传是否还在进行中 | | clearCache() | 清除缓存 | | disabledCache() | 禁用缓存 | | enableCache() | 启用缓存 | | html2md(value: string) | HTML 转 md | | tip(text: string, time: number) | 消息提示。time 为 0 将一直显示 | | setPreviewMode(mode: "both" | "editor") | 设置预览模式 | | setTheme(theme: "dark" | "classic", contentTheme?: string, codeTheme?: string, contentThemePath?: string) | 设置主题、内容主题及代码块风格 | | getCurrentMode(): string | 获取编辑器当前编辑模式 | | destroy() | 销毁编辑器 | | getCommentIds(): {id: string, top: number}[] | 获取所有评论 | | hlCommentIds(ids: string[]) | 高亮评论 | | unHlCommentIds(ids: string[]) | 取消评论高亮 | | removeCommentIds(removeIds: string[]) | 删除评论 |

static methods

  • 不需要进行编辑操作时,仅需引入 method.min.js 后如下直接调用
Vditor.mermaidRender(document)
import VditorPreview from 'vditor/dist/method.min'
VditorPreview.mermaidRender(document)
  • 需要对页面中的 Markdown 进行渲染时可直接调用 preview 方法,参数如下:
previewElement: HTMLDivElement,   // 使用该元素进行渲染
markdown: string,  // 需要渲染的 markdown 原文
options?: IPreviewOptions {
  mode: "dark" | "light";
  anchor?: number;  // 为标题添加锚点 0:不渲染;1:渲染于标题前;2:渲染于标题后,默认 0
  customEmoji?: { [key: string]: string };    // 自定义 emoji,默认为 {}
  lang?: (keyof II18nLang);    // 语言,默认为 'zh_CN'
  emojiPath?: string;    // 表情图片路径
  hljs?: IHljs; // 参见 options.preview.hljs
  speech?: {  // 对选中后的内容进行阅读
    enable?: boolean,
  };
  math?: IMath; // 数学公式渲染配置
  cdn?: string; // 自建 CDN 地址
  transform?(html: string): string; // 在渲染前进行的回调方法
  after?(); // 渲染完成后的回调
  lazyLoadImage?: string; // 设置为 Loading 图片地址后将启用图片的懒加载
  markdown?: options.preview.markdown;
  theme?: options.preview.theme;
  renderers?: ILuteRender; // 自定义渲染 https://ld246.com/article/1588412297062
}
  • ⚠️ method.min.jsindex.min.js 不可同时引入

| | 说明 | | - | - | | previewImage(oldImgElement: HTMLImageElement, lang: keyof II18n = "zh_CN", theme = "classic") | 点击图片预览 | | mermaidRender(element: HTMLElement, cdn = options.cdn, theme = options.theme) | 流程图/时序图/甘特图 | | flowchartRender(element: HTMLElement, cdn = options.cdn) | flowchart 渲染 | | codeRender(element: HTMLElement, lang: (keyof II18nLang) = "zh_CN") | 为 element 中的代码块添加复制按钮 | | chartRender(element: (HTMLElement | Document) = document, cdn = options.cdn, theme = options.theme) | 图表渲染 | | mindmapRender(element: (HTMLElement | Document) = document, cdn = options.cdn, theme = options.theme) | 脑图渲染 | | plantumlRender(element: (HTMLElement | Document) = document, cdn = options.cdn) | plantuml 渲染 | | abcRender(element: (HTMLElement | Document) = document, cdn = options.cdn) | 五线谱渲染 | | md2html(mdText: string, options?: IPreviewOptions): Promise<string> | Markdown 文本转换为 HTML,该方法需使用异步编程 | | preview(previewElement: HTMLDivElement, markdown: string, options?: IPreviewOptions) | 页面 Markdown 文章渲染 | | highlightRender(hljsOption?: IHljs, element?: HTMLElement | Document, cdn = options.cdn) | 为 element 中的代码块进行高亮渲染 | | mediaRender(element: HTMLElement) | 为特定链接分别渲染为视频、音频、嵌入的 iframe | | mathRender(element: HTMLElement, options?: {cdn?: string, math?: IMath}) | 对数学公式进行渲染 | | speechRender(element: HTMLElement, lang?: (keyof II18nLang)) | 对选中的文字进行阅读 | | graphvizRender(element: HTMLElement, cdn?: string) | 对 graphviz 进行渲染 | | outlineRender(contentElement: HTMLElement, targetElement: Element) | 对大纲进行渲染 | | lazyLoadImageRender(element: (HTMLElement | Document) = document) | 对启用懒加载的图片进行渲染 | | setCodeTheme(codeTheme: string, cdn = options.cdn) | 设置代码主题,codeTheme 参见 options.preview.hljs.style | | setContentTheme(contentTheme: string, path: string) | 设置内容主题,contentTheme 参见 options.preview.theme.list |

🏗 开发文档

原理相关

环境

  1. 安装 node LTS 版本
  2. 下载最新代码并解压
  3. 根目录运行 npm install
  4. npm run start 启动本地服务器,打开 http://localhost:9000
  5. 修改代码
  6. npm run build 打包代码到 dist 目录

CDN 切换

由于使用了按需加载的机制,默认 CDN 为 https://cdn.jsdelivr.net/npm/vditor@版本号

如果代码有修改或需要使用自建 CDN 的话,可按以下步骤进行操作:

  • 初始化时,需对 optionsIPreviewOptions 中的 cdnemojiPath, themes 进行配置
  • highlightRender , mathRender , abcRender , chartRender , mermaidRenderflowchartRendermindmapRendergraphvizRendersetCodeThemesetContentTheme 方法中需添加 cdn 参数
  • 将 build 成功的 dist 目录或 jsDelivr 中的 dist 目录拷贝至正确的位置

升级

版本升级时请仔细阅读 CHANGELOG 中的升级部分

Ⓜ️ Markdown 使用指南

🏘️ 社区

📄 授权

Vditor 使用 MIT 开源协议。

🙏 鸣谢

  • Lute:🎼 一款结构化的 Markdown 引擎,支持 Go 和 JavaScript
  • highlight.js:JavaScript syntax highlighter
  • mermaid:Generation of diagram and flowchart from text in a similar manner as Markdown
  • incubator-echarts:A powerful, interactive charting and visualization library for browser
  • abcjs:JavaScript library for rendering standard music notation in a browser

📽️ 历史

我们在开发 Sym 的初期是直接使用 WYSIWYG 富文本编辑器的。那时候基于 HTML 的编辑器非常流行,项目中引用起来也很方便,也符合用户当时的使用习惯。

后来,Markdown 的崛起逐步改变了大家的排版方式。再加上我们其他几个项目都是面向程序员用户的,所以迁移到 md 上也是大势所趋。我们选择了 CodeMirror,这是一款优秀的编辑器,它对开发者提供了丰富的编程接口,对各种浏览器的兼容性也比较好。

再后来,随着我们项目业务需求方面的沉淀,使用 CodeMirror 有时候会感到比较“笨重”。比如要实现 @自动完成用户名列表、插入 Emoji、上传文件等就需要比较深入的二次开发,而这些业务需求恰恰是很多项目场景共有且必备的。

终于,我们决定开始在 Sym 中自己实现编辑器。随着几个版本的迭代,Sym 的编辑器也日趋成熟。在我们运营的社区链滴上陆续有人问我们是否能将编辑器单独抽离出来提供给大家使用。与此同时,我们的前端主程 V 同学对于维护分散在各个项目中的编辑器也感到有点力不从心,外加对 TypeScript 的好感,所以就决定使用 ts 来实现一个全新的浏览器端 md 编辑器。

于是,Vditor 就这样诞生了。

changelog

Vditor change log

升级

  • 3.7
    • preview 静态方法添加 mode 配置
    • 大纲 DOM 结构和 class 变更
    • 添加 options.undoDelay 配置
    • 添加 options.counter.after 回调方法
    • 添加 previewImage 静态方法
    • 添加 options.fullscreen.index
    • 移除options.preview.markdown.chinesePunct 配置
    • options.outline 修改为 { enable: boolean, position: "left" | "right" }
    • toolbar.click 参数修改为 event: Event, vditor: IVditor
  • 3.6
    • options.preview.actions 添加 tooltip
    • mermaidRender 添加 theme 参数
    • mindmapRender 添加 theme 参数
    • chartRender 添加 theme 参数
  • 3.5
    • mermaidRender 移除 className 参数
  • 3.4
    • options.hint.at => "options.hint.extend: IHintExtend[]"
  • v3.3
    • options.mode 默认值修改为 ir
    • options.markdown.listMarker 修改为 options.markdown.listStyle
    • options.preview.markdow.theme 修改为 options.preview.theme
    • setContentTheme 参数修改为 contentTheme: string, path: string
    • setTheme 参数修改为 theme: "dark" | "classic", contentTheme?: string, codeTheme?: string, contentThemePath?: string
    • 移除 setSelection
    • 移除 options.keymap
    • 移除 options.preview.markdown.setext
    • 移除工具栏上的格式化功能:options.toolbar 中移除 format 选项
  • v3.2
    • IPreviewOptions.anchor 从 boolean 类型修改为 number 类型
  • v3.1
    • options.counter 修改为 counter?: { enable: boolean; max?: number; type: "markdown" | "text"; }
    • options.hideToolbar 修改为 toolbarConfig: { hide?: boolean, pin?: boolean }
    • setPreviewMode 方法中移除 preview 选项
    • options.preview.mode 移除 preview 选项
    • IPreviewOptions 中的 theme 配置移动到 IPreviewOptions.markdown
  • v3.0
    • options.mode 可选值为:'wysiwyg', 'sv', 'ir'
    • toolbar 中的 wysiwyg 修改为 edit-mode
    • new 支持传入 element
    • options.cache 修改为 {enable: boolean, id: string}
    • md2html 方法改为异步
    • 添加 options.preview.markdown.codeBlockPreview 配置
    • options.toolbar 添加 className 配置
    • 添加 getCurrentMode 方法
  • v2.2
    • 移除 IPreviewOptions 中的 className
    • insertValue 添加 render 参数,以便配置是否需要进行 Markdown 处理
    • 将异步方法变为同步
    • 引用快捷键修改为 <kbd>Ctrl-;</kbd>
    • 移除 index-preview.html, index-preview.js 文件
    • options.preview.markdown.autoSpace/chinesePunct/fixTermTypo 默认值设置为 false
  • v2.1
    • 添加 options.upload.file 方法
    • options.preview 修改,支持 MathJax 配置
    • 移除 mathRenderByLute 方法
    • 添加 setTheme 方法,classic.scss -> index.scss
  • v2.0
    • 默认为 WYSIWYG 模式,可根据需要修改 option.mode 参数
    • 添加 options.debugger, options.value
  • v1.9
    • preview 静态方法参数修改为 (previewElement: HTMLDivElement, markdown: string, options?: IPreviewOptions),其中参数 IPreviewOptions 修改为
         anchor?: boolean;
         className?: string;
         customEmoji?: { [key: string]: string };
         lang?: (keyof II18nLang);
         emojiPath?: string;
         hljs?: {
            lineNumber?: boolean;
            style?: string;
            enable?: boolean;
         };
         speech?: {
             enable?: boolean
         }
    • highlightRender 参数修改为 (hljs?: IHljs, element?: HTMLElement | Document)
  • v1.8
    • getHTML 方法移除参数
    • md2html 静态方法参数修改为 (mdText: string, options?: IPreviewOptions)
    • mathRender 参数修改为 (element: HTMLElement)
    • preview.hljs.style 默认值修改为 github,可选值参见chroma
    • 添加 typewriterMode 配置,默认值为 false。1.7 版本用户需要手动开启该功能
  • v1.7
    • option.preivew.show?: boolean => option.preivew.mode?: string
    • 移除 option.editorName

TODO

v3.8.4 / 2021-03-26

  • 980 流程图不应渲染代码高亮 修复缺陷
  • 987 完善 upload 必填项说明 文档相关
  • 970 added ru_RU lang 引入特性
  • 955 为 hint 内容添加是否进行 md 转换的设置 改进功能
  • 956 改进 plantuml 解析问题 修复缺陷
  • 文档修改
    • 3.8.4
      • 添加 hint.parse 配置

v3.8.3 / 2021-03-14

  • 953 标题删除需保留空行 改进功能
  • 946 Improve delete behavior in the list item after the code block 修复缺陷
  • 949 lute.Md2HTML 3.7.5 后解析无 id 属性 修复缺陷
  • 936 Auto link .app domain suffix 改进功能
  • 926 即时渲染和所见即所得模式支持点击链接 引入特性
  • 938 大纲缺少样式 修复缺陷
  • 928 Mathjax 资源缺失及添加 license 修复缺陷
  • 720 在光标位置插入内容的问题 改进功能
  • 751 firefox 代码块中 enter 键换行问题 修复缺陷
  • 923 隐藏预览操作栏 改进功能
  • 921 MS Word 表格粘贴问题 修复缺陷
  • 922 MS Excel 粘贴带图表格问题 修复缺陷
  • 904 wysiwyg 和 ir 模式表格增加向上插入行和向左插入列 改进功能
  • 920 ” 无法输入 修复缺陷
  • 919 支持外部文本内容拖拽进入编辑器 改进功能
  • 917 intsertValue无法一次添加多行markdown内容 修复缺陷
  • 910 编辑列表内容时出现的问题 改进功能
  • 913 支持plantuml 引入特性
  • 907 mathjax 在method.min.js 中preview 显示错误 修复缺陷
  • 909 toc 和大纲中数学公式显示问题修复 修复缺陷
  • 908 粘贴不了 MS Office Excel 内容的问题 修复缺陷
  • 文档修改
    • 3.8.0
      • 添加 plantumlRender 方法
      • options.input 移除 previewElement 参数
    • 3.8.1
      • 添加表格增加向上插入行 ⇧⌘F 和向左插入列 ⇧⌘G 的快捷键
      • 快捷键配置格式修改为 ⇧⌘[] / ⌘[] / ⌥⌘[]

v3.7.7 / 2021-01-19

  • 903 使用 setValue 后第一次输入无法撤销 修复缺陷
  • 902 hint 内容为 md 时,需进行渲染 改进功能
  • 900 img标签图片无法显示 修复缺陷
  • 901 预览区域代码点击复制无效 修复缺陷
  • 890 Can not delete the special tag(Wysiwyg mode) 修复缺陷
  • 894 代码块下紧跟一张图片,使用回退键删除图片时光标跑到代码块里,图片不能删除 修复缺陷
  • 659 IR 模式复制粘贴 <kbd> 问题 修复缺陷
  • 888 大纲点击错误 修复缺陷
  • 884 工具栏自定义按钮禁用 改进功能
  • 877 数学公式输入删除生成节点 修复缺陷
  • 882 改进 HTML 转换 Markdown 时加粗、斜体等空格的处理 改进功能
  • 878 移除列表标记符中文优化 改进功能
  • 875 增加大纲位置配置 引入特性
  • 873 graphviz,mermaid 在为空时不应出现错误提示 改进功能
  • 872 vditor.options.upload.file 支持 await 改进功能
  • 871 大纲标题过长需显示省略号 改进功能
  • 866 预览配置开启自动空格后,链接中有中文,无法正常解析 改进功能
  • 868 将 Markdown 引擎选项拆分为解析选项和渲染选项 改进功能
  • 869 移除 options.preview.markdown. chinesePunct 配置 开发重构
  • 848 即时渲染模式下FireFox浏览器光标问题 修复缺陷
  • 847 即时渲染状态下 Firefox 删除线出错 修复缺陷
  • 858 预览模式下应禁用工具栏上传按钮 修复缺陷
  • 849 固定工具栏模式下点击全屏打开后导航栏位置异常 修复缺陷
  • 855 添加全屏 z-index 设置 引入特性
  • 850 工具栏大纲按钮点击后焦点并未回到内容区 改进功能
  • 840 关于移动端图片点击需求 引入特性
  • 842 大纲无法展示 修复缺陷
  • 673 复制粘贴 Excel 内容转换为表格问题 修复缺陷
  • 742 IR 模式块引用换行问题 修复缺陷
  • 759 添加数字统计回调函数 引入特性
  • 835 历史性能优化 改进功能
  • 837 历史记录添加时间间隔配置 引入特性
  • 479 大纲折叠 改进功能
  • 830 ToC 优化 改进功能
  • 828 为 Vditor.preview 添加 mode 设置 修复缺陷
  • 文档修改
    • 3.7.0
      • preview 静态方法添加 mode 配置
      • 大纲 DOM 结构和 class 变更
    • 3.7.1
      • 添加 options.undoDelay 配置
      • 添加 options.counter.after 回调方法
    • 3.7.2
      • 添加 previewImage 静态方法
    • 3.7.3
      • 添加 options.fullscreen.index
    • 3.7.4
      • 移除options.preview.markdown.chinesePunct 配置
    • 3.7.5
      • options.outline 修改为 { enable: boolean, position: "left" | "right" }
      • toolbar.click 参数修改为 event: Event, vditor: IVditor

v3.6.6 / 2020-11-23

  • 824 流程图大小可自适应 & 居中 引入特性
  • 822 流程图、甘特图、时序图、图表、脑图、五线谱、添加暗黑模式 引入特性
  • 823 数学公式块去除背景 改进功能
  • 761 列表项批量缩进和取消缩进 改进功能
  • 819 粘贴后滚动到粘贴内容末尾 bug 修复缺陷
  • 815 wysiwyg sv 表格切换会多内容 修复缺陷
  • 814 划词评论纯文本以外的其他元素处理 修复缺陷
  • 812 粘贴时减少抖动优化 改进功能
  • 810 所见即所得模式划词评论功能改进 修复缺陷
  • 807 脚注和链接引用改进 改进功能
  • 721 所见即所得模式加入划词评论 引入特性
  • 808 options.preview.actions 添加的自定义 tooltip 改进功能
  • 802 粘贴后需滚动到粘贴内容的末尾 改进功能
  • 806 修复201不算成功的问题 改进功能
  • 786 数学公式块预览开关 引入特性
  • 800 WG 模式代码块预览开关问题 修复缺陷
  • 801 编辑器拖拽问题 修复缺陷
  • 796 列表项合并 改进功能
  • 787 IR 模式 Setext 风格标题编辑问题 修复缺陷
  • 784 从 WPS 粘贴时标题转 Markdown 优化 改进功能
  • 781 增加 linkPrefix 用于强制对链接目标地址添加前缀 引入特性
  • 780 linkToImg支持自定义format 引入特性
  • 文档修改
    • 3.6.1
      • options.preview.actions 添加 tooltip
      • 添加 options.commentgetCommentIds, hlCommentIds, unHlCommentIds, removeCommentIds 方法
        comment?: {
           enable: boolean
           add?(id: string, text: string, commentsData: ICommentsData[]): void
           remove?(ids: string[]): void;
           scroll?(top: number): void;
           adjustTop?(commentsData: ICommentsData[]): void;
        };
    • 3.6.4
      • mermaidRender 添加 theme 参数
      • mindmapRender 添加 theme 参数
      • chartRender 添加 theme 参数

v3.5.5 / 2020-10-12

  • 777 blockquote 复制问题 修复缺陷
  • 774 sv 模式在 table 后换行 bug修复缺陷
  • 773 vditor支持FlowCharts的流程图语法 引入特性
  • 770 取消列表项自动合并 改进功能
  • 768 mermaid 问题修复 修复缺陷
  • 765 hint 组件中文回车及单引号转译修复 修复缺陷
  • 746 块引用 > 按下后即渲染(允许空内容的块引用) 改进功能
  • 757 汉语拼音中文空格问题 修复缺陷
  • 756 任务列表编辑问题 修复缺陷
  • 755 撤销后光标位置改进 修复缺陷
  • 746 代码片段都没了 修复缺陷
  • 753 更新社区地址为 ld246.com 文档相关
  • 752 图表和脑图 undo bug 修复缺陷
  • 749 即时渲染模式转义符 \ 改进 改进功能
  • 747 options.esc 中文处理 改进功能
  • 744 IR 模式代码块闪烁 修复缺陷
  • 748 数学公式中出现中文不能渲染问题 修复缺陷
  • 738 IR 模式标题变大变小快捷键及光标位置 修复缺陷
  • 736 MathJax 数学公式会抖动 改进功能
  • 735 官网地址及桌面端地址修改 文档相关
  • 730 数学公式细节处理 修复缺陷
  • 文档修改
    • 3.5.5 mermaidRender 移除 className 参数;添加 flowchartRender 方法

v3.4.7 / 2020-08-22

  • 717 在IR模式下插入特殊字符的bug 修复缺陷
  • 719 支持 ==Mark== 标记语法 引入特性
  • 711 调试工具栏图颜色不适配暗黑主题 改进功能
  • 718 脚注太长浮层渲染溢出 修复缺陷
  • 716 insertValue 无法插入html文本 改进功能
  • 714 preview 数学公式解析问题 修复缺陷
  • 709 操作栏按钮快速点击问题「ir」「wysiwyg」模式 改进功能
  • 706 光标非正常移动 修复缺陷
  • 676 请求:增加 Ant Design 主题 引入特性
  • 703 codeblock with backspace(IR) 修复缺陷
  • 708 linkToImgUrl 方法添加 token 改进功能
  • 701 复制到微信、知乎的改进 改进功能
  • 684 图片使用引用风格时的解析问题 修复缺陷
  • 698 图片上传解析问题 修复缺陷
  • 696 图片参考式解析问题 修复缺陷
  • 694 Fix expandmarker for node element 修复缺陷
  • 697 修复Lute类型的定义 开发重构
  • 687 Code 内 Enter/Backspace/Delete 可能不触发 input,并导致 Code 不及时渲染 改进功能
  • 685 options.icon 增加判断如果没有该属性则不引入js 改进功能
  • 689 存在软换行时,选中文本执行 Backspace,会导致内容异常 修复缺陷
  • 686 修正 Issue:Code 内 Delete 键可能删除过多内容 & Code 内 回车后光标位置异常 修复缺陷
  • 681 修正 ExpandMarker 规则,避免无法取消选中区域 修复缺陷
  • 653 [Feature Request] Hashtag 引入特性
  • 441 对标 Typora 反馈 改进功能
  • 669 links problem(Wysiwyg) 改进功能
  • 667 lists (SV) 修复缺陷
  • 446 改进复制粘贴链接体验 引入特性
  • 658 SV 模式打字机模式问题 修复缺陷
  • 655 SV 模式代码块开始标记符 info 后回车问题 修复缺陷
  • 656 SV 模式有序列表延续问题 修复缺陷
  • 654 SV 模式 Placeholder 显示问题 修复缺陷
  • 650 全选剪切及任务列表样式和点击问题改进 修复缺陷
  • 636 SV 模式 Setext 标题问题 修复缺陷
  • 647 即时渲染模式输入 ` 后会弹出 hint,此时执行 undo 后, hint 不消失 改进功能
  • 643 支持 YAML Front Matter 引入特性
  • 648 added ja_JP lang 改进功能
  • 644 粘贴多行代码时,避免代码段与当前行内容混淆在一起 改进功能
  • 639 列表嵌套代码块后输入中文的问题 修复缺陷
  • 641 清空 undo 栈后,第一次编辑操作无法进行记录 修复缺陷
  • 640 options.icon 无法进行切换 改进功能
  • 638 ir模式下图片编辑时很难触发md图片代码显示 改进功能
  • 文档修改
    • 3.4.2 options.hint.at => "options.hint.extend: IHintExtend[]"
    • 3.4.7 删除线快捷键修改为 ⌘-D
    • 3.4.8 添加 options.preview.markdown.mark 配置

v3.3.12 / 2020-07-28

  • 632 复制代码块解析优化 改进功能
  • 627 为 <kbd> 提供单独的渲染效果 改进功能
  • 621 粘贴数学公式时渲染报错 修复缺陷
  • 619 即时渲染下list删除(或剪切)的问题 修复缺陷
  • 633 SV 模式光标在列表标记符中的问题 修复缺陷
  • 623 修复即时渲染模式下复制光标位置错误和添加位置错误的问题 修复缺陷
  • 608 更新使用截图和演示动画 文档相关
  • 587 IR & SV 保留 Setext 风格标题 改进功能
  • 626 去除 Setext 标题解析开关 开发重构
  • 451 IR 模式保留 Emoji 原始输入 改进功能
  • 620 支持多套图标配置 引入特性
  • 578 添加 ant-design 及 Material 风格的图标 改进功能
  • 614 添加 linkToImgUrl 回调 引入特性
  • 617 options.preview.theme.current 需设置不使用主题样式 改进功能
  • 611 SV 模式粘贴图片拉取上传问题 修复缺陷
  • 616 fix: safari下选中文字添加标题文字会消失 修复缺陷
  • 615 即时渲染模式下在safari中光标位置跳动 修复缺陷
  • 596 blockquote insdie ordered list 改进功能
  • 605 块节点上下插入的优化 改进功能
  • 602 Three enters inside codeblock 修复缺陷
  • 600 codeblock inside footnote 修复缺陷
  • 590 Set value issue 修复缺陷
  • 594 Blockquote, ordered list and code block 改进功能
  • 593 IR 模式焦点离开时的渲染问题 改进功能
  • 604 站外图片抓取请求的 Content-Type 是 text/plain 改进功能
  • 597 one more backspace before delete lists 修复缺陷
  • 599 Ordered list(minor bug) 修复缺陷
  • 591 粘贴有可能不渲染本行内容 改进功能
  • 586 code block inside ordered list 修复缺陷
  • 585 [suggestion] when enter after code block inside blockqoute 改进功能
  • 584 Can not delete Code block 修复缺陷
  • 588 第五版 SV 模式 bug 记录 修复缺陷
  • 259 分屏预览模式列表项自动完成 引入特性
  • 580 重构 SV 模式 DOM 开发重构
  • 567 SV 模式块引用嵌套列表、代码块问题 修复缺陷
  • 563 SV 模式列表项下的代码块问题 修复缺陷
  • 579 样式调整 改进功能
  • 575 编辑器存在 form 中,情景菜单会出发提交事件 修复缺陷
  • 577 粘贴 XML 代码问题 修复缺陷
  • 573 style: 优化分隔符样式 改进功能
  • 572 fix: support aliyun oss 改进功能
  • 570 no placeholder after(SV) 修复缺陷
  • 569 预览区域工具栏配置 引入特性
  • 565 SV 模式支持缩进代码块 改进功能
  • 566 行级代码解析渲染 修复缺陷
  • 555 SV 模式段落块拆分问题 修复缺陷
  • 556 options.preview.markdown.setext 默认值修改为 true 改进功能
  • 554 SV 模式 Ctrl+u 代码块生成光标初始定位优化 改进功能
  • 558 [suggestion] shift+enter and end the lists 改进功能
  • 547 文件上传 format 第一个参数 files 为空数组 修复缺陷
  • 562 为上传添加 fieldName 选项 引入特性
  • 553 子任务列表回车问题 改进功能
  • 534 支持导出到知乎 引入特性
  • 552 blockquote 换行需逐层跳出 修复缺陷
  • 551 Tab and ctrl+shift+J (checkbox) 修复缺陷
  • 550 [Mermaid] State diagram rendering of multiple same node loops 修复缺陷
  • 549 粘贴 HTML 内容失败 修复缺陷
  • 548 添加文件上传多选/单选配置 引入特性
  • 545 SV 模式列表项下输入代码块问题 修复缺陷
  • 544 SV 模式有序列表缩进问题 修复缺陷
  • 543 SV 模式删除选择文本问题 修复缺陷
  • 541 SV 模式列表和引用快捷键问题 修复缺陷
  • 546 SV 模式丢失 headingID 修复缺陷
  • 539 即时渲染模式 setValue 后,没有及时渲染 Code 区域 修复缺陷
  • 536 文件上传检查后缀忽略大小写 改进功能
  • 537 添加 destroy 方法 引入特新
  • 532 中文输入过程中不应记录 UndoStack 修复缺陷
  • 519 扩展 markdown 主题 改进功能
  • 533 中文字符串中间插入 \ 字符导致乱码 修复缺陷
  • 528 wysiwyg & ir 列表中有两个代码块时的错误 修复缺陷
  • 531 移除 options.keymap 改进功能
  • 529 移除格式化按钮 改进功能
  • 526 字符串中带有 \ 符号时,从 \ 后面,但不是行尾 Backspace 删除字符到达 \ 时处理异常 修复缺陷
  • 517 Duplicate CSS(render.html) 修复缺陷
  • 522 从 WPS Office 复制文本,粘贴异常 修复缺陷
  • 524 no background-color change(dark mode-abcjs) 修复缺陷
  • 516 高亮自动填写功能未生效问题 修复缺陷
  • 355 新增 VditorSVDOM 渲染器 引入特新
  • 499 Chrome 浏览器,Up 方向键 光标位置移动异常 修复缺陷
  • 514 只读没有禁用场景菜单 修复缺陷
  • 501 反斜杠 \ 转义问题 改进功能
  • 508 软键盘 bug 修复缺陷
  • 504 解决编辑器中 esc 推出 hint 和 options.esc 冲突 修复缺陷
  • 500 wysiwyg 模式下打字数学公式会闪 改进功能
  • 498 修复 <summary>
    标签编辑问题 修复缺陷
  • 488 setValue 增加 clearStack 参数,添加 clearStack 方法 引入特新
  • 478 add tip to footnote 改进功能
  • 492 列表内含有代码块,修改列表中的文字时,代码块会闪 修复缺陷
  • 496 行级 HTML 空格问题 修复缺陷
  • 495 行级 HTML 退格问题 修复缺陷
  • 494 三种模式支持 list-style 样式 改进功能
  • 489 为 b3log.org/vditor/demo 添加源码 改进功能
  • 493 修复 XSS 过滤 修复缺陷
  • 486 getCursorPosition 针对空行会得到错误数据 修复缺陷
  • 485 IR 模式下,
    的编辑问题 修复缺陷
  • 484 添加 TED 视频支持 改进功能
  • 480 Mindmap 和 Echarts 内容为空时会报错 修复缺陷
  • 文档修改
    • options.markdown.listMarker 修改为 options.markdown.listStyle
    • setValue 方法添加 clearStack 参数;新增 clearStack 方法
    • 移除 options.keymap
    • 移除工具栏上的格式化功能
    • setContentTheme 参数修改为 contentTheme: string, path: string
    • options.preview.markdow.theme 修改为 options.preview.theme
    • setTheme 参数修改为 theme: "dark" | "classic", contentTheme?: string, codeTheme?: string, contentThemePath?: string
    • 移除 setSelection
    • 添加 destroy 方法
    • 添加 options.upload.multiple
    • 添加 options.upload.fieldName
    • options.preview.markdown.setext 默认值修改为 true
    • options.mode 默认值修改为 ir
    • 支持预览区域工具栏配置及自定义
    • 添加 options.upload.linkToImgCallback
    • 添加 options.icon
    • 移除 options.preview.markdown.setext

v3.2.12 / 2020-06-07

  • 475 从网页和其它 md 编辑器中复制的 iframe 和 视频标签 无法粘贴到 Vditor 修复缺陷
  • 455 HTML 实体在切换编辑模式时的转义问题 修复缺陷
  • 466 Tab is not working inside Quote(safari) 修复缺陷
  • 467 为表格添加行列增删按钮 引入特性
  • 472 Add details preview in ir mode 引入特性
  • 471 移动端子工具栏箭头没对齐 修复缺陷
  • 473 different between press "Ctrl+b" and click "B" icon. 修复缺陷
  • 463 在行内代码中进行粘贴时光标位置不对及报错处理 修复缺陷
  • 462 ctrl+z ir 模式没有渲染代码块 修复缺陷
  • 456 根据逗号/制表符生成表格 引入特性
  • 453 bold 位于子菜单中无作用 修复缺陷
  • 449 table(IR mode) 修复缺陷
  • 443 快捷键中文版 文档相关
  • 438 one empty line when ctrl+shift+h 改进功能
  • 439 not working ctrl+shift+x at links 修复缺陷
  • 444 delete tables when cells are empty 改进功能
  • 447 run vditor.insertValue('abc') throw error 修复缺陷
  • 435 task list 合并会添加 p 标签 修复缺陷
  • 432 代码块中输入 &pars 解析问题 修复缺陷
  • 433 language position(code block, wysiwyg mode) 修复缺陷
  • 431 链接、图片相对路径支持 引入特性
  • 430 cursor location when press ctrl+b after checkbox 修复缺陷
  • 429 localStorage被禁用时,报错 修复缺陷
  • 427 headings 大小调整 改进功能
  • 422 inserted one line before table block(windows/Firefox) 修复缺陷
  • 425 支持 flac 音频格式解析 改进功能
  • 409 codeblock(mac safari) 修复缺陷
  • 407 cursor moving at tables(safari & firefox) 修复缺陷
  • 421 添加 bilibili 视频网站解析 改进功能
  • 420 缓存时可以提供一个回调吗,我想同步到服务器上 改进功能
  • 419 outline after update at smartphone 改进功能
  • 418 点击侧边空白,光标会挪到尾部 修复缺陷
  • 415 using local JS file 修复缺陷
  • 406 相同标题内容 ID 生成问题 修复缺陷
  • 412 预览界面大纲无法定位 修复缺陷
  • 411 复制到微信公众号后代码块背景丢失 修复缺陷
  • 410 not delete inline code(firfox) 修复缺陷
  • 405 translated mindmap into Korean 文档相关
  • 402 setValue 后 outline 没有渲染 修复缺陷
  • 400 Heading(wysiwyg) windows firefox 修复缺陷
  • 401 render demo(mobile) 改进功能
  • 397 link(ctrl+k) at wysiwyg mode 改进功能
  • 399 When click empty editor pane 修复缺陷
  • 398 unnecessary line before ctrl+M(tables) at wysiwyg mode 修复缺陷
  • 395 Demo for reading external markdown text 改进功能
  • 386 [wysiwyg] 在代码块尾部按 arrowdown 插入空行 改进功能
  • 396 click empty, append empty block 改进功能
  • 385 image title at wysiwyg 修复缺陷
  • 390 no data-marker(editing mode) 修复缺陷
  • 392 anchor option 改进功能
  • 389 marker option at preview 改进功能
  • 388 changed some korean i18n and demo text 文档相关
  • 383 移动端移除侧边提示 改进功能
  • 384 ctrl_+, ctrl_- at heading(wysiwyg) 修复缺陷
  • 321 移动端如何调用toolbar的方法 咨询提问
  • 382 sometimes the keyboard is hidden at smartphone 修复缺陷
  • 378 hover style in Mobile 修复缺陷
  • 379 Not sticky at IOS 修复缺陷
  • 381 光标在内联数学公式中无法向下移动 修复缺陷
  • 380 修复 XSS 漏洞 修复缺陷
  • 4 添加支持思维导图的功能 引入特性
  • 376 为 markdown 添加 sanitize 设置 引入特性
  • 375 upload 配置项添加额外请求参数 引入特性
  • 372 配置lineNumber为true后,代码复制按钮不出现 修复缺陷
  • 373 toolbar 缺失 edit-mode 报错 修复缺陷
  • 371 列表项上下移动 改进功能
  • 367 cursor up and down inside Table 改进功能
  • 368 Copy Paste multiline inside table 修复缺陷
  • 369 when paste, code can not highlight 修复缺陷
  • 370 Copy Paste multiline at markdown mode 改进功能
  • 文档修改
    • options.upload 添加 extraData 配置
    • 添加静态方法 mindmapRender
    • IMarkdownConfig 添加 sanitize, listMarker, linkBase 配置
    • IPreviewOptions.anchor 从 boolean 类型修改为 number 类型
    • 示例代码地址修改:static-preview.html => preview.html,static.html => b3log.org/vditor/demo/render.html
    • 添加 Vditor 官方首页
    • 添加缓存回调 options.cache.after(markdown:string)

v3.1.23 / 2020-05-05

  • 365 Emoji 6️⃣ 修复缺陷
  • 361 typing korean char. after end of code block at IR 修复缺陷
  • 358 cursor up and down at IR mode 修复缺陷
  • 363 Copy Paste (HTML2Markdown) issue 修复缺陷
  • 360 typing fast(code block) at IR 修复缺陷
  • 364 复制粘贴过滤掉 svg 标签 修复缺陷
  • 362 Export HeadingID function to JavaScript 改进功能
  • 359 heading anchor when copy & paste 修复缺陷
  • 357 预览区透明 修复缺陷
  • 349 传统中文排版“段落开头空两格” 引入特性
  • 351 MathJax plugin 修复缺陷
  • 353 list demo at static-preview.html 文档相关
  • 350 自定义渲染的方法 引入特性
  • 345 支持预览区域粘贴到公众号 引入特性
  • 324 支持多款主题预览 引入特性
  • 325 导出功能 引入特性
  • 344 outline 渲染 bug 修复缺陷
  • 343 添加初始化大纲展现参数 改进功能
  • 341 Can not delete the image at IR mode 修复缺陷
  • 339 添加静态方法 setCodeTheme, setContentTheme 改进功能
  • 316 支持多端预览 引入特性
  • 337 insertValue 光标错误 修复缺陷
  • 333 重新设计帮助菜单 改进功能
  • 334 重新设计关于菜单 改进功能
  • 335 块引用嵌套列表跳出问题 修复缺陷
  • 332 Not working 3rd menu at smartphone 修复缺陷
  • 329 preview方法可选参数options.transform提示undefined错误的问题 修复缺陷
  • 328 sv 模式高度错误 修复缺陷
  • 326 为工具栏添加2级和3级菜单 改进功能
  • 323 setTheme 需支持代码块风格的切换 改进功能
  • 320 代码区点击复制代码时自动去掉行号 修复缺陷
  • 314 添加图片懒加载设置 引入特性
  • 319 add ctrl+shift+e button to toolbar for smartphone 改进功能
  • 312 支持块级元素上下移动 引入特性
  • 318 工具栏和编辑器区域对齐 改进功能
  • 313 html 页面 点击禁用button 引起回调 修复缺陷
  • 311 preview demo 改进功能
  • 94 获取大纲内容及点击定位功能 引入特性
  • 309 添加 options.upload.setHeaders 引入特性
  • 306 IR mode ATX heading change 改进功能
  • 303 Inline HTML parsing issue 修复缺陷
  • 304 为 toolbar 添加是否 pin 的配置 引入特性
  • 296 打字机模式下字数统计标签不可见 改进功能
  • 302 Editing Heading(IR mode) 修复缺陷
  • 301 Add README in English 文档相关
  • 299 表格解析异常 修复缺陷
  • 226 Vulnerable to Self-XSS 修复缺陷
  • 297 纯文本字数统计 引入特性
  • 298 ✨ 允许开启 counter 而不设置限值 & README 优化 引入特性
  • 295 全屏模式下打字机行为异常 修复缺陷
  • 294 🐛 计算全屏 typewriterMode 位置 修复缺陷
  • 286 add indent & outdent button 引入特性
  • 291 🎨 改进 Counter 修复缺陷
  • 285 shift+tab is not working at lists 修复缺陷
  • 292 🐛 全屏模式文末空白 修复缺陷
  • 293 iOS Safari 快捷键显示为 Windows 版本 修复缺陷
  • 290 🎨 add minHeight 改进功能
  • 71 优化移动端体验 改进功能
  • 283 添加 SetSetext 配置 引入特性
  • 278 IR 细节修改 修复缺陷
  • 文档更新
    • 添加 options.minHeight, options.outline
    • options.counter 修改为 counter?: { enable: boolean; max?: number; type: "markdown" | "text"; }
    • counter 位置移动到 toolbar 上
    • options.hideToolbar 修改为 toolbarConfig: { hide?: boolean, pin?: boolean }
    • 添加 options.upload.setHeaders: { [key: string]: string }
    • 添加静态方法 outlineRender, setCodeTheme, setContentTheme
    • 添加 lazyLoadImageRender 静态方法
    • insert line 默认快捷键由 ⌘-⇧-D 修改为 ⌘-⇧-H,添加下移 ⌘-⇧-D、上移 ⌘-⇧-U 快捷键,移除上传、预览、编辑器模式切换快捷键
    • options.toolbar 添加 toolbar 参数,最多可进行 3 级菜单
    • options.toolbar 添加 outdent,indent, outline, insert-after, insert-before, more,code-theme, content-theme, export
    • setTheme 方法添加 conentTheme, codeTheme 参数
    • setPreviewMode 方法移除 preview
    • options.previewmaxWidth 默认值改为 800, mode 移除 preview 选项,markdonw 添加 themesetext 配置
    • IPreviewOptions 添加 afterlazyLoadImage, markdown.theme, renderers, markdown.paragraphBeginningSpace,移除 theme

v3.0.12 / 2020-04-06

  • 276 当设置编辑器宽度后,模式切换导致样式错误 修复缺陷
  • 266 linkToImgUrl 图片重复上传 修复缺陷
  • 208 hr in Firefox 修复缺陷
  • 274 Toc demo at Preview 文档相关
  • 269 分屏预览支持 list-style-type CSS 引入特性
  • 265 ir 模式中 toc, 链接引用,脚注 引入特性
  • 271 options.toolbar支持自定义绑定class 引入特性
  • 267 设置 codeBlockPreview false, esc 后代码块消失 修复缺陷
  • 270 支持捂脸表情 改进功能
  • 264 table at IR mdoe 修复缺陷
  • 253 所见即所得复制粘贴问题 修复缺陷
  • 261 When link with "" and ctrl+k 修复缺陷
  • 262 ctrl+m... delete, and enter 修复缺陷
  • 260 Not working typewritermode at code block 修复缺陷
  • 250 支持配置是否开启 wysiwyg 模式下代码块渲染 引入特性
  • 258 wysiwyg a 元素子导航居右被挤变形 修复缺陷
  • 212 Sync XMLHttpRequest Deprecation message 改进功能
  • 251 所见即所得模式下,光标后图片工具层会遮挡文字 改进功能
  • 249 代码块语言选择优化 改进功能
  • 211 Heading when backspace (Windows Firefox) 修复缺陷
  • 239 be converted after spaces in FF 修复缺陷
  • 240 multiple markdown at one line 修复缺陷
  • 241 When editing the heading, not converted using the cursor key 修复缺陷
  • 242 combined lists "+" and "-" 修复缺陷
  • 243 can not delete the table with "backspace" 修复缺陷
  • 246 报错index.min.js:27 修复缺陷
  • 248 enter after heading 修复缺陷
  • 235 修复父元素自定义行高时工具栏垂直不居中 修复缺陷
  • 210 inks with korean character(windows chrome & firefox) 修复缺陷
  • 231 支持直接传入元素进行初始化 引入特性
  • 232 【IR&WYSIWYG】围栏代码块 info 部分自动完成 引入特性
  • 230 切换 IR 模式后依然展示工具栏 改进功能
  • 27 支持类似 Typora 的及时渲染模式 引入特性
  • 229 初始化时不应该自动获取焦点 改进功能
  • 228 menu misplaced when vditor is not first child 改进功能
  • 227 add jsdoc 引入特性
  • 225 publish type declaration file 引入特性
  • 224 md2html 方法报错 修复缺陷
  • 223 下列 a 前输入 ` b 会消失,且返回无光标 修复缺陷
  • 222 The cursor does not enter when added in the middle of the list 修复缺陷
  • 221 输入复选框时出现乱码 修复缺陷
  • 220 软换行前进行删除,将会变为 p 修复缺陷
  • 文档更新
    • 修改 options.mode 可选值为:'sv', 'wysiwyg', 'ir'
    • toolbar 中的 wysiwyg 修改为 'edit-mode'
    • id 可以传入 element
    • cache 修改为 {enable: boolean, id: string}
    • md2html 改为异步
    • 添加 options.preview.markdown.codeBlockPreview
    • options.toolbar 添加 className
    • 添加 getCurrentMode 方法

v2.3.0 / 2020-03-12

  • 218 所见即所得模式下,insertValue渲染*和~的时候似乎不是很正确 修复缺陷
  • 217 ToC 添加悬浮菜单及 bug 修复 修复缺陷
  • 216 subtoolbar 向下溢出 修复缺陷
  • 215 lists when last enter 修复缺陷

v2.2.19 / 2020-03-10

  • 214 wysiwyg heading id 引入特性
  • 206 combined blockquote and lists (windows firefox) 修复缺陷
  • 151 支持隐藏编辑器工具栏 引入特性
  • 121 所见即所得模式支持 [ToC] 引入特性
  • 119 所见即所得模式支持脚注 引入特性
  • 55 所见即所得模式支持链接引用定义引入特性
  • 209 支持 Graphviz 引入特性
  • 207 heading at first time(windows firefox) 修复缺陷
  • 205 not working typewrite mode (windows firefox) 修复缺陷
  • 204 Empty Enter in Firefox 修复缺陷
  • 203 when cache:false, use cache 修复缺陷
  • 199 heading at first time(windows firefox) 修复缺陷
  • 202 第一次进入代码块后 ctrl+a 无作用 修复缺陷
  • 201 table (windows firefox) 修复缺陷
  • 200 copy in wysiwyg bug 修复缺陷
  • 197 禁用编辑器后,工具栏未被禁用 修复缺陷
  • 196 Headings command+alt+1 at safari(Mac) 修复缺陷
  • 195 added korean i18n 引入特性
  • 194 Lists (Firefox Compatibility) 修复缺陷
  • 193 Links (Firefox Compatibility) 修复缺陷
  • 192 Heading (Firefox Compatibility) 修复缺陷
  • 191 backspace problem(Firefox Compatibility) 修复缺陷
  • 188 korean character composition at mac chrome 改进功能
  • 187 ctrl+b, ctrl+i 修复缺陷
  • 185 Safari 兼容性修复 改进功能
  • 137 [suggestion] ctrl+g behavior 改进功能
  • 182 支持 Setext 标题 改进功能
  • 181 GFM Example52,54 - Setext 支持 改进功能
  • 180 GFM Example 31 修复缺陷
  • 179 GFM Example 19, 40, 57 修复缺陷
  • 178 链接文本修改方式改进 改进功能
  • 177 can not input alt+ctrl+[number] at first time 修复缺陷
  • 176 cList+blockquote 修复缺陷
  • 176 cList+blockquote 修复缺陷
  • 173 lists start with 1) and enter error 修复缺陷
  • 172 space between inline codes 修复缺陷
  • 171 space between inline codes 修复缺陷
  • 170 ctrl+b with shift+enter 修复缺陷
  • 169 五线谱渐强减弱无法显示 修复缺陷
  • 168 insertValue 图片解析问题 修复缺陷
  • 166 加粗、强调、删除线合并 修复缺陷
  • 165 wysiwyg 内容太长时辅助工具条可以悬浮在顶部 改进功能
  • 163 链接结尾回车不应该复制到下一行 修复缺陷
  • 162 中文标题删除 修复缺陷
  • 158 tab key is not working when no text 修复缺陷
  • 156 li 缩进后没有渲染代码块 修复缺陷
  • 155 blockquote 插入光标错误 修复缺陷
  • 154 the cursor is disapeared after tab pressed at editor mode 修复缺陷
  • 153 Heading toolbar is not working 修复缺陷
  • 150 [suggestion] deleting heading with backspace 改进功能
  • 149 [suggestion] UI Consistency 改进功能
  • 148 任务列表退格删除问题 修复缺陷
  • 147 [suggestion] ctrl+l, ctrl+o, ctrl + j add insert line 改进功能
  • 146 [suggestion] ctrl+k 改进功能
  • 145 [suggestion] ctrl+shift+j toggle checked 改进功能
  • 144 ctrl+shift+. 插入 blockquote 改进功能
  • 143 [suggestion] ctrl+m 改进功能
  • 142 lists when indented at wysiwyg mode 修复缺陷
  • 141 toolbar 添加箭头,默认表情修改 改进功能
  • 140 *** after shift+enter 修复缺陷
  • 139 toggle after ===, enter 修复缺陷
  • 138 ctrl+b, ctrl+i, enter with no text 修复缺陷
  • 136 ⌘ and Ctrl is different at MacOS 修复缺陷
  • 135 can not delete the first char. at first field of links 改进功能
  • 134 支持 linkToImgUrl 引入特性
  • 133 MathJax 渲染无法修改 修复缺陷
  • 132 添加 md 配置项 引入特性
  • 131 代码块下输入中文 bug 修复缺陷
  • 130 任务列表跳出 修复缺陷
  • 129 分隔线规则问题 修复缺陷
  • 128 在分隔线之间输入的问题 修复缺陷
  • 127 more keyboard shortcut after ctrl+h 改进功能
  • 125 ctrl+l, ** 修复缺陷
  • 文档更新
    • 移除 IPreviewOptions 中的 className
    • IPreviewOptions 添加 theme 选项
    • insertValue 添加 render 参数,以便配置是否需要进行 Markdown 处理
    • 将异步方法变为同步
    • 引用快捷键修改为 <kbd>Ctrl-;</kbd>
    • 移除 index-preview.html, index-preview.js 文件
    • 添加 graphvizRender 方法
    • 添加 option.preview.markdown.toc/footnotes 配置选项
    • 添加 option.hideToolbar 配置选项
    • options.preview.markdown.autoSpace/chinesePunct/fixTermTypo 默认值设置为 false

v2.1.15 / 2020-02-09

  • 123 加粗、强调前导空格问题 修复缺陷
  • 122 在 p 中插入代码块 bug 修复缺陷
  • 118 Firefox no cursor when ctrl+b pressed 修复缺陷
  • 117 cursor moving problem near inline code 修复缺陷
  • 115 codeblock difference between ` and ctrl+u 修复缺陷
  • 114 有序列表合并问题 修复缺陷
  • 113 分隔线、标题在换行时处理 改进功能
  • 112 列表项加代码块问题 修复缺陷
  • 111 ctrl+b, ctrl+i, ctrl+s not working at starting and combining 修复缺陷
  • 109 tab key at list 改进功能
  • 108 行级代码问题 修复缺陷
  • 107 删除线解析问题 修复缺陷
  • 105 Link(ctrl+k) 改进功能
  • 104 image tag at wysiwyg mode 修复缺陷
  • 103 cell alignment 修复缺陷
  • 102 minus number at table(not important) 修复缺陷
  • 101 提供 setTheme(theme: "dark" | "classic") 方法 引入特性
  • 100 inline-math 修复缺陷
  • 99 a 中斜体/粗体时 toolbar 不显示 修复缺陷
  • 96 所见即所得模式下的任务列表Bug 修复缺陷
  • 95 setVaule 和 初始化时,不触发 input 事件 改进功能
  • 93 Headers with = and - 修复缺陷
  • 92 空行回车可以逐层跳出引用 改进功能
  • 89 数学公式支持 MathJax 引入特性
  • 88 Bold 修复缺陷
  • 87 inside cell 修复缺陷
  • 85 ctrl-z & 重写缩进 修复缺陷
  • 84 光标在 emoji 后的空格后无法对其进行删除 修复缺陷
  • 83 所见即所得从菜单插入链接用对话框 改进功能
  • 82 文字拖动 修复缺陷
  • 80 第一次 ctrl+z 无法设置光标 修复缺陷
  • 79 链接所见即所得渲染问题 改进功能
  • 78 列表换行处理问题 修复缺陷
  • 77 上传文件处理 改进功能
  • 75 表格输入自动完成优化 改进功能
  • 74 anchor 中移除 . 改进功能
  • 73 添加链接卡片样式 引入特性
  • 76 菜单选择图片类 Emoji 无法直接显示 修复缺陷
  • 70 所见即所得模式下Table按钮重复点击会导致table嵌套,另外希望标题支持快捷键调整大小 引入特性
  • 69 渲染块按 esc 可以进行退出代码块进行预览 改进功能
  • 68 列表标记符自动优化 改进功能
  • 67 code、inline-math、inline-html 优化 改进功能
  • 66 表格优化 改进功能
  • 65 任务列表回车、删除优化 改进功能
  • 60 行内代码删除错误 修复缺陷
  • 文档更新
    • 添加 options.upload.file 方法
    • options.preview 修改,支持 MathJax 配置
    • 移除 mathRenderByLute 方法
    • 添加 setTheme 方法,classic.scss -> index.scss

v2.0.15 / 2020-01-11

  • 64 所见即所得模式代码块 % 问题 修复缺陷
  • 62 任务列表光标位置 修复缺陷
  • 59 任务列表 bug 修复缺陷
  • 58 表格内换行处理问题 修复缺陷
  • 57 * ab 后换行错误 修复缺陷
  • 56 图片 alt 属性不应该带光标位置 修复缺陷
  • 54 代码块优化 引入特性
  • 53 图片 title 丢失问题 修复缺陷
  • 52 下划线强调标记符失效 修复缺陷
  • 51 引用多层嵌套无法一次性回到最外层 引入特性
  • 50 标题前的段落结尾为 \n 时,标题的选中和取消会关联到 \n 修复缺陷
  • 48 H6 回车 解析问题 修复缺陷
  • 47
    改进 改进功能
  • 46 add row 添加快捷键 引入特性
  • 45 为列表 indent 和 outdent 添加快捷键 引入特性
  • 44 Unorderlist + Link 会缩进 修复缺陷
  • 43 When copy & paste the link 修复缺陷
  • 42 在内联数学公式前进行删除操作会删除公式 修复缺陷
  • 41 wysiwyg 切换后,列表紧凑模式错误 修复缺陷
  • 40 列表 marker 错误 修复缺陷
  • 39 所见即所得模式录音bug 修复缺陷
  • 38 有序列表顺序错误 修复缺陷
  • 37 为 wysiwyg 代码块添加快捷键 引入特性
  • 36 two 'enter' at code block 修复缺陷
  • 35 no cursor after tab 修复缺陷
  • 33 插入链接优化 improvement
  • 32 反斜杠转义处理 修复缺陷
  • 31 merge list bug
  • 30 添加 option.value enhancement
  • 29 添加 debugger,为开发时显示日志 enhancement
  • 28 wysiwyg 时代码块、流程图等直接进行渲染,不展示源码 enhancement
  • 26 wysiwyg 性能优化 enhancement
  • 25 wysiwyg 表格添加居中居左居右 enhancement
  • 24 wysiwyg 块工具栏添加文字说明 enhancement
  • 23 When code copied and pasted.... bug
  • 2 所见即所得 enhancement
  • 文档更新
    • 添加 option.mode?: "wysiwyg-show" | "markdown-show" | "wysiwyg-only" | "markdown-only" 参数
    • 添加 options.debugger
    • 添加 options.value

v1.10.11 / 2019-12-12

  • 20 报错:Lute is not defined bug
  • 19 CDN 切换优化 enhancement
  • 18 菜单栏上的按钮会触发 form 提交事件 bug
  • 17 tip 会遮挡住输入框的上部 enhancement
  • 16 复制代码按钮错误 bug
  • 14 Vditor.preview不能渲染 bug
  • 13 编辑到最底部时,回车不会滚动到最下面 bug
  • 12 代码渲染问题,抛出KaTeX的错误信息。 question
  • 11 添加 CDN 配置 enhancement
  • 10 block code 拷贝后变为 inline code bug
  • 9 没有预览界面时依旧出现预览耗时提示 bug
  • 1 上传时支持 xhr.setRequestHeader 设置 enhancement
  • 172 上传改进 enhancement
  • 171 编辑器在生成 preview 之前,添加处理函数 feature
  • 170 新增内联数学公式开关 enhancement
  • 168 highlightRender报错 invalid
  • 167 withCredentials(跨域传递 cookie) feature
  • 166 typewriterMode 为 false 时,preview 区域不会同步滚动 bug
  • 文档更新
    • public static mermaidRender(element: HTMLElement, className?: string)
    • hotkey 和 setSelection 方法不支持 wysiwyg
    • setValue 参数改为 markdown
    • 添加 options.upload.headers
    • 为 options, IPreviewOptions, highlightRender, mathRenderByLute, mathRender, abcRender, chartRender, mermaidRender 添加 cdn

v1.9.7 / 2019-11-11

  • 165 1个数学公式支持有问题 question
  • 164 当文本内容过多时,卡顿的问题 duplicate
  • 163 为标题添加锚点 feature
  • 162 没有使用后端渲染时,编辑器卡顿 bug
  • 160 添加 speechRender 方法 feature
  • 159 Vditor.preview方法在页面中渲染textarea内markdown代码无效 invalid
  • 157 初始化后添加回调方法 options.after feature
  • 156 语法高亮添加行号配置 options.preview.hljs.lineNumber feature
  • 155 preview 方法支持多次渲染 enhancement
  • 154 流程图写代码对新手来说太难了建议 question
  • 153 Markdown 渲染空格问题 bug
  • 152 直接调用 getHTML 抛错 bug
  • 151 Xcode 复制粘贴后换行增加 bug
  • 150 加粗、斜体、删除线等功能按钮无法对选中的内容进行修改 bug

v1.8.16 / 2019-10-08

  • 144 编辑器内容为空时,placeholder 不显示 bug
  • 143 为编辑器底部空白添加配置项 enhancement
  • 142 setPreviewMode 方法失效 bug
  • 141 Safari 中代码块换行 bug
  • 140 Scroll to the cursor position after pasting bug
  • 139 The cursor position is incorrect when ctrl+z is pressed bug
  • 138 markdown 中长表格支持滚动预览 enhancement
  • 137 整理 highlight.js 和 chroma,以便统一 preview.hljs.style 的设置 enhancement
  • 136 添加 AST 展示 feature
  • 135 数学公式错误打印到预览区域 feature
  • 134 数学公式问题 question
  • 133 Inline Katex question
  • 132 emoji and table question
  • 131 上传失败时,内容没有清空 bug
  • 130 代码部分支持长代码拖动预览 enhancement
  • 128 customEmoji 在代码块中不应该被转换 enhancement
  • 126 /src/ts/preview/index.ts 29 行报错 bug
  • 125 Image 添加最大宽度 feature
  • 124 菜单栏按钮在 iPhone 中无法正常工作 bug
  • 123 添加 format 功能 feature
  • 122 添加 emojiRender 和 highlightRender 接口 feature
  • 120 markdown-it 切换为 lute enhancement
  • 119 提供服务端返回数据格式化接口 feature
  • 117 支持站点、视频、音频解析 feature
  • 112 :xxx: 需根据对应的 emoji 渲染为 emoji,而非 :xxx: feature

v1.7.25 / 2019-08-29

  • 116 Vditor 解析&emsp;等空格相关的内容解析完后,光标会回到头部 question
  • 115 测试 issues 变 0 invalid
  • 114 封装 Preview enhancement
  • 113 emoji 整理 enhancement
  • 111 emoji problem bug
  • 110 支持 Word 粘贴 feature
  • 109 移除 option.editorName 变量 bug
  • 108 hint.emoji 支持自定义 feature
  • 107 custom emoji "trollface" & "huaji" is not working at demo mode bug
  • 106 添加 Chroma 样式 feature
  • 105 firefox 兼容性 bug
  • 104 vs code 粘贴代码问题 bug
  • 103 光标位置应在正中间 feature
  • 102 安装依赖后自动删除已有的依赖 question
  • 101 video 标签移动端溢出 enhancement
  • 100 esc/选中工具栏中的表情或标题后输入框中的 at 及 emoji 的提示应消失 bug
  • 98 支持 shift + tab feature
  • 99 esc/选中工具栏中的表情或标题后输入框中的 at 及 emoji 的提示应消失 bug
  • 97 添加五线谱支持 feature
  • 96 工具栏没有配置 preview, both, redo, undo 在其他操作时会报错 bug
  • 95 1.6.x 细节 bug 修改 bug
  • 94 数学公示支持源码查看 feature
  • 93 新增预览模式设置接口 feature
  • 92 现在toolbar里面有演示的按钮吗 question
  • 91 No default jsDelivr CDN file set development
  • 90 编辑区域底部留白且光标所在位置应在可视区域内 feature
  • 89 自定义 toolbar 事件、添加按钮到 toolbar 上 feature
  • 88 resize 优化 enhancement
  • 87 获取文本时对 HTML 实体进行转换 bug
  • 86 代码分包优化 feature
  • 85 改善提示且提供提示接口 feature
  • 84 支持全屏预览 feature

v1.6.12 / 2019-08-04

  • 83 升级 markdown-it dependencies
  • 82 textarea 修改为带 contenteditable 属性的 div development
  • 81 toolbar.hotkey 添加 shift 可选配置 feature
  • 80 移除第三方依赖库版本号 enhancement
  • 79 重置内容中的 ul 样式 enhancement
  • 78 npx webpack出现错误 bug
  • 77 发布一个bower版本 development
  • 76 Bump lodash from 4.17.11 to 4.17.14 dependencies
  • 75 增强 emoji 配置的容错性及 UI 细节改进 enhancement
  • 74 上传错误处理文案与性能提示冲突 bug
  • 68 1 high severity vulnerability: vditor > mermaid development
  • 61 支持简单的快捷键 feature

v1.5.12 / 2019-07-09

  • 73 iframe 添加 max-width enhancement
  • 72 当编辑器父元素为 position: fix 时 hit 计算错误 bug
  • 71 new 之前应保证该 id 元素在 html 中已经渲染 question
  • 70 建议删除CDN和代码中的Dynamic Import invalid
  • 69 Assets 文件夹介绍 question
  • 67 长文本粘贴性能改进 enhancement
  • 66 上传按钮问题 bug
  • 65 options.upload.linkToImgUrl 配置错误提示 enhancement
  • 64 表情太多需要滚动条 enhancement
  • 63 粘贴时 html2md 和 md2html 保持一致 bug
  • 62 升级 highlight.js 到 9.15.8 development
  • 58 添加图表支持 feature

v1.4.7 / 2019-06-06

  • 60 type 完善 development
  • 59 Bump fstream from 1.0.11 to 1.0.12 dependencies
  • 57 ios移动端兼容 question
  • 56 展现样式完善 enhancement
  • 55 如何设置图片上传的路径 question
  • 54 在使用Vditor时,如何做到支持粘贴图片的? question
  • 53 升级 katex 0.10.1 => 0.10.2 enhancement
  • 52 图片 emoji 对不齐 enhancement
  • 51 剪切板中 text/html 大于 106496 时强制使用 text/plain enhancement
  • 50 鼠标移动到 emoji 上添加变大及提示效果 enhancement
  • 49 添加 md2html 接口 feature
  • 48 修改 emoji 中的 hash 值 bug

v1.3.5 / 2019-05-04

  • 47 Upgrade tar to version 4.4.2 or later development
  • 46 注脚解析的讨论 question
  • 45 上传图片进行容错处理 enhancement
  • 44 toolbar将emoji插件去掉之后报错 bug
  • 43 支持字体样式 question
  • 42 支持 CDN 快速切换 feature
  • 41 jsDelivr 证书过期解决方案 question
  • 40 运行命令合并 development
  • 39 拷贝行内代码,外围空格消失 enhancement

v1.2.10 / 2019-04-04

  • 38 firefox 中代码块点击复制会回到顶部 bug
  • 37 chrome 地址栏链接复制处理 enhancement
  • 36 和 markdown-http 保持一致,开启软换行 enhancement
  • 35 添加 handshake 🤝 emoji enhancement
  • 34 适配代码高亮黑色系列主题 enhancement
  • 33 添加 options.upload.handler 接口 feature
  • 32 添加 options.upload.validate 接口 feature

v1.1.11 / 2019-03-21

  • 31 添加 vditor-reset class feature
  • 30 支持 task list feature
  • 29 代码块添加复制 feature
  • 28 编辑器中按下Ctrl+s 会出现字符 question
  • 27 支持时序图渲染和甘特图 feature
  • 26 支持流程图渲染 feature
  • 25 支持数学公式渲染 feature
  • 24 markdown 不支持多行公式块 enhancement

v1.0.0 / 2019-03-13

  • 15 添加测试用例 development
  • 9 支持前端预览 md enhancement

v0.4.0 / 2019-03-06

  • 23 支持 tab feature
  • 22 全屏默认快捷键修改 enhancement
  • 21 API 改进 feature
  • 20 添加 doge 表情 enhancement

v0.2.5 / 2019-02-19

  • 19 emoji 样式修改 theme
  • 18 使用 cdn.jsdelivr.net development
  • 17 添加 emojiPath 选项 enhancement
  • 16 期待添加滑稽表情 enhancement
  • 14 添加 lint development
  • 13 any 修改 development

v0.1.8 / 2019-02-14

  • 12 全屏后,preview tip 位置错误 bug
  • 11 npm 中加入源码,以便有需要的可直接进行打包优化 enhancement
  • 10 录音支持 Safari enhancement
  • 8 工具栏浮动问题 bug
  • 7 添加上传文件名安全过滤接口 enhancement
  • 6 添加窗口 resize 回调 enhancement
  • 5 上传改进 enhancement
  • 4 api 拼写错误 bug
  • 3 hint 添加高亮 enhancement

v0.1.7 / 2019-02-11

  • 第一次公开发布