Untitled

mail@pastecode.io avatar
unknown
javascript
a year ago
3.2 kB
2
Indexable
Never
function exportTableToCSV($table) {
    var filename = '';
    filename = window.prompt("Podaj nazwę pliku");

    if (filename == null) {
        $(this)
            .attr({
                'href': '#'
            });

        $(this).removeAttr('download');

        return;
    }
    filename = filename || "export";
    filename = filename.replace('.csv', '') + '.csv';

    var $headers = $table.find('tr:has(th)')
        , $rows = $table.find('tr:has(td)')

        // Temporary delimiter characters unlikely to be typed by keyboard
        // This is to avoid accidentally splitting the actual contents
        , tmpColDelim = String.fromCharCode(11) // vertical tab character
        , tmpRowDelim = String.fromCharCode(0) // null character

        // actual delimiter characters for CSV format
        , colDelim = ';'
        , rowDelim = '\r\n';
    console.log($headers);
    // Grab text from table into CSV formatted string
    var csv = '';
    csv += formatRows($headers.map(grabRow));
    csv += rowDelim;

    csv += formatRows($rows.map(grabRow));

    // Data URI
    var csvData = 'data:application/csv;charset=utf-8,%ef%bb%bf' + encodeURIComponent(csv);

    var blob = new Blob([csv], {
        type: 'text/csv;charset=utf-8;'
    });

    if (navigator.msSaveBlob) { // For IE
        return navigator.msSaveBlob(blob, filename);
    } else {
        $(this)
            .attr({
                'download': filename
                , 'href': csvData

            });
    }

    //------------------------------------------------------------
    // Helper Functions
    //------------------------------------------------------------
    // Format the output so it has the appropriate delimiters
    function formatRows(rows) {

        return rows.get().join(tmpRowDelim)
            .split(tmpRowDelim).join(rowDelim)
            .split(tmpColDelim).join(colDelim);
    }
    // Grab and format a row from the table
    function grabRow(i, row) {
        var $row = $(row);
        //for some reason $cols = $row.find('td') || $row.find('th') won't work...
        var $cols = $row.find('td').not(".ignoreCSV, :has(>div), :has(>input),:contains('Operacje'),:contains('OPERACJE'), :has('.checkbox')");
        if (!$cols.length)
            $cols = $row.find('th').not(".ignoreCSV, :contains('Operacje'),:contains('OPERACJE'),:has('.checkbox')");

        return $cols.map(grabCol)
            .get().join(tmpColDelim);
    }
    // Grab and format a column from the table
    function grabCol(j, col) {
        var $col = $(col);

        var $tooltip = $col.find('i');
        if ($tooltip.hasClass('btn-Comment') && $tooltip.hasAttr('data-content')) {
            $text = $tooltip.attr('data-content');
        }
        else {
            $text = $col.text();
        }
        if ($col.hasClass('csv-map-to-text')) {
            $text = '"=""' + $col.text() + '"""';
            return $text;
        }
        $text = $text.trim().replace(/[\r\n]/g, '');
        $text = $text.replace(/;/g, ',');
        return $text.replace(/#|"/g, '');  // remove double quotes
    }
}