From 9c2e407535390fce4557a059591a94b0e0acb91a Mon Sep 17 00:00:00 2001 From: Allan Jardine Date: Thu, 2 Apr 2015 20:32:26 +0100 Subject: [PATCH] Rewrite file size sorting and type detection plug-ins to use 1.10 style and updated code --- sorting/file-size.js | 43 ++++++++++++++++++------------------- type-detection/file-size.js | 40 ++++++++++++---------------------- 2 files changed, 35 insertions(+), 48 deletions(-) diff --git a/sorting/file-size.js b/sorting/file-size.js index f36c246..5440fb1 100644 --- a/sorting/file-size.js +++ b/sorting/file-size.js @@ -1,37 +1,36 @@ /** * When dealing with computer file sizes, it is common to append a post fix - * such as KB, MB or GB to a string in order to easily denote the order of + * such as B, KB, MB or GB to a string in order to easily denote the order of * magnitude of the file size. This plug-in allows sorting to take these - * indicates of size into account. A counterpart type detection plug-in - * is also available. + * indicates of size into account. + * + * A counterpart type detection plug-in is also available. * * @name File size - * @summary Sort abbreviated file sizes correctly (8MB, 4KB etc) - * @author _anjibman_ + * @summary Sort abbreviated file sizes correctly (8MB, 4KB, etc) + * @author Allan Jardine - datatables.net * * @example - * $('#example').dataTable( { + * $('#example').DataTable( { * columnDefs: [ * { type: 'file-size', targets: 0 } * ] * } ); */ - jQuery.extend( jQuery.fn.dataTableExt.oSort, { - "file-size-pre": function ( a ) { - var x = a.substring(0,a.length - 2); +jQuery.fn.dataTable.ext.type.order['file-size-pre'] = function ( data ) { + var units = data.replace( /[\d\.]/g, '' ).toLowerCase(); + var multiplier = 1; - var x_unit = (a.substring(a.length - 2, a.length) == "MB" ? - 1000 : (a.substring(a.length - 2, a.length) == "GB" ? 1000000 : 1)); - - return parseInt( x * x_unit, 10 ); - }, - - "file-size-asc": function ( a, b ) { - return ((a < b) ? -1 : ((a > b) ? 1 : 0)); - }, - - "file-size-desc": function ( a, b ) { - return ((a < b) ? 1 : ((a > b) ? -1 : 0)); + if ( units === 'kb' ) { + multiplier = 1000; } -} ); + else if ( units === 'mb' ) { + multiplier = 1000000; + } + else if ( units === 'gb' ) { + multiplier = 1000000000; + } + + return parseFloat( data ) * multiplier; +}; diff --git a/type-detection/file-size.js b/type-detection/file-size.js index 8cfc0d6..1ab4dab 100644 --- a/type-detection/file-size.js +++ b/type-detection/file-size.js @@ -1,36 +1,24 @@ /** - * Detect "file size" type columns automatically. Commonly used for computer + * Detect file size type columns automatically. Commonly used for computer * file sizes, this can allow sorting to take the order of magnitude indicated * by the label (GB etc) into account. * * @name File size - * @summary Detect abbreviated file size data (8MB, 4KB etc) - * @author _anjibman_ + * @summary Detect abbreviated file size data (8MB, 4KB, 3B, etc) + * @author Allan Jardine - datatables.net */ -jQuery.fn.dataTableExt.aTypes.unshift( - function ( sData ) - { - var sValidChars = "0123456789"; - var Char; - - /* Check the numeric part */ - for ( var i=0 ; i<(sData.length - 3) ; i++ ) - { - Char = sData.charAt(i); - if (sValidChars.indexOf(Char) == -1) - { - return null; - } - } +jQuery.fn.dataTable.ext.type.detect.unshift( function ( data ) { + if ( typeof data !== 'string' ) { + return null; + } - /* Check for size unit KB, MB or GB */ - if ( sData.substring(sData.length - 2, sData.length) == "KB" - || sData.substring(sData.length - 2, sData.length) == "MB" - || sData.substring(sData.length - 2, sData.length) == "GB" ) - { - return 'file-size'; - } + var units = data.replace( /[\d\.]/g, '' ).toLowerCase(); + if ( units !== '' && units !== 'b' && units !== 'kb' && units !== 'mb' && units !== 'gb' ) { return null; } -); + + return isNaN( parseFloat( data ) ) ? + null : + 'file-size'; +} ); \ No newline at end of file