# HG changeset patch # User veltr # Date 1360602499 -3600 # Node ID a9b9e6c7be63817ad660aa6c139fe5bc1ece8b1c # Parent 17ff0be41a5b802c230f4e6a5d9c4d1c87c7b21a Converging client and webapp diff -r 17ff0be41a5b -r a9b9e6c7be63 client/js/main.js --- a/client/js/main.js Mon Feb 11 12:39:35 2013 +0100 +++ b/client/js/main.js Mon Feb 11 18:08:19 2013 +0100 @@ -95,8 +95,12 @@ if (typeof _opts.search !== "object" || !_opts.search) { _opts.search = []; } + if (typeof _opts.static_url !== "string") { + _opts.static_url = ""; + } this.project = new Rkns.Models.Project(); this.language = _opts.language; + this.static_url = _opts.static_url; this.l10n = Rkns.i18n[_opts.language]; if (typeof _opts.user_id !== "undefined") { this.current_user = _opts.user_id; @@ -109,6 +113,9 @@ this.tabs = []; this.search_engines = []; this.selected_bin_item = undefined; + + this.current_user_list = new Rkns.Models.UsersList(); + var _this = this; this.$.mouseup(function() { _this.selected_bin_item = undefined; diff -r 17ff0be41a5b -r a9b9e6c7be63 client/js/models.js --- a/client/js/models.js Mon Feb 11 12:39:35 2013 +0100 +++ b/client/js/models.js Mon Feb 11 18:08:19 2013 +0100 @@ -167,22 +167,22 @@ }, } ], - addUser: function(_props) { + addUser: function(_props, _options) { _props.project = this; - var _user = new User(_props); - this.get("users").push(_user); + var _user = User.findOrCreate(_props); + this.get("users").push(_user, _options); return _user; }, - addNode: function(_props) { - _props.project = this; - var _node = new Node(_props); - this.get("nodes").push(_node); + addNode: function(_props, _options) { + _props.project = this; + var _node = Node.findOrCreate(_props); + this.get("nodes").push(_node, _options); return _node; }, - addEdge: function(_props) { + addEdge: function(_props, _options) { _props.project = this; - var _edge = new Edge(_props); - this.get("edges").push(_edge); + var _edge = Edge.findOrCreate(_props); + this.get("edges").push(_edge, _options); return _edge; }, removeNode: function(_model) { @@ -216,6 +216,55 @@ } }); + 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); diff -r 17ff0be41a5b -r a9b9e6c7be63 client/js/paper-renderer.js --- a/client/js/paper-renderer.js Mon Feb 11 12:39:35 2013 +0100 +++ b/client/js/paper-renderer.js Mon Feb 11 18:08:19 2013 +0100 @@ -303,6 +303,13 @@ this.node_image.position = this.paper_coords; } } + + Rkns._.each(this.project.get("edges").filter(function (ed) { return ((ed.to === this.model) || (ed.from === this.model));}), function(edge, index, list){ + var repr = this.renderer.getRepresentationByModel(edge); + if(repr != null && typeof repr.from_representation.paper_coords !== "undefined" && typeof repr.to_representation.paper_coords !== "undefined") { + repr.redraw(); + } + }, this); } Rkns.Renderer.Node.prototype.paperShift = function(_delta) { @@ -314,7 +321,7 @@ } }; this.model.set(_data); - this.renderer.redraw(); + //this.renderer.redraw(); } Rkns.Renderer.Node.prototype.openEditor = function() { @@ -425,7 +432,7 @@ _p1b = _p1a.add(_delta), /* to differentiate inbound and outbound links */ _a = _v.angle, _handle = _v.divide(3), - _color = this.model.get("color") || this.model.get("color") || (this.model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color");; + _color = this.model.get("color") || this.model.get("color") || (this.model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"); this.paper_coords = _p0b.add(_p1b).divide(2); this.line.strokeColor = _color; this.line.segments[0].point = _p0a; @@ -771,7 +778,7 @@ Rkns.Renderer.NodeEditButton.prototype._init = function() { this.renderer.overlay_layer.activate(); this.type = "Node-edit-button"; - this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, - 90, 30, 1, 'img/edit.png', this.renderer.renkan.l10n.caption_edit); + this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, - 90, 30, 1, this.renderer.renkan.static_url+'img/edit.png', this.renderer.renkan.l10n.caption_edit); } Rkns.Renderer.NodeEditButton.prototype.moveTo = function(_pos) { @@ -814,7 +821,7 @@ Rkns.Renderer.NodeRemoveButton.prototype._init = function() { this.renderer.overlay_layer.activate(); this.type = "Node-remove-button"; - this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, -210, -90, 1, 'img/remove.png', this.renderer.renkan.l10n.caption_remove); + this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, -210, -90, 1, this.renderer.renkan.static_url+'img/remove.png', this.renderer.renkan.l10n.caption_remove); } Rkns.Renderer.NodeRemoveButton.prototype.moveTo = function(_pos) { @@ -858,7 +865,7 @@ Rkns.Renderer.NodeLinkButton.prototype._init = function() { this.renderer.overlay_layer.activate(); this.type = "Node-link-button"; - this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, 30, 150, 1, 'img/link.png', this.renderer.renkan.l10n.caption_link); + this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._NODE_BUTTON_INNER, Rkns.Renderer._NODE_BUTTON_OUTER, 30, 150, 1, this.renderer.renkan.static_url+'img/link.png', this.renderer.renkan.l10n.caption_link); } Rkns.Renderer.NodeLinkButton.prototype.moveTo = function(_pos) { @@ -895,7 +902,7 @@ Rkns.Renderer.EdgeEditButton.prototype._init = function() { this.renderer.overlay_layer.activate(); this.type = "Edge-edit-button"; - this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 90, 90, 1, 'img/edit.png', this.renderer.renkan.l10n.caption_edit); + this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 90, 90, 1, this.renderer.renkan.static_url+'img/edit.png', this.renderer.renkan.l10n.caption_edit); } Rkns.Renderer.EdgeEditButton.prototype.moveTo = function(_pos) { @@ -938,7 +945,7 @@ Rkns.Renderer.EdgeRemoveButton.prototype._init = function() { this.renderer.overlay_layer.activate(); this.type = "Edge-remove-button"; - this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 270, -90, 1, 'img/remove.png', this.renderer.renkan.l10n.caption_remove); + this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 270, -90, 1, this.renderer.renkan.static_url+'img/remove.png', this.renderer.renkan.l10n.caption_remove); } Rkns.Renderer.EdgeRemoveButton.prototype.moveTo = function(_pos) { this.sector.moveTo(_pos); diff -r 17ff0be41a5b -r a9b9e6c7be63 client/js/twitter-bin.js --- a/client/js/twitter-bin.js Mon Feb 11 12:39:35 2013 +0100 +++ b/client/js/twitter-bin.js Mon Feb 11 18:08:19 2013 +0100 @@ -38,6 +38,7 @@ ); Rkns.Twitter.Bin.prototype._init = function(_renkan, _opts) { + this.renkan = _renkan; this.search = _opts.search; this.title_icon_$.addClass('Rk-Twitter-Title-Icon'); this.title_$.html(this.search).addClass("Rk-Twitter-Title"); @@ -133,7 +134,7 @@ } else { this.$.show(); } - _renkan.resizeBins(); + this.renkan.resizeBins(); } Rkns.Twitter.Bin.prototype.refresh = function() { diff -r 17ff0be41a5b -r a9b9e6c7be63 client/js/wikipedia-bin.js --- a/client/js/wikipedia-bin.js Mon Feb 11 12:39:35 2013 +0100 +++ b/client/js/wikipedia-bin.js Mon Feb 11 18:08:19 2013 +0100 @@ -27,12 +27,13 @@ Rkns.Wikipedia.Bin.prototype.resultTemplate = Rkns._.template( '


<%=hdescription%>
<%=node.created_by_title%>
' ); Rkns.Renderer.NodeEditor.prototype.draw = function() { - var _model = this.node_representation.model; + var _model = this.node_representation.model, + _created_by = _model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER; this.editor_$ .html(this.template({ node: { @@ -610,8 +622,9 @@ uri: _model.get("uri"), description: _model.get("description"), image: _model.get("image") || "", - created_by_color: _model.get("created_by").get("color"), - created_by_title: _model.get("created_by").get("title") + color: _model.get("color") || _created_by.get("color"), + created_by_color: _created_by.get("color"), + created_by_title: _created_by.get("title") }, l10n: this.renderer.renkan.l10n })); @@ -639,6 +652,17 @@ _this.redraw(); }) this.editor_$.find(".Rk-Edit-Title")[0].focus(); + this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( + function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, + function() { _this.editor_$.find(".Rk-Edit-ColorPicker").hide(); } + ); + this.editor_$.find(".Rk-Edit-ColorPicker li").hover( + function() { _this.editor_$.find(".Rk-Edit-Color").css("background", $(this).attr("data-color")); }, + function() { _this.editor_$.find(".Rk-Edit-Color").css("background", _model.get("color") || (_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color")) } + ).click(function() { + _model.set("color", $(this).attr("data-color")); + _this.redraw(); + }); } Rkns.Renderer.NodeEditor.prototype.redraw = function() { @@ -680,25 +704,31 @@ '<%=edge.from_title%>
' - + '<%=edge.to_title%>
' + + '<%=edge.from_title%>
' + + '<%=edge.to_title%>
' + '<%=edge.created_by_title%>
' ); Rkns.Renderer.EdgeEditor.prototype.draw = function() { - var _model = this.edge_representation.model; + var _model = this.edge_representation.model, + _from_model = _model.get("from"), + _to_model = _model.get("to"), + _created_by = _model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER; this.editor_$ .html(this.template({ edge: { title: _model.get("title"), uri: _model.get("uri"), description: _model.get("description"), - from_title: _model.get("from").get("title"), - to_title: _model.get("to").get("title"), - from_created_by_color: _model.get("from").get("created_by").get("color"), - to_created_by_color: _model.get("to").get("created_by").get("color"), - created_by_color: _model.get("created_by").get("color"), - created_by_title: _model.get("created_by").get("title") + color: _model.get("color") || _created_by.get("color"), + from_title: _from_model.get("title"), + to_title: _to_model.get("title"), + from_color: _from_model.get("color") || (_from_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"), + to_color: _to_model.get("color") || (_to_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"), + created_by_color: _created_by.get("color"), + created_by_title: _created_by.get("title") }, l10n: this.renderer.renkan.l10n })); @@ -717,6 +747,17 @@ _model.set(_data); _this.redraw(); }); + this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( + function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, + function() { _this.editor_$.find(".Rk-Edit-ColorPicker").hide(); } + ); + this.editor_$.find(".Rk-Edit-ColorPicker li").hover( + function() { _this.editor_$.find(".Rk-Edit-Color").css("background", $(this).attr("data-color")); }, + function() { _this.editor_$.find(".Rk-Edit-Color").css("background", _model.get("color") || (_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color")); } + ).click(function() { + _model.set("color", $(this).attr("data-color")); + _this.redraw(); + }); } Rkns.Renderer.EdgeEditor.prototype.redraw = function() { var _coords = this.edge_representation.paper_coords;