client/js/paper-renderer.js
changeset 26 2fad193bae98
parent 25 b5ada3bb8e53
child 28 805d85b3f390
--- a/client/js/paper-renderer.js	Tue Aug 21 18:49:41 2012 +0200
+++ b/client/js/paper-renderer.js	Wed Aug 22 16:50:42 2012 +0200
@@ -154,6 +154,10 @@
 
 Rkns.Renderer._BaseRepresentation.prototype.unselect = function() {}
 
+Rkns.Renderer._BaseRepresentation.prototype.highlight = function() {}
+
+Rkns.Renderer._BaseRepresentation.prototype.unhighlight = function() {}
+
 Rkns.Renderer._BaseRepresentation.prototype.mouseup = function() {}
 
 Rkns.Renderer._BaseRepresentation.prototype.destroy = function() {}
@@ -217,6 +221,13 @@
     this.edit_button.show();
     this.remove_button.show();
     this.link_button.show();
+    var _uri = this.model.get("uri");
+    Rkns.$('.Rk-Bin-Item').each(function() {
+        var _el = Rkns.$(this);
+        if (_el.attr("data-uri") == _uri) {
+            _el.addClass("selected");
+        }
+    });
 }
 
 Rkns.Renderer.Node.prototype.unselect = function(_newTarget) {
@@ -226,6 +237,15 @@
         this.link_button.hide();
     }
     this.circle.strokeWidth = 1;
+    Rkns.$('.Rk-Bin-Item').removeClass("selected");
+}
+
+Rkns.Renderer.Node.prototype.highlight = function() {
+    this.circle.fillColor = "#ffffc0";
+}
+
+Rkns.Renderer.Node.prototype.unhighlight = function(_newTarget) {
+    this.circle.fillColor = "#ffffff";
 }
 
 Rkns.Renderer.Node.prototype.mouseup = function(_event) {
@@ -237,6 +257,7 @@
 Rkns.Renderer.Node.prototype.destroy = function(_event) {
     this.edit_button.destroy();
     this.remove_button.destroy();
+    this.link_button.destroy();
     this.circle.remove();
     this.title.remove();
 }
@@ -432,7 +453,7 @@
 Rkns.Renderer.NodeEditor.prototype.template = Rkns._.template(
     '<h2><span class="Rk-CloseX">&times;</span><%=l10n.edit_node%></span></h2>'
     + '<p><label><%=l10n.edit_title%></label><input class="Rk-Edit-Title" type="text" value="<%=node.title%>"/></p>'
-    + '<p><label><%=l10n.edit_uri%></label><input class="Rk-Edit-URI" type="text" value="<%=node.uri%>"/></p>'
+    + '<p><label><%=l10n.edit_uri%></label><input class="Rk-Edit-URI" type="text" value="<%=node.uri%>"/><a class="Rk-Edit-Goto" href="<%=node.uri%>" target="_blank"></a></p>'
     + '<p><label><%=l10n.edit_description%></label><textarea class="Rk-Edit-Description"><%=node.description%></textarea></p>'
     + '<p><label><%=l10n.created_by%></label> <span class="Rk-UserColor" style="background:<%=node.created_by_color%>;"></span><%=node.created_by_title%></p>'
 );
@@ -460,6 +481,7 @@
         paper.view.draw();
     });
     this.editor_$.find("input, textarea").bind("keyup change", function() {
+        _this.editor_$.find(".Rk-Edit-Goto").attr("href",_this.editor_$.find(".Rk-Edit-URI").val());
         var _data = {
             title: _this.editor_$.find(".Rk-Edit-Title").val(),
             description: _this.editor_$.find(".Rk-Edit-Description").val(),
@@ -503,7 +525,7 @@
 Rkns.Renderer.EdgeEditor.prototype.template = Rkns._.template(
     '<h2><span class="Rk-CloseX">&times;</span><%=l10n.edit_edge%></span></h2>'
     + '<p><label><%=l10n.edit_title%></label><input class="Rk-Edit-Title" type="text" value="<%=edge.title%>"/></p>'
-    + '<p><label><%=l10n.edit_uri%></label><input class="Rk-Edit-URI" type="text" value="<%=edge.uri%>"/></p>'
+    + '<p><label><%=l10n.edit_uri%></label><input class="Rk-Edit-URI" type="text" value="<%=edge.uri%>"/><a class="Rk-Edit-Goto" href="<%=edge.uri%>" target="_blank"></a></p>'
     + '<p><label><%=l10n.edit_from%></label><span class="Rk-UserColor" style="background:<%=edge.from_created_by_color%>;"></span><%=edge.from_title%></p>'
     + '<p><label><%=l10n.edit_to%></label><span class="Rk-UserColor" style="background:<%=edge.to_created_by_color%>;"></span><%=edge.to_title%></p>'
     + '<p><label><%=l10n.created_by%> </label><span class="Rk-UserColor" style="background:<%=edge.created_by_color%>;"></span><%=edge.created_by_title%></p>'
@@ -850,15 +872,17 @@
 );
 
 Rkns.Renderer.Scene.prototype.autoScale = function() {
-    var _xx = this.renkan.project.get("nodes").map(function(_node) { return _node.get("position").x }),
-        _yy = this.renkan.project.get("nodes").map(function(_node) { return _node.get("position").y }),
-        _minx = Math.min.apply(Math, _xx),
-        _miny = Math.min.apply(Math, _yy),
-        _maxx = Math.max.apply(Math, _xx),
-        _maxy = Math.max.apply(Math, _yy);
-    this.scale = Math.min((paper.view.size.width - 2 * this._MARGIN_X) / (_maxx - _minx), (paper.view.size.height - 2 * this._MARGIN_Y) / (_maxy - _miny));
-    this.offset = paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(this.scale));
-    this.redraw();
+    if (this.renkan.project.get("nodes").length) {
+        var _xx = this.renkan.project.get("nodes").map(function(_node) { return _node.get("position").x }),
+            _yy = this.renkan.project.get("nodes").map(function(_node) { return _node.get("position").y }),
+            _minx = Math.min.apply(Math, _xx),
+            _miny = Math.min.apply(Math, _yy),
+            _maxx = Math.max.apply(Math, _xx),
+            _maxy = Math.max.apply(Math, _yy);
+        this.scale = Math.min((paper.view.size.width - 2 * this._MARGIN_X) / (_maxx - _minx), (paper.view.size.height - 2 * this._MARGIN_Y) / (_maxy - _miny));
+        this.offset = paper.view.center.subtract(new paper.Point([(_maxx + _minx) / 2, (_maxy + _miny) / 2]).multiply(this.scale));
+        this.redraw();
+    }
 }
 
 Rkns.Renderer.Scene.prototype.toPaperCoords = function(_point) {
@@ -918,6 +942,19 @@
     });
 }
 
+Rkns.Renderer.Scene.prototype.highlightModel = function(_model) {
+    var _repr = this.getRepresentationByModel(_model);
+    if (_repr) {
+        _repr.highlight();
+    }
+}
+
+Rkns.Renderer.Scene.prototype.unhighlightAll = function(_model) {
+    Rkns._(this.representations).each(function(_repr) {
+        _repr.unhighlight();
+    });
+}
+
 Rkns.Renderer.Scene.prototype.redraw = function() {
     Rkns._(this.representations).each(function(_representation) {
         _representation.redraw();