Вход Регистрация
Файл: CloudBox-main/CloudBox/admin_assets/js/tsort.js
Строк: 607
<?php
/*
 * jQuery Animated Table Sorter 0.2.2 (02/25/2013)
 *
 * http://www.matanhershberg.com/plugins/jquery-animated-table-sorter/
 *
 */


/* ARRAY STRUCTURE
 Array - Specifc table
 Object - table row - each tr is its own object
 id - numeric, doesn't change, used for table row classes
 tds - all the tds in that row
 height - height of the tr
 */

(function ($) {

    $.
fn.tableSort = function (options) {

        
// Create some defaults, extending them with any options that were provided
        
var settings = $.extend({
            
animation'slide',
            
rowspanfalse,
            
sortAs: { },
            
speed300,
            
distance'300px',
            
delay1
        
}, options);

        return 
this.each(function () {
            
/* SET VARIABLES */
            
var table_data = new Array();  // Original table data
            
var copied_tr = new Array(); // Keeps a copy of each tr, used for some animations
            
var animating false// Used for disabling animation spamming for some animations
            
var sorted_table_data = new Array(); // To contain sorted tables
            
var sorting_history = new Array();
            var 
tsort_id 0// For applying classes for rows
            
var column_widths = new Array();
            var 
sorting_criteria = new Array(); // User defined sorting methods
            
var th_index_selected// The header index that was clicked on
            
var table = $(this); // The table element we are manipulating
            
var animating false// Keep track of animation

            /* PERFORM INITIALIZATION */
            
if (settings['rowspan'] == true) { // Fix table data cells with rowspans larger than 1
                
rowspan();
            }
            if (
settings['delay'] <= 0) { // For performance reasons, delay can not be smaller than 1
                
settings['delay'] = 1;
            }

            
/* GET SORTING CRITERIA */
            
$(table).find('tr:first-child th').each(function (index) {

                
// Check for user defined sorting criteria
                
if (settings['sortBy'] != undefined) {
                    switch (
settings['sortBy'][index]) {
                        case 
'text':
                        case 
'numeric':
                        case 
'nosort':
                            
sorting_criteria[index] = settings['sortBy'][index];
                            return;
                    }
                }

                
// Otherwise look for markup criteria
                
if ($(this).attr('data-sort') != undefined) {
                    switch ($(
this).attr('data-sort')) {
                        case 
'text':
                        case 
'numeric':
                        case 
'nosort':
                            
sorting_criteria[index] = $(this).attr('data-sort');
                            return;
                    }
                }

                
// Last resort try auto-detecting
                
sorting_criteria[index] = dataType($(table).find('tr:eq(1) td:eq(' index ')').text());
            });

            
/* GET TABLE DATA */
            
function getTableData() {

                
/* PUT TABLE DATA INTO AN OBJECT ARRAY */
                
$(table).find('tr').each(function (index) {
                    if (
index 0) $(this).addClass('tsort_id-' + (index 1)); // Add a class to each tr that corresponds with the object id (tsortid-0)
                    
$(this).find('td').each(function (td_index) {
                        if ($(
this).is(":first-child")) {
                            
table_data.push(new Object());
                            
table_data[table_data.length 1].id index 1;
                            
table_data[table_data.length 1].td = new Array();
                            
table_data[table_data.length 1].height = $(this).parent().height();
                        }

                        if ($(
this).attr('data-sortAs') != undefined) {
                            
table_data[table_data.length 1].td.push($(this).attr('data-sortAs'));
                        } else if (
typeof settings['sortAs'] != undefined && settings['sortAs'][$(this).text()] != undefined) {
                            
table_data[table_data.length 1].td.push(settings['sortAs'][$(this).text()]);
                        } else if (
sorting_criteria[td_index] == 'numeric') {
                            
table_data[table_data.length 1].td.push(getNumber($(this).text()));
                        } else {
                            
table_data[table_data.length 1].td.push($(this).text());
                        }
                    });
                });
            }

            
// Auto detect whether the column should be treated as text or numeric.
            // Uses the most used values (numbers include separators such as , and .)
            // Returns 'numeric' or 'text'
            
function dataType(string) {

                var 
numbers 0;
                var 
text 0;

                for (var 
0<= string.length 1i++) {
                    if ($.
isNumeric(string.charAt(i)) || string.charAt(i) == ',' || string.charAt(i) == '.') {
                        
numbers++;
                    } else {
                        
text++;
                    }
                }

                if (
numbers text) {
                    return 
'numeric';
                } else {
                    return 
'text';
                }

            }

            
/* STYLE TABLE */
            // Set table to position relative
            
$(table).css('position''relative');

            
// Add divs for directional arrows
            
$(table).find('tr:first-child th').each(function (index) {
                if (
sorting_criteria[index] != 'nosort') {
                    $(
'<div class="sortArrow"><div class="sortArrowAscending"></div><div class="sortArrowDescending"></div></div>').appendTo($(this));
                }
            });

            
// Set each td's width
            
$(table).find('tr:first-child th').each(function () {
                
column_widths.push($(this).outerWidth(true));
            });

            $(
table).find('tr td, tr th').each(function () {
                $(
this).css({
                    
minWidthcolumn_widths[$(this).index()]
                });
            });

            
// Set each row's height and width
            
$(table).find('tr').each(function () {
                $(
this).width($(this).outerWidth(true));
                $(
this).height($(this).outerHeight(true));
            });

            
// Set table height and width
            
$(table).height($(this).outerHeight()).width($(this).outerWidth());

            
// Put all the rows back in place
            
var vertical_offset 0// Beginning distance of rows from the table body in pixels
            
$(table).find('tr').each(function (index) {
                $(
this).css('top'vertical_offset);
                
vertical_offset += $(this).outerHeight();
            });

            
// Set table cells position to absolute
            
$(table).find('tr').each(function (indexel) {
                $(
this).css('position''absolute');
            });

            
// Set th hover cursor to pointer
            
$(table).find('tr th').each(function (index) {
                if (
sorting_criteria[index] != 'nosort') {
                    $(
this).css('cursor''pointer');
                }
            });


            
/* FUNCTIONALITY */
            
$(table).find('tr th').click(function () {

                if (
animating) return; // Disables animation spamming

                
if (sorting_criteria[$(this).index()] == 'nosort') { // Check if column is supposed to be sorted, otherwise exit function
                    
return;
                }

                
th_index_selected = $(this).index();
                if (
table_data.length == 0) { // Get the table data if we haven't already
                    
getTableData();
                }

                if (!
sorted_table_data[th_index_selected]) {    // If we haven't sorted this column yet
                    
sorted_table_data[th_index_selected] = table_data.concat(); // Make a copy of the original table data
                    
if (sorting_criteria[th_index_selected] == 'numeric') {        // Sort numeric
                        
sorted_table_data[th_index_selected].sort(function (ab) {
                            return 
a.td[th_index_selected] - b.td[th_index_selected];
                        });
                    } else if (
sorting_criteria[th_index_selected] == 'text') { // Sort text
                        
sorted_table_data[th_index_selected].sort(function (ab) {
                            return 
a.td[th_index_selected].localeCompare(b.td[th_index_selected]);
                        });
                    }
                }

                
// sorting_history keeps track of all the columns the user selected to sort, and their order
                // To also be used later for priority sorting in case two values are equal
                
if (sorting_history.length == 0) {
                    
sorting_history.push({ column_idth_index_selecteddirection'ascending' }); // If this is the first column clicked, add to sorting_history
                
} else if (sorting_history.length != 0) { // If this is not the first column clicked
                    
if (th_index_selected == sorting_history[sorting_history.length 1]['column_id']) { // Check if it's the same column clicked as before to determine the asec/desc order
                        
switch (sorting_history[sorting_history.length 1]['direction']) {
                            case 
'ascending':
                            {
                                
sorting_history.push({ column_idth_index_selecteddirection'descending' });

                                break;
                            }

                            case 
'descending':
                            {
                                
sorting_history.push({ column_idth_index_selecteddirection'ascending' });

                                break;
                            }
                        }
                    } else { 
// If this is not the same column clicked as before, set to ascending
                        
sorting_history.push({ column_idth_index_selecteddirection'ascending' });
                    }
                }

                
// Call the display_table function with the data array and direction requested
                
display_table(sorted_table_data[th_index_selected], sorting_history[sorting_history.length 1]['direction']);
                
display_arrow(th_index_selectedsorting_history[sorting_history.length 1]['direction']);
            });

            
// Display arrow direction
            
function display_arrow(columndirection) {
                $(
table).find('tr:first-child th div.sortArrow div').stop(truetrue).fadeOut(settings['speed'], 'swing');
                switch (
direction) {
                    case 
'ascending':
                    {
                        $(
table).find('tr:first-child th div.sortArrow div.sortArrowAscending').eq(column).fadeIn(settings['speed'], 'swing');

                        break;
                    }
                    case 
'descending':
                    {
                        $(
table).find('tr:first-child th div.sortArrow div.sortArrowDescending').eq(column).fadeIn(settings['speed'], 'swing');

                        break;
                    }
                }
            }

            
// This function receives the new sorted table data array and displays it
            
function display_table(datadirection) {
                if (
direction == 'ascending') {
                    var 
data data.concat(); // .concat() fixes function scope issues with references by saving a copy of it (function within function loading old data)
                
} else {
                    var 
data data.concat().reverse();
                }

                
vertical_offset = $(table).find('tr').height(); // Start at header height

                
if (settings['animation'] == 'none') {

                    for (
index 0index data.lengthindex++) {
                        var 
el data[index];
                        $(
table).find('tr.tsort_id-' el.id).css({ topvertical_offset }).appendTo(table);
                        
vertical_offset += el.height;
                    }

                } else if (
settings['animation'] == 'slide') {

                    for (
index 0index data.lengthindex++) {
                        var 
el data[index];
                        $(
table).find('tr.tsort_id-' el.id).stop().delay(settings['delay'] * index).animate({ topvertical_offset}, settings['speed'], 'swing').appendTo(table);
                        
vertical_offset += el.height;
                    }

                } else if (
settings['animation'] == 'fadeAll') {

                    
animating true;

                    $(
table).find('tr:gt(0)').fadeOut(settings['speed']).promise().done(function () {
                        for (
index 0index data.lengthindex++) {
                            var 
el data[index];
                            $(
table).find('tr.tsort_id-' el.id).css({ topvertical_offset }).appendTo(table);
                            
vertical_offset += el.height;
                            if (
index == table_data.length 1) {
                                $(
table).find('tr').delay(1).fadeIn(settings['speed'], 'swing').promise().done(function () {

                                    
animating false;

                                });
                            }
                        }
                        ;
                    });

                } else if (
settings['animation'] == 'fade') {

                    
animating true;

                    if (
copied_tr.length == 0) {
                        for (
index 0index data.lengthindex++) {
                            var 
el data[index];
                            
copied_tr[el.id] = $(table).find('tr.tsort_id-' el.id).clone();
                        }
                    }

                    $(
table).find('tr:gt(0)').each(function (indexel) {
                        $(
this).delay(index settings['delay']).fadeOut(settings['speed'], 'swing', function () {
                            $(
this).remove();
                            $(
copied_tr[data[index]['id']]).clone().hide().css({ topvertical_offset }).appendTo(table).delay(1).fadeIn(settings['speed'], 'swing', function () {

                                if (
index == table_data.length 1) {
                                    
animating false;
                                }

                            });
                            
vertical_offset += data[index]['height'];
                        });
                    });

                } else if (
settings['animation'] == 'slideLeftAll') {

                    
animating true;

                    $(
table).find('tr:gt(0)').each(function (indexelement) {
                        $(
this).delay(index settings['delay']).animate({ left"-" settings['distance'], opacity0}, settings['speed'], 'swing');
                        if (
index == table_data.length 1) {
                            $(
this).promise().done(function () {
                                for (
index 0index data.lengthindex++) {
                                    var 
el data[index];
                                    $(
table).find('tr.tsort_id-' el.id).css({ topvertical_offsetleft''right"-" settings['distance'] }).appendTo(table).delay(index settings['delay']).animate({ right"0px"opacity}, settings['speed'], 'swing', function () {

                                        $(
this).css('right''auto')

                                        if ($(
this).is('tr:last-child')) {
                                            
animating false;
                                        }
                                    });

                                    
vertical_offset += el.height;

                                }
                            });
                        }
                    });

                } else if (
settings['animation'] == 'slideLeft') {

                    
animating true;

                    if (
copied_tr.length == 0) {
                        for (
index 0index data.lengthindex++) {
                            var 
el data[index];
                            
copied_tr[el.id] = $(table).find('tr.tsort_id-' el.id).clone();
                        }
                        ;
                    }

                    $(
table).find('tr:gt(0)').each(function (indexel) {
                        $(
this).delay(index settings['delay']).animate({ left'-' settings['distance'], opacity0}, settings['speed'], 'swing', function () {
                            $(
this).remove();
                            $(
copied_tr[data[index]['id']]).clone().css({ opacity}).appendTo(table).css({ topvertical_offsetleft''right'-' settings['distance'] }).animate({ right"0px"opacity}, settings['speed'], function () {
                                $(
this).css('right''auto');

                                if (
index == table_data.length 1) {
                                    
animating false;
                                }
                            });

                            
vertical_offset += data[index]['height'];

                        });
                    });

                }

            }

            
// Removes all characters that are not a number or a period and returns the string
            
function getNumber(string) {
                var 
number '';
                for (var 
0<= string.lengthi++) {
                    if ($.
isNumeric(string.charAt(i)) || string.charAt(i) == '.') {
                        
number += string.charAt(i);
                    }
                }
                return 
number;
            }

            
// Replace rowspans larger than 1 with actual tds
            
function rowspan() {
                $(
table).find('td').each(function (index) {
                    if ($(
this).attr('rowspan') != undefined) {
                        var 
rowspan = $(this).attr('rowspan');
                        $(
this).removeAttr('rowspan');

                        var 
tr_index = $(this).parent().index();
                        var 
tr_eq 1;
                        while (
rowspan 1) {
                            switch ($(
this).index()) {
                                case 
0:
                                    $(
this).clone().prependTo($(this).parent().parent().children().eq(tr_index tr_eq));
                                    break;
                                default:
                                    $(
this).clone().insertAfter($(this).parent().parent().children().eq(tr_index tr_eq).children().eq($(this).index() - 1));
                                    break;
                            }
                            
tr_eq++;
                            
rowspan--;
                        }
                    }
                });
            }
        });
    };
})(
jQuery);
?>
Онлайн: 4
Реклама