]> source.dussan.org Git - svg.js.git/commitdiff
fix `clone()` to return the correct instance (#1154)
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 27 Sep 2020 03:35:47 +0000 (13:35 +1000)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 27 Sep 2020 03:35:47 +0000 (13:35 +1000)
CHANGELOG.md
spec/spec/elements/Dom.js
src/elements/Dom.js
src/utils/adopter.js

index 0fcb9a4887ca255e00c18d3b4531b8573fc531c4..bef8cc936be6d28f442d25d1a707ab626211abe7 100644 (file)
@@ -39,6 +39,7 @@ The document follows the conventions described in [“Keep a CHANGELOG”](http:
  - fixed internals of ObjectBag which can hold other Morphable values now
  - fixed animate transform which didnt change its origin on retarget for declaritive animations
  - fixed path parsing (#1145)
+ - fixed `clone()` to return the correct instance (#1154)
 
 ### Added
  - added second Parameter to `SVG(el, isHTML)` which allows to explicitely create elements in the HTML namespace (#1058)
index 2e36c92028f0ed60f8126538935dacccec895043..deb665ad1c61f52440b392e578914ff0ded74756 100644 (file)
@@ -172,6 +172,12 @@ describe('Dom.js', function () {
       expect(clone.get(0).id()).not.toBe(rect.id())
       expect(clone.id()).not.toBe(group.id())
     })
+
+    it('returns an instance of the same class the method was called on', () => {
+      const rect = new Dom(create('rect'))
+      expect(rect.constructor).toBe(Dom)
+      expect(rect.clone().constructor).toBe(Dom)
+    })
   })
 
   describe('each()', () => {
index eb5941815624b4109a825667ae38b2c144ffbf30..7c360785c5d4ad971c85d5bb5aa18e6982bf8e35 100644 (file)
@@ -72,7 +72,7 @@ export default class Dom extends EventTarget {
     this.writeDataToDom()
 
     // clone element and assign new id
-    return assignNewId(this.node.cloneNode(deep))
+    return new this.constructor(assignNewId(this.node.cloneNode(deep)))
   }
 
   // Iterates over all children and invokes a given block
index 2de1b279aa6011c7c43df151677812f819364a8d..a440e4c9a5c36c3e5ba40e8581b06d3900c39683 100644 (file)
@@ -107,10 +107,11 @@ export function assignNewId (node) {
   }
 
   if (node.id) {
-    return adopt(node).id(eid(node.nodeName))
+    node.id = eid(node.nodeName)
+    return node
   }
 
-  return adopt(node)
+  return node
 }
 
 // Method for extending objects