all files / montage/core/converter/ bytes-converter.js

100% Statements 18/18
50% Branches 2/4
100% Functions 5/5
100% Lines 18/18
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122                                                                                                                                                                                                               
/**
 * @module montage/core/converter/bytes-converter
 * @requires montage/core/converter/converter
 * @requires montage/core/converter/number-converter
 */
var Converter = require("./converter").Converter;
var _numericValueToString = require("./number-converter")._numericValueToString;
var _stringToNumericValue = require("./number-converter").stringToNumericValue;
var NUMERIC_SCALES_BINARY_ = require("./number-converter").NUMERIC_SCALES_BINARY_;
var isDef = require("./converter").isDef;
 
var NUMERIC_SCALE_PREFIXES_BYTES = [
    'P', 'T', 'G', 'M', 'K', '', 'm', 'u', 'n'
];
 
/**
 * Converts a string to number of bytes, taking into account the units.
 * Binary conversion.
 * @function
 * @param {string} stringValue String to be converted to numeric value.
 * @returns {number} Numeric value for string.
 * @private
 */
var stringToNumBytes = function (stringValue) {
    return _stringToNumericValue(stringValue, NUMERIC_SCALES_BINARY_);
};
 
/**
 * Converts number of bytes to string representation. Binary conversion.
 * Default is to return the additional 'B' suffix, e.g. '10.5KB' to minimize
 * confusion with counts that are scaled by powers of 1000.
 * @function
 * @param {number} val Value to be converted.
 * @param {?number} decimals=2 The number of decimals to use.
 * Defaults to 2.
 * @param {?boolean} suffix=true If true, include trailing 'B' in returned
 * string. Default is true.
 * @returns {string} String representation of number of bytes.
 * @private
 */
var numBytesToString = function (val, opt_decimals, opt_suffix) {
    var suffix = '';
    Eif (!isDef(opt_suffix) || opt_suffix) {
        suffix = 'B';
    }
    return _numericValueToString(val, NUMERIC_SCALES_BINARY_, opt_decimals, suffix, NUMERIC_SCALE_PREFIXES_BYTES);
};
 
/**
 * Formats a number of bytes in human readable form: 54, 450K, 1.3M, 5G etc.
 * @function
 * @param {number} bytes The number of bytes to show.
 * @param {number} decimals=2 The number of decimals to use.
 * Defaults to 2.
 * @returns {string} The human readable form of the byte size.
 * @private
 */
var fileSize = function (bytes, opt_decimals) {
    return numBytesToString(bytes, opt_decimals, false);
};
 
/**
 * @class BytesConverter
 * @classdesc Converts a numeric value to byte format (for example, 2048 is
 * converted to 2MB).
 * @extends Converter
 */
exports.BytesConverter = Converter.specialize( /** @lends BytesConverter# */ {
 
    /**
     * The number of decimals to include in the formatted value. Default is 2.
     * @type {Property}
     * @default {number} 2
     */
    decimals: {
        value: 2
    },
 
    /**
     * Converts the specified value to byte format.
     * @function
     * @param {Property} v The value to format.
     * @returns {string} The value converted to byte format.
     * @example
     * var Converter = require("./converter").Converter;
     * var BytesConverter = require("./converter").BytesConverter;
     * var bytes = "12341234";
     * var byteconverter = new BytesConverter();
     * console.log("Converted: " + byteconverter.convert(bytes));
     * console.log("Reverted: " + byteconverter.revert(bytes));
     * // Converted: 11.77MB
     * // Reverted: 12341234
     */
    convert: {
        value: function (v) {
            return fileSize(v, this.decimals);
        }
    },
 
    /**
     * Reverts a formatted byte string to a standard number.
     * @function
     * @param {string} v The value to revert.
     * @returns {string} v
     * @see BytesConverter#convert
     * @example
     * var Converter= require("./converter").Converter;
     * var BytesConverter = require("./converter").BytesConverter;
     * var bytes = "11.77MB";
     * var byteconverter = new BytesConverter();
     * console.log("Reverted: " + byteconverter.revert(bytes));
     * // Reverted: 12341234
     */
    revert: {
        value: function (v) {
            return stringToNumBytes(v);
        }
    }
 
});