问题标签 [collaborative-editing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2170 浏览

javascript - 实现通用的实时协作编辑器/插件(如 Google Docs)

所以,我正在考虑实现一个实时协作编辑器,因为一些预制的(例如etherpad)缺乏专用编辑器的功能。

我目前使用CKEditor,但希望切换到Aloha Editor

我将使用Pusher推送通知/更新到我的应用程序周围的位置,以便在多人使用该软件时,一切都尽可能实时。

现在,最初我关于如何实现协作编辑器的思考过程似乎真的很慢 - 使用推送器不断交换整个文本字段......但是移动巨大的文本块会变得非常难看,我不太确定当有多个(> 5)人同时处理文本时该怎么办......所以......必须有一种更简单、更高效的网络方式来进行协作编辑。

想法?

0 投票
1 回答
1119 浏览

c# - 协作文本编辑器

我有一个非常烦人的问题:我正在使用 C# 开发一个协作文本编辑器,我希望列表中的每个客户端都编辑共享文本框,但是我被键盘转换中的字符卡住了。下面是 keyDown 事件的代码:

现在,连接到应用程序的客户端列表中的每个客户端都应该接收带有文本框输入的字节数组。因此,在每个客户端的“OnDataReceived”回调中,将此字节数组转换为字符串并尝试通过 crossThreadDelegate 更新文本框每个客户。

现在是 crossThread 委托的定义:

但我真正的问题是下一个:我无法很好地识别转义字符,因为我发送了一个字节数组,我将其转换为字符串,然后我尝试使用该字符串更新每个客户端的文本框。例如,当我按下 shift 键时,客户端的所有 TextBox 中的字符串将是“shiftKey”。你能告诉我如何处理这些转义字符吗?有没有一种方法可以用 ASCII 发送和更新。

0 投票
0 回答
902 浏览

real-time - 为什么我们需要运营转型来实现实时协作?

看过 Google Docs 之类的应用程序和ShareJSEtherPad Lite之类的库后,我对实时协作感到非常兴奋,这似乎是使用一种称为操作转换的非常复杂的技术来实现的。

我的问题可能有点奇怪:为什么需要 OT?

我的意思是,在大多数设置中,我们在网络上的延迟非常低——使用 Google Docs、ShareJS 和 EtherPad 等工具,更改几乎立即反映在连接的客户端上。

为什么在服务器端解决冲突和保持同步的解决方案非常复杂?

熟悉命令模式和撤消/重做,在我看来,一个更简单的解决方案是将文档的每个更改简单地实现为具有等效撤消命令的命令。

让客户端在进行更改时提交序列化命令。在服务器端为每个收到的命令分配一个序列号。将应用于文档的所有命令分发回客户端,客户端还维护命令历史记录。

每个连接的客户端都从服务器接收到应用于文档的所有命令,现在带有指示“正确”顺序的序列号,例如服务器接收命令的顺序,以及它们应用于主文档的顺序由服务器持有。

如果客户端在命令号 100 处,并向服务器提交了一条返回为 102 号的新命令,则客户端知道它错过了一条命令 - 然后它简单地对它提交的最后一条命令应用“撤消”命令,应用命令号 101,然后再次应用它自己的命令号 102,从而使事情恢复正常。

如果它落后于几个命令,它会根据需要简单地回滚,然后应用所有错过的命令,等等。

这对我来说听起来要简单得多。

运营转型在哪些方面比这更好?

0 投票
1 回答
623 浏览

odf - 在 localServer 上测试 WebOdf 协作编辑器

我正在尝试在我的网站中添加文档编辑器支持。我找到了 Opensource WebODF 并尝试在我的本地服务器上对其进行测试。git 存储库自述文件提供了有关如何添加 Odf 查看器支持的说明。我能够测试本地编辑器。有人可以解释如何在本地服务器上设置协作编辑器。

0 投票
0 回答
70 浏览

ajax - Django 和 Google-mobwrite - 表单 ID

我使用google-mobwrite代码,尝试在 Django 应用程序中创建协作表单...

我用:

它可以正常工作,在我的应用程序中,我有以下模型:

假设我有来自这个模型的动态未知数量的不同对象:

问题是在模板中为属性的表单生成的idfieldA总是一样的:

在网站上 Neil Fraser 说:

请注意,MobWrite 没有身份验证。这是主机应用程序的工作。MobWrite 只是一个共享管道,宿主应用程序使用它来连接表单。为了将不需要的用户拒之门外并防止冲突,建议使用八字符随机字符串的表单元素 ID。如果要全局连接表单的所有用户(如在演示中),则只需硬编码随机 ID。如果要将用户分成组,并且仅在组成员之间同步数据,则必须生成 ID,以便组成员都具有相同的 ID。

我希望fieldA每个对象有一个不同的 id,对象的成员或另一个对象的成员无法预测。但是对于同一个对象的所有成员,该字段的 id 必须是相同的......我不知道该怎么做才能实现这一点......

0 投票
2 回答
8173 浏览

node.js - Nodejs 和 Socket.io 中的实时协作文本编辑器

我正在开发一个具有类似于 https://quip.com/的段落锁定属性的实时文本编辑器。在socket.ionodejs中。

这意味着当您在给定的段落上写字时,其他合作者无法对其进行编辑。

在您按下回车键或将光标移动到新行的那一刻,该段落将变为Editable for other Collaborators

在这之后我很困惑。我正在考虑一个很好的方法来进一步发展。请提出建议。

下面是我的代码,它工作得很好。到目前为止,我可以获取所有合作者的列表并将编辑器的内容广播给其他合作者。

索引.html

服务器.js

0 投票
1 回答
19 浏览

javascript - 将活动元素从所有客户端发送到服务器

假设我有一个协作文本编辑器。

合作者 A 在 A 段上写作。

合作者 B 在 B 段上写作。

合作者 C 在段落 C 上写作。

我想将 A、B、C 的活动元素(以元素为中心)发送到服务器并将其发送给所有客户端。

需要帮忙。

0 投票
2 回答
1770 浏览

share - 可以在自托管中进行 cloud9-ide 协作吗?

是否可以在从https://github.com/ajaxorg/cloud9构建的自托管环境中拥有协作和工作空间共享功能?

0 投票
1 回答
5562 浏览

javascript - 退休的 TogetherJS 的替代品

有没有很好的替代TogetherJS?它的GitHub已经好几个月没有任何活动了,这篇文章说它目前已经死了,未来还不确定。

相对来说,TogetherJS 最独特的功能是 ShareJS,它能够查看其他人的光标以用于故障排除/远程协助。

0 投票
1 回答
360 浏览

javascript - “实时编辑”多用户平台列表(用于网站项目)

(在 Google 进行研究后)我想知道在 HTML、CSS、javascript、Php 文档上进行协作(可能是 LIVE)编码的选项是什么。

我是 Github 的新手,据我了解,它不允许对文档进行实时编辑,这意味着多个人可以同时处理一个文档,从而造成不一致。

这个对吗?

非常感谢。