86 lines
		
	
	
		
			No EOL
		
	
	
		
			2.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			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); | 
