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

143 lines (110 loc) 4.29 kB
/* global Metro */ (function (Metro, $) { 'use strict'; var Utils = Metro.utils; 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 o; var body, head, data = ""; var i, j, row, cell; o = $.extend({}, this.options, options); 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; }, arrayToCsv: function(array, filename, options){ var o, data = "", i, row; o = $.extend({}, this.options, options); for (i = 0; i < array.length; i++) { row = array[i]; if (typeof row !== "object") { data += row + o.csvNewLine; } else { $.each(row, function(key, val){ data += (key ? o.csvDelimiter : '') + val.toString(); }); data += o.csvNewLine; } } if (Utils.isValue(filename)) { return this.createDownload(this.base64("\uFEFF" + data), 'application/csv', filename); } return data; } }; Metro.export = Export.init(); if (window.METRO_GLOBAL_COMMON === true) { window.Export = Metro.export; } }(Metro, m4q));