diff -r 3389e6c46936 -r 9b459e41e2df client/js/paper-renderer.js --- a/client/js/paper-renderer.js Tue Feb 26 11:09:57 2013 +0100 +++ b/client/js/paper-renderer.js Tue Feb 26 17:04:24 2013 +0100 @@ -21,6 +21,7 @@ _CLICKMODE_ADDNODE : 1, _CLICKMODE_STARTEDGE : 2, _CLICKMODE_ENDEDGE : 3, + _IMAGE_MAX_KB : 500, _USER_PLACEHOLDER : { color: "#000000", title: "(unknown user)", @@ -645,21 +646,23 @@ } Rkns.Renderer.NodeEditor.prototype.template = Rkns._.template( - '
<%=node.created_by_title%>
' + + '<%-translate("Created by:")%> <%=node.created_by_title%>
' ); Rkns.Renderer.NodeEditor.prototype.readOnlyTemplate = Rkns._.template( '<%-node.description%>
' - + '<%=node.created_by_title%>
' + + '<%-translate("Created by:")%> <%=node.created_by_title%>
' ); Rkns.Renderer.NodeEditor.prototype.draw = function() { @@ -673,11 +676,12 @@ uri: _model.get("uri"), description: _model.get("description"), image: _model.get("image") || "", + image_placeholder: this.renderer.renkan.static_url + "img/image-placeholder.png", 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 + translate: this.renderer.renkan.translate })); this.redraw(); var _this = this; @@ -686,19 +690,44 @@ paper.view.draw(); }); if (!this.renderer.renkan.read_only) { - this.editor_$.find("input, textarea").bind("keyup change", 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); - _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(); + + 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); + _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(); + }).defer(); + }).throttle(500); + + this.editor_$.find("input, textarea").bind("change keyup paste", onFieldChange); + + this.editor_$.find(".Rk-Edit-Image-File").bind("change", function() { + if (this.files.length) { + var f = this.files[0], + fr = new FileReader(); + if (f.type.substr(0,5) !== "image") { + alert(_this.renderer.renkan.translate("This file is not an image")); + return; + } + if (f.size > (Rkns.Renderer._IMAGE_MAX_KB * 1024)) { + alert(_this.renderer.renkan.translate("Image size must be under ")+Rkns.Renderer._IMAGE_MAX_KB+_this.renderer.renkan.translate("KB")); + return; + } + fr.onload = function(e) { + _this.editor_$.find(".Rk-Edit-Image").val(e.target.result); + onFieldChange(); + } + fr.readAsDataURL(f); + } }); this.editor_$.find(".Rk-Edit-Title")[0].focus(); this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( @@ -754,23 +783,23 @@ } Rkns.Renderer.EdgeEditor.prototype.template = Rkns._.template( - '<%=edge.from_title%>
' - + '<%=edge.to_title%>
' - + '<%=edge.created_by_title%>
' + + '<%-translate("From:")%><%=edge.from_title%>
' + + '<%-translate("To:")%><%=edge.to_title%>
' + + '<%-translate("Created by:")%><%=edge.created_by_title%>
' ); Rkns.Renderer.EdgeEditor.prototype.readOnlyTemplate = Rkns._.template( '<%-edge.description%>
' - + '<%=edge.from_title%>
' - + '<%=edge.to_title%>
' - + '<%=edge.created_by_title%>
' + + '<%-translate("From:")%><%=edge.from_title%>
' + + '<%-translate("To:")%><%=edge.to_title%>
' + + '<%-translate("Created by:")%><%=edge.created_by_title%>
' ); Rkns.Renderer.EdgeEditor.prototype.draw = function() { @@ -793,7 +822,7 @@ created_by_color: _created_by.get("color"), created_by_title: _created_by.get("title") }, - l10n: this.renderer.renkan.l10n + translate: this.renderer.renkan.translate })); this.redraw(); var _this = this; @@ -802,15 +831,20 @@ paper.view.draw(); }); if (!this.renderer.renkan.read_only) { - 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(), - uri: _this.editor_$.find(".Rk-Edit-URI").val() - } - _model.set(_data); - _this.redraw(); - }); + + 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); + _this.redraw(); + }).defer(); + }).throttle(500); + + this.editor_$.find("input, textarea").bind("keyup change paste", onFieldChange); this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, function() { _this.editor_$.find(".Rk-Edit-ColorPicker").hide(); } @@ -844,7 +878,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, this.renderer.renkan.static_url+'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.translate("Edit")); } Rkns.Renderer.NodeEditButton.prototype.moveTo = function(_pos) { @@ -887,7 +921,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, this.renderer.renkan.static_url+'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.translate("Remove")); } Rkns.Renderer.NodeRemoveButton.prototype.moveTo = function(_pos) { @@ -915,7 +949,7 @@ Rkns.Renderer.NodeRemoveButton.prototype.mouseup = function() { this.renderer.removeRepresentationsOfType("editor"); - if (confirm('Do you really wish to remove node "' + this.node_representation.model.get("title") + '"?')) { + if (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); } } @@ -931,7 +965,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, this.renderer.renkan.static_url+'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.translate("Link to another node")); } Rkns.Renderer.NodeLinkButton.prototype.moveTo = function(_pos) { @@ -968,7 +1002,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, this.renderer.renkan.static_url+'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.translate("Edit")); } Rkns.Renderer.EdgeEditButton.prototype.moveTo = function(_pos) { @@ -1011,7 +1045,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, this.renderer.renkan.static_url+'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.translate("Remove")); } Rkns.Renderer.EdgeRemoveButton.prototype.moveTo = function(_pos) { this.sector.moveTo(_pos); @@ -1038,7 +1072,7 @@ Rkns.Renderer.EdgeRemoveButton.prototype.mouseup = function() { this.renderer.removeRepresentationsOfType("editor"); - if (confirm('Do you really wish to remove edge "' + this.edge_representation.model.get("title") + '"?')) { + if (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); } } @@ -1092,6 +1126,59 @@ this.canvas_$.mouseenter(function(_event) { _this.onMouseEnter(_event); }); + this.canvas_$.on("dragover", function(_event) { + _event.stopPropagation(); + _event.preventDefault(); + }) + this.canvas_$.on("drop", function(_event) { + _event.stopPropagation(); + _event.preventDefault(); + var res = {} + Rkns._(_event.originalEvent.dataTransfer.types).each(function(t) { + return res[t] = _event.originalEvent.dataTransfer.getData(t); + }); + var newNode = {}; + if (res["text/plain"]) { + newNode.description = res["text/plain"].replace(/[\s\n]+/gm,' ').trim(); + } + if (res["text/html"]) { + var snippet = Rkns.$('