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