Skip to content

Commit e8eafe6

Browse files
committed
Fix export module.
1 parent 5c4682b commit e8eafe6

4 files changed

+243
-188
lines changed

excellentexport.js

+159-158
Original file line numberDiff line numberDiff line change
@@ -1,158 +1,159 @@
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);

excellentexport.min.js

+2-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)