fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
3 lines (2 loc) • 2.98 kB
JavaScript
import{uid as t}from"../../util/internals/uid.min.mjs";import{colorPropToSVG as i}from"../../util/misc/svgParsing.min.mjs";import{NONE as s,FILL as r,STROKE as e}from"../../constants.min.mjs";import{isFiller as o}from"../../util/typeAssertions.min.mjs";import{matrixToSVG as h}from"../../util/misc/svgExport.min.mjs";class n{getSvgStyles(t){const o=this.fillRule?this.fillRule:"nonzero",h=this.strokeWidth?this.strokeWidth:"0",n=this.strokeDashArray?this.strokeDashArray.join(" "):s,a=this.strokeDashOffset?this.strokeDashOffset:"0",l=this.strokeLineCap?this.strokeLineCap:"butt",m=this.strokeLineJoin?this.strokeLineJoin:"miter",p=this.strokeMiterLimit?this.strokeMiterLimit:"4",d=void 0!==this.opacity?this.opacity:"1",g=this.visible?"":" visibility: hidden;",u=t?"":this.getSvgFilter(),c=i(r,this.fill);return[i(e,this.stroke),"stroke-width: ",h,"; ","stroke-dasharray: ",n,"; ","stroke-linecap: ",l,"; ","stroke-dashoffset: ",a,"; ","stroke-linejoin: ",m,"; ","stroke-miterlimit: ",p,"; ",c,"fill-rule: ",o,"; ","opacity: ",d,";",u,g].join("")}getSvgFilter(){return this.shadow?`filter: url(#SVGID_${this.shadow.id});`:""}getSvgCommons(){return[this.id?`id="${this.id}" `:"",this.clipPath?`clip-path="url(#${this.clipPath.clipPathId})" `:""].join("")}getSvgTransform(t){let i=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";const s=t?this.calcTransformMatrix():this.calcOwnMatrix();return`${`transform="${h(s)}`}${i}" `}_toSVG(t){return[""]}toSVG(t){return this._createBaseSVGMarkup(this._toSVG(t),{reviver:t})}toClipPathSVG(t){return"\t"+this._createBaseClipPathSVGMarkup(this._toSVG(t),{reviver:t})}_createBaseClipPathSVGMarkup(t){let{reviver:i,additionalTransform:s=""}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const r=[this.getSvgTransform(!0,s),this.getSvgCommons()].join(""),e=t.indexOf("COMMON_PARTS");return t[e]=r,i?i(t.join("")):t.join("")}_createBaseSVGMarkup(i){let{noStyle:s,reviver:r,withShadow:e,additionalTransform:h}=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};const n=s?"":`style="${this.getSvgStyles()}" `,a=e?`style="${this.getSvgFilter()}" `:"",l=this.clipPath,m=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",p=l&&l.absolutePositioned,d=this.stroke,g=this.fill,u=this.shadow,c=[],S=i.indexOf("COMMON_PARTS");let f;l&&(l.clipPathId=`CLIPPATH_${t()}`,f=`<clipPath id="${l.clipPathId}" >\n${l.toClipPathSVG(r)}</clipPath>\n`),p&&c.push("<g ",a,this.getSvgCommons()," >\n"),c.push("<g ",this.getSvgTransform(!1),p?"":a+this.getSvgCommons()," >\n");const v=[n,m,s?"":this.addPaintOrder()," ",h?`transform="${h}" `:""].join("");return i[S]=v,o(g)&&c.push(g.toSVG(this)),o(d)&&c.push(d.toSVG(this)),u&&c.push(u.toSVG(this)),l&&c.push(f),c.push(i.join("")),c.push("</g>\n"),p&&c.push("</g>\n"),r?r(c.join("")):c.join("")}addPaintOrder(){return this.paintFirst!==r?` paint-order="${this.paintFirst}" `:""}}export{n as FabricObjectSVGExportMixin};
//# sourceMappingURL=FabricObjectSVGExportMixin.min.mjs.map