aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>2020-09-27 13:35:47 +1000
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>2020-09-27 13:35:47 +1000
commit99e176f76332b47a6c026dbd9dcf7742191b8b29 (patch)
tree18fe3fbadb6fde0ca05b75ae09d7510de0a17ed0
parent3f78cb81973f9c6c9a0754a555c939e81d24a1ff (diff)
downloadsvg.js-99e176f76332b47a6c026dbd9dcf7742191b8b29.tar.gz
svg.js-99e176f76332b47a6c026dbd9dcf7742191b8b29.zip
fix `clone()` to return the correct instance (#1154)
-rw-r--r--CHANGELOG.md1
-rw-r--r--spec/spec/elements/Dom.js6
-rw-r--r--src/elements/Dom.js2
-rw-r--r--src/utils/adopter.js5
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