{"version":3,"file":"XFile.mjs","sources":["../../../../src/shapes/canvasx/XFile.ts"],"sourcesContent":["import { TClassProperties } from '../../typedefs';\nimport { classRegistry } from '../../ClassRegistry';\nimport { createFileDefaultControls } from '../../controls/commonControls';\nimport { Shadow } from '../../Shadow';\nimport { Rect } from '../../shapes/Rect';\nimport { FabricImage } from '../Image';\n\nimport type { FabricObjectProps, SerializedObjectProps } from '../Object/types';\n\nimport { TOptions } from '../../typedefs';\nimport { loadImage } from '../../util';\n\nexport type WBFileSource =\n  | string\n  | HTMLImageElement\n  | HTMLVideoElement\n  | HTMLCanvasElement;\n\ninterface UniqueWBFileProps {\n  srcFromAttribute: boolean;\n  minimumScaleTrigger: number;\n  cropX: number;\n  cropY: number;\n  imageSmoothing: boolean;\n  crossOrigin: string | null;\n}\n\nexport const WBFileDefaultValues: Partial<TClassProperties<XFile>> = {\n  minWidth: 20,\n  dynamicMinWidth: 2,\n  lockScalingFlip: true,\n  noScaleCache: false,\n\n  splitByGrapheme: true,\n  objType: 'WBFile',\n  height: 200,\n  maxHeight: 200,\n};\n\nexport interface SerializedWBFileProps extends SerializedObjectProps {\n  src: string;\n  crossOrigin: string | null;\n  filters: any[];\n  resizeFilter?: any;\n  cropX: number;\n  cropY: number;\n}\nexport interface WBFileProps extends FabricObjectProps, UniqueWBFileProps {}\n\nexport class XFile<\n  Props extends TOptions<WBFileProps> = Partial<WBFileProps>\n> extends FabricImage {\n  declare minWidth: number;\n\n  /* boardx cusotm function */\n  declare id: string;\n  declare maxHeight: number;\n\n  declare objType: string;\n\n  declare locked: boolean;\n\n  declare whiteboardId: string;\n\n  declare userId: string;\n\n  declare timestamp: Date;\n\n  declare verticalAlign: string;\n\n  declare zIndex: number;\n\n  declare lines: object[];\n\n  declare url: string;\n  declare fileSrc: string;\n\n  declare relationship: object[];\n  declare name: string;\n  declare isUploading: boolean;\n\n  public extendPropeties = [\n    'objType',\n    'whiteboardId',\n    'userId',\n    'timestamp',\n    'zIndex',\n    'locked',\n    'verticalAlign',\n    'lines',\n    'id',\n    'zIndex',\n    'relationship',\n    'url',\n  ];\n\n  declare dynamicMinWidth: number;\n\n  /**\n   * Use this boolean property in order to split strings that have no white space concept.\n   * this is a cheap way to help with chinese/japanese\n   * @type Boolean\n   * @since 2.6.0\n   */\n  declare splitByGrapheme: boolean;\n\n  static ownDefaults: Record<string, any> = WBFileDefaultValues;\n\n  static getDefaults() {\n    return {\n      ...super.getDefaults(),\n      controls: createFileDefaultControls(),\n      ...XFile.ownDefaults,\n    };\n  }\n\n  //@ts-ignore\n  constructor(element: WBFileSource, options: Props) {\n    super(element.toString(), options);\n    this.filters = [];\n    // this.resizeFilters = [];\n    this.name = options.name;\n    this.shadow = new Shadow({\n      color: 'rgba(217, 161, 177, 0.54)',\n      offsetX: 1,\n      offsetY: 2,\n      blur: 4,\n      id: 310,\n    });\n    (this.clipPath = new Rect({\n      left: 0,\n      top: 0,\n      rx: 8,\n      ry: 8,\n      width: 230,\n      height: 248,\n      fill: '#000000',\n    })),\n      // // double click\n      // this.on('mousedblclick', () => {\n      //   if (this.src || !this.isUploading) {\n      //     //@ts-ignore\n      //     if (Boardx.Util.isMobile()) {\n      //       getWindow().parent.location.href = this.fileSrc\n      //         ? this.fileSrc\n      //         : this.src;\n      //     } else if (this.isFileVideo(this.name)) {\n      //       store.dispatch(handleSetVideoUrl(this.src));\n      //     } else {\n      //       getWindow()\n      //         .open(this.fileSrc ? this.fileSrc : this.src, '_blank')\n      //         .focus();\n      //     }\n      //   }\n      // });\n      // this.initDoubleClickSimulation();\n      (this.width = 230);\n    this.height = 248;\n  }\n  // setElement(element: WBFileSource, size: Partial<TSize> = {}) {\n  //   this.removeTexture(this.cacheKey);\n  //   this.removeTexture(`${this.cacheKey}_filtered`);\n  //   this._element = element;\n  //   this._originalElement = element;\n  //   this._setWidthHeight(size);\n  //   element.classList.add(WBFile.CSS_CANVAS);\n  //   if (this.filters.length !== 0) {\n  //     this.applyFilters();\n  //   }\n  //   // resizeFilters work on the already filtered copy.\n  //   // we need to apply resizeFilters AFTER normal filters.\n  //   // applyResizeFilters is run more often than normal filters\n  //   // and is triggered by user interactions rather than dev code\n  //   if (this.resizeFilter) {\n  //     this.applyResizeFilters();\n  //   }\n  // }\n\n  // toObject(propertiesToInclude: Array<any>): object {\n  //   return super.toObject(\n  //     [...this.extendPropeties, 'minWidth', 'splitByGrapheme'].concat(\n  //       propertiesToInclude\n  //     )\n  //   );\n  // }\n  getWidgetMenuList() {\n    const menuList = [];\n    if (this.locked) {\n      menuList.push('objectLock');\n    } else {\n      menuList.push('more');\n      menuList.push('objectLock');\n      menuList.push('delete');\n      menuList.push('fileName');\n      menuList.push('borderLineIcon');\n      menuList.push('fileDownload');\n      const fileType = this.name.split('.').pop() || '';\n      if (\n        fileType.toLocaleLowerCase() == 'mp3' ||\n        fileType.toLocaleLowerCase() === 'm4a' ||\n        fileType.toLocaleLowerCase() === 'wav' ||\n        fileType.toLocaleLowerCase() === 'aac' ||\n        fileType.toLocaleLowerCase() === 'flac' ||\n        fileType.toLocaleLowerCase() === 'ogg' ||\n        fileType.toLocaleLowerCase() === 'aiff' ||\n        fileType.toLocaleLowerCase() === 'wma' ||\n        fileType.toLocaleLowerCase() === 'ape'\n      ) {\n        menuList.push('audioToText');\n      }\n    }\n    return menuList;\n  }\n  getWidgetMenuLength() {\n    if (this.locked) return 50;\n    return 60;\n  }\n  getContextMenuList() {\n    let menuList;\n    if (this.locked) {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n      ];\n    } else {\n      menuList = [\n        'Bring forward',\n        'Bring to front',\n        'Send backward',\n        'Send to back',\n        'Duplicate',\n        'Copy',\n        'Paste',\n        'Cut',\n        'Delete',\n      ];\n    }\n    if (this.locked) {\n      menuList.push('Unlock');\n    } else {\n      menuList.push('Lock');\n    }\n\n    return menuList;\n  }\n\n  InitializeEvent = () => {\n    const zoom = this.canvas?.getZoom() || 1;\n    // this.on('mousedblclick', (memo) => {\n    //   const offsetX = memo.e.offsetX - (this.left - this.width / 2);\n    //   const offsetY = memo.e.offsetY - (this.top - this.height / 2);\n\n    //   if (\n    //     offsetX < 20 ||\n    //     offsetX > 480 ||\n    //     offsetY < 20 ||\n    //     offsetY > 480 ||\n    //     (offsetY > 64 && offsetY < 446)\n    //   ) {\n    //     getWindow().open(this.url, '_blank').focus();\n    //   } else {\n    //     let text = this.title;\n    //     const textarea = $('#urlTextarea');\n    //     const cvsPosition = $('#canvasContainer').offset();\n    //     let fontSize = 20 * this.scaleX * zoom;\n    //     const left = `${\n    //       cvsPosition.left +\n    //       (this.left - (this.width / 2 - 22) * this.scaleX) * zoom\n    //     }px`;\n    //     let top = `${\n    //       cvsPosition.top +\n    //       (this.top - (this.height / 2 - 22) * this.scaleY) * zoom\n    //     }px`;\n    //     const newWidth = (this.width - 44) * this.scaleX * zoom;\n    //     const width = `${newWidth}px`;\n    //     let height = `${40 * this.scaleY * zoom}px`;\n    //     const paddingLeft = `${10 * this.scaleY * zoom}px`;\n    //     let lineHeight = '40px';\n    //     textarea.data('type', 'title');\n    //     if (offsetY >= 446) {\n    //       text = this.description;\n    //       fontSize = 15 * this.scaleX * zoom;\n    //       top = `${\n    //         cvsPosition.top +\n    //         (this.top + (this.height / 2 - 52) * this.scaleY) * zoom\n    //       }px`;\n    //       height = `${30 * this.scaleY * zoom}px`;\n    //       lineHeight = '30px';\n    //       textarea.data('type', 'description');\n    //     }\n    //     textarea\n    //       .data('widget', this)\n    //       .css('left', left)\n    //       .css('top', top)\n    //       .css('padding-left', paddingLeft)\n    //       .css('width', width)\n    //       .css('height', height)\n    //       .css('background-color', 'white')\n    //       .css('font-size', `${fontSize}px`)\n    //       .css('font-family', 'Arial')\n    //       .css('line-height', lineHeight)\n    //       .val(text)\n    //       .show()\n    //       .focus();\n    //   }\n    // });\n    // this.on('removed', this.removedListener);\n  };\n  // removedListener() {\n  //   if (this.loading) {\n  //     this.loading.remove();\n  //     this.loading = null;\n  //   }\n  // }\n  // initDoubleClickSimulation() {\n  //   this.__lastClickTime = +new Date();\n  //   this.on('touchstart', this.onMouseDown.bind(this));\n  //   this.on('mousedown', this.onMouseDown.bind(this));\n  // }\n\n  // onMouseUp(options) {\n  //   this.__newClickTime = +new Date();\n  //   if (this.__newClickTime - this.__lastClickTime < 500) {\n  //     this.fire('dblclick', options);\n  //     this._stopEvent(options.e);\n  //   }\n  //   this.__lastClickTime = this.__newClickTime;\n  // }\n\n  // _stopEvent(e) {\n  //   e.preventDefault();\n  //   e.stopPropagation();\n  // }\n  //@ts-ignore\n  drawObject(ctx: CanvasRenderingContext2D) {\n    let elementToDraw = null;\n    // draw border\n    ctx.beginPath();\n    ctx.fillStyle = 'rgba(255,255,255,0)';\n    ctx.fillRect(-this.width / 2, -this.height / 2, this.width, this.height);\n    ctx.lineWidth = 0;\n    ctx.strokeStyle = '#ffffff';\n    ctx.moveTo(-this.width / 2, -this.height / 2);\n    ctx.stroke();\n\n    if (\n      this.isMoving === false &&\n      // this.resizeFilters.length &&\n      this._needsResize()\n    ) {\n      this._lastScaleX = this.scaleX;\n      this._lastScaleY = this.scaleY;\n      // elementToDraw = this.applyFilters(\n      //   null,\n      //   this.resizeFilters,\n      //   this._filteredEl || this._originalElement,\n      //   true\n      // );\n    } else {\n      elementToDraw = this._element;\n    }\n\n    const imgWidth =\n      this.name.substring(this.name.lastIndexOf('.') + 1) === 'pdf' ? 320 : 230;\n    const imgHeight =\n      this.name.substring(this.name.lastIndexOf('.') + 1) === 'pdf' ? 453 : 160;\n\n    if (elementToDraw) {\n      ctx.drawImage(\n        elementToDraw,\n        -this.width / 2,\n        -this.height / 2,\n        imgWidth,\n        imgHeight\n      );\n    }\n\n    if (this.name.substring(this.name.lastIndexOf('.') + 1) !== 'pdf') {\n      this.renderTitle(ctx, this.name);\n    }\n    this._renderStroke(ctx);\n  }\n\n  getFileType(name = '') {\n    let fileType = '';\n    switch (name.substring(name.lastIndexOf('.') + 1)) {\n      case 'doc':\n      case 'docx':\n        fileType = 'Word Document';\n        break;\n      case 'xls':\n      case 'xlsx':\n        fileType = 'Excel Document';\n        break;\n      case 'ppt':\n      case 'pptx':\n        fileType = 'PPT Document';\n        break;\n      case 'pdf':\n        fileType = 'PDF Document';\n        break;\n      case 'zip':\n        fileType = 'ZIP File';\n        break;\n      case 'mp4':\n        fileType = 'Video Document';\n        break;\n      case 'webm':\n        fileType = 'Video Document';\n        break;\n      default:\n        fileType = 'Other Document';\n        break;\n    }\n    return fileType;\n  }\n\n  isFileVideo(name: string) {\n    if (!name) return false;\n    const FileType = this.name.split('.').pop() || '';\n    switch (name.substr(name.lastIndexOf('.') + 1).toUpperCase()) {\n      case 'MP4':\n        return true;\n      case 'WEBM':\n        return true;\n      default:\n        return false;\n    }\n  }\n\n  renderTitle(ctx: any, title: string) {\n    const maxWidth = this.width;\n    const x = -this.width / 2;\n    const y = this.height / 2 - 60;\n\n    ctx.font = '16px Arial';\n    ctx.fillStyle = 'rgba(255, 255, 255, 1)';\n\n    // white board behind the title\n    ctx.fillRect(x, y - 29, maxWidth, 90);\n    ctx.fillStyle = '#190FA1';\n\n    // helper function to convert string\n    const GB2312UnicodeConverter = {\n      ToUnicode(str: string) {\n        return escape(str).toLocaleLowerCase().replace(/%u/gi, '\\\\u');\n      },\n      ToGB2312(str: string) {\n        return unescape(str.replace(/\\\\u/gi, '%u'));\n      },\n    };\n    // Handle non-unicode or non-utf8 coding string\n    const unicodeTitle = GB2312UnicodeConverter.ToUnicode(title);\n\n    // handle the situation that the website's title is null\n    if (title === null || unicodeTitle.indexOf('\\\\ufffd') !== -1 || !title) {\n      const firstChar = this.url.indexOf('.');\n      const lastChar = this.url.indexOf('.', firstChar + 1);\n      this.name = this.url.substring(firstChar + 1, lastChar);\n    }\n\n    // title setting\n    this.wrapText(ctx, title, x + 15, y - 5, maxWidth - 20, 23);\n\n    // url setting\n    const newurl = this.url\n      ? `${this.url.split('/')[0]}/${this.url.split('/')[1]}/${\n          this.url.split('/')[2]\n        }`\n      : '';\n    ctx.font = '12px Arial';\n    ctx.fillStyle = 'rgba(35, 41, 48, 0.65)';\n    // gray square in front of website\n    this.wrapText(ctx, newurl, x + 15, y + 45, maxWidth - 20, 25);\n  }\n\n  changeFileImgUrl(targetSrc: string) {\n    this.setSrc(targetSrc);\n  }\n\n  wrapText(\n    context: any,\n    text: any,\n    x: number,\n    y: number,\n    maxWidth: number,\n    lineHeight: number\n  ) {\n    let words = '';\n    if (text) words = text.split(' ');\n\n    let line = '';\n    let lineCount = 1;\n    let tempLine = '';\n    let _y = y;\n\n    // handle non-English char\n    if (escape(text).indexOf('%u') < 0) {\n      // only the English char\n      for (let n = 0; n < words.length; n++) {\n        if (lineCount === 3) return;\n        if (n !== 0) tempLine = `${line.slice(0, -3)}...`;\n        const testLine = `${line + words[n]} `;\n        const metrics = context.measureText(testLine);\n        const testWidth = metrics.width;\n        if (testWidth > maxWidth && n > 0) {\n          if (lineCount === 2) {\n            line = tempLine;\n          }\n          context.fillText(line, x, _y);\n          line = `${words[n]} `;\n          _y += lineHeight;\n          lineCount++;\n        } else {\n          line = testLine;\n        }\n      }\n    } else {\n      for (let n = 0; n < text.length; n++) {\n        if (lineCount === 3) return;\n        if (n !== 0) tempLine = `${line.slice(0, -2)}...`;\n        const testLine = `${line + text[n]}`;\n        const metrics = context.measureText(testLine);\n        const testWidth = metrics.width;\n        if (testWidth > maxWidth && n > 0) {\n          if (lineCount === 2) {\n            line = tempLine;\n          }\n          context.fillText(line, x, _y);\n          line = `${text[n]}`;\n          _y += lineHeight;\n          lineCount++;\n        } else {\n          line = testLine;\n        }\n      }\n    }\n    if (lineCount < 3) context.fillText(line, x, _y);\n  }\n  getFileIconURL(name: string) {\n    let fileIconURL = '';\n    switch (name.substring(name.lastIndexOf('.') + 1)) {\n      case 'doc':\n      case 'docx':\n        fileIconURL = '/fileIcons/word.png';\n        break;\n      case 'xls':\n      case 'xlsx':\n        fileIconURL = '/fileIcons/excel.png';\n        break;\n      case 'ppt':\n      case 'pptx':\n        fileIconURL = '/fileIcons/ppt.png';\n        break;\n      case 'pdf':\n        fileIconURL = '/fileIcons/pdf.svg';\n        break;\n      case 'zip':\n        fileIconURL = '/fileIcons/zip.png';\n        break;\n      case 'mp4':\n        fileIconURL = '/fileIcons/mp4.png';\n        break;\n\n      case 'webm':\n        fileIconURL = '/fileIcons/mp4.png';\n        break;\n      default:\n        fileIconURL = '/fileIcons/file.png';\n        break;\n    }\n    return fileIconURL;\n  }\n  fromURL<T extends TOptions<SerializedWBFileProps>>(\n    fileOptions: any\n  ): Promise<XFile> {\n    return new Promise(async (resolve, reject) => {\n      const url = fileOptions.previewImage\n        ? fileOptions.previewImage\n        : this.getFileIconURL(fileOptions.name);\n      try {\n        const loadedImg = await loadImage(url, {\n          ...fileOptions,\n          crossOrigin: 'anonymous',\n        });\n        resolve(new XFile(loadedImg, fileOptions));\n      } catch (error) {\n        reject(error);\n      }\n    });\n  }\n}\nclassRegistry.setClass(XFile);\n"],"names":["WBFileDefaultValues","minWidth","dynamicMinWidth","lockScalingFlip","noScaleCache","splitByGrapheme","objType","height","maxHeight","XFile","FabricImage","getDefaults","_objectSpread","controls","createFileDefaultControls","ownDefaults","constructor","element","options","toString","_defineProperty","_this$canvas","canvas","getZoom","filters","name","shadow","Shadow","color","offsetX","offsetY","blur","id","clipPath","Rect","left","top","rx","ry","width","fill","getWidgetMenuList","menuList","locked","push","fileType","split","pop","toLocaleLowerCase","getWidgetMenuLength","getContextMenuList","drawObject","ctx","elementToDraw","beginPath","fillStyle","fillRect","lineWidth","strokeStyle","moveTo","stroke","isMoving","_needsResize","_lastScaleX","scaleX","_lastScaleY","scaleY","_element","imgWidth","substring","lastIndexOf","imgHeight","drawImage","renderTitle","_renderStroke","getFileType","arguments","length","undefined","isFileVideo","substr","toUpperCase","title","maxWidth","x","y","font","GB2312UnicodeConverter","ToUnicode","str","escape","replace","ToGB2312","unescape","unicodeTitle","indexOf","firstChar","url","lastChar","wrapText","newurl","concat","changeFileImgUrl","targetSrc","setSrc","context","text","lineHeight","words","line","lineCount","tempLine","_y","n","slice","testLine","metrics","measureText","testWidth","fillText","getFileIconURL","fileIconURL","fromURL","fileOptions","Promise","resolve","reject","previewImage","loadedImg","loadImage","crossOrigin","error","classRegistry","setClass"],"mappings":"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"}