helper.format.unit.js 2.36 KB
/*
 * ADOBE CONFIDENTIAL
 *
 * Copyright 2016 Adobe Systems Incorporated
 * All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated and its
 * suppliers and may be covered by U.S. and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 */
/* globals use */
use(function() {
    'use strict';

    /**
     * String array of units for digital information in metric form (multiples of 1000 bytes)
     */
    var UNITS_DI_METRIC = [1000, 'bytes', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];

    /**
     * String array of units for digital information in IEC form (multiples of 1024 bytes)
     */
    var UNITS_DI_IEC = [1024, 'bytes', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB'];


    /**
     * Formats the given value to best unit available.
     *
     * @param {Number} value The value to format
     * @param {Array} units Array of units. The first unit specifies the base.
     * @param {Number} decimals The number of decimals to show, if required.
     * @return {String} the formatted string.
     */
    function formatUnit(value, units, decimals) {
        if (typeof value === 'undefined') {
            return 'NaN';
        }
        if (typeof units === 'undefined') {
            units = UNITS_DI_IEC;
        }
        var sign = '';
        var base = units[0];
        var i = 1;
        if (value < 0) {
            value = -value;
            sign = '-';
        }
        while (value >= base && i < units.length - 1) {
            value /= base;
            i++;
        }
        return sign + value.toFixed(decimals) + ' ' + units[i];
    }

    /*eslint-disable */
    var units = this.units || UNITS_DI_IEC;
    var value = this.value;
    var decimals = this.decimals || 2;
    /*eslint-enable */

    return {
        UNITS_DI_METRIC: UNITS_DI_METRIC,

        UNITS_DI_IEC: UNITS_DI_IEC,

        formattedUnit: function() {
            return formatUnit(value, units, decimals);
        },

        formatUnit: formatUnit
    };

});