diff -r fac7354c55d2 -r 110f99eb417e client/js/paper-renderer.js --- a/client/js/paper-renderer.js Tue Mar 26 16:14:19 2013 +0100 +++ b/client/js/paper-renderer.js Tue Mar 26 19:12:05 2013 +0100 @@ -207,7 +207,9 @@ } this._removeBinding = function() { _renderer.removeRepresentation(_this); - _renderer.redraw(); + _(function() { + _renderer.redraw() + }).defer(); } this.model.on("change", this._changeBinding ); this.model.on("remove", this._removeBinding ); @@ -256,11 +258,7 @@ fontSize: Rkns.Renderer._NODE_FONT_SIZE, fillColor: 'black' }; - if (this.renderer.renkan.read_only) { - this.edit_button = new Rkns.Renderer._BaseRepresentation(this.renderer, null); - this.remove_button = new Rkns.Renderer._BaseRepresentation(this.renderer, null); - this.link_button = new Rkns.Renderer._BaseRepresentation(this.renderer, null); - } else { + if (this.renderer.renkan.options.editor_mode) { this.edit_button = new Rkns.Renderer.NodeEditButton(this.renderer, null); this.edit_button.node_representation = this; this.remove_button = new Rkns.Renderer.NodeRemoveButton(this.renderer, null); @@ -284,7 +282,7 @@ } this.circle_radius = _baseRadius * this.renderer.scale; if (this.last_circle_radius !== this.circle_radius) { - if (!this.renderer.renkan.read_only) { + if (this.renderer.renkan.options.editor_mode) { this.edit_button.setSectorSize(); this.remove_button.setSectorSize(); this.link_button.setSectorSize(); @@ -310,9 +308,11 @@ this.title.position = this.paper_coords.add([0, this.circle_radius + 1.5 *Rkns.Renderer._NODE_FONT_SIZE]); var _color = this.model.get("color") || (this.model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"); this.circle.strokeColor = _color; - this.edit_button.moveTo(this.paper_coords); - this.remove_button.moveTo(this.paper_coords); - this.link_button.moveTo(this.paper_coords); + if (this.renderer.renkan.options.editor_mode) { + this.edit_button.moveTo(this.paper_coords); + this.remove_button.moveTo(this.paper_coords); + this.link_button.moveTo(this.paper_coords); + } var _img = this.model.get("image"); if (_img && _img !== this.img) { var _image = new Image(), @@ -324,7 +324,7 @@ _this.renderer.node_layer.activate(); var _ratio = Math.min(2 / _image.width, 2 / _image.height ); var _raster = new paper.Raster(_image); - if (_this.renderer.renkan.clip_images) { + if (_this.renderer.renkan.options.clip_images) { var _clip = new paper.Path.Circle([0, 0], 1); _raster.scale(_ratio); _this.node_image = new paper.Group(_clip, _raster); @@ -367,10 +367,12 @@ } Rkns.Renderer.Node.prototype.paperShift = function(_delta) { - if (!this.renderer.renkan.read_only) { - this.is_dragging = true; - this.paper_coords = this.paper_coords.add(_delta); - this.redraw(); + if (this.renderer.renkan.options.editor_mode) { + if (!this.renderer.renkan.read_only) { + this.is_dragging = true; + this.paper_coords = this.paper_coords.add(_delta); + this.redraw(); + } } else { this.renderer.paperShift(_delta); } @@ -385,9 +387,11 @@ Rkns.Renderer.Node.prototype.select = function() { this.circle.strokeWidth = 4; - this.edit_button.show(); - this.remove_button.show(); - this.link_button.show(); + if (this.renderer.isEditable()) { + this.edit_button.show(); + this.remove_button.show(); + this.link_button.show(); + } var _uri = this.model.get("uri"); if (_uri) { Rkns.$('.Rk-Bin-Item').each(function() { @@ -397,7 +401,7 @@ } }); } - if (this.renderer.renkan.read_only) { + if (!this.renderer.renkan.options.editor_mode) { this.openEditor(); } this.minimap_circle.fillColor = "#ff00fc"; @@ -405,9 +409,11 @@ Rkns.Renderer.Node.prototype.unselect = function(_newTarget) { if (!_newTarget || _newTarget.node_representation !== this) { - this.edit_button.hide(); - this.remove_button.hide(); - this.link_button.hide(); + if (this.renderer.renkan.options.editor_mode) { + this.edit_button.hide(); + this.remove_button.hide(); + this.link_button.hide(); + } this.circle.strokeWidth = 2; Rkns.$('.Rk-Bin-Item').removeClass("selected"); this.minimap_circle.fillColor = this.circle.strokeColor; @@ -436,17 +442,17 @@ y: _coords.y } }; - this.model.set(_data); + if (this.renderer.isEditable()) { + this.model.set(_data); + } } Rkns.Renderer.Node.prototype.mouseup = function(_event) { - if (!this.renderer.renkan.read_only) { - if (this.renderer.is_dragging) { - this.saveCoords(); - } - else { - this.openEditor(); - } + if (this.renderer.isEditable() && this.renderer.is_dragging) { + this.saveCoords(); + } + else { + this.openEditor(); } this.renderer.click_target = null; this.renderer.is_dragging = false; @@ -455,9 +461,11 @@ Rkns.Renderer.Node.prototype.destroy = function(_event) { this.super("destroy"); - this.edit_button.destroy(); - this.remove_button.destroy(); - this.link_button.destroy(); + if (this.renderer.renkan.options.editor_mode) { + this.edit_button.destroy(); + this.remove_button.destroy(); + this.link_button.destroy(); + } this.circle.remove(); this.title.remove(); this.minimap_circle.remove(); @@ -491,10 +499,7 @@ this.text.paragraphStyle.justification = 'center'; this.text_angle = 0; this.arrow_angle = 0; - if (this.renderer.renkan.read_only) { - this.edit_button = new Rkns.Renderer._BaseRepresentation(this.renderer, null); - this.remove_button = new Rkns.Renderer._BaseRepresentation(this.renderer, null); - } else { + if (this.renderer.renkan.options.editor_mode) { this.edit_button = new Rkns.Renderer.EdgeEditButton(this.renderer, null); this.edit_button.edge_representation = this; this.remove_button = new Rkns.Renderer.EdgeRemoveButton(this.renderer, null); @@ -543,8 +548,10 @@ this.text.content = Rkns.Renderer.Utils.shortenText(_text, Rkns.Renderer._EDGE_MAX_CHAR); this.text.position = this.paper_coords.add(_textdelta); this.text_angle = _a; - this.edit_button.moveTo(this.paper_coords); - this.remove_button.moveTo(this.paper_coords); + if (this.renderer.renkan.options.editor_mode) { + this.edit_button.moveTo(this.paper_coords); + this.remove_button.moveTo(this.paper_coords); + } } Rkns.Renderer.Edge.prototype.openEditor = function() { @@ -556,17 +563,21 @@ Rkns.Renderer.Edge.prototype.select = function() { this.line.strokeWidth = 4; - this.edit_button.show(); - this.remove_button.show(); - if (this.renderer.renkan.read_only) { + if (this.renderer.isEditable()) { + this.edit_button.show(); + this.remove_button.show(); + } + if (!this.renderer.renkan.options.editor_mode) { this.openEditor(); } } Rkns.Renderer.Edge.prototype.unselect = function(_newTarget) { if (!_newTarget || _newTarget.edge_representation !== this) { - this.edit_button.hide(); - this.remove_button.hide(); + if (this.renderer.renkan.options.editor_mode) { + this.edit_button.hide(); + this.remove_button.hide(); + } this.line.strokeWidth = 2; } } @@ -585,9 +596,11 @@ } Rkns.Renderer.Edge.prototype.paperShift = function(_delta) { - if (!this.renderer.renkan.read_only) { - this.from_representation.paperShift(_delta); - this.to_representation.paperShift(_delta); + if (this.renderer.renkan.options.editor_mode) { + if (!this.renderer.renkan.options.read_only) { + this.from_representation.paperShift(_delta); + this.to_representation.paperShift(_delta); + } } else { this.renderer.paperShift(_delta); } @@ -598,8 +611,10 @@ this.line.remove(); this.arrow.remove(); this.text.remove(); - this.edit_button.destroy(); - this.remove_button.destroy(); + if (this.renderer.renkan.options.editor_mode) { + this.edit_button.destroy(); + this.remove_button.destroy(); + } var _this = this; this.bundle.edges = Rkns._(this.bundle.edges).reject(function(_edge) { return _edge === _this; @@ -639,6 +654,11 @@ } Rkns.Renderer.TempEdge.prototype.paperShift = function(_delta) { + if (!this.renderer.isEditable()) { + this.renderer.removeRepresentation(_this); + paper.view.draw(); + return; + } this.end_pos = this.end_pos.add(_delta); var _hitResult = paper.project.hitTest(this.end_pos); this.renderer.findTarget(_hitResult); @@ -658,7 +678,9 @@ from: _model.get("_id"), to: _target.model.get("_id") }; - this.project.addEdge(_data); + if (this.renderer.isEditable()) { + this.project.addEdge(_data); + } } if (_model === _target.model || (_target.node_representation && _target.node_representation.model === _model)) { _endDrag = false; @@ -726,8 +748,8 @@ Rkns.Renderer.NodeEditor.prototype.draw = function() { var _model = this.node_representation.model, _created_by = _model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER, - _template = (this.renderer.renkan.read_only ? this.readOnlyTemplate : this.template), - _image_placeholder = this.renderer.renkan.static_url + "img/image-placeholder.png", + _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate ), + _image_placeholder = this.renderer.renkan.options.static_url + "img/image-placeholder.png", _size = (_model.get("size") || 0); this.editor_$ .html(_template({ @@ -746,27 +768,35 @@ translate: this.renderer.renkan.translate })); this.redraw(); - var _this = this; - this.editor_$.find(".Rk-CloseX").click(function() { - _this.renderer.removeRepresentation(_this); - paper.view.draw(); - }); - if (!this.renderer.renkan.read_only) { + var _this = this, + closeEditor = function() { + _this.renderer.removeRepresentation(_this); + paper.view.draw(); + } + + this.editor_$.find(".Rk-CloseX").click(closeEditor); + + if (this.renderer.isEditable()) { var onFieldChange = Rkns._(function() { Rkns._(function() { - var _uri = _this.editor_$.find(".Rk-Edit-URI").val(), - _image = _this.editor_$.find(".Rk-Edit-Image").val(); - _this.editor_$.find(".Rk-Edit-ImgPreview").attr("src", _image || _image_placeholder); - _this.editor_$.find(".Rk-Edit-Goto").attr("href",_uri); - var _data = { - title: _this.editor_$.find(".Rk-Edit-Title").val(), - description: _this.editor_$.find(".Rk-Edit-Description").val(), - uri: _uri, - image: _image + if (_this.renderer.isEditable()) { + var _uri = _this.editor_$.find(".Rk-Edit-URI").val(), + _image = _this.editor_$.find(".Rk-Edit-Image").val(); + _this.editor_$.find(".Rk-Edit-ImgPreview").attr("src", _image || _image_placeholder); + _this.editor_$.find(".Rk-Edit-Goto").attr("href",_uri); + var _data = { + title: _this.editor_$.find(".Rk-Edit-Title").val(), + description: _this.editor_$.find(".Rk-Edit-Description").val(), + uri: _uri, + image: _image + } + _model.set(_data); + _this.redraw(); + } else { + closeEditor(); } - _model.set(_data); - _this.redraw(); + }).defer(); }).throttle(500); @@ -800,15 +830,23 @@ 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")); - paper.view.draw(); + if (_this.renderer.isEditable()) { + _model.set("color", $(this).attr("data-color")); + paper.view.draw(); + } else { + closeEditor(); + } }); function shiftSize(n) { - var _newsize = n+(_model.get("size") || 0); - _this.editor_$.find(".Rk-Edit-Size-Value").text((_newsize > 0 ? "+" : "") + _newsize); - _model.set("size", _newsize); - paper.view.draw(); + if (_this.renderer.isEditable()) { + var _newsize = n+(_model.get("size") || 0); + _this.editor_$.find(".Rk-Edit-Size-Value").text((_newsize > 0 ? "+" : "") + _newsize); + _model.set("size", _newsize); + paper.view.draw(); + } else { + closeEditor(); + } } this.editor_$.find(".Rk-Edit-Size-Down").click(function() { @@ -892,7 +930,7 @@ _from_model = _model.get("from"), _to_model = _model.get("to"), _created_by = _model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER, - _template = (this.renderer.renkan.read_only ? this.readOnlyTemplate : this.template); + _template = (this.renderer.isEditable() ? this.template : this.readOnlyTemplate); this.editor_$ .html(_template({ edge: { @@ -909,25 +947,31 @@ created_by_title: _created_by.get("title") }, translate: this.renderer.renkan.translate, - properties: this.renderer.renkan.properties + properties: this.renderer.renkan.options.properties })); this.redraw(); - var _this = this; - this.editor_$.find(".Rk-CloseX").click(function() { - _this.renderer.removeRepresentation(_this); - paper.view.draw(); - }); - if (!this.renderer.renkan.read_only) { + var _this = this, + closeEditor = function() { + _this.renderer.removeRepresentation(_this); + paper.view.draw(); + } + this.editor_$.find(".Rk-CloseX").click(closeEditor); + + if (this.renderer.isEditable()) { var onFieldChange = Rkns._(function() { Rkns._(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(), - uri: _this.editor_$.find(".Rk-Edit-URI").val() - } - _model.set(_data); - paper.view.draw(); + if (_this.renderer.isEditable()) { + _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(), + uri: _this.editor_$.find(".Rk-Edit-URI").val() + } + _model.set(_data); + paper.view.draw(); + } else { + closeEditor(); + } }).defer(); }).throttle(500); @@ -942,11 +986,15 @@ } }); this.editor_$.find(".Rk-Edit-Direction").click(function() { - _model.set({ - from: _model.get("to"), - to: _model.get("from") - }); - _this.draw(); + if (_this.renderer.isEditable()) { + _model.set({ + from: _model.get("to"), + to: _model.get("from") + }); + _this.draw(); + } else { + closeEditor(); + } }); this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, @@ -956,8 +1004,12 @@ 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")); - paper.view.draw(); + if (_this.renderer.isEditable()) { + _model.set("color", $(this).attr("data-color")); + paper.view.draw(); + } else { + closeEditor(); + } }); } } @@ -989,7 +1041,7 @@ if (this.sector) { this.sector.destroy(); } - this.sector = Rkns.Renderer.Utils.sector(this, 1 + sectorInner, Rkns.Renderer._NODE_BUTTON_WIDTH + sectorInner, - 90, 30, 1, this.renderer.renkan.static_url+'img/edit.png', this.renderer.renkan.translate("Edit")); + this.sector = Rkns.Renderer.Utils.sector(this, 1 + sectorInner, Rkns.Renderer._NODE_BUTTON_WIDTH + sectorInner, - 90, 30, 1, this.renderer.renkan.options.static_url+'img/edit.png', this.renderer.renkan.translate("Edit")); this.lastSectorInner = sectorInner; } } @@ -1042,7 +1094,7 @@ if (this.sector) { this.sector.destroy(); } - this.sector = Rkns.Renderer.Utils.sector(this, 1 + sectorInner, Rkns.Renderer._NODE_BUTTON_WIDTH + sectorInner, - 210, - 90, 1, this.renderer.renkan.static_url+'img/remove.png', this.renderer.renkan.translate("Remove")); + this.sector = Rkns.Renderer.Utils.sector(this, 1 + sectorInner, Rkns.Renderer._NODE_BUTTON_WIDTH + sectorInner, - 210, - 90, 1, this.renderer.renkan.options.static_url+'img/remove.png', this.renderer.renkan.translate("Remove")); this.lastSectorInner = sectorInner; } } @@ -1072,7 +1124,7 @@ Rkns.Renderer.NodeRemoveButton.prototype.mouseup = function() { this.renderer.removeRepresentationsOfType("editor"); - if (confirm(this.renderer.renkan.translate('Do you really wish to remove node ') + '"' + this.node_representation.model.get("title") + '"?')) { + if (this.renderer.isEditable() && confirm(this.renderer.renkan.translate('Do you really wish to remove node ') + '"' + this.node_representation.model.get("title") + '"?')) { this.project.removeNode(this.node_representation.model); } } @@ -1096,7 +1148,7 @@ if (this.sector) { this.sector.destroy(); } - this.sector = Rkns.Renderer.Utils.sector(this, 1 + sectorInner, Rkns.Renderer._NODE_BUTTON_WIDTH + sectorInner, 30, 150, 1, this.renderer.renkan.static_url+'img/link.png', this.renderer.renkan.translate("Link to another node")); + this.sector = Rkns.Renderer.Utils.sector(this, 1 + sectorInner, Rkns.Renderer._NODE_BUTTON_WIDTH + sectorInner, 30, 150, 1, this.renderer.renkan.options.static_url+'img/link.png', this.renderer.renkan.translate("Link to another node")); this.lastSectorInner = sectorInner; } } @@ -1134,7 +1186,7 @@ Rkns.Renderer.EdgeEditButton.prototype._init = function() { 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, this.renderer.renkan.static_url+'img/edit.png', this.renderer.renkan.translate("Edit")); + this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 90, 90, 1, this.renderer.renkan.options.static_url+'img/edit.png', this.renderer.renkan.translate("Edit")); } Rkns.Renderer.EdgeEditButton.prototype.moveTo = function(_pos) { @@ -1176,7 +1228,7 @@ Rkns.Renderer.EdgeRemoveButton.prototype._init = function() { 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, this.renderer.renkan.static_url+'img/remove.png', this.renderer.renkan.translate("Remove")); + this.sector = Rkns.Renderer.Utils.sector(this, Rkns.Renderer._EDGE_BUTTON_INNER, Rkns.Renderer._EDGE_BUTTON_OUTER, - 270, -90, 1, this.renderer.renkan.options.static_url+'img/remove.png', this.renderer.renkan.translate("Remove")); } Rkns.Renderer.EdgeRemoveButton.prototype.moveTo = function(_pos) { this.sector.moveTo(_pos); @@ -1203,7 +1255,7 @@ Rkns.Renderer.EdgeRemoveButton.prototype.mouseup = function() { this.renderer.removeRepresentationsOfType("editor"); - if (confirm(this.renderer.renkan.translate('Do you really wish to remove edge ') + '"' + this.edge_representation.model.get("title") + '"?')) { + if (this.renderer.isEditable() && confirm(this.renderer.renkan.translate('Do you really wish to remove edge ') + '"' + this.edge_representation.model.get("title") + '"?')) { this.project.removeEdge(this.edge_representation.model); } } @@ -1315,7 +1367,7 @@ _event.stopPropagation(); _event.preventDefault(); _allowScroll = true; - if (_this.renkan.read_only) { + if (!_this.isEditable()) { return; } var res = {} @@ -1392,15 +1444,6 @@ newNode.description = snippet.find("[data-description]").attr("data-description") || newNode.description; } } -/* - var fields = ["title", "description", "uri", "image"]; - for (var i = 0; i < fields.length; i++) { - var f = fields[i]; - if (res["text/x-iri-" + f]) { - newNode[f] = res["text/x-iri-" + f]; - } - } -*/ if (newNode.title || newNode.description || newNode.uri) { var _off = _this.canvas_$.offset(), _point = new paper.Point([ @@ -1575,11 +1618,11 @@ } Rkns.Renderer.Scene.prototype.template = Rkns._.template( - '