]> source.dussan.org Git - svg.js.git/commitdiff
allow nodes that are not imported yet (fixes #1252)
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 3 Sep 2023 05:54:34 +0000 (07:54 +0200)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sun, 3 Sep 2023 05:54:34 +0000 (07:54 +0200)
spec/spec/utils/adopter.js
src/utils/adopter.js

index 3c12790fdf9219fa71a34aabbde17020b63acec4..b158be5b4ec23d2b7301edf14adee2093eb165b9 100644 (file)
@@ -22,6 +22,7 @@ import {
 import { mockAdopt, assignNewId, adopt } from '../../../src/utils/adopter.js'
 import { buildFixtures } from '../../helpers.js'
 import { globals, getWindow } from '../../../src/utils/window.js'
+import { svg } from '../../../src/modules/core/namespaces.js'
 
 const { any, createSpy, objectContaining } = jasmine
 
@@ -172,6 +173,18 @@ describe('adopter.js', () => {
       // jasmine chucks on this when using the node directly
       expect(node.outerHTML).toBe(div.outerHTML)
     })
+
+    it('gracefully handles nodes that are not yet imported into the document', () => {
+      const otherDoc = globals.document.implementation.createDocument(
+        svg,
+        'svg'
+      )
+      const rect = otherDoc.createElementNS(svg, 'rect')
+
+      const node = nodeOrNew('rect', rect)
+
+      expect(node).toEqual(rect)
+    })
   })
 
   describe('register()/getClass()', () => {
index 48814ec66fdb05204bb05ecc77d33527137eb01b..962412fd201556f4f231a973ab85841c806a34d1 100644 (file)
@@ -43,8 +43,9 @@ export function makeInstance(element, isHTML = false) {
 
 export function nodeOrNew(name, node) {
   return node &&
-    node.ownerDocument &&
-    node instanceof node.ownerDocument.defaultView.Node
+    (node instanceof globals.window.Node ||
+      (node.ownerDocument &&
+        node instanceof node.ownerDocument.defaultView.Node))
     ? node
     : create(name)
 }