Skip to content

Commit c3b7ad4

Browse files
Merge pull request #403 from contactashish13/issue-402
Download Excel data issue
2 parents c84a607 + f126bf0 commit c3b7ad4

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

classes/Visualizer/Module.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -293,6 +293,7 @@ private function _getExcel( $rows, $filename ) {
293293
return array(
294294
'csv' => 'data:application/vnd.ms-excel;base64,' . base64_encode( $xlsData ),
295295
'name' => $filename,
296+
'raw' => base64_encode( $xlsData ),
296297
);
297298
}
298299

js/render-facade.js

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616
var chart = $(this).attr( 'data-visualizer-chart-id' );
1717
var container = $(this).attr( 'data-visualizer-container-id' );
1818
var lock = $('.visualizer-front.visualizer-front-' + chart);
19+
var mime = $(this).attr( 'data-visualizer-mime' );
20+
console.log(mime);
1921
lock.lock();
2022
e.preventDefault();
2123
$.ajax({
@@ -24,25 +26,34 @@
2426
if (data && data.data) {
2527
switch(type){
2628
case 'csv':
27-
var a = document.createElement("a");
28-
document.body.appendChild(a);
29-
a.style = "display: none";
30-
var blob = new Blob([data.data.csv], {type: $(this).attr( 'data-visualizer-mime' ) }),
31-
url = window.URL.createObjectURL(blob);
32-
a.href = url;
33-
a.download = data.data.name;
34-
a.click();
35-
setTimeout(function () {
36-
window.URL.revokeObjectURL(url);
37-
}, 100);
29+
var blob = new Blob([data.data.csv], {type: mime });
30+
if(window.navigator.msSaveOrOpenBlob){
31+
window.navigator.msSaveOrOpenBlob(blob, data.data.name);
32+
} else {
33+
var url = window.URL.createObjectURL(blob);
34+
var $a = $("<a>");
35+
$a.attr("href", url);
36+
$("body").append($a);
37+
$a.attr("download", data.data.name);
38+
$a[0].click();
39+
setTimeout(function () {
40+
window.URL.revokeObjectURL(url);
41+
$a.remove();
42+
}, 100);
43+
}
3844
break;
3945
case 'xls':
40-
var $a = $("<a>");
41-
$a.attr("href",data.data.csv);
42-
$("body").append($a);
43-
$a.attr("download",data.data.name);
44-
$a[0].click();
45-
$a.remove();
46+
if(window.navigator.msSaveOrOpenBlob){
47+
blob = new Blob([s2ab(atob(data.data.raw))], {type: '' });
48+
window.navigator.msSaveOrOpenBlob(blob, data.data.name);
49+
} else {
50+
var $a = $("<a>"); // jshint ignore:line
51+
$a.attr("href", data.data.csv);
52+
$("body").append($a);
53+
$a.attr("download", data.data.name);
54+
$a[0].click();
55+
$a.remove();
56+
}
4657
break;
4758
case 'print':
4859
$('body').trigger('visualizer:action:specificchart', {action: 'print', id: container, data: data.data.csv});
@@ -60,6 +71,15 @@
6071
});
6172
}
6273

74+
function s2ab(s) {
75+
var buf = new ArrayBuffer(s.length);
76+
var view = new Uint8Array(buf);
77+
for (var i=0; i !== s.length; ++i) {
78+
view[i] = s.charCodeAt(i) & 0xFF;
79+
}
80+
return buf;
81+
}
82+
6383
$(document).ready(function(){
6484
$('body').trigger('visualizer:render:chart:start', visualizer);
6585
initActionsButtons(visualizer);

0 commit comments

Comments
 (0)