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

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

There is a newer version: 1.2.2.1-jre17
Show newest version
/**
 * Globalize v1.2.3
 *
 * http://github.com/jquery/globalize
 *
 * Copyright 2010, 2014 jQuery Foundation, Inc. and other contributors
 * Released under the MIT license
 * http://jquery.org/license
 *
 * Date: 2017-03-17T01:41Z
 */
/*!
 * Globalize 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([
            "cldr",
            "../globalize",
            "./number",
            "./plural",
            "cldr/event",
            "cldr/supplemental"
        ], factory);
    } else if (typeof exports === "object") {

        // Node, CommonJS
        module.exports = factory(require("cldrjs"), require("../globalize"));
    } else {

        // Extend global
        factory(root.Cldr, root.Globalize);
    }
}(this, function (Cldr, Globalize) {

    var formatMessage = Globalize._formatMessage,
        runtimeBind = Globalize._runtimeBind,
        validateCldr = Globalize._validateCldr,
        validateDefaultLocale = Globalize._validateDefaultLocale,
        validateParameterPresence = Globalize._validateParameterPresence,
        validateParameterTypeString = Globalize._validateParameterTypeString,
        validateParameterTypeNumber = Globalize._validateParameterTypeNumber;


    /**
     * format( value, numberFormatter, pluralGenerator, properties )
     *
     * @value [Number] The number to format
     *
     * @numberFormatter [String] A numberFormatter from Globalize.numberFormatter
     *
     * @pluralGenerator [String] A pluralGenerator from Globalize.pluralGenerator
     *
     * @properties [Object] containing relative time plural message.
     *
     * Format relative time.
     */
    var relativeTimeFormat = function (value, numberFormatter, pluralGenerator, properties) {

        var relativeTime,
            message = properties["relative-type-" + value];

        if (message) {
            return message;
        }

        relativeTime = value <= 0 ? properties["relativeTime-type-past"]
            : properties["relativeTime-type-future"];

        value = Math.abs(value);

        message = relativeTime["relativeTimePattern-count-" + pluralGenerator(value)];
        return formatMessage(message, [numberFormatter(value)]);
    };


    var relativeTimeFormatterFn = function (numberFormatter, pluralGenerator, properties) {
        return function relativeTimeFormatter(value) {
            validateParameterPresence(value, "value");
            validateParameterTypeNumber(value, "value");

            return relativeTimeFormat(value, numberFormatter, pluralGenerator, properties);
        };

    };


    /**
     * properties( unit, cldr, options )
     *
     * @unit [String] eg. "day", "week", "month", etc.
     *
     * @cldr [Cldr instance].
     *
     * @options [Object]
     * - form: [String] eg. "short" or "narrow". Or falsy for default long form.
     *
     * Return relative time properties.
     */
    var relativeTimeProperties = function (unit, cldr, options) {

        var form = options.form,
            raw, properties, key, match;

        if (form) {
            unit = unit + "-" + form;
        }

        raw = cldr.main(["dates", "fields", unit]);
        properties = {
            "relativeTime-type-future": raw["relativeTime-type-future"],
            "relativeTime-type-past": raw["relativeTime-type-past"]
        };
        for (key in raw) {
            if (raw.hasOwnProperty(key)) {
                match = /relative-type-(-?[0-9]+)/.exec(key);
                if (match) {
                    properties[key] = raw[key];
                }
            }
        }

        return properties;
    };


    /**
     * .formatRelativeTime( value, unit [, options] )
     *
     * @value [Number] The number of unit to format.
     *
     * @unit [String] see .relativeTimeFormatter() for details.
     *
     * @options [Object] see .relativeTimeFormatter() for details.
     *
     * Formats a relative time according to the given unit, options, and the default/instance locale.
     */
    Globalize.formatRelativeTime =
        Globalize.prototype.formatRelativeTime = function (value, unit, options) {
            validateParameterPresence(value, "value");
            validateParameterTypeNumber(value, "value");

            return this.relativeTimeFormatter(unit, options)(value);
        };

    /**
     * .relativeTimeFormatter( unit [, options ])
     *
     * @unit [String] String value indicating the unit to be formatted. eg. "day", "week", "month", etc.
     *
     * @options [Object]
     * - form: [String] eg. "short" or "narrow". Or falsy for default long form.
     *
     * Returns a function that formats a relative time according to the given unit, options, and the
     * default/instance locale.
     */
    Globalize.relativeTimeFormatter =
        Globalize.prototype.relativeTimeFormatter = function (unit, options) {
            var args, cldr, numberFormatter, pluralGenerator, properties, returnFn;

            validateParameterPresence(unit, "unit");
            validateParameterTypeString(unit, "unit");

            cldr = this.cldr;
            options = options || {};

            args = [unit, options];

            validateDefaultLocale(cldr);

            cldr.on("get", validateCldr);
            properties = relativeTimeProperties(unit, cldr, options);
            cldr.off("get", validateCldr);

            numberFormatter = this.numberFormatter(options);
            pluralGenerator = this.pluralGenerator();

            returnFn = relativeTimeFormatterFn(numberFormatter, pluralGenerator, properties);

            runtimeBind(args, cldr, returnFn, [numberFormatter, pluralGenerator, properties]);

            return returnFn;
        };

    return Globalize;


}));




© 2015 - 2024 Weber Informatics LLC | Privacy Policy