use json-ot from bower
parent
dccf5e8dcf
commit
ff0f7d15dc
@ -1,68 +0,0 @@
|
|||||||
define([
|
|
||||||
'/common/realtime-input.js'
|
|
||||||
], function () {
|
|
||||||
var ChainPad = window.ChainPad;
|
|
||||||
var JsonOT = {};
|
|
||||||
|
|
||||||
var validate = JsonOT.validate = function (text, toTransform, transformBy) {
|
|
||||||
var DEBUG = window.REALTIME_DEBUG = window.REALTIME_DEBUG || {};
|
|
||||||
|
|
||||||
var resultOp, text2, text3;
|
|
||||||
try {
|
|
||||||
// text = O (mutual common ancestor)
|
|
||||||
// toTransform = A (the first incoming operation)
|
|
||||||
// transformBy = B (the second incoming operation)
|
|
||||||
// threeway merge (0, A, B)
|
|
||||||
|
|
||||||
resultOp = ChainPad.Operation.transform0(text, toTransform, transformBy);
|
|
||||||
|
|
||||||
/* if after operational transform we find that no op is necessary
|
|
||||||
return null to ignore this patch */
|
|
||||||
if (!resultOp) { return null; }
|
|
||||||
|
|
||||||
text2 = ChainPad.Operation.apply(transformBy, text);
|
|
||||||
text3 = ChainPad.Operation.apply(resultOp, text2);
|
|
||||||
try {
|
|
||||||
JSON.parse(text3);
|
|
||||||
return resultOp;
|
|
||||||
} catch (e) {
|
|
||||||
console.error(e);
|
|
||||||
var info = DEBUG.ot_parseError = {
|
|
||||||
type: 'resultParseError',
|
|
||||||
resultOp: resultOp,
|
|
||||||
|
|
||||||
toTransform: toTransform,
|
|
||||||
transformBy: transformBy,
|
|
||||||
|
|
||||||
text1: text,
|
|
||||||
text2: text2,
|
|
||||||
text3: text3,
|
|
||||||
error: e
|
|
||||||
};
|
|
||||||
console.log('Debugging info available at `window.REALTIME_DEBUG.ot_parseError`');
|
|
||||||
}
|
|
||||||
} catch (x) {
|
|
||||||
console.error(x);
|
|
||||||
window.DEBUG.ot_applyError = {
|
|
||||||
type: 'resultParseError',
|
|
||||||
resultOp: resultOp,
|
|
||||||
|
|
||||||
toTransform: toTransform,
|
|
||||||
transformBy: transformBy,
|
|
||||||
|
|
||||||
text1: text,
|
|
||||||
text2: text2,
|
|
||||||
text3: text3,
|
|
||||||
error: x
|
|
||||||
};
|
|
||||||
console.log('Debugging info available at `window.REALTIME_DEBUG.ot_applyError`');
|
|
||||||
}
|
|
||||||
|
|
||||||
// returning **null** breaks out of the loop
|
|
||||||
// which transforms conflicting operations
|
|
||||||
// in theory this should prevent us from producing bad JSON
|
|
||||||
return null;
|
|
||||||
};
|
|
||||||
|
|
||||||
return JsonOT;
|
|
||||||
});
|
|
Loading…
Reference in New Issue