| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356 |
- /**
- * Globalize v1.0.1
- *
- * http://github.com/jquery/globalize
- *
- * Copyright jQuery Foundation and other contributors
- * Released under the MIT license
- * http://jquery.org/license
- *
- * Date: 2016-01-20T16:57Z
- */
- /*!
- * Globalize v1.0.1 2016-01-20T16:57Z 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: "bar@baz.qux"
- * }); // Foo <bar@baz.qux>
- */
- 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;
- };
- 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._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;
- }));
|