123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- /**
- * filesize
- *
- * @author Jason Mulligan <jason.mulligan@avoidwork.com>
- * @copyright 2014 Jason Mulligan
- * @license BSD-3 <https://raw.github.com/avoidwork/filesize.js/master/LICENSE>
- * @link http://filesizejs.com
- * @module filesize
- * @version 2.0.4
- */
- ( function ( global ) {
- "use strict";
- var bit = /b$/,
- radix = 10,
- left = /.*\./,
- zero = /^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,
- val = 0,
- e, base, bits, ceil, neg, num, round, unix, spacer, suffix, z, suffixes;
- if ( isNaN( arg ) ) {
- throw new Error( "Invalid arguments" );
- }
- descriptor = descriptor || {};
- bits = ( descriptor.bits === true );
- unix = ( descriptor.unix === true );
- base = descriptor.base !== undefined ? descriptor.base : unix ? 2 : 10;
- round = descriptor.round !== undefined ? descriptor.round : unix ? 1 : 2;
- spacer = descriptor.spacer !== undefined ? descriptor.spacer : unix ? "" : " ";
- suffixes = descriptor.suffixes !== undefined ? descriptor.suffixes : {};
- num = Number( arg );
- neg = ( num < 0 );
- ceil = base > 2 ? 1000 : 1024;
- // 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 ( unix ) {
- result = "0";
- }
- else {
- suffix = "B";
- result = "0" + spacer + ( suffixes[suffix] || suffix );
- }
- }
- else {
- e = Math.floor( Math.log( num ) / Math.log( 1000 ) );
- // Exceeding supported length, time to reduce & multiply
- if ( e > 8 ) {
- val = val * ( 1000 * ( e - 8 ) );
- e = 8;
- }
- if ( base === 2 ) {
- val = num / Math.pow( 2, ( e * 10 ) );
- }
- else {
- val = num / Math.pow( 1000, e );
- }
- if ( bits ) {
- val = ( val * 8 );
- if ( val > ceil ) {
- val = val / ceil;
- e++;
- }
- }
- result = val.toFixed( e > 0 ? round : 0 );
- suffix = si[bits ? "bits" : "bytes"][e];
- if ( !skip && unix ) {
- if ( bits && bit.test( suffix ) ) {
- suffix = suffix.toLowerCase();
- }
- suffix = suffix.charAt( 0 );
- z = result.replace( left, "" );
- if ( suffix === "B" ) {
- suffix = "";
- }
- else if ( !bits && suffix === "k" ) {
- suffix = "K";
- }
- if ( zero.test( z ) ) {
- result = parseInt( result, radix ).toString();
- }
- result += spacer + ( suffixes[suffix] || suffix );
- }
- else if ( !unix ) {
- result += spacer + ( suffixes[suffix] || suffix );
- }
- }
- // Decorating a 'diff'
- if ( neg ) {
- result = "-" + result;
- }
- return result;
- }
- /**
- * SI suffixes
- *
- * @type {Object}
- */
- var si = {
- bits : ["B", "kb", "Mb", "Gb", "Tb", "Pb", "Eb", "Zb", "Yb"],
- bytes : ["B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"]
- };
- // 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 );
|