
Refer to the CHANGELOG for all info. --------- Co-authored-by: Wouter van Wageningen <wouter.vdub@yahoo.com> Co-authored-by: Josh Munic <jpmunic@gmail.com> Co-authored-by: Jonathan Haas <haasjona@gmail.com>
55 lines
1.7 KiB
JavaScript
55 lines
1.7 KiB
JavaScript
// eslint-disable-next-line no-unused-vars
|
|
import React from 'react'
|
|
import { translateStrings } from './utils.mjs'
|
|
|
|
export const TextSpans = ({ point, strings }) => {
|
|
const translated = translateStrings(point.attributes.list['data-text'], strings)
|
|
const text = []
|
|
if (translated.indexOf('\n') !== -1) {
|
|
// Handle muti-line text
|
|
let key = 0
|
|
let lines = translated.split('\n')
|
|
text.push(<tspan key={'tspan-' + key}>{lines.shift()}</tspan>)
|
|
for (let line of lines) {
|
|
key++
|
|
text.push(
|
|
<tspan
|
|
key={'tspan-' + key}
|
|
x={point.x}
|
|
dy={point.attributes.list['data-text-lineheight']?.[0] || 12}
|
|
>
|
|
{line.toString().replace(/"/g, '"')}
|
|
</tspan>
|
|
)
|
|
}
|
|
} else text.push(<tspan key="tspan">{translated}</tspan>)
|
|
|
|
return text
|
|
}
|
|
|
|
export const Text = ({ point, strings }) => (
|
|
<text x={point.x} y={point.y} {...point.attributes.textProps}>
|
|
<TextSpans point={point} strings={strings} />
|
|
</text>
|
|
)
|
|
|
|
export const TextOnPath = ({ path, pathId, strings }) => {
|
|
const textPathProps = {
|
|
xlinkHref: '#' + pathId,
|
|
startOffset: '0%',
|
|
}
|
|
const translated = translateStrings(path.attributes.text, strings)
|
|
const align = path.attributes.list['data-text-class']
|
|
? path.attributes.list['data-text-class'].join(' ')
|
|
: false
|
|
if (align && align.indexOf('center') > -1) textPathProps.startOffset = '50%'
|
|
else if (align && align.indexOf('right') > -1) textPathProps.startOffset = '100%'
|
|
|
|
return (
|
|
<text>
|
|
<textPath {...textPathProps}>
|
|
<tspan {...path.attributes.textProps} dangerouslySetInnerHTML={{ __html: translated }} />
|
|
</textPath>
|
|
</text>
|
|
)
|
|
}
|