Skip to content

Commit c401052

Browse files
committed
Initial refactor for 2.0.0
1 parent 290fa44 commit c401052

9 files changed

+223
-253
lines changed

Gruntfile.js

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,10 @@ module.exports = function(grunt) {
1717
dist: {
1818
src : [
1919
"<banner>",
20-
"src/filesize.js"
20+
"src/intro.js",
21+
"src/filesize.js",
22+
"src/options.js",
23+
"src/outro.js"
2124
],
2225
dest : "lib/filesize.js"
2326
}

lib/filesize.js

+107-122
Original file line numberDiff line numberDiff line change
@@ -6,148 +6,133 @@
66
* @license BSD-3 <https://raw.github.com/avoidwork/filesize.js/master/LICENSE>
77
* @link http://filesizejs.com
88
* @module filesize
9-
* @version 1.10.0
9+
* @version 2.0.0
1010
*/
1111
( function ( global ) {
12-
"use strict";
13-
14-
var base = 10,
15-
right = /\.(.*)/,
16-
bit = /b$/,
17-
bite = /^B$/,
18-
zero = /^0$/,
19-
options;
20-
21-
options = {
22-
all : {
23-
increments : [["B", 1], ["kb", 125], ["kB", 1000], ["Mb", 125000], ["MB", 1000000], ["Gb", 125000000], ["GB", 1000000000], ["Tb", 125000000000], ["TB", 1000000000000], ["Pb", 125000000000000], ["PB", 1000000000000000]],
24-
nth : 11
25-
},
26-
bitless : {
27-
increments : [["B", 1], ["kB", 1000], ["MB", 1000000], ["GB", 1000000000], ["TB", 1000000000000], ["PB", 1000000000000000]],
28-
nth : 6
29-
}
30-
};
31-
32-
/**
33-
* filesize
34-
*
35-
* @param {Mixed} arg String, Int or Float to transform
36-
* @param {Mixed} pos [Optional] Position to round to, defaults to 2 if shrt is ommitted, or `true` for shrthand output
37-
* @param {Boolean} bits [Optional] Determines if `bit` sizes are used for result calculation, default is true
38-
* @return {String} Readable file size String
39-
*/
40-
function filesize ( arg) {
41-
var result = "",
42-
bits = true,
43-
skip = false,
44-
i, neg, num, pos, shrt, size, sizes, suffix, z;
45-
46-
// Determining arguments
47-
if (arguments[3] !== undefined) {
48-
pos = arguments[1];
49-
shrt = arguments[2];
50-
bits = arguments[3];
51-
}
52-
else {
53-
typeof arguments[1] === "boolean" ? shrt = arguments[1] : pos = arguments[1];
54-
55-
if ( typeof arguments[2] === "boolean" ) {
56-
bits = arguments[2];
57-
}
58-
}
12+
"use strict";
5913

60-
if ( isNaN( arg ) || ( pos !== undefined && isNaN( pos ) ) ) {
61-
throw new Error("Invalid arguments");
62-
}
14+
var bit = /b$/,
15+
bite = /^B$/,
16+
radix = 10,
17+
right = /\.(.*)/,
18+
zero = /^0$/,
19+
options;
6320

64-
shrt = ( shrt === true );
65-
bits = ( bits === true );
66-
pos = shrt ? 1 : ( pos === undefined ? 2 : parseInt( pos, base ) );
67-
num = Number( arg );
68-
neg = ( num < 0 );
21+
/**
22+
* filesize
23+
*
24+
* @method filesize
25+
* @param {Mixed} arg String, Int or Float to transform
26+
* @param {Object} descriptor [Optional] Flags
27+
* @return {String} Readable file size String
28+
*/
29+
function filesize ( arg, descriptor ) {
30+
var result = "",
31+
skip = false,
32+
i = 6,
33+
base, bits, pos, neg, num, size, sizes, shrt, spacer, suffix, z;
34+
35+
if ( isNaN( arg ) ) {
36+
throw new Error( "Invalid arguments" );
37+
}
6938

70-
// Flipping a negative number to determine the size
71-
if ( neg ) {
72-
num = -num;
73-
}
39+
descriptor = descriptor || {};
40+
bits = ( descriptor.bits === true );
41+
shrt = ( descriptor["short"] === true );
42+
base = descriptor.base !== undefined ? descriptor.base : 10;
43+
pos = descriptor.pos !== undefined ? descriptor.pos : shrt ? 0 : 2;
44+
spacer = descriptor.spacer !== undefined ? descriptor.spacer : shrt ? "" : " ";
45+
num = Number( arg );
46+
neg = ( num < 0 );
47+
48+
// Flipping a negative number to determine the size
49+
if ( neg ) {
50+
num = -num;
51+
}
7452

75-
// Zero is now a special case because bytes divide by 1
76-
if ( num === 0 ) {
77-
if ( shrt ) {
78-
result = "0";
79-
}
80-
else {
81-
result = "0 B";
82-
}
53+
// Zero is now a special case because bytes divide by 1
54+
if ( num === 0 ) {
55+
if ( shrt ) {
56+
result = "0";
8357
}
8458
else {
85-
if ( bits ) {
86-
sizes = options.all.increments;
87-
i = options.all.nth;
88-
}
89-
else {
90-
sizes = options.bitless.increments;
91-
i = options.bitless.nth;
92-
}
93-
94-
while ( i-- ) {
95-
size = sizes[i][1];
96-
suffix = sizes[i][0];
97-
98-
if ( num >= size ) {
99-
// Treating bytes as cardinal
100-
if ( bite.test( suffix ) ) {
101-
skip = true;
102-
pos = 0;
103-
}
59+
result = "0 B";
60+
}
61+
}
62+
else {
63+
sizes = options[base][bits ? "bits" : "bytes"];
10464

105-
result = ( num / size ).toFixed( pos );
65+
while ( i-- ) {
66+
size = sizes[i][1];
67+
suffix = sizes[i][0];
10668

107-
if ( !skip && shrt ) {
108-
if ( bits && bit.test( suffix ) ) {
109-
suffix = suffix.toLowerCase();
110-
}
69+
if ( num >= size ) {
70+
// Treating bytes as cardinal
71+
if ( bite.test( suffix ) ) {
72+
skip = true;
73+
pos = 0;
74+
}
11175

112-
suffix = suffix.charAt( 0 );
113-
z = right.exec( result );
76+
result = ( num / size ).toFixed( pos );
11477

115-
if ( suffix === "k" ) {
116-
suffix = "K";
117-
}
78+
if ( !skip && shrt ) {
79+
if ( bits && bit.test( suffix ) ) {
80+
suffix = suffix.toLowerCase();
81+
}
11882

119-
if ( z !== null && z[1] !== undefined && zero.test( z[1] ) ) {
120-
result = parseInt( result, base );
121-
}
83+
suffix = suffix.charAt( 0 );
84+
z = right.exec( result );
12285

123-
result += suffix;
86+
if ( suffix === "k" ) {
87+
suffix = "K";
12488
}
125-
else if ( !shrt ) {
126-
result += " " + suffix;
89+
90+
if ( z !== null && z[1] !== undefined && zero.test( z[1] ) ) {
91+
result = parseInt( result, radix );
12792
}
128-
break;
12993
}
130-
}
131-
}
13294

133-
// Decorating a 'diff'
134-
if ( neg ) {
135-
result = "-" + result;
95+
result += spacer + suffix;
96+
break;
97+
}
13698
}
137-
138-
return result;
13999
}
140100

141-
// CommonJS, AMD, script tag
142-
if ( typeof exports !== "undefined" ) {
143-
module.exports = filesize;
144-
}
145-
else if ( typeof define === "function" ) {
146-
define( function () {
147-
return filesize;
148-
});
101+
// Decorating a 'diff'
102+
if ( neg ) {
103+
result = "-" + result;
149104
}
150-
else {
151-
global.filesize = filesize;
105+
106+
return result;
107+
}
108+
109+
/**
110+
* Size options
111+
*
112+
* @type {Object}
113+
*/
114+
options = {
115+
2 : {
116+
bits : [["B", 1], ["kb", 128], ["Mb", 131072], ["Gb", 134217728], ["Tb", 137438953472], ["Pb", 140737488355328]],
117+
bytes : [["B", 1], ["kB", 1024], ["MB", 1048576], ["GB", 1073741824], ["TB", 1099511627776], ["PB", 1125899906842624]]
118+
},
119+
10 : {
120+
bits : [["B", 1], ["kb", 125], ["Mb", 125000], ["Gb", 125000000], ["Tb", 125000000000], ["Pb", 125000000000000]],
121+
bytes : [["B", 1], ["kB", 1000], ["MB", 1000000], ["GB", 1000000000], ["TB", 1000000000000], ["PB", 1000000000000000]]
152122
}
153-
})( this );
123+
};
124+
125+
// CommonJS, AMD, script tag
126+
if ( typeof exports !== "undefined" ) {
127+
module.exports = filesize;
128+
}
129+
else if ( typeof define === "function" ) {
130+
define( function () {
131+
return filesize;
132+
} );
133+
}
134+
else {
135+
global.filesize = filesize;
136+
}
137+
138+
} )( this );

lib/filesize.map

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"version":3,
33
"file":"filesize.min.js",
44
"lineCount":10,
5-
"mappings":"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",
5+
"mappings":"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",
66
"sources":["filesize.js"],
7-
"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"]
7+
"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"]
88
}

lib/filesize.min.js

+4-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "filesize",
33
"description": "JavaScript library to generate a human readable String describing the file size",
4-
"version": "1.10.0",
4+
"version": "2.0.0",
55
"homepage": "http://filesizejs.com",
66
"author": {
77
"name": "Jason Mulligan",

0 commit comments

Comments
 (0)