diff -r 01f66ed90e32 -r 87569ad0ff53 server/src/main/webapp/static/js/models.js --- a/server/src/main/webapp/static/js/models.js Wed Feb 13 13:41:19 2013 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,270 +0,0 @@ -(function() { - - var root = this; - - var Backbone = root.Backbone; - - 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); - }); - return obj.type + "-" + guid; - }; - - - var RenkanModel = Backbone.RelationalModel.extend({ - 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 || ""; - - if(typeof this.prepare === "function") { - options = this.prepare(options); - } - } - Backbone.RelationalModel.prototype.constructor.call(this, options); - }, - 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; - } - else { - _options[_propName ] = _element; - } - } - }); - - // USER - var User = Models.User = RenkanModel.extend({ - type: "user", - 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"), - }; - }, - }); - - // NODE - var Node = Models.Node = RenkanModel.extend({ - type: "node", - relations: [{ - type: Backbone.HasOne, - key: "created_by", - relatedModel: User - }], - prepare: function(options) { - project = options.project; - this.addReference(options, "created_by", project.get("users"), options.created_by, project.current_user); - options.description = options.description || ""; - return options; - }, - 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 - }; - }, - }); - - // 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) { - 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, "to", project.get("nodes"), options.to); - return options; - }, - 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 - }; - }, - }); - - // PROJECT - var Project = Models.Project = RenkanModel.extend({ - type: "project", - 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: "edges", - relatedModel: Edge, - reverseRelation: { - key: 'project', - includeInJSON: '_id' - }, - } - ], - addUser: function(_props, _options) { - _props.project = this; - var _user = User.findOrCreate(_props); - this.get("users").push(_user, _options); - return _user; - }, - addNode: function(_props, _options) { - _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 = Edge.findOrCreate(_props); - this.get("edges").push(_edge, _options); - return _edge; - }, - removeNode: function(_model) { - this.get("nodes").remove(_model); - }, - removeEdge: function(_model) { - this.get("edges").remove(_model); - }, - validate: function(options) { - var _project = this; - _(options.users).each(function(_item) { - _item.project = _project; - }); - _(options.nodes).each(function(_item) { - _item.project = _project; - }); - _(options.edges).each(function(_item) { - _item.project = _project; - }); - }, - // Add event handler to remove edges when a node is removed - 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; - }) - ); - }); - } - }); - - 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, - site_id: this.get("site_id") - }; - }, - }); - - var UsersList = Models.UsersList = Backbone.Collection.extend({ - model: RosterUser - }); - - -}).call(window); -