{"version":3,"sources":["jsdelivr-header.js","/npm/@jinlie/table-to-excel@1.0.4/src/parser.js","/npm/@jinlie/table-to-excel@1.0.4/src/FileSaver.js","/npm/@jinlie/table-to-excel@1.0.4/src/tableToExcel.js"],"names":[],"mappings":"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","file":"/npm/@jinlie/table-to-excel@1.0.4/dist/tableToExcel.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/@jinlie/table-to-excel@1.0.4/dist/tableToExcel.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","const TTEParser = (function() {\r\n  let methods = {};\r\n\r\n  /**\r\n   * Parse HTML table to excel worksheet\r\n   * @param {object} ws The worksheet object\r\n   * @param {HTML entity} table The table to be converted to excel sheet\r\n   */\r\n  methods.parseDomToTable = function(ws, table, opts) {\r\n    let _r, _c, cs, rs, r, c;\r\n    let rows = [...table.getElementsByTagName(\"tr\")];\r\n    let widths = table.getAttribute(\"data-cols-width\");\r\n    if (widths)\r\n      widths = widths.split(\",\").map(function(item) {\r\n        return parseInt(item);\r\n      });\r\n    let merges = [];\r\n    for (_r = 0; _r < rows.length; ++_r) {\r\n      let row = rows[_r];\r\n      r = _r + 1; // Actual excel row number\r\n      c = 1; // Actual excel col number\r\n      if (row.getAttribute(\"data-exclude\") === \"true\") {\r\n        rows.splice(_r, 1);\r\n        _r--;\r\n        continue;\r\n      }\r\n      if (row.getAttribute(\"data-height\")) {\r\n        let exRow = ws.getRow(r);\r\n        exRow.height = parseFloat(row.getAttribute(\"data-height\"));\r\n      }\r\n\r\n      let tds = [...row.children];\r\n      for (_c = 0; _c < tds.length; ++_c) {\r\n        let td = tds[_c];\r\n        if (td.getAttribute(\"data-exclude\") === \"true\") {\r\n          tds.splice(_c, 1);\r\n          _c--;\r\n          continue;\r\n        }\r\n        for (let _m = 0; _m < merges.length; ++_m) {\r\n          var m = merges[_m];\r\n          if (m.s.c == c && m.s.r <= r && r <= m.e.r) {\r\n            c = m.e.c + 1;\r\n            _m = -1;\r\n          }\r\n        }\r\n        let exCell = ws.getCell(getColumnAddress(c, r));\r\n        // calculate merges\r\n        cs = parseInt(td.getAttribute(\"colspan\")) || 1;\r\n        rs = parseInt(td.getAttribute(\"rowspan\")) || 1;\r\n        if (cs > 1 || rs > 1) {\r\n          merges.push({\r\n            s: { c: c, r: r },\r\n            e: { c: c + cs - 1, r: r + rs - 1 }\r\n          });\r\n        }\r\n        c += cs;\r\n        exCell.value = getValue(td);\r\n        if (!opts.autoStyle) {\r\n          let styles = getStylesDataAttr(td);\r\n          exCell.font = styles.font || null;\r\n          exCell.alignment = styles.alignment || null;\r\n          exCell.border = styles.border || null;\r\n          exCell.fill = styles.fill || null;\r\n          exCell.numFmt = styles.numFmt || null;\r\n        }\r\n      }\r\n    }\r\n    //Setting column width\r\n    if (widths)\r\n      widths.forEach((width, _i) => {\r\n        ws.columns[_i].width = width;\r\n      });\r\n    applyMerges(ws, merges);\r\n    return ws;\r\n  };\r\n\r\n  /**\r\n   * To apply merges on the sheet\r\n   * @param {object} ws The worksheet object\r\n   * @param {object[]} merges array of merges\r\n   */\r\n  let applyMerges = function(ws, merges) {\r\n    merges.forEach(m => {\r\n      ws.mergeCells(\r\n        getExcelColumnName(m.s.c) +\r\n          m.s.r +\r\n          \":\" +\r\n          getExcelColumnName(m.e.c) +\r\n          m.e.r\r\n      );\r\n    });\r\n  };\r\n\r\n  /**\r\n   * Convert HTML to plain text\r\n   */\r\n  let htmldecode = (function() {\r\n    let entities = [\r\n      [\"nbsp\", \" \"],\r\n      [\"middot\", \"·\"],\r\n      [\"quot\", '\"'],\r\n      [\"apos\", \"'\"],\r\n      [\"gt\", \">\"],\r\n      [\"lt\", \"<\"],\r\n      [\"amp\", \"&\"]\r\n    ].map(function(x) {\r\n      return [new RegExp(\"&\" + x[0] + \";\", \"g\"), x[1]];\r\n    });\r\n    return function htmldecode(str) {\r\n      let o = str\r\n        .trim()\r\n        .replace(/\\s+/g, \" \")\r\n        .replace(/<\\s*[bB][rR]\\s*\\/?>/g, \"\\n\")\r\n        .replace(/<[^>]*>/g, \"\");\r\n      for (let i = 0; i < entities.length; ++i)\r\n        o = o.replace(entities[i][0], entities[i][1]);\r\n      return o;\r\n    };\r\n  })();\r\n\r\n  /**\r\n   * Takes a positive integer and returns the corresponding column name.\r\n   * @param {number} num  The positive integer to convert to a column name.\r\n   * @return {string}  The column name.\r\n   */\r\n  let getExcelColumnName = function(num) {\r\n    for (var ret = \"\", a = 1, b = 26; (num -= a) >= 0; a = b, b *= 26) {\r\n      ret = String.fromCharCode(parseInt((num % b) / a) + 65) + ret;\r\n    }\r\n    return ret;\r\n  };\r\n\r\n  let getColumnAddress = function(col, row) {\r\n    return getExcelColumnName(col) + row;\r\n  };\r\n\r\n  /**\r\n   * Checks the data type specified and conerts the value to it.\r\n   * @param {HTML entity} td\r\n   */\r\n  let getValue = function(td) {\r\n    let dataType = td.getAttribute(\"data-t\");\r\n    let rawVal = htmldecode(td.innerHTML);\r\n    if (dataType) {\r\n      let val;\r\n      switch (dataType) {\r\n        case \"n\": //number\r\n          val = Number(rawVal);\r\n          break;\r\n        case \"d\": //date\r\n          let date = new Date(rawVal);\r\n          // To fix the timezone issue\r\n          val = new Date(\r\n            Date.UTC(\r\n              date.getFullYear(),\r\n              date.getMonth(),\r\n              date.getDate(),\r\n              date.getHours(),\r\n              date.getMinutes(),\r\n              date.getSeconds()\r\n            )\r\n          );\r\n          break;\r\n        case \"b\": //boolean\r\n          val =\r\n            rawVal.toLowerCase() === \"true\"\r\n              ? true\r\n              : rawVal.toLowerCase() === \"false\"\r\n              ? false\r\n              : Boolean(parseInt(rawVal));\r\n          break;\r\n        default:\r\n          val = rawVal;\r\n      }\r\n      return val;\r\n    } else if (td.getAttribute(\"data-hyperlink\")) {\r\n      return {\r\n        text: rawVal,\r\n        hyperlink: td.getAttribute(\"data-hyperlink\")\r\n      };\r\n    } else if (td.getAttribute(\"data-error\")) {\r\n      return { error: td.getAttribute(\"data-error\") };\r\n    }\r\n    return rawVal;\r\n  };\r\n\r\n  /**\r\n   * Prepares the style object for a cell using the data attributes\r\n   * @param {HTML entity} td\r\n   */\r\n  let getStylesDataAttr = function(td) {\r\n    //Font attrs\r\n    let font = {};\r\n    if (td.getAttribute(\"data-f-name\"))\r\n      font.name = td.getAttribute(\"data-f-name\");\r\n    if (td.getAttribute(\"data-f-sz\")) font.size = td.getAttribute(\"data-f-sz\");\r\n    if (td.getAttribute(\"data-f-color\"))\r\n      font.color = { argb: td.getAttribute(\"data-f-color\") };\r\n    if (td.getAttribute(\"data-f-bold\") === \"true\") font.bold = true;\r\n    if (td.getAttribute(\"data-f-italic\") === \"true\") font.italic = true;\r\n    if (td.getAttribute(\"data-f-underline\") === \"true\") font.underline = true;\r\n    if (td.getAttribute(\"data-f-strike\") === \"true\") font.strike = true;\r\n\r\n    // Alignment attrs\r\n    let alignment = {};\r\n    if (td.getAttribute(\"data-a-h\"))\r\n      alignment.horizontal = td.getAttribute(\"data-a-h\");\r\n    if (td.getAttribute(\"data-a-v\"))\r\n      alignment.vertical = td.getAttribute(\"data-a-v\");\r\n    if (td.getAttribute(\"data-a-wrap\") === \"true\") alignment.wrapText = true;\r\n    if (td.getAttribute(\"data-a-text-rotation\"))\r\n      alignment.textRotation = td.getAttribute(\"data-a-text-rotation\");\r\n    if (td.getAttribute(\"data-a-indent\"))\r\n      alignment.indent = td.getAttribute(\"data-a-indent\");\r\n    if (td.getAttribute(\"data-a-rtl\") === \"true\")\r\n      alignment.readingOrder = \"rtl\";\r\n\r\n    // Border attrs\r\n    let border = {\r\n      top: {},\r\n      left: {},\r\n      bottom: {},\r\n      right: {}\r\n    };\r\n\r\n    if (td.getAttribute(\"data-b-a-s\")) {\r\n      let style = td.getAttribute(\"data-b-a-s\");\r\n      border.top.style = style;\r\n      border.left.style = style;\r\n      border.bottom.style = style;\r\n      border.right.style = style;\r\n    }\r\n    if (td.getAttribute(\"data-b-a-c\")) {\r\n      let color = { argb: td.getAttribute(\"data-b-a-c\") };\r\n      border.top.color = color;\r\n      border.left.color = color;\r\n      border.bottom.color = color;\r\n      border.right.color = color;\r\n    }\r\n    if (td.getAttribute(\"data-b-t-s\")) {\r\n      border.top.style = td.getAttribute(\"data-b-t-s\");\r\n      if (td.getAttribute(\"data-b-t-c\"))\r\n        border.top.color = { argb: td.getAttribute(\"data-b-t-c\") };\r\n    }\r\n    if (td.getAttribute(\"data-b-l-s\")) {\r\n      border.left.style = td.getAttribute(\"data-b-l-s\");\r\n      if (td.getAttribute(\"data-b-l-c\"))\r\n        border.left.color = { argb: td.getAttribute(\"data-b-t-c\") };\r\n    }\r\n    if (td.getAttribute(\"data-b-b-s\")) {\r\n      border.bottom.style = td.getAttribute(\"data-b-b-s\");\r\n      if (td.getAttribute(\"data-b-b-c\"))\r\n        border.bottom.color = { argb: td.getAttribute(\"data-b-t-c\") };\r\n    }\r\n    if (td.getAttribute(\"data-b-r-s\")) {\r\n      border.right.style = td.getAttribute(\"data-b-r-s\");\r\n      if (td.getAttribute(\"data-b-r-c\"))\r\n        border.right.color = { argb: td.getAttribute(\"data-b-t-c\") };\r\n    }\r\n\r\n    //Fill\r\n    let fill;\r\n    if (td.getAttribute(\"data-fill-color\")) {\r\n      fill = {\r\n        type: \"pattern\",\r\n        pattern: \"solid\",\r\n        fgColor: { argb: td.getAttribute(\"data-fill-color\") }\r\n      };\r\n    }\r\n    //number format\r\n    let numFmt;\r\n    if (td.getAttribute(\"data-num-fmt\"))\r\n      numFmt = td.getAttribute(\"data-num-fmt\");\r\n\r\n    return {\r\n      font,\r\n      alignment,\r\n      border,\r\n      fill,\r\n      numFmt\r\n    };\r\n  };\r\n\r\n  return methods;\r\n})();\r\n\r\nexport default TTEParser;\r\n","/*\n* FileSaver.js\n* A saveAs() FileSaver implementation.\n*\n* By Eli Grey, http://eligrey.com\n*\n* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT)\n* source  : http://purl.eligrey.com/github/FileSaver.js\n*/\n\n// The one and only way of getting global scope in all environments\n// https://stackoverflow.com/q/3277182/1008999\nvar _global = typeof window === 'object' && window.window === window\n  ? window : typeof self === 'object' && self.self === self\n  ? self : typeof global === 'object' && global.global === global\n  ? global\n  : this\n\nfunction bom (blob, opts) {\n  if (typeof opts === 'undefined') opts = { autoBom: false }\n  else if (typeof opts !== 'object') {\n    console.warn('Deprecated: Expected third argument to be a object')\n    opts = { autoBom: !opts }\n  }\n\n  // prepend BOM for UTF-8 XML and text/* types (including HTML)\n  // note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF\n  if (opts.autoBom && /^\\s*(?:text\\/\\S*|application\\/xml|\\S*\\/\\S*\\+xml)\\s*;.*charset\\s*=\\s*utf-8/i.test(blob.type)) {\n    return new Blob([String.fromCharCode(0xFEFF), blob], { type: blob.type })\n  }\n  return blob\n}\n\nfunction download (url, name, opts) {\n  var xhr = new XMLHttpRequest()\n  xhr.open('GET', url)\n  xhr.responseType = 'blob'\n  xhr.onload = function () {\n    saveAs(xhr.response, name, opts)\n  }\n  xhr.onerror = function () {\n    console.error('could not download file')\n  }\n  xhr.send()\n}\n\nfunction corsEnabled (url) {\n  var xhr = new XMLHttpRequest()\n  // use sync to avoid popup blocker\n  xhr.open('HEAD', url, false)\n  try {\n    xhr.send()\n  } catch (e) {}\n  return xhr.status >= 200 && xhr.status <= 299\n}\n\n// `a.click()` doesn't work for all browsers (#465)\nfunction click (node) {\n  try {\n    node.dispatchEvent(new MouseEvent('click'))\n  } catch (e) {\n    var evt = document.createEvent('MouseEvents')\n    evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80,\n                          20, false, false, false, false, 0, null)\n    node.dispatchEvent(evt)\n  }\n}\n\nvar saveAs = _global.saveAs || (\n  // probably in some web worker\n  (typeof window !== 'object' || window !== _global)\n    ? function saveAs () { /* noop */ }\n\n  // Use download attribute first if possible (#193 Lumia mobile)\n  : 'download' in HTMLAnchorElement.prototype\n  ? function saveAs (blob, name, opts) {\n    var URL = _global.URL || _global.webkitURL\n    var a = document.createElement('a')\n    name = name || blob.name || 'download'\n\n    a.download = name\n    a.rel = 'noopener' // tabnabbing\n\n    // TODO: detect chrome extensions & packaged apps\n    // a.target = '_blank'\n\n    if (typeof blob === 'string') {\n      // Support regular links\n      a.href = blob\n      if (a.origin !== location.origin) {\n        corsEnabled(a.href)\n          ? download(blob, name, opts)\n          : click(a, a.target = '_blank')\n      } else {\n        click(a)\n      }\n    } else {\n      // Support blobs\n      a.href = URL.createObjectURL(blob)\n      setTimeout(function () { URL.revokeObjectURL(a.href) }, 4E4) // 40s\n      setTimeout(function () { click(a) }, 0)\n    }\n  }\n\n  // Use msSaveOrOpenBlob as a second approach\n  : 'msSaveOrOpenBlob' in navigator\n  ? function saveAs (blob, name, opts) {\n    name = name || blob.name || 'download'\n\n    if (typeof blob === 'string') {\n      if (corsEnabled(blob)) {\n        download(blob, name, opts)\n      } else {\n        var a = document.createElement('a')\n        a.href = blob\n        a.target = '_blank'\n        setTimeout(function () { click(a) })\n      }\n    } else {\n      navigator.msSaveOrOpenBlob(bom(blob, opts), name)\n    }\n  }\n\n  // Fallback to using FileReader and a popup\n  : function saveAs (blob, name, opts, popup) {\n    // Open a popup immediately do go around popup blocker\n    // Mostly only available on user interaction and the fileReader is async so...\n    popup = popup || open('', '_blank')\n    if (popup) {\n      popup.document.title =\n      popup.document.body.innerText = 'downloading...'\n    }\n\n    if (typeof blob === 'string') return download(blob, name, opts)\n\n    var force = blob.type === 'application/octet-stream'\n    var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari\n    var isChromeIOS = /CriOS\\/[\\d]+/.test(navigator.userAgent)\n\n    if ((isChromeIOS || (force && isSafari)) && typeof FileReader === 'object') {\n      // Safari doesn't allow downloading of blob URLs\n      var reader = new FileReader()\n      reader.onloadend = function () {\n        var url = reader.result\n        url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;')\n        if (popup) popup.location.href = url\n        else location = url\n        popup = null // reverse-tabnabbing #460\n      }\n      reader.readAsDataURL(blob)\n    } else {\n      var URL = _global.URL || _global.webkitURL\n      var url = URL.createObjectURL(blob)\n      if (popup) popup.location = url\n      else location.href = url\n      popup = null // reverse-tabnabbing #460\n      setTimeout(function () { URL.revokeObjectURL(url) }, 4E4) // 40s\n    }\n  }\n)\n\n_global.saveAs = saveAs.saveAs = saveAs\n\nif (typeof module !== 'undefined') {\n  module.exports = saveAs;\n}\n","import Parser from \"./parser\";\r\nimport saveAs from \"file-saver\";\r\n// import ExcelJS from \"../node_modules/exceljs/dist/es5/exceljs.browser\";\r\n\r\nconst TableToExcel = (function(Parser) {\r\n  let methods = {};\r\n\r\n  methods.initWorkBook = function() {\r\n    let wb = new ExcelJS.Workbook();\r\n    return wb;\r\n  };\r\n\r\n  methods.initSheet = function(wb, sheetName) {\r\n    let ws = wb.addWorksheet(sheetName);\r\n    return ws;\r\n  };\r\n\r\n  methods.save = function(wb, fileName) {\r\n    wb.xlsx.writeBuffer().then(function(buffer) {\r\n      saveAs(\r\n        new Blob([buffer], { type: \"application/octet-stream\" }),\r\n        fileName\r\n      );\r\n    });\r\n  };\r\n\r\n  methods.tableToSheet = function(wb, table, opts) {\r\n    let ws = this.initSheet(wb, opts.sheet.name);\r\n    ws = Parser.parseDomToTable(ws, table, opts);\r\n    return wb;\r\n  };\r\n\r\n  methods.tableToBook = function(table, opts) {\r\n    let wb = this.initWorkBook();\r\n    wb = this.tableToSheet(wb, table, opts);\r\n    return wb;\r\n  };\r\n\r\n  methods.convert = function(table, opts = {}) {\r\n    let defaultOpts = {\r\n      name: \"export.xlsx\",\r\n      autoStyle: false,\r\n      sheet: {\r\n        name: \"Sheet 1\"\r\n      }\r\n    };\r\n    opts = { ...defaultOpts, ...opts };\r\n    let wb = this.tableToBook(table, opts);\r\n    this.save(wb, opts.name);\r\n  };\r\n\r\n  return methods;\r\n})(Parser);\r\n\r\nexport default TableToExcel;\r\nwindow.TableToExcel = TableToExcel;\r\n"]}