富文本编辑器(RTE)是Joplin主要的笔记编辑界面之一,提供所见即所得(WYSIWYG)的编辑功能。本文档将解释富文本编辑器的架构、组件和主要功能。有关Markdown编辑器的信息,请参阅Markdown编辑器。
Joplin的富文本编辑器基于TinyMCE构建,这是一个流行的开源所见即所得HTML编辑器。该编辑器允许用户格式化文本、插入图片和其他资源、创建表格以及执行其他富文本编辑操作,而无需直接编写Markdown代码。在后台,富文本编辑器会自动在HTML(用于编辑)和Markdown(用于存储)之间进行转换。
来源:packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.tsx1-148 packages/app-desktop/gui/NoteEditor/utils/htmlToMarkdown.ts
富文本编辑器的实现由几个关键组件协同工作构成
来源:packages/app-desktop/gui/NoteEditor/NoteEditor.tsx73-132 packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.tsx97-157
富文本编辑器的关键方面在于HTML(TinyMCE使用)和Markdown(存储在数据库中)之间的双向转换。当加载或保存笔记时,这些转换会自动发生。
来源:packages/app-desktop/gui/NoteEditor/utils/useFormNote.ts155-333 packages/renderer/MarkupToHtml.ts1-115 packages/renderer/HtmlToHtml.ts1-194
当用户在富文本编辑器中编辑内容时,HTML内容需要转换为Markdown以进行存储。此过程处理:
加载笔记时,存储的Markdown会转换为HTML以便在编辑器中显示。此过程:
TinyMCE组件是富文本编辑器的核心,提供了所见即所得的编辑界面。
来源:packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.tsx97-321 packages/app-desktop/gui/NoteEditor/utils/types.ts85-142
自定义工具栏:已修改以包含Joplin特定的按钮和功能
自定义样式:将Joplin的主题应用于TinyMCE界面
资源处理:用于处理编辑器内附件的自定义逻辑
上下文菜单集成:增强的右键上下文菜单,包含自定义选项
插件架构:支持Joplin插件扩展编辑器
TinyMCE 编辑器使用特定配置进行初始化,以与Joplin集成
来源:packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.tsx657-927 packages/app-desktop/gui/NoteEditor/utils/types.ts85-142
富文本编辑器使用一个名为 useFormNote 的自定义React hook来管理笔记状态
来源:packages/app-desktop/gui/NoteEditor/utils/useFormNote.ts155-333 packages/app-desktop/gui/NoteEditor/utils/types.ts144-209
useFormNote hook
富文本编辑器包含一个自定义的上下文菜单系统,为不同元素提供特定的功能
来源:packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/utils/useContextMenu.ts1-172 packages/app-desktop/gui/NoteEditor/utils/contextMenu.ts1-239
上下文菜单系统
富文本编辑器包含对图片、PDF和其他文件的资源(附件)的强大处理功能
来源:packages/app-desktop/gui/NoteEditor/utils/resourceHandling.js packages/app-desktop/gui/NoteEditor/utils/useFormNote.ts273-311
资源处理的关键方面
富文本编辑器支持文本模式和自动格式化,允许用户使用类似Markdown的语法来实现富文本格式化
| 模式 | 结果 |
|---|---|
**text** | 粗体文本 |
*text* | 斜体文本 |
~~text~~ | 删除线文本 |
# text | 一级标题 |
## text | 二级标题 |
1. text | 有序列表 |
* text | 无序列表 |
[ ] text | 未勾选的复选框 |
[x] text | 已勾选的复选框 |
`code` | 行内代码 |
此功能通过 editor.enableTextPatterns 设置启用
来源:packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.tsx687-697 packages/lib/models/settings/builtInMetadata.ts687-697
富文本编辑器与Joplin的插件系统集成,允许插件扩展编辑器的功能
来源:packages/app-desktop/gui/NoteEditor/NoteBody/TinyMCE/TinyMCE.tsx655-875 packages/app-desktop/gui/NoteEditor/NoteEditor.tsx83-118
插件集成的关键方面
富文本编辑器包含几个可配置的设置
| 设置 | 描述 |
|---|---|
editor.autoMatchingBraces | 自动匹配括号、圆括号、引号等 |
editor.enableTextPatterns | 启用Markdown模式替换 |
editor.pastePreserveColors | 粘贴文本时保留颜色 |
editor.tabMovesFocus | 使Tab键移动焦点而不是插入制表符 |
editor.keyboardMode | 键盘交互模式 |
来源:packages/lib/models/settings/builtInMetadata.ts655-697
富文本编辑器是Joplin笔记编辑系统的一个强大组件,为用户提供了熟悉的所见即所得界面,同时保持了与Markdown存储的兼容性。它与Joplin的基础设施深度集成,用于处理资源、插件和主题,以提供无缝的编辑体验。