| import { createElement, XLINKNS } from '../svg/core.js'; | 
| import { getMatrixStr, TEXT_ALIGN_TO_ANCHOR, adjustTextY } from '../svg/helper.js'; | 
| import { getLineHeight } from '../contain/text.js'; | 
| import SVGPathRebuilder from '../svg/SVGPathRebuilder.js'; | 
| import mapStyleToAttrs from '../svg/mapStyleToAttrs.js'; | 
| import { DEFAULT_FONT } from '../core/platform.js'; | 
| function setTransform(svgEl, m) { | 
|     if (m) { | 
|         attr(svgEl, 'transform', getMatrixStr(m)); | 
|     } | 
| } | 
| function attr(el, key, val) { | 
|     if (!val || val.type !== 'linear' && val.type !== 'radial') { | 
|         el.setAttribute(key, val); | 
|     } | 
| } | 
| function attrXLink(el, key, val) { | 
|     el.setAttributeNS(XLINKNS, key, val); | 
| } | 
| function attrXML(el, key, val) { | 
|     el.setAttributeNS('http://www.w3.org/XML/1998/namespace', key, val); | 
| } | 
| function bindStyle(svgEl, style, el) { | 
|     mapStyleToAttrs(function (key, val) { return attr(svgEl, key, val); }, style, el, true); | 
| } | 
| var svgPath = { | 
|     brush: function (el) { | 
|         var style = el.style; | 
|         var svgEl = el.__svgEl; | 
|         if (!svgEl) { | 
|             svgEl = createElement('path'); | 
|             el.__svgEl = svgEl; | 
|         } | 
|         if (!el.path) { | 
|             el.createPathProxy(); | 
|         } | 
|         var path = el.path; | 
|         if (el.shapeChanged()) { | 
|             path.beginPath(); | 
|             el.buildPath(path, el.shape); | 
|             el.pathUpdated(); | 
|         } | 
|         var pathVersion = path.getVersion(); | 
|         var elExt = el; | 
|         var svgPathBuilder = elExt.__svgPathBuilder; | 
|         if (elExt.__svgPathVersion !== pathVersion || !svgPathBuilder || el.style.strokePercent < 1) { | 
|             if (!svgPathBuilder) { | 
|                 svgPathBuilder = elExt.__svgPathBuilder = new SVGPathRebuilder(); | 
|             } | 
|             svgPathBuilder.reset(); | 
|             path.rebuildPath(svgPathBuilder, el.style.strokePercent); | 
|             svgPathBuilder.generateStr(); | 
|             elExt.__svgPathVersion = pathVersion; | 
|         } | 
|         attr(svgEl, 'd', svgPathBuilder.getStr()); | 
|         bindStyle(svgEl, style, el); | 
|         setTransform(svgEl, el.transform); | 
|     } | 
| }; | 
| export { svgPath as path }; | 
| var svgImage = { | 
|     brush: function (el) { | 
|         var style = el.style; | 
|         var image = style.image; | 
|         if (image instanceof HTMLImageElement) { | 
|             image = image.src; | 
|         } | 
|         else if (image instanceof HTMLCanvasElement) { | 
|             image = image.toDataURL(); | 
|         } | 
|         if (!image) { | 
|             return; | 
|         } | 
|         var x = style.x || 0; | 
|         var y = style.y || 0; | 
|         var dw = style.width; | 
|         var dh = style.height; | 
|         var svgEl = el.__svgEl; | 
|         if (!svgEl) { | 
|             svgEl = createElement('image'); | 
|             el.__svgEl = svgEl; | 
|         } | 
|         if (image !== el.__imageSrc) { | 
|             attrXLink(svgEl, 'href', image); | 
|             el.__imageSrc = image; | 
|         } | 
|         attr(svgEl, 'width', dw + ''); | 
|         attr(svgEl, 'height', dh + ''); | 
|         attr(svgEl, 'x', x + ''); | 
|         attr(svgEl, 'y', y + ''); | 
|         bindStyle(svgEl, style, el); | 
|         setTransform(svgEl, el.transform); | 
|     } | 
| }; | 
| export { svgImage as image }; | 
| var svgText = { | 
|     brush: function (el) { | 
|         var style = el.style; | 
|         var text = style.text; | 
|         text != null && (text += ''); | 
|         if (!text || isNaN(style.x) || isNaN(style.y)) { | 
|             return; | 
|         } | 
|         var textSvgEl = el.__svgEl; | 
|         if (!textSvgEl) { | 
|             textSvgEl = createElement('text'); | 
|             attrXML(textSvgEl, 'xml:space', 'preserve'); | 
|             el.__svgEl = textSvgEl; | 
|         } | 
|         var font = style.font || DEFAULT_FONT; | 
|         var textSvgElStyle = textSvgEl.style; | 
|         textSvgElStyle.font = font; | 
|         textSvgEl.textContent = text; | 
|         bindStyle(textSvgEl, style, el); | 
|         setTransform(textSvgEl, el.transform); | 
|         var x = style.x || 0; | 
|         var y = adjustTextY(style.y || 0, getLineHeight(font), style.textBaseline); | 
|         var textAlign = TEXT_ALIGN_TO_ANCHOR[style.textAlign] | 
|             || style.textAlign; | 
|         attr(textSvgEl, 'dominant-baseline', 'central'); | 
|         attr(textSvgEl, 'text-anchor', textAlign); | 
|         attr(textSvgEl, 'x', x + ''); | 
|         attr(textSvgEl, 'y', y + ''); | 
|     } | 
| }; | 
| export { svgText as text }; |