|
1 |
| -/** |
2 |
| - * ExcellentExport 2.0.2 |
3 |
| - * A client side Javascript export to Excel. |
4 |
| - * |
5 |
| - * @author: Jordi Burgos (jordiburgos@gmail.com) |
6 |
| - * @url: https://github.com/jmaister/excellentexport |
7 |
| - * |
8 |
| - */ |
9 |
| -/*jslint browser: true, bitwise: true, vars: true, white: true */ |
10 |
| -/*global define, exports, module */ |
11 |
| - |
12 |
| -(function (global) { |
13 |
| - 'use strict'; |
14 |
| - |
15 |
| -var ExcellentExport = (function() { |
16 |
| - |
17 |
| - function b64toBlob(b64Data, contentType, sliceSize) { |
18 |
| - // function taken from http://stackoverflow.com/a/16245768/2591950 |
19 |
| - // author Jeremy Banks http://stackoverflow.com/users/1114/jeremy-banks |
20 |
| - contentType = contentType || ''; |
21 |
| - sliceSize = sliceSize || 512; |
22 |
| - |
23 |
| - var byteCharacters = window.atob(b64Data); |
24 |
| - var byteArrays = []; |
25 |
| - |
26 |
| - var offset; |
27 |
| - for (offset = 0; offset < byteCharacters.length; offset += sliceSize) { |
28 |
| - var slice = byteCharacters.slice(offset, offset + sliceSize); |
29 |
| - |
30 |
| - var byteNumbers = new Array(slice.length); |
31 |
| - var i; |
32 |
| - for (i = 0; i < slice.length; i = i + 1) { |
33 |
| - byteNumbers[i] = slice.charCodeAt(i); |
34 |
| - } |
35 |
| - |
36 |
| - var byteArray = new window.Uint8Array(byteNumbers); |
37 |
| - |
38 |
| - byteArrays.push(byteArray); |
39 |
| - } |
40 |
| - |
41 |
| - var blob = new window.Blob(byteArrays, { |
42 |
| - type: contentType |
43 |
| - }); |
44 |
| - return blob; |
45 |
| - } |
46 |
| - |
47 |
| - var version = "2.0.2"; |
48 |
| - var uri = {excel: 'data:application/vnd.ms-excel;base64,', csv: 'data:application/csv;base64,'}; |
49 |
| - var template = {excel: '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 11"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'}; |
50 |
| - var csvDelimiter = ","; |
51 |
| - var csvNewLine = "\r\n"; |
52 |
| - var base64 = function(s) { |
53 |
| - return window.btoa(window.unescape(encodeURIComponent(s))); |
54 |
| - }; |
55 |
| - var format = function(s, c) { |
56 |
| - return s.replace(new RegExp("{(\\w+)}", "g"), function(m, p) { |
57 |
| - return c[p]; |
58 |
| - }); |
59 |
| - }; |
60 |
| - |
61 |
| - var get = function(element) { |
62 |
| - if (!element.nodeType) { |
63 |
| - return document.getElementById(element); |
64 |
| - } |
65 |
| - return element; |
66 |
| - }; |
67 |
| - |
68 |
| - var fixCSVField = function(value) { |
69 |
| - var fixedValue = value; |
70 |
| - var addQuotes = (value.indexOf(csvDelimiter) !== -1) || (value.indexOf('\r') !== -1) || (value.indexOf('\n') !== -1); |
71 |
| - var replaceDoubleQuotes = (value.indexOf('"') !== -1); |
72 |
| - |
73 |
| - if (replaceDoubleQuotes) { |
74 |
| - fixedValue = fixedValue.replace(/"/g, '""'); |
75 |
| - } |
76 |
| - if (addQuotes || replaceDoubleQuotes) { |
77 |
| - fixedValue = '"' + fixedValue + '"'; |
78 |
| - } |
79 |
| - |
80 |
| - return fixedValue; |
81 |
| - }; |
82 |
| - |
83 |
| - var tableToCSV = function(table) { |
84 |
| - var data = ""; |
85 |
| - var i, j, row, col; |
86 |
| - for (i = 0; i < table.rows.length; i=i+1) { |
87 |
| - row = table.rows[i]; |
88 |
| - for (j = 0; j < row.cells.length; j=j+1) { |
89 |
| - col = row.cells[j]; |
90 |
| - data = data + (j ? csvDelimiter : '') + fixCSVField(col.textContent.trim()); |
91 |
| - } |
92 |
| - data = data + csvNewLine; |
93 |
| - } |
94 |
| - return data; |
95 |
| - }; |
96 |
| - |
97 |
| - function createDownloadLink(anchor, base64data, exporttype, filename) { |
98 |
| - var blob; |
99 |
| - if (window.navigator.msSaveBlob) { |
100 |
| - blob = b64toBlob(base64data, exporttype); |
101 |
| - window.navigator.msSaveBlob(blob, filename); |
102 |
| - return false; |
103 |
| - } else if(window.URL.createObjectURL) { |
104 |
| - blob = b64toBlob(base64data, exporttype); |
105 |
| - var blobUrl = window.URL.createObjectURL(blob); |
106 |
| - anchor.href = blobUrl; |
107 |
| - } else { |
108 |
| - var hrefvalue = "data:" + exporttype + ";base64," + base64data; |
109 |
| - anchor.download = filename; |
110 |
| - anchor.href = hrefvalue; |
111 |
| - } |
112 |
| - |
113 |
| - // Return true to allow the link to work |
114 |
| - return true; |
115 |
| - } |
116 |
| - |
117 |
| - var ee = { |
118 |
| - /** @export */ |
119 |
| - excel: function(anchor, table, name) { |
120 |
| - table = get(table); |
121 |
| - var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}; |
122 |
| - var b64 = base64(format(template.excel, ctx)); |
123 |
| - return createDownloadLink(anchor, b64, 'application/vnd.ms-excel','export.xls'); |
124 |
| - }, |
125 |
| - /** @export */ |
126 |
| - csv: function(anchor, table, delimiter, newLine) { |
127 |
| - if (delimiter !== undefined && delimiter) { |
128 |
| - csvDelimiter = delimiter; |
129 |
| - } |
130 |
| - if (newLine !== undefined && newLine) { |
131 |
| - csvNewLine = newLine; |
132 |
| - } |
133 |
| - |
134 |
| - table = get(table); |
135 |
| - var csvData = "\uFEFF" + tableToCSV(table); |
136 |
| - var b64 = base64(csvData); |
137 |
| - return createDownloadLink(anchor,b64,'application/csv','export.csv'); |
138 |
| - } |
139 |
| - }; |
140 |
| - |
141 |
| - return ee; |
142 |
| -}()); |
143 |
| - |
144 |
| - // AMD support |
145 |
| - if (typeof define === 'function' && define.amd) { |
146 |
| - define(function () { return ExcellentExport; }); |
147 |
| - // CommonJS and Node.js module support. |
148 |
| - } else if (typeof exports !== 'undefined') { |
149 |
| - // Support Node.js specific `module.exports` (which can be a function) |
150 |
| - if (typeof module !== 'undefined' && module.exports) { |
151 |
| - exports = module.exports = ExcellentExport; |
152 |
| - } |
153 |
| - // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function) |
154 |
| - exports.ExcellentExport = ExcellentExport; |
155 |
| - } else { |
156 |
| - global.ExcellentExport = ExcellentExport; |
157 |
| - } |
158 |
| -})(this); |
| 1 | +/** |
| 2 | + * ExcellentExport 2.0.3 |
| 3 | + * A client side Javascript export to Excel. |
| 4 | + * |
| 5 | + * @author: Jordi Burgos (jordiburgos@gmail.com) |
| 6 | + * @url: https://github.com/jmaister/excellentexport |
| 7 | + * |
| 8 | + */ |
| 9 | +/*jslint browser: true, bitwise: true, vars: true, white: true */ |
| 10 | +/*global define, exports, module */ |
| 11 | + |
| 12 | +(function (global) { |
| 13 | + 'use strict'; |
| 14 | + |
| 15 | +var ExcellentExport = (function() { |
| 16 | + |
| 17 | + function b64toBlob(b64Data, contentType, sliceSize) { |
| 18 | + // function taken from http://stackoverflow.com/a/16245768/2591950 |
| 19 | + // author Jeremy Banks http://stackoverflow.com/users/1114/jeremy-banks |
| 20 | + contentType = contentType || ''; |
| 21 | + sliceSize = sliceSize || 512; |
| 22 | + |
| 23 | + var byteCharacters = window.atob(b64Data); |
| 24 | + var byteArrays = []; |
| 25 | + |
| 26 | + var offset; |
| 27 | + for (offset = 0; offset < byteCharacters.length; offset += sliceSize) { |
| 28 | + var slice = byteCharacters.slice(offset, offset + sliceSize); |
| 29 | + |
| 30 | + var byteNumbers = new Array(slice.length); |
| 31 | + var i; |
| 32 | + for (i = 0; i < slice.length; i = i + 1) { |
| 33 | + byteNumbers[i] = slice.charCodeAt(i); |
| 34 | + } |
| 35 | + |
| 36 | + var byteArray = new window.Uint8Array(byteNumbers); |
| 37 | + |
| 38 | + byteArrays.push(byteArray); |
| 39 | + } |
| 40 | + |
| 41 | + var blob = new window.Blob(byteArrays, { |
| 42 | + type: contentType |
| 43 | + }); |
| 44 | + return blob; |
| 45 | + } |
| 46 | + |
| 47 | + var version = "2.0.3"; |
| 48 | + var uri = {excel: 'data:application/vnd.ms-excel;base64,', csv: 'data:application/csv;base64,'}; |
| 49 | + var template = {excel: '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><meta name=ProgId content=Excel.Sheet> <meta name=Generator content="Microsoft Excel 11"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table>{table}</table></body></html>'}; |
| 50 | + var csvDelimiter = ","; |
| 51 | + var csvNewLine = "\r\n"; |
| 52 | + var base64 = function(s) { |
| 53 | + return window.btoa(window.unescape(encodeURIComponent(s))); |
| 54 | + }; |
| 55 | + var format = function(s, c) { |
| 56 | + return s.replace(new RegExp("{(\\w+)}", "g"), function(m, p) { |
| 57 | + return c[p]; |
| 58 | + }); |
| 59 | + }; |
| 60 | + |
| 61 | + var get = function(element) { |
| 62 | + if (!element.nodeType) { |
| 63 | + return document.getElementById(element); |
| 64 | + } |
| 65 | + return element; |
| 66 | + }; |
| 67 | + |
| 68 | + var fixCSVField = function(value) { |
| 69 | + var fixedValue = value; |
| 70 | + var addQuotes = (value.indexOf(csvDelimiter) !== -1) || (value.indexOf('\r') !== -1) || (value.indexOf('\n') !== -1); |
| 71 | + var replaceDoubleQuotes = (value.indexOf('"') !== -1); |
| 72 | + |
| 73 | + if (replaceDoubleQuotes) { |
| 74 | + fixedValue = fixedValue.replace(/"/g, '""'); |
| 75 | + } |
| 76 | + if (addQuotes || replaceDoubleQuotes) { |
| 77 | + fixedValue = '"' + fixedValue + '"'; |
| 78 | + } |
| 79 | + |
| 80 | + return fixedValue; |
| 81 | + }; |
| 82 | + |
| 83 | + var tableToCSV = function(table) { |
| 84 | + var data = ""; |
| 85 | + var i, j, row, col; |
| 86 | + for (i = 0; i < table.rows.length; i=i+1) { |
| 87 | + row = table.rows[i]; |
| 88 | + for (j = 0; j < row.cells.length; j=j+1) { |
| 89 | + col = row.cells[j]; |
| 90 | + data = data + (j ? csvDelimiter : '') + fixCSVField(col.textContent.trim()); |
| 91 | + } |
| 92 | + data = data + csvNewLine; |
| 93 | + } |
| 94 | + return data; |
| 95 | + }; |
| 96 | + |
| 97 | + function createDownloadLink(anchor, base64data, exporttype, filename) { |
| 98 | + var blob; |
| 99 | + if (window.navigator.msSaveBlob) { |
| 100 | + blob = b64toBlob(base64data, exporttype); |
| 101 | + window.navigator.msSaveBlob(blob, filename); |
| 102 | + return false; |
| 103 | + } else if(window.URL.createObjectURL) { |
| 104 | + blob = b64toBlob(base64data, exporttype); |
| 105 | + var blobUrl = window.URL.createObjectURL(blob); |
| 106 | + anchor.href = blobUrl; |
| 107 | + } else { |
| 108 | + var hrefvalue = "data:" + exporttype + ";base64," + base64data; |
| 109 | + anchor.download = filename; |
| 110 | + anchor.href = hrefvalue; |
| 111 | + } |
| 112 | + |
| 113 | + // Return true to allow the link to work |
| 114 | + return true; |
| 115 | + } |
| 116 | + |
| 117 | + var ee = { |
| 118 | + version: function() { |
| 119 | + return version; |
| 120 | + }, |
| 121 | + excel: function(anchor, table, name) { |
| 122 | + table = get(table); |
| 123 | + var ctx = {worksheet: name || 'Worksheet', table: table.innerHTML}; |
| 124 | + var b64 = base64(format(template.excel, ctx)); |
| 125 | + return createDownloadLink(anchor, b64, 'application/vnd.ms-excel','export.xls'); |
| 126 | + }, |
| 127 | + csv: function(anchor, table, delimiter, newLine) { |
| 128 | + if (delimiter !== undefined && delimiter) { |
| 129 | + csvDelimiter = delimiter; |
| 130 | + } |
| 131 | + if (newLine !== undefined && newLine) { |
| 132 | + csvNewLine = newLine; |
| 133 | + } |
| 134 | + |
| 135 | + table = get(table); |
| 136 | + var csvData = "\uFEFF" + tableToCSV(table); |
| 137 | + var b64 = base64(csvData); |
| 138 | + return createDownloadLink(anchor,b64,'application/csv','export.csv'); |
| 139 | + } |
| 140 | + }; |
| 141 | + |
| 142 | + return ee; |
| 143 | +}()); |
| 144 | + |
| 145 | + // AMD support |
| 146 | + if (typeof define === 'function' && define.amd) { |
| 147 | + define(function () { return ExcellentExport; }); |
| 148 | + // CommonJS and Node.js module support. |
| 149 | + } else if (typeof exports !== 'undefined') { |
| 150 | + // Support Node.js specific `module.exports` (which can be a function) |
| 151 | + if (typeof module !== 'undefined' && module.exports) { |
| 152 | + exports = module.exports = ExcellentExport; |
| 153 | + } |
| 154 | + // But always support CommonJS module 1.1.1 spec (`exports` cannot be a function) |
| 155 | + exports.ExcellentExport = ExcellentExport; |
| 156 | + } else { |
| 157 | + global.ExcellentExport = ExcellentExport; |
| 158 | + } |
| 159 | +})(this); |
0 commit comments