diff --git a/editor/svg-editor.js b/editor/svg-editor.js
index 96e5ee0a..967a36c3 100644
--- a/editor/svg-editor.js
+++ b/editor/svg-editor.js
@@ -382,12 +382,23 @@ function svg_edit_setup() {
}
var extAdded = function(window, ext) {
+
+ var cb_called = false;
+
+ var runCallback = function() {
+ if(ext.callback && !cb_called) {
+ cb_called = true;
+ ext.callback();
+ }
+ }
+
if(ext.buttons) {
var fallback_obj = {},
placement_obj = {},
svgicons = ext.svgicons;
var holders = {};
+
// Add buttons given by extension
$.each(ext.buttons, function(i, btn) {
@@ -514,32 +525,70 @@ function svg_edit_setup() {
setIconSize('m');
setIconSize(old);
}
+ runCallback();
}
});
}
- if(ext.context_panels) {
- $.each(ext.context_panels, function(i, panel) {
- // Add select panel
+ if(ext.context_tools) {
+ $.each(ext.context_tools, function(i, tool) {
+ // Add select tool
+ var cont_id = tool.container_id?(' id="' + tool.container_id + '"'):"";
- // TODO: Allow support for other types, or adding to existing panel
- if(panel.type == "select") {
- var html = '
";
- // Creates the panel, hides & adds it, returns the select element
- var sel = $(html).hide().appendTo("#tools_top").find("select");
- $.each(panel.events, function(evt, func) {
- $(sel).bind(evt, func);
- });
+ var panel = $('#' + tool.panel);
+
+ if(!panel.length) {
+ panel = $('', {id: tool.panel}).appendTo("#tools_top");
}
+ // TODO: Allow support for other types, or adding to existing tool
+ switch (tool.type) {
+ case 'select':
+ var html = '";
+ // Creates the tool, hides & adds it, returns the select element
+ var sel = $(html).appendTo(panel).find('select');
+
+ $.each(tool.events, function(evt, func) {
+ $(sel).bind(evt, func);
+ });
+ break;
+
+ case 'input':
+ var html = ''
+
+ // Creates the tool, hides & adds it, returns the select element
+
+ // Add to given tool.panel
+ var inp = $(html).appendTo(panel).find('input');
+
+ if(tool.spindata) {
+ inp.SpinButton(tool.spindata);
+ }
+
+ if(tool.events) {
+ $.each(tool.events, function(evt, func) {
+ $(sel).bind(evt, func);
+ });
+ }
+ break;
+
+ default:
+ break;
+ }
});
}
+
+ runCallback();
};
var getPaint = function(color, opac) {
diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js
index 3516de41..32f13df3 100644
--- a/editor/svgcanvas.js
+++ b/editor/svgcanvas.js
@@ -6541,6 +6541,9 @@ function BatchCommand(text) {
// selector if the element is in that array
if ($.inArray(elem, selectedElements) != -1) {
setTimeout(function() {
+ // Due to element replacement, this element may no longer
+ // be part of the DOM
+ if(!elem.parentNode) return;
selectorManager.requestSelector(elem).resize();
},0);
}
diff --git a/extensions/ext-arrows.js b/extensions/ext-arrows.js
index 97e7ea1b..8d3c6f48 100644
--- a/extensions/ext-arrows.js
+++ b/extensions/ext-arrows.js
@@ -135,10 +135,11 @@ $(function() {
return {
name: "Arrows",
- context_panels: [{
+ context_tools: [{
type: "select",
- id: "arrow_panel",
- list_id: "arrow_list",
+ panel: "arrow_panel",
+ title: "Select arrow type",
+ id: "arrow_list",
options: {
none: "No arrow",
end: "---->",
@@ -147,11 +148,14 @@ $(function() {
mid: "-->--",
mid_bk: "--<--"
},
- defopt: "none",
+ defval: "none",
events: {
change: setArrow
}
}],
+ callback: function() {
+ $('#arrow_panel').hide();
+ },
addLangData: function(lang) {
return {
data: lang_list[lang]
diff --git a/extensions/ext-connector.js b/extensions/ext-connector.js
index 7c90e3c4..a0e050e7 100644
--- a/extensions/ext-connector.js
+++ b/extensions/ext-connector.js
@@ -473,6 +473,7 @@ $(function() {
se_ns = svgCanvas.getEditorNS(true);
cur_line.setAttributeNS(se_ns, "se:connector", conn_str);
cur_line.setAttribute('class', conn_sel.substr(1));
+ cur_line.setAttribute('opacity', 1);
svgCanvas.addToSelection([cur_line]);
svgCanvas.moveToBottomSelectedElement();
selManager.requestSelector(cur_line).showGrips(false);
@@ -522,11 +523,40 @@ $(function() {
elem.getAttribute("marker-end")
)) {
var start = elem.getAttribute("marker-start");
+ var mid = elem.getAttribute("marker-mid");
var end = elem.getAttribute("marker-end");
cur_line = elem;
$(elem)
.data("start_off", !!start)
.data("end_off", !!end);
+
+ if(elem.tagName == "line" && mid) {
+ // Convert to polyline to accept mid-arrow
+
+ var x1 = elem.getAttribute('x1')-0;
+ var x2 = elem.getAttribute('x2')-0;
+ var y1 = elem.getAttribute('y1')-0;
+ var y2 = elem.getAttribute('y2')-0;
+ var id = elem.id;
+
+ var mid_pt = (' '+((x1+x2)/2)+','+((y1+y2)/2) + ' ');
+ var pline = addElem({
+ "element": "polyline",
+ "attr": {
+ "points": (x1+','+y1+ mid_pt +x2+','+y2),
+ "stroke": elem.getAttribute('stroke'),
+ "stroke-width": elem.getAttribute('stroke-width'),
+ "marker-mid": mid,
+ "fill": "none",
+ "opacity": elem.getAttribute('opacity') || 1
+ }
+ });
+ $(elem).after(pline).remove();
+ svgCanvas.clearSelection();
+ pline.id = id;
+ svgCanvas.addToSelection([pline]);
+ }
+
}
updateConnectors();
},