富文本编辑器那些事儿—插件系统(一)

580 阅读3分钟

“插件”这个名词在读的各位 Develper 不会太陌生,大家肯定使用过浏览器插件,代码编辑器(VSCode、JetBrains 系列)插件,浏览器或编辑器好不好用就看插件是不是够丰富,所谓插件才是灵魂,富文本编辑器也不例外,开发编辑器实际上的大部分时间也是在做插件,所以从本篇开始捋一下富文本编辑器的插件系统,插件系统的相关内容有些多,本人规划的雏形预计至少分为 3 到 4篇:

  • 概览(包含插件概念、基本的生命周期、相关框架)
  • 插件注册流程(预渲染逻辑、事件注册与委托机制)
  • 插件渲染与事件流转

本篇算是一个概览篇,讲讲插件的大体情况。

什么是插件

插件(Plugin)是指一种可以增强或扩展已有软件功能的组件或模块。它们通常是以独立的方式编写,可以被动态地添加到主应用程序中,从而提供额外的功能和特性。 —— ChatGPT

个人理解:插件是一个相对的名词,它必须有一个主体容器/应用,其他独立的组件以插入的形式扩展主体容器/应用。

编辑器主体和插件的关系:

  • 插件依赖于编辑器,无法单独使用
  • 编辑器可以在没有插件的情况下运行,但功能将受到限制

image.png

框架

关于 Slate 与 Slate-angular

要讲后续的一些内容不免会介绍到这两个编辑器框架:Slate 和 Slate-angular (已开源,我们团队自研,但跟我关系不大),所以下面结合官方与工作中一些体会顺带的过一下,做下简介。如果有兴趣看接下来的几篇内容,这节可以过一下,反之可以跳过。

Slate 简介

Slate  是一个完全可定制的富文本编辑框架,提供核心编辑器和插件扩展机制。

其中提供核心能力:

  1. 制定文档结构规范:支持嵌套文档模型
  2. 灵活的插件机制:可定制可移植的独立插件,编辑器的核心都是以插件的方式创建的
  3. 协同编辑基础方案:数据模型、交互方案
  4. 丰富的工具函数:基于原生 DOM API 的封装的函数、操作文档数据的函数

Slate-angular 简介

Slate-angular 基于 Slate 扩展 Angular 视图层框架(官方只支持 React), Demo ,作者声称比 React 实现更简洁。

其中提供的核心能力:

  1. 提供插件的组件渲染机制
  2. 重写和扩展编辑器核心编辑能力
  3. 提供更丰富的事件监听
  4. 提供更丰富工具函数

构建编辑器

上面说了主体是编辑器,插件的一切活动都围绕此,所以也要介绍一下编辑器是什么样,如何构建编辑器。

在 Slate 中, 插件是一等公民 ,连编辑器都是以插件的形式创建的,其中编辑器对象扮演着主体容器/应用的角色,提供核心功能, 每个插件可以基于 Editor 提供的核心能力去拦截改写或扩展自己的功能/逻辑

image.png

插件生命周期

这一节,我也不知道要讲些什么,或者说都在下面的两张图里,大家看图吧。

image.png

注册插件流程

image.png

结语

该篇同步至github,最近在更编辑器相关知识的系列专栏,如果你也感兴趣,可以关注我,平常可以聊聊,最后,觉得文章还可以,点赞是对我最大的支持🌹