--- a/client/js/models.js Sat Mar 28 04:28:21 2015 +0100
+++ b/client/js/models.js Mon Mar 30 09:53:48 2015 +0200
@@ -6,13 +6,14 @@
var Models = root.Rkns.Models = {};
-
Models.getUID = function(obj) {
- var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
- var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
- return v.toString(16);
- });
- if(typeof obj !== 'undefined') {
+ var guid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g,
+ function(c) {
+ var r = Math.random() * 16 | 0, v = c === 'x' ? r
+ : (r & 0x3 | 0x8);
+ return v.toString(16);
+ });
+ if (typeof obj !== 'undefined') {
return obj.type + "-" + guid;
}
else {
@@ -20,10 +21,9 @@
}
};
-
var RenkanModel = Backbone.RelationalModel.extend({
idAttribute : "_id",
- constructor: function(options) {
+ constructor : function(options) {
if (typeof options !== "undefined") {
options._id = options._id || options.id || Models.getUID(this);
@@ -31,220 +31,218 @@
options.description = options.description || "";
options.uri = options.uri || "";
- if(typeof this.prepare === "function") {
+ if (typeof this.prepare === "function") {
options = this.prepare(options);
}
}
Backbone.RelationalModel.prototype.constructor.call(this, options);
},
- validate: function() {
- if(!this.type) {
+ validate : function() {
+ if (!this.type) {
return "object has no type";
}
},
addReference : function(_options, _propName, _list, _id, _default) {
var _element = _list.get(_id);
- if (typeof _element === "undefined" && typeof _default !== "undefined") {
- _options[_propName ] = _default;
+ if (typeof _element === "undefined" &&
+ typeof _default !== "undefined") {
+ _options[_propName] = _default;
}
else {
- _options[_propName ] = _element;
+ _options[_propName] = _element;
}
}
});
// USER
var User = Models.User = RenkanModel.extend({
- type: "user",
- prepare: function(options) {
+ type : "user",
+ prepare : function(options) {
options.color = options.color || "#666666";
return options;
},
- toJSON: function() {
+ toJSON : function() {
return {
- _id: this.get("_id"),
- title: this.get("title"),
- uri: this.get("uri"),
- description: this.get("description"),
- color: this.get("color")
+ _id : this.get("_id"),
+ title : this.get("title"),
+ uri : this.get("uri"),
+ description : this.get("description"),
+ color : this.get("color")
};
}
});
// NODE
var Node = Models.Node = RenkanModel.extend({
- type: "node",
- relations: [{
- type: Backbone.HasOne,
- key: "created_by",
- relatedModel: User
- }],
- prepare: function(options) {
+ type : "node",
+ relations : [ {
+ type : Backbone.HasOne,
+ key : "created_by",
+ relatedModel : User
+ } ],
+ prepare : function(options) {
var project = options.project;
- this.addReference(options, "created_by", project.get("users"), options.created_by, project.current_user);
+ this.addReference(options, "created_by", project.get("users"),
+ options.created_by, project.current_user);
options.description = options.description || "";
return options;
},
- toJSON: function() {
+ toJSON : function() {
return {
- _id: this.get("_id"),
- title: this.get("title"),
- uri: this.get("uri"),
- description: this.get("description"),
- position: this.get("position"),
- image: this.get("image"),
- color: this.get("color"),
- created_by: this.get("created_by") ? this.get("created_by").get("_id") : null,
- size: this.get("size"),
- clip_path: this.get("clip_path"),
- shape: this.get("shape")
+ _id : this.get("_id"),
+ title : this.get("title"),
+ uri : this.get("uri"),
+ description : this.get("description"),
+ position : this.get("position"),
+ image : this.get("image"),
+ color : this.get("color"),
+ created_by : this.get("created_by") ? this.get("created_by")
+ .get("_id") : null,
+ size : this.get("size"),
+ clip_path : this.get("clip_path"),
+ shape : this.get("shape")
};
}
});
// EDGE
var Edge = Models.Edge = RenkanModel.extend({
- type: "edge",
- relations: [
- {
- type: Backbone.HasOne,
- key: "created_by",
- relatedModel: User
- },
- {
- type: Backbone.HasOne,
- key: "from",
- relatedModel: Node
- },
- {
- type: Backbone.HasOne,
- key: "to",
- relatedModel: Node
- }
- ],
- prepare: function(options) {
+ type : "edge",
+ relations : [ {
+ type : Backbone.HasOne,
+ key : "created_by",
+ relatedModel : User
+ }, {
+ type : Backbone.HasOne,
+ key : "from",
+ relatedModel : Node
+ }, {
+ type : Backbone.HasOne,
+ key : "to",
+ relatedModel : Node
+ } ],
+ prepare : function(options) {
var project = options.project;
- this.addReference(options, "created_by", project.get("users"), options.created_by, project.current_user);
- this.addReference(options, "from", project.get("nodes"), options.from);
+ this.addReference(options, "created_by", project.get("users"),
+ options.created_by, project.current_user);
+ this.addReference(options, "from", project.get("nodes"),
+ options.from);
this.addReference(options, "to", project.get("nodes"), options.to);
return options;
},
- toJSON: function() {
+ toJSON : function() {
return {
- _id: this.get("_id"),
- title: this.get("title"),
- uri: this.get("uri"),
- description: this.get("description"),
- from: this.get("from") ? this.get("from").get("_id") : null,
- to: this.get("to") ? this.get("to").get("_id") : null,
- color: this.get("color"),
- created_by: this.get("created_by") ? this.get("created_by").get("_id") : null
+ _id : this.get("_id"),
+ title : this.get("title"),
+ uri : this.get("uri"),
+ description : this.get("description"),
+ from : this.get("from") ? this.get("from").get("_id") : null,
+ to : this.get("to") ? this.get("to").get("_id") : null,
+ color : this.get("color"),
+ created_by : this.get("created_by") ? this.get("created_by")
+ .get("_id") : null
};
}
});
// View
var View = Models.View = RenkanModel.extend({
- type: "view",
- relations: [
- {
- type: Backbone.HasOne,
- key: "created_by",
- relatedModel: User
- }
- ],
- prepare: function(options) {
+ type : "view",
+ relations : [ {
+ type : Backbone.HasOne,
+ key : "created_by",
+ relatedModel : User
+ } ],
+ prepare : function(options) {
var project = options.project;
- this.addReference(options, "created_by", project.get("users"), options.created_by, project.current_user);
+ this.addReference(options, "created_by", project.get("users"),
+ options.created_by, project.current_user);
options.description = options.description || "";
- if(typeof options.offset !== "undefined") {
+ if (typeof options.offset !== "undefined") {
var offset = {};
if (Array.isArray(options.offset)) {
- offset.x = options.offset[0];
- offset.y = options.offset.length > 1 ? options.offset[1] : options.offset[0];
+ offset.x = options.offset[0];
+ offset.y = options.offset.length > 1 ? options.offset[1]
+ : options.offset[0];
}
else if (options.offset.x != null) {
- offset.x = options.offset.x;
- offset.y = options.offset.y;
+ offset.x = options.offset.x;
+ offset.y = options.offset.y;
}
options.offset = offset;
}
return options;
},
- toJSON: function() {
+ toJSON : function() {
return {
- _id: this.get("_id"),
- zoom_level: this.get("zoom_level"),
- offset: this.get("offset"),
- title: this.get("title"),
- description: this.get("description"),
- created_by: this.get("created_by") ? this.get("created_by").get("_id") : null
- // Don't need project id
+ _id : this.get("_id"),
+ zoom_level : this.get("zoom_level"),
+ offset : this.get("offset"),
+ title : this.get("title"),
+ description : this.get("description"),
+ created_by : this.get("created_by") ? this.get("created_by")
+ .get("_id") : null
+ // Don't need project id
};
}
});
// PROJECT
var Project = Models.Project = RenkanModel.extend({
- type: "project",
- blacklist: ['save_status',],
- relations: [
- {
- type: Backbone.HasMany,
- key: "users",
- relatedModel: User,
- reverseRelation: {
- key: 'project',
- includeInJSON: '_id'
+ type : "project",
+ blacklist : [ 'save_status', ],
+ relations : [ {
+ type : Backbone.HasMany,
+ key : "users",
+ relatedModel : User,
+ reverseRelation : {
+ key : 'project',
+ includeInJSON : '_id'
}
- },
- {
- type: Backbone.HasMany,
- key: "nodes",
- relatedModel: Node,
- reverseRelation: {
- key: 'project',
- includeInJSON: '_id'
+ }, {
+ type : Backbone.HasMany,
+ key : "nodes",
+ relatedModel : Node,
+ reverseRelation : {
+ key : 'project',
+ includeInJSON : '_id'
}
- },
- {
- type: Backbone.HasMany,
- key: "edges",
- relatedModel: Edge,
- reverseRelation: {
- key: 'project',
- includeInJSON: '_id'
+ }, {
+ type : Backbone.HasMany,
+ key : "edges",
+ relatedModel : Edge,
+ reverseRelation : {
+ key : 'project',
+ includeInJSON : '_id'
}
- },
- {
- type: Backbone.HasMany,
- key: "views",
- relatedModel: View,
- reverseRelation: {
- key: 'project',
- includeInJSON: '_id'
+ }, {
+ type : Backbone.HasMany,
+ key : "views",
+ relatedModel : View,
+ reverseRelation : {
+ key : 'project',
+ includeInJSON : '_id'
}
- }
- ],
- addUser: function(_props, _options) {
+ } ],
+ addUser : function(_props, _options) {
_props.project = this;
var _user = User.findOrCreate(_props);
this.get("users").push(_user, _options);
return _user;
},
- addNode: function(_props, _options) {
+ addNode : function(_props, _options) {
_props.project = this;
var _node = Node.findOrCreate(_props);
this.get("nodes").push(_node, _options);
return _node;
},
- addEdge: function(_props, _options) {
+ addEdge : function(_props, _options) {
_props.project = this;
var _edge = Edge.findOrCreate(_props);
this.get("edges").push(_edge, _options);
return _edge;
},
- addView: function(_props, _options) {
+ addView : function(_props, _options) {
_props.project = this;
// TODO: check if need to replace with create only
var _view = View.findOrCreate(_props);
@@ -252,90 +250,98 @@
this.get("views").push(_view, _options);
return _view;
},
- removeNode: function(_model) {
+ removeNode : function(_model) {
this.get("nodes").remove(_model);
},
- removeEdge: function(_model) {
+ removeEdge : function(_model) {
this.get("edges").remove(_model);
},
- validate: function(options) {
+ validate : function(options) {
var _project = this;
- _([].concat(options.users, options.nodes, options.edges, options.views)).each(function(_item) {
- if(_item) {
+ _(
+ [].concat(options.users, options.nodes, options.edges,
+ options.views)).each(function(_item) {
+ if (_item) {
_item.project = _project;
}
});
},
// Add event handler to remove edges when a node is removed
- initialize: function() {
+ initialize : function() {
var _this = this;
this.on("remove:nodes", function(_node) {
_this.get("edges").remove(
- _this.get("edges").filter(function(_edge) {
- return _edge.get("from") === _node || _edge.get("to") === _node;
- })
- );
+ _this.get("edges").filter(
+ function(_edge) {
+ return _edge.get("from") === _node ||
+ _edge.get("to") === _node;
+ }));
});
},
- toJSON: function(){
- var json = _.clone(this.attributes);
- for(var attr in json) {
- if((json[attr] instanceof Backbone.Model) || (json[attr] instanceof Backbone.Collection) || (json[attr] instanceof RenkanModel)) {
- json[attr] = json[attr].toJSON();
- }
- }
- return _.omit(json, this.blacklist);
+ toJSON : function() {
+ var json = _.clone(this.attributes);
+ for ( var attr in json) {
+ if ((json[attr] instanceof Backbone.Model) ||
+ (json[attr] instanceof Backbone.Collection) ||
+ (json[attr] instanceof RenkanModel)) {
+ json[attr] = json[attr].toJSON();
+ }
+ }
+ return _.omit(json, this.blacklist);
}
});
- var RosterUser = Models.RosterUser = Backbone.Model.extend({
- type: "roster_user",
- idAttribute : "_id",
+ var RosterUser = Models.RosterUser = Backbone.Model
+ .extend({
+ type : "roster_user",
+ idAttribute : "_id",
- constructor: function(options) {
+ constructor : function(options) {
- if (typeof options !== "undefined") {
- options._id = options._id || options.id || Models.getUID(this);
- options.title = options.title || "(untitled " + this.type + ")";
- options.description = options.description || "";
- options.uri = options.uri || "";
- options.project = options.project || null;
- options.site_id = options.site_id || 0;
+ if (typeof options !== "undefined") {
+ options._id = options._id ||
+ options.id ||
+ Models.getUID(this);
+ options.title = options.title || "(untitled " + this.type + ")";
+ options.description = options.description || "";
+ options.uri = options.uri || "";
+ options.project = options.project || null;
+ options.site_id = options.site_id || 0;
- if(typeof this.prepare === "function") {
- options = this.prepare(options);
- }
- }
- Backbone.Model.prototype.constructor.call(this, options);
- },
+ if (typeof this.prepare === "function") {
+ options = this.prepare(options);
+ }
+ }
+ Backbone.Model.prototype.constructor.call(this, options);
+ },
- validate: function() {
- if(!this.type) {
- return "object has no type";
- }
- },
+ validate : function() {
+ if (!this.type) {
+ return "object has no type";
+ }
+ },
- prepare: function(options) {
- options.color = options.color || "#666666";
- return options;
- },
+ prepare : function(options) {
+ options.color = options.color || "#666666";
+ return options;
+ },
- toJSON: function() {
- return {
- _id: this.get("_id"),
- title: this.get("title"),
- uri: this.get("uri"),
- description: this.get("description"),
- color: this.get("color"),
- project: (this.get("project") != null)?this.get("project").get("id"):null,
- site_id: this.get("site_id")
- };
- }
+ toJSON : function() {
+ return {
+ _id : this.get("_id"),
+ title : this.get("title"),
+ uri : this.get("uri"),
+ description : this.get("description"),
+ color : this.get("color"),
+ project : (this.get("project") != null) ? this.get(
+ "project").get("id") : null,
+ site_id : this.get("site_id")
+ };
+ }
+ });
+
+ var UsersList = Models.UsersList = Backbone.Collection.extend({
+ model : RosterUser
});
- var UsersList = Models.UsersList = Backbone.Collection.extend({
- model: RosterUser
- });
-
-
}).call(window);