sintonia/legacy/public/js/libs/CSVexport.js

107 lines
3.2 KiB
JavaScript

/**
@namespace Converts JSON to CSV.
Compress with: http://jscompress.com/
*/
(function (window) {
"use strict";
/**
Default constructor
*/
var _CSV = function (JSONData) {
if (typeof JSONData === 'undefined')
return;
var csvData = typeof JSONData != 'object' ? JSON.parse(settings.JSONData) : JSONData,
csvHeaders,
csvEncoding = 'data:text/csv;charset=utf-8,',
csvOutput = "",
csvRows = [],
BREAK = '\r\n',
DELIMITER = ',',
FILENAME = "export.csv";
// Get and Write the headers
csvHeaders = Object.keys(csvData[0]);
csvOutput += csvHeaders.join(',') + BREAK;
for (var i = 0; i < csvData.length; i++) {
var rowElements = [];
for(var k = 0; k < csvHeaders.length; k++) {
rowElements.push(csvData[i][csvHeaders[k]]);
} // Write the row array based on the headers
csvRows.push(rowElements.join(DELIMITER));
}
csvOutput += csvRows.join(BREAK);
// Initiate Download
var a = document.createElement("a");
if (navigator.msSaveBlob) { // IE10
navigator.msSaveBlob(new Blob([csvOutput], { type: "text/csv" }), FILENAME);
} else if ('download' in a) { //html5 A[download]
a.href = csvEncoding + encodeURIComponent(csvOutput);
a.download = FILENAME;
document.body.appendChild(a);
setTimeout(function() {
a.click();
document.body.removeChild(a);
}, 66);
} else if (document.execCommand) { // Other version of IE
var oWin = window.open("about:blank", "_blank");
oWin.document.write(csvOutput);
oWin.document.close();
oWin.document.execCommand('SaveAs', true, FILENAME);
oWin.close();
} else {
alert("Support for your specific browser hasn't been created yet, please check back later.");
}
};
window.CSVExport = _CSV;
})(window);
// From https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys
if (!Object.keys) {
Object.keys = (function() {
'use strict';
var hasOwnProperty = Object.prototype.hasOwnProperty,
hasDontEnumBug = !({ toString: null }).propertyIsEnumerable('toString'),
dontEnums = [
'toString',
'toLocaleString',
'valueOf',
'hasOwnProperty',
'isPrototypeOf',
'propertyIsEnumerable',
'constructor'
],
dontEnumsLength = dontEnums.length;
return function(obj) {
if (typeof obj !== 'object' && (typeof obj !== 'function' || obj === null)) {
throw new TypeError('Object.keys called on non-object');
}
var result = [], prop, i;
for (prop in obj) {
if (hasOwnProperty.call(obj, prop)) {
result.push(prop);
}
}
if (hasDontEnumBug) {
for (i = 0; i < dontEnumsLength; i++) {
if (hasOwnProperty.call(obj, dontEnums[i])) {
result.push(dontEnums[i]);
}
}
}
return result;
};
}());
}