]> source.dussan.org Git - svg.js.git/commitdiff
merge SVG.Doc and SVG.Nested. Add isRoot() method, update doc methods to decide betwe...
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 11 Feb 2018 14:29:23 +0000 (15:29 +0100)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Thu, 1 Mar 2018 01:06:05 +0000 (02:06 +0100)
gulpfile.js
src/doc.js
src/element.js
src/nested.js [deleted file]
src/svg.js

index 545a27f1b6331ef3be2931d5c73c88e9ca9e4a2f..d96451ba6cba8d5d465008b53361edc829f3e87f 100644 (file)
@@ -69,7 +69,6 @@ var parts = [
   'src/image.js',\r
   'src/text.js',\r
   'src/textpath.js',\r
-  'src/nested.js',\r
   'src/hyperlink.js',\r
   'src/marker.js',\r
   'src/sugar.js',\r
index 20977471086e300f223b393429dc8cd10e912019..843ff0351a06d33c2251a4171fbb227e42dd030f 100644 (file)
@@ -12,22 +12,37 @@ SVG.Doc = SVG.invent({
 
   // Add class methods
   extend: {
+    isRoot: function() {
+      return !this.node.parentNode || !this.node.parentNode instanceof window.SVGElement || this.node.parentNode.nodeName == '#document'
+    },
+    doc: function() {
+      if(this.isRoot()) return this
+
+      var parent
+      while(parent = this.parent(SVG.Doc)) {
+        if(parent.isRoot()) return parent
+      }
+
+      throw new Error('This should never be reached')
+    },
     // Add namespaces
-    namespace: function () {
+    namespace: function() {
+      if(!this.isRoot()) return this.doc().namespace()
       return this
         .attr({ xmlns: SVG.ns, version: '1.1' })
         .attr('xmlns:xlink', SVG.xlink, SVG.xmlns)
         .attr('xmlns:svgjs', SVG.svgjs, SVG.xmlns)
     },
     // Creates and returns defs element
-    defs: function () {
+    defs: function() {
+      if(!this.isRoot()) return this.doc().defs()
       return SVG.adopt(this.node.getElementsByTagName('defs')[0]) || this.put(new SVG.Defs())
     },
     // custom parent method
     parent: function () {
       return this.node.parentNode.nodeName === '#document' ? null : this.node.parentNode
     },
-      // Removes the doc from the DOM
+    // Removes the doc from the DOM
     remove: function () {
       if (this.parent()) {
         this.parent().removeChild(this.node)
@@ -41,14 +56,12 @@ SVG.Doc = SVG.invent({
         this.node.removeChild(this.node.lastChild)
       }
       return this
-    },
-    toNested: function () {
-      var el = SVG.create('svg')
-      this.node.instance = null
-      el.appendChild(this.node)
-
-      return SVG.adopt(this.node)
+    }
+  },
+  construct: {
+    // Create nested svg document
+    nested: function() {
+      return this.put(new SVG.Doc)
     }
   }
-
 })
index f35dc190fd5bd92a3cf3a7c82f214fa95bf0f7b9..e7b53267646d845713717c9101ba9640d1549fa7 100644 (file)
@@ -218,7 +218,7 @@ SVG.Element = SVG.invent({
 
     // Get parent document
     doc: function () {
-      return this instanceof SVG.Doc ? this : this.parent(SVG.Doc)
+      return this.parent(SVG.Doc).doc()
     },
 
     // Get defs
diff --git a/src/nested.js b/src/nested.js
deleted file mode 100644 (file)
index 217d59a..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-
-SVG.Nested = SVG.invent({
-  // Initialize node
-  create: 'svg',
-
-  // Inherit from
-  inherit: SVG.Container,
-
-  // Add parent method
-  construct: {
-    // Create nested svg document
-    nested: function () {
-      return this.put(new SVG.Nested())
-    }
-  }
-})
index 55cb88d834b5bbd60c264056a3ff7f1da09e856d..4cb6f26f33d36cc63b76677c8944a9ee050f3747 100644 (file)
@@ -87,9 +87,9 @@ SVG.adopt = function (node) {
   var element
 
   // adopt with element-specific settings
-  if (node.nodeName === 'svg') {
-    element = node.parentNode instanceof window.SVGElement ? new SVG.Nested(node) : new SVG.Doc(node)
-  } else if (node.nodeName === 'linearGradient' || node.nodeName === 'radialGradient') {
+  if (node.nodeName == 'svg')
+    element = new SVG.Doc(node)
+  else if (node.nodeName === 'linearGradient' || node.nodeName === 'radialGradient')
     element = new SVG.Gradient(node)
   } else if (SVG[capitalize(node.nodeName)]) {
     element = new SVG[capitalize(node.nodeName)](node)