git-svn-id: https://192.168.0.254/svn/Proyectos.FundacionLQDVI_WebCongresos/trunk@2 94ccb1af-fd9d-d947-8d90-7f70ea60afc8
125 lines
3.1 KiB
JavaScript
125 lines
3.1 KiB
JavaScript
/**
|
|
* @name Grid
|
|
* @author Rick Hopkins
|
|
* @classDescription
|
|
* Sort table data
|
|
* MIT-style License.
|
|
*/
|
|
|
|
var Grid = new Class({
|
|
/** define some variables */
|
|
table: false,
|
|
headers: false,
|
|
data: false,
|
|
|
|
/**
|
|
* Initialize the object
|
|
*/
|
|
initialize: function(table){
|
|
this.table = table;
|
|
this.getHeaders();
|
|
},
|
|
|
|
/**
|
|
* Get the headers
|
|
*/
|
|
getHeaders: function(){
|
|
this.headers = this.table.getElements('thead tr th');
|
|
this.headers.each(function(h, index){
|
|
/*
|
|
h.store('asc', false);
|
|
if (h.hasClass('sort')) h.addEvent('click', function(){
|
|
if (h.retrieve('asc')) h.store('asc', false);
|
|
else h.store('asc', true);
|
|
this.sort(index);
|
|
}.bind(this));
|
|
*/
|
|
//replacement:
|
|
|
|
h.setProperty('rel',false);
|
|
if (h.hasClass('sort')) {
|
|
h.addEvent('click', function(){
|
|
if (h.getProperty('rel') == "true") h.setProperty('rel',"false");
|
|
else h.setProperty('rel', "true");
|
|
this.sort(index);
|
|
}.bind(this));
|
|
h.addEvent('mouseover', function(){
|
|
h.addClass("hover");
|
|
}.bind(this));
|
|
h.addEvent('mouseout', function(){
|
|
h.removeClass("hover");
|
|
}.bind(this));
|
|
}
|
|
}, this);
|
|
},
|
|
|
|
/**
|
|
* Get the table data
|
|
*/
|
|
getData: function(){
|
|
this.data = this.table.getElements('tbody tr');
|
|
},
|
|
|
|
/**
|
|
* Sort the data
|
|
* @param int index
|
|
*/
|
|
sort: function(index){
|
|
this.getData();
|
|
data = [];
|
|
sortType = this.headers[index].getProperty('axis');
|
|
// replaced following line
|
|
//asc = this.headers[index].retrieve('asc');
|
|
asc = this.headers[index].getProperty('rel');
|
|
|
|
if (this.data.length > 0) this.data.each(function(row, i){
|
|
cells = row.getElements('td');
|
|
if (cells.length < this.headers.length) return false;
|
|
// replaced following line
|
|
//value = cells[index].get('text');
|
|
value = cells[index].getText();
|
|
|
|
if (sortType == 'int' || sortType == 'float'){
|
|
if (value.contains('$') || value.contains(',')) value = value.replace(/\$/g, '').replace(/,/g, '').toFloat();
|
|
else value = value.toFloat();
|
|
} else if (sortType == 'date') value = Date.parse(value);
|
|
else if (sortType == "rel" ) value = cells[index].getProperty("rel");
|
|
|
|
data.push({'index': i, 'value': value, 'row': row});
|
|
}, this);
|
|
|
|
if (sortType == 'int' || sortType == 'float' || sortType == 'date') data.sort(this.sortNumeric);
|
|
else data.sort(this.sortCaseInsensitive);
|
|
if ( asc != "true" ) data.reverse();
|
|
|
|
this.data = [];
|
|
data.each(function(d, i){
|
|
this.data.push(d.row);
|
|
}, this);
|
|
|
|
this.data.each(function(row, i){
|
|
if (row.hasClass('r1')) row.removeClass('r1');
|
|
if (row.hasClass('r2')) row.removeClass('r2');
|
|
this.table.getElement('tbody').adopt(row.addClass((i % 2 == 0 ? 'r1' : 'r2')));
|
|
}, this);
|
|
},
|
|
|
|
/**
|
|
* Sort Numerical Values
|
|
* @param object a
|
|
* @param object b
|
|
*/
|
|
sortNumeric: function(a, b){
|
|
if ($type(a.value) != 'number') a.value = 0;
|
|
if ($type(b.value) != 'number') b.value = 0;
|
|
return a.value - b.value;
|
|
},
|
|
|
|
sortCaseInsensitive: function(a, b){
|
|
a.value = a.value.toLowerCase();
|
|
b.value = b.value.toLowerCase();
|
|
if (a.value == b.value) return 0;
|
|
if (a.value < b.value) return -1;
|
|
return 1;
|
|
}
|
|
}); |