blob: fcf8cf505463fa511e06b6c469264ad591f3623a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
import {
extend,
nodeOrNew,
register,
wrapWithAttrCheck
} from '../utils/adopter.js'
import { registerMethods } from '../utils/methods.js'
import Text from './Text.js'
import * as textable from '../modules/core/textable.js'
export default class Tspan extends Text {
// Initialize node
constructor ( node ) {
super( nodeOrNew( 'tspan', node ), node )
}
// Set text content
text ( text ) {
if ( text == null ) return this.node.textContent + ( this.dom.newLined ? '\n' : '' )
typeof text === 'function' ? text.call( this, this ) : this.plain( text )
return this
}
// Shortcut dx
dx ( dx ) {
return this.attr( 'dx', dx )
}
// Shortcut dy
dy ( dy ) {
return this.attr( 'dy', dy )
}
// Create new line
newLine () {
// fetch text parent
var t = this.parent( Text )
// mark new line
this.dom.newLined = true
// apply new position
return this.dy( t.dom.leading * t.attr( 'font-size' ) ).attr( 'x', t.x() )
}
}
extend( Tspan, textable )
registerMethods( {
Tspan: {
tspan: wrapWithAttrCheck( function ( text ) {
var tspan = new Tspan()
// clear if build mode is disabled
if ( !this._build ) {
this.clear()
}
// add new tspan
this.node.appendChild( tspan.node )
return tspan.text( text )
} )
}
} )
register( Tspan )
|