53 lines
1.7 KiB
JavaScript
53 lines
1.7 KiB
JavaScript
function formatCSV(data) {
|
||
return data.reduce(
|
||
(csv, lineCells) => {
|
||
let line = lineCells.reduce(
|
||
(lineText, cell, idx) => {
|
||
cell = '"' + cell.trim().replace(/"/g, '""') + '"';
|
||
return lineText + cell + (idx == lineCells.length - 1 ? "" : ",")
|
||
}, "");
|
||
return csv + line + "\n";
|
||
},
|
||
""
|
||
);
|
||
}
|
||
|
||
function saveFile(data, mimeType, fileName) {
|
||
fileName = fileName || document.title || "result";
|
||
var blob;
|
||
if (typeof window.Blob == "function") {
|
||
blob = new Blob([data], {
|
||
type: mimeType
|
||
})
|
||
} else {
|
||
var BlobBuiler = window.BlobBuilder || window.MozBlobBuilder || window.WebKitBlobBuilder || window.MSBlobBuilder;
|
||
var builer = new BlobBuiler();
|
||
builer.append(data);
|
||
blob = builer.getBlob(mimeType)
|
||
}
|
||
var URL = window.URL || window.webkitURL;
|
||
var url = URL.createObjectURL(blob);
|
||
var link = document.createElement("a");
|
||
if ('download' in link) {
|
||
link.style.visibility = "hidden";
|
||
link.href = url;
|
||
link.download = fileName;
|
||
document.body.appendChild(link);
|
||
var j = document.createEvent("MouseEvents");
|
||
j.initEvent("click", true, true);
|
||
link.dispatchEvent(j);
|
||
document.body.removeChild(link)
|
||
} else if (navigator.msSaveBlob) {
|
||
navigator.msSaveBlob(blob, fileName)
|
||
} else {
|
||
location.href = url
|
||
}
|
||
}
|
||
|
||
function saveFileAsk(data) {
|
||
let csv = formatCSV(data.slice(1, 50)).trim() || "- Empty -";
|
||
if (confirm(`Click confirm to download if the sample data looks good (${data.length-1} items):\n\n${csv}`)) {
|
||
csv = formatCSV(data);
|
||
saveFile(csv, "text/csv");
|
||
}
|
||
} |