@@ -21,6 +21,25 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
2121THE 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