--- 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