Skip to content

Commit b23959e

Browse files
committed
Added file name when downloads the file.
1 parent a891806 commit b23959e

File tree

1 file changed

+62
-18
lines changed

1 file changed

+62
-18
lines changed

tableExport.js

Lines changed: 62 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,25 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2121
THE SOFTWARE.*/
2222

2323
(function($){
24+
25+
//taken from http://stackoverflow.com/questions/283956/is-there-any-way-to-specify-a-suggested-filename-when-using-data-uri#15832569
26+
function downloadWithName(uri, name) {
27+
function eventFire(el, etype){
28+
if (el.fireEvent) {
29+
(el.fireEvent('on' + etype));
30+
} else {
31+
var evObj = document.createEvent('Events');
32+
evObj.initEvent(etype, true, false);
33+
el.dispatchEvent(evObj);
34+
}
35+
}
36+
37+
var link = document.createElement("a");
38+
link.download = name;
39+
link.href = uri;
40+
eventFire(link, "click");
41+
}
42+
2443
$.fn.extend({
2544
tableExport: function(options) {
2645
var defaults = {
@@ -37,7 +56,12 @@ THE SOFTWARE.*/
3756

3857
var options = $.extend(defaults, options);
3958
var el = this;
40-
59+
var available_types = ["csv", "txt", "sql", "json", "xml", "excel", "doc", "powerpoint", "png", "pdf"];
60+
61+
var mime_type = '';
62+
var base64data = '';
63+
var file_name = '';
64+
4165
if(defaults.type == 'csv' || defaults.type == 'txt'){
4266

4367
// Header
@@ -74,8 +98,10 @@ THE SOFTWARE.*/
7498
if(defaults.consoleLog == 'true'){
7599
console.log(tdData);
76100
}
77-
var base64data = "base64," + $.base64.encode(tdData);
78-
window.open('data:application/'+defaults.type+';filename=exportData;' + base64data);
101+
102+
base64data = "base64," + $.base64.encode(tdData);
103+
mime_type = "data:application/"+defaults.type;
104+
file_name = "exportData."+defaults.type;
79105
}else if(defaults.type == 'sql'){
80106

81107
// Header
@@ -117,11 +143,11 @@ THE SOFTWARE.*/
117143
if(defaults.consoleLog == 'true'){
118144
console.log(tdData);
119145
}
120-
121-
var base64data = "base64," + $.base64.encode(tdData);
122-
window.open('data:application/sql;filename=exportData;' + base64data);
123-
124-
146+
147+
base64data = "base64," + $.base64.encode(tdData);
148+
mime_type = "data:application/"+defaults.type;
149+
file_name = "exportData."+defaults.type;
150+
125151
}else if(defaults.type == 'json'){
126152

127153
var jsonHeaderArray = [];
@@ -167,8 +193,10 @@ THE SOFTWARE.*/
167193
if(defaults.consoleLog == 'true'){
168194
console.log(JSON.stringify(jsonExportArray));
169195
}
170-
var base64data = "base64," + $.base64.encode(JSON.stringify(jsonExportArray));
171-
window.open('data:application/json;filename=exportData;' + base64data);
196+
197+
base64data = "base64," + $.base64.encode(jsonExportArray);
198+
mime_type = "data:application/"+defaults.type;
199+
file_name = "exportData."+defaults.type;
172200
}else if(defaults.type == 'xml'){
173201

174202
var xml = '<?xml version="1.0" encoding="utf-8"?>';
@@ -207,9 +235,10 @@ THE SOFTWARE.*/
207235
if(defaults.consoleLog == 'true'){
208236
console.log(xml);
209237
}
210-
211-
var base64data = "base64," + $.base64.encode(xml);
212-
window.open('data:application/xml;filename=exportData;' + base64data);
238+
239+
base64data = "base64," + $.base64.encode(xml);
240+
mime_type = "data:application/"+defaults.type;
241+
file_name = "exportData."+defaults.type;
213242

214243
}else if(defaults.type == 'excel' || defaults.type == 'doc'|| defaults.type == 'powerpoint' ){
215244
//console.log($(this).html());
@@ -275,9 +304,21 @@ THE SOFTWARE.*/
275304
excelFile += "</body>";
276305
excelFile += "</html>";
277306

278-
var base64data = "base64," + $.base64.encode(excelFile);
279-
window.open('data:application/vnd.ms-'+defaults.type+';filename=exportData.doc;' + base64data);
280-
307+
base64data = "base64," + $.base64.encode(excelFile);
308+
mime_type = "data:application/vnd.ms-"+defaults.type;
309+
310+
switch(defaults.type) {
311+
case 'excel':
312+
file_name = "exportData.xls";
313+
break;
314+
case 'doc':
315+
file_name = "exportData.doc";
316+
break;
317+
case 'powerpoint':
318+
file_name = "exportData.ppt";
319+
break;
320+
}
321+
281322
}else if(defaults.type == 'png'){
282323
html2canvas($(el), {
283324
onrendered: function(canvas) {
@@ -334,8 +375,11 @@ THE SOFTWARE.*/
334375
doc.output('datauri');
335376

336377
}
337-
338-
378+
379+
if (available_types.indexOf(defaults.type) != -1){
380+
downloadWithName( mime_type + ';' + base64data, file_name); //didnt work when I tested in ff25
381+
}
382+
339383
function parseString(data){
340384

341385
if(defaults.htmlContent == 'true'){

0 commit comments

Comments
 (0)