mirror of
https://github.com/snipe/snipe-it.git
synced 2024-11-16 10:34:08 -08:00
360 lines
11 KiB
JavaScript
360 lines
11 KiB
JavaScript
|
/*The MIT License (MIT)
|
||
|
|
||
|
Copyright (c) 2014 https://github.com/kayalshri/
|
||
|
|
||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||
|
of this software and associated documentation files (the "Software"), to deal
|
||
|
in the Software without restriction, including without limitation the rights
|
||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||
|
copies of the Software, and to permit persons to whom the Software is
|
||
|
furnished to do so, subject to the following conditions:
|
||
|
|
||
|
The above copyright notice and this permission notice shall be included in
|
||
|
all copies or substantial portions of the Software.
|
||
|
|
||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||
|
THE SOFTWARE.*/
|
||
|
|
||
|
(function($){
|
||
|
$.fn.extend({
|
||
|
tableExport: function(options) {
|
||
|
var defaults = {
|
||
|
separator: ',',
|
||
|
ignoreColumn: [],
|
||
|
tableName:'yourTableName',
|
||
|
type:'csv',
|
||
|
pdfFontSize:14,
|
||
|
pdfLeftMargin:20,
|
||
|
escape:'true',
|
||
|
htmlContent:'false',
|
||
|
consoleLog:'false'
|
||
|
};
|
||
|
|
||
|
var options = $.extend(defaults, options);
|
||
|
var el = this;
|
||
|
|
||
|
if(defaults.type == 'csv' || defaults.type == 'txt'){
|
||
|
|
||
|
// Header
|
||
|
var tdData ="";
|
||
|
$(el).find('thead').find('tr').each(function() {
|
||
|
tdData += "\n";
|
||
|
$(this).filter(':visible').find('th').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
tdData += '"' + parseString($(this)) + '"' + defaults.separator;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
});
|
||
|
tdData = $.trim(tdData);
|
||
|
tdData = $.trim(tdData).substring(0, tdData.length -1);
|
||
|
});
|
||
|
|
||
|
// Row vs Column
|
||
|
$(el).find('tbody').find('tr').each(function() {
|
||
|
tdData += "\n";
|
||
|
$(this).filter(':visible').find('td').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
tdData += '"'+ parseString($(this)) + '"'+ defaults.separator;
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
//tdData = $.trim(tdData);
|
||
|
tdData = $.trim(tdData).substring(0, tdData.length -1);
|
||
|
});
|
||
|
|
||
|
//output
|
||
|
if(defaults.consoleLog == 'true'){
|
||
|
console.log(tdData);
|
||
|
}
|
||
|
var base64data = "base64," + $.base64.encode(tdData);
|
||
|
window.open('data:application/'+defaults.type+';filename=exportData;' + base64data);
|
||
|
}else if(defaults.type == 'sql'){
|
||
|
|
||
|
// Header
|
||
|
var tdData ="INSERT INTO `"+defaults.tableName+"` (";
|
||
|
$(el).find('thead').find('tr').each(function() {
|
||
|
|
||
|
$(this).filter(':visible').find('th').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
tdData += '`' + parseString($(this)) + '`,' ;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
});
|
||
|
tdData = $.trim(tdData);
|
||
|
tdData = $.trim(tdData).substring(0, tdData.length -1);
|
||
|
});
|
||
|
tdData += ") VALUES ";
|
||
|
// Row vs Column
|
||
|
$(el).find('tbody').find('tr').each(function() {
|
||
|
tdData += "(";
|
||
|
$(this).filter(':visible').find('td').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
tdData += '"'+ parseString($(this)) + '",';
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
|
||
|
tdData = $.trim(tdData).substring(0, tdData.length -1);
|
||
|
tdData += "),";
|
||
|
});
|
||
|
tdData = $.trim(tdData).substring(0, tdData.length -1);
|
||
|
tdData += ";";
|
||
|
|
||
|
//output
|
||
|
//console.log(tdData);
|
||
|
|
||
|
if(defaults.consoleLog == 'true'){
|
||
|
console.log(tdData);
|
||
|
}
|
||
|
|
||
|
var base64data = "base64," + $.base64.encode(tdData);
|
||
|
window.open('data:application/sql;filename=exportData;' + base64data);
|
||
|
|
||
|
|
||
|
}else if(defaults.type == 'json'){
|
||
|
|
||
|
var jsonHeaderArray = [];
|
||
|
$(el).find('thead').find('tr').each(function() {
|
||
|
var tdData ="";
|
||
|
var jsonArrayTd = [];
|
||
|
|
||
|
$(this).filter(':visible').find('th').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
jsonArrayTd.push(parseString($(this)));
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
jsonHeaderArray.push(jsonArrayTd);
|
||
|
|
||
|
});
|
||
|
|
||
|
var jsonArray = [];
|
||
|
$(el).find('tbody').find('tr').each(function() {
|
||
|
var tdData ="";
|
||
|
var jsonArrayTd = [];
|
||
|
|
||
|
$(this).filter(':visible').find('td').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
jsonArrayTd.push(parseString($(this)));
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
jsonArray.push(jsonArrayTd);
|
||
|
|
||
|
});
|
||
|
|
||
|
var jsonExportArray =[];
|
||
|
jsonExportArray.push({header:jsonHeaderArray,data:jsonArray});
|
||
|
|
||
|
//Return as JSON
|
||
|
//console.log(JSON.stringify(jsonExportArray));
|
||
|
|
||
|
//Return as Array
|
||
|
//console.log(jsonExportArray);
|
||
|
if(defaults.consoleLog == 'true'){
|
||
|
console.log(JSON.stringify(jsonExportArray));
|
||
|
}
|
||
|
var base64data = "base64," + $.base64.encode(JSON.stringify(jsonExportArray));
|
||
|
window.open('data:application/json;filename=exportData;' + base64data);
|
||
|
}else if(defaults.type == 'xml'){
|
||
|
|
||
|
var xml = '<?xml version="1.0" encoding="utf-8"?>';
|
||
|
xml += '<tabledata><fields>';
|
||
|
|
||
|
// Header
|
||
|
$(el).find('thead').find('tr').each(function() {
|
||
|
$(this).filter(':visible').find('th').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
xml += "<field>" + parseString($(this)) + "</field>";
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
xml += '</fields><data>';
|
||
|
|
||
|
// Row Vs Column
|
||
|
var rowCount=1;
|
||
|
$(el).find('tbody').find('tr').each(function() {
|
||
|
xml += '<row id="'+rowCount+'">';
|
||
|
var colCount=0;
|
||
|
$(this).filter(':visible').find('td').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
xml += "<column-"+colCount+">"+parseString($(this))+"</column-"+colCount+">";
|
||
|
}
|
||
|
}
|
||
|
colCount++;
|
||
|
});
|
||
|
rowCount++;
|
||
|
xml += '</row>';
|
||
|
});
|
||
|
xml += '</data></tabledata>'
|
||
|
|
||
|
if(defaults.consoleLog == 'true'){
|
||
|
console.log(xml);
|
||
|
}
|
||
|
|
||
|
var base64data = "base64," + $.base64.encode(xml);
|
||
|
window.open('data:application/xml;filename=exportData;' + base64data);
|
||
|
|
||
|
}else if(defaults.type == 'excel' || defaults.type == 'doc'|| defaults.type == 'powerpoint' ){
|
||
|
//console.log($(this).html());
|
||
|
var excel="<table>";
|
||
|
// Header
|
||
|
$(el).find('thead').find('tr').each(function() {
|
||
|
excel += "<tr>";
|
||
|
$(this).filter(':visible').find('th').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
excel += "<td>" + parseString($(this))+ "</td>";
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
excel += '</tr>';
|
||
|
|
||
|
});
|
||
|
|
||
|
|
||
|
// Row Vs Column
|
||
|
var rowCount=1;
|
||
|
$(el).find('tbody').find('tr').each(function() {
|
||
|
excel += "<tr>";
|
||
|
var colCount=0;
|
||
|
$(this).filter(':visible').find('td').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
excel += "<td>"+parseString($(this))+"</td>";
|
||
|
}
|
||
|
}
|
||
|
colCount++;
|
||
|
});
|
||
|
rowCount++;
|
||
|
excel += '</tr>';
|
||
|
});
|
||
|
excel += '</table>'
|
||
|
|
||
|
if(defaults.consoleLog == 'true'){
|
||
|
console.log(excel);
|
||
|
}
|
||
|
|
||
|
var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:"+defaults.type+"' xmlns='http://www.w3.org/TR/REC-html40'>";
|
||
|
excelFile += "<head>";
|
||
|
excelFile += "<!--[if gte mso 9]>";
|
||
|
excelFile += "<xml>";
|
||
|
excelFile += "<x:ExcelWorkbook>";
|
||
|
excelFile += "<x:ExcelWorksheets>";
|
||
|
excelFile += "<x:ExcelWorksheet>";
|
||
|
excelFile += "<x:Name>";
|
||
|
excelFile += "{worksheet}";
|
||
|
excelFile += "</x:Name>";
|
||
|
excelFile += "<x:WorksheetOptions>";
|
||
|
excelFile += "<x:DisplayGridlines/>";
|
||
|
excelFile += "</x:WorksheetOptions>";
|
||
|
excelFile += "</x:ExcelWorksheet>";
|
||
|
excelFile += "</x:ExcelWorksheets>";
|
||
|
excelFile += "</x:ExcelWorkbook>";
|
||
|
excelFile += "</xml>";
|
||
|
excelFile += "<![endif]-->";
|
||
|
excelFile += "</head>";
|
||
|
excelFile += "<body>";
|
||
|
excelFile += excel;
|
||
|
excelFile += "</body>";
|
||
|
excelFile += "</html>";
|
||
|
|
||
|
var base64data = "base64," + $.base64.encode(excelFile);
|
||
|
window.open('data:application/vnd.ms-'+defaults.type+';filename=exportData.doc;' + base64data);
|
||
|
|
||
|
}else if(defaults.type == 'png'){
|
||
|
html2canvas($(el), {
|
||
|
onrendered: function(canvas) {
|
||
|
var img = canvas.toDataURL("image/png");
|
||
|
window.open(img);
|
||
|
|
||
|
|
||
|
}
|
||
|
});
|
||
|
}else if(defaults.type == 'pdf'){
|
||
|
|
||
|
var doc = new jsPDF('p','pt', 'a4', true);
|
||
|
doc.setFontSize(defaults.pdfFontSize);
|
||
|
|
||
|
// Header
|
||
|
var startColPosition=defaults.pdfLeftMargin;
|
||
|
$(el).find('thead').find('tr').each(function() {
|
||
|
$(this).filter(':visible').find('th').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
var colPosition = startColPosition+ (index * 50);
|
||
|
doc.text(colPosition,20, parseString($(this)));
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
|
||
|
// Row Vs Column
|
||
|
var startRowPosition = 20; var page =1;var rowPosition=0;
|
||
|
$(el).find('tbody').find('tr').each(function(index,data) {
|
||
|
rowCalc = index+1;
|
||
|
|
||
|
if (rowCalc % 26 == 0){
|
||
|
doc.addPage();
|
||
|
page++;
|
||
|
startRowPosition=startRowPosition+10;
|
||
|
}
|
||
|
rowPosition=(startRowPosition + (rowCalc * 10)) - ((page -1) * 280);
|
||
|
|
||
|
$(this).filter(':visible').find('td').each(function(index,data) {
|
||
|
if ($(this).css('display') != 'none'){
|
||
|
if(defaults.ignoreColumn.indexOf(index) == -1){
|
||
|
var colPosition = startColPosition+ (index * 50);
|
||
|
doc.text(colPosition,rowPosition, parseString($(this)));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
});
|
||
|
|
||
|
});
|
||
|
|
||
|
// Output as Data URI
|
||
|
doc.output('datauri');
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
function parseString(data){
|
||
|
|
||
|
if(defaults.htmlContent == 'true'){
|
||
|
content_data = data.html().trim();
|
||
|
}else{
|
||
|
content_data = data.text().trim();
|
||
|
}
|
||
|
|
||
|
if(defaults.escape == 'true'){
|
||
|
content_data = escape(content_data);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
return content_data;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
});
|
||
|
})(jQuery);
|
||
|
|