49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			49 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * The following plug-in uses a modified version of the [naturalSort() function by Jim
 | 
						|
 * Palmer](http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm-with-unicode-support) to provide natural sorting in DataTables.
 | 
						|
 *
 | 
						|
 *  @name naturalsort.js
 | 
						|
 *  @summary Sort software version number with a mix of numbers and letters with natural sort.
 | 
						|
 *  @author [Jim Palmer](http://www.overset.com/2008/09/01/javascript-natural-sort-algorithm-with-unicode-support)
 | 
						|
 *
 | 
						|
 *  @example
 | 
						|
 *    $('#example').dataTable( {
 | 
						|
 *       columnDefs: [
 | 
						|
 *         { type: 'versionsort', targets: 0 }
 | 
						|
 *       ]
 | 
						|
 *    } );
 | 
						|
 */
 | 
						|
 | 
						|
function pad(datum, size) {
 | 
						|
    var s = "000000000" + datum;
 | 
						|
    return s.substr(s.length-size);
 | 
						|
}
 | 
						|
 | 
						|
(function() {
 | 
						|
 | 
						|
/*
 | 
						|
 * Natural Sort algorithm for Javascript - Version 0.7 - Released under MIT license
 | 
						|
 * Author: Jim Palmer (based on chunking idea from Dave Koelle)
 | 
						|
 */
 | 
						|
/*jshint unused:false */
 | 
						|
function versionSort (a, b) {
 | 
						|
    "use strict";
 | 
						|
    var pada = a.split(/(\D)/).map(x => pad(x, 5)).join('');
 | 
						|
    var padb = b.split(/(\D)/).map(x => pad(x, 5)).join('');
 | 
						|
    if ( pada < padb ) { return -1; }
 | 
						|
    else if ( pada > padb ) { return 1; }
 | 
						|
    return 0;
 | 
						|
};
 | 
						|
 | 
						|
jQuery.extend( jQuery.fn.dataTableExt.oSort, {
 | 
						|
    "versionsort-asc": function ( a, b ) {
 | 
						|
        return versionSort(a,b);
 | 
						|
    },
 | 
						|
 | 
						|
    "versionsort-desc": function ( a, b ) {
 | 
						|
        return versionSort(a,b) * -1;
 | 
						|
    }
 | 
						|
} );
 | 
						|
 | 
						|
}());
 |