diff -r 7b517a54b708 -r 3247fccfbd3f server/src/main/webapp/static/js/models.js --- a/server/src/main/webapp/static/js/models.js Tue Jan 01 09:28:03 2013 +0100 +++ b/server/src/main/webapp/static/js/models.js Mon Jan 14 16:00:07 2013 +0100 @@ -167,19 +167,19 @@ ], addUser: function(_props, _options) { _props.project = this; - var _user = new User(_props); + var _user = User.findOrCreate(_props); this.get("users").push(_user, _options); return _user; }, addNode: function(_props, _options) { - _props.project = this; - var _node = new Node(_props); + _props.project = this; + var _node = Node.findOrCreate(_props); this.get("nodes").push(_node, _options); return _node; }, addEdge: function(_props, _options) { _props.project = this; - var _edge = new Edge(_props); + var _edge = Edge.findOrCreate(_props); this.get("edges").push(_edge, _options); return _edge; }, @@ -214,6 +214,54 @@ } }); + var RosterUser = Models.RosterUser = Backbone.Model.extend({ + type: "roster_user", + idAttribute : "_id", + + 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 this.prepare === "function") { + options = this.prepare(options); + } + } + Backbone.Model.prototype.constructor.call(this, options); + }, + + validate: function() { + if(!this.type) { + return "object has no type"; + } + }, + + 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 + }; + }, + }); + + var UsersList = Models.UsersList = Backbone.Collection.extend({ + model: RosterUser + }); + }).call(window);