Your IP : 10.0.84.116


Current Path : /var/www/www.yekclass.com/public_html/components/com_tabulizer/assets/js/export/
Upload File :
Current File : /var/www/www.yekclass.com/public_html/components/com_tabulizer/assets/js/export/exportdata.js

/* Convert table/graph contents generated by Tabulizer to file format for viewing and downloading
 http://www.tabulizer.com */

function validateEmailPreferences(options) {
    var email_recipients = jtQuery('#' + options.form_prefix + '_exportemail_recipients');
    var email_subject = jtQuery('#' + options.form_prefix + '_exportemail_subject');
    var email_body = jtQuery('#' + options.form_prefix + '_exportemail_body');
}

function findNextArrayKey(start_index, my_array) {
    for (var i=start_index;i<=1000;i++) {
        if (i in my_array) continue;
        return i;
    }
}

jtQuery.fn.table2CSV = function(options) {
    var options = jtQuery.extend({
            column_separator: ',',
            row_delimiter: '\r\n',
            strip_tags: 'all'
        },
        options);

    var csvData = [];
    var el = this;
    var tmpRow = []; // construct header available array
    var colspan, rowspan, row_id, column_id, placeholder = [];

    if (options.datatable !== undefined && options.datatable !== null) {
        var headers = options.datatable.find('thead tr').each(function() {
            var tmpRow = [];
            jtQuery(this).filter(':visible').find('td').each(function() {
                colspan = jtQuery(this).attr('colspan');
                rowspan = jtQuery(this).attr('rowspan');
                if (colspan) { colspan = parseInt(colspan); } else colspan = 1;
                if (rowspan) { rowspan = parseInt(rowspan); } else rowspan = 1;

                if (jtQuery(this).css('display') != 'none') tmpRow[tmpRow.length] = filterData(jtQuery(this).html());

                if (colspan > 1) {
                    while (colspan>1) {
                        tmpRow[tmpRow.length] = '';
                        colspan--;
                    }
                }
            });
            if (tmpRow.length > 0) row2CSV(tmpRow);
        });

        var rows = options.datatable.fnGetFilteredNodes(); // instead of var rows = options.datatable.fnGetNodes();
        for(var i=0;i<rows.length;i++)
        {
            tmpRow = [];
            jtQuery(rows[i]).find('th').each(function() {
                tmpRow[tmpRow.length] = filterData(jtQuery(this).html());
            });
            if (tmpRow.length > 0) row2CSV(tmpRow);

            tmpRow = [];
            jtQuery(rows[i]).find('td').each(function() {
                tmpRow[tmpRow.length] = filterData(jtQuery(this).html());
            });
            if (tmpRow.length > 0) row2CSV(tmpRow);
        }
		
		var footers = options.datatable.find('tfoot tr').each(function() {
            var tmpRow = [];
            jtQuery(this).filter(':visible').find('td').each(function() {
                colspan = jtQuery(this).attr('colspan');
                rowspan = jtQuery(this).attr('rowspan');
                if (colspan) { colspan = parseInt(colspan); } else colspan = 1;
                if (rowspan) { rowspan = parseInt(rowspan); } else rowspan = 1;

                if (jtQuery(this).css('display') != 'none') tmpRow[tmpRow.length] = filterData(jtQuery(this).html());

                if (colspan > 1) {
                    while (colspan>1) {
                        tmpRow[tmpRow.length] = '';
                        colspan--;
                    }
                }
            });
            if (tmpRow.length > 0) row2CSV(tmpRow);
        });
    } else {
        tmpRow = [];

        row_id = 0;
        column_id = 0;
        placeholder = [];

        // header
        jtQuery(el).find('tr').each(function() {
            var tmpRow = [];

            if (row_id in placeholder) {
                for (var i in placeholder[row_id]) {
                    tmpRow[i] = ' ';
                }
            }

            column_id = findNextArrayKey(0, tmpRow);
            jtQuery(this).filter(':visible').find('th').each(function() {

                colspan = jtQuery(this).attr('colspan');
                rowspan = jtQuery(this).attr('rowspan');
                if (colspan) { colspan = parseInt(colspan); } else colspan = 1;
                if (rowspan) { rowspan = parseInt(rowspan); } else rowspan = 1;

                if (rowspan>1) {
                    while (rowspan>1) {
                        row_key = row_id+rowspan-1;
                        if (!(row_key in placeholder)) {
                            placeholder[row_key] = [];
                        }
                        placeholder[row_key][column_id] = 'X';
                        rowspan--;
                    }
                }

                if (jtQuery(this).css('display') != 'none') {
                    tmpRow[column_id] = filterData(jtQuery(this).html());
                    column_id = findNextArrayKey(0, tmpRow);
                }

                if (colspan > 1) {
                    while (colspan>1) {
                        tmpRow[column_id] = '';
                        column_id = findNextArrayKey(0, tmpRow);
                        colspan--;
                    }
                }
            });
            if (tmpRow.length > 0) row2CSV(tmpRow);

            row_id++;
        });

        // Rest of table data
        jtQuery(el).find('tr').each(function() {
            var tmpRow = [];

            if (row_id in placeholder) {
                for (var i in placeholder[row_id]) {
                    tmpRow[i] = ' ';
                }
            }

            column_id = findNextArrayKey(0, tmpRow);
            jtQuery(this).filter(':visible').find('td').each(function() {

                colspan = jtQuery(this).attr('colspan');
                rowspan = jtQuery(this).attr('rowspan');
                if (colspan) { colspan = parseInt(colspan); } else colspan = 1;
                if (rowspan) { rowspan = parseInt(rowspan); } else rowspan = 1;

                if (rowspan>1) {
                    while (rowspan>1) {
                        row_key = row_id+rowspan-1;
                        if (!(row_key in placeholder)) {
                            placeholder[row_key] = [];
                        }
                        placeholder[row_key][column_id] = 'X';
                        rowspan--;
                    }
                }

                if (jtQuery(this).css('display') != 'none') {
                    tmpRow[column_id] = filterData(jtQuery(this).html());
                    column_id = findNextArrayKey(0, tmpRow);
                }

                if (colspan > 1) {
                    while (colspan>1) {
                        tmpRow[column_id] = '';
                        column_id = findNextArrayKey(0, tmpRow);
                        colspan--;
                    }
                }
            });
            if (tmpRow.length > 0) row2CSV(tmpRow);

            row_id++;
        });
    }

    var mydata = csvData.join(options.row_delimiter);
    return mydata;

    function row2CSV(tmpRow) {
        var tmp = tmpRow.join('') // to remove any blank rows
        if (tmpRow.length > 0 && tmp != '') {
            var mystr = tmpRow.join(options.column_separator);
            csvData[csvData.length] = mystr;
        }
    }
    function filterData(input) {
        output = input;

        // select and input
        if (output.indexOf('tab_search_col_') > 0) {
            var matches = output.match(/<option([^>]+)>([^<]+)</);
            if (matches) {
                output = matches[2];
            } else {
                matches = output.match(/value="([^"]+)/);
                if (matches) {
                    output = matches[1];
                }
            }
        }

        // escape "
        regexp = new RegExp(/"/g);
        output = output.replace(regexp, '\'');

        // remove new lines
        output = output.replace(/(\r\n|\n|\r)/gm,"");

        // decode HTML special entities
        output = jtQuery("<div />").html(output).text();

        //HTML
        if (options.strip_tags == "all") {
            regexp = new RegExp(/\<[^\<]+\>/g);
            output = output.replace(regexp, "");
        }
        if (output == "") return '';
        return '"' + output + '"';
    }
};


jtQuery.fn.appendExportData = function(options) {
    var options = jtQuery.extend({
            show_view: true,
            show_download: true,
            show_email: true,
            strip_tags: "all"
        },
        options);

    var input_ref = jtQuery(this);
    var export_type, export_output, export_data;
    var data_source = options.data_source;
    var data_source_tag = '';
    var ds_user_params = '';

    var datatable_obj = null, datatable_bottom_info = null;
    if (window.jtQuery) {
        if (jtQuery('#'+options.form_prefix).length && jtQuery.fn.dataTable && (options.data_source != 'graph')) {
            datatable_obj = jtQuery('#'+options.form_prefix).dataTable();
            var datatable_settings = datatable_obj.fnSettings();
            if (datatable_settings.sAjaxSource) {
                var url = datatable_settings.sAjaxSource;
                var match_ds = url.match(/&ds_tag=([^&]+)/);
                if (match_ds) {
                    data_source_tag	= match_ds[1];
                }
                var match_ds = url.match(/&ds_user_params=([^&]+)/);
                if (match_ds) {
                    ds_user_params	= match_ds[1];
                }
            }
            var table_wrapper = jtQuery(this).closest(".dataTables_wrapper");
            if (table_wrapper.length) {
                var bottom_info = table_wrapper.find('.tab_bottom');
                if (bottom_info.length) datatable_bottom_info = bottom_info;
            }
        }
    }

    var d = jtQuery(document.createElement("div"));
    d.addClass("export-data-buttons");
    d.html(decodeURIComponent(options.form_code).replace(/\+/g, ' '));

    if (datatable_bottom_info !== undefined && datatable_bottom_info !== null) {
        datatable_bottom_info.after(d);
    } else {
        jtQuery(this).after(d);
    }

    if (options.show_view) {
        var c = jtQuery('#' + options.form_prefix + '_view_btn');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref = jtQuery('#' + options.form_prefix + '_view_pref');
            pref.removeClass('phidden');
            if (options.show_download) {
                pref = jtQuery('#' + options.form_prefix + '_download_pref');
                if (!pref.hasClass('phidden')) pref.addClass('phidden');
            }
            if (options.show_email) {
                pref = jtQuery('#' + options.form_prefix + '_email_pref');
                if (!pref.hasClass('phidden')) pref.addClass('phidden');
            }
        });
        c = jtQuery('#' + options.form_prefix + '_view_btn_submit');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            export_type = jtQuery('#' + options.form_prefix + '_view_pref_exporttype').filter(":selected").val();
            export_output = 'browser';
            if (data_source == 'table') {
                export_data = input_ref.table2CSV({output_format:'html', strip_tags: options.strip_tags, datatable: datatable_obj});
            } else {
                var j = h.data.export_source.jqplotToImageElem();
                export_data = j.src;
            }
            jtQuery('#' + options.form_prefix + '_exportdata').val(export_data);
            jtQuery('#' + options.form_prefix + '_exporttype').val(export_type);
            jtQuery('#' + options.form_prefix + '_exportoutput').val(export_output);
            jtQuery('#' + options.form_prefix + '_datasourcetag').val(data_source_tag);
            jtQuery('#' + options.form_prefix + '_dsuserparams').val(ds_user_params);
            jtQuery('#' + options.form_id).submit();
        });
        c = jtQuery('#' + options.form_prefix + '_view_btn_close');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref = jtQuery('#' + options.form_prefix + '_download_pref');
            pref.addClass('phidden');
        });
    }
    if (options.show_download) {
        var c = jtQuery('#' + options.form_prefix + '_download_btn');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref = jtQuery('#' + options.form_prefix + '_download_pref');
            pref.removeClass('phidden');
            if (options.show_view) {
                pref = jtQuery('#' + options.form_prefix + '_view_pref');
                if (!pref.hasClass('phidden')) pref.addClass('phidden');
            }
            if (options.show_email) {
                pref = jtQuery('#' + options.form_prefix + '_email_pref');
                if (!pref.hasClass('phidden')) pref.addClass('phidden');
            }
        });
        c = jtQuery('#' + options.form_prefix + '_download_btn_submit');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref = jtQuery('#' + options.form_prefix + '_download_pref');
            var pref_exporttype = document.getElementById(options.form_prefix + '_download_pref_exporttype');
            export_type = pref_exporttype.options[pref_exporttype.selectedIndex].value;
            export_output = 'file';
            if (data_source == 'table') {
                export_data = input_ref.table2CSV({output_format:'text', strip_tags: options.strip_tags, datatable: datatable_obj});
            } else {
                var j = h.data.export_source.jqplotToImageElem();
                export_data = j.src;
            }
            jtQuery('#' + options.form_prefix + '_exportdata').val(export_data);
            jtQuery('#' + options.form_prefix + '_exporttype').val(export_type);
            jtQuery('#' + options.form_prefix + '_exportoutput').val(export_output);
            jtQuery('#' + options.form_prefix + '_datasourcetag').val(data_source_tag);
            jtQuery('#' + options.form_prefix + '_dsuserparams').val(ds_user_params);
            jtQuery('#' + options.form_id).submit();
            pref.addClass('phidden');
        });
        c = jtQuery('#' + options.form_prefix + '_download_btn_close');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref = jtQuery('#' + options.form_prefix + '_download_pref');
            pref.addClass('phidden');
        });
    }
    if (options.show_email) {
        var c = jtQuery('#' + options.form_prefix + '_email_btn');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref = jtQuery('#' + options.form_prefix + '_email_pref');
            pref.removeClass('phidden');
            if (options.show_view) {
                pref = jtQuery('#' + options.form_prefix + '_view_pref');
                if (!pref.hasClass('phidden')) pref.addClass('phidden');
            }
            if (options.show_download) {
                pref = jtQuery('#' + options.form_prefix + '_download_pref');
                if (!pref.hasClass('phidden')) pref.addClass('phidden');
            }
        });
        var c = jtQuery('#' + options.form_prefix + '_email_btn_submit');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref_exporttype = document.getElementById(options.form_prefix + '_email_pref_exporttype');
            export_type = pref_exporttype.options[pref_exporttype.selectedIndex].value;
            export_output = 'email';
            if (data_source == 'table') {
                export_data = input_ref.table2CSV({output_format:'html', strip_tags: options.strip_tags, datatable: datatable_obj});
            } else {
                var j = h.data.export_source.jqplotToImageElem();
                export_data = j.src;
            }
            jtQuery('#' + options.form_prefix + '_exportdata').val(export_data);
            jtQuery('#' + options.form_prefix + '_exporttype').val(export_type);
            jtQuery('#' + options.form_prefix + '_exportoutput').val(export_output);
            jtQuery('#' + options.form_prefix + '_datasourcetag').val(data_source_tag);
            jtQuery('#' + options.form_prefix + '_dsuserparams').val(ds_user_params);
            jtQuery('#' + options.form_id).submit();
        });
        c = jtQuery('#' + options.form_prefix + '_email_btn_close');
        c.bind("click", {
            export_source: input_ref
        }, function (h) {
            var pref = jtQuery('#' + options.form_prefix + '_email_pref');
            pref.addClass('phidden');
        });
    }
};