Add initial marker to fix errors while 'joining' markers

pull/1/head
yflory 5 years ago
parent c6cb9876a7
commit 6d84fc5b8a

@ -20,12 +20,25 @@ define([
var debug = function () {};
var MARK_OPACITY = 0.5;
var DEFAULT = {
authors: {},
marks: [[-1, 0, 0, Number.MAX_SAFE_INTEGER, Number.MAX_SAFE_INTEGER]]
};
Messages.cba_writtenBy = 'Written by <em>{0}</em>'; // XXX
var addMark = function (Env, from, to, uid) {
if (!Env.enabled) { return; }
var author = Env.authormarks.authors[uid] || {};
if (uid === -1) {
return void Env.editor.markText(from, to, {
css: "background-color: transparent",
attributes: {
'data-type': 'authormark',
'data-uid': uid
}
});
}
uid = Number(uid);
var name = Util.fixHTML(author.name || Messages.anonymous);
var col = Util.hexToRGB(author.color);
@ -73,8 +86,8 @@ define([
var setAuthorMarks = function (Env, authormarks) {
authormarks = authormarks || {};
if (!authormarks.marks) { authormarks.marks = []; }
if (!authormarks.authors) { authormarks.authors = {}; }
if (!authormarks.marks) { authormarks.marks = Util.clone(DEFAULT.marks); }
if (!authormarks.authors) { authormarks.authors = Util.clone(DEFAULT.authors); }
Env.oldMarks = Env.authormarks;
Env.authormarks = authormarks;
};
@ -219,8 +232,6 @@ define([
var toKeep = [];
var toJoin = {};
var firstMarks = first.marks.slice();
debug('error', "Fix marks");
debug('warn', first);
debug('warn', last);
@ -260,15 +271,9 @@ define([
// If we still have markers in "first", store the last one so that we can "join"
// everything at the end
// NOTE: we only join if the marks were joined initially!
if (first.marks.length) {
var idx = first.marks.length - 1;
var toJoinMark = first.marks[index].slice();
var toJoinMark = first.marks[first.marks.length - 1].slice();
toJoin = parseMark(toJoinMark);
var next = parseMark(firstMarks[idx + 1]); // always an object
if (toJoin.endLine !== next.startLine || toJoin.endCh !== next.startCh) {
toJoin.overlapOnly = true;
}
}
@ -310,17 +315,13 @@ define([
&& typeof(toJoin.endCh) !== "undefined") {
// Make sure the marks are joined correctly:
// fix the start position of the marks to keep
var overlap = toKeepEnd[0][1] < toJoin.endLine ||
(toKeepEnd[0][1] === toJoin.endLine && toKeepEnd[0][2] < toJoin.endCh);
if (!toJoin.overlapOnly || overlap) {
// Note: we must preserve the same end for this mark if it was single line!
if (typeof(toKeepEnd[0][4]) === "undefined") { // Single line
toKeepEnd[0][4] = toKeepEnd[0][3] || (toKeepEnd[0][2]+1); // preserve end ch
toKeepEnd[0][3] = toKeepEnd[0][1]; // preserve end line
}
toKeepEnd[0][1] = toJoin.endLine;
toKeepEnd[0][2] = toJoin.endCh;
// Note: we must preserve the same end for this mark if it was single line!
if (typeof(toKeepEnd[0][4]) === "undefined") { // Single line
toKeepEnd[0][4] = toKeepEnd[0][3] || (toKeepEnd[0][2]+1); // preserve end ch
toKeepEnd[0][3] = toKeepEnd[0][1]; // preserve end line
}
toKeepEnd[0][1] = toJoin.endLine;
toKeepEnd[0][2] = toJoin.endCh;
}
debug('log', 'Fixed');
@ -476,7 +477,7 @@ define([
var authormarks = Env.authormarks;
authormarks.marks.forEach(function (mark) {
var uid = mark[0];
if (!authormarks.authors || !authormarks.authors[uid]) { return; }
if (uid !== -1 && (!authormarks.authors || !authormarks.authors[uid])) { return; }
var from = {};
var to = {};
from.line = mark[1];
@ -663,10 +664,7 @@ define([
Markers.create = function (config) {
var Env = config;
Env.authormarks = {
authors: {},
marks: []
};
Env.authormarks = Util.clone(DEFAULT);
Env.enabled = false;
Env.myAuthorId = 0;
@ -689,14 +687,16 @@ define([
Env.enabled = md.enableColors;
if (!Env.enabled) {
// Reset marks
Env.authormarks = {
authors: {},
marks: []
};
Env.authormarks = {};
setMarks(Env);
if (Env.$button) { Env.$button.hide(); }
} else {
Env.myAuthorId = getAuthorId(Env);
// If it's a reset, add initial marker
if (!Env.authormarks.marks || !Env.authormarks.marks.length) {
Env.authormarks = Util.clone(DEFAULT);
setMarks(Env);
}
if (Env.$button) { Env.$button.show(); }
}
if (Env.ready) { Env.framework.localChange(); }

Loading…
Cancel
Save