references & composition value

fixing bugs with references
composition type parses now composition value
This commit is contained in:
Kevin Jahns
2015-04-17 00:36:52 +02:00
parent 757bb118ce
commit f44f463e9d
18 changed files with 6574 additions and 23119 deletions
File diff suppressed because one or more lines are too long
+25 -12
View File
File diff suppressed because one or more lines are too long
+7 -7
View File
@@ -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;
+44 -44
View File
@@ -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 {
+17 -17
View File
@@ -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())) {
+40 -40
View File
@@ -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]) {
+16 -16
View File
@@ -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;
+53 -53
View File
@@ -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,15 +190,15 @@ 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) {
return this; return this;
} else { } 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 = new Type();
@@ -211,8 +211,8 @@ module.exports = function() {
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);
@@ -250,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) {
@@ -313,7 +313,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 = [];
} }
@@ -332,17 +332,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;
@@ -380,14 +380,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++;
} }
@@ -461,19 +461,19 @@ 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 = {};
} }
json.prev = this.prev_cl.getUid(); json.prev = this.prev_cl.getUid();
json.next = this.next_cl.getUid(); json.next = this.next_cl.getUid();
json.parent = this.parent.getUid();
if (this.origin.type === "Delimiter") { if (this.origin.type === "Delimiter") {
json.origin = "Delimiter"; json.origin = "Delimiter";
} 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) { json.parent = this.parent.getUid();
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);
@@ -492,8 +492,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);
@@ -522,10 +522,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");
@@ -545,12 +545,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
}; };
}; };
+70 -57
View File
@@ -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() {
@@ -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,27 +363,36 @@ 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_value, uid, tmp_composition_ref) {
this.composition_value = _at_composition_value;
Composition.__super__.constructor.call(this, custom_type, uid); Composition.__super__.constructor.call(this, custom_type, uid);
if (composition_ref) { if (tmp_composition_ref != null) {
this.saveOperation('composition_ref', composition_ref); this.tmp_composition_ref = tmp_composition_ref;
} else { } else {
this.composition_ref = this.beginning; this.composition_ref = this.end.prev_cl;
} }
} }
Composition.prototype.type = "Composition"; Composition.prototype.type = "Composition";
Composition.prototype.val = function() {
return this.composition_value;
};
Composition.prototype.callOperationSpecificInsertEvents = function(op) { Composition.prototype.callOperationSpecificInsertEvents = function(op) {
var o; var o;
if (this.tmp_composition_ref != null) {
if (op.uid.creator === this.tmp_composition_ref.creator && op.uid.op_number === this.tmp_composition_ref.op_number) {
this.composition_ref = op;
delete this.tmp_composition_ref;
o = op.next_cl;
while (o.next_cl != null) {
if (!o.isDeleted()) {
this.callOperationSpecificInsertEvents(o);
}
o = o.next_cl;
}
}
return;
}
if (this.composition_ref.next_cl === op) { if (this.composition_ref.next_cl === op) {
op.undo_delta = this.getCustomType()._apply(op.content); op.undo_delta = this.getCustomType()._apply(op.content);
} else { } else {
@@ -418,8 +427,12 @@ module.exports = function() {
if (json == null) { if (json == null) {
json = {}; json = {};
} }
json.composition_value = JSON.stringify(this.composition_value); json.composition_value = JSON.stringify(this.getCustomType()._getCompositionValue());
if (this.composition_ref != null) {
json.composition_ref = this.composition_ref.getUid(); json.composition_ref = this.composition_ref.getUid();
} else {
json.composition_ref = this.tmp_composition_ref;
}
return Composition.__super__._encode.call(this, json); return Composition.__super__._encode.call(this, json);
}; };
@@ -431,12 +444,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 +459,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;
} }
} }
+18 -18
View File
@@ -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);
} }
} }
+855 -4754
View File
File diff suppressed because one or more lines are too long
+1819 -590
View File
File diff suppressed because one or more lines are too long
+768 -3028
View File
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
+853 -4752
View File
File diff suppressed because one or more lines are too long
+855 -4754
View File
File diff suppressed because one or more lines are too long
+2 -2
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long