]> source.dussan.org Git - svg.js.git/commitdiff
skip descriptive elements on rebuild and toParent
authorUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sat, 2 Sep 2023 19:23:53 +0000 (21:23 +0200)
committerUlrich-Matthias Schäfer <ulima.ums@googlemail.com>
Sat, 2 Sep 2023 19:23:53 +0000 (21:23 +0200)
.gitignore
spec/helpers.js
spec/spec/elements/Text.js
src/elements/Text.js
src/modules/optional/transform.js
src/utils/utils.js

index 8a91f66dfa288d23cedda05201c44788d036ec21..680a75142ca6fa7d4c6040e23e6915b817d0bfb3 100644 (file)
@@ -8,3 +8,5 @@ coverage/
 spec/es5TestBundle.js
 .env
 dist
+index.html
+index.js
\ No newline at end of file
index b5b29c3443d4ac105c3e6f8c26b425b4e5df8f67..5a2568a8081b1d8e34a425331502613e28b5b936 100644 (file)
@@ -154,7 +154,9 @@ export function buildFixtures() {
     div.style.position = 'absolute'
     div.style.top = 0
     div.style.left = 0
-  } catch (e) {}
+  } catch (e) {
+    //
+  }
 
   div.appendChild(fixtures())
   body.appendChild(div)
@@ -172,7 +174,9 @@ export function buildCanvas() {
     div.style.position = 'absolute'
     div.style.top = 0
     div.style.left = 0
-  } catch (e) {}
+  } catch (e) {
+    //
+  }
   body.appendChild(div)
 }
 
index b0c5a9ac2550aa2e46496a55fa16713b63d3f63d..f088618206beb6f994815aab55568bfaa7113d24 100644 (file)
@@ -53,12 +53,14 @@ describe('Text.js', () => {
       expect(text.text()).toBe('Hello World\nHow is it\ngoing')
     })
 
-    it('returns the correct text with newlines and skips textPaths', () => {
+    it('returns the correct text with newlines and skips textPaths and descriptive elements', () => {
       const path = new Path()
       const text = new Text()
       const textPath = text.text('Hello World\nHow is it\ngoing').path(path)
       textPath.children().addTo(text)
       text.add(new TextPath(), 3)
+      text.add(SVG('<title>MyText</title>'))
+
       expect(text.text()).toBe('Hello World\nHow is it\ngoing')
     })
 
@@ -113,6 +115,7 @@ describe('Text.js', () => {
         t.tspan('Hello World').newLine()
         t.tspan('How is it').newLine()
         t.tspan('going').newLine()
+        t.add('<title>My Text</title>')
       })
 
       const dy = text.get(1).dy()
index 39371f6688d7dfc7674796875d45c9d0b246da05..0c5815da84239549dcb59b90169e282910582333 100644 (file)
@@ -10,6 +10,7 @@ import SVGNumber from '../types/SVGNumber.js'
 import Shape from './Shape.js'
 import { globals } from '../utils/window.js'
 import * as textable from '../modules/core/textable.js'
+import { isDescriptive } from '../utils/utils.js'
 
 export default class Text extends Shape {
   // Initialize node
@@ -48,6 +49,8 @@ export default class Text extends Shape {
       const leading = this.dom.leading
 
       this.each(function (i) {
+        if (isDescriptive(this.node)) return
+
         const fontSize = globals.window
           .getComputedStyle(this.node)
           .getPropertyValue('font-size')
@@ -89,8 +92,8 @@ export default class Text extends Shape {
 
       for (let i = 0, len = children.length; i < len; ++i) {
         // skip textPaths - they are no lines
-        if (children[i].nodeName === 'textPath') {
-          if (i === 0) firstLine = 1
+        if (children[i].nodeName === 'textPath' || isDescriptive(children[i])) {
+          if (i === 0) firstLine = i + 1
           continue
         }
 
index 7f950b398bc9f1e21adc5193a185675c7e08751f..b8ba46a7cd580934e442ed5453dfb8cb542e635a 100644 (file)
@@ -1,4 +1,4 @@
-import { getOrigin } from '../../utils/utils.js'
+import { getOrigin, isDescriptive } from '../../utils/utils.js'
 import { delimiter, transforms } from '../core/regex.js'
 import { registerMethods } from '../../utils/methods.js'
 import Matrix from '../../types/Matrix.js'
@@ -39,6 +39,9 @@ export function matrixify() {
 // add an element to another parent without changing the visual representation on the screen
 export function toParent(parent, i) {
   if (this === parent) return this
+
+  if (isDescriptive(this.node)) return this.addTo(parent, i)
+
   const ctm = this.screenCTM()
   const pCtm = parent.screenCTM().inverse()
 
index c6e6d3b3fd32eb17361ca0ff99a2e53cb0539fb4..0d297ec4dbe684f2f8c658e83041e6145a3083ca 100644 (file)
@@ -120,3 +120,7 @@ export function getOrigin(o, element) {
   // Return the origin as it is if it wasn't a string
   return [ox, oy]
 }
+
+const descriptiveElements = new Set(['desc', 'metadata', 'title'])
+export const isDescriptive = (element) =>
+  descriptiveElements.has(element.nodeName)