diff options
-rw-r--r-- | CHANGELOG.md | 1 | ||||
-rw-r--r-- | spec/spec/elements/Dom.js | 6 | ||||
-rw-r--r-- | src/elements/Dom.js | 2 | ||||
-rw-r--r-- | src/utils/adopter.js | 5 |
4 files changed, 11 insertions, 3 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md index 0fcb9a4..bef8cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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) diff --git a/spec/spec/elements/Dom.js b/spec/spec/elements/Dom.js index 2e36c92..deb665a 100644 --- a/spec/spec/elements/Dom.js +++ b/spec/spec/elements/Dom.js @@ -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()', () => { diff --git a/src/elements/Dom.js b/src/elements/Dom.js index eb59418..7c36078 100644 --- a/src/elements/Dom.js +++ b/src/elements/Dom.js @@ -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 diff --git a/src/utils/adopter.js b/src/utils/adopter.js index 2de1b27..a440e4c 100644 --- a/src/utils/adopter.js +++ b/src/utils/adopter.js @@ -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 |