{"version":3,"file":"FabricObjectSVGExportMixin.mjs","sources":["../../../../src/shapes/Object/FabricObjectSVGExportMixin.ts"],"sourcesContent":["import type { TSVGReviver } from '../../typedefs';\nimport { uid } from '../../util/internals/uid';\nimport { colorPropToSVG } from '../../util/misc/svgParsing';\nimport { FILL, NONE, STROKE } from '../../constants';\nimport type { FabricObject } from './FabricObject';\nimport { isFiller } from '../../util/typeAssertions';\nimport { Pattern } from '../../Pattern';\nimport { matrixToSVG } from '../../util/misc/svgExport';\n\nexport class FabricObjectSVGExportMixin {\n  /**\n   * When an object is being exported as SVG as a clippath, a reference inside the SVG is needed.\n   * This reference is a UID in the fabric namespace and is temporary stored here.\n   * @type {String}\n   */\n  declare clipPathId?: string;\n\n  /**\n   * James added, 增加clipPathPattern属性，用于导出svg时 Pattern转Image对象\n   */\n  declare clipPathPattern?: FabricObject | null;\n\n  /**\n   * Returns styles-string for svg-export\n   * @param {Boolean} skipShadow a boolean to skip shadow filter output\n   * @return {String}\n   */\n  getSvgStyles(\n    this: FabricObjectSVGExportMixin & FabricObject,\n    skipShadow?: boolean,\n  ) {\n    const fillRule = this.fillRule ? this.fillRule : 'nonzero',\n      strokeWidth = this.strokeWidth ? this.strokeWidth : '0',\n      strokeDashArray = this.strokeDashArray\n        ? this.strokeDashArray.join(' ')\n        : NONE,\n      strokeDashOffset = this.strokeDashOffset ? this.strokeDashOffset : '0',\n      strokeLineCap = this.strokeLineCap ? this.strokeLineCap : 'butt',\n      strokeLineJoin = this.strokeLineJoin ? this.strokeLineJoin : 'miter',\n      strokeMiterLimit = this.strokeMiterLimit ? this.strokeMiterLimit : '4',\n      opacity = typeof this.opacity !== 'undefined' ? this.opacity : '1',\n      visibility = this.visible ? '' : ' visibility: hidden;',\n      filter = skipShadow ? '' : this.getSvgFilter(),\n      // James modified, 非skipShadow 时候，fill和stroke都设置为白色\n      fill = skipShadow ? colorPropToSVG(FILL, this.fill) : 'fill: white;',\n      stroke = skipShadow\n        ? colorPropToSVG(STROKE, this.stroke)\n        : 'stroke:white;';\n\n    return [\n      stroke,\n      'stroke-width: ',\n      strokeWidth,\n      '; ',\n      'stroke-dasharray: ',\n      strokeDashArray,\n      '; ',\n      'stroke-linecap: ',\n      strokeLineCap,\n      '; ',\n      'stroke-dashoffset: ',\n      strokeDashOffset,\n      '; ',\n      'stroke-linejoin: ',\n      strokeLineJoin,\n      '; ',\n      'stroke-miterlimit: ',\n      strokeMiterLimit,\n      '; ',\n      fill,\n      'fill-rule: ',\n      fillRule,\n      '; ',\n      'opacity: ',\n      opacity,\n      ';',\n      filter,\n      visibility,\n    ].join('');\n  }\n\n  /**\n   * Returns filter for svg shadow\n   * @return {String}\n   */\n  getSvgFilter(this: FabricObjectSVGExportMixin & FabricObject) {\n    return this.shadow ? `filter: url(#SVGID_${this.shadow.id});` : '';\n  }\n\n  /**\n   * Returns id attribute for svg output\n   * @return {String}\n   */\n  getSvgCommons(\n    this: FabricObjectSVGExportMixin & FabricObject & { id?: string },\n  ) {\n    return [\n      this.id ? `id=\"${this.id}\" ` : '',\n      this.clipPath\n        ? `clip-path=\"url(#${\n            (this.clipPath as FabricObjectSVGExportMixin & FabricObject)\n              .clipPathId\n          })\" `\n        : '',\n    ].join('');\n  }\n\n  /**\n   * Returns transform-string for svg-export\n   * @param {Boolean} use the full transform or the single object one.\n   * @return {String}\n   */\n  getSvgTransform(\n    this: FabricObjectSVGExportMixin & FabricObject,\n    full?: boolean,\n    additionalTransform = '',\n  ) {\n    const transform = full ? this.calcTransformMatrix() : this.calcOwnMatrix(),\n      svgTransform = `transform=\"${matrixToSVG(transform)}`;\n    return `${svgTransform}${additionalTransform}\" `;\n  }\n\n  /**\n   * Returns svg representation of an instance\n   * This function is implemented in each subclass\n   * This is just because typescript otherwise cryies all the time\n   * @return {Array} an array of strings with the specific svg representation\n   * of the instance\n   */\n  _toSVG(_reviver?: TSVGReviver): string[] {\n    return [''];\n  }\n\n  /**\n   * Returns svg representation of an instance\n   * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n   * @return {String} svg representation of an instance\n   */\n  toSVG(\n    this: FabricObjectSVGExportMixin & FabricObject,\n    reviver?: TSVGReviver,\n  ) {\n    return this._createBaseSVGMarkup(this._toSVG(reviver), {\n      reviver,\n    });\n  }\n\n  /**\n   * Returns svg clipPath representation of an instance\n   * @param {TSVGReviver} [reviver] Method for further parsing of svg representation.\n   * @return {String} svg representation of an instance\n   */\n  toClipPathSVG(\n    this: FabricObjectSVGExportMixin & FabricObject,\n    reviver?: TSVGReviver,\n  ) {\n    return (\n      '\\t' +\n      this._createBaseClipPathSVGMarkup(this._toSVG(reviver), {\n        reviver,\n      })\n    );\n  }\n\n  /**\n   * James added\n   * Returns pattern svg attributes string\n   * @return {String}\n   */\n  getPatternSvgCommons(\n    this: FabricObjectSVGExportMixin & FabricObject & { id?: string },\n  ) {\n    return [\n      this.id ? 'id=\"' + this.id + '_clip\" ' : '',\n      this.clipPathPattern\n        ? 'clip-path=\"url(#' + this.clipPathPattern.clipPathId + ')\" '\n        : '',\n    ].join('');\n  }\n\n  /**\n   * James added\n   * Returns id attribute for svg clippath output\n   * @return {String}\n   */\n  getSvgCommonsClipPath(\n    this: FabricObjectSVGExportMixin & FabricObject & { id?: string },\n  ) {\n    if (this.clipPathPattern) {\n      return [this.id ? 'id=\"' + this.id + '\" ' : ''].join('');\n    } else {\n      return this.getSvgCommons();\n    }\n  }\n\n  /**\n   * James added\n   * 自定义clipPath的svg输出transform\n   * @param {*} full\n   * @param {*} additionalTransform\n   */\n  getSvgTransformClipPath(\n    this: FabricObjectSVGExportMixin & FabricObject,\n    full: boolean,\n    additionalTransform = '',\n  ) {\n    // 如果是pattern，就不需要transform\n    if (this.clipPathPattern) {\n      return additionalTransform\n        ? 'transform=\"' + additionalTransform + '\" '\n        : '';\n    } else {\n      return this.getSvgTransform(full, additionalTransform);\n    }\n  }\n\n  /**\n   * @private\n   */\n  _createBaseClipPathSVGMarkup(\n    this: FabricObjectSVGExportMixin & FabricObject,\n    objectMarkup: string[],\n    {\n      reviver,\n      additionalTransform = '',\n    }: { reviver?: TSVGReviver; additionalTransform?: string } = {},\n  ) {\n    const commonPieces = [\n        this.getSvgTransformClipPath(true, additionalTransform),\n        this.getSvgCommonsClipPath(),\n      ].join(''),\n      // insert commons in the markup, style and svgCommons\n      index = objectMarkup.indexOf('COMMON_PARTS');\n    objectMarkup[index] = commonPieces;\n    return reviver ? reviver(objectMarkup.join('')) : objectMarkup.join('');\n  }\n\n  /**\n   * @private\n   */\n  _createBaseSVGMarkup(\n    this: FabricObjectSVGExportMixin & FabricObject,\n    objectMarkup: string[],\n    {\n      noStyle,\n      reviver,\n      withShadow,\n      additionalTransform,\n    }: {\n      noStyle?: boolean;\n      reviver?: TSVGReviver;\n      withShadow?: boolean;\n      additionalTransform?: string;\n    } = {},\n  ): string {\n    var skipShadow = true;\n    let clipPath = this.clipPath as FabricObjectSVGExportMixin & FabricObject;\n    const styleInfo = noStyle\n        ? ''\n        : `style=\"${this.getSvgStyles(skipShadow)}\" `,\n      shadowInfo = withShadow ? `style=\"${this.getSvgFilter()}\" ` : '',\n      vectorEffect = this.strokeUniform\n        ? 'vector-effect=\"non-scaling-stroke\" '\n        : '',\n      absoluteClipPath = clipPath && clipPath.absolutePositioned,\n      stroke = this.stroke,\n      fill = this.fill,\n      shadow = this.shadow,\n      markup = [],\n      // insert commons in the markup, style and svgCommons\n      index = objectMarkup.indexOf('COMMON_PARTS');\n    // James added\n    let commonPieces = '',\n      clipPathMarkup = '';\n\n    // 如果是pattern，就生成clipppath\n    // 使用 clipPathPattern区别是否是pattern\n    this.clipPathPattern = null;\n    if (fill instanceof Pattern) {\n      this.clipPathPattern = clipPath = this;\n    }\n    // James added end\n    if (clipPath) {\n      clipPath.clipPathId = `CLIPPATH_${uid()}`;\n      clipPathMarkup = `<clipPath id=\"${\n        clipPath.clipPathId\n      }\" >\\n${clipPath.toClipPathSVG(reviver)}</clipPath>\\n`;\n    }\n    if (absoluteClipPath) {\n      markup.push('<g ', shadowInfo, this.getSvgCommons(), ' >\\n');\n    }\n    markup.push(\n      '<g ',\n      this.getSvgTransform(false),\n      !absoluteClipPath ? shadowInfo + this.getSvgCommons() : '',\n      ' >\\n',\n    );\n    commonPieces = [\n      styleInfo,\n      vectorEffect,\n      noStyle ? '' : this.addPaintOrder(),\n      ' ',\n      additionalTransform ? `transform=\"${additionalTransform}\" ` : '',\n    ].join('');\n\n    // James added shadow 放在上面\n    // 文本等调用方已经通过 withShadow 挂载 filter 时，避免再额外复制一份可见对象，\n    // 但仍然需要输出 filter 定义，否则普通 SVG 会丢失阴影。\n    if (shadow) {\n      markup.push(shadow.toSVG(this));\n    }\n    if (shadow && !withShadow) {\n      const styleInfoWithShadow = 'style=\"' + this.getSvgStyles(false) + '\" ';\n      const commonPiecesWithShadow = [\n        styleInfoWithShadow,\n        vectorEffect,\n        noStyle ? '' : this.addPaintOrder(),\n        ' ',\n        additionalTransform ? 'transform=\"' + additionalTransform + '\" ' : '',\n      ].join('');\n      const objectMarkupCopy = JSON.parse(JSON.stringify(objectMarkup));\n      objectMarkupCopy[index] = commonPiecesWithShadow;\n\n      markup.push(objectMarkupCopy.join(''));\n    }\n    // objectMarkup中是导出主对象(如path)的svg，index下标是style，放在commonPieces\n    objectMarkup[index] = commonPieces;\n    if (isFiller(fill)) {\n      // James added clipPattern apply pattern clip path just for fill.\n      if (this.clipPathPattern) {\n        markup.push('<g ', shadowInfo, this.getPatternSvgCommons(), ' >\\n');\n      }\n      markup.push(fill.toSVG(this));\n      // James added clipPattern\n      if (this.clipPathPattern) {\n        markup.push('</g>\\n');\n      }\n    }\n    if (isFiller(stroke)) {\n      markup.push(stroke.toSVG(this));\n    }\n    if (clipPath) {\n      markup.push(clipPathMarkup);\n    }\n    // if use pattern, ignore objectMarkup, because pattern clipPath has been applied in pattern's svg, and objectMarkup is not needed anymore\n    if (!this.clipPathPattern) {\n      markup.push(objectMarkup.join(''));\n    }\n    markup.push('</g>\\n');\n    absoluteClipPath && markup.push('</g>\\n');\n    return reviver ? reviver(markup.join('')) : markup.join('');\n  }\n\n  addPaintOrder(this: FabricObjectSVGExportMixin & FabricObject) {\n    return this.paintFirst !== FILL ? ` paint-order=\"${this.paintFirst}\" ` : '';\n  }\n}\n"],"names":["FabricObjectSVGExportMixin","getSvgStyles","skipShadow","fillRule","strokeWidth","strokeDashArray","join","NONE","strokeDashOffset","strokeLineCap","strokeLineJoin","strokeMiterLimit","opacity","visibility","visible","filter","getSvgFilter","fill","colorPropToSVG","FILL","stroke","STROKE","shadow","id","getSvgCommons","clipPath","clipPathId","getSvgTransform","full","additionalTransform","arguments","length","undefined","transform","calcTransformMatrix","calcOwnMatrix","svgTransform","matrixToSVG","_toSVG","_reviver","toSVG","reviver","_createBaseSVGMarkup","toClipPathSVG","_createBaseClipPathSVGMarkup","getPatternSvgCommons","clipPathPattern","getSvgCommonsClipPath","getSvgTransformClipPath","objectMarkup","commonPieces","index","indexOf","noStyle","withShadow","styleInfo","shadowInfo","vectorEffect","strokeUniform","absoluteClipPath","absolutePositioned","markup","clipPathMarkup","Pattern","uid","push","addPaintOrder","styleInfoWithShadow","commonPiecesWithShadow","objectMarkupCopy","JSON","parse","stringify","isFiller","paintFirst"],"mappings":"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"}