|
|
|
@ -135,6 +135,7 @@ define([
|
|
|
|
|
// in the comments, "I" am "first"
|
|
|
|
|
var fixMarks = function (first, last, content, toKeepEnd) {
|
|
|
|
|
var toKeep = [];
|
|
|
|
|
console.log(first, last, JSON.stringify(toKeepEnd));
|
|
|
|
|
|
|
|
|
|
// Get their start position compared to the authDoc
|
|
|
|
|
var lastAuthOffset = last.offset + last.total;
|
|
|
|
@ -175,6 +176,10 @@ define([
|
|
|
|
|
toJoin = parseMark(toJoinMark);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
console.log('to keep, to join');
|
|
|
|
|
console.warn(JSON.stringify(toKeep));
|
|
|
|
|
console.warn(JSON.stringify(toJoin));
|
|
|
|
|
|
|
|
|
|
// Add the new markers to the result
|
|
|
|
|
Array.prototype.unshift.apply(toKeepEnd, toKeep);
|
|
|
|
|
|
|
|
|
@ -199,12 +204,13 @@ define([
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
if (toKeep.length && toJoin) {
|
|
|
|
|
if (toKeep.length && toJoin && toJoin.endLine && toJoin.startLine) {
|
|
|
|
|
// Make sure the marks are joined correctly:
|
|
|
|
|
// fix the start position of the marks to keep
|
|
|
|
|
toKeepEnd[0][1] = toJoin.endLine;
|
|
|
|
|
toKeepEnd[0][2] = toJoin.endCh;
|
|
|
|
|
}
|
|
|
|
|
console.warn(JSON.stringify(toKeepEnd));
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var checkMarks = function (Env, userDoc) {
|
|
|
|
@ -212,10 +218,11 @@ define([
|
|
|
|
|
var chainpad = Env.framework._.cpNfInner.chainpad;
|
|
|
|
|
var editor = Env.editor;
|
|
|
|
|
var CodeMirror = Env.CodeMirror;
|
|
|
|
|
var oldMarks = Env.oldMarks;
|
|
|
|
|
|
|
|
|
|
setAuthorMarks(Env, userDoc.authormarks);
|
|
|
|
|
|
|
|
|
|
var oldMarks = Env.oldMarks;
|
|
|
|
|
|
|
|
|
|
if (!Env.enabled) { return; }
|
|
|
|
|
|
|
|
|
|
var authDoc = JSON.parse(chainpad.getAuthDoc() || '{}');
|
|
|
|
@ -229,7 +236,13 @@ define([
|
|
|
|
|
var commonParent = chainpad.getAuthBlock().getParent().getContent().doc;
|
|
|
|
|
var content = JSON.parse(commonParent || '{}').content || '';
|
|
|
|
|
|
|
|
|
|
console.error("BEGIN");
|
|
|
|
|
console.log(JSON.stringify(oldMarks.marks));
|
|
|
|
|
console.log(JSON.stringify(authDoc.authormarks.marks));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var theirOps = ChainPad.Diff.diff(content, authDoc.content);
|
|
|
|
|
console.warn(theirOps, chainpad.getAuthBlock().getPatch().operations);
|
|
|
|
|
var myOps = ChainPad.Diff.diff(content, localDoc);
|
|
|
|
|
|
|
|
|
|
if (!myOps.length || !theirOps.length) { return; }
|
|
|
|
@ -263,7 +276,8 @@ define([
|
|
|
|
|
theirOps.forEach(parseOp(false));
|
|
|
|
|
|
|
|
|
|
var sorted = Object.keys(ops).map(Number);
|
|
|
|
|
sorted.sort().reverse();
|
|
|
|
|
sorted.sort(function (a, b) { return a-b; }).reverse();
|
|
|
|
|
console.warn(ops, sorted);
|
|
|
|
|
|
|
|
|
|
// We start from the end so that we don't have to fix the offsets everytime
|
|
|
|
|
var prev;
|
|
|
|
@ -289,6 +303,10 @@ define([
|
|
|
|
|
// Prepend the markers placed before this operation
|
|
|
|
|
var first = ops[sorted[sorted.length - 1]];
|
|
|
|
|
if (first) { Array.prototype.unshift.apply(toKeepEnd, first.marks); }
|
|
|
|
|
console.error(JSON.stringify(first.marks));
|
|
|
|
|
console.error(JSON.stringify(toKeepEnd));
|
|
|
|
|
|
|
|
|
|
console.error("END");
|
|
|
|
|
|
|
|
|
|
// Commit our new markers
|
|
|
|
|
Env.authormarks.marks = toKeepEnd;
|
|
|
|
@ -329,6 +347,8 @@ define([
|
|
|
|
|
mark.clear();
|
|
|
|
|
});
|
|
|
|
|
} catch (e) {
|
|
|
|
|
console.warn(mark, JSON.stringify(authormarks.marks));
|
|
|
|
|
console.error(from, to);
|
|
|
|
|
console.error(e);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -515,7 +535,12 @@ define([
|
|
|
|
|
if (Env.ready) { Env.framework.localChange(); }
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (!Env.enabled) { return; }
|
|
|
|
|
// If the markers are disabled or if I haven't pushed content since the last reset,
|
|
|
|
|
// don't update my data
|
|
|
|
|
if (!Env.enabled || !Env.myAuthorId || !Env.authormarks.authors[Env.myAuthorId]) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// Update my data
|
|
|
|
|
var changed = setMyData(Env);
|
|
|
|
|
if (changed) {
|
|
|
|
|