作者 | Jure Triglav

译者 | 弯月,责编 | 屠敏

出品 | CSDN(ID:CSDNnews)

多年来,我一直在为找到“完美”的协作文本编辑器而坚持不懈地努力。我想找的可不是随随便便的协作文本编辑器,而是开源、实时协作、基于Web、拥有很多丰富功能的文本编辑器(不仅仅是纯文本,还有结构化的内容)。因此,这篇文章只关注非常小众的开源工具以及支持它们的技术,如果你有兴趣进一步研究的话,可以参照这个持续更新的编辑器列表(https://github.com/JefMari/awesome-wysiwyg)。

故事的开始

以前,我就多次深入不计其数的实时协作资源库中,所以我可以轻车熟路地探索这个资源库的最深处。通常每次刚开始的时候,我都会为那些新的底层技术和研究论文感到非常兴奋和惊奇,后来就会渐渐地感觉呼吸不畅想要喘口气(毕竟水太深了),于是我会转而探索应用方面的研究;再到后来,我的状态大约可以形容成:“我是不是太笨了?”(也许吧),因为文档、演示程序和代码总是不完全匹配或根本讲不通,还有服务器上的协作组件无法启动,或者两个以上的用户输入同一个单词的极端情况,等等……你明白我的意思吧(让我浮出水面喘口气)。从那以后,我一时间无法再继续这个主题,所以后来这个想法就进入了冬眠,我一边写代码一边静静地凛冽的寒冬过去。直到下一次我再次试图研究这个主题,然后一切周而复始!

潜水的过程

那是2017年,我对一篇研究论文中描述的算法(CRDT的一种)产生了浓厚的兴趣,我花了几天时间用JavaScript实现了这个算法,结果发现论文本身有一个极端情况没有解决。当时,我联系了作者,却没有得到任何回复。后来我发现另一个团队用类似的算法解决了这个特殊的极端情况,但是他们的实现略有不同,也许我可以把他们的Lisp代码移植过来……,等一下!什么情况?我当然不希望通过一个全新的算法解决研究论文中的问题!我在干嘛?让我们重新整理一下。

我(也许你也是,亲爱的读者)真正想要的是,一个可以在产品中即插即用的编辑器。一个能够解决实时协作问题的解决方案。一个能够让相隔几万里的多个用户编辑同一个文档的编辑器,他们按下键盘上的键就可以编辑结构化文档,并在屏幕上显示彼此的更改。仅此而已。然而,编辑器很难做,而我也从未找到过这样的工具。

直到现在。

现在是2019年,我忍不住再次回归,然而,这次不仅发现了一个神奇的编辑器,而且还有两个势均力敌的编辑器可以满足上门那串长长的要求。我原本打算介绍整体的情况,并列举出每种协作文本编辑器,但这似乎没有太多价值。所以,我们还是看看这两款有望成为最终赢家的编辑器吧。

尽管如此,我们还是能选出两款编辑器,所以你可以从中选择一个,客观地看看哪个更适合自己。我利用以下分类进行了深入的科学分级(我将用*来表示推荐指数):

  1. 开放许可证:加一颗星    (这实际上也是一个排除标准)

  2. 支持图像:加一颗星

  3. 支持表格:加一颗星

  4. 支持列表:加一颗星

  5. 支持数学:加一颗星

  6. 支持实时协作:加一颗星

  7. 后台服务可用:加一颗星

  8. 支持远程光标和远程选择:加一颗星    (表示你可以看到其他用户的光标)

  9. 离线支持:加一颗星    (这个很难判断)

  10. 是否用于产品:加一颗星

  11. 移动支持:加一颗星

因此,根据以上评分机制,编辑器最多可以获得11颗星。下面就让我们一起来看看吧!

CKEditor 5

CKEditor 5的界面

首先,让我们来看看CKEditor 5,这是一款新发布的高质量编辑器。CKEditor 5很漂亮。我知道,漂亮不是标准之一,但是漂亮也很重要啊(你也同意,对不对),所以我必须说出来。这个编辑器可以获得很多星星:拥有GPL许可(虽然有一些限制,+1颗星);支持图像、表格、列表(+3颗星);插件支持数学(+1颗星);支持实时协作与远程光标和选择(+2颗星)。CKEditor背后的团队写了一篇关于他们利用操作转换实现了该编辑器的文章(https://ckeditor.com/blog/Lessons-learned-from-creating-a-rich-text-editor-with-real-time-collaboration/)。

然而,我没有看到实时协作所需的后台服务,而且所有文档都指向其云服务——这是一个必须的付费组件,即使在与GPL兼容的项目中也是如此。

离线支持的情况很难判断,但看起来并没有做到完全支持(短暂的中断连接还好,但是如果你离线数天情况就不好说了),所以给半颗星?移动支持也是如此,全面的支持还在开发中(+0.5颗星)。最后一点,肯定有许多产品在使用CKEditor,但我没有找到利用它构建的产品的列表(+0.5颗星)。

这款编辑器还不错,但缺乏可用的开源协作服务器确实让人有点失望。

推荐指数:8.5颗星

Atlaskit编辑器

Atlassian的Atlaskit编辑器

大约在一年前,Atlassian推出并开源了Atlaskit设计系统,随之而来的还有其他好东西,其中包括一个成熟的编辑器——基于ProseMirror的Atlaskit编辑器。我真心觉得这可能就是一直以来我苦苦追寻的那个编辑器!这款编辑器拥有Apache 2.0许可的授权(这可以说是一个非常宽松的开源许可,+1颗星)。它可以很好地支持图像、表格和列表(+3颗星)。大多数编辑都非常缺乏表格的实现,特别是做得非常好的就更加寥寥无几了:

Atlaskit编辑器中的表格管理

遗憾的是,这款编辑器不支持数学,但由于编辑器本身是基于ProseMirror的,因此添加现有的解决方案应该不会太困难(+0.5颗星)。它支持实时协作与远程光标和选择(+2颗星),而且它的用户界面是我见过的编辑器实现最好的一个(例如,当远程用户的光标与你自己的重叠时就会变暗,还有其他非常讨人喜欢的细节)。此外,从我的测试中,离线支持似乎非常稳固(+1颗星),这可能是由于ProseMirror使用了绝对权威的的协作方法。现在我们已经有7.5颗星了,我们还有很多项需要考察,继续!不幸的是,现实再一次击碎了我的美梦,与CKEditor一样,实时协作没有后台服务。失望,非常失望。我在想有没有什么办法解决这个问题。无论怎样,让我们先看完评分标准,我只关心星数:肯定有产品在使用它(数百万用户),它确实有移动支持(+2颗星)。就在我打算即将宣布获胜者(总共9.5颗星),并发布本文的时候,却出现了新情况。原来这款编辑器中使用的标志和图标,以及许多其他Atlaskit组件,都使用了非常严格的ADG许可,该许可声明你不能在Atlassian Universe之外的地方使用它们。尤其是编辑器中广泛使用并紧密集成的一些图标。第二点让人太失望了,我要拿走1颗星了。于是,最后这个编辑器拿到了8.5颗星,与上一个编辑器打成了平手。

等等,如果我们可以处理一下这些图标呢......

协作文本编辑器最新的技术发展的今天,我们仅有的两款编辑器,尽管它们拥有非常优异的功能,但我们根本无法在开源项目中使用——由于许可的问题,以及缺乏公开的构建块,或两者兼而有之。如果要真是这样,那我们真是太不走运了。

所以,我首先做了服务器部分(后台使用了PostgreSQL,并利用了PubSweet框架和REST / WebSockets共同提供的支持),点击这里可以获取代码(https://github.com/jure/pubsweet-blogger/blob/master/server/component-atlaskit-collab/src/collab.js)。这些代码很简单,而且也可以达到我们的目的,并提供持久的文档和实时通信渠道。令人惊讶的是,在庞大的ProseMirror社区的帮助下,我在没有准确的接口规范的情况下,居然搞清楚了这些东西的工作方式(+1颗星)。

接下来,我用Feather套件中的图标替换了该编辑器使用的图标。具体来说,这需要替换三个软件包,而且由于ADG许可禁止任何类型的衍生作品,我们只能从头开始重做这些软件包。由于这个原因,该编辑器可能会丢失一些功能,主要体现在可访问性方面,但它为进一步开发提供了良好的开放基础。例如,在某些情况下,图标本身缺少更好的替代品,如果你希望为此项目做出贡献的话,这可以成为你的第一个目标(+1颗星)!

经历了以上种种之后,我们现在距离一个完美的评分只差半颗星了,当初刚开始这样的探索时,我根本无法想象能走到今天这一步。这也意味着,在这场比拼中有一个明显的赢家,我宣布:最终Atlaskit的编辑器因其多样化、开放和强大的ProseMirror社区而获胜。点击这里,查看这个项目的文档(https://github.com/jure/pubsweet-blogger)。如果你刚刚开始做一个新项目,而且也在考虑实时协作的功能,那么就可以从这里开始积极的探索了。最后,提醒你一些注意事项(https://github.com/jure/pubsweet-blogger/blob/master/README.md)。

Atlaskit编辑器的实时编辑功能演示

推荐指数:10.5颗星

值得一提

还有两款编辑器非常值得一提,即使它们现在还没有自带的实时协作,但是它们背后都有强大的支持库,因此有可能会添加,也有可能已经在计划中了。

Wax编辑器(基于ProseMirror的文字处理器)

首先是Wax(以古老的蜡片命名),Coko Foundation的编辑器,准确来说应该是文字处理器,最开始是在Substance库之上构建的,现在使用ProseMirror重新构建过了,功能绝对非常丰富。虽然与我们给星的标准不完全相同,但该文字处理器拥有一些非常棒的功能。 Wax最初是为书籍制作应用程序而构建的,它支持笔记(书籍中常用的编号注释)、跟踪更改、查找和替换等。或许这些功能我们可以给圈圈?如果是这样的话,Wax将获得4颗星(开放许可证,支持图像、列表,还可用于产品)和4个圈圈。

Texture

Texture,一款基于Substance的编辑器

最后,还有一个很重要的编辑器,这是一款非常特殊且专业的开源编辑器,可用于以JATS格式(期刊文章的XML标准)生成科学内容。如果我们也采用给星或给圈圈的方式的话,那么就要数不过来了:开放许可,支持表格、图像,深入支持数学,支持参考和交叉引用、列表、元数据等等。重申一下,Wax和Texture都是非常出众的编辑器,我之所以没有把它们纳入给星排名是因为它们缺乏实时协作功能,而实时协作才是本文重点关注的功能。

总结

如果你正在构建一个系统,而编辑器中的实时协作是关键组件,那么希望这篇对你有所帮助。在过去的一年里,该领域已经发展成熟,而且现在我们有很多即插即用的开放式解决方案。也许在你的帮助下,明年的这个时候我们将有一整套开放项目可供学习。也许,我们还会在不知不觉中使用建立在这些开放层之上的工具。

一款开源的协作文本编辑器相关推荐

  1. 直接拿来用!盘点四款优秀的开源协作文本编辑器

    工欲善其事,必先利其器.除了一些主流的编辑器,在开源界,又有哪些精小却非常实用的文本编辑器呢? 作者 | Jure Triglav 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNn ...

  2. Kate  一款功能丰富的文本编辑器(可能是目前最好的开源跨平台轻量编辑器 之一)

    参考:kate 跨平台KDE文本编辑器使用方法 汇集 https://blog.csdn.net/ken2232/article/details/130167973 有网络消息说:这款编辑器停止了更新 ...

  3. Quill – 可以灵活自定义的开源的富文本编辑器

    Quill 的建立是为了解决现有的所见即所得(WYSIWYG)的编辑器本身就是所见即所得(指不能再扩张)的问题.如果编辑器不正是你想要的方式,这是很难或不可能对其进行自定义以满足您的需求. Quill ...

  4. 一款好用的文本编辑器KindEditor+PHP

    1,一款好用的文本编辑器KindEditor 下载页面: http://www.kindsoft.net/down.php <!DOCTYPE html> <html lang=&q ...

  5. 推荐几款很棒的文本编辑器

    对于从事网络编辑工作的人员来说,一款功能强大的文本编辑器是必不可少的,一般自带的记事本,功能相对比较简单,对于一些特殊的功能,例如:编辑文本.十六进制.ASCII码等就需要更加专业的文本编辑器.那么如 ...

  6. 10款著名的代码(文本)编辑器

    下面是笔者总结的 10 个最好的免费代码文本编辑器: 1. NOTEPAD++ NOTEPAD++是一款免费又优秀的文本编辑器,支持在 MS Windows 环境下运行的多种编程语言.NOTEPAD+ ...

  7. 几款常用的富文本编辑器总结

    导航 百度富文本编辑器(UEditor) 基本demo 基本API 拓展相关 注意事项 Summernote 基本demo 基本api 扩展相关 Froala 基本demo 基本api 扩展相关 注意 ...

  8. 推荐8款不错的HTML5文本编辑器

    如果你是一名Web开发人员,当你需要开发一个独特的网站时,你就会知道文本编辑器的重要性.小编为大家整理了8款非常前沿的HTML5文本编辑器,简化开发流程,喜欢就转走吧! Mercury Editor ...

  9. 文本编辑器查看 cprintf颜色_做生信,你需要一款好用的文本编辑器

    "工欲善其事,必先利其器",选择合适的工具很重要.在做生物信息分析过程中,经常需要查看序列,编辑文本,修改程序代码等,这个过程中就需要使用文本编辑器.一般系统自带的文本编辑器都过于 ...

最新文章

  1. 计算机如何理解我们的语言?NLP is fun!
  2. Flask框架从入门到精通之转换器(四)
  3. SAP C4C url Mashup的跳转工作原理 - 新的浏览器窗口是如何打开的
  4. C#操作Access数据库
  5. LightOJ1283 Shelving Books(DP)
  6. 【牛客 - 125A】灰魔法师(打表,暴力)
  7. SAP License:系统退货处理流程
  8. 三对角矩阵与追赶法介绍
  9. Android直连MySQL数据库
  10. Adobe Camera Raw使用方法
  11. 零基础应如何学习UI设计
  12. Spark开发环境的搭建(一)
  13. 常用的Sql命令之alter
  14. swing可视化编程-使用label添加图片
  15. 微信小程序--picke选择器(省市区城市)-- 使用taro开发
  16. 混合应用 微信登录授权 微信登录认证失败 ios PGWXAPI错误-1 code:-100 / 安卓 message:invalid appsecret innerCode:40125...
  17. 不留痕迹的清除部分history历史命令记录
  18. 计算机无法卸载软件,电脑软件无法卸载怎么解决
  19. 74---Python绘制不同表现形式的狄拉克delta函数(视觉上的delta函数)
  20. 搭建自己的 Git 服务器

热门文章

  1. IB选课建议有哪些,怎么选课比较好?
  2. Riverbed SteelConnect荣获2017 Interop东京展“最佳展示奖”
  3. word文档添加批注
  4. keil警告 LED.C(38): warning C276: constant in condition expression
  5. 1.1 windows环境安装Perl
  6. 计算机会计期中考试,会计从业资格考试《会计电算化》基础阶段备考题
  7. 第三篇、vlc-android之UDP组播使用
  8. excel 在一列中查找某个值的出现次数 countif函数
  9. 基于java springboot租房平台设计,公寓租赁系统
  10. [NOIP2022] 喵了个喵 题解