UNPKG

tablesort

Version:

A sorting component for HTML tables

67 lines (56 loc) 1.6 kB
// Filesizes. e.g. '5.35 K', '10 MB', '12.45 GB', or '4.67 TiB' (function(){ var compareNumber = function(a, b) { a = parseFloat(a); b = parseFloat(b); a = isNaN(a) ? 0 : a; b = isNaN(b) ? 0 : b; return a - b; }, cleanNumber = function(i) { return i.replace(/[^\-?0-9.]/g, ''); }, // Returns suffix multiplier // Ex. suffix2num('KB') -> 1000 // Ex. suffix2num('KiB') -> 1024 suffix2num = function(suffix) { suffix = suffix.toLowerCase(); var base = suffix[1] === 'i' ? 1024 : 1000; switch(suffix[0]) { case 'k': return Math.pow(base, 2); case 'm': return Math.pow(base, 3); case 'g': return Math.pow(base, 4); case 't': return Math.pow(base, 5); case 'p': return Math.pow(base, 6); case 'e': return Math.pow(base, 7); case 'z': return Math.pow(base, 8); case 'y': return Math.pow(base, 9); default: return base; } }, // Converts filesize to bytes // Ex. filesize2num('123 KB') -> 123000 // Ex. filesize2num('123 KiB') -> 125952 filesize2num = function(filesize) { var matches = filesize.match(/^(\d+(\.\d+)?) ?((K|M|G|T|P|E|Z|Y|B$)i?B?)$/i); var num = parseFloat(cleanNumber(matches[1])), suffix = matches[3]; return num * suffix2num(suffix); }; Tablesort.extend('filesize', function(item) { return /^\d+(\.\d+)? ?(K|M|G|T|P|E|Z|Y|B$)i?B?$/i.test(item); }, function(a, b) { a = filesize2num(a); b = filesize2num(b); return compareNumber(b, a); }); }());