--- a/server/src/main/webapp/static/js/corenkan.js Tue Dec 25 21:29:11 2012 +0100
+++ b/server/src/main/webapp/static/js/corenkan.js Mon Dec 31 12:19:10 2012 +0100
@@ -28,7 +28,10 @@
proto.initCollab = function(id) {
this.collab = coweb.initCollab({id : id});
- this.collab.subscribeSync("project", this, "onRemoteProjectChange");
+ this.collab.subscribeSync("project", this, "onRemoteProjectChange");
+ this.collab.subscribeSync("user", this, "onRemoteUserChange");
+ this.collab.subscribeSync("node", this, "onRemoteNodeChange");
+ this.collab.subscribeSync("edge", this, "onRemoteEdgeChange");
};
function prepareValues(obj,c) {
@@ -70,7 +73,7 @@
proto.updateObjectBind = function(type, obj, options) {
console.log("change " + type,obj, options);
- if(obj.hasChanged()) {
+ if(typeof obj != "undefined" && obj.hasChanged()) {
var values = {
id: obj.id,
_type: type,
@@ -176,9 +179,9 @@
if (args.type === "insert") {
this.onRemoteObjectInsert(field, args.value, args.position);
} else if (args.type === "update") {
- this.onRemoteNodeUpdate(field, args.value, args.position);
+ this.onRemoteObjectUpdate(field, args.value, args.position);
} else if (args.type === "delete") {
- this.onRemoteNodeDelete(field, args.position);
+ this.onRemoteObjectDelete(field, args.position);
}
};
@@ -207,7 +210,7 @@
* local methods for insert, update, delete handling.
* @param args Cooperative web event
*/
- proto.onRemoteUserChange = function(args) {
+ proto.onRemoteEdgeChange = function(args) {
this.onRemoteObjectChange("edges", args);
};
@@ -244,6 +247,8 @@
*/
proto.onRemoteObjectInsert = function(field, values, position) {
+ console.log("Remote "+ field +" insert values ", values, "position", position);
+
var coll = this.project.get(field);
var object_id = values['id'];
@@ -253,7 +258,23 @@
this.onRemoteObjectUpdate(field, values, coll.indexOf(obj));
}
else {
- this.project.get(field).add(values, {at:position});
+ var add_values = {};
+ for(var fieldname in values) {
+ if(fieldname == "_id" || fieldname[0] !== '_' ) {
+ add_values[fieldname] = values[fieldname];
+ }
+ }
+ switch(field) {
+ case "nodes":
+ this.project.addNode(add_values, {at:position});
+ break;
+ case "edges":
+ this.project.addEdge(add_values, {at:position});
+ break;
+ case "users":
+ this.project.addUser(add_values, {at:position});
+ break;
+ }
}
};
@@ -269,17 +290,20 @@
*/
proto.onRemoteObjectUpdate = function(field, values, position) {
+ console.log("Remote "+ field +" update values ", values, "position", position);
+
var object_id = values['id'];
if(this.project != null) {
- for(var obj in this.project.get(field)) {
- if(obj.id == object_id) {
- for(var fieldname in values) {
- if(fieldname != "id" && fieldname != "type") {
- obj.set(fieldname, values[fieldname]);
- }
- }
- }
+ var obj = this.project.get(field).get(object_id);
+ if(obj != null) {
+ var changed_val = {};
+ for(var fieldname in values) {
+ if(fieldname != "id" && fieldname != "type") {
+ changed_val[fieldname] = values[fieldname];
+ }
+ }
+ obj.set(changed_val);
}
}
};
@@ -290,6 +314,7 @@
* @param position Which item to update.
*/
proto.onRemoteObjectDelete = function(field, position) {
+ console.log("Remote "+ field +" delete position", position);
this.project.get(field).remove(this.project.get(field).at(position));
};