Вход Регистрация
Файл: li/styles/gs_sortable.js
Строк: 358
<?php
// Copyright 2007 - 2010 Gennadiy Shvets
// The program is distributed under the terms of the GNU General
// Public License 3.0
//
// See http://www.allmyscripts.com/Table_Sort/index.html for usage details.

// Script version 1.8

var TSort_Store;
var 
TSort_All;

function 
TSort_StoreDef () {
    
this.sorting = [];
    
this.nodes = [];
    
this.rows = [];
    
this.row_clones = [];
    
this.sort_state = [];
    
this.initialized 0;
//    this.last_sorted = -1;
    
this.history = [];
    
this.sort_keys = [];
    
this.sort_colors = [ '#FF0000''#800080''#0000FF' ];
};

function 
tsInitOnload ()
{
    
//    If TSort_All is not initialized - do it now (simulate old behavior)
    
if    (TSort_All == null)
        
tsRegister();

    for (var 
id in TSort_All)
    {
        
tsSetTable (id);
        
tsInit();
    }
    if    (
window.onload_sort_table)
        
window.onload_sort_table();
}

function 
tsInit()
{

    if    (
TSort_Data.push == null)
        return;
    var 
table_id TSort_Data[0];
    var 
table document.getElementById(table_id);
    
// Find thead
    
var thead table.getElementsByTagName('thead')[0];
    if    (
thead == null)
    {
        
alert ('Cannot find THEAD tag!');
        return;
    }
    var 
tr thead.getElementsByTagName('tr');
    var 
colsinodelen;
    if    (
tr.length 1)
    {
        var    
cols0 tr[0].getElementsByTagName('th');
        if    (
cols0.length == 0)
            
cols0 tr[0].getElementsByTagName('td');
        var 
cols1;
        var    
cols1 tr[1].getElementsByTagName('th');
        if    (
cols1.length == 0)
            
cols1 tr[1].getElementsByTagName('td');
        
cols = new Array ();
        var 
j0j1n;
        
len cols0.length;
        for (
j0 0j1 0j0 lenj0++)
        {
            
node cols0[j0];
            
node.colSpan;
            if    (
1)
            {
                while (
0)
                {
                    
cols.push (cols1[j1++]);
                    
n--;
                }
            }
            else
            {
                if    (
node.rowSpan == 1)
                    
j1++;
                
cols.push (node);
            }
        }
    }
    else
    {
        
cols tr[0].getElementsByTagName('th');
        if    (
cols.length == 0)
            
cols tr[0].getElementsByTagName('td');
    }
    
len cols.length;
    for (var 
0leni++)
    {
        if    (
>= TSort_Data.length 1)
            break;
        
node cols[i];
        var 
sorting TSort_Data[1].toLowerCase();
        if    (
sorting == null)  sorting '';
        
TSort_Store.sorting.push(sorting);

        if    ((
sorting != null)&&(sorting != ''))
        {
//            node.tsort_col_id = i;
//            node.tsort_table_id = table_id;
//            node.onclick = tsDraw;
            
node.innerHTML "<a href='' onClick="tsDraw(" + i + ",'" +
                table_id + "'
); return false">" node.innerHTML +
                
'</a><b><span id="TS_' '_' table_id '"></span></b>';
            
node.style.cursor "pointer";
        }
    }

    
// Get body data
    
var tbody table.getElementsByTagName('tbody')[0];
    if    (
tbody == null)    return;
    
// Get TR rows
    
var rows tbody.getElementsByTagName('tr');
    var 
date = new Date ();
    var 
lentexta;
    for (
0rows.lengthi++)
    {
        var 
row rows[i];
        var 
cols row.getElementsByTagName('td');
        var 
row_data = [];
        for (
0cols.lengthj++)
        {
            
// Get cell text
            
text cols[j].innerHTML.replace(/^s+/, '');
            
text text.replace(/s+$/, '');
            var 
sorting TSort_Store.sorting[j];
            if    (
sorting == 'h')
            {
                
text text.replace(/<[^>]+>/g'');
                
text text.toLowerCase();
            }
            else if    (
sorting == 's')
                
text text.toLowerCase();
            else if (
sorting == 'i')
            {
                
text parseInt(text);
                if    (
isNaN(text))    text 0;
            }
            else if (
sorting == 'n')
            {
                
text text.replace(/(d),(?=ddd)/g"$1");
                
text parseInt(text);
                if    (
isNaN(text))    text 0;
            }
            else if (
sorting == 'c')
            {
                
text text.replace(/^$/, '');
                
text text.replace(/(d),(?=ddd)/g"$1");
                
text parseFloat(text);
                if    (
isNaN(text))    text 0;
            }
            else if (
sorting == 'f')
            {
                
text parseFloat(text);
                if    (
isNaN(text))    text 0;
            }
            else if (
sorting == 'g')
            {
                
text text.replace(/(d),(?=ddd)/g"$1");
                
text parseFloat(text);
                if    (
isNaN(text))    text 0;
            }
            else if (
sorting == 'd')
            {
                if    (
text.match(/^dddd-dd?-dd?(?: dd?:dd?:dd?)?$/))
                {
                    
text.split (/[s-:]/);
                    
text = (a[3] == null)?
                        
Date.UTC(a[0], a[1] - 1a[2],    0,    0,    00):
                        
Date.UTC(a[0], a[1] - 1a[2], a[3], a[4], a[5], 0);
                }
                else
                    
text Date.parse(text);
            }
            
row_data.push(text);
        }
        
TSort_Store.rows.push(row_data);
        
// Save a reference to the TR element
        
var new_row row.cloneNode(true);
        
new_row.tsort_row_id i;
        
TSort_Store.row_clones[i] = new_row;
    }
    
TSort_Store.initialized 1;

    if    (
TSort_Store.cookie)
    {
        var 
allc document.cookie;
        
allc.indexOf (TSort_Store.cookie '=');
        if    (
!= -1)
        {
            
+= TSort_Store.cookie.length 1;
            
len allc.indexOf (";"i);
            
text decodeURIComponent (allc.substring (i, (len == -1)?
                
allc.lengthlen));
            
TSort_Store.initial = (text == '')? nulltext.split(/s*,s*/);
        }
    }

    var    
initial TSort_Store.initial;
    if    (
initial != null)
    {
        var 
itype typeof initial;
        if    ((
itype == 'number')||(itype == 'string'))
            
tsDraw(initial);
        else
        {
            for (
initial.length 1>= 0i--)
                
tsDraw(initial[i]);
        }
    }
}

function 
tsDraw(p_idp_table)
{
    if    (
p_table != null)
        
tsSetTable (p_table);

    if    ((
TSort_Store == null)||(TSort_Store.initialized == 0))
        return;

    var 
0;
    var 
sort_keys TSort_Store.sort_keys;
    var 
id;
    var 
new_order '';
    if    (
p_id != null)
    {
        if    (
typeof p_id == 'number')
            
id p_id;
        else    if    ((
typeof p_id == 'string')&&(p_id.match(/^d+[ADU]$/i)))
        {
            
id p_id.replace(/^(d+)[ADU]$/i"$1");
            
new_order p_id.replace(/^d+([ADU])$/i"$1").toUpperCase();
        }
    }
    if    (
id == null)
    {
        
id this.tsort_col_id;
        if    ((
p_table == null)&&(this.tsort_table_id != null))
            
tsSetTable (this.tsort_table_id);
    }
    var 
table_id TSort_Data[0];

    var 
order TSort_Store.sort_state[id];
    if    (
new_order == 'U')
    {
        if    (
order != null)
        {
            
TSort_Store.sort_state[id] = null;
            
obj document.getElementById ('TS_' id '_' table_id);
            if    (
obj != null)    obj.innerHTML '';
        }
    }
    else if    (
new_order != '')
    {
        
TSort_Store.sort_state[id] = (new_order == 'A')? truefalse;
        
//    Add column number to the sort keys array
        
sort_keys.unshift(id);
        
1;
    }
    else
    {
        if    ((
order == null)||(order == true))
        {
            
TSort_Store.sort_state[id] = (order == null)? truefalse;
            
//    Add column number to the sort keys array
            
sort_keys.unshift(id);
            
1;
        }
        else
        {
            
TSort_Store.sort_state[id] = null;
            
obj document.getElementById ('TS_' id '_' table_id);
            if    (
obj != null)    obj.innerHTML '';
        }
    }

    var 
len sort_keys.length;
    
//    This will either remove the column completely from the sort_keys
    //    array (i = 0) or remove duplicate column number if present (i = 1).
    
while (len)
    {
        if    (
sort_keys[i] == id)
        {
            
sort_keys.splice(i1);
            
len--;
            break;
        }
        
i++;
    }
    if    (
len 3)
    {
        
sort_keys.pop();
        
obj document.getElementById ('TS_' '_' table_id);
        if    (
obj != null)    obj.innerHTML '';
        
TSort_Store.sort_state[i] = null;
    }

    
// Sort the rows
    
TSort_Store.row_clones.sort(tsSort);

    
// Save the currently selected order
    
var new_tbody document.createElement('tbody');
    var 
row_clones TSort_Store.row_clones;
    
len row_clones.length;
    var 
classes TSort_Store.classes;
    if    (
classes == null)
    {
        for (
0leni++)
            
new_tbody.appendChild (row_clones[i].cloneNode(true));
    }
    else
    {
        var clone;
        var 
0;
        var 
cl_len classes.length;
        for (
0leni++)
        {
            clone = 
row_clones[i].cloneNode(true);
            clone.
className classes[j++];
            if    (
>= cl_len)  0;
            
new_tbody.appendChild (clone);
        }
    }

    
// Replace table body
    
var table document.getElementById(table_id);
    var 
tbody table.getElementsByTagName('tbody')[0];
    
table.removeChild(tbody);
    
table.appendChild(new_tbody);

    var 
objcoloriconstate;
    
len sort_keys.length;
    var 
sorting = new Array ();
    for (
0leni++)
    {
        
id sort_keys[i];
        
obj document.getElementById ('TS_' id '_' table_id);
        if    (
obj == null)  continue;
        
state = (TSort_Store.sort_state[id])? 01;
        
icon TSort_Store.icons[state];
        
obj.innerHTML = (icon.match(/</))? icon:
            
'<font color="' TSort_Store.sort_colors[i] + '">' icon '</font>';
        
sorting.push(id + ((state)? 'D''A'));
    }

    if    (
TSort_Store.cookie)
    {
        
//    Store the contents of "sorting" array into a cookie for 30 days
        
var date = new Date();
        
date.setTime (date.getTime () + 2592000);
        
document.cookie TSort_Store.cookie "=" +
            
encodeURIComponent (sorting.join(',')) + "; expires=" +
            
date.toGMTString () + "; path=/";
    }
}

function 
tsSort(ab)
{
    var 
data_a TSort_Store.rows[a.tsort_row_id];
    var 
data_b TSort_Store.rows[b.tsort_row_id];
    var 
sort_keys TSort_Store.sort_keys;
    var 
len sort_keys.length;
    var 
id;
    var 
type;
    var 
order;
    var 
result;
    for (var 
0leni++)
    {
        
id sort_keys[i];
        
type TSort_Store.sorting[id];

        var 
v_a data_a[id];
        var 
v_b data_b[id];
        if    (
v_a == v_b)  continue;
        if    ((
type == 'i')||(type == 'f')||(type == 'd'))
            
result v_a v_b;
        else
            
result = (v_a v_b)? -11;
        
order TSort_Store.sort_state[id];
        return (
order)? resultresult;
    }

    return (
a.tsort_row_id b.tsort_row_id)? -11;
}

function 
tsRegister()
{
    if    (
TSort_All == null)
        
TSort_All = new Object();

    var 
ts_obj = new TSort_StoreDef();
    
ts_obj.sort_data TSort_Data;
    
TSort_Data null;
    if    (
typeof TSort_Classes != 'undefined')
    {
        
ts_obj.classes TSort_Classes;
        
TSort_Classes null;
    }
    if    (
typeof TSort_Initial != 'undefined')
    {
        
ts_obj.initial TSort_Initial;
        
TSort_Initial null;
    }
    if    (
typeof TSort_Cookie != 'undefined')
    {
        
ts_obj.cookie TSort_Cookie;
        
TSort_Cookie null;
    }
    if    (
typeof TSort_Icons != 'undefined')
    {
        
ts_obj.icons TSort_Icons;
        
TSort_Icons null;
    }
    if    (
ts_obj.icons == null)
        
ts_obj.icons = new Array ("u2193""u2191");

    if    (
ts_obj.sort_data != null)
        
TSort_All[ts_obj.sort_data[0]] = ts_obj;
}

function    
tsSetTable (p_id)
{
    
TSort_Store TSort_All[p_id];
    if    (
TSort_Store == null)
    {
        
alert ("Cannot set table '" p_id "' - table is not registered");
        return;
    }
    
TSort_Data TSort_Store.sort_data;
}

if    (
window.addEventListener)
    
window.addEventListener("load"tsInitOnloadfalse);
else if (
window.attachEvent)
    
window.attachEvent ("onload"tsInitOnload);
else
{
    if  ((
window.onload_sort_table == null)&&(window.onload != null))
        
window.onload_sort_table window.onload;
    
// Assign new onload function
    
window.onload tsInitOnload;
}
?>
Онлайн: 1
Реклама