All Downloads are FREE. Search and download functionalities are using the official Maven repository.

META-INF.resources.bower_components.globalize.dist.globalize-runtime.js Maven / Gradle / Ivy

/**
 * Globalize Runtime v1.2.3
 *
 * http://github.com/jquery/globalize
 *
 * Copyright jQuery Foundation and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 *
 * Date: 2017-03-17T01:41Z
 */
/*!
 * Globalize Runtime v1.2.3 2017-03-17T01:41Z Released under the MIT license
 * http://git.io/TrdQbw
 */
(function (root, factory) {

    // UMD returnExports
    if (typeof define === "function" && define.amd) {

        // AMD
        define(factory);
    } else if (typeof exports === "object") {

        // Node, CommonJS
        module.exports = factory();
    } else {

        // Globalize
        root.Globalize = factory();
    }
}(this, function () {


    /**
     * A toString method that outputs meaningful values for objects or arrays and
     * still performs as fast as a plain string in case variable is string, or as
     * fast as `"" + number` in case variable is a number.
     * Ref: http://jsperf.com/my-stringify
     */
    var toString = function (variable) {
        return typeof variable === "string" ? variable : (typeof variable === "number" ? "" +
            variable : JSON.stringify(variable));
    };


    /**
     * formatMessage( message, data )
     *
     * @message [String] A message with optional {vars} to be replaced.
     *
     * @data [Array or JSON] Object with replacing-variables content.
     *
     * Return the formatted message. For example:
     *
     * - formatMessage( "{0} second", [ 1 ] ); // 1 second
     *
     * - formatMessage( "{0}/{1}", ["m", "s"] ); // m/s
     *
     * - formatMessage( "{name} <{email}>", {
 *     name: "Foo",
 *     email: "[email protected]"
 *   }); // Foo 
     */
    var formatMessage = function (message, data) {

        // Replace {attribute}'s
        message = message.replace(/{[0-9a-zA-Z-_. ]+}/g, function (name) {
            name = name.replace(/^{([^}]*)}$/, "$1");
            return toString(data[name]);
        });

        return message;
    };


    var objectExtend = function () {
        var destination = arguments[0],
            sources = [].slice.call(arguments, 1);

        sources.forEach(function (source) {
            var prop;
            for (prop in source) {
                destination[prop] = source[prop];
            }
        });

        return destination;
    };


    var createError = function (code, message, attributes) {
        var error;

        message = code + (message ? ": " + formatMessage(message, attributes) : "");
        error = new Error(message);
        error.code = code;

        objectExtend(error, attributes);

        return error;
    };


// Based on http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery
    var stringHash = function (str) {
        return [].reduce.call(str, function (hash, i) {
            var chr = i.charCodeAt(0);
            hash = ((hash << 5) - hash) + chr;
            return hash | 0;
        }, 0);
    };


    var runtimeKey = function (fnName, locale, args, argsStr) {
        var hash;
        argsStr = argsStr || JSON.stringify(args);
        hash = stringHash(fnName + locale + argsStr);
        return hash > 0 ? "a" + hash : "b" + Math.abs(hash);
    };


    var validate = function (code, message, check, attributes) {
        if (!check) {
            throw createError(code, message, attributes);
        }
    };


    var validateParameterPresence = function (value, name) {
        validate("E_MISSING_PARAMETER", "Missing required parameter `{name}`.",
            value !== undefined, {name: name});
    };


    var validateParameterType = function (value, name, check, expected) {
        validate(
            "E_INVALID_PAR_TYPE",
            "Invalid `{name}` parameter ({value}). {expected} expected.",
            check,
            {
                expected: expected,
                name: name,
                value: value
            }
        );
    };


    var validateParameterTypeString = function (value, name) {
        validateParameterType(
            value,
            name,
            value === undefined || typeof value === "string",
            "a string"
        );
    };


// ref: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions?redirectlocale=en-US&redirectslug=JavaScript%2FGuide%2FRegular_Expressions
    var regexpEscape = function (string) {
        return string.replace(/([.*+?^=!:${}()|\[\]\/\\])/g, "\\$1");
    };


    var stringPad = function (str, count, right) {
        var length;
        if (typeof str !== "string") {
            str = String(str);
        }
        for (length = str.length; length < count; length += 1) {
            str = (right ? (str + "0") : ("0" + str));
        }
        return str;
    };


    function Globalize(locale) {
        if (!(this instanceof Globalize)) {
            return new Globalize(locale);
        }

        validateParameterPresence(locale, "locale");
        validateParameterTypeString(locale, "locale");

        this._locale = locale;
    }

    Globalize.locale = function (locale) {
        validateParameterTypeString(locale, "locale");

        if (arguments.length) {
            this._locale = locale;
        }
        return this._locale;
    };

    Globalize._createError = createError;
    Globalize._formatMessage = formatMessage;
    Globalize._regexpEscape = regexpEscape;
    Globalize._runtimeKey = runtimeKey;
    Globalize._stringPad = stringPad;
    Globalize._validateParameterPresence = validateParameterPresence;
    Globalize._validateParameterTypeString = validateParameterTypeString;
    Globalize._validateParameterType = validateParameterType;

    return Globalize;


}));




© 2015 - 2025 Weber Informatics LLC | Privacy Policy