diff -r bed069ef446c -r 276042cb477c client/js/models.js --- 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);