Browse Source

skip descriptive elements on rebuild and toParent

master
Ulrich-Matthias Schäfer 8 months ago
parent
commit
8fa0873a63
6 changed files with 25 additions and 6 deletions
  1. 2
    0
      .gitignore
  2. 6
    2
      spec/helpers.js
  3. 4
    1
      spec/spec/elements/Text.js
  4. 5
    2
      src/elements/Text.js
  5. 4
    1
      src/modules/optional/transform.js
  6. 4
    0
      src/utils/utils.js

+ 2
- 0
.gitignore View File

@@ -8,3 +8,5 @@ coverage/
spec/es5TestBundle.js
.env
dist
index.html
index.js

+ 6
- 2
spec/helpers.js View 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)
}


+ 4
- 1
spec/spec/elements/Text.js View 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()

+ 5
- 2
src/elements/Text.js View 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
}


+ 4
- 1
src/modules/optional/transform.js View 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()


+ 4
- 0
src/utils/utils.js View 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)

Loading…
Cancel
Save