19 _EDITOR_PADDING : 10, |
19 _EDITOR_PADDING : 10, |
20 _EDITOR_GRADIENT : new paper.Gradient(['#f0f0f0', '#d0d0d0']), |
20 _EDITOR_GRADIENT : new paper.Gradient(['#f0f0f0', '#d0d0d0']), |
21 _CLICKMODE_ADDNODE : 1, |
21 _CLICKMODE_ADDNODE : 1, |
22 _CLICKMODE_STARTEDGE : 2, |
22 _CLICKMODE_STARTEDGE : 2, |
23 _CLICKMODE_ENDEDGE : 3, |
23 _CLICKMODE_ENDEDGE : 3, |
|
24 _IMAGE_MAX_KB : 500, |
24 _USER_PLACEHOLDER : { |
25 _USER_PLACEHOLDER : { |
25 color: "#000000", |
26 color: "#000000", |
26 title: "(unknown user)", |
27 title: "(unknown user)", |
27 get: function(attr) { |
28 get: function(attr) { |
28 return this[attr] || false; |
29 return this[attr] || false; |
643 }) |
644 }) |
644 .hide(); |
645 .hide(); |
645 } |
646 } |
646 |
647 |
647 Rkns.Renderer.NodeEditor.prototype.template = Rkns._.template( |
648 Rkns.Renderer.NodeEditor.prototype.template = Rkns._.template( |
648 '<h2><span class="Rk-CloseX">×</span><%=l10n.edit_node%></span></h2>' |
649 '<h2><span class="Rk-CloseX">×</span><%-translate("Edit Node")%></span></h2>' |
649 + '<p><label><%=l10n.edit_title%></label><input class="Rk-Edit-Title" type="text" value="<%=node.title%>"/></p>' |
650 + '<p><label><%-translate("Title:")%></label><input class="Rk-Edit-Title" type="text" value="<%=node.title%>"/></p>' |
650 + '<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>' |
651 + '<p><label><%-translate("URI:")%></label><input class="Rk-Edit-URI" type="text" value="<%=node.uri%>"/><a class="Rk-Edit-Goto" href="<%=node.uri%>" target="_blank"></a></p>' |
651 + '<p><label><%=l10n.edit_description%></label><textarea class="Rk-Edit-Description"><%=node.description%></textarea></p>' |
652 + '<p><label><%-translate("Description:")%></label><textarea class="Rk-Edit-Description"><%=node.description%></textarea></p>' |
652 + '<div class="Rk-Editor-p"><label>Node color</label><div class="Rk-Edit-ColorPicker-Wrapper"><span class="Rk-Edit-Color" style="background:<%=node.color%>;"><span class="Rk-Edit-ColorTip"></span></span><ul class="Rk-Edit-ColorPicker">' |
653 + '<div class="Rk-Editor-p"><span class="Rk-Editor-Label"><%-translate("Node color:")%></span><div class="Rk-Edit-ColorPicker-Wrapper"><span class="Rk-Edit-Color" style="background:<%=node.color%>;"><span class="Rk-Edit-ColorTip"></span></span><ul class="Rk-Edit-ColorPicker">' |
653 + '<% print(Rkns.pickerColors.reduce(function(m,c) { return m + "<li data-color=\'" + c + "\' style=\'background: " + c + "\'></li>"},"")); %></ul><span class="Rk-Edit-ColorPicker-Text">Choose color</span></div></div>' |
654 + '<% print(Rkns.pickerColors.reduce(function(m,c) { return m + "<li data-color=\'" + c + "\' style=\'background: " + c + "\'></li>"},"")); %></ul><span class="Rk-Edit-ColorPicker-Text">Choose color</span></div></div>' |
654 + '<p><label><%=l10n.edit_image%></label><input class="Rk-Edit-Image" type="text" value="<%=node.image%>"/><img class="Rk-Edit-ImgPreview" src="<%=node.image%>" /></p>' |
655 + '<img class="Rk-Edit-ImgPreview" src="<%=node.image || node.image_placeholder%>" />' |
655 + '<p><label><%=l10n.created_by%></label> <span class="Rk-UserColor" style="background:<%=node.created_by_color%>;"></span><%=node.created_by_title%></p>' |
656 + '<p><label><%-translate("Image URL:")%></label><input class="Rk-Edit-Image" type="text" value="<%=node.image%>"/></p>' |
|
657 + '<p><label><%-translate("Choose Image File:")%></label><input class="Rk-Edit-Image-File" type="file"/></p>' |
|
658 + '<p><span class="Rk-Editor-Label"><%-translate("Created by:")%></span> <span class="Rk-UserColor" style="background:<%=node.created_by_color%>;"></span><%=node.created_by_title%></p>' |
656 ); |
659 ); |
657 |
660 |
658 Rkns.Renderer.NodeEditor.prototype.readOnlyTemplate = Rkns._.template( |
661 Rkns.Renderer.NodeEditor.prototype.readOnlyTemplate = Rkns._.template( |
659 '<h2><span class="Rk-CloseX">×</span><span class="Rk-UserColor" style="background:<%=node.color%>;"></span><%-node.title%></span></h2>' |
662 '<h2><span class="Rk-CloseX">×</span><span class="Rk-UserColor" style="background:<%=node.color%>;"></span><%-node.title%></span></h2>' |
660 + '<p><a href="<%-node.uri%>" target="_blank"><%-node.uri%></a></p>' |
663 + '<p><a href="<%-node.uri%>" target="_blank"><%-node.uri%></a></p>' |
661 + '<p><%-node.description%></p>' |
664 + '<p><%-node.description%></p>' |
662 + '<p><label><%=l10n.created_by%> </label><span class="Rk-UserColor" style="background:<%=node.created_by_color%>;"></span><%=node.created_by_title%></p>' |
665 + '<p><span class="Rk-Editor-Label"><%-translate("Created by:")%> </span><span class="Rk-UserColor" style="background:<%=node.created_by_color%>;"></span><%=node.created_by_title%></p>' |
663 ); |
666 ); |
664 |
667 |
665 Rkns.Renderer.NodeEditor.prototype.draw = function() { |
668 Rkns.Renderer.NodeEditor.prototype.draw = function() { |
666 var _model = this.node_representation.model, |
669 var _model = this.node_representation.model, |
667 _created_by = _model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER, |
670 _created_by = _model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER, |
671 node: { |
674 node: { |
672 title: _model.get("title"), |
675 title: _model.get("title"), |
673 uri: _model.get("uri"), |
676 uri: _model.get("uri"), |
674 description: _model.get("description"), |
677 description: _model.get("description"), |
675 image: _model.get("image") || "", |
678 image: _model.get("image") || "", |
|
679 image_placeholder: this.renderer.renkan.static_url + "img/image-placeholder.png", |
676 color: _model.get("color") || _created_by.get("color"), |
680 color: _model.get("color") || _created_by.get("color"), |
677 created_by_color: _created_by.get("color"), |
681 created_by_color: _created_by.get("color"), |
678 created_by_title: _created_by.get("title") |
682 created_by_title: _created_by.get("title") |
679 }, |
683 }, |
680 l10n: this.renderer.renkan.l10n |
684 translate: this.renderer.renkan.translate |
681 })); |
685 })); |
682 this.redraw(); |
686 this.redraw(); |
683 var _this = this; |
687 var _this = this; |
684 this.editor_$.find(".Rk-CloseX").click(function() { |
688 this.editor_$.find(".Rk-CloseX").click(function() { |
685 _this.renderer.removeRepresentation(_this); |
689 _this.renderer.removeRepresentation(_this); |
686 paper.view.draw(); |
690 paper.view.draw(); |
687 }); |
691 }); |
688 if (!this.renderer.renkan.read_only) { |
692 if (!this.renderer.renkan.read_only) { |
689 this.editor_$.find("input, textarea").bind("keyup change", function() { |
693 |
690 var _uri = _this.editor_$.find(".Rk-Edit-URI").val(), |
694 var onFieldChange = Rkns._(function() { |
691 _image = _this.editor_$.find(".Rk-Edit-Image").val(); |
695 Rkns._(function() { |
692 _this.editor_$.find(".Rk-Edit-ImgPreview").attr("src", _image); |
696 var _uri = _this.editor_$.find(".Rk-Edit-URI").val(), |
693 _this.editor_$.find(".Rk-Edit-Goto").attr("href",_uri); |
697 _image = _this.editor_$.find(".Rk-Edit-Image").val(); |
694 var _data = { |
698 _this.editor_$.find(".Rk-Edit-ImgPreview").attr("src", _image); |
695 title: _this.editor_$.find(".Rk-Edit-Title").val(), |
699 _this.editor_$.find(".Rk-Edit-Goto").attr("href",_uri); |
696 description: _this.editor_$.find(".Rk-Edit-Description").val(), |
700 var _data = { |
697 uri: _uri, |
701 title: _this.editor_$.find(".Rk-Edit-Title").val(), |
698 image: _image |
702 description: _this.editor_$.find(".Rk-Edit-Description").val(), |
699 } |
703 uri: _uri, |
700 _model.set(_data); |
704 image: _image |
701 _this.redraw(); |
705 } |
|
706 _model.set(_data); |
|
707 _this.redraw(); |
|
708 }).defer(); |
|
709 }).throttle(500); |
|
710 |
|
711 this.editor_$.find("input, textarea").bind("change keyup paste", onFieldChange); |
|
712 |
|
713 this.editor_$.find(".Rk-Edit-Image-File").bind("change", function() { |
|
714 if (this.files.length) { |
|
715 var f = this.files[0], |
|
716 fr = new FileReader(); |
|
717 if (f.type.substr(0,5) !== "image") { |
|
718 alert(_this.renderer.renkan.translate("This file is not an image")); |
|
719 return; |
|
720 } |
|
721 if (f.size > (Rkns.Renderer._IMAGE_MAX_KB * 1024)) { |
|
722 alert(_this.renderer.renkan.translate("Image size must be under ")+Rkns.Renderer._IMAGE_MAX_KB+_this.renderer.renkan.translate("KB")); |
|
723 return; |
|
724 } |
|
725 fr.onload = function(e) { |
|
726 _this.editor_$.find(".Rk-Edit-Image").val(e.target.result); |
|
727 onFieldChange(); |
|
728 } |
|
729 fr.readAsDataURL(f); |
|
730 } |
702 }); |
731 }); |
703 this.editor_$.find(".Rk-Edit-Title")[0].focus(); |
732 this.editor_$.find(".Rk-Edit-Title")[0].focus(); |
704 this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( |
733 this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( |
705 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, |
734 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, |
706 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").hide(); } |
735 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").hide(); } |
752 }) |
781 }) |
753 .hide(); |
782 .hide(); |
754 } |
783 } |
755 |
784 |
756 Rkns.Renderer.EdgeEditor.prototype.template = Rkns._.template( |
785 Rkns.Renderer.EdgeEditor.prototype.template = Rkns._.template( |
757 '<h2><span class="Rk-CloseX">×</span><%=l10n.edit_edge%></span></h2>' |
786 '<h2><span class="Rk-CloseX">×</span><%-translate("Edit Edge")%></span></h2>' |
758 + '<p><label><%=l10n.edit_title%></label><input class="Rk-Edit-Title" type="text" value="<%=edge.title%>"/></p>' |
787 + '<p><label><%-translate("Title:")%></label><input class="Rk-Edit-Title" type="text" value="<%=edge.title%>"/></p>' |
759 + '<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>' |
788 + '<p><label><%-translate("URI:")%></label><input class="Rk-Edit-URI" type="text" value="<%=edge.uri%>"/><a class="Rk-Edit-Goto" href="<%=edge.uri%>" target="_blank"></a></p>' |
760 + '<div class="Rk-Editor-p"><label>Edge color:</label><div class="Rk-Edit-ColorPicker-Wrapper"><span class="Rk-Edit-Color" style="background:<%=edge.color%>;"><span class="Rk-Edit-ColorTip"></span></span><ul class="Rk-Edit-ColorPicker">' |
789 + '<div class="Rk-Editor-p"><span class="Rk-Editor-Label"><%-translate("Edge color:")%></span><div class="Rk-Edit-ColorPicker-Wrapper"><span class="Rk-Edit-Color" style="background:<%=edge.color%>;"><span class="Rk-Edit-ColorTip"></span></span><ul class="Rk-Edit-ColorPicker">' |
761 + '<% print(Rkns.pickerColors.reduce(function(m,c) { return m + "<li data-color=\'" + c + "\' style=\'background: " + c + "\'></li>"},"")); %></ul><span class="Rk-Edit-ColorPicker-Text">Choose color</span></div></div>' |
790 + '<% print(Rkns.pickerColors.reduce(function(m,c) { return m + "<li data-color=\'" + c + "\' style=\'background: " + c + "\'></li>"},"")); %></ul><span class="Rk-Edit-ColorPicker-Text">Choose color</span></div></div>' |
762 + '<p><label><%=l10n.edit_from%></label><span class="Rk-UserColor" style="background:<%=edge.from_color%>;"></span><%=edge.from_title%></p>' |
791 + '<p><span class="Rk-Editor-Label"><%-translate("From:")%></span><span class="Rk-UserColor" style="background:<%=edge.from_color%>;"></span><%=edge.from_title%></p>' |
763 + '<p><label><%=l10n.edit_to%></label><span class="Rk-UserColor" style="background:<%=edge.to_color%>;"></span><%=edge.to_title%></p>' |
792 + '<p><span class="Rk-Editor-Label"><%-translate("To:")%></span><span class="Rk-UserColor" style="background:<%=edge.to_color%>;"></span><%=edge.to_title%></p>' |
764 + '<p><label><%=l10n.created_by%> </label><span class="Rk-UserColor" style="background:<%=edge.created_by_color%>;"></span><%=edge.created_by_title%></p>' |
793 + '<p><span class="Rk-Editor-Label"><%-translate("Created by:")%></span><span class="Rk-UserColor" style="background:<%=edge.created_by_color%>;"></span><%=edge.created_by_title%></p>' |
765 ); |
794 ); |
766 |
795 |
767 Rkns.Renderer.EdgeEditor.prototype.readOnlyTemplate = Rkns._.template( |
796 Rkns.Renderer.EdgeEditor.prototype.readOnlyTemplate = Rkns._.template( |
768 '<h2><span class="Rk-CloseX">×</span><span class="Rk-UserColor" style="background:<%=edge.color%>;"></span><%- edge.title %></span></h2>' |
797 '<h2><span class="Rk-CloseX">×</span><span class="Rk-UserColor" style="background:<%=edge.color%>;"></span><%- edge.title %></span></h2>' |
769 + '<p><a href="<%-edge.uri%>" target="_blank"><%-edge.uri%></a></p>' |
798 + '<p><a href="<%-edge.uri%>" target="_blank"><%-edge.uri%></a></p>' |
770 + '<p><%-edge.description%></p>' |
799 + '<p><%-edge.description%></p>' |
771 + '<p><label><%=l10n.edit_from%></label><span class="Rk-UserColor" style="background:<%=edge.from_color%>;"></span><%=edge.from_title%></p>' |
800 + '<p><span class="Rk-Editor-Label"><%-translate("From:")%></span><span class="Rk-UserColor" style="background:<%=edge.from_color%>;"></span><%=edge.from_title%></p>' |
772 + '<p><label><%=l10n.edit_to%></label><span class="Rk-UserColor" style="background:<%=edge.to_color%>;"></span><%=edge.to_title%></p>' |
801 + '<p><span class="Rk-Editor-Label"><%-translate("To:")%></span><span class="Rk-UserColor" style="background:<%=edge.to_color%>;"></span><%=edge.to_title%></p>' |
773 + '<p><label><%=l10n.created_by%> </label><span class="Rk-UserColor" style="background:<%=edge.created_by_color%>;"></span><%=edge.created_by_title%></p>' |
802 + '<p><span class="Rk-Editor-Label"><%-translate("Created by:")%></span><span class="Rk-UserColor" style="background:<%=edge.created_by_color%>;"></span><%=edge.created_by_title%></p>' |
774 ); |
803 ); |
775 |
804 |
776 Rkns.Renderer.EdgeEditor.prototype.draw = function() { |
805 Rkns.Renderer.EdgeEditor.prototype.draw = function() { |
777 var _model = this.edge_representation.model, |
806 var _model = this.edge_representation.model, |
778 _from_model = _model.get("from"), |
807 _from_model = _model.get("from"), |
791 from_color: _from_model.get("color") || (_from_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"), |
820 from_color: _from_model.get("color") || (_from_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"), |
792 to_color: _to_model.get("color") || (_to_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"), |
821 to_color: _to_model.get("color") || (_to_model.get("created_by") || Rkns.Renderer._USER_PLACEHOLDER).get("color"), |
793 created_by_color: _created_by.get("color"), |
822 created_by_color: _created_by.get("color"), |
794 created_by_title: _created_by.get("title") |
823 created_by_title: _created_by.get("title") |
795 }, |
824 }, |
796 l10n: this.renderer.renkan.l10n |
825 translate: this.renderer.renkan.translate |
797 })); |
826 })); |
798 this.redraw(); |
827 this.redraw(); |
799 var _this = this; |
828 var _this = this; |
800 this.editor_$.find(".Rk-CloseX").click(function() { |
829 this.editor_$.find(".Rk-CloseX").click(function() { |
801 _this.renderer.removeRepresentation(_this); |
830 _this.renderer.removeRepresentation(_this); |
802 paper.view.draw(); |
831 paper.view.draw(); |
803 }); |
832 }); |
804 if (!this.renderer.renkan.read_only) { |
833 if (!this.renderer.renkan.read_only) { |
805 this.editor_$.find("input, textarea").bind("keyup change", function() { |
834 |
806 _this.editor_$.find(".Rk-Edit-Goto").attr("href",_this.editor_$.find(".Rk-Edit-URI").val()); |
835 var onFieldChange = Rkns._(function() { |
807 var _data = { |
836 Rkns._(function() { |
808 title: _this.editor_$.find(".Rk-Edit-Title").val(), |
837 _this.editor_$.find(".Rk-Edit-Goto").attr("href",_this.editor_$.find(".Rk-Edit-URI").val()); |
809 uri: _this.editor_$.find(".Rk-Edit-URI").val() |
838 var _data = { |
810 } |
839 title: _this.editor_$.find(".Rk-Edit-Title").val(), |
811 _model.set(_data); |
840 uri: _this.editor_$.find(".Rk-Edit-URI").val() |
812 _this.redraw(); |
841 } |
813 }); |
842 _model.set(_data); |
|
843 _this.redraw(); |
|
844 }).defer(); |
|
845 }).throttle(500); |
|
846 |
|
847 this.editor_$.find("input, textarea").bind("keyup change paste", onFieldChange); |
814 this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( |
848 this.editor_$.find(".Rk-Edit-ColorPicker-Wrapper").hover( |
815 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, |
849 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").show(); }, |
816 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").hide(); } |
850 function() { _this.editor_$.find(".Rk-Edit-ColorPicker").hide(); } |
817 ); |
851 ); |
818 this.editor_$.find(".Rk-Edit-ColorPicker li").hover( |
852 this.editor_$.find(".Rk-Edit-ColorPicker li").hover( |
842 Rkns.Renderer.NodeEditButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
876 Rkns.Renderer.NodeEditButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
843 |
877 |
844 Rkns.Renderer.NodeEditButton.prototype._init = function() { |
878 Rkns.Renderer.NodeEditButton.prototype._init = function() { |
845 this.renderer.overlay_layer.activate(); |
879 this.renderer.overlay_layer.activate(); |
846 this.type = "Node-edit-button"; |
880 this.type = "Node-edit-button"; |
847 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); |
881 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")); |
848 } |
882 } |
849 |
883 |
850 Rkns.Renderer.NodeEditButton.prototype.moveTo = function(_pos) { |
884 Rkns.Renderer.NodeEditButton.prototype.moveTo = function(_pos) { |
851 this.sector.moveTo(_pos); |
885 this.sector.moveTo(_pos); |
852 } |
886 } |
885 Rkns.Renderer.NodeRemoveButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
919 Rkns.Renderer.NodeRemoveButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
886 |
920 |
887 Rkns.Renderer.NodeRemoveButton.prototype._init = function() { |
921 Rkns.Renderer.NodeRemoveButton.prototype._init = function() { |
888 this.renderer.overlay_layer.activate(); |
922 this.renderer.overlay_layer.activate(); |
889 this.type = "Node-remove-button"; |
923 this.type = "Node-remove-button"; |
890 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); |
924 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")); |
891 } |
925 } |
892 |
926 |
893 Rkns.Renderer.NodeRemoveButton.prototype.moveTo = function(_pos) { |
927 Rkns.Renderer.NodeRemoveButton.prototype.moveTo = function(_pos) { |
894 this.sector.moveTo(_pos); |
928 this.sector.moveTo(_pos); |
895 } |
929 } |
929 Rkns.Renderer.NodeLinkButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
963 Rkns.Renderer.NodeLinkButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
930 |
964 |
931 Rkns.Renderer.NodeLinkButton.prototype._init = function() { |
965 Rkns.Renderer.NodeLinkButton.prototype._init = function() { |
932 this.renderer.overlay_layer.activate(); |
966 this.renderer.overlay_layer.activate(); |
933 this.type = "Node-link-button"; |
967 this.type = "Node-link-button"; |
934 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); |
968 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")); |
935 } |
969 } |
936 |
970 |
937 Rkns.Renderer.NodeLinkButton.prototype.moveTo = function(_pos) { |
971 Rkns.Renderer.NodeLinkButton.prototype.moveTo = function(_pos) { |
938 this.sector.moveTo(_pos); |
972 this.sector.moveTo(_pos); |
939 } |
973 } |
966 Rkns.Renderer.EdgeEditButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
1000 Rkns.Renderer.EdgeEditButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
967 |
1001 |
968 Rkns.Renderer.EdgeEditButton.prototype._init = function() { |
1002 Rkns.Renderer.EdgeEditButton.prototype._init = function() { |
969 this.renderer.overlay_layer.activate(); |
1003 this.renderer.overlay_layer.activate(); |
970 this.type = "Edge-edit-button"; |
1004 this.type = "Edge-edit-button"; |
971 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); |
1005 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")); |
972 } |
1006 } |
973 |
1007 |
974 Rkns.Renderer.EdgeEditButton.prototype.moveTo = function(_pos) { |
1008 Rkns.Renderer.EdgeEditButton.prototype.moveTo = function(_pos) { |
975 this.sector.moveTo(_pos); |
1009 this.sector.moveTo(_pos); |
976 } |
1010 } |
1009 Rkns.Renderer.EdgeRemoveButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
1043 Rkns.Renderer.EdgeRemoveButton = Rkns.Utils.inherit(Rkns.Renderer._BaseRepresentation); |
1010 |
1044 |
1011 Rkns.Renderer.EdgeRemoveButton.prototype._init = function() { |
1045 Rkns.Renderer.EdgeRemoveButton.prototype._init = function() { |
1012 this.renderer.overlay_layer.activate(); |
1046 this.renderer.overlay_layer.activate(); |
1013 this.type = "Edge-remove-button"; |
1047 this.type = "Edge-remove-button"; |
1014 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); |
1048 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")); |
1015 } |
1049 } |
1016 Rkns.Renderer.EdgeRemoveButton.prototype.moveTo = function(_pos) { |
1050 Rkns.Renderer.EdgeRemoveButton.prototype.moveTo = function(_pos) { |
1017 this.sector.moveTo(_pos); |
1051 this.sector.moveTo(_pos); |
1018 } |
1052 } |
1019 |
1053 |
1090 _this.onDoubleClick(_event); |
1124 _this.onDoubleClick(_event); |
1091 }); |
1125 }); |
1092 this.canvas_$.mouseenter(function(_event) { |
1126 this.canvas_$.mouseenter(function(_event) { |
1093 _this.onMouseEnter(_event); |
1127 _this.onMouseEnter(_event); |
1094 }); |
1128 }); |
|
1129 this.canvas_$.on("dragover", function(_event) { |
|
1130 _event.stopPropagation(); |
|
1131 _event.preventDefault(); |
|
1132 }) |
|
1133 this.canvas_$.on("drop", function(_event) { |
|
1134 _event.stopPropagation(); |
|
1135 _event.preventDefault(); |
|
1136 var res = {} |
|
1137 Rkns._(_event.originalEvent.dataTransfer.types).each(function(t) { |
|
1138 return res[t] = _event.originalEvent.dataTransfer.getData(t); |
|
1139 }); |
|
1140 var newNode = {}; |
|
1141 if (res["text/plain"]) { |
|
1142 newNode.description = res["text/plain"].replace(/[\s\n]+/gm,' ').trim(); |
|
1143 } |
|
1144 if (res["text/html"]) { |
|
1145 var snippet = Rkns.$('<div>').html(res["text/html"]); |
|
1146 newNode.image = snippet.find("img").attr("src") || ''; |
|
1147 newNode.uri = snippet.find("a").attr("href"); |
|
1148 } |
|
1149 if (res["text/uri-list"]) { |
|
1150 newNode.uri = res["text/uri-list"]; |
|
1151 } |
|
1152 if (res["text/x-moz-url"]) { |
|
1153 newNode.title = (res["text/x-moz-url"].split("\n")[1] || "").trim(); |
|
1154 if (newNode.title === newNode.uri) { |
|
1155 newNode.title = ""; |
|
1156 } |
|
1157 } |
|
1158 if (newNode.title || newNode.description || newNode.uri) { |
|
1159 console.log(newNode); |
|
1160 var _off = _this.canvas_$.offset(), |
|
1161 _point = new paper.Point([ |
|
1162 _event.originalEvent.pageX - _off.left, |
|
1163 _event.originalEvent.pageY - _off.top |
|
1164 ]), |
|
1165 _coords = _this.toModelCoords(_point), |
|
1166 _data = { |
|
1167 id: Rkns.Utils.getUID('node'), |
|
1168 created_by: _this.renkan.current_user, |
|
1169 uri: newNode.uri || "", |
|
1170 title: newNode.title || _this.renkan.translate("Dragged resource"), |
|
1171 description: newNode.description || "", |
|
1172 image: newNode.image || "", |
|
1173 position: { |
|
1174 x: _coords.x, |
|
1175 y: _coords.y |
|
1176 } |
|
1177 }; |
|
1178 var _node = _this.renkan.project.addNode(_data); |
|
1179 _this.getRepresentationByModel(_node).openEditor(); |
|
1180 } |
|
1181 }) |
1095 this.editor_$.find(".Rk-ZoomOut").click(function() { |
1182 this.editor_$.find(".Rk-ZoomOut").click(function() { |
1096 _this.offset = new paper.Point([ |
1183 _this.offset = new paper.Point([ |
1097 _this.canvas_$.width(), |
1184 _this.canvas_$.width(), |
1098 _this.canvas_$.height() |
1185 _this.canvas_$.height() |
1099 ]).multiply( .5 * ( 1 - Math.SQRT1_2 ) ).add(_this.offset.multiply( Math.SQRT1_2 )); |
1186 ]).multiply( .5 * ( 1 - Math.SQRT1_2 ) ).add(_this.offset.multiply( Math.SQRT1_2 )); |
1139 if (_this.click_mode === Rkns.Renderer._CLICKMODE_ADDNODE) { |
1226 if (_this.click_mode === Rkns.Renderer._CLICKMODE_ADDNODE) { |
1140 _this.click_mode = false; |
1227 _this.click_mode = false; |
1141 _this.notif_$.hide(); |
1228 _this.notif_$.hide(); |
1142 } else { |
1229 } else { |
1143 _this.click_mode = Rkns.Renderer._CLICKMODE_ADDNODE; |
1230 _this.click_mode = Rkns.Renderer._CLICKMODE_ADDNODE; |
1144 _this.notif_$.html(_renkan.l10n.notif_add_node).fadeIn(); |
1231 _this.notif_$.html(_renkan.translate("Click on the background canvas to add a node")).fadeIn(); |
1145 } |
1232 } |
1146 }); |
1233 }); |
1147 this.$.find(".Rk-AddEdge-Button").click(function() { |
1234 this.$.find(".Rk-AddEdge-Button").click(function() { |
1148 if (_this.click_mode === Rkns.Renderer._CLICKMODE_STARTEDGE || _this.click_mode === Rkns.Renderer._CLICKMODE_ENDEDGE) { |
1235 if (_this.click_mode === Rkns.Renderer._CLICKMODE_STARTEDGE || _this.click_mode === Rkns.Renderer._CLICKMODE_ENDEDGE) { |
1149 _this.click_mode = false; |
1236 _this.click_mode = false; |
1150 _this.notif_$.hide(); |
1237 _this.notif_$.hide(); |
1151 } else { |
1238 } else { |
1152 _this.click_mode = Rkns.Renderer._CLICKMODE_STARTEDGE; |
1239 _this.click_mode = Rkns.Renderer._CLICKMODE_STARTEDGE; |
1153 _this.notif_$.html(_renkan.l10n.notif_start_edge).fadeIn(); |
1240 _this.notif_$.html(_renkan.translate("Click on a first node to start the edge")).fadeIn(); |
1154 } |
1241 } |
1155 }); |
1242 }); |
1156 this.$.find(".Rk-TopBar-Button").mouseover(function() { |
1243 this.$.find(".Rk-TopBar-Button").mouseover(function() { |
1157 Rkns.$(this).find(".Rk-TopBar-Tooltip").show(); |
1244 Rkns.$(this).find(".Rk-TopBar-Tooltip").show(); |
1158 }).mouseout(function() { |
1245 }).mouseout(function() { |
1207 |
1294 |
1208 this.redraw(); |
1295 this.redraw(); |
1209 } |
1296 } |
1210 |
1297 |
1211 Rkns.Renderer.Scene.prototype.template = Rkns._.template( |
1298 Rkns.Renderer.Scene.prototype.template = Rkns._.template( |
1212 '<div class="Rk-TopBar"><% if (read_only) { %><h2 class="Rk-PadTitle"><%- project.get("title") || l10n.untitled_project%></h2>' |
1299 '<div class="Rk-TopBar"><% if (read_only) { %><h2 class="Rk-PadTitle"><%- project.get("title") || translate("Untitled project")%></h2>' |
1213 + '<% } else { %><input type="text" class="Rk-PadTitle" value="<%- project.get("title") || "" %>" placeholder="<%=l10n.untitled_project%>" /><% } %>' |
1300 + '<% } else { %><input type="text" class="Rk-PadTitle" value="<%- project.get("title") || "" %>" placeholder="<%-translate("Untitled project")%>" /><% } %>' |
1214 + '<div class="Rk-Users"><div class="Rk-CurrentUser"><span class="Rk-CurrentUser-Color"></span><span class="Rk-CurrentUser-Name"><unknown user></span></div><ul class="Rk-UserList"></ul></div>' |
1301 + '<div class="Rk-Users"><div class="Rk-CurrentUser"><span class="Rk-CurrentUser-Color"></span><span class="Rk-CurrentUser-Name"><unknown user></span></div><ul class="Rk-UserList"></ul></div>' |
1215 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-FullScreen-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%=l10n.full_screen%></div></div></div>' |
1302 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-FullScreen-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%-translate("Full Screen")%></div></div></div>' |
1216 + '<% if (!read_only) { %>' |
1303 + '<% if (!read_only) { %>' |
1217 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-AddNode-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%=l10n.add_node%></div></div></div>' |
1304 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-AddNode-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%-translate("Add Node")%></div></div></div>' |
1218 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-AddEdge-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%=l10n.add_edge%></div></div></div>' |
1305 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-AddEdge-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%-translate("Add Edge")%></div></div></div>' |
1219 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-Save-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%=l10n.save_project%></div></div></div>' |
1306 + '<div class="Rk-TopBar-Separator"></div><div class="Rk-TopBar-Button Rk-Save-Button"><div class="Rk-TopBar-Tooltip"><div class="Rk-TopBar-Tooltip-Tip"></div><div class="Rk-TopBar-Tooltip-Contents"><%-translate("Archive Project")%></div></div></div>' |
1220 + '<div class="Rk-TopBar-Separator"></div></div>' |
1307 + '<div class="Rk-TopBar-Separator"></div></div>' |
1221 + '<% } %>' |
1308 + '<% } %>' |
1222 + '<canvas class="Rk-Canvas" resize></canvas><div class="Rk-Editor"><div class="Rk-Notifications"></div>' |
1309 + '<canvas class="Rk-Canvas" resize></canvas><div class="Rk-Editor"><div class="Rk-Notifications"></div>' |
1223 + '<div class="Rk-ZoomButtons"><div class="Rk-ZoomIn" title="<%=l10n.zoom_in%>"></div><div class="Rk-ZoomOut" title="<%=l10n.zoom_out%>"></div></div>' |
1310 + '<div class="Rk-ZoomButtons"><div class="Rk-ZoomIn" title="<%-translate("Zoom In")%>"></div><div class="Rk-ZoomOut" title="<%-translate("Zoom Out")%>"></div></div>' |
1224 + '</div>' |
1311 + '</div>' |
1225 ); |
1312 ); |
1226 |
1313 |
1227 Rkns.Renderer.Scene.prototype.addToBundles = function(_edgeRepr) { |
1314 Rkns.Renderer.Scene.prototype.addToBundles = function(_edgeRepr) { |
1228 var _bundle = Rkns._(this.bundles).find(function(_bundle) { |
1315 var _bundle = Rkns._(this.bundles).find(function(_bundle) { |
1439 if (this.click_mode === Rkns.Renderer._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === "Node") { |
1526 if (this.click_mode === Rkns.Renderer._CLICKMODE_STARTEDGE && this.click_target && this.click_target.type === "Node") { |
1440 this.removeRepresentationsOfType("editor"); |
1527 this.removeRepresentationsOfType("editor"); |
1441 this.addTempEdge(this.click_target, _event.point); |
1528 this.addTempEdge(this.click_target, _event.point); |
1442 this.click_mode = Rkns.Renderer._CLICKMODE_ENDEDGE; |
1529 this.click_mode = Rkns.Renderer._CLICKMODE_ENDEDGE; |
1443 this.notif_$.fadeOut(function() { |
1530 this.notif_$.fadeOut(function() { |
1444 Rkns.$(this).html(_renkan.l10n.notif_end_edge).fadeIn(); |
1531 Rkns.$(this).html(_renkan.translate("Click on a second node to complete the edge")).fadeIn(); |
1445 }); |
1532 }); |
1446 } else { |
1533 } else { |
1447 this.notif_$.hide(); |
1534 this.notif_$.hide(); |
1448 this.click_mode = false; |
1535 this.click_mode = false; |
1449 } |
1536 } |