diff --git a/editor/draw.js b/editor/draw.js
index 30b954f5..07eb8f6e 100644
--- a/editor/draw.js
+++ b/editor/draw.js
@@ -8,6 +8,8 @@
// Dependencies:
// 1) jQuery
+// 2) browser.js
+// 3) svgutils.js
(function() {
if (!window.svgedit) {
@@ -181,5 +183,69 @@ svgedit.draw.Drawing.prototype.hasLayer = function(name) {
return false;
};
+// Function: svgedit.draw.Drawing.identifyLayers
+// Updates layer system
+svgedit.draw.Drawing.prototype.identifyLayers = function() {
+ this.all_layers = [];
+ var numchildren = this.svgElem_.childNodes.length;
+ // loop through all children of SVG element
+ var orphans = [], layernames = [];
+ var current_layer = null;
+ var childgroups = false;
+ for (var i = 0; i < numchildren; ++i) {
+ var child = this.svgElem_.childNodes.item(i);
+ // for each g, find its layer name
+ if (child && child.nodeType == 1) {
+ if (child.tagName == "g") {
+ childgroups = true;
+ var name = $("title",child).text();
+
+ // Hack for Opera 10.60
+ if(!name && svgedit.browser.isOpera() && child.querySelectorAll) {
+ name = $(child.querySelectorAll('title')).text();
+ }
+
+ // store layer and name in global variable
+ if (name) {
+ layernames.push(name);
+ this.all_layers.push( [name,child] );
+ current_layer = child;
+ svgedit.utilities.walkTree(child, function(e){e.setAttribute("style", "pointer-events:inherit");});
+ current_layer.setAttribute("style", "pointer-events:none");
+ }
+ // if group did not have a name, it is an orphan
+ else {
+ orphans.push(child);
+ }
+ }
+ // if child has a bbox (i.e. not a
or element), then it is an orphan
+ else if(svgedit.utilities.getBBox(child) && child.nodeName != 'defs') { // Opera returns a BBox for defs
+ var bb = svgedit.utilities.getBBox(child);
+ orphans.push(child);
+ }
+ }
+ }
+
+ // create a new layer and add all the orphans to it
+ var svgdoc = this.svgElem_.ownerDocument;
+ if (orphans.length > 0 || !childgroups) {
+ var i = 1;
+ // TODO(codedread): What about internationalization of "Layer"?
+ while (layernames.indexOf(("Layer " + i)) >= 0) { i++; }
+ var newname = "Layer " + i;
+ current_layer = svgdoc.createElementNS(svg_ns, "g");
+ var layer_title = svgdoc.createElementNS(svg_ns, "title");
+ layer_title.textContent = newname;
+ current_layer.appendChild(layer_title);
+ for (var j = 0; j < orphans.length; ++j) {
+ current_layer.appendChild(orphans[j]);
+ }
+ this.svgElem_.appendChild(current_layer);
+ this.all_layers.push( [newname, current_layer] );
+ }
+ svgedit.utilities.walkTree(current_layer, function(e){e.setAttribute("style","pointer-events:inherit");});
+ current_layer.setAttribute("style","pointer-events:all");
+};
+
})();
diff --git a/editor/svgcanvas.js b/editor/svgcanvas.js
index e18ac81b..59d70eaf 100644
--- a/editor/svgcanvas.js
+++ b/editor/svgcanvas.js
@@ -6953,64 +6953,11 @@ this.importSvgString = function(xmlString) {
// Function: identifyLayers
// Updates layer system
+// TODO(codedread): Remove this completely once current_context and current_layer are part of Drawing.
var identifyLayers = canvas.identifyLayers = function() {
- current_drawing.all_layers = [];
leaveContext();
- var numchildren = svgcontent.childNodes.length;
- // loop through all children of svgcontent
- var orphans = [], layernames = [];
- var childgroups = false;
- for (var i = 0; i < numchildren; ++i) {
- var child = svgcontent.childNodes.item(i);
- // for each g, find its layer name
- if (child && child.nodeType == 1) {
- if (child.tagName == "g") {
- childgroups = true;
- var name = $("title",child).text();
-
- // Hack for Opera 10.60
- if(!name && svgedit.browser.isOpera() && child.querySelectorAll) {
- name = $(child.querySelectorAll('title')).text();
- }
-
- // store layer and name in global variable
- if (name) {
- layernames.push(name);
- current_drawing.all_layers.push( [name,child] );
- current_layer = child;
- svgedit.utilities.walkTree(child, function(e){e.setAttribute("style", "pointer-events:inherit");});
- current_layer.setAttribute("style", "pointer-events:none");
- }
- // if group did not have a name, it is an orphan
- else {
- orphans.push(child);
- }
- }
- // if child has a bbox (i.e. not a or element), then it is an orphan
- else if(getBBox(child) && child.nodeName != 'defs') { // Opera returns a BBox for defs
- var bb = getBBox(child);
- orphans.push(child);
- }
- }
- }
-
- // create a new layer and add all the orphans to it
- if (orphans.length > 0 || !childgroups) {
- var i = 1;
- while (layernames.indexOf(("Layer " + i)) >= 0) { i++; }
- var newname = "Layer " + i;
- current_layer = svgdoc.createElementNS(svgns, "g");
- var layer_title = svgdoc.createElementNS(svgns, "title");
- layer_title.textContent = newname;
- current_layer.appendChild(layer_title);
- for (var j = 0; j < orphans.length; ++j) {
- current_layer.appendChild(orphans[j]);
- }
- current_layer = svgcontent.appendChild(current_layer);
- current_drawing.all_layers.push( [newname, current_layer] );
- }
- svgedit.utilities.walkTree(current_layer, function(e){e.setAttribute("style","pointer-events:inherit");});
- current_layer.setAttribute("style","pointer-events:all");
+ current_drawing.identifyLayers();
+ current_layer = current_drawing.all_layers[current_drawing.getNumLayers() - 1][1];
};
// Function: createLayer
diff --git a/editor/svgutils.js b/editor/svgutils.js
index 75ad60ae..434fc422 100644
--- a/editor/svgutils.js
+++ b/editor/svgutils.js
@@ -9,9 +9,8 @@
// Dependencies:
// 1) jQuery
-// 2) browser.js
-// 3) svgtransformlist.js
-// 4) math.js
+// 2) browser.js: only for getBBox()
+// 3) svgtransformlist.js: only for getRotationAngle()
(function() {
diff --git a/test/draw_test.html b/test/draw_test.html
index e8784405..84bc3a2b 100644
--- a/test/draw_test.html
+++ b/test/draw_test.html
@@ -2,7 +2,9 @@
-
+
+
+