mistserver/lsp/plugins/cattablesort.js
2015-02-12 17:01:24 +01:00

86 lines
No EOL
2.4 KiB
JavaScript

// by Carina van der Meer for DDVtech,
// based off the "Stupid jQuery table plugin" by JoeQuery (http://joequery.github.io/Stupid-Table-Plugin/)
(function($){
$.fn.stupidtable = function(){
var $table = $(this);
$table.on('click', 'thead th', function() {
$(this).stupidsort();
});
}
$.fn.stupidsort = function(){
var $th = $(this);
var $table = $th.closest('table');
var $tbody = $table.children('tbody');
var $trs = $tbody.children('tr');
var datatype = $th.attr('data-sort-type');
if (!datatype) { return; } //no data type set? => don't sort by this column
var sortasc = true;
if ($th.hasClass('sorting-asc')) { sortasc = false; }
//find the index of the column that needs sorting
var col_index = 0;
$th.prevAll().each(function(){
var colspan = $(this).attr('colspan');
col_index += (colspan ? Number(colspan) : 1);
});
//a function to return the values that need sorting
function getsortval(tr) {
var $tds = $(tr).children('td,th');
//find the correct td
var i = 0;
var $td;
$tds.each(function(){
if (i == col_index) {
$td = $(this);
return false; //break
}
var colspan = $(this).attr('colspan');
i += (colspan ? Number(colspan) : 1);
});
//get the value
var val;
if (typeof $td.data('sort-value') != 'undefined') {
val = $td.data('sort-value');
}
else if (typeof $td.attr('data-sort-value') != 'undefined') {
val = $td.attr('data-sort-value');
}
else {
val = $td.text();
}
//cast to the datatype
switch (datatype) {
case 'string':
case 'string-ins':
//always sort strings case insensitive
val = String(val).toLowerCase();
break;
case 'int':
val = parseInt(Number(val));
break;
case 'float':
val = Number(val);
break;
}
return val;
}
//do the actual sort
$trs.sort(function(a,b){
var factor = (sortasc ? 1 : -1);
a = getsortval(a);
b = getsortval(b);
if (a > b) { return factor * 1; }
if (a < b) { return factor * -1; }
return 0;
})
$tbody.append($trs);
$table.find('thead th').removeClass('sorting-asc').removeClass('sorting-desc')
$th.addClass((sortasc ? 'sorting-asc' : 'sorting-desc'));
}
})(jQuery);