Subversion Repositories SmartDukaan

Rev

Blame | Last modification | View Log | RSS feed

/*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);