{"version":3,"file":"ngx-export-as.mjs","sources":["../../../projects/ngx-export-as/src/lib/export-as.service.ts","../../../projects/ngx-export-as/src/lib/export-as.module.ts","../../../projects/ngx-export-as/src/public_api.ts","../../../projects/ngx-export-as/src/ngx-export-as.ts"],"sourcesContent":["import { Inject, Injectable, PLATFORM_ID } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { ExportAsConfig } from './export-as-config.model';\n\nimport html2canvas from 'html2canvas';\nimport * as XLSX from 'xlsx';\n// import HTMLtoDOCX from 'html-to-docx';\nimport html2pdf from 'html2pdf.js';\nimport { isPlatformBrowser } from '@angular/common';\n\n@Injectable()\nexport class ExportAsService {\n\n  constructor(\n    @Inject(PLATFORM_ID) private platformId: Object\n  ) {\n    if (isPlatformBrowser(this.platformId)) {\n      window['html2canvas'] = html2canvas;\n    }\n   }\n\n  /**\n   * Main base64 get method, it will return the file as base64 string\n   * @param config your config\n   */\n  get(config: ExportAsConfig): Observable<string | null> {\n    // structure method name dynamically by type\n    const func = 'get' + config.type.toUpperCase();\n    // if type supported execute and return\n    if (this[func]) {\n      return this[func](config);\n    }\n\n    // throw error for unsupported formats\n    return new Observable((observer) => { observer.error('Export type is not supported.'); });\n  }\n\n  /**\n   * Save exported file in old javascript way\n   * @param config your custom config\n   * @param fileName Name of the file to be saved as\n   */\n  save(config: ExportAsConfig, fileName: string): Observable<string | null> {\n    // set download\n    config.download = true;\n    // get file name with type\n    config.fileName = fileName + '.' + config.type;\n    return this.get(config);\n  }\n\n  /**\n   * Converts content string to blob object\n   * @param content string to be converted\n   */\n  contentToBlob(content: string): Observable<Blob> {\n    return new Observable((observer) => {\n      // get content string and extract mime type\n      const arr = content.split(','), mime = arr[0].match(/:(.*?);/)[1],\n        bstr = atob(arr[1]);\n      let n = bstr.length;\n      const u8arr = new Uint8Array(n);\n      while (n--) {\n        u8arr[n] = bstr.charCodeAt(n);\n      }\n      observer.next(new Blob([u8arr], { type: mime }));\n      observer.complete();\n    });\n  }\n\n  /**\n   * Removes base64 file type from a string like \"data:text/csv;base64,\"\n   * @param fileContent the base64 string to remove the type from\n   */\n  removeFileTypeFromBase64(fileContent: string): string {\n    const re = /^data:[^]*;base64,/g;\n    const newContent: string = re[Symbol.replace](fileContent, '');\n    return newContent;\n  }\n\n  /**\n   * Structure the base64 file content with the file type string\n   * @param fileContent file content\n   * @param fileMime file mime type \"text/csv\"\n   */\n  addFileTypeToBase64(fileContent: string, fileMime: string): string {\n    return `data:${fileMime};base64,${fileContent}`;\n  }\n\n  /**\n   * create downloadable file from dataURL\n   * @param fileName downloadable file name\n   * @param dataURL file content as dataURL\n   */\n  downloadFromDataURL(fileName: string, dataURL: string): void {\n    // create blob\n    this.contentToBlob(dataURL).subscribe(blob => {\n      // download the blob\n      this.downloadFromBlob(blob, fileName);\n    });\n  }\n\n  /**\n   * Downloads the blob object as a file\n   * @param blob file object as blob\n   * @param fileName downloadable file name\n   */\n  downloadFromBlob(blob: Blob, fileName: string) {\n    // get object url\n    const url = window.URL.createObjectURL(blob);\n    // check for microsoft internet explorer\n    if (window.navigator && window.navigator['msSaveOrOpenBlob']) {\n      // use IE download or open if the user using IE\n      window.navigator['msSaveOrOpenBlob'](blob, fileName);\n    } else {\n      this.saveFile(fileName, url);\n    }\n  }\n\n  private saveFile(fileName: string, url: string) {\n    // if not using IE then create link element\n    const element = document.createElement('a');\n    // set download attr with file name\n    element.setAttribute('download', fileName);\n    // set the element as hidden\n    element.style.display = 'none';\n    // append the body\n    document.body.appendChild(element);\n    // set href attr\n    element.href = url;\n    // click on it to start downloading\n    element.click();\n    // remove the link from the dom\n    document.body.removeChild(element);\n  }\n\n  private getPDF(config: ExportAsConfig): Observable<string | null> {\n    return new Observable((observer) => {\n      if (!config.options) {\n        config.options = {};\n      }\n      config.options.filename = config.fileName;\n      const element: HTMLElement = document.getElementById(config.elementIdOrContent);\n      const pdf = html2pdf().set(config.options).from(element ? element : config.elementIdOrContent);\n\n      const download = config.download;\n      const pdfCallbackFn = config.options.pdfCallbackFn;\n      if (download) {\n        if (pdfCallbackFn) {\n          this.applyPdfCallbackFn(pdf, pdfCallbackFn).save();\n        } else {\n          pdf.save();\n        }\n        observer.next(null);\n        observer.complete();\n      } else {\n        if (pdfCallbackFn) {\n          this.applyPdfCallbackFn(pdf, pdfCallbackFn).outputPdf('datauristring').then(data => {\n            observer.next(data);\n            observer.complete();\n          });\n        } else {\n          pdf.outputPdf('datauristring').then(data => {\n            observer.next(data);\n            observer.complete();\n          });\n        }\n      }\n    });\n  }\n\n  private applyPdfCallbackFn(pdf, pdfCallbackFn) {\n    return pdf.toPdf().get('pdf').then((pdfRef) => {\n      pdfCallbackFn(pdfRef);\n    });\n  }\n\n  private getPNG(config: ExportAsConfig): Observable<string | null> {\n    return new Observable((observer) => {\n      const element: HTMLElement = document.getElementById(config.elementIdOrContent);\n      html2canvas(element, config.options).then((canvas) => {\n        const imgData = canvas.toDataURL('image/PNG');\n        if (config.type === 'png' && config.download) {\n          this.downloadFromDataURL(config.fileName, imgData);\n          observer.next(null);\n        } else {\n          observer.next(imgData);\n        }\n        observer.complete();\n      }, err => {\n        observer.error(err);\n      });\n    });\n  }\n\n  private getCSV(config: ExportAsConfig): Observable<string | null> {\n    return new Observable((observer) => {\n      const element: HTMLElement = document.getElementById(config.elementIdOrContent);\n      const csv = [];\n      const rows: any = element.querySelectorAll('table tr');\n      for (let index = 0; index < rows.length; index++) {\n        const rowElement = rows[index];\n        const row = [];\n        const cols = rowElement.querySelectorAll('td, th');\n        for (let colIndex = 0; colIndex < cols.length; colIndex++) {\n          const col = cols[colIndex];\n          row.push('\"'+col.innerText+'\"');\n        }\n        csv.push(row.join(','));\n      }\n      const csvContent = 'data:text/csv;base64,' + this.btoa(csv.join('\\n'));\n      if (config.download) {\n        this.downloadFromDataURL(config.fileName, csvContent);\n        observer.next(null);\n      } else {\n        observer.next(csvContent);\n      }\n      observer.complete();\n    });\n  }\n\n  private getTXT(config: ExportAsConfig): Observable<string | null> {\n    const nameFrags = config.fileName.split('.');\n    config.fileName = `${nameFrags[0]}.txt`;\n    return this.getCSV(config);\n  }\n\n  private getXLS(config: ExportAsConfig): Observable<string | null> {\n    return new Observable((observer) => {\n\n      const element: HTMLElement = document.getElementById(config.elementIdOrContent);\n      const ws3 = XLSX.utils.table_to_sheet(element, config.options);\n      const wb = XLSX.utils.book_new();\n      XLSX.utils.book_append_sheet(wb, ws3, config.fileName);\n      const out = XLSX.write(wb, { type: 'base64' });\n      const xlsContent = 'data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,' + out;\n      if (config.download) {\n        this.downloadFromDataURL(config.fileName, xlsContent);\n        observer.next(null);\n      } else {\n        observer.next(xlsContent);\n      }\n      observer.complete();\n    });\n  }\n\n  private getXLSX(config: ExportAsConfig): Observable<string | null> {\n    return this.getXLS(config);\n  }\n\n  // private getDOCX(config: ExportAsConfig): Observable<string | null> {\n  //   return new Observable((observer) => {\n  //     const contentDocument: string = document.getElementById(config.elementIdOrContent).outerHTML;\n  //     const content = '<!DOCTYPE html>' + contentDocument;\n  //     HTMLtoDOCX(content, null, config.options).then(converted => {\n  //       if (config.download) {\n  //         this.downloadFromBlob(converted, config.fileName);\n  //         observer.next();\n  //         observer.complete();\n  //       } else {\n  //         const reader = new FileReader();\n  //         reader.onloadend = () => {\n  //           const base64data = reader.result as string;\n  //           observer.next(base64data);\n  //           observer.complete();\n  //         };\n  //         reader.readAsDataURL(converted);\n  //       }\n  //     });\n  //   });\n  // }\n\n  // private getDOC(config: ExportAsConfig): Observable<string | null> {\n  //   return this.getDOCX(config);\n  // }\n\n  private getJSON(config: ExportAsConfig): Observable<any[] | null> {\n    return new Observable((observer) => {\n      const data = []; // first row needs to be headers\n      const headers = [];\n      const table = <HTMLTableElement>document.getElementById(config.elementIdOrContent);\n      for (let index = 0; index < table.rows[0].cells.length; index++) {\n        headers[index] = table.rows[0].cells[index].innerHTML.toLowerCase().replace(/ /gi, '');\n      }\n      // go through cells\n      for (let i = 1; i < table.rows.length; i++) {\n        const tableRow = table.rows[i]; const rowData = {};\n        for (let j = 0; j < tableRow.cells.length; j++) {\n          rowData[headers[j]] = tableRow.cells[j].innerHTML;\n        }\n        data.push(rowData);\n      }\n      const jsonString = JSON.stringify(data);\n      const jsonBase64 = this.btoa(jsonString);\n      const dataStr = 'data:text/json;base64,' + jsonBase64;\n      if (config.download) {\n        this.downloadFromDataURL(config.fileName, dataStr);\n        observer.next(null);\n      } else {\n        observer.next(data);\n      }\n      observer.complete();\n    });\n  }\n\n  private getXML(config: ExportAsConfig): Observable<string | null> {\n    return new Observable((observer) => {\n      let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?><Root><Classes>';\n      const tritem = document.getElementById(config.elementIdOrContent).getElementsByTagName('tr');\n      for (let i = 0; i < tritem.length; i++) {\n        const celldata = tritem[i];\n        if (celldata.cells.length > 0) {\n          xml += '<Class name=\"' + celldata.cells[0].textContent + '\">\\n';\n          for (let m = 1; m < celldata.cells.length; ++m) {\n            xml += '\\t<data>' + celldata.cells[m].textContent + '</data>\\n';\n          }\n          xml += '</Class>\\n';\n        }\n      }\n      xml += '</Classes></Root>';\n      const base64 = 'data:text/xml;base64,' + this.btoa(xml);\n      if (config.download) {\n        this.downloadFromDataURL(config.fileName, base64);\n        observer.next(null);\n      } else {\n        observer.next(base64);\n      }\n      observer.complete();\n    });\n  }\n\n  private btoa(content: string) {\n    return btoa(unescape(encodeURIComponent(content)));\n  }\n\n}\n","/**\n * angular imports\n */\nimport { NgModule } from '@angular/core';\n\n/**\n * my imports\n */\nimport { ExportAsService } from './export-as.service';\n\n@NgModule({\n  providers: [ExportAsService],\n})\nexport class ExportAsModule { }\n\n\n","/*\n * Public API Surface of ngx-export-as\n */\n\nexport * from './lib/export-as.service';\nexport * from './lib/export-as-config.model';\nexport * from './lib/export-as.module';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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"}