META-INF.resources.bower_components.globalize.dist.globalize.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jwebmp-globalize Show documentation
Show all versions of jwebmp-globalize Show documentation
The JWebSwing implementation for a full Globalization
/**
* Globalize 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 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",
"cldr/event"
], factory);
} else if (typeof exports === "object") {
// Node, CommonJS
module.exports = factory(require("cldrjs"));
} else {
// Global
root.Globalize = factory(root.Cldr);
}
}(this, function (Cldr) {
/**
* 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 functionName = function (fn) {
if (fn.name !== undefined) {
return fn.name;
}
// fn.name is not supported by IE.
var matches = /^function\s+([\w\$]+)\s*\(/.exec(fn.toString());
if (matches && matches.length > 0) {
return matches[1];
}
};
var runtimeBind = function (args, cldr, fn, runtimeArgs) {
var argsStr = JSON.stringify(args),
fnName = functionName(fn),
locale = cldr.locale;
// If name of the function is not available, this is most likely due uglification,
// which most likely means we are in production, and runtimeBind here is not necessary.
if (!fnName) {
return fn;
}
fn.runtimeKey = runtimeKey(fnName, locale, null, argsStr);
fn.generatorString = function () {
return "Globalize(\"" + locale + "\")." + fnName + "(" + argsStr.slice(1, -1) + ")";
};
fn.runtimeArgs = runtimeArgs;
return fn;
};
var validate = function (code, message, check, attributes) {
if (!check) {
throw createError(code, message, attributes);
}
};
var alwaysArray = function (stringOrArray) {
return Array.isArray(stringOrArray) ? stringOrArray : stringOrArray ? [stringOrArray] : [];
};
var validateCldr = function (path, value, options) {
var skipBoolean;
options = options || {};
skipBoolean = alwaysArray(options.skip).some(function (pathRe) {
return pathRe.test(path);
});
validate("E_MISSING_CLDR", "Missing required CLDR content `{path}`.", value || skipBoolean, {
path: path
});
};
var validateDefaultLocale = function (value) {
validate("E_DEFAULT_LOCALE_NOT_DEFINED", "Default locale has not been defined.",
value !== undefined, {});
};
var validateParameterPresence = function (value, name) {
validate("E_MISSING_PARAMETER", "Missing required parameter `{name}`.",
value !== undefined, {name: name});
};
/**
* range( value, name, minimum, maximum )
*
* @value [Number].
*
* @name [String] name of variable.
*
* @minimum [Number]. The lowest valid value, inclusive.
*
* @maximum [Number]. The greatest valid value, inclusive.
*/
var validateParameterRange = function (value, name, minimum, maximum) {
validate(
"E_PAR_OUT_OF_RANGE",
"Parameter `{name}` has value `{value}` out of range [{minimum}, {maximum}].",
value === undefined || value >= minimum && value <= maximum,
{
maximum: maximum,
minimum: minimum,
name: name,
value: value
}
);
};
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 validateParameterTypeLocale = function (value, name) {
validateParameterType(
value,
name,
value === undefined || typeof value === "string" || value instanceof Cldr,
"String or Cldr instance"
);
};
/**
* Function inspired by jQuery Core, but reduced to our use case.
*/
var isPlainObject = function (obj) {
return obj !== null && "" + obj === "[object Object]";
};
var validateParameterTypePlainObject = function (value, name) {
validateParameterType(
value,
name,
value === undefined || isPlainObject(value),
"Plain Object"
);
};
var alwaysCldr = function (localeOrCldr) {
return localeOrCldr instanceof Cldr ? localeOrCldr : new Cldr(localeOrCldr);
};
// 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 validateLikelySubtags(cldr) {
cldr.once("get", validateCldr);
cldr.get("supplemental/likelySubtags");
}
/**
* [new] Globalize( locale|cldr )
*
* @locale [String]
*
* @cldr [Cldr instance]
*
* Create a Globalize instance.
*/
function Globalize(locale) {
if (!(this instanceof Globalize)) {
return new Globalize(locale);
}
validateParameterPresence(locale, "locale");
validateParameterTypeLocale(locale, "locale");
this.cldr = alwaysCldr(locale);
validateLikelySubtags(this.cldr);
}
/**
* Globalize.load( json, ... )
*
* @json [JSON]
*
* Load resolved or unresolved cldr data.
* Somewhat equivalent to previous Globalize.addCultureInfo(...).
*/
Globalize.load = function () {
// validations are delegated to Cldr.load().
Cldr.load.apply(Cldr, arguments);
};
/**
* Globalize.locale( [locale|cldr] )
*
* @locale [String]
*
* @cldr [Cldr instance]
*
* Set default Cldr instance if locale or cldr argument is passed.
*
* Return the default Cldr instance.
*/
Globalize.locale = function (locale) {
validateParameterTypeLocale(locale, "locale");
if (arguments.length) {
this.cldr = alwaysCldr(locale);
validateLikelySubtags(this.cldr);
}
return this.cldr;
};
/**
* Optimization to avoid duplicating some internal functions across modules.
*/
Globalize._alwaysArray = alwaysArray;
Globalize._createError = createError;
Globalize._formatMessage = formatMessage;
Globalize._isPlainObject = isPlainObject;
Globalize._objectExtend = objectExtend;
Globalize._regexpEscape = regexpEscape;
Globalize._runtimeBind = runtimeBind;
Globalize._stringPad = stringPad;
Globalize._validate = validate;
Globalize._validateCldr = validateCldr;
Globalize._validateDefaultLocale = validateDefaultLocale;
Globalize._validateParameterPresence = validateParameterPresence;
Globalize._validateParameterRange = validateParameterRange;
Globalize._validateParameterTypePlainObject = validateParameterTypePlainObject;
Globalize._validateParameterType = validateParameterType;
return Globalize;
}));