diff --git a/editor/svg-editor.js b/editor/svg-editor.js
index ad75d87d..c09127fd 100644
--- a/editor/svg-editor.js
+++ b/editor/svg-editor.js
@@ -332,6 +332,7 @@
'#tool_reorient':'reorient',
'#tool_group':'group',
'#tool_ungroup':'ungroup',
+ '#tool_unlink_use':'unlink_use',
'#tool_alignleft, #tool_posleft':'align_left',
'#tool_aligncenter, #tool_poscenter':'align_center',
@@ -1311,7 +1312,7 @@
}
var is_node = currentMode == 'pathedit'; //elem ? (elem.id && elem.id.indexOf('pathpointgrip') == 0) : false;
$('#selected_panel, #multiselected_panel, #g_panel, #rect_panel, #circle_panel,\
- #ellipse_panel, #line_panel, #text_panel, #image_panel, #gsvg_panel').hide();
+ #ellipse_panel, #line_panel, #text_panel, #image_panel, #container_panel, #use_panel').hide();
if (elem != null) {
var elname = elem.nodeName;
@@ -1401,13 +1402,14 @@
ellipse: ['cx','cy','rx','ry'],
line: ['x1','y1','x2','y2'],
text: [],
- gsvg: []
+ 'use': []
};
var el_name = elem.tagName;
if($(elem).data('gsvg')) {
- $('#gsvg_panel').show();
+ $('#container_panel').show();
+ $('#g_panel').show();
}
if(panels[el_name]) {
@@ -1446,8 +1448,7 @@
var href = elem.getAttributeNS(xlinkNS, "href");
setImageURL(href);
} // image
- else if(el_name == 'g') {
- console.log('is group');
+ else if(el_name == 'g' || el_name == 'use') {
var title = svgCanvas.getTitle();
$('#g_title').val(title);
}
@@ -2343,7 +2344,7 @@
svgCanvas.groupSelectedElements();
}
// ungroup
- else if(selectedElement && selectedElement.tagName == 'g'){
+ else if(selectedElement){
svgCanvas.ungroupSelectedElement();
}
};
@@ -3503,6 +3504,7 @@
{sel:'#tool_clone,#tool_clone_multi', fn: clickClone, evt: 'click', key: [modKey+'C', true]},
{sel:'#tool_group', fn: clickGroup, evt: 'click', key: [modKey+'G', true]},
{sel:'#tool_ungroup', fn: clickGroup, evt: 'click'},
+ {sel:'#tool_unlink_use', fn: clickGroup, evt: 'click'},
{sel:'[id^=tool_align]', fn: clickAlign, evt: 'click'},
// these two lines are required to make Opera work properly with the flyout mechanism
// {sel:'#tools_rect_show', fn: clickRect, evt: 'click'},
@@ -3985,7 +3987,6 @@
})();
-
// ?iconsize=s&bkgd_color=555
// svgEditor.setConfig({
diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js
index 197277ca..bb3079c0 100644
--- a/editor/svgcanvas.js
+++ b/editor/svgcanvas.js
@@ -1253,9 +1253,11 @@ var SelectorManager;
// The bbox for a group does not include stroke vals, so we
// get the bbox based on its children.
var stroked_bbox = getStrokedBBox(selected.childNodes);
- $.each(bbox, function(key, val) {
- bbox[key] = stroked_bbox[key];
- });
+ if(stroked_bbox) {
+ $.each(bbox, function(key, val) {
+ bbox[key] = stroked_bbox[key];
+ });
+ }
}
// loop and transform our bounding box until we reach our first rotation
@@ -2279,7 +2281,12 @@ var copyElem = function(el) {
if($(el).data('gsvg')) {
$(new_el).data('gsvg', new_el.firstChild);
- } else if(new_el.tagName == 'image') {
+ } else if($(el).data('symbol')) {
+ var ref = $(el).data('symbol');
+ $(new_el).data('ref', ref).data('symbol', ref);
+ }
+
+ else if(new_el.tagName == 'image') {
preventClickDefault(new_el);
}
return new_el;
@@ -2884,10 +2891,10 @@ var remapElement = this.remapElement = function(selected,changes,m) {
changes["height"] = scaleh(changes["height"]);
break;
case "use":
- var pt1 = remap(changes["x"],changes["y"]);
- changes["x"] = pt1.x;
- changes["y"] = pt1.y;
- break;
+// var pt1 = remap(changes["x"],changes["y"]);
+// changes["x"] = pt1.x;
+// changes["y"] = pt1.y;
+// break;
case "g":
case "text":
// if it was a translate, then just update x,y
@@ -2998,9 +3005,6 @@ var remapElement = this.remapElement = function(selected,changes,m) {
changes.height = Math.abs(changes.height);
assignAttributes(selected, changes, 1000, true);
break;
- case "use":
- assignAttributes(selected, changes, 1000, true);
- break;
case "ellipse":
changes.rx = Math.abs(changes.rx);
changes.ry = Math.abs(changes.ry);
@@ -3008,6 +3012,7 @@ var remapElement = this.remapElement = function(selected,changes,m) {
if(changes.r) changes.r = Math.abs(changes.r);
case "line":
case "text":
+ case "use":
assignAttributes(selected, changes, 1000, true);
break;
case "g":
@@ -3167,8 +3172,6 @@ var recalculateDimensions = this.recalculateDimensions = function(selected) {
attrs = ["width", "height", "x", "y"];
break;
case "use":
- attrs = ["x", "y"];
- break;
case "text":
attrs = ["x", "y"];
break;
@@ -3612,8 +3615,11 @@ var recalculateDimensions = this.recalculateDimensions = function(selected) {
// if we had [M][T][S][T] we want to extract the matrix equivalent of
// [T][S][T] and push it down to the element
if (N >= 3 && tlist.getItem(N-2).type == 3 &&
- tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2 &&
- selected.nodeName != "use")
+ tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2)
+
+ // Removed this so a