
多年以来,我一直被这种渴望困扰着-试图找到“完美”的文本编辑器来进行协作。 但是,不仅限于任何支持协作的文本编辑器,哦,不,我的任务是找到(以及至少要查找)
具有实时分组工作能力的开放式文本编辑器 (即,不仅是纯文本,而且是结构化内容)。 因此,本文的重点是在相当小众的开源工具及其运行技术上。 如果您的兴趣更广泛,可以参考这份
不断更新的编辑者清单 。
这样啊 我多次跳下悬崖,跳入了几乎无限的实时协作程序海洋。 飞下来,这令人振奋的潜水到游泳池的底部,我已经知道了。 通常,它始于新的低层技术和研究中的一些最初的激动和惊奇(
跃进 ),然后是一种拥塞感和一种出现的欲望(
嘿,在这里很深 ),并探索应用的部分,然后是用以下短语最好地描述我的想法的时期: “我真的那么愚蠢吗?” (很有可能),因为通常文档,演示和代码不完全匹配或没有意义,服务器上的协作组件无法启动,并且在极端情况下,有两个以上的用户输入相同的单词,而...(
浮出水面,抽气 )。
此后,很难再次提出这个话题,下一阶段是思想的冬天,在演习中,等待恶劣的天气,而我通常让半完成的代码工作几个月甚至几年。
在我们再次见面之前,请使用无冲突的复制数据类型!
图 1.飞跃事实是,2017年,我对
一篇 研究文章中描述的一种算法(一种
CRDT )的前景感到非常兴奋,我花了几天时间并
用JavaScript对其
进行了实现,却发现科学文章中存在一个临界点,对此没有给出任何解决方案(嗯……但也许都是一样的?)。 当时,我求助于作者,但没有得到答案,发现另一个团队在类似的算法中考虑了这种特殊的边界情况,但是由于实施中的这些细微之处,也许我可以将其转移到Lisp ... SO停! 这是怎么回事 当然,我不想在研究工作中引入新算法并解决其问题! 我在做什么,我怎么到这里的?
让我们倒带!我(亲爱的读者,也许您也是,您)真正需要的是
即插即用的编辑器,即成品 。 解决了实时协作的问题。 它允许几个相距数千英里的已连接用户通过按键盘上的键来编辑结构化文档,并在他们的屏幕上查看彼此的更改。 仅此而已。
但是,编辑器很难...我只是找不到这样的工具。
到目前为止
2019年已经
到来 (
痒痒又有了力量 ),这次不仅出现了魔术编辑器,而且实际上甚至有
两个申请人都满足了期待已久的规范。 最初,我想和您一起飞过这个领域,并列出几乎所有文本编辑器以进行协作,但这
似乎并没有增加太多价值 。 取而代之的是,让我们关注可以变成“那样”的两个编辑器。
但是有两个编辑器,您需要做出选择-客观地考虑哪一个更合适会很好。 我提供了具有以下类别的深入科学的分类系统(使用猕猴桃作为商品的标准单位):
- 公开许可:增加1个奇异果
(这也是一个排除标准)
- 图像支持:添加1个奇异果

- 餐桌支持:增加1个奇异果

- 列表支持:添加1个奇异果

- 数学支持:增加1个奇异果

- 实时协作支持:增加1个猕猴桃

- 可用的服务器组件 :1个猕猴桃

- 远程光标和突出显示支持:1个奇异果
(即您可以看到其他用户的光标)
- 离线工作:1个猕猴桃
(很难确定)
- 生产经验 :1猕猴桃

- 行动支援:1个奇异果

有了这样的评分系统,编辑者最多可以得到11个奇异果单位。 让我们开始吧!
Ckeditor 5
图2. CKEditor 5界面(可能的选项之一), 来源让我们从CKEditor 5开始,这是来自
大量质量编辑器的最新版本。 他很漂亮。 我知道,我知道这不是一个标准,它并不重要(而且我们甚至可能不同意),但是我只需要说说它的美。 因此,该编辑器需要大量的奇异果:它是根据GPL许可的(
此处讨论了一些限制 ),(+1),支持图像,表格,列表(+3),插件支持数学(+1)并且还支持
实时协作时间与已删除的光标和选择(+2)。 CKEditor的创建者撰写了一篇精彩而
详细的博客文章,介绍了他们如何使用操作转换来
开发它 。
但是,我
找不到实时协作
所需的服务器实现 ,并且所有文档都显示了对云服务和(付费)组件的强制性需求,即使在与GPL兼容的项目中也是如此。
脱机支持的级别很难确定 ,但似乎还不完整(例如,编辑器可以承受短暂中断的连接,但不能承受脱机工作几天)。 大概半个猕猴桃? 这同样适用于移动支持,还可以提供全面支持(+0.5)。 最后一刻,肯定会在生产中使用CKEditor,但我找不到基于它的产品列表(+0.5)。
一个好的编辑器,但是缺少负担得起的开源协作服务器确实令人沮丧。
完整评分:8.5 / 11









Atlaskit编辑器
图 3. Atlassian编写的Atlaskit编辑器大约一年前,Atlassian启动了开源的
Atlaskit Design系统,并带来了
很多好处,包括基于
ProseMirror的功能齐全的即用型编辑器。
我已经觉得这可能是我们正在寻找的编辑器! 许多人认为,它是根据Apache 2.0许可证发行的,是一种
非常宽松的开源许可证 (+1 kiwi)。 它不仅支持图像,表格和列表,而且还非常出色地支持它们(+3猕猴桃)! 对于大多数编辑器而言,表的实现非常出色,在这里非常出色:
图 4.在Atlaskit编辑器中管理表不幸的是,不支持数学运算,但是编辑器本身是基于ProseMirror的,因此向其添加现有解决方案(+0.5)不会成为问题。 它绝对支持与远程光标和选择(+2)的实时协作,这是我见过的最好的UI实例之一(例如,如果远程光标与您自己的光标重叠,则会使其变暗,以及其他出色的实现细节) ) 另外,根据我的测试,离线支持似乎非常可靠(+1)-这可能是由于
ProseMirror用于协作的“中心能力”方法 。 哇,我们已经达到7.5猕猴桃,还有更多积分! 来吧!
不幸的是,我们在这里面临着残酷的现实。 与CKEditor一样,没有服务器端实现可用于实时协作。 懒人。 大笨蛋。 我想知道是否可以解决?
无论如何,如果您继续按照条件下降,那么其他所有功能都值得您尝试:它绝对用于生产环境(数百万用户),并且具有移动支持(+2)。 就在我宣布获胜者(总共9.5猕猴桃)并发布这篇文章的同时,还有其他事情发生了。 事实证明,编辑器和许多其他Atlaskit组件中使用的徽标和徽章均受非常严格的
ADG许可证许可 ,该
许可证规定您不能在Atlassian宇宙之外使用它们。 但是,相同的图标已被广泛使用并紧密集成到编辑器中。 第二个大笨蛋,我从他们那儿摘了猕猴桃。 我们返回到8.5,如果您要数的话,您会看到结果现在是相同的。 他是决赛。
现在,如果您可以对这些图标进行操作...我认为,在上线的文本编辑器领域的所有最新进展后会很伤心的留下来与仍然不能与开源项目中使用的神奇功能两个伟大的编辑器 - 要么是由于许可证的问题,缺乏可用的积木,或者两者兼而有之。
因此,首先我开发了服务器端 (基于PostgreSQL,PubSweet框架和REST / WebSockets混合),代码可
在此处获得 。 它非常简单,但是可以完成工作并确保文档和通信渠道的实时性。 出乎意料的是,由于拥有庞大的ProseMirror社区,我能够弄清楚一切如何工作而又没有确切的接口规范(+1猕猴桃)。
然后,我
用 Feather集中的图标
替换了编辑器使用的图标。 特别是必须更换三个包装。 由于ADG许可证尤其禁止任何衍生作品,因此必须从头开始重做这些软件包。 可能由于这个原因,一些功能丧失了,主要是从残疾人无障碍的角度来看,但是为进一步发展创造了良好的开放基础。 例如,
在某些情况下,没有更好的图标替代方法 ,因此,如果您想为这个项目做贡献,这是第一个问题(+1猕猴桃)!
所有这些都意味着,现在我们离完美结果仅相差一半(但是我们很可能能够应付数学)。 发生的事情是我开始旅程时不相信的事情。 这也意味着我们在这场战斗中显然是赢家,而Atlaskit Editor最终
得益于多样化,开放且乐于助人的ProseMirror社区 。 查看
项目文档以获取有关从何处开始的说明。 我相信,如果您正在启动一个新项目并考虑实时合作的可能性,即使有所有
警告 ,这也是一个不错的起点。
图 5.演示Atlaskit Editor中的实时编辑功能最终(更正后)结果:10.5 / 11











荣誉奖
我想提到两个编辑器,尽管目前他们还没有现成的实时协作解决方案,但是两者都基于支持此功能的库构建。 也许两个都有计划。
图 6.蜡编辑器(基于ProseMirror的文字处理器)第一个是来自可可基金会的
蜡 (以古代蜡片命名)。 该
文字处理器首先在
Substance库(
存储库 )上制造,现在已经在
ProseMirror (
存储库 )下重建。 它专门包含功能。 这些并不是我们给猕猴桃提供的功能,但是它们却是出色的功能。 Wax最初用于
排版书籍 ,它支持注释(书籍中常见的编号注释),更改历史记录,搜索和替换,装饰品等。 也许为此给桔子

? 在这种情况下,蜡将收到4个猕猴桃(开放许可证,图片,清单,用于生产)和几个橙子,可能是四个。








。 这是很多水果!
质感
图 7.基于纹理,物质的编辑器最后,我们有
Texture(纹理) ,这是一个非常专业的专业(但开源)编辑器,用于以JATS格式(期刊文章的XML标准)创建科学内容。 如果您练习水果计数,我们几乎肯定会用尽手指:开放的许可证,表格,图像,深层的数学支持,链接和交叉引用,列表,元数据支持,列表还会继续!



我重复一遍,
Wax和Texture都是出色的编辑器 ,而使它们脱离最大猕猴桃的唯一原因是缺少实时共同编辑功能,本文专门针对这些功能。
结论
如果要创建一个系统,其中实时协作编辑是关键组成部分,那么您选择了正确的时间。 去年,情况已经成熟,现在
几乎可以即插即用的开放式解决方案出现在这里。 也许,在您的帮助下,确切地说,我们将在一年内完成一整套开放项目。 也许,只有在可能的情况下,我们才会使用在这些开放层之上构建的工具,甚至一无所知。
进一步阅读
- 历史数据:因果树和可操作的CRDT
- 创建实时文本编辑器的经验教训
- HTML文字处理器示例
- 在ProseMirror中共同编辑