使用时间戳保存对于contenteditable的更改

Hor*_*ren 9 php mysql diff contenteditable

我有一个<div contenteditable="true" />用户可以写的,其长度几乎是无限的.
div中的数据在MySQL数据库中通过时间戳保存.

现在,我的目标是在左侧有一个小注释,告诉用户何时创建文档的每个部分(分辨率应以天为单位).

现在,问题是:如何保存信息(什么时候更改的部分)最好?

到目前为止,我考虑了以下两个看似可以改进的选项:

  1. 每次用户访问文档末尾的站点时,我都会插入一个标志(例如,带有类的emtpy span和存储编辑开始的数据属性).然后,在调用保存脚本时,此标志将保存到数据库中.这个选项可以很容易地显示侧面的日期 - 我只是将它们放在与空跨度相同的高度上,并且跨度告诉我日期.缺点是:用户可能会意外删除时间戳范围,如果用户长时间没有关闭窗口,则不会插入新的时间跨度(这可能是通过每隔X分钟插入新的时间戳跨度来避免,因此删除部分是更相关)
  2. 每次将数据传递给保存脚本时,尝试进行字符串差异比较,并仅使用时间戳保存差异.然后当页面加载时,按正确的顺序将所有部分放在一起,并在Javascript中将日期注释放在正确的位置.这听起来像是我的很多开销,但是当旧的部件被更换时,两个部件可能变成一个,等等.总而言之,这些选项听起来非常复杂.

任何意见/建议/建议高度赞赏!

arm*_*mel 12

您要实现的是源代码控制领域中称为"注释"或"责备"的功能(尽管您只需要更新日期而不是日期+作者或仅仅是作者).

要做到这一点,你需要一种方法来制作差异(php-diff可能会完成工作)并获得文本的版本.有几种策略:

  • 存储最新版本并仅保留增量(例如统一差异,我的偏好)

  • 存储所有版本并动态计算增量

获得当前版本和增量列表后(如果超过几十个三角洲,那么你肯定可以缩短列表,让用户提出更多,如果真的很重要).您可以将增量组合在一起,这是注释阶段发生的位置,因为您可以记住每行的哪个版本.实际上编写非常简单(从最新版本开始,补丁中添加的所有行都是最新版本,另一行需要解释,所以再次使用下一个补丁,直到找到你想要处理的最古老的补丁,其余的行来自该版本或最早的行,因此可以使用一些标记"在或之前".

Google有一个针对Javascript的差异库,因此可以在用户计算机上完成所有艰苦工作.他们也在这个库中有补丁部分.我没有找到annotate/blame库.