From e5fcf4496f03d9acebfdb423bc73cdd9fc9ecdd6 Mon Sep 17 00:00:00 2001 From: Philippe Vaucher Date: Wed, 11 Nov 2015 18:27:31 +0100 Subject: [PATCH] Fix file-size plugin with string containing spaces --- sorting/file-size.js | 32 ++++++++++++-------------------- type-detection/file-size.js | 14 +++++--------- 2 files changed, 17 insertions(+), 29 deletions(-) diff --git a/sorting/file-size.js b/sorting/file-size.js index 1685105..017a5a0 100644 --- a/sorting/file-size.js +++ b/sorting/file-size.js @@ -3,7 +3,7 @@ * 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. * * @name File size @@ -19,24 +19,16 @@ */ jQuery.fn.dataTable.ext.type.order['file-size-pre'] = function ( data ) { - var units = data.replace( /[\d\.\s]/g, '' ).toLowerCase(); - var multiplier = 1; - - if ( units === 'kb' ) { - multiplier = 1000; - } - else if ( units === 'mb' ) { - multiplier = 1000000; - } - else if ( units === 'gb' ) { - multiplier = 1000000000; - } - else if ( units === 'tb' ) { - multiplier = 1000000000000; - } - else if ( units === 'pb' ) { - multiplier = 1000000000000000; - } + var matches = data.match( /^(\d+(?:\.\d+)?)\s*([a-z]+)/i ); + var multipliers = { + b: 1, + kb: 1000, + mb: 1000000, + gb: 1000000000, + tb: 1000000000000, + pb: 1000000000000000 + }; - return parseFloat( data ) * multiplier; + var multiplier = multipliers[matches[2].toLowerCase()]; + return parseFloat( matches[1] ) * multiplier; }; diff --git a/type-detection/file-size.js b/type-detection/file-size.js index 1ab4dab..2100deb 100644 --- a/type-detection/file-size.js +++ b/type-detection/file-size.js @@ -13,12 +13,8 @@ jQuery.fn.dataTable.ext.type.detect.unshift( function ( data ) { return null; } - 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 + var matches = data.match( /^(\d+(?:\.\d+)?)\s*([a-z]+)/i ); + var units = ['b', 'kb', 'mb', 'gb', 'tb', 'pb']; + var is_file_size = ( matches && jQuery.inArray(matches[2].toLowerCase(), units) !== -1 ); + return is_file_size ? 'file-size' : null; +} );