MapManager returns null, when reference does not exist
This commit is contained in:
parent
58cefae839
commit
249b712648
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -19,22 +19,22 @@ adaptConnector = function(connector, engine, HB, execution_listener) {
|
|||||||
}
|
}
|
||||||
execution_listener.push(send_);
|
execution_listener.push(send_);
|
||||||
encode_state_vector = function(v) {
|
encode_state_vector = function(v) {
|
||||||
var value, _results;
|
var results, value;
|
||||||
_results = [];
|
results = [];
|
||||||
for (name in v) {
|
for (name in v) {
|
||||||
value = v[name];
|
value = v[name];
|
||||||
_results.push({
|
results.push({
|
||||||
user: name,
|
user: name,
|
||||||
state: value
|
state: value
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
};
|
};
|
||||||
parse_state_vector = function(v) {
|
parse_state_vector = function(v) {
|
||||||
var s, state_vector, _i, _len;
|
var i, len, s, state_vector;
|
||||||
state_vector = {};
|
state_vector = {};
|
||||||
for (_i = 0, _len = v.length; _i < _len; _i++) {
|
for (i = 0, len = v.length; i < len; i++) {
|
||||||
s = v[_i];
|
s = v[i];
|
||||||
state_vector[s.user] = s.state;
|
state_vector[s.user] = s.state;
|
||||||
}
|
}
|
||||||
return state_vector;
|
return state_vector;
|
||||||
|
@ -47,12 +47,12 @@ module.exports = {
|
|||||||
return this.role === "slave";
|
return this.role === "slave";
|
||||||
},
|
},
|
||||||
findNewSyncTarget: function() {
|
findNewSyncTarget: function() {
|
||||||
var c, user, _ref;
|
var c, ref, user;
|
||||||
this.current_sync_target = null;
|
this.current_sync_target = null;
|
||||||
if (this.syncMethod === "syncAll") {
|
if (this.syncMethod === "syncAll") {
|
||||||
_ref = this.connections;
|
ref = this.connections;
|
||||||
for (user in _ref) {
|
for (user in ref) {
|
||||||
c = _ref[user];
|
c = ref[user];
|
||||||
if (!c.is_synced) {
|
if (!c.is_synced) {
|
||||||
this.performSync(user);
|
this.performSync(user);
|
||||||
break;
|
break;
|
||||||
@ -69,12 +69,12 @@ module.exports = {
|
|||||||
return this.findNewSyncTarget();
|
return this.findNewSyncTarget();
|
||||||
},
|
},
|
||||||
userJoined: function(user, role) {
|
userJoined: function(user, role) {
|
||||||
var _base;
|
var base;
|
||||||
if (role == null) {
|
if (role == null) {
|
||||||
throw new Error("Internal: You must specify the role of the joined user! E.g. userJoined('uid:3939','slave')");
|
throw new Error("Internal: You must specify the role of the joined user! E.g. userJoined('uid:3939','slave')");
|
||||||
}
|
}
|
||||||
if ((_base = this.connections)[user] == null) {
|
if ((base = this.connections)[user] == null) {
|
||||||
_base[user] = {};
|
base[user] = {};
|
||||||
}
|
}
|
||||||
this.connections[user].is_synced = false;
|
this.connections[user].is_synced = false;
|
||||||
if ((!this.is_synced) || this.syncMethod === "syncAll") {
|
if ((!this.is_synced) || this.syncMethod === "syncAll") {
|
||||||
@ -116,7 +116,7 @@ module.exports = {
|
|||||||
throw new Error "You must implement send!"
|
throw new Error "You must implement send!"
|
||||||
*/
|
*/
|
||||||
performSync: function(user) {
|
performSync: function(user) {
|
||||||
var hb, o, _hb, _i, _len;
|
var _hb, hb, i, len, o;
|
||||||
if (this.current_sync_target == null) {
|
if (this.current_sync_target == null) {
|
||||||
this.current_sync_target = user;
|
this.current_sync_target = user;
|
||||||
this.send(user, {
|
this.send(user, {
|
||||||
@ -128,8 +128,8 @@ module.exports = {
|
|||||||
this.sent_hb_to_all_users = true;
|
this.sent_hb_to_all_users = true;
|
||||||
hb = this.getHB([]).hb;
|
hb = this.getHB([]).hb;
|
||||||
_hb = [];
|
_hb = [];
|
||||||
for (_i = 0, _len = hb.length; _i < _len; _i++) {
|
for (i = 0, len = hb.length; i < len; i++) {
|
||||||
o = hb[_i];
|
o = hb[i];
|
||||||
_hb.push(o);
|
_hb.push(o);
|
||||||
if (_hb.length > 10) {
|
if (_hb.length > 10) {
|
||||||
this.broadcast({
|
this.broadcast({
|
||||||
@ -147,7 +147,7 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
performSyncWithMaster: function(user) {
|
performSyncWithMaster: function(user) {
|
||||||
var hb, o, _hb, _i, _len;
|
var _hb, hb, i, len, o;
|
||||||
this.current_sync_target = user;
|
this.current_sync_target = user;
|
||||||
this.send(user, {
|
this.send(user, {
|
||||||
sync_step: "getHB",
|
sync_step: "getHB",
|
||||||
@ -156,8 +156,8 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
hb = this.getHB([]).hb;
|
hb = this.getHB([]).hb;
|
||||||
_hb = [];
|
_hb = [];
|
||||||
for (_i = 0, _len = hb.length; _i < _len; _i++) {
|
for (i = 0, len = hb.length; i < len; i++) {
|
||||||
o = hb[_i];
|
o = hb[i];
|
||||||
_hb.push(o);
|
_hb.push(o);
|
||||||
if (_hb.length > 10) {
|
if (_hb.length > 10) {
|
||||||
this.broadcast({
|
this.broadcast({
|
||||||
@ -173,13 +173,13 @@ module.exports = {
|
|||||||
});
|
});
|
||||||
},
|
},
|
||||||
setStateSynced: function() {
|
setStateSynced: function() {
|
||||||
var f, _i, _len, _ref;
|
var f, i, len, ref;
|
||||||
if (!this.is_synced) {
|
if (!this.is_synced) {
|
||||||
this.is_synced = true;
|
this.is_synced = true;
|
||||||
if (this.compute_when_synced != null) {
|
if (this.compute_when_synced != null) {
|
||||||
_ref = this.compute_when_synced;
|
ref = this.compute_when_synced;
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
f = _ref[_i];
|
f = ref[i];
|
||||||
f();
|
f();
|
||||||
}
|
}
|
||||||
delete this.compute_when_synced;
|
delete this.compute_when_synced;
|
||||||
@ -188,15 +188,15 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
receiveMessage: function(sender, res) {
|
receiveMessage: function(sender, res) {
|
||||||
var data, f, hb, o, sendApplyHB, send_again, _hb, _i, _j, _len, _len1, _ref, _results;
|
var _hb, data, f, hb, i, j, len, len1, o, ref, results, sendApplyHB, send_again;
|
||||||
if (res.sync_step == null) {
|
if (res.sync_step == null) {
|
||||||
_ref = this.receive_handlers;
|
ref = this.receive_handlers;
|
||||||
_results = [];
|
results = [];
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
f = _ref[_i];
|
f = ref[i];
|
||||||
_results.push(f(sender, res));
|
results.push(f(sender, res));
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
} else {
|
} else {
|
||||||
if (sender === this.user_id) {
|
if (sender === this.user_id) {
|
||||||
return;
|
return;
|
||||||
@ -218,8 +218,8 @@ module.exports = {
|
|||||||
};
|
};
|
||||||
})(this);
|
})(this);
|
||||||
}
|
}
|
||||||
for (_j = 0, _len1 = hb.length; _j < _len1; _j++) {
|
for (j = 0, len1 = hb.length; j < len1; j++) {
|
||||||
o = hb[_j];
|
o = hb[j];
|
||||||
_hb.push(o);
|
_hb.push(o);
|
||||||
if (_hb.length > 10) {
|
if (_hb.length > 10) {
|
||||||
sendApplyHB({
|
sendApplyHB({
|
||||||
@ -262,25 +262,25 @@ module.exports = {
|
|||||||
parseMessageFromXml: function(m) {
|
parseMessageFromXml: function(m) {
|
||||||
var parse_array, parse_object;
|
var parse_array, parse_object;
|
||||||
parse_array = function(node) {
|
parse_array = function(node) {
|
||||||
var n, _i, _len, _ref, _results;
|
var i, len, n, ref, results;
|
||||||
_ref = node.children;
|
ref = node.children;
|
||||||
_results = [];
|
results = [];
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
n = _ref[_i];
|
n = ref[i];
|
||||||
if (n.getAttribute("isArray") === "true") {
|
if (n.getAttribute("isArray") === "true") {
|
||||||
_results.push(parse_array(n));
|
results.push(parse_array(n));
|
||||||
} else {
|
} else {
|
||||||
_results.push(parse_object(n));
|
results.push(parse_object(n));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
};
|
};
|
||||||
parse_object = function(node) {
|
parse_object = function(node) {
|
||||||
var int, json, n, name, value, _i, _len, _ref, _ref1;
|
var i, int, json, len, n, name, ref, ref1, value;
|
||||||
json = {};
|
json = {};
|
||||||
_ref = node.attrs;
|
ref = node.attrs;
|
||||||
for (name in _ref) {
|
for (name in ref) {
|
||||||
value = _ref[name];
|
value = ref[name];
|
||||||
int = parseInt(value);
|
int = parseInt(value);
|
||||||
if (isNaN(int) || ("" + int) !== value) {
|
if (isNaN(int) || ("" + int) !== value) {
|
||||||
json[name] = value;
|
json[name] = value;
|
||||||
@ -288,9 +288,9 @@ module.exports = {
|
|||||||
json[name] = int;
|
json[name] = int;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ref1 = node.children;
|
ref1 = node.children;
|
||||||
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
for (i = 0, len = ref1.length; i < len; i++) {
|
||||||
n = _ref1[_i];
|
n = ref1[i];
|
||||||
name = n.name;
|
name = n.name;
|
||||||
if (n.getAttribute("isArray") === "true") {
|
if (n.getAttribute("isArray") === "true") {
|
||||||
json[name] = parse_array(n);
|
json[name] = parse_array(n);
|
||||||
@ -321,10 +321,10 @@ module.exports = {
|
|||||||
return m;
|
return m;
|
||||||
};
|
};
|
||||||
encode_array = function(m, array) {
|
encode_array = function(m, array) {
|
||||||
var e, _i, _len;
|
var e, i, len;
|
||||||
m.setAttribute("isArray", "true");
|
m.setAttribute("isArray", "true");
|
||||||
for (_i = 0, _len = array.length; _i < _len; _i++) {
|
for (i = 0, len = array.length; i < len; i++) {
|
||||||
e = array[_i];
|
e = array[i];
|
||||||
if (e.constructor === Object) {
|
if (e.constructor === Object) {
|
||||||
encode_object(m.c("array-element"), e);
|
encode_object(m.c("array-element"), e);
|
||||||
} else {
|
} else {
|
||||||
|
@ -13,9 +13,9 @@ if (typeof window !== "undefined" && window !== null) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Engine = (function() {
|
Engine = (function() {
|
||||||
function Engine(_at_HB, _at_types) {
|
function Engine(HB, types) {
|
||||||
this.HB = _at_HB;
|
this.HB = HB;
|
||||||
this.types = _at_types;
|
this.types = types;
|
||||||
this.unprocessed_ops = [];
|
this.unprocessed_ops = [];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -42,17 +42,17 @@ Engine = (function() {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
Engine.prototype.applyOpsCheckDouble = function(ops_json) {
|
Engine.prototype.applyOpsCheckDouble = function(ops_json) {
|
||||||
var o, _i, _len, _results;
|
var i, len, o, results;
|
||||||
_results = [];
|
results = [];
|
||||||
for (_i = 0, _len = ops_json.length; _i < _len; _i++) {
|
for (i = 0, len = ops_json.length; i < len; i++) {
|
||||||
o = ops_json[_i];
|
o = ops_json[i];
|
||||||
if (this.HB.getOperation(o.uid) == null) {
|
if (this.HB.getOperation(o.uid) == null) {
|
||||||
_results.push(this.applyOp(o));
|
results.push(this.applyOp(o));
|
||||||
} else {
|
} else {
|
||||||
_results.push(void 0);
|
results.push(void 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
};
|
};
|
||||||
|
|
||||||
Engine.prototype.applyOps = function(ops_json) {
|
Engine.prototype.applyOps = function(ops_json) {
|
||||||
@ -60,15 +60,15 @@ Engine = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Engine.prototype.applyOp = function(op_json_array, fromHB) {
|
Engine.prototype.applyOp = function(op_json_array, fromHB) {
|
||||||
var o, op_json, _i, _len;
|
var i, len, o, op_json;
|
||||||
if (fromHB == null) {
|
if (fromHB == null) {
|
||||||
fromHB = false;
|
fromHB = false;
|
||||||
}
|
}
|
||||||
if (op_json_array.constructor !== Array) {
|
if (op_json_array.constructor !== Array) {
|
||||||
op_json_array = [op_json_array];
|
op_json_array = [op_json_array];
|
||||||
}
|
}
|
||||||
for (_i = 0, _len = op_json_array.length; _i < _len; _i++) {
|
for (i = 0, len = op_json_array.length; i < len; i++) {
|
||||||
op_json = op_json_array[_i];
|
op_json = op_json_array[i];
|
||||||
if (fromHB) {
|
if (fromHB) {
|
||||||
op_json.fromHB = "true";
|
op_json.fromHB = "true";
|
||||||
}
|
}
|
||||||
@ -90,13 +90,13 @@ Engine = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Engine.prototype.tryUnprocessed = function() {
|
Engine.prototype.tryUnprocessed = function() {
|
||||||
var old_length, op, unprocessed, _i, _len, _ref;
|
var i, len, old_length, op, ref, unprocessed;
|
||||||
while (true) {
|
while (true) {
|
||||||
old_length = this.unprocessed_ops.length;
|
old_length = this.unprocessed_ops.length;
|
||||||
unprocessed = [];
|
unprocessed = [];
|
||||||
_ref = this.unprocessed_ops;
|
ref = this.unprocessed_ops;
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
op = _ref[_i];
|
op = ref[i];
|
||||||
if (this.HB.getOperation(op) != null) {
|
if (this.HB.getOperation(op) != null) {
|
||||||
|
|
||||||
} else if ((!this.HB.isExpectedOperation(op) && (op.fromHB == null)) || (!op.execute())) {
|
} else if ((!this.HB.isExpectedOperation(op) && (op.fromHB == null)) || (!op.execute())) {
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
var HistoryBuffer,
|
var HistoryBuffer,
|
||||||
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };
|
||||||
|
|
||||||
HistoryBuffer = (function() {
|
HistoryBuffer = (function() {
|
||||||
function HistoryBuffer(_at_user_id) {
|
function HistoryBuffer(user_id1) {
|
||||||
this.user_id = _at_user_id;
|
this.user_id = user_id1;
|
||||||
this.emptyGarbage = __bind(this.emptyGarbage, this);
|
this.emptyGarbage = bind(this.emptyGarbage, this);
|
||||||
this.operation_counter = {};
|
this.operation_counter = {};
|
||||||
this.buffer = {};
|
this.buffer = {};
|
||||||
this.change_listeners = [];
|
this.change_listeners = [];
|
||||||
@ -43,10 +43,10 @@ HistoryBuffer = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.emptyGarbage = function() {
|
HistoryBuffer.prototype.emptyGarbage = function() {
|
||||||
var o, _i, _len, _ref;
|
var i, len, o, ref;
|
||||||
_ref = this.garbage;
|
ref = this.garbage;
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (i = 0, len = ref.length; i < len; i++) {
|
||||||
o = _ref[_i];
|
o = ref[i];
|
||||||
if (typeof o.cleanup === "function") {
|
if (typeof o.cleanup === "function") {
|
||||||
o.cleanup();
|
o.cleanup();
|
||||||
}
|
}
|
||||||
@ -64,18 +64,18 @@ HistoryBuffer = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.addToGarbageCollector = function() {
|
HistoryBuffer.prototype.addToGarbageCollector = function() {
|
||||||
var o, _i, _len, _results;
|
var i, len, o, results;
|
||||||
if (this.performGarbageCollection) {
|
if (this.performGarbageCollection) {
|
||||||
_results = [];
|
results = [];
|
||||||
for (_i = 0, _len = arguments.length; _i < _len; _i++) {
|
for (i = 0, len = arguments.length; i < len; i++) {
|
||||||
o = arguments[_i];
|
o = arguments[i];
|
||||||
if (o != null) {
|
if (o != null) {
|
||||||
_results.push(this.garbage.push(o));
|
results.push(this.garbage.push(o));
|
||||||
} else {
|
} else {
|
||||||
_results.push(void 0);
|
results.push(void 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -92,8 +92,8 @@ HistoryBuffer = (function() {
|
|||||||
return this.garbageCollectTimeoutId = void 0;
|
return this.garbageCollectTimeoutId = void 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.setGarbageCollectTimeout = function(_at_garbageCollectTimeout) {
|
HistoryBuffer.prototype.setGarbageCollectTimeout = function(garbageCollectTimeout) {
|
||||||
this.garbageCollectTimeout = _at_garbageCollectTimeout;
|
this.garbageCollectTimeout = garbageCollectTimeout;
|
||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.getReservedUniqueIdentifier = function() {
|
HistoryBuffer.prototype.getReservedUniqueIdentifier = function() {
|
||||||
@ -104,12 +104,12 @@ HistoryBuffer = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.getOperationCounter = function(user_id) {
|
HistoryBuffer.prototype.getOperationCounter = function(user_id) {
|
||||||
var ctn, res, user, _ref;
|
var ctn, ref, res, user;
|
||||||
if (user_id == null) {
|
if (user_id == null) {
|
||||||
res = {};
|
res = {};
|
||||||
_ref = this.operation_counter;
|
ref = this.operation_counter;
|
||||||
for (user in _ref) {
|
for (user in ref) {
|
||||||
ctn = _ref[user];
|
ctn = ref[user];
|
||||||
res[user] = ctn;
|
res[user] = ctn;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
@ -119,16 +119,16 @@ HistoryBuffer = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.isExpectedOperation = function(o) {
|
HistoryBuffer.prototype.isExpectedOperation = function(o) {
|
||||||
var _base, _name;
|
var base, name;
|
||||||
if ((_base = this.operation_counter)[_name = o.uid.creator] == null) {
|
if ((base = this.operation_counter)[name = o.uid.creator] == null) {
|
||||||
_base[_name] = 0;
|
base[name] = 0;
|
||||||
}
|
}
|
||||||
o.uid.op_number <= this.operation_counter[o.uid.creator];
|
o.uid.op_number <= this.operation_counter[o.uid.creator];
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype._encode = function(state_vector) {
|
HistoryBuffer.prototype._encode = function(state_vector) {
|
||||||
var json, o, o_json, o_next, o_number, o_prev, u_name, unknown, user, _ref;
|
var json, o, o_json, o_next, o_number, o_prev, ref, u_name, unknown, user;
|
||||||
if (state_vector == null) {
|
if (state_vector == null) {
|
||||||
state_vector = {};
|
state_vector = {};
|
||||||
}
|
}
|
||||||
@ -139,9 +139,9 @@ HistoryBuffer = (function() {
|
|||||||
}
|
}
|
||||||
return (state_vector[user] == null) || state_vector[user] <= o_number;
|
return (state_vector[user] == null) || state_vector[user] <= o_number;
|
||||||
};
|
};
|
||||||
_ref = this.buffer;
|
ref = this.buffer;
|
||||||
for (u_name in _ref) {
|
for (u_name in ref) {
|
||||||
user = _ref[u_name];
|
user = ref[u_name];
|
||||||
if (u_name === "_") {
|
if (u_name === "_") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -186,11 +186,11 @@ HistoryBuffer = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.getOperation = function(uid) {
|
HistoryBuffer.prototype.getOperation = function(uid) {
|
||||||
var o, _ref;
|
var o, ref;
|
||||||
if (uid.uid != null) {
|
if (uid.uid != null) {
|
||||||
uid = uid.uid;
|
uid = uid.uid;
|
||||||
}
|
}
|
||||||
o = (_ref = this.buffer[uid.creator]) != null ? _ref[uid.op_number] : void 0;
|
o = (ref = this.buffer[uid.creator]) != null ? ref[uid.op_number] : void 0;
|
||||||
if ((uid.sub != null) && (o != null)) {
|
if ((uid.sub != null) && (o != null)) {
|
||||||
return o.retrieveSub(uid.sub);
|
return o.retrieveSub(uid.sub);
|
||||||
} else {
|
} else {
|
||||||
@ -214,8 +214,8 @@ HistoryBuffer = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.removeOperation = function(o) {
|
HistoryBuffer.prototype.removeOperation = function(o) {
|
||||||
var _ref;
|
var ref;
|
||||||
return (_ref = this.buffer[o.uid.creator]) != null ? delete _ref[o.uid.op_number] : void 0;
|
return (ref = this.buffer[o.uid.creator]) != null ? delete ref[o.uid.op_number] : void 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.setInvokeSyncHandler = function(f) {
|
HistoryBuffer.prototype.setInvokeSyncHandler = function(f) {
|
||||||
@ -225,23 +225,23 @@ HistoryBuffer = (function() {
|
|||||||
HistoryBuffer.prototype.invokeSync = function() {};
|
HistoryBuffer.prototype.invokeSync = function() {};
|
||||||
|
|
||||||
HistoryBuffer.prototype.renewStateVector = function(state_vector) {
|
HistoryBuffer.prototype.renewStateVector = function(state_vector) {
|
||||||
var state, user, _results;
|
var results, state, user;
|
||||||
_results = [];
|
results = [];
|
||||||
for (user in state_vector) {
|
for (user in state_vector) {
|
||||||
state = state_vector[user];
|
state = state_vector[user];
|
||||||
if (((this.operation_counter[user] == null) || (this.operation_counter[user] < state_vector[user])) && (state_vector[user] != null)) {
|
if (((this.operation_counter[user] == null) || (this.operation_counter[user] < state_vector[user])) && (state_vector[user] != null)) {
|
||||||
_results.push(this.operation_counter[user] = state_vector[user]);
|
results.push(this.operation_counter[user] = state_vector[user]);
|
||||||
} else {
|
} else {
|
||||||
_results.push(void 0);
|
results.push(void 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
};
|
};
|
||||||
|
|
||||||
HistoryBuffer.prototype.addToCounter = function(o) {
|
HistoryBuffer.prototype.addToCounter = function(o) {
|
||||||
var _base, _name;
|
var base, name;
|
||||||
if ((_base = this.operation_counter)[_name = o.uid.creator] == null) {
|
if ((base = this.operation_counter)[name = o.uid.creator] == null) {
|
||||||
_base[_name] = 0;
|
base[name] = 0;
|
||||||
}
|
}
|
||||||
if (o.uid.creator !== this.getUserId()) {
|
if (o.uid.creator !== this.getUserId()) {
|
||||||
if (o.uid.op_number === this.operation_counter[o.uid.creator]) {
|
if (o.uid.op_number === this.operation_counter[o.uid.creator]) {
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
var YObject;
|
var YObject;
|
||||||
|
|
||||||
YObject = (function() {
|
YObject = (function() {
|
||||||
function YObject(_at__object) {
|
function YObject(_object) {
|
||||||
var name, val, _ref;
|
var name, ref, val;
|
||||||
this._object = _at__object != null ? _at__object : {};
|
this._object = _object != null ? _object : {};
|
||||||
if (this._object.constructor === Object) {
|
if (this._object.constructor === Object) {
|
||||||
_ref = this._object;
|
ref = this._object;
|
||||||
for (name in _ref) {
|
for (name in ref) {
|
||||||
val = _ref[name];
|
val = ref[name];
|
||||||
if (val.constructor === Object) {
|
if (val.constructor === Object) {
|
||||||
this._object[name] = new YObject(val);
|
this._object[name] = new YObject(val);
|
||||||
}
|
}
|
||||||
@ -20,12 +20,12 @@ YObject = (function() {
|
|||||||
YObject.prototype._name = "Object";
|
YObject.prototype._name = "Object";
|
||||||
|
|
||||||
YObject.prototype._getModel = function(types, ops) {
|
YObject.prototype._getModel = function(types, ops) {
|
||||||
var n, o, _ref;
|
var n, o, ref;
|
||||||
if (this._model == null) {
|
if (this._model == null) {
|
||||||
this._model = new ops.MapManager(this).execute();
|
this._model = new ops.MapManager(this).execute();
|
||||||
_ref = this._object;
|
ref = this._object;
|
||||||
for (n in _ref) {
|
for (n in ref) {
|
||||||
o = _ref[n];
|
o = ref[n];
|
||||||
this._model.val(n, o);
|
this._model.val(n, o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -33,8 +33,8 @@ YObject = (function() {
|
|||||||
return this._model;
|
return this._model;
|
||||||
};
|
};
|
||||||
|
|
||||||
YObject.prototype._setModel = function(_at__model) {
|
YObject.prototype._setModel = function(_model) {
|
||||||
this._model = _at__model;
|
this._model = _model;
|
||||||
return delete this._object;
|
return delete this._object;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ YObject = (function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
YObject.prototype.val = function(name, content) {
|
YObject.prototype.val = function(name, content) {
|
||||||
var n, res, v, _ref;
|
var n, ref, res, v;
|
||||||
if (this._model != null) {
|
if (this._model != null) {
|
||||||
return this._model.val.apply(this._model, arguments);
|
return this._model.val.apply(this._model, arguments);
|
||||||
} else {
|
} else {
|
||||||
@ -59,9 +59,9 @@ YObject = (function() {
|
|||||||
return this._object[name];
|
return this._object[name];
|
||||||
} else {
|
} else {
|
||||||
res = {};
|
res = {};
|
||||||
_ref = this._object;
|
ref = this._object;
|
||||||
for (n in _ref) {
|
for (n in ref) {
|
||||||
v = _ref[n];
|
v = ref[n];
|
||||||
res[n] = v;
|
res[n] = v;
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
var __slice = [].slice,
|
var slice = [].slice,
|
||||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||||
__hasProp = {}.hasOwnProperty;
|
hasProp = {}.hasOwnProperty;
|
||||||
|
|
||||||
module.exports = function() {
|
module.exports = function() {
|
||||||
var execution_listener, ops;
|
var execution_listener, ops;
|
||||||
@ -51,19 +51,19 @@ module.exports = function() {
|
|||||||
} else {
|
} else {
|
||||||
callon = this;
|
callon = this;
|
||||||
}
|
}
|
||||||
return this.forwardEvent.apply(this, [callon].concat(__slice.call(arguments)));
|
return this.forwardEvent.apply(this, [callon].concat(slice.call(arguments)));
|
||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.forwardEvent = function() {
|
Operation.prototype.forwardEvent = function() {
|
||||||
var args, f, op, _i, _len, _ref, _results;
|
var args, f, j, len, op, ref, results;
|
||||||
op = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
|
op = arguments[0], args = 2 <= arguments.length ? slice.call(arguments, 1) : [];
|
||||||
_ref = this.event_listeners;
|
ref = this.event_listeners;
|
||||||
_results = [];
|
results = [];
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (j = 0, len = ref.length; j < len; j++) {
|
||||||
f = _ref[_i];
|
f = ref[j];
|
||||||
_results.push(f.call.apply(f, [op].concat(__slice.call(args))));
|
results.push(f.call.apply(f, [op].concat(slice.call(args))));
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.isDeleted = function() {
|
Operation.prototype.isDeleted = function() {
|
||||||
@ -88,8 +88,8 @@ module.exports = function() {
|
|||||||
return this.deleteAllObservers();
|
return this.deleteAllObservers();
|
||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.setParent = function(_at_parent) {
|
Operation.prototype.setParent = function(parent1) {
|
||||||
this.parent = _at_parent;
|
this.parent = parent1;
|
||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.getParent = function() {
|
Operation.prototype.getParent = function() {
|
||||||
@ -112,26 +112,26 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.cloneUid = function() {
|
Operation.prototype.cloneUid = function() {
|
||||||
var n, uid, v, _ref;
|
var n, ref, uid, v;
|
||||||
uid = {};
|
uid = {};
|
||||||
_ref = this.getUid();
|
ref = this.getUid();
|
||||||
for (n in _ref) {
|
for (n in ref) {
|
||||||
v = _ref[n];
|
v = ref[n];
|
||||||
uid[n] = v;
|
uid[n] = v;
|
||||||
}
|
}
|
||||||
return uid;
|
return uid;
|
||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.execute = function() {
|
Operation.prototype.execute = function() {
|
||||||
var l, _i, _len;
|
var j, l, len;
|
||||||
this.is_executed = true;
|
this.is_executed = true;
|
||||||
if (this.uid == null) {
|
if (this.uid == null) {
|
||||||
this.uid = this.HB.getNextOperationIdentifier();
|
this.uid = this.HB.getNextOperationIdentifier();
|
||||||
}
|
}
|
||||||
if (this.uid.noOperation == null) {
|
if (this.uid.noOperation == null) {
|
||||||
this.HB.addOperation(this);
|
this.HB.addOperation(this);
|
||||||
for (_i = 0, _len = execution_listener.length; _i < _len; _i++) {
|
for (j = 0, len = execution_listener.length; j < len; j++) {
|
||||||
l = execution_listener[_i];
|
l = execution_listener[j];
|
||||||
l(this._encode());
|
l(this._encode());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -168,12 +168,12 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.validateSavedOperations = function() {
|
Operation.prototype.validateSavedOperations = function() {
|
||||||
var name, op, op_uid, success, uninstantiated, _ref;
|
var name, op, op_uid, ref, success, uninstantiated;
|
||||||
uninstantiated = {};
|
uninstantiated = {};
|
||||||
success = this;
|
success = this;
|
||||||
_ref = this.unchecked;
|
ref = this.unchecked;
|
||||||
for (name in _ref) {
|
for (name in ref) {
|
||||||
op_uid = _ref[name];
|
op_uid = ref[name];
|
||||||
op = this.HB.getOperation(op_uid);
|
op = this.HB.getOperation(op_uid);
|
||||||
if (op) {
|
if (op) {
|
||||||
this[name] = op;
|
this[name] = op;
|
||||||
@ -190,28 +190,29 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Operation.prototype.getCustomType = function() {
|
Operation.prototype.getCustomType = function() {
|
||||||
var Type, t, _i, _len, _ref;
|
var Type, j, len, ref, t;
|
||||||
if (this.custom_type == null) {
|
if (this.custom_type == null) {
|
||||||
throw new Error("This operation was not initialized with a custom type");
|
return this;
|
||||||
}
|
} else {
|
||||||
if (this.custom_type.constructor === String) {
|
if (this.custom_type.constructor === String) {
|
||||||
Type = this.custom_types;
|
Type = this.custom_types;
|
||||||
_ref = this.custom_type.split(".");
|
ref = this.custom_type.split(".");
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (j = 0, len = ref.length; j < len; j++) {
|
||||||
t = _ref[_i];
|
t = ref[j];
|
||||||
Type = Type[t];
|
Type = Type[t];
|
||||||
|
}
|
||||||
|
this.custom_type = new Type();
|
||||||
|
this.custom_type._setModel(this);
|
||||||
}
|
}
|
||||||
this.custom_type = new Type();
|
return this.custom_type;
|
||||||
this.custom_type._setModel(this);
|
|
||||||
}
|
}
|
||||||
return this.custom_type;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return Operation;
|
return Operation;
|
||||||
|
|
||||||
})();
|
})();
|
||||||
ops.Delete = (function(_super) {
|
ops.Delete = (function(superClass) {
|
||||||
__extends(Delete, _super);
|
extend(Delete, superClass);
|
||||||
|
|
||||||
function Delete(custom_type, uid, deletes) {
|
function Delete(custom_type, uid, deletes) {
|
||||||
this.saveOperation('deletes', deletes);
|
this.saveOperation('deletes', deletes);
|
||||||
@ -249,8 +250,8 @@ module.exports = function() {
|
|||||||
uid = o['uid'], deletes_uid = o['deletes'];
|
uid = o['uid'], deletes_uid = o['deletes'];
|
||||||
return new this(null, uid, deletes_uid);
|
return new this(null, uid, deletes_uid);
|
||||||
};
|
};
|
||||||
ops.Insert = (function(_super) {
|
ops.Insert = (function(superClass) {
|
||||||
__extends(Insert, _super);
|
extend(Insert, superClass);
|
||||||
|
|
||||||
function Insert(custom_type, content, parent, uid, prev_cl, next_cl, origin) {
|
function Insert(custom_type, content, parent, uid, prev_cl, next_cl, origin) {
|
||||||
if (content === void 0) {
|
if (content === void 0) {
|
||||||
@ -304,7 +305,7 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Insert.prototype.applyDelete = function(o) {
|
Insert.prototype.applyDelete = function(o) {
|
||||||
var callLater, garbagecollect, _ref;
|
var callLater, garbagecollect, ref;
|
||||||
if (this.deleted_by == null) {
|
if (this.deleted_by == null) {
|
||||||
this.deleted_by = [];
|
this.deleted_by = [];
|
||||||
}
|
}
|
||||||
@ -323,17 +324,17 @@ module.exports = function() {
|
|||||||
if (callLater) {
|
if (callLater) {
|
||||||
this.parent.callOperationSpecificDeleteEvents(this, o);
|
this.parent.callOperationSpecificDeleteEvents(this, o);
|
||||||
}
|
}
|
||||||
if ((_ref = this.prev_cl) != null ? _ref.isDeleted() : void 0) {
|
if ((ref = this.prev_cl) != null ? ref.isDeleted() : void 0) {
|
||||||
return this.prev_cl.applyDelete();
|
return this.prev_cl.applyDelete();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Insert.prototype.cleanup = function() {
|
Insert.prototype.cleanup = function() {
|
||||||
var d, o, _i, _len, _ref;
|
var d, j, len, o, ref;
|
||||||
if (this.next_cl.isDeleted()) {
|
if (this.next_cl.isDeleted()) {
|
||||||
_ref = this.deleted_by;
|
ref = this.deleted_by;
|
||||||
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
|
for (j = 0, len = ref.length; j < len; j++) {
|
||||||
d = _ref[_i];
|
d = ref[j];
|
||||||
d.cleanup();
|
d.cleanup();
|
||||||
}
|
}
|
||||||
o = this.next_cl;
|
o = this.next_cl;
|
||||||
@ -371,14 +372,14 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Insert.prototype.execute = function() {
|
Insert.prototype.execute = function() {
|
||||||
var distance_to_origin, i, o, _base;
|
var base, distance_to_origin, i, o;
|
||||||
if (!this.validateSavedOperations()) {
|
if (!this.validateSavedOperations()) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
if (this.content instanceof ops.Operation) {
|
if (this.content instanceof ops.Operation) {
|
||||||
this.content.insert_parent = this;
|
this.content.insert_parent = this;
|
||||||
if ((_base = this.content).referenced_by == null) {
|
if ((base = this.content).referenced_by == null) {
|
||||||
_base.referenced_by = 0;
|
base.referenced_by = 0;
|
||||||
}
|
}
|
||||||
this.content.referenced_by++;
|
this.content.referenced_by++;
|
||||||
}
|
}
|
||||||
@ -452,7 +453,7 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Insert.prototype._encode = function(json) {
|
Insert.prototype._encode = function(json) {
|
||||||
var _ref;
|
var ref;
|
||||||
if (json == null) {
|
if (json == null) {
|
||||||
json = {};
|
json = {};
|
||||||
}
|
}
|
||||||
@ -464,7 +465,7 @@ module.exports = function() {
|
|||||||
} else if (this.origin !== this.prev_cl) {
|
} else if (this.origin !== this.prev_cl) {
|
||||||
json.origin = this.origin.getUid();
|
json.origin = this.origin.getUid();
|
||||||
}
|
}
|
||||||
if (((_ref = this.content) != null ? _ref.getUid : void 0) != null) {
|
if (((ref = this.content) != null ? ref.getUid : void 0) != null) {
|
||||||
json['content'] = this.content.getUid();
|
json['content'] = this.content.getUid();
|
||||||
} else {
|
} else {
|
||||||
json['content'] = JSON.stringify(this.content);
|
json['content'] = JSON.stringify(this.content);
|
||||||
@ -483,8 +484,8 @@ module.exports = function() {
|
|||||||
}
|
}
|
||||||
return new this(null, content, parent, uid, prev, next, origin);
|
return new this(null, content, parent, uid, prev, next, origin);
|
||||||
};
|
};
|
||||||
ops.Delimiter = (function(_super) {
|
ops.Delimiter = (function(superClass) {
|
||||||
__extends(Delimiter, _super);
|
extend(Delimiter, superClass);
|
||||||
|
|
||||||
function Delimiter(prev_cl, next_cl, origin) {
|
function Delimiter(prev_cl, next_cl, origin) {
|
||||||
this.saveOperation('prev_cl', prev_cl);
|
this.saveOperation('prev_cl', prev_cl);
|
||||||
@ -513,10 +514,10 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Delimiter.prototype.execute = function() {
|
Delimiter.prototype.execute = function() {
|
||||||
var _ref, _ref1;
|
var ref, ref1;
|
||||||
if (((_ref = this.unchecked) != null ? _ref['next_cl'] : void 0) != null) {
|
if (((ref = this.unchecked) != null ? ref['next_cl'] : void 0) != null) {
|
||||||
return Delimiter.__super__.execute.apply(this, arguments);
|
return Delimiter.__super__.execute.apply(this, arguments);
|
||||||
} else if ((_ref1 = this.unchecked) != null ? _ref1['prev_cl'] : void 0) {
|
} else if ((ref1 = this.unchecked) != null ? ref1['prev_cl'] : void 0) {
|
||||||
if (this.validateSavedOperations()) {
|
if (this.validateSavedOperations()) {
|
||||||
if (this.prev_cl.next_cl != null) {
|
if (this.prev_cl.next_cl != null) {
|
||||||
throw new Error("Probably duplicated operations");
|
throw new Error("Probably duplicated operations");
|
||||||
@ -536,12 +537,12 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
Delimiter.prototype._encode = function() {
|
Delimiter.prototype._encode = function() {
|
||||||
var _ref, _ref1;
|
var ref, ref1;
|
||||||
return {
|
return {
|
||||||
'type': this.type,
|
'type': this.type,
|
||||||
'uid': this.getUid(),
|
'uid': this.getUid(),
|
||||||
'prev': (_ref = this.prev_cl) != null ? _ref.getUid() : void 0,
|
'prev': (ref = this.prev_cl) != null ? ref.getUid() : void 0,
|
||||||
'next': (_ref1 = this.next_cl) != null ? _ref1.getUid() : void 0
|
'next': (ref1 = this.next_cl) != null ? ref1.getUid() : void 0
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
var basic_ops_uninitialized,
|
var basic_ops_uninitialized,
|
||||||
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
extend = function(child, parent) { for (var key in parent) { if (hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
||||||
__hasProp = {}.hasOwnProperty;
|
hasProp = {}.hasOwnProperty;
|
||||||
|
|
||||||
basic_ops_uninitialized = require("./Basic");
|
basic_ops_uninitialized = require("./Basic");
|
||||||
|
|
||||||
@ -8,8 +8,8 @@ module.exports = function() {
|
|||||||
var basic_ops, ops;
|
var basic_ops, ops;
|
||||||
basic_ops = basic_ops_uninitialized();
|
basic_ops = basic_ops_uninitialized();
|
||||||
ops = basic_ops.operations;
|
ops = basic_ops.operations;
|
||||||
ops.MapManager = (function(_super) {
|
ops.MapManager = (function(superClass) {
|
||||||
__extends(MapManager, _super);
|
extend(MapManager, superClass);
|
||||||
|
|
||||||
function MapManager(custom_type, uid) {
|
function MapManager(custom_type, uid) {
|
||||||
this._map = {};
|
this._map = {};
|
||||||
@ -19,10 +19,10 @@ module.exports = function() {
|
|||||||
MapManager.prototype.type = "MapManager";
|
MapManager.prototype.type = "MapManager";
|
||||||
|
|
||||||
MapManager.prototype.applyDelete = function() {
|
MapManager.prototype.applyDelete = function() {
|
||||||
var name, p, _ref;
|
var name, p, ref;
|
||||||
_ref = this._map;
|
ref = this._map;
|
||||||
for (name in _ref) {
|
for (name in ref) {
|
||||||
p = _ref[name];
|
p = ref[name];
|
||||||
p.applyDelete();
|
p.applyDelete();
|
||||||
}
|
}
|
||||||
return MapManager.__super__.applyDelete.call(this);
|
return MapManager.__super__.applyDelete.call(this);
|
||||||
@ -33,17 +33,17 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
MapManager.prototype.map = function(f) {
|
MapManager.prototype.map = function(f) {
|
||||||
var n, v, _ref;
|
var n, ref, v;
|
||||||
_ref = this._map;
|
ref = this._map;
|
||||||
for (n in _ref) {
|
for (n in ref) {
|
||||||
v = _ref[n];
|
v = ref[n];
|
||||||
f(n, v);
|
f(n, v);
|
||||||
}
|
}
|
||||||
return void 0;
|
return void 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
MapManager.prototype.val = function(name, content) {
|
MapManager.prototype.val = function(name, content) {
|
||||||
var o, prop, rep, res, result, _ref;
|
var o, prop, ref, rep, res, result;
|
||||||
if (arguments.length > 1) {
|
if (arguments.length > 1) {
|
||||||
if ((content != null) && (content._getModel != null)) {
|
if ((content != null) && (content._getModel != null)) {
|
||||||
rep = content._getModel(this.custom_types, this.operations);
|
rep = content._getModel(this.custom_types, this.operations);
|
||||||
@ -66,9 +66,9 @@ module.exports = function() {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
result = {};
|
result = {};
|
||||||
_ref = this._map;
|
ref = this._map;
|
||||||
for (name in _ref) {
|
for (name in ref) {
|
||||||
o = _ref[name];
|
o = ref[name];
|
||||||
if (!o.isContentDeleted()) {
|
if (!o.isContentDeleted()) {
|
||||||
result[name] = o.val();
|
result[name] = o.val();
|
||||||
}
|
}
|
||||||
@ -78,9 +78,9 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
MapManager.prototype["delete"] = function(name) {
|
MapManager.prototype["delete"] = function(name) {
|
||||||
var _ref;
|
var ref;
|
||||||
if ((_ref = this._map[name]) != null) {
|
if ((ref = this._map[name]) != null) {
|
||||||
_ref.deleteContent();
|
ref.deleteContent();
|
||||||
}
|
}
|
||||||
return this;
|
return this;
|
||||||
};
|
};
|
||||||
@ -113,8 +113,8 @@ module.exports = function() {
|
|||||||
uid = json['uid'], custom_type = json['custom_type'];
|
uid = json['uid'], custom_type = json['custom_type'];
|
||||||
return new this(custom_type, uid);
|
return new this(custom_type, uid);
|
||||||
};
|
};
|
||||||
ops.ListManager = (function(_super) {
|
ops.ListManager = (function(superClass) {
|
||||||
__extends(ListManager, _super);
|
extend(ListManager, superClass);
|
||||||
|
|
||||||
function ListManager(custom_type, uid) {
|
function ListManager(custom_type, uid) {
|
||||||
this.beginning = new ops.Delimiter(void 0, void 0);
|
this.beginning = new ops.Delimiter(void 0, void 0);
|
||||||
@ -142,25 +142,25 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ListManager.prototype.toJson = function(transform_to_value) {
|
ListManager.prototype.toJson = function(transform_to_value) {
|
||||||
var i, o, val, _i, _len, _results;
|
var i, j, len, o, results, val;
|
||||||
if (transform_to_value == null) {
|
if (transform_to_value == null) {
|
||||||
transform_to_value = false;
|
transform_to_value = false;
|
||||||
}
|
}
|
||||||
val = this.val();
|
val = this.val();
|
||||||
_results = [];
|
results = [];
|
||||||
for (o = _i = 0, _len = val.length; _i < _len; o = ++_i) {
|
for (o = j = 0, len = val.length; j < len; o = ++j) {
|
||||||
i = val[o];
|
i = val[o];
|
||||||
if (o instanceof ops.Object) {
|
if (o instanceof ops.Object) {
|
||||||
_results.push(o.toJson(transform_to_value));
|
results.push(o.toJson(transform_to_value));
|
||||||
} else if (o instanceof ops.ListManager) {
|
} else if (o instanceof ops.ListManager) {
|
||||||
_results.push(o.toJson(transform_to_value));
|
results.push(o.toJson(transform_to_value));
|
||||||
} else if (transform_to_value && o instanceof ops.Operation) {
|
} else if (transform_to_value && o instanceof ops.Operation) {
|
||||||
_results.push(o.val());
|
results.push(o.val());
|
||||||
} else {
|
} else {
|
||||||
_results.push(o);
|
results.push(o);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
};
|
};
|
||||||
|
|
||||||
ListManager.prototype.execute = function() {
|
ListManager.prototype.execute = function() {
|
||||||
@ -240,7 +240,7 @@ module.exports = function() {
|
|||||||
if (!(o instanceof ops.Delimiter)) {
|
if (!(o instanceof ops.Delimiter)) {
|
||||||
return o;
|
return o;
|
||||||
} else {
|
} else {
|
||||||
throw new Error("this position does not exist");
|
return null;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
throw new Error("you must specify a position parameter");
|
throw new Error("you must specify a position parameter");
|
||||||
@ -274,7 +274,7 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ListManager.prototype.insertAfter = function(left, contents) {
|
ListManager.prototype.insertAfter = function(left, contents) {
|
||||||
var c, right, tmp, _i, _len;
|
var c, j, len, right, tmp;
|
||||||
right = left.next_cl;
|
right = left.next_cl;
|
||||||
while (right.isDeleted()) {
|
while (right.isDeleted()) {
|
||||||
right = right.next_cl;
|
right = right.next_cl;
|
||||||
@ -283,8 +283,8 @@ module.exports = function() {
|
|||||||
if (contents instanceof ops.Operation) {
|
if (contents instanceof ops.Operation) {
|
||||||
(new ops.Insert(null, content, void 0, void 0, left, right)).execute();
|
(new ops.Insert(null, content, void 0, void 0, left, right)).execute();
|
||||||
} else {
|
} else {
|
||||||
for (_i = 0, _len = contents.length; _i < _len; _i++) {
|
for (j = 0, len = contents.length; j < len; j++) {
|
||||||
c = contents[_i];
|
c = contents[j];
|
||||||
if ((c != null) && (c._name != null) && (c._getModel != null)) {
|
if ((c != null) && (c._name != null) && (c._getModel != null)) {
|
||||||
c = c._getModel(this.custom_types, this.operations);
|
c = c._getModel(this.custom_types, this.operations);
|
||||||
}
|
}
|
||||||
@ -302,13 +302,13 @@ module.exports = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
ListManager.prototype["delete"] = function(position, length) {
|
ListManager.prototype["delete"] = function(position, length) {
|
||||||
var d, delete_ops, i, o, _i;
|
var d, delete_ops, i, j, o, ref;
|
||||||
if (length == null) {
|
if (length == null) {
|
||||||
length = 1;
|
length = 1;
|
||||||
}
|
}
|
||||||
o = this.getOperationByPosition(position + 1);
|
o = this.getOperationByPosition(position + 1);
|
||||||
delete_ops = [];
|
delete_ops = [];
|
||||||
for (i = _i = 0; 0 <= length ? _i < length : _i > length; i = 0 <= length ? ++_i : --_i) {
|
for (i = j = 0, ref = length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
|
||||||
if (o instanceof ops.Delimiter) {
|
if (o instanceof ops.Delimiter) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -363,11 +363,11 @@ module.exports = function() {
|
|||||||
uid = json['uid'], custom_type = json['custom_type'];
|
uid = json['uid'], custom_type = json['custom_type'];
|
||||||
return new this(custom_type, uid);
|
return new this(custom_type, uid);
|
||||||
};
|
};
|
||||||
ops.Composition = (function(_super) {
|
ops.Composition = (function(superClass) {
|
||||||
__extends(Composition, _super);
|
extend(Composition, superClass);
|
||||||
|
|
||||||
function Composition(custom_type, _at_composition_value, uid, composition_ref) {
|
function Composition(custom_type, composition_value1, uid, composition_ref) {
|
||||||
this.composition_value = _at_composition_value;
|
this.composition_value = composition_value1;
|
||||||
Composition.__super__.constructor.call(this, custom_type, uid);
|
Composition.__super__.constructor.call(this, custom_type, uid);
|
||||||
if (composition_ref) {
|
if (composition_ref) {
|
||||||
this.saveOperation('composition_ref', composition_ref);
|
this.saveOperation('composition_ref', composition_ref);
|
||||||
@ -390,7 +390,7 @@ module.exports = function() {
|
|||||||
o = this.end.prev_cl;
|
o = this.end.prev_cl;
|
||||||
while (o !== op) {
|
while (o !== op) {
|
||||||
this.getCustomType()._unapply(o.undo_delta);
|
this.getCustomType()._unapply(o.undo_delta);
|
||||||
o = o.next_cl;
|
o = o.prev_cl;
|
||||||
}
|
}
|
||||||
while (o !== this.end) {
|
while (o !== this.end) {
|
||||||
o.undo_delta = this.getCustomType()._apply(o.content);
|
o.undo_delta = this.getCustomType()._apply(o.content);
|
||||||
@ -431,12 +431,12 @@ module.exports = function() {
|
|||||||
uid = json['uid'], custom_type = json['custom_type'], composition_value = json['composition_value'], composition_ref = json['composition_ref'];
|
uid = json['uid'], custom_type = json['custom_type'], composition_value = json['composition_value'], composition_ref = json['composition_ref'];
|
||||||
return new this(custom_type, JSON.parse(composition_value), uid, composition_ref);
|
return new this(custom_type, JSON.parse(composition_value), uid, composition_ref);
|
||||||
};
|
};
|
||||||
ops.ReplaceManager = (function(_super) {
|
ops.ReplaceManager = (function(superClass) {
|
||||||
__extends(ReplaceManager, _super);
|
extend(ReplaceManager, superClass);
|
||||||
|
|
||||||
function ReplaceManager(custom_type, _at_event_properties, _at_event_this, uid) {
|
function ReplaceManager(custom_type, event_properties1, event_this1, uid) {
|
||||||
this.event_properties = _at_event_properties;
|
this.event_properties = event_properties1;
|
||||||
this.event_this = _at_event_this;
|
this.event_this = event_this1;
|
||||||
if (this.event_properties['object'] == null) {
|
if (this.event_properties['object'] == null) {
|
||||||
this.event_properties['object'] = this.event_this.getCustomType();
|
this.event_properties['object'] = this.event_this.getCustomType();
|
||||||
}
|
}
|
||||||
@ -446,13 +446,13 @@ module.exports = function() {
|
|||||||
ReplaceManager.prototype.type = "ReplaceManager";
|
ReplaceManager.prototype.type = "ReplaceManager";
|
||||||
|
|
||||||
ReplaceManager.prototype.callEventDecorator = function(events) {
|
ReplaceManager.prototype.callEventDecorator = function(events) {
|
||||||
var event, name, prop, _i, _len, _ref;
|
var event, j, len, name, prop, ref;
|
||||||
if (!this.isDeleted()) {
|
if (!this.isDeleted()) {
|
||||||
for (_i = 0, _len = events.length; _i < _len; _i++) {
|
for (j = 0, len = events.length; j < len; j++) {
|
||||||
event = events[_i];
|
event = events[j];
|
||||||
_ref = this.event_properties;
|
ref = this.event_properties;
|
||||||
for (name in _ref) {
|
for (name in ref) {
|
||||||
prop = _ref[name];
|
prop = ref[name];
|
||||||
event[name] = prop;
|
event[name] = prop;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,42 +3,42 @@ var Y, bindToChildren;
|
|||||||
Y = require('./y');
|
Y = require('./y');
|
||||||
|
|
||||||
bindToChildren = function(that) {
|
bindToChildren = function(that) {
|
||||||
var attr, i, _i, _ref;
|
var attr, i, j, ref;
|
||||||
for (i = _i = 0, _ref = that.children.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {
|
for (i = j = 0, ref = that.children.length; 0 <= ref ? j < ref : j > ref; i = 0 <= ref ? ++j : --j) {
|
||||||
attr = that.children.item(i);
|
attr = that.children.item(i);
|
||||||
if (attr.name != null) {
|
if (attr.name != null) {
|
||||||
attr.val = that.val.val(attr.name);
|
attr.val = that.val.val(attr.name);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return that.val.observe(function(events) {
|
return that.val.observe(function(events) {
|
||||||
var event, newVal, _j, _len, _results;
|
var event, k, len, newVal, results;
|
||||||
_results = [];
|
results = [];
|
||||||
for (_j = 0, _len = events.length; _j < _len; _j++) {
|
for (k = 0, len = events.length; k < len; k++) {
|
||||||
event = events[_j];
|
event = events[k];
|
||||||
if (event.name != null) {
|
if (event.name != null) {
|
||||||
_results.push((function() {
|
results.push((function() {
|
||||||
var _k, _ref1, _results1;
|
var l, ref1, results1;
|
||||||
_results1 = [];
|
results1 = [];
|
||||||
for (i = _k = 0, _ref1 = that.children.length; 0 <= _ref1 ? _k < _ref1 : _k > _ref1; i = 0 <= _ref1 ? ++_k : --_k) {
|
for (i = l = 0, ref1 = that.children.length; 0 <= ref1 ? l < ref1 : l > ref1; i = 0 <= ref1 ? ++l : --l) {
|
||||||
attr = that.children.item(i);
|
attr = that.children.item(i);
|
||||||
if ((attr.name != null) && attr.name === event.name) {
|
if ((attr.name != null) && attr.name === event.name) {
|
||||||
newVal = that.val.val(attr.name);
|
newVal = that.val.val(attr.name);
|
||||||
if (attr.val !== newVal) {
|
if (attr.val !== newVal) {
|
||||||
_results1.push(attr.val = newVal);
|
results1.push(attr.val = newVal);
|
||||||
} else {
|
} else {
|
||||||
_results1.push(void 0);
|
results1.push(void 0);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
_results1.push(void 0);
|
results1.push(void 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _results1;
|
return results1;
|
||||||
})());
|
})());
|
||||||
} else {
|
} else {
|
||||||
_results.push(void 0);
|
results.push(void 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return _results;
|
return results;
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -78,13 +78,13 @@ Polymer("y-property", {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
valChanged: function() {
|
valChanged: function() {
|
||||||
var _ref;
|
var ref;
|
||||||
if ((this.val != null) && (this.name != null)) {
|
if ((this.val != null) && (this.name != null)) {
|
||||||
if (this.val.constructor === Object) {
|
if (this.val.constructor === Object) {
|
||||||
return this.val = this.parentElement.val.val(this.name, this.val).val(this.name);
|
return this.val = this.parentElement.val.val(this.name, this.val).val(this.name);
|
||||||
} else if (this.val.type === "Object") {
|
} else if (this.val.type === "Object") {
|
||||||
return bindToChildren(this);
|
return bindToChildren(this);
|
||||||
} else if ((((_ref = this.parentElement.val) != null ? _ref.val : void 0) != null) && this.val !== this.parentElement.val.val(this.name)) {
|
} else if ((((ref = this.parentElement.val) != null ? ref.val : void 0) != null) && this.val !== this.parentElement.val.val(this.name)) {
|
||||||
return this.parentElement.val.val(this.name, this.val);
|
return this.parentElement.val.val(this.name, this.val);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
24928
build/test/richtext-test.js
Normal file
24928
build/test/richtext-test.js
Normal file
File diff suppressed because one or more lines are too long
19953
build/test/selections-test.js
Normal file
19953
build/test/selections-test.js
Normal file
File diff suppressed because one or more lines are too long
@ -48,7 +48,7 @@ module.exports = ()->
|
|||||||
# @see Operation.observe
|
# @see Operation.observe
|
||||||
#
|
#
|
||||||
# @overload unobserve(event, f)
|
# @overload unobserve(event, f)
|
||||||
# @param f {Function} The function that you want to delete
|
# @param f {Function} The function that you want to delete
|
||||||
unobserve: (f)->
|
unobserve: (f)->
|
||||||
@event_listeners = @event_listeners.filter (g)->
|
@event_listeners = @event_listeners.filter (g)->
|
||||||
f isnt g
|
f isnt g
|
||||||
@ -188,7 +188,7 @@ module.exports = ()->
|
|||||||
# Every instance of $Operation must have an $execute function.
|
# Every instance of $Operation must have an $execute function.
|
||||||
# We use duck-typing to check if op is instantiated since there
|
# We use duck-typing to check if op is instantiated since there
|
||||||
# could exist multiple classes of $Operation
|
# could exist multiple classes of $Operation
|
||||||
#
|
#
|
||||||
if not op?
|
if not op?
|
||||||
# nop
|
# nop
|
||||||
else if op.execute? or not (op.op_number? and op.creator?)
|
else if op.execute? or not (op.op_number? and op.creator?)
|
||||||
@ -212,7 +212,7 @@ module.exports = ()->
|
|||||||
success = @
|
success = @
|
||||||
for name, op_uid of @unchecked
|
for name, op_uid of @unchecked
|
||||||
op = @HB.getOperation op_uid
|
op = @HB.getOperation op_uid
|
||||||
if op
|
if op
|
||||||
@[name] = op
|
@[name] = op
|
||||||
else
|
else
|
||||||
uninstantiated[name] = op_uid
|
uninstantiated[name] = op_uid
|
||||||
@ -224,15 +224,17 @@ module.exports = ()->
|
|||||||
|
|
||||||
getCustomType: ()->
|
getCustomType: ()->
|
||||||
if not @custom_type?
|
if not @custom_type?
|
||||||
throw new Error "This operation was not initialized with a custom type"
|
# throw new Error "This operation was not initialized with a custom type"
|
||||||
if @custom_type.constructor is String
|
@
|
||||||
# has not been initialized yet (only the name is specified)
|
else
|
||||||
Type = @custom_types
|
if @custom_type.constructor is String
|
||||||
for t in @custom_type.split(".")
|
# has not been initialized yet (only the name is specified)
|
||||||
Type = Type[t]
|
Type = @custom_types
|
||||||
@custom_type = new Type()
|
for t in @custom_type.split(".")
|
||||||
@custom_type._setModel @
|
Type = Type[t]
|
||||||
@custom_type
|
@custom_type = new Type()
|
||||||
|
@custom_type._setModel @
|
||||||
|
@custom_type
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
@ -606,7 +608,3 @@ module.exports = ()->
|
|||||||
'operations' : ops
|
'operations' : ops
|
||||||
'execution_listener' : execution_listener
|
'execution_listener' : execution_listener
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -197,7 +197,8 @@ module.exports = ()->
|
|||||||
if not (o instanceof ops.Delimiter)
|
if not (o instanceof ops.Delimiter)
|
||||||
o
|
o
|
||||||
else
|
else
|
||||||
throw new Error "this position does not exist"
|
null
|
||||||
|
# throw new Error "this position does not exist"
|
||||||
else
|
else
|
||||||
throw new Error "you must specify a position parameter"
|
throw new Error "you must specify a position parameter"
|
||||||
|
|
||||||
@ -488,9 +489,3 @@ module.exports = ()->
|
|||||||
|
|
||||||
|
|
||||||
basic_ops
|
basic_ops
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
Loading…
x
Reference in New Issue
Block a user