开发文档Umo Editor NextMarkdown 增强

Markdown 增强

Umo Editor Next 自 v10.0 起,对 Markdown 支持进行了系统性的增强,主要包括:

  • 支持将文档内容直接设置为 Markdown,或在编辑器中直接插入 Markdown,并能够被正确解析与渲染;
  • 提供设置文档内容为 Markdown、以及在指定位置插入 Markdown 的相关方法;
  • 支持 Markdown 的导入与导出,可从本地导入 Markdown 文档,或将当前文档内容导出为 Markdown 文件;
  • 采用更快、更现代、更轻量的 Marked 作为 Markdown 渲染引擎,并支持自定义 Marked 的渲染器与解析行为;
  • 对外暴露内部的 MarkdownManager 实例,可用于 Markdown 与文档内容之间的互转,以及自定义 Marked 解析逻辑;
  • 支持在编辑器扩展中集成并扩展 Markdown 能力。
⚠️

注意: 自 v10.0 起,Umo Editor Next 已移除 import.markdown 配置,统一改为通过 document.markedOptions 进行配置;同时移除了 getJSONByMarkdown 方法,改为使用 getMarkdown 获取 Markdown 内容。

默认配置

const options = {
  document: {
    contentType: undefined,
    markedOptions: {},
  },
}

配置说明

document.contentType

说明:文档内容类型。如果初始文档内容(即 document.content)为 Markdown,则需要将该值设置为 markdown,以确保 Markdown 能被正确识别与解析。 对于其他类型的 document.content,该项可以省略,编辑器会自动进行识别。

类型String

可选值jsonhtmlmarkdown

document.markedOptions

说明Marked 的实例及其配置项。

类型Object

  • document.markedOptions.instance:Marked 实例。可传入外部创建的 Marked 实例,以接管内部的 Marked 实例,从而实现更灵活、更高级的自定义能力。
  • document.markedOptions.xxx:Marked 的配置项,详见官方文档: https://marked.js.org/using_advanced#options

方法列表

setMarkdown

说明:将整个文档内容设置为 Markdown。Umo Editor Next 会自动识别并将 Markdown 转换为内部文档结构。

参数

  • String:要设置的 Markdown 内容。

返回值Boolean | Error

insertMarkdown

说明:在当前光标位置插入 Markdown 内容,编辑器会自动解析并渲染。

参数

  • markdown:要插入的 Markdown 内容;
  • optionseditor.insertContent 的相关配置,详见 insertContent 方法

返回值Boolean | Error

insertMarkdownAt

说明:在指定位置或范围内插入 Markdown 内容,编辑器会自动解析并渲染。

参数

  • position:插入位置或范围,例如 10,或 { from: 12, to: 16 }
  • markdown:要插入的 Markdown 内容;
  • optionseditor.insertContent 的相关配置,详见 insertContent 方法

返回值Boolean | Error

getMarkdown

说明:获取当前文档内容对应的 Markdown 字符串。

参数:无。

返回值String | Error

getMarkdownManager

说明:获取编辑器内部的 MarkdownManager 实例,通过此实例你可以直接访问 Markdown 与文档内容之间的互转方法,以及自定义 Marked 解析逻辑等。

参数:无。

返回值Object

示例

const manager = editor.getMarkdownManager()
 
// 将 Markdown 转换为 JSON
const json = manager.parse('# Hello, Umo Editor Next')
console.log(json)
 
// 将 JSON 转换为 Markdown
const markdown = manager.serialize(json)
console.log(markdown)
 
// 访问 Marked 实例
const marked = manager.instance
console.log(marked)
 
// 将单个节点渲染为 Markdown
const markdown = manager.renderNodeToMarkdown(node)
console.log(markdown)
 
// 将多个节点渲染为 Markdown
const markdown = manager.renderNodes(nodes)
console.log(markdown)
 
// 查看 MarkdownManager 的完整能力
console.log(manager)