Skip to content

Commit

Permalink
Initial refactor for 2.0.0
Browse files Browse the repository at this point in the history
  • Loading branch information
avoidwork committed Oct 12, 2013
1 parent 290fa44 commit c401052
Show file tree
Hide file tree
Showing 9 changed files with 223 additions and 253 deletions.
5 changes: 4 additions & 1 deletion Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ module.exports = function(grunt) {
dist: {
src : [
"<banner>",
"src/filesize.js"
"src/intro.js",
"src/filesize.js",
"src/options.js",
"src/outro.js"
],
dest : "lib/filesize.js"
}
Expand Down
229 changes: 107 additions & 122 deletions lib/filesize.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,148 +6,133 @@
* @license BSD-3 <https://raw.github.com/avoidwork/filesize.js/master/LICENSE>
* @link http://filesizejs.com
* @module filesize
* @version 1.10.0
* @version 2.0.0
*/
( function ( global ) {
"use strict";

var base = 10,
right = /\.(.*)/,
bit = /b$/,
bite = /^B$/,
zero = /^0$/,
options;

options = {
all : {
increments : [["B", 1], ["kb", 125], ["kB", 1000], ["Mb", 125000], ["MB", 1000000], ["Gb", 125000000], ["GB", 1000000000], ["Tb", 125000000000], ["TB", 1000000000000], ["Pb", 125000000000000], ["PB", 1000000000000000]],
nth : 11
},
bitless : {
increments : [["B", 1], ["kB", 1000], ["MB", 1000000], ["GB", 1000000000], ["TB", 1000000000000], ["PB", 1000000000000000]],
nth : 6
}
};

/**
* filesize
*
* @param {Mixed} arg String, Int or Float to transform
* @param {Mixed} pos [Optional] Position to round to, defaults to 2 if shrt is ommitted, or `true` for shrthand output
* @param {Boolean} bits [Optional] Determines if `bit` sizes are used for result calculation, default is true
* @return {String} Readable file size String
*/
function filesize ( arg) {
var result = "",
bits = true,
skip = false,
i, neg, num, pos, shrt, size, sizes, suffix, z;

// Determining arguments
if (arguments[3] !== undefined) {
pos = arguments[1];
shrt = arguments[2];
bits = arguments[3];
}
else {
typeof arguments[1] === "boolean" ? shrt = arguments[1] : pos = arguments[1];

if ( typeof arguments[2] === "boolean" ) {
bits = arguments[2];
}
}
"use strict";

if ( isNaN( arg ) || ( pos !== undefined && isNaN( pos ) ) ) {
throw new Error("Invalid arguments");
}
var bit = /b$/,
bite = /^B$/,
radix = 10,
right = /\.(.*)/,
zero = /^0$/,
options;

shrt = ( shrt === true );
bits = ( bits === true );
pos = shrt ? 1 : ( pos === undefined ? 2 : parseInt( pos, base ) );
num = Number( arg );
neg = ( num < 0 );
/**
* filesize
*
* @method filesize
* @param {Mixed} arg String, Int or Float to transform
* @param {Object} descriptor [Optional] Flags
* @return {String} Readable file size String
*/
function filesize ( arg, descriptor ) {
var result = "",
skip = false,
i = 6,
base, bits, pos, neg, num, size, sizes, shrt, spacer, suffix, z;

if ( isNaN( arg ) ) {
throw new Error( "Invalid arguments" );
}

// Flipping a negative number to determine the size
if ( neg ) {
num = -num;
}
descriptor = descriptor || {};
bits = ( descriptor.bits === true );
shrt = ( descriptor["short"] === true );
base = descriptor.base !== undefined ? descriptor.base : 10;
pos = descriptor.pos !== undefined ? descriptor.pos : shrt ? 0 : 2;
spacer = descriptor.spacer !== undefined ? descriptor.spacer : shrt ? "" : " ";
num = Number( arg );
neg = ( num < 0 );

// Flipping a negative number to determine the size
if ( neg ) {
num = -num;
}

// Zero is now a special case because bytes divide by 1
if ( num === 0 ) {
if ( shrt ) {
result = "0";
}
else {
result = "0 B";
}
// Zero is now a special case because bytes divide by 1
if ( num === 0 ) {
if ( shrt ) {
result = "0";
}
else {
if ( bits ) {
sizes = options.all.increments;
i = options.all.nth;
}
else {
sizes = options.bitless.increments;
i = options.bitless.nth;
}

while ( i-- ) {
size = sizes[i][1];
suffix = sizes[i][0];

if ( num >= size ) {
// Treating bytes as cardinal
if ( bite.test( suffix ) ) {
skip = true;
pos = 0;
}
result = "0 B";
}
}
else {
sizes = options[base][bits ? "bits" : "bytes"];

result = ( num / size ).toFixed( pos );
while ( i-- ) {
size = sizes[i][1];
suffix = sizes[i][0];

if ( !skip && shrt ) {
if ( bits && bit.test( suffix ) ) {
suffix = suffix.toLowerCase();
}
if ( num >= size ) {
// Treating bytes as cardinal
if ( bite.test( suffix ) ) {
skip = true;
pos = 0;
}

suffix = suffix.charAt( 0 );
z = right.exec( result );
result = ( num / size ).toFixed( pos );

if ( suffix === "k" ) {
suffix = "K";
}
if ( !skip && shrt ) {
if ( bits && bit.test( suffix ) ) {
suffix = suffix.toLowerCase();
}

if ( z !== null && z[1] !== undefined && zero.test( z[1] ) ) {
result = parseInt( result, base );
}
suffix = suffix.charAt( 0 );
z = right.exec( result );

result += suffix;
if ( suffix === "k" ) {
suffix = "K";
}
else if ( !shrt ) {
result += " " + suffix;

if ( z !== null && z[1] !== undefined && zero.test( z[1] ) ) {
result = parseInt( result, radix );
}
break;
}
}
}

// Decorating a 'diff'
if ( neg ) {
result = "-" + result;
result += spacer + suffix;
break;
}
}

return result;
}

// CommonJS, AMD, script tag
if ( typeof exports !== "undefined" ) {
module.exports = filesize;
}
else if ( typeof define === "function" ) {
define( function () {
return filesize;
});
// Decorating a 'diff'
if ( neg ) {
result = "-" + result;
}
else {
global.filesize = filesize;

return result;
}

/**
* Size options
*
* @type {Object}
*/
options = {
2 : {
bits : [["B", 1], ["kb", 128], ["Mb", 131072], ["Gb", 134217728], ["Tb", 137438953472], ["Pb", 140737488355328]],
bytes : [["B", 1], ["kB", 1024], ["MB", 1048576], ["GB", 1073741824], ["TB", 1099511627776], ["PB", 1125899906842624]]
},
10 : {
bits : [["B", 1], ["kb", 125], ["Mb", 125000], ["Gb", 125000000], ["Tb", 125000000000], ["Pb", 125000000000000]],
bytes : [["B", 1], ["kB", 1000], ["MB", 1000000], ["GB", 1000000000], ["TB", 1000000000000], ["PB", 1000000000000000]]
}
})( this );
};

// CommonJS, AMD, script tag
if ( typeof exports !== "undefined" ) {
module.exports = filesize;
}
else if ( typeof define === "function" ) {
define( function () {
return filesize;
} );
}
else {
global.filesize = filesize;
}

} )( this );
4 changes: 2 additions & 2 deletions lib/filesize.map
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"version":3,
"file":"filesize.min.js",
"lineCount":10,
"mappings":"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",
"mappings":"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",
"sources":["filesize.js"],
"names":["global","filesize","arg","result","bits","skip","pos","shrt","size","sizes","undefined","isNaN","Error","parseInt","base","num","Number","neg","options","all","increments","i","nth","bitless","suffix","bite","test","toFixed","bit","toLowerCase","charAt","z","right","exec","zero","exports","module","define"]
"names":["global","filesize","arg","descriptor","result","skip","i","base","bits","pos","neg","num","size","sizes","shrt","spacer","isNaN","Error","undefined","Number","options","suffix","bite","test","toFixed","bit","toLowerCase","charAt","z","right","exec","zero","parseInt","radix","exports","module","define"]
}
8 changes: 4 additions & 4 deletions lib/filesize.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "filesize",
"description": "JavaScript library to generate a human readable String describing the file size",
"version": "1.10.0",
"version": "2.0.0",
"homepage": "http://filesizejs.com",
"author": {
"name": "Jason Mulligan",
Expand Down

0 comments on commit c401052

Please sign in to comment.