Source: plugins/rivets/formatters.js

define(function () {
    'use strict';

    /**
     * @namespace formatters
     */
    return {
        booleantoenabled : booleantoenabled,
        centsToDollars: centsToDollars,
        equals: equals,
        existsOr: existsOr,
        humanize: {
            read : read,
            publish : publish
        },
        includes: includes,
        joinWithComma: joinWithComma,
        jsonAsString: jsonAsString,
        limit: limit,
        pluralize: pluralize,
        prefix : prefix,
        prettyDate: prettyDate,
        prettyDateNoTime : prettyDateNoTime,
        prettyFileSize: prettyFileSize,
        secondsToTime: secondsToTime,
        spaceBefore: spaceBefore,
        spaceAfter: spaceAfter,
        suffix: suffix,
        withColon: withColon,
        withComma : withComma,
        withForwardSlash: withForwardSlash
    };

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function withComma(value) {
        return value + ', ';
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {*|string|join|join|join}
     */
    function joinWithComma(value) {
        return value.join(', ');
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @param arg
     * @returns {string}
     */
    function pluralize(value, arg) {
        switch (value) {
        case 0 :
            return value + ' ' + arg + 's';
        case 1 :
            return value + ' ' + arg;
        default:
            return value + ' ' + arg + 's';
        }
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function withForwardSlash(value) {
        return value + ' / ';
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function withColon(value) {
        return value + ' : ';
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function spaceAfter(value) {
        return value + ' ';
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function spaceBefore(value) {
        return ' ' + value;
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function prettyFileSize(value) {
        var sizes = ['Bytes', 'KB', 'MB', 'GB', 'TB'],
            i;
        value = parseInt(value, 10);
        if (value === 0) {
            return '0 Bytes';
        }
        i = Math.floor(Math.log(value) / Math.log(1024));
        return Math.round(value / Math.pow(1024, i), 2) + ' ' + sizes[i];
    }

    /**
     * @memberof formatters
     * @instance
     * @param dateStr
     * @returns {string}
     */
    function prettyDate(dateStr) {
        var date = new Date(dateStr);
        return date.toLocaleDateString() + ' ' + date.toLocaleTimeString();
    }

    /**
     * @memberof formatters
     * @instance
     * @param dateStr
     * @returns {string}
     */
    function prettyDateNoTime(dateStr) {
        var dateString = new Date(dateStr);
        return (dateString.getMonth() + 1) + '/' + dateString.getDate() + '/' + dateString.getFullYear();
    }

    /**
     * @memberof formatters
     * @instance
     * @param secs
     * @returns {string}
     */
    function secondsToTime(secs) {
        var SECONDS_IN_MINUTE = 60,
            SECONDS_IN_HOUR = SECONDS_IN_MINUTE * 60,
            HOUR = 'hr',
            MINUTE = 'min',
            SECOND = 'sec',
            hours = Math.floor(secs / SECONDS_IN_HOUR),
            divisor_for_minutes = secs % SECONDS_IN_HOUR,
            minutes = Math.floor(divisor_for_minutes / SECONDS_IN_MINUTE),
            divisor_for_seconds = divisor_for_minutes % SECONDS_IN_MINUTE,
            seconds = Math.ceil(divisor_for_seconds),
            time = [];

        if (0 !== hours) { time.push(pluralize(hours, HOUR)); }
        if (0 !== minutes) { time.push(pluralize(minutes, MINUTE)); }
        if (0 !== seconds) { time.push(pluralize(seconds, SECOND)); }

        return time.join(' ');
    }

    /**
     * @memberof formatters
     * @instance
     * @param amount
     * @returns {string}
     */
    function centsToDollars(amount) {
        return '$' + ((amount / 100).toFixed(2));
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @param args
     * @returns {boolean}
     */
    function equals(value, args) {
        return (value == args);
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @param args
     * @returns {*}
     */
    function existsOr(value, args) {
        return value ? value : args;
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @param args
     * @returns {Array|string|*|Blob|slice|slice}
     */
    function limit(value, args) {
        return value.slice(0, args);
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function read(value) {
        return (value) ? value.charAt(0).toUpperCase() + value.slice(1) : '';
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function publish(value) {
        return (value) ? value.charAt(0).toLowerCase() + value.slice(1) : '';
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {*}
     */
    function jsonAsString(value) {
        return JSON.stringify(value, null, 4);
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @returns {string}
     */
    function booleantoenabled(value) {
        return value ? 'Enabled' : 'Disabled';
    }

    /**
     * @memberof formatters
     * @instance
     * @returns {boolean}
     */
    function includes() {
        var args = Array.prototype.slice.call(arguments),
            stringToCompare = args.shift();

        if (args.indexOf(stringToCompare) != -1) {
            return true;
        } else {
            return false;
        }
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @param pref
     * @returns {*}
     */
    function prefix(value, pref) {
        return pref + value;
    }

    /**
     * @memberof formatters
     * @instance
     * @param value
     * @param suff
     * @returns {*}
     */
    function suffix(value, suff) {
        return suff + value;
    }
});