UNPKG

metro4

Version:

The front-end framework for Build responsive, mobile-first projects on the web with the first front-end component library in Metro Style

112 lines (85 loc) 3.04 kB
var Export = { init: function(){ return this; }, options: { csvDelimiter: "\t", csvNewLine: "\r\n", includeHeader: true }, setup: function(options){ this.options = $.extend({}, this.options, options); return this; }, base64: function(data){ return window.btoa(unescape(encodeURIComponent(data))); }, b64toBlob: function (b64Data, contentType, sliceSize) { contentType = contentType || ''; sliceSize = sliceSize || 512; var byteCharacters = window.atob(b64Data); var byteArrays = []; var offset; for (offset = 0; offset < byteCharacters.length; offset += sliceSize) { var slice = byteCharacters.slice(offset, offset + sliceSize); var byteNumbers = new Array(slice.length); var i; for (i = 0; i < slice.length; i = i + 1) { byteNumbers[i] = slice.charCodeAt(i); } var byteArray = new window.Uint8Array(byteNumbers); byteArrays.push(byteArray); } return new Blob(byteArrays, { type: contentType }); }, tableToCSV: function(table, filename, options){ var that = this, o = this.options; var body, head, data = ""; var i, j, row, cell; o = $.extend({}, o, options); if (Utils.isJQueryObject(table)) { table = table[0]; } if (Utils.bool(o.includeHeader)) { head = table.querySelectorAll("thead")[0]; for(i = 0; i < head.rows.length; i++) { row = head.rows[i]; for(j = 0; j < row.cells.length; j++){ cell = row.cells[j]; data += (j ? o.csvDelimiter : '') + cell.textContent.trim(); } data += o.csvNewLine; } } body = table.querySelectorAll("tbody")[0]; for(i = 0; i < body.rows.length; i++) { row = body.rows[i]; for(j = 0; j < row.cells.length; j++){ cell = row.cells[j]; data += (j ? o.csvDelimiter : '') + cell.textContent.trim(); } data += o.csvNewLine; } if (Utils.isValue(filename)) { return this.createDownload(this.base64("\uFEFF" + data), 'application/csv', filename); } return data; }, createDownload: function (data, contentType, filename) { var blob, anchor, url; anchor = document.createElement('a'); anchor.style.display = "none"; document.body.appendChild(anchor); blob = this.b64toBlob(data, contentType); url = window.URL.createObjectURL(blob); anchor.href = url; anchor.download = filename || Utils.elementId("download"); anchor.click(); window.URL.revokeObjectURL(url); document.body.removeChild(anchor); return true; } }; Metro['export'] = Export.init();