diff -r 192ce5938726 -r 02e3c464223f client/js/models.js --- a/client/js/models.js Thu Jun 23 17:50:37 2016 +0200 +++ b/client/js/models.js Fri Jun 24 13:07:21 2016 +0200 @@ -1,19 +1,20 @@ (function(root) { - "use strict"; + 'use strict'; 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); - }); + 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; + return obj.type + '-' + guid; } else { return guid; @@ -21,16 +22,16 @@ }; var RenkanModel = Backbone.RelationalModel.extend({ - idAttribute : "_id", + idAttribute : '_id', constructor : function(options) { - if (typeof options !== "undefined") { + if (typeof options !== 'undefined') { options._id = options._id || options.id || Models.getUID(this); - options.title = options.title || ""; - options.description = options.description || ""; - options.uri = options.uri || ""; + options.title = options.title || ''; + options.description = options.description || ''; + options.uri = options.uri || ''; - if (typeof this.prepare === "function") { + if (typeof this.prepare === 'function') { options = this.prepare(options); } } @@ -38,13 +39,13 @@ }, validate : function() { if (!this.type) { - return "object has no 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") { + if (typeof _element === 'undefined' && + typeof _default !== 'undefined') { _options[_propName] = _default; } else { @@ -55,115 +56,115 @@ // USER var User = Models.User = RenkanModel.extend({ - type : "user", + type : 'user', prepare : function(options) { - options.color = options.color || "#666666"; + 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") + _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", + type : 'node', relations : [ { type : Backbone.HasOne, - key : "created_by", + 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); - options.description = options.description || ""; + 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"), - style : this.get("style"), - 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"), - type : this.get("type") + _id : this.get('_id'), + title : this.get('title'), + uri : this.get('uri'), + description : this.get('description'), + position : this.get('position'), + image : this.get('image'), + style : this.get('style'), + 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'), + type : this.get('type') }; } }); // EDGE var Edge = Models.Edge = RenkanModel.extend({ - type : "edge", + type : 'edge', relations : [ { type : Backbone.HasOne, - key : "created_by", + key : 'created_by', relatedModel : User }, { type : Backbone.HasOne, - key : "from", + key : 'from', relatedModel : Node }, { type : Backbone.HasOne, - key : "to", + 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, "to", project.get("nodes"), options.to); + 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, - style : this.get("style"), - 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, + style : this.get('style'), + created_by : this.get('created_by') ? this.get('created_by') + .get('_id') : null }; } }); // View var View = Models.View = RenkanModel.extend({ - type : "view", + type : 'view', relations : [ { type : Backbone.HasOne, - key : "created_by", + 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); - options.description = options.description || ""; - if (typeof options.offset !== "undefined") { + this.addReference(options, 'created_by', project.get('users'), + options.created_by, project.current_user); + options.description = options.description || ''; + 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]; + : options.offset[0]; } else if (options.offset.x != null) { offset.x = options.offset.x; @@ -175,27 +176,27 @@ }, 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, - hidden_nodes: this.get("hidden_nodes") - // 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, + hidden_nodes: this.get('hidden_nodes') + // Don't need project id }; } }); // PROJECT var Project = Models.Project = RenkanModel.extend({ - schema_version : "2", - type : "project", + schema_version : '2', + type : 'project', blacklist : [ 'saveStatus', 'loadingStatus'], relations : [ { type : Backbone.HasMany, - key : "users", + key : 'users', relatedModel : User, reverseRelation : { key : 'project', @@ -203,7 +204,7 @@ } }, { type : Backbone.HasMany, - key : "nodes", + key : 'nodes', relatedModel : Node, reverseRelation : { key : 'project', @@ -211,7 +212,7 @@ } }, { type : Backbone.HasMany, - key : "edges", + key : 'edges', relatedModel : Edge, reverseRelation : { key : 'project', @@ -219,7 +220,7 @@ } }, { type : Backbone.HasMany, - key : "views", + key : 'views', relatedModel : View, reverseRelation : { key : 'project', @@ -229,19 +230,19 @@ addUser : function(_props, _options) { _props.project = this; var _user = User.findOrCreate(_props); - this.get("users").push(_user, _options); + 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); + 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); + this.get('edges').push(_edge, _options); return _edge; }, addView : function(_props, _options) { @@ -249,57 +250,57 @@ // TODO: check if need to replace with create only var _view = View.findOrCreate(_props); // TODO: Should we remember only one view? - this.get("views").push(_view, _options); + this.get('views').push(_view, _options); return _view; }, removeNode : function(_model) { - this.get("nodes").remove(_model); + this.get('nodes').remove(_model); }, removeEdge : function(_model) { - this.get("edges").remove(_model); + this.get('edges').remove(_model); }, validate : function(options) { var _project = this; _.each( - [].concat(options.users, options.nodes, options.edges,options.views), - function(_item) { - if (_item) { - _item.project = _project; + [].concat(options.users, options.nodes, options.edges,options.views), + function(_item) { + if (_item) { + _item.project = _project; + } } - } ); }, getSchemaVersion : function(data) { - var t = data; - if(typeof(t) === "undefined") { - t = this; - } - var version = t.schema_version; - if(!version) { - return 1; - } - else { - return version; - } + var t = data; + if(typeof(t) === 'undefined') { + t = this; + } + var version = t.schema_version; + if(!version) { + return 1; + } + else { + return version; + } }, // 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; - })); + 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; + })); }); }, 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] instanceof Backbone.Collection) || + (json[attr] instanceof RenkanModel)) { json[attr] = json[attr].toJSON(); } } @@ -308,53 +309,53 @@ }); var RosterUser = Models.RosterUser = Backbone.Model - .extend({ - type : "roster_user", - idAttribute : "_id", + .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); - } + if (typeof this.prepare === 'function') { + options = this.prepare(options); } - Backbone.Model.prototype.constructor.call(this, 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