123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433 |
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
- /* Tabulator v4.8.2 (c) Oliver Folkerd */
-
- var Download = function Download(table) {
- this.table = table; //hold Tabulator object
- };
-
- //trigger file download
- Download.prototype.download = function (type, filename, options, range, interceptCallback) {
- var self = this,
- downloadFunc = false;
-
- function buildLink(data, mime) {
- if (interceptCallback) {
- if (interceptCallback === true) {
- self.triggerDownload(data, mime, type, filename, true);
- } else {
- interceptCallback(data);
- }
- } else {
- self.triggerDownload(data, mime, type, filename);
- }
- }
-
- if (typeof type == "function") {
- downloadFunc = type;
- } else {
- if (self.downloaders[type]) {
- downloadFunc = self.downloaders[type];
- } else {
- console.warn("Download Error - No such download type found: ", type);
- }
- }
-
- if (downloadFunc) {
- var list = this.generateExportList(range);
-
- downloadFunc.call(this.table, list, options || {}, buildLink);
- }
- };
-
- Download.prototype.generateExportList = function (range) {
- var list = this.table.modules.export.generateExportList(this.table.options.downloadConfig, false, range || this.table.options.downloadRowRange, "download");
-
- //assign group header formatter
- var groupHeader = this.table.options.groupHeaderDownload;
-
- if (groupHeader && !Array.isArray(groupHeader)) {
- groupHeader = [groupHeader];
- }
-
- list.forEach(function (row) {
- var group;
-
- if (row.type === "group") {
- group = row.columns[0];
-
- if (groupHeader && groupHeader[row.indent]) {
- group.value = groupHeader[row.indent](group.value, row.component._group.getRowCount(), row.component._group.getData(), row.component);
- }
- }
- });
-
- return list;
- };
-
- Download.prototype.triggerDownload = function (data, mime, type, filename, newTab) {
- var element = document.createElement('a'),
- blob = new Blob([data], { type: mime }),
- filename = filename || "Tabulator." + (typeof type === "function" ? "txt" : type);
-
- blob = this.table.options.downloadReady.call(this.table, data, blob);
-
- if (blob) {
-
- if (newTab) {
- window.open(window.URL.createObjectURL(blob));
- } else {
- if (navigator.msSaveOrOpenBlob) {
- navigator.msSaveOrOpenBlob(blob, filename);
- } else {
- element.setAttribute('href', window.URL.createObjectURL(blob));
-
- //set file title
- element.setAttribute('download', filename);
-
- //trigger download
- element.style.display = 'none';
- document.body.appendChild(element);
- element.click();
-
- //remove temporary link element
- document.body.removeChild(element);
- }
- }
-
- if (this.table.options.downloadComplete) {
- this.table.options.downloadComplete();
- }
- }
- };
-
- Download.prototype.commsReceived = function (table, action, data) {
- switch (action) {
- case "intercept":
- this.download(data.type, "", data.options, data.active, data.intercept);
- break;
- }
- };
-
- //downloaders
- Download.prototype.downloaders = {
- csv: function csv(list, options, setFileContents) {
- var delimiter = options && options.delimiter ? options.delimiter : ",",
- fileContents = [],
- headers = [];
-
- list.forEach(function (row) {
- var item = [];
-
- switch (row.type) {
- case "group":
- console.warn("Download Warning - CSV downloader cannot process row groups");
- break;
-
- case "calc":
- console.warn("Download Warning - CSV downloader cannot process column calculations");
- break;
-
- case "header":
- row.columns.forEach(function (col, i) {
- if (col && col.depth === 1) {
- headers[i] = typeof col.value == "undefined" || col.value === null ? "" : '"' + String(col.value).split('"').join('""') + '"';
- }
- });
- break;
-
- case "row":
- row.columns.forEach(function (col) {
-
- if (col) {
-
- switch (_typeof(col.value)) {
- case "object":
- col.value = JSON.stringify(col.value);
- break;
-
- case "undefined":
- case "null":
- col.value = "";
- break;
- }
-
- item.push('"' + String(col.value).split('"').join('""') + '"');
- }
- });
-
- fileContents.push(item.join(delimiter));
- break;
- }
- });
-
- if (headers.length) {
- fileContents.unshift(headers.join(delimiter));
- }
-
- fileContents = fileContents.join("\n");
-
- if (options.bom) {
- fileContents = "\uFEFF" + fileContents;
- }
-
- setFileContents(fileContents, "text/csv");
- },
-
- json: function json(list, options, setFileContents) {
- var fileContents = [];
-
- list.forEach(function (row) {
- var item = {};
-
- switch (row.type) {
- case "header":
- break;
-
- case "group":
- console.warn("Download Warning - JSON downloader cannot process row groups");
- break;
-
- case "calc":
- console.warn("Download Warning - JSON downloader cannot process column calculations");
- break;
-
- case "row":
- row.columns.forEach(function (col) {
- if (col) {
- item[col.component.getField()] = col.value;
- }
- });
-
- fileContents.push(item);
- break;
- }
- });
-
- fileContents = JSON.stringify(fileContents, null, '\t');
-
- setFileContents(fileContents, "application/json");
- },
-
- pdf: function pdf(list, options, setFileContents) {
- var header = [],
- body = [],
- autoTableParams = {},
- rowGroupStyles = options.rowGroupStyles || {
- fontStyle: "bold",
- fontSize: 12,
- cellPadding: 6,
- fillColor: 220
- },
- rowCalcStyles = options.rowCalcStyles || {
- fontStyle: "bold",
- fontSize: 10,
- cellPadding: 4,
- fillColor: 232
- },
- jsPDFParams = options.jsPDF || {},
- title = options && options.title ? options.title : "";
-
- if (!jsPDFParams.orientation) {
- jsPDFParams.orientation = options.orientation || "landscape";
- }
-
- if (!jsPDFParams.unit) {
- jsPDFParams.unit = "pt";
- }
-
- //parse row list
- list.forEach(function (row) {
- var item = {};
-
- switch (row.type) {
- case "header":
- header.push(parseRow(row));
- break;
-
- case "group":
- body.push(parseRow(row, rowGroupStyles));
- break;
-
- case "calc":
- body.push(parseRow(row, rowCalcStyles));
- break;
-
- case "row":
- body.push(parseRow(row));
- break;
- }
- });
-
- function parseRow(row, styles) {
- var rowData = [];
-
- row.columns.forEach(function (col) {
- var cell;
-
- if (col) {
- switch (_typeof(col.value)) {
- case "object":
- col.value = JSON.stringify(col.value);
- break;
-
- case "undefined":
- case "null":
- col.value = "";
- break;
- }
-
- cell = {
- content: col.value,
- colSpan: col.width,
- rowSpan: col.height
- };
-
- if (styles) {
- cell.styles = styles;
- }
-
- rowData.push(cell);
- } else {
- rowData.push("");
- }
- });
-
- return rowData;
- }
-
- //configure PDF
- var doc = new jsPDF(jsPDFParams); //set document to landscape, better for most tables
-
- if (options && options.autoTable) {
- if (typeof options.autoTable === "function") {
- autoTableParams = options.autoTable(doc) || {};
- } else {
- autoTableParams = options.autoTable;
- }
- }
-
- if (title) {
- autoTableParams.addPageContent = function (data) {
- doc.text(title, 40, 30);
- };
- }
-
- autoTableParams.head = header;
- autoTableParams.body = body;
-
- doc.autoTable(autoTableParams);
-
- if (options && options.documentProcessing) {
- options.documentProcessing(doc);
- }
-
- setFileContents(doc.output("arraybuffer"), "application/pdf");
- },
-
- xlsx: function xlsx(list, options, setFileContents) {
- var self = this,
- sheetName = options.sheetName || "Sheet1",
- workbook = XLSX.utils.book_new(),
- output;
-
- workbook.SheetNames = [];
- workbook.Sheets = {};
-
- function generateSheet() {
- var rows = [],
- merges = [],
- worksheet = {},
- range = { s: { c: 0, r: 0 }, e: { c: list[0] ? list[0].columns.reduce(function (a, b) {
- return a + (b && b.width ? b.width : 1);
- }, 0) : 0, r: list.length } };
-
- //parse row list
- list.forEach(function (row, i) {
- var rowData = [];
-
- row.columns.forEach(function (col, j) {
-
- if (col) {
- rowData.push(!(col.value instanceof Date) && _typeof(col.value) === "object" ? JSON.stringify(col.value) : col.value);
-
- if (col.width > 1 || col.height > -1) {
- merges.push({ s: { r: i, c: j }, e: { r: i + col.height - 1, c: j + col.width - 1 } });
- }
- } else {
- rowData.push("");
- }
- });
-
- rows.push(rowData);
- });
-
- //convert rows to worksheet
- XLSX.utils.sheet_add_aoa(worksheet, rows);
-
- worksheet['!ref'] = XLSX.utils.encode_range(range);
-
- if (merges.length) {
- worksheet["!merges"] = merges;
- }
-
- return worksheet;
- }
-
- if (options.sheetOnly) {
- setFileContents(generateSheet());
- return;
- }
-
- if (options.sheets) {
- for (var sheet in options.sheets) {
-
- if (options.sheets[sheet] === true) {
- workbook.SheetNames.push(sheet);
- workbook.Sheets[sheet] = generateSheet();
- } else {
-
- workbook.SheetNames.push(sheet);
-
- this.modules.comms.send(options.sheets[sheet], "download", "intercept", {
- type: "xlsx",
- options: { sheetOnly: true },
- active: self.active,
- intercept: function intercept(data) {
- workbook.Sheets[sheet] = data;
- }
- });
- }
- }
- } else {
- workbook.SheetNames.push(sheetName);
- workbook.Sheets[sheetName] = generateSheet();
- }
-
- if (options.documentProcessing) {
- workbook = options.documentProcessing(workbook);
- }
-
- //convert workbook to binary array
- function s2ab(s) {
- var buf = new ArrayBuffer(s.length);
- var view = new Uint8Array(buf);
- for (var i = 0; i != s.length; ++i) {
- view[i] = s.charCodeAt(i) & 0xFF;
- }return buf;
- }
-
- output = XLSX.write(workbook, { bookType: 'xlsx', bookSST: true, type: 'binary' });
-
- setFileContents(s2ab(output), "application/octet-stream");
- },
-
- html: function html(list, options, setFileContents) {
- if (this.modExists("export", true)) {
- setFileContents(this.modules.export.genereateHTMLTable(list), "text/html");
- }
- }
-
- };
-
- Tabulator.prototype.registerModule("download", Download);
|