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); |