Socket
Socket
Sign inDemoInstall

globalize

Package Overview
Dependencies
Maintainers
4
Versions
68
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

globalize - npm Package Compare versions

Comparing version 1.0.0-alpha.2 to 1.0.0-alpha.3

doc/api/core/constructor.md

2

bower.json
{
"name": "globalize",
"version": "1.0.0-alpha.2",
"version": "1.0.0-alpha.3",
"ignore": [

@@ -5,0 +5,0 @@ "**/.*",

/*!
* Globalize v1.0.0-alpha.2
* Globalize v1.0.0-alpha.3
*
* http://github.com/jquery/globalize
*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2014-04-18T14:47Z
* Date: 2014-05-27T18:22Z
*/

@@ -12,0 +12,0 @@

/*!
* Globalize v1.0.0-alpha.2
* Globalize v1.0.0-alpha.3
*
* http://github.com/jquery/globalize
*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2014-04-18T14:47Z
* Date: 2014-05-27T18:22Z
*/

@@ -31,6 +31,31 @@ (function( root, factory ) {

var defaultLocale,
Globalize = {};
var alwaysCldr = function( localeOrCldr ) {
return localeOrCldr instanceof Cldr ? localeOrCldr : new Cldr( localeOrCldr );
};
/**
* [new] Globalize( locale|cldr )
*
* @locale [String]
*
* @cldr [Cldr instance]
*
* Create a Globalize instance.
*/
function Globalize( locale ) {
if ( !( this instanceof Globalize ) ) {
return new Globalize( locale );
}
if ( !locale ) {
throw new Error( "Missing locale" );
}
this.cldr = alwaysCldr( locale );
}
/**
* Globalize.load( json )

@@ -48,15 +73,17 @@ *

/**
* Globalize.locale( [locale] )
* Globalize.locale( [locale|cldr] )
*
* @locale [String]
*
* Set default locale.
* Get default locale if locale argument is undefined.
* Somewhat equivalent to previous culture( selector ).
* @cldr [Cldr instance]
*
* Set default Cldr instance if locale or cldr argument is passed.
*
* Return the default Cldr instance.
*/
Globalize.locale = function( locale ) {
if ( arguments.length ) {
defaultLocale = new Cldr( locale );
this.cldr = alwaysCldr( locale );
}
return defaultLocale;
return this.cldr;
};

@@ -63,0 +90,0 @@

/*!
* Globalize v1.0.0-alpha.2 2014-04-18T14:47Z Released under the MIT license
* Globalize v1.0.0-alpha.3 2014-05-27T18:22Z Released under the MIT license
* http://git.io/TrdQbw
*/
!function(a,b){"function"==typeof define&&define.amd?define(["cldr"],b):"object"==typeof exports?module.exports=b(require("cldrjs")):a.Globalize=b(a.Cldr)}(this,function(a){var b,c={};return c.load=function(b){a.load(b)},c.locale=function(c){return arguments.length&&(b=new a(c)),b},c});
!function(a,b){"function"==typeof define&&define.amd?define(["cldr"],b):"object"==typeof exports?module.exports=b(require("cldrjs")):a.Globalize=b(a.Cldr)}(this,function(a){function b(a){if(!(this instanceof b))return new b(a);if(!a)throw new Error("Missing locale");this.cldr=c(a)}var c=function(b){return b instanceof a?b:new a(b)};return b.load=function(b){a.load(b)},b.locale=function(a){return arguments.length&&(this.cldr=c(a)),this.cldr},b});
/*!
* Globalize v1.0.0-alpha.2
* Globalize v1.0.0-alpha.3
*
* http://github.com/jquery/globalize
*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2014-04-18T14:47Z
* Date: 2014-05-27T18:22Z
*/

@@ -35,17 +35,2 @@ (function( root, factory ) {

/**
* getLocale( [locale] )
*
* @locale [String]
*
* Get locale instance given locale string.
* Get default locale if locale argument is undefined.
*/
var commonGetLocale = function( locale ) {
return locale ? new Cldr( locale ) : Globalize.locale();
};
var arrayMap = function( array, callback ) {

@@ -1138,3 +1123,3 @@ var clone, i, length;

/**
* Globalize.formatDate( value, pattern, locale )
* .formatDate( value, pattern )
*

@@ -1145,7 +1130,8 @@ * @value [Date]

*
* @locale [String]
*
* Formats a date or number according to the given pattern string and the given locale (or the default locale if not specified).
* Formats a date or number according to the given pattern string and the default/instance locale.
*/
Globalize.formatDate = function( value, pattern, locale ) {
Globalize.formatDate =
Globalize.prototype.formatDate = function( value, pattern ) {
var cldr;
if ( !( value instanceof Date ) ) {

@@ -1159,9 +1145,9 @@ throw new Error( "Value is not date" );

locale = commonGetLocale( locale );
pattern = dateExpandPattern( pattern, locale );
return dateFormat( value, pattern, locale );
cldr = this.cldr;
pattern = dateExpandPattern( pattern, cldr );
return dateFormat( value, pattern, cldr );
};
/**
* Globalize.parseDate( value, patterns, locale )
* .parseDate( value, patterns )
*

@@ -1172,9 +1158,7 @@ * @value [String]

*
* @locale [String]
*
* Return a Date instance or null.
*/
Globalize.parseDate = function( value, patterns, locale ) {
var date;
locale = commonGetLocale( locale );
Globalize.parseDate =
Globalize.prototype.parseDate = function( value, patterns ) {
var cldr, date;

@@ -1185,4 +1169,6 @@ if ( typeof value !== "string" ) {

cldr = this.cldr;
if ( !patterns ) {
patterns = dateAllPresets( locale );
patterns = dateAllPresets( cldr );
} else {

@@ -1193,4 +1179,4 @@ patterns = alwaysArray( patterns );

arraySome( patterns, function( pattern ) {
pattern = dateExpandPattern( pattern, locale );
date = dateParse( value, pattern, locale );
pattern = dateExpandPattern( pattern, cldr );
date = dateParse( value, pattern, cldr );
return !!date;

@@ -1197,0 +1183,0 @@ });

/*!
* Globalize v1.0.0-alpha.2 2014-04-18T14:47Z Released under the MIT license
* Globalize v1.0.0-alpha.3 2014-05-27T18:22Z Released under the MIT license
* http://git.io/TrdQbw
*/
!function(a,b){"function"==typeof define&&define.amd?define(["cldr","../globalize","cldr/supplemental"],b):"object"==typeof exports?module.exports=b(require("cldrjs"),require("globalize")):b(a.Cldr,a.Globalize)}(this,function(a,b){var c=function(c){return c?new a(c):b.locale()},d=function(a,b){var c,d,e;if(a.map)return a.map(b);for(c=[],d=0,e=a.length;e>d;d++)c[d]=b(a[d],d,a);return c},e=function(a){var b,c=[];for(b in a)c.push(a[b]);return c},f=function(a){var b=[];return b=e(a.main("dates/calendars/gregorian/dateTimeFormats/availableFormats")),b=b.concat(e(a.main("dates/calendars/gregorian/timeFormats"))),b=b.concat(e(a.main("dates/calendars/gregorian/dateFormats"))),b=b.concat(d(e(a.main("dates/calendars/gregorian/dateTimeFormats")),function(b,c){return"string"!=typeof b?b:b.replace(/\{0\}/,a.main(["dates/calendars/gregorian/timeFormats",c])).replace(/\{1\}/,a.main(["dates/calendars/gregorian/dateFormats",c]))})),d(b,function(a){return{pattern:a}})},g=function(a,b){var c;if("string"==typeof a&&(a={skeleton:a}),"object"!=typeof a)throw new Error("Invalid pattern");switch(!0){case"skeleton"in a:c=b.main(["dates/calendars/gregorian/dateTimeFormats/availableFormats",a.skeleton]);break;case"date"in a:case"time"in a:c=b.main(["dates/calendars/gregorian","date"in a?"dateFormats":"timeFormats",a.date||a.time]);break;case"datetime"in a:c=b.main(["dates/calendars/gregorian/dateTimeFormats",a.datetime]),c&&(c=c.replace(/\{0\}/,b.main(["dates/calendars/gregorian/timeFormats",a.datetime])).replace(/\{1\}/,b.main(["dates/calendars/gregorian/dateFormats",a.datetime])));break;case"pattern"in a:c=a.pattern;break;default:throw new Error("Invalid pattern")}if(!c)throw new Error("Pattern not found");return c},h=["sun","mon","tue","wed","thu","fri","sat"],i=function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},j=function(a){return i(h,a.supplemental.weekData.firstDay())},k=function(a,b){return(a.getDay()-j(b)+7)%7},l=function(a,b){var c=864e5;return(b.getTime()-a.getTime())/c},m=function(a,b){switch(a=new Date(a.getTime()),b){case"year":a.setMonth(0);case"month":a.setDate(1);case"day":a.setHours(0);case"hour":a.setMinutes(0);case"minute":a.setSeconds(0);case"second":a.setMilliseconds(0)}return a},n=function(a){return Math.floor(l(m(a,"year"),a))},o=function(a){return a-m(a,"day")},p=/([a-z])\1*|'[^']+'|''|./gi,q=function(a,b,c){var d;for("string"!=typeof a&&(a=String(a)),d=a.length;b>d;d+=1)a=c?a+"0":"0"+a;return a},r=function(a,b,c){var d=["abbreviated","wide","narrow"];return b.replace(p,function(b){var e,f,g=b.charAt(0),i=b.length;switch("j"===g&&(g=c.supplemental.timeData.preferred()),g){case"G":f=c.main(["dates/calendars/gregorian/eras",3>=i?"eraAbbr":4===i?"eraNames":"eraNarrow",a.getFullYear()<0?0:1]);break;case"y":f=String(a.getFullYear()),e=!0,2===i&&(f=f.substr(f.length-2));break;case"Y":f=new Date(a.getTime()),f.setDate(f.getDate()+7-(k(a,c)-j(c))-c.supplemental.weekData.minDays()),f=String(f.getFullYear()),e=!0,2===i&&(f=f.substr(f.length-2));break;case"u":case"U":throw new Error("Not implemented");case"Q":case"q":f=Math.ceil((a.getMonth()+1)/3),2>=i?e=!0:f=c.main(["dates/calendars/gregorian/quarters","Q"===g?"format":"stand-alone",d[i-3],f]);break;case"M":case"L":f=a.getMonth()+1,2>=i?e=!0:f=c.main(["dates/calendars/gregorian/months","M"===g?"format":"stand-alone",d[i-3],f]);break;case"w":f=k(m(a,"year"),c),f=Math.ceil((n(a)+f)/7)-(7-f>=c.supplemental.weekData.minDays()?0:1),e=!0;break;case"W":f=k(m(a,"month"),c),f=Math.ceil((a.getDate()+f)/7)-(7-f>=c.supplemental.weekData.minDays()?0:1);break;case"d":f=a.getDate(),e=!0;break;case"D":f=n(a)+1,e=!0;break;case"F":f=Math.floor(a.getDate()/7)+1;break;case"g+":throw new Error("Not implemented");case"e":case"c":if(2>=i){f=k(a,c)+1,e=!0;break}case"E":f=h[a.getDay()],f=6===i?c.main(["dates/calendars/gregorian/days",["c"===g?"stand-alone":"format"],"short",f])||c.main(["dates/calendars/gregorian/days",["c"===g?"stand-alone":"format"],"abbreviated",f]):c.main(["dates/calendars/gregorian/days",["c"===g?"stand-alone":"format"],d[3>i?0:i-3],f]);break;case"a":f=c.main(["dates/calendars/gregorian/dayPeriods/format/wide",a.getHours()<12?"am":"pm"]);break;case"h":f=a.getHours()%12||12,e=!0;break;case"H":f=a.getHours(),e=!0;break;case"K":f=a.getHours()%12,e=!0;break;case"k":f=a.getHours()||24,e=!0;break;case"m":f=a.getMinutes(),e=!0;break;case"s":f=a.getSeconds(),e=!0;break;case"S":f=Math.round(a.getMilliseconds()*Math.pow(10,i-3)),e=!0;break;case"A":f=Math.round(o(a)*Math.pow(10,i-3)),e=!0;break;case"z":case"Z":case"O":case"v":case"V":case"X":case"x":throw new Error("Not implemented");default:return b}return e&&(f=q(f,i)),f})},s=function(a,b){var c,d;if(a.every)return a.every(b);for(c=0,d=a.length;d>c;c++)if(!b(a[c],c,a))return!1;return!0},t=function(a,b,c){var d,e=[],f=["abbreviated","wide","narrow"];return d=s(b.match(p),function(b){function d(){return 1===k?l=/\d/:void 0}function g(){return 1===k?l=/\d\d?/:void 0}function h(){return 2===k?l=/\d\d/:void 0}function i(b){var d,e,f=c.main(b);for(d in f)if(e=new RegExp("^"+f[d]),e.test(a))return m.value=d,l=new RegExp(f[d]);return null}var j,k,l,m={};switch(m.type=b,j=b.charAt(0),k=b.length,j){case"G":i(["dates/calendars/gregorian/eras",3>=k?"eraAbbr":4===k?"eraNames":"eraNarrow"]);break;case"y":case"Y":l=1===k?/\d+/:2===k?/\d\d/:new RegExp("\\d{"+k+",}");break;case"u":case"U":throw new Error("Not implemented");case"Q":case"q":d()||h()||i(["dates/calendars/gregorian/quarters","Q"===j?"format":"stand-alone",f[k-3]]);break;case"M":case"L":g()||h()||i(["dates/calendars/gregorian/months","M"===j?"format":"stand-alone",f[k-3]]);break;case"D":3>=k&&(l=new RegExp("\\d{"+k+",3}"));break;case"W":case"F":d();break;case"g+":throw new Error("Not implemented");case"e":case"c":if(2>=k){d()||h();break}case"E":6===k?i(["dates/calendars/gregorian/days",["c"===j?"stand-alone":"format"],"short"])||i(["dates/calendars/gregorian/days",["c"===j?"stand-alone":"format"],"abbreviated"]):i(["dates/calendars/gregorian/days",["c"===j?"stand-alone":"format"],f[3>k?0:k-3]]);break;case"a":i(["dates/calendars/gregorian/dayPeriods/format/wide"]);break;case"w":case"d":case"h":case"H":case"K":case"k":case"j":case"m":case"s":g()||h();break;case"S":l=new RegExp("\\d{"+k+"}");break;case"A":l=new RegExp("\\d{"+(k+5)+"}");break;case"z":case"Z":case"O":case"v":case"V":case"X":case"x":throw new Error("Not implemented");case"'":m.type="literal",l="'"===b.charAt(1)?/'/:/'[^']+'/;break;default:m.type="literal",l=/./}return l?(a=a.replace(new RegExp("^"+l.source),function(a){return m.lexeme=a,""}),m.lexeme?(e.push(m),!0):!1):!1}),d?e:[]},u=function(){function a(a,b,c){return b>a||a>c}return function(b,c,d){var e,f,g,h,i=0,j=1,k=2,l=3,n=4,o=5,p=6,q=new Date,r=t(b,c,d),u=[],v=["year","month","day","hour","minute","second","milliseconds"];return r.length?(h=s(r,function(b){var c,h,m,r;if("literal"===b.type)return!0;switch(h=b.type.charAt(0),r=b.type.length,"j"===h&&(h=d.supplemental.timeData.preferred()),h){case"G":u.push(i),f=+b.value;break;case"y":if(m=+b.lexeme,2===r){if(a(m,0,99))return!1;c=100*Math.floor(q.getFullYear()/100),m+=c,m>q.getFullYear()+20&&(m-=100)}q.setFullYear(m),u.push(i);break;case"Y":case"u":case"U":throw new Error("Not implemented");case"Q":case"q":break;case"M":case"L":if(m=2>=r?+b.lexeme:+b.value,a(m,1,12))return!1;q.setMonth(m-1),u.push(j);break;case"w":case"W":break;case"d":if(m=+b.lexeme,a(m,1,31))return!1;q.setDate(m),u.push(k);break;case"D":if(m=+b.lexeme,a(m,1,366))return!1;q.setMonth(0),q.setDate(m),u.push(k);break;case"F":break;case"g+":throw new Error("Not implemented");case"e":case"c":case"E":break;case"a":e=b.value;break;case"K":m=+b.lexeme+1;case"h":if(m=m||+b.lexeme,a(m,1,12))return!1;q.setHours(m),u.push(l);break;case"H":m=+b.lexeme+1;case"k":if(g=!0,m=m||+b.lexeme,a(m,1,24))return!1;q.setHours(m),u.push(l);break;case"m":if(m=+b.lexeme,a(m,0,59))return!1;q.setMinutes(m),u.push(n);break;case"s":if(m=+b.lexeme,a(m,0,59))return!1;q.setSeconds(m),u.push(o);break;case"A":q.setHours(0),q.setMinutes(0),q.setSeconds(0);case"S":m=Math.round(+b.lexeme*Math.pow(10,3-r)),q.setMilliseconds(m),u.push(p);break;case"z":case"Z":case"O":case"v":case"V":case"X":case"x":throw new Error("Not implemented")}return!0}),!h||e&&g?null:(0===f&&q.setFullYear(-1*q.getFullYear()+1),"pm"===e&&12!==q.getHours()&&q.setHours(q.getHours()+12),u=Math.max.apply(null,u),q=m(q,v[u]))):null}}(),v=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},w=function(a){return v(a)?a:[a]},x=function(a,b){var c,d;if(a.some)return a.some(b);for(c=0,d=a.length;d>c;c++)if(b(a[c],c,a))return!0;return!1};return b.formatDate=function(a,b,d){if(!(a instanceof Date))throw new Error("Value is not date");if(!b)throw new Error("Missing pattern");return d=c(d),b=g(b,d),r(a,b,d)},b.parseDate=function(a,b,d){var e;if(d=c(d),"string"!=typeof a)throw new Error("invalid value ("+a+"), string expected");return b=b?w(b):f(d),x(b,function(b){return b=g(b,d),e=u(a,b,d),!!e}),e||null},b});
!function(a,b){"function"==typeof define&&define.amd?define(["cldr","../globalize","cldr/supplemental"],b):"object"==typeof exports?module.exports=b(require("cldrjs"),require("globalize")):b(a.Cldr,a.Globalize)}(this,function(a,b){var c=function(a,b){var c,d,e;if(a.map)return a.map(b);for(c=[],d=0,e=a.length;e>d;d++)c[d]=b(a[d],d,a);return c},d=function(a){var b,c=[];for(b in a)c.push(a[b]);return c},e=function(a){var b=[];return b=d(a.main("dates/calendars/gregorian/dateTimeFormats/availableFormats")),b=b.concat(d(a.main("dates/calendars/gregorian/timeFormats"))),b=b.concat(d(a.main("dates/calendars/gregorian/dateFormats"))),b=b.concat(c(d(a.main("dates/calendars/gregorian/dateTimeFormats")),function(b,c){return"string"!=typeof b?b:b.replace(/\{0\}/,a.main(["dates/calendars/gregorian/timeFormats",c])).replace(/\{1\}/,a.main(["dates/calendars/gregorian/dateFormats",c]))})),c(b,function(a){return{pattern:a}})},f=function(a,b){var c;if("string"==typeof a&&(a={skeleton:a}),"object"!=typeof a)throw new Error("Invalid pattern");switch(!0){case"skeleton"in a:c=b.main(["dates/calendars/gregorian/dateTimeFormats/availableFormats",a.skeleton]);break;case"date"in a:case"time"in a:c=b.main(["dates/calendars/gregorian","date"in a?"dateFormats":"timeFormats",a.date||a.time]);break;case"datetime"in a:c=b.main(["dates/calendars/gregorian/dateTimeFormats",a.datetime]),c&&(c=c.replace(/\{0\}/,b.main(["dates/calendars/gregorian/timeFormats",a.datetime])).replace(/\{1\}/,b.main(["dates/calendars/gregorian/dateFormats",a.datetime])));break;case"pattern"in a:c=a.pattern;break;default:throw new Error("Invalid pattern")}if(!c)throw new Error("Pattern not found");return c},g=["sun","mon","tue","wed","thu","fri","sat"],h=function(a,b){if(a.indexOf)return a.indexOf(b);for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},i=function(a){return h(g,a.supplemental.weekData.firstDay())},j=function(a,b){return(a.getDay()-i(b)+7)%7},k=function(a,b){var c=864e5;return(b.getTime()-a.getTime())/c},l=function(a,b){switch(a=new Date(a.getTime()),b){case"year":a.setMonth(0);case"month":a.setDate(1);case"day":a.setHours(0);case"hour":a.setMinutes(0);case"minute":a.setSeconds(0);case"second":a.setMilliseconds(0)}return a},m=function(a){return Math.floor(k(l(a,"year"),a))},n=function(a){return a-l(a,"day")},o=/([a-z])\1*|'[^']+'|''|./gi,p=function(a,b,c){var d;for("string"!=typeof a&&(a=String(a)),d=a.length;b>d;d+=1)a=c?a+"0":"0"+a;return a},q=function(a,b,c){var d=["abbreviated","wide","narrow"];return b.replace(o,function(b){var e,f,h=b.charAt(0),k=b.length;switch("j"===h&&(h=c.supplemental.timeData.preferred()),h){case"G":f=c.main(["dates/calendars/gregorian/eras",3>=k?"eraAbbr":4===k?"eraNames":"eraNarrow",a.getFullYear()<0?0:1]);break;case"y":f=String(a.getFullYear()),e=!0,2===k&&(f=f.substr(f.length-2));break;case"Y":f=new Date(a.getTime()),f.setDate(f.getDate()+7-(j(a,c)-i(c))-c.supplemental.weekData.minDays()),f=String(f.getFullYear()),e=!0,2===k&&(f=f.substr(f.length-2));break;case"u":case"U":throw new Error("Not implemented");case"Q":case"q":f=Math.ceil((a.getMonth()+1)/3),2>=k?e=!0:f=c.main(["dates/calendars/gregorian/quarters","Q"===h?"format":"stand-alone",d[k-3],f]);break;case"M":case"L":f=a.getMonth()+1,2>=k?e=!0:f=c.main(["dates/calendars/gregorian/months","M"===h?"format":"stand-alone",d[k-3],f]);break;case"w":f=j(l(a,"year"),c),f=Math.ceil((m(a)+f)/7)-(7-f>=c.supplemental.weekData.minDays()?0:1),e=!0;break;case"W":f=j(l(a,"month"),c),f=Math.ceil((a.getDate()+f)/7)-(7-f>=c.supplemental.weekData.minDays()?0:1);break;case"d":f=a.getDate(),e=!0;break;case"D":f=m(a)+1,e=!0;break;case"F":f=Math.floor(a.getDate()/7)+1;break;case"g+":throw new Error("Not implemented");case"e":case"c":if(2>=k){f=j(a,c)+1,e=!0;break}case"E":f=g[a.getDay()],f=6===k?c.main(["dates/calendars/gregorian/days",["c"===h?"stand-alone":"format"],"short",f])||c.main(["dates/calendars/gregorian/days",["c"===h?"stand-alone":"format"],"abbreviated",f]):c.main(["dates/calendars/gregorian/days",["c"===h?"stand-alone":"format"],d[3>k?0:k-3],f]);break;case"a":f=c.main(["dates/calendars/gregorian/dayPeriods/format/wide",a.getHours()<12?"am":"pm"]);break;case"h":f=a.getHours()%12||12,e=!0;break;case"H":f=a.getHours(),e=!0;break;case"K":f=a.getHours()%12,e=!0;break;case"k":f=a.getHours()||24,e=!0;break;case"m":f=a.getMinutes(),e=!0;break;case"s":f=a.getSeconds(),e=!0;break;case"S":f=Math.round(a.getMilliseconds()*Math.pow(10,k-3)),e=!0;break;case"A":f=Math.round(n(a)*Math.pow(10,k-3)),e=!0;break;case"z":case"Z":case"O":case"v":case"V":case"X":case"x":throw new Error("Not implemented");default:return b}return e&&(f=p(f,k)),f})},r=function(a,b){var c,d;if(a.every)return a.every(b);for(c=0,d=a.length;d>c;c++)if(!b(a[c],c,a))return!1;return!0},s=function(a,b,c){var d,e=[],f=["abbreviated","wide","narrow"];return d=r(b.match(o),function(b){function d(){return 1===k?l=/\d/:void 0}function g(){return 1===k?l=/\d\d?/:void 0}function h(){return 2===k?l=/\d\d/:void 0}function i(b){var d,e,f=c.main(b);for(d in f)if(e=new RegExp("^"+f[d]),e.test(a))return m.value=d,l=new RegExp(f[d]);return null}var j,k,l,m={};switch(m.type=b,j=b.charAt(0),k=b.length,j){case"G":i(["dates/calendars/gregorian/eras",3>=k?"eraAbbr":4===k?"eraNames":"eraNarrow"]);break;case"y":case"Y":l=1===k?/\d+/:2===k?/\d\d/:new RegExp("\\d{"+k+",}");break;case"u":case"U":throw new Error("Not implemented");case"Q":case"q":d()||h()||i(["dates/calendars/gregorian/quarters","Q"===j?"format":"stand-alone",f[k-3]]);break;case"M":case"L":g()||h()||i(["dates/calendars/gregorian/months","M"===j?"format":"stand-alone",f[k-3]]);break;case"D":3>=k&&(l=new RegExp("\\d{"+k+",3}"));break;case"W":case"F":d();break;case"g+":throw new Error("Not implemented");case"e":case"c":if(2>=k){d()||h();break}case"E":6===k?i(["dates/calendars/gregorian/days",["c"===j?"stand-alone":"format"],"short"])||i(["dates/calendars/gregorian/days",["c"===j?"stand-alone":"format"],"abbreviated"]):i(["dates/calendars/gregorian/days",["c"===j?"stand-alone":"format"],f[3>k?0:k-3]]);break;case"a":i(["dates/calendars/gregorian/dayPeriods/format/wide"]);break;case"w":case"d":case"h":case"H":case"K":case"k":case"j":case"m":case"s":g()||h();break;case"S":l=new RegExp("\\d{"+k+"}");break;case"A":l=new RegExp("\\d{"+(k+5)+"}");break;case"z":case"Z":case"O":case"v":case"V":case"X":case"x":throw new Error("Not implemented");case"'":m.type="literal",l="'"===b.charAt(1)?/'/:/'[^']+'/;break;default:m.type="literal",l=/./}return l?(a=a.replace(new RegExp("^"+l.source),function(a){return m.lexeme=a,""}),m.lexeme?(e.push(m),!0):!1):!1}),d?e:[]},t=function(){function a(a,b,c){return b>a||a>c}return function(b,c,d){var e,f,g,h,i=0,j=1,k=2,m=3,n=4,o=5,p=6,q=new Date,t=s(b,c,d),u=[],v=["year","month","day","hour","minute","second","milliseconds"];return t.length?(h=r(t,function(b){var c,h,l,r;if("literal"===b.type)return!0;switch(h=b.type.charAt(0),r=b.type.length,"j"===h&&(h=d.supplemental.timeData.preferred()),h){case"G":u.push(i),f=+b.value;break;case"y":if(l=+b.lexeme,2===r){if(a(l,0,99))return!1;c=100*Math.floor(q.getFullYear()/100),l+=c,l>q.getFullYear()+20&&(l-=100)}q.setFullYear(l),u.push(i);break;case"Y":case"u":case"U":throw new Error("Not implemented");case"Q":case"q":break;case"M":case"L":if(l=2>=r?+b.lexeme:+b.value,a(l,1,12))return!1;q.setMonth(l-1),u.push(j);break;case"w":case"W":break;case"d":if(l=+b.lexeme,a(l,1,31))return!1;q.setDate(l),u.push(k);break;case"D":if(l=+b.lexeme,a(l,1,366))return!1;q.setMonth(0),q.setDate(l),u.push(k);break;case"F":break;case"g+":throw new Error("Not implemented");case"e":case"c":case"E":break;case"a":e=b.value;break;case"K":l=+b.lexeme+1;case"h":if(l=l||+b.lexeme,a(l,1,12))return!1;q.setHours(l),u.push(m);break;case"H":l=+b.lexeme+1;case"k":if(g=!0,l=l||+b.lexeme,a(l,1,24))return!1;q.setHours(l),u.push(m);break;case"m":if(l=+b.lexeme,a(l,0,59))return!1;q.setMinutes(l),u.push(n);break;case"s":if(l=+b.lexeme,a(l,0,59))return!1;q.setSeconds(l),u.push(o);break;case"A":q.setHours(0),q.setMinutes(0),q.setSeconds(0);case"S":l=Math.round(+b.lexeme*Math.pow(10,3-r)),q.setMilliseconds(l),u.push(p);break;case"z":case"Z":case"O":case"v":case"V":case"X":case"x":throw new Error("Not implemented")}return!0}),!h||e&&g?null:(0===f&&q.setFullYear(-1*q.getFullYear()+1),"pm"===e&&12!==q.getHours()&&q.setHours(q.getHours()+12),u=Math.max.apply(null,u),q=l(q,v[u]))):null}}(),u=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},v=function(a){return u(a)?a:[a]},w=function(a,b){var c,d;if(a.some)return a.some(b);for(c=0,d=a.length;d>c;c++)if(b(a[c],c,a))return!0;return!1};return b.formatDate=b.prototype.formatDate=function(a,b){var c;if(!(a instanceof Date))throw new Error("Value is not date");if(!b)throw new Error("Missing pattern");return c=this.cldr,b=f(b,c),q(a,b,c)},b.parseDate=b.prototype.parseDate=function(a,b){var c,d;if("string"!=typeof a)throw new Error("invalid value ("+a+"), string expected");return c=this.cldr,b=b?v(b):e(c),w(b,function(b){return b=f(b,c),d=t(a,b,c),!!d}),d||null},b});
/*!
* Globalize v1.0.0-alpha.2
* Globalize v1.0.0-alpha.3
*
* http://github.com/jquery/globalize
*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2014-04-18T14:47Z
* Date: 2014-05-27T18:22Z
*/

@@ -31,17 +31,2 @@ (function( root, factory ) {

/**
* getLocale( [locale] )
*
* @locale [String]
*
* Get locale instance given locale string.
* Get default locale if locale argument is undefined.
*/
var commonGetLocale = function( locale ) {
return locale ? new Cldr( locale ) : Globalize.locale();
};
var arrayIsArray = Array.isArray || function( obj ) {

@@ -62,16 +47,14 @@ return Object.prototype.toString.call( obj ) === "[object Array]";

/**
* Globalize.loadMessages( locale, json )
* .loadMessages( json )
*
* @locale [String]
*
* @json [JSON]
*
* Load messages (translation) data per locale.
* Load messages (translation) data for default/instance locale.
*/
Globalize.loadMessages = function( locale, json ) {
Globalize.loadMessages =
Globalize.prototype.loadMessages = function( json ) {
var customData = {
"globalize-messages": {}
};
locale = new Cldr( locale );
customData[ "globalize-messages" ][ locale.attributes.languageId ] = json;
customData[ "globalize-messages" ][ this.cldr.attributes.languageId ] = json;
Cldr.load( customData );

@@ -81,14 +64,12 @@ };

/**
* Globalize.translate( path, locale )
* .translate( path )
*
* @path [String or Array]
*
* @locale [String]
*
* Translate item given its path.
*/
Globalize.translate = function( path , locale ) {
locale = commonGetLocale( locale );
Globalize.translate =
Globalize.prototype.translate = function( path ) {
path = alwaysArray( path );
return locale.get( [ "globalize-messages/{languageId}" ].concat( path ) );
return this.cldr.get( [ "globalize-messages/{languageId}" ].concat( path ) );
};

@@ -95,0 +76,0 @@

/*!
* Globalize v1.0.0-alpha.2 2014-04-18T14:47Z Released under the MIT license
* Globalize v1.0.0-alpha.3 2014-05-27T18:22Z Released under the MIT license
* http://git.io/TrdQbw
*/
!function(a,b){"function"==typeof define&&define.amd?define(["cldr","../globalize"],b):"object"==typeof exports?module.exports=b(require("cldrjs"),require("globalize")):b(a.Cldr,a.Globalize)}(this,function(a,b){var c=function(c){return c?new a(c):b.locale()},d=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},e=function(a){return d(a)?a:[a]};return b.loadMessages=function(b,c){var d={"globalize-messages":{}};b=new a(b),d["globalize-messages"][b.attributes.languageId]=c,a.load(d)},b.translate=function(a,b){return b=c(b),a=e(a),b.get(["globalize-messages/{languageId}"].concat(a))},b});
!function(a,b){"function"==typeof define&&define.amd?define(["cldr","../globalize"],b):"object"==typeof exports?module.exports=b(require("cldrjs"),require("globalize")):b(a.Cldr,a.Globalize)}(this,function(a,b){var c=Array.isArray||function(a){return"[object Array]"===Object.prototype.toString.call(a)},d=function(a){return c(a)?a:[a]};return b.loadMessages=b.prototype.loadMessages=function(b){var c={"globalize-messages":{}};c["globalize-messages"][this.cldr.attributes.languageId]=b,a.load(c)},b.translate=b.prototype.translate=function(a){return a=d(a),this.cldr.get(["globalize-messages/{languageId}"].concat(a))},b});
/*!
* Globalize v1.0.0-alpha.2
* Globalize v1.0.0-alpha.3
*
* http://github.com/jquery/globalize
*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2014-04-18T14:47Z
* Date: 2014-05-27T18:22Z
*/

@@ -35,17 +35,2 @@ (function( root, factory ) {

/**
* getLocale( [locale] )
*
* @locale [String]
*
* Get locale instance given locale string.
* Get default locale if locale argument is undefined.
*/
var commonGetLocale = function( locale ) {
return locale ? new Cldr( locale ) : Globalize.locale();
};
/**
* goupingSeparator( number, primaryGroupingSize, secondaryGroupingSize )

@@ -176,2 +161,84 @@ *

/**
* toPrecision( number, precision, round )
*
* @number (Number)
*
* @precision (Number) significant figures precision (not decimal precision).
*
* @round (Function)
*
* Return number.toPrecision( precision ) using the given round function.
*/
var numberToPrecision = function( number, precision, round ) {
var roundOrder, roundIncrement;
// Get number at two extra significant figure precision.
number = number.toPrecision( precision + 2 );
// Then, round it to the required significant figure precision.
roundOrder = Math.ceil( Math.log( Math.abs( number ) ) / Math.log( 10 ) );
roundOrder -= precision;
roundIncrement = Math.pow( 10, roundOrder );
number = round( number, roundIncrement );
// Ignore decimal error, eg. `1234 * 0.0001 = 0.12340000000000001`.
if ( roundOrder < 0 ) {
number = +number.toFixed( -roundOrder );
}
return number;
};
/**
* toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round )
*
* @number [Number]
*
* @minimumSignificantDigits [Number]
*
* @maximumSignificantDigits [Number]
*
* @round [Function]
*
* Return the formatted significant digits number.
*/
var numberFormatSignificantDigits = function( number, minimumSignificantDigits, maximumSignificantDigits, round ) {
var atMinimum, atMaximum;
// Sanity check.
if ( minimumSignificantDigits > maximumSignificantDigits ) {
maximumSignificantDigits = minimumSignificantDigits;
}
atMinimum = numberToPrecision( number, minimumSignificantDigits, round );
atMaximum = numberToPrecision( number, maximumSignificantDigits, round );
// Use atMaximum only if it has more significant digits than atMinimum.
number = +atMinimum === +atMaximum ? atMinimum : atMaximum;
// Expand integer numbers, eg. 123e5 to 12300.
number = ( +number ).toString( 10 );
if ( (/e/).test( number ) ) {
throw new Error( "Ops! Integers out of (1e21, 1e-7) not supported" );
}
// Add trailing zeros if necessary.
if ( minimumSignificantDigits - number.replace( /^0+|\./g, "" ).length > 0 ) {
number = number.split( "." );
number[ 1 ] = stringPad( number[ 1 ] || "", minimumSignificantDigits - number[ 0 ].replace( /^0+/, "" ).length, true );
number = number.join( "." );
}
return number;
};
/**
* EBNF representation:

@@ -235,3 +302,3 @@ *

*/
var numberFormatProperties = function( pattern ) {
var numberPatternProperties = function( pattern ) {
var aux1, aux2, fractionPattern, integerFractionOrSignificantPattern, integerPattern, maximumFractionDigits, maximumSignificantDigits, minimumFractionDigits, minimumIntegerDigits, minimumSignificantDigits, padding, prefix, primaryGroupingSize, roundIncrement, scientificNotation, secondaryGroupingSize, significantPattern, suffix;

@@ -339,31 +406,8 @@

/**
* toPrecision( number, precision, round )
* NumberingSystem( cldr )
*
* @number (Number)
*
* @precision (Number) significant figures precision (not decimal precision).
*
* @round (Function)
*
* Return number.toPrecision( precision ) using the given round function.
* TODO support ( native | traditional | finance ).
*/
var numberToPrecision = function( number, precision, round ) {
var roundOrder, roundIncrement;
// Get number at two extra significant figure precision.
number = number.toPrecision( precision + 2 );
// Then, round it to the required significant figure precision.
roundOrder = Math.ceil( Math.log( Math.abs( number ) ) / Math.log( 10 ) );
roundOrder -= precision;
roundIncrement = Math.pow( 10, roundOrder );
number = round( number, roundIncrement );
// Ignore decimal error, eg. `1234 * 0.0001 = 0.12340000000000001`.
if ( roundOrder < 0 ) {
number = +number.toFixed( -roundOrder );
}
return number;
var numberNumberingSystem = function( cldr ) {
return cldr.main( "numbers/defaultNumberingSystem" );
};

@@ -375,43 +419,15 @@

/**
* toPrecision( number, minimumSignificantDigits, maximumSignificantDigits, round )
* Symbol( name, cldr )
*
* @number [Number]
* @name [String] Symbol name.
*
* @minimumSignificantDigits [Number]
* @cldr [Cldr instance].
*
* @maximumSignificantDigits [Number]
*
* @round [Function]
*
* Return the formatted significant digits number.
* Return the localized symbol given its name.
*/
var numberFormatSignificantDigits = function( number, minimumSignificantDigits, maximumSignificantDigits, round ) {
var atMinimum, atMaximum;
// Sanity check.
if ( minimumSignificantDigits > maximumSignificantDigits ) {
maximumSignificantDigits = minimumSignificantDigits;
}
atMinimum = numberToPrecision( number, minimumSignificantDigits, round );
atMaximum = numberToPrecision( number, maximumSignificantDigits, round );
// Use atMaximum only if it has more significant digits than atMinimum.
number = +atMinimum === +atMaximum ? atMinimum : atMaximum;
// Expand integer numbers, eg. 123e5 to 12300.
number = ( +number ).toString( 10 );
if ( (/e/).test( number ) ) {
throw new Error( "Ops! Integers out of (1e21, 1e-7) not supported" );
}
// Add trailing zeros if necessary.
if ( minimumSignificantDigits - number.replace( /^0+|\./g, "" ).length > 0 ) {
number = number.split( "." );
number[ 1 ] = stringPad( number[ 1 ] || "", minimumSignificantDigits - number[ 0 ].replace( /^0+/, "" ).length, true );
number = number.join( "." );
}
return number;
var numberSymbol = function( name, cldr ) {
return cldr.main([
"numbers/symbols-numberSystem-" + numberNumberingSystem( cldr ),
name
]);
};

@@ -422,14 +438,2 @@

/**
* NumberingSystem( cldr )
*
* TODO support ( native | traditional | finance ).
*/
var numberNumberingSystem = function( cldr ) {
return cldr.main( "numbers/defaultNumberingSystem" );
};
var numberSymbolName = {

@@ -449,17 +453,2 @@ "." : "decimal",

/**
* MinusSign( symbol, cldr )
*
* Return the localized minus sign.
*/
var numberSymbol = function( symbol, cldr ) {
return cldr.main([
"numbers/symbols-numberSystem-" + numberNumberingSystem( cldr ),
numberSymbolName[ symbol ]
]);
};
/**
* round( method )

@@ -526,3 +515,3 @@ *

round = numberRound( options.round );
properties = numberFormatProperties( pattern[ 0 ] );
properties = numberPatternProperties( pattern[ 0 ] );
padding = properties[ 1 ];

@@ -544,3 +533,3 @@ minimumIntegerDigits = options.minimumIntegerDigits || properties[ 2 ];

pattern = pattern[ 1 ] || "-" + pattern[ 0 ];
properties = numberFormatProperties( pattern );
properties = numberPatternProperties( pattern );
} else {

@@ -607,3 +596,3 @@ pattern = pattern[ 0 ];

}
return numberSymbol( symbol, cldr );
return numberSymbol( numberSymbolName[ symbol ], cldr );
});

@@ -616,2 +605,193 @@ };

/**
* EBNF representation:
*
* number_pattern_re = prefix_including_padding?
* number
* scientific_notation?
* suffix?
*
* number = integer_including_group_separator fraction_including_decimal_separator
*
* integer_including_group_separator =
* regexp([0-9,]*[0-9]+)
*
* fraction_including_decimal_separator =
* regexp((\.[0-9]+)?)
* prefix_including_padding = non_number_stuff
*
* scientific_notation = regexp(E[+-]?[0-9]+)
*
* suffix = non_number_stuff
*
* non_number_stuff = regexp([^0-9]*)
*
*
* Regexp groups:
*
* 0: number_pattern_re
* 1: prefix
* 2: integer_including_group_separator fraction_including_decimal_separator
* 3: integer_including_group_separator
* 4: fraction_including_decimal_separator
* 5: scientific_notation
* 6: suffix
*/
var numberNumberRe = (/^([^0-9]*)(([0-9,]*[0-9]+)(\.[0-9]+)?)(E[+-]?[0-9]+)?([^0-9]*)$/);
/**
* symbolMap( cldr )
*
* @cldr [Cldr instance].
*
* Return the (localized symbol, pattern symbol) key value pair, eg. {
* "٫": ".",
* "٬": ",",
* "٪": "%",
* ...
* };
*/
var numberSymbolMap = function( cldr ) {
var symbol,
symbolMap = {};
for ( symbol in numberSymbolName ) {
symbolMap[ numberSymbol( numberSymbolName[ symbol ], cldr ) ] = symbol;
}
return symbolMap;
};
var arrayMap = function( array, callback ) {
var clone, i, length;
if ( array.map ) {
return array.map( callback );
}
for ( clone = [], i = 0, length = array.length; i < length; i++ ) {
clone[ i ] = callback( array[ i ], i, array );
}
return clone;
};
var objectKeys = function( object ) {
var i,
result = [];
if ( Object.keys ) {
return Object.keys( object );
}
for ( i in object ) {
result.push( i );
}
return result;
};
// 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" );
};
/**
* parse( value, cldr )
*
* @value [String].
*
* @cldr [Cldr instance].
*
* Return the parsed Number (including Infinity) or NaN when value is invalid.
* ref: http://www.unicode.org/reports/tr35/tr35-numbers.html
*/
var numberParse = function( value, pattern, cldr ) {
var aux, localizedSymbolsRe, number, prefix, properties, suffix, symbolMap;
// Infinite number.
if ( aux = value.match( numberSymbol( "infinity", cldr ) ) ) {
number = Infinity;
prefix = value.slice( 0, aux.length );
suffix = value.slice( aux.length + 1 );
// Finite number.
} else {
symbolMap = numberSymbolMap( cldr );
localizedSymbolsRe = new RegExp( arrayMap( objectKeys( symbolMap ), function( localizedSymbol ) {
return regexpEscape( localizedSymbol );
}).join( "|" ), "g" );
// Reverse localized symbols.
value = value.replace( localizedSymbolsRe, function( localizedSymbol ) {
return symbolMap[ localizedSymbol ];
});
// Is it a valid number?
value = value.match( numberNumberRe );
if ( !value ) {
// Invalid number.
return NaN;
}
prefix = value[ 1 ];
suffix = value[ 6 ];
// Remove grouping separators.
number = value[ 2 ].replace( /,/g, "" );
// Scientific notation
if ( value[ 5 ] ) {
number += value[ 5 ];
}
number = +number;
// Is it a valid number?
if ( isNaN( number ) ) {
// Invalid number.
return NaN;
}
// Percent
if ( value[ 0 ].indexOf( "%" ) !== -1 ) {
number /= 100;
// Per mille
} else if ( value[ 0 ].indexOf( "\u2030" ) !== -1 ) {
number /= 1000;
}
}
// Negative number
// "If there is an explicit negative subpattern, it serves only to specify the negative prefix and suffix. If there is no explicit negative subpattern, the negative subpattern is the localized minus sign prefixed to the positive subpattern" UTS#35
pattern = pattern.split( ";" );
properties = numberPatternProperties( pattern[ 1 ] || pattern[ 0 ] );
if ( prefix === ( pattern[ 1 ] ? "" : "-" ) + properties[ 0 ] && suffix === properties[ 10 ] ) {
number *= -1;
}
return number;
};
/**
* Pattern( style )

@@ -639,3 +819,3 @@ *

/**
* Globalize.formatNumber( value, pattern, locale )
* .formatNumber( value, pattern )
*

@@ -648,8 +828,7 @@ * @value [Number]

*
* @locale [String]
*
* Format a number according to the given attributes and the given locale (or the default locale if not specified).
* Format a number according to the given attributes and default/instance locale.
*/
Globalize.formatNumber = function( value, attributes, locale ) {
var pattern;
Globalize.formatNumber =
Globalize.prototype.formatNumber = function( value, attributes ) {
var cldr, pattern;

@@ -661,24 +840,32 @@ if ( typeof value !== "number" ) {

attributes = attributes || {};
locale = commonGetLocale( locale );
cldr = this.cldr;
if ( !attributes.pattern ) {
pattern = numberPattern( attributes.style || "decimal", locale );
pattern = numberPattern( attributes.style || "decimal", cldr );
}
return numberFormat( value, pattern, locale, attributes );
return numberFormat( value, pattern, cldr, attributes );
};
/**
* Globalize.parseNumber( value, patterns, locale )
* .parseNumber( value )
*
* @value [String]
*
* @patterns [TBD]
*
* @locale [String]
*
* Return a Number or null.
* Return the parsed Number (including Infinity) or NaN when value is invalid.
*/
Globalize.parseNumber = function( /*value, patterns, locale*/ ) {
return null;
Globalize.parseNumber =
Globalize.prototype.parseNumber = function( value ) {
var cldr, pattern;
if ( typeof value !== "string" ) {
throw new Error( "Value is not a string" );
}
cldr = this.cldr;
// TODO: What about per mille? Which "style" does it belong to?
pattern = numberPattern( value.indexOf( "%" ) !== -1 ? "percent" : "decimal", cldr );
return numberParse( value, pattern, cldr );
};

@@ -685,0 +872,0 @@

/*!
* Globalize v1.0.0-alpha.2 2014-04-18T14:47Z Released under the MIT license
* Globalize v1.0.0-alpha.3 2014-05-27T18:22Z Released under the MIT license
* http://git.io/TrdQbw
*/
!function(a,b){"function"==typeof define&&define.amd?define(["cldr","../globalize"],b):"object"==typeof exports?module.exports=b(require("cldrjs"),require("globalize")):b(a.Cldr,a.Globalize)}(this,function(a,b){var c=function(c){return c?new a(c):b.locale()},d=function(a,b,c){var d,e=b,f="",g=",",h=c?!0:!1;for(a=String(a).split("."),d=a[0].length;d>e;)f=a[0].slice(d-e,d)+(f.length?g:"")+f,d-=e,h&&(e=c,h=!1);return a[0]=a[0].slice(0,d)+(f.length?g:"")+f,a.join(".")},e=function(a){return isNaN(a)?0/0:Math[0>a?"ceil":"floor"](a)},f=function(a,b,c){var d;for("string"!=typeof a&&(a=String(a)),d=a.length;b>d;d+=1)a=c?a+"0":"0"+a;return a},g=function(a,b,c,d,g,h){return c>d&&(d=c),d?(a=h?g(a,h):g(a,Math.pow(10,-d)),a=+a.toFixed(d),c&&(a=String(a).split("."),a[1]=f(a[1]||"",c,!0),a=a.join("."))):a=e(a),a=String(a),b&&(a=a.split("."),a[0]=f(a[0],b),a=a.join(".")),a},h=/^(('[^']+'|''|[^*#@0,.E])*)(\*.)?((([#,]*[0,]*0+)(\.0*[0-9]*#*)?)|([#,]*@+#*))(E\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/,i=function(a){var b,c,d,e,f,g,i,j,k,l,m,n,o,p,q,r,s,t;if(a=a.match(h),!a)throw new Error("Invalid pattern: "+a);if(n=a[1],m=a[3],e=a[4],s=a[8],q=a[9],t=a[10],s?s.replace(/(@+)(#*)/,function(a,b,c){l=b.length,i=l+c.length}):(d=a[7],f=a[6],d&&(d.replace(/[0-9]+/,function(a){j=a}),j&&(p=+("0."+j),j=j.length),g=d.length-1),f.replace(/0+$/,function(a){k=a.length})),q)throw new Error("Scientific notation not implemented");if(m)throw new Error("Padding not implemented");return-1!==(b=e.lastIndexOf(","))&&(c=e.split(".")[0],o=c.length-b-1,-1!==(c=e.lastIndexOf(",",b-1))&&(r=b-1-c)),[n,m,k,j,g,l,i,p,o,r,t]},j=function(a,b,c){var d,e;return a=a.toPrecision(b+2),d=Math.ceil(Math.log(Math.abs(a))/Math.log(10)),d-=b,e=Math.pow(10,d),a=c(a,e),0>d&&(a=+a.toFixed(-d)),a},k=function(a,b,c,d){var e,g;if(b>c&&(c=b),e=j(a,b,d),g=j(a,c,d),a=+e===+g?e:g,a=(+a).toString(10),/e/.test(a))throw new Error("Ops! Integers out of (1e21, 1e-7) not supported");return b-a.replace(/^0+|\./g,"").length>0&&(a=a.split("."),a[1]=f(a[1]||"",b-a[0].replace(/^0+/,"").length,!0),a=a.join(".")),a},l=function(a){return a.main("numbers/defaultNumberingSystem")},m={".":"decimal",",":"group","%":"percentSign","+":"plusSign","-":"minusSign",E:"exponential","‰":"perMille"},n=function(a,b){return b.main(["numbers/symbols-numberSystem-"+l(b),m[a]])},o=function(a){return a=a||"round",a="truncate"===a?e:Math[a],function(b,c){return c=c||1,a(b/c)*c}},p=function(a,b,c,e){var f,h,j,l,m,p,q,r,s,t,u,v,w,x;if(isNaN(a))return n("nan",c);if(b=b.split(";"),e=e||{},u=o(e.round),s=i(b[0]),p=s[1],l=e.minimumIntegerDigits||s[2],j=e.minimumFractionDigits||s[3],f=e.maximumFractionDigits||s[4],m=e.minimumSignificantDigits||s[5],h=e.maximumSignificantDigits||s[6],v=s[7],r=s[8],w=s[9],0>a?(b=b[1]||"-"+b[0],s=i(b)):b=b[0],q=s[0],x=s[10],!isFinite(a))return q+n("infinity",c)+x;if(t=q,-1!==b.indexOf("%")?a*=100:-1!==b.indexOf("‰")&&(a*=1e3),m&&h)a=k(a,m,h,u);else{if(m||h)throw new Error("None or both the minimum and maximum significant digits must be present");a=g(a,l,j,f,u,v)}return a=a.replace(/^-/,""),!r||"useGrouping"in e&&!e.useGrouping||(a=d(a,r,w)),t+=a,t+=x,t.replace(/'[^']+'|[.,\-+E%\u2030]/g,function(a){return"'"===a.charAt(0)?a:n(a,c)})},q=function(a,b){if("decimal"!==a&&"percent"!==a)throw new Error("Invalid style");return b.main(["numbers",a+"Formats-numberSystem-"+l(b),"standard"])};return b.formatNumber=function(a,b,d){var e;if("number"!=typeof a)throw new Error("Value is not a number");return b=b||{},d=c(d),b.pattern||(e=q(b.style||"decimal",d)),p(a,e,d,b)},b.parseNumber=function(){return null},b});
!function(a,b){"function"==typeof define&&define.amd?define(["cldr","../globalize"],b):"object"==typeof exports?module.exports=b(require("cldrjs"),require("globalize")):b(a.Cldr,a.Globalize)}(this,function(a,b){var c=function(a,b,c){var d,e=b,f="",g=",",h=c?!0:!1;for(a=String(a).split("."),d=a[0].length;d>e;)f=a[0].slice(d-e,d)+(f.length?g:"")+f,d-=e,h&&(e=c,h=!1);return a[0]=a[0].slice(0,d)+(f.length?g:"")+f,a.join(".")},d=function(a){return isNaN(a)?0/0:Math[0>a?"ceil":"floor"](a)},e=function(a,b,c){var d;for("string"!=typeof a&&(a=String(a)),d=a.length;b>d;d+=1)a=c?a+"0":"0"+a;return a},f=function(a,b,c,f,g,h){return c>f&&(f=c),f?(a=h?g(a,h):g(a,Math.pow(10,-f)),a=+a.toFixed(f),c&&(a=String(a).split("."),a[1]=e(a[1]||"",c,!0),a=a.join("."))):a=d(a),a=String(a),b&&(a=a.split("."),a[0]=e(a[0],b),a=a.join(".")),a},g=function(a,b,c){var d,e;return a=a.toPrecision(b+2),d=Math.ceil(Math.log(Math.abs(a))/Math.log(10)),d-=b,e=Math.pow(10,d),a=c(a,e),0>d&&(a=+a.toFixed(-d)),a},h=function(a,b,c,d){var f,h;if(b>c&&(c=b),f=g(a,b,d),h=g(a,c,d),a=+f===+h?f:h,a=(+a).toString(10),/e/.test(a))throw new Error("Ops! Integers out of (1e21, 1e-7) not supported");return b-a.replace(/^0+|\./g,"").length>0&&(a=a.split("."),a[1]=e(a[1]||"",b-a[0].replace(/^0+/,"").length,!0),a=a.join(".")),a},i=/^(('[^']+'|''|[^*#@0,.E])*)(\*.)?((([#,]*[0,]*0+)(\.0*[0-9]*#*)?)|([#,]*@+#*))(E\+?0+)?(('[^']+'|''|[^*#@0,.E])*)$/,j=function(a){var b,c,d,e,f,g,h,j,k,l,m,n,o,p,q,r,s,t;if(a=a.match(i),!a)throw new Error("Invalid pattern: "+a);if(n=a[1],m=a[3],e=a[4],s=a[8],q=a[9],t=a[10],s?s.replace(/(@+)(#*)/,function(a,b,c){l=b.length,h=l+c.length}):(d=a[7],f=a[6],d&&(d.replace(/[0-9]+/,function(a){j=a}),j&&(p=+("0."+j),j=j.length),g=d.length-1),f.replace(/0+$/,function(a){k=a.length})),q)throw new Error("Scientific notation not implemented");if(m)throw new Error("Padding not implemented");return-1!==(b=e.lastIndexOf(","))&&(c=e.split(".")[0],o=c.length-b-1,-1!==(c=e.lastIndexOf(",",b-1))&&(r=b-1-c)),[n,m,k,j,g,l,h,p,o,r,t]},k=function(a){return a.main("numbers/defaultNumberingSystem")},l=function(a,b){return b.main(["numbers/symbols-numberSystem-"+k(b),a])},m={".":"decimal",",":"group","%":"percentSign","+":"plusSign","-":"minusSign",E:"exponential","‰":"perMille"},n=function(a){return a=a||"round",a="truncate"===a?d:Math[a],function(b,c){return c=c||1,a(b/c)*c}},o=function(a,b,d,e){var g,i,k,o,p,q,r,s,t,u,v,w,x,y;if(isNaN(a))return l("nan",d);if(b=b.split(";"),e=e||{},v=n(e.round),t=j(b[0]),q=t[1],o=e.minimumIntegerDigits||t[2],k=e.minimumFractionDigits||t[3],g=e.maximumFractionDigits||t[4],p=e.minimumSignificantDigits||t[5],i=e.maximumSignificantDigits||t[6],w=t[7],s=t[8],x=t[9],0>a?(b=b[1]||"-"+b[0],t=j(b)):b=b[0],r=t[0],y=t[10],!isFinite(a))return r+l("infinity",d)+y;if(u=r,-1!==b.indexOf("%")?a*=100:-1!==b.indexOf("‰")&&(a*=1e3),p&&i)a=h(a,p,i,v);else{if(p||i)throw new Error("None or both the minimum and maximum significant digits must be present");a=f(a,o,k,g,v,w)}return a=a.replace(/^-/,""),!s||"useGrouping"in e&&!e.useGrouping||(a=c(a,s,x)),u+=a,u+=y,u.replace(/'[^']+'|[.,\-+E%\u2030]/g,function(a){return"'"===a.charAt(0)?a:l(m[a],d)})},p=/^([^0-9]*)(([0-9,]*[0-9]+)(\.[0-9]+)?)(E[+-]?[0-9]+)?([^0-9]*)$/,q=function(a){var b,c={};for(b in m)c[l(m[b],a)]=b;return c},r=function(a,b){var c,d,e;if(a.map)return a.map(b);for(c=[],d=0,e=a.length;e>d;d++)c[d]=b(a[d],d,a);return c},s=function(a){var b,c=[];if(Object.keys)return Object.keys(a);for(b in a)c.push(b);return c},t=function(a){return a.replace(/([.*+?^=!:${}()|\[\]\/\\])/g,"\\$1")},u=function(a,b,c){var d,e,f,g,h,i,k;if(d=a.match(l("infinity",c)))f=1/0,g=a.slice(0,d.length),i=a.slice(d.length+1);else{if(k=q(c),e=new RegExp(r(s(k),function(a){return t(a)}).join("|"),"g"),a=a.replace(e,function(a){return k[a]}),a=a.match(p),!a)return 0/0;if(g=a[1],i=a[6],f=a[2].replace(/,/g,""),a[5]&&(f+=a[5]),f=+f,isNaN(f))return 0/0;-1!==a[0].indexOf("%")?f/=100:-1!==a[0].indexOf("‰")&&(f/=1e3)}return b=b.split(";"),h=j(b[1]||b[0]),g===(b[1]?"":"-")+h[0]&&i===h[10]&&(f*=-1),f},v=function(a,b){if("decimal"!==a&&"percent"!==a)throw new Error("Invalid style");return b.main(["numbers",a+"Formats-numberSystem-"+k(b),"standard"])};return b.formatNumber=b.prototype.formatNumber=function(a,b){var c,d;if("number"!=typeof a)throw new Error("Value is not a number");return b=b||{},c=this.cldr,b.pattern||(d=v(b.style||"decimal",c)),o(a,d,c,b)},b.parseNumber=b.prototype.parseNumber=function(a){var b,c;if("string"!=typeof a)throw new Error("Value is not a string");return b=this.cldr,c=v(-1!==a.indexOf("%")?"percent":"decimal",b),u(a,c,b)},b});

@@ -1,8 +0,10 @@

## Globalize.locale( [locale] )
## Globalize.locale( [locale|cldr] )
Set default locale, or get it if locale argument is omitted.
Return the default [Cldr instance](https://github.com/rxaviers/cldrjs).
An application that supports globalization and/or localization will need to
have a way to determine the user's preference. Attempting to automatically
determine the appropriate culture is useful, but it is good practice to always
determine the appropriate locale is useful, but it is good practice to always
offer the user a choice, by whatever means.

@@ -20,6 +22,9 @@

**locale**
**locale|cldr**
The locale string, eg. `en`, `pt-BR`, or `zh-Hant-TW`.
The locale string, eg. `en`, `pt-BR`, or `zh-Hant-TW`. Or,
The [Cldr instance](https://github.com/rxaviers/cldrjs), eg. new
`Cldr( "en" )`.
### Example

@@ -26,0 +31,0 @@

@@ -1,4 +0,4 @@

## Globalize.formatDate( value, format [, locale] )
## .formatDate( value, format )
Format a date according to the given format and locale (or the current locale if not specified).
Format a date `value` according to the given `format`.

@@ -62,13 +62,18 @@ ### Parameters

**locale** Optional
### Example
Locale string that overrides default;
You can use the static method `Globalize.formatDate()`, which uses the default
locale.
### Example
```javascript
Globalize.locale( "en" );
Globalize.formatDate( new Date( 2010, 10, 30, 17, 55 ), { datetime: "short" } );
// "11/30/10, 5:55 PM"
```
Globalize.formatDate( new Date( 2010, 10, 30, 17, 55 ), { datetime: "short" }, "de" );
You can use the instance method `.formatDate()`, which uses the instance locale.
```javascript
var de = new Globalize( "de" );
de.formatDate( new Date( 2010, 10, 30, 17, 55 ), { datetime: "short" } );
// "30.11.10 17:55"

@@ -75,0 +80,0 @@ ```

@@ -1,7 +0,6 @@

## Globalize.parseDate( value [, formats] [, locale] )
## Globalize.parseDate( value [, formats] )
Parse a string representing a date into a JavaScript Date object, taking into
account the given possible formats (or the given locale's set of preset
formats if not provided). As before, the current locale is used if one is not
specified.
account the given possible formats (or the given locale's set of preset formats
if not provided).

@@ -18,8 +17,7 @@ ### Parameters

**locale** Optional
### Example
Locale string that overrides default.
You can use the static method `Globalize.parseDate()`, which uses the default
locale.
### Example
```javascript

@@ -35,1 +33,8 @@ Globalize.locale( "en" );

You can use the instance method `.parseDate()`, which uses the instance locale.
```javascript
var es = new Globalize( "es" );
es.parseDate( "1/2/13" );
// Fri Feb 01 2013 00:00:00
```

@@ -1,4 +0,4 @@

## Globalize.loadMessages( locale, messageData )
## .loadMessages( messageData )
Load message data per locale.
Load message data for the default (or instance) locale.

@@ -17,4 +17,8 @@ ### Parameters

You can use the static method `Globalize.loadMessages()`, which uses the default
locale.
```javascript
Globalize.loadMessages( "pt_BR", {
Globalize.locale( "pt_BR" );
Globalize.loadMessages({
greetings: {

@@ -26,1 +30,13 @@ hello: "Olá",

```
You can use the instance method `.loadMessages()`, which uses the instance locale.
```javascript
var ptBr = new Globalize( "pt-BR" );
ptBr.loadMessages({
greetings: {
hello: "Olá",
bye: "Tchau"
}
});
```

@@ -1,2 +0,2 @@

## Globalize.translate( path [, locale] )
## .translate( path )

@@ -10,8 +10,7 @@ Translate item given its path.

**locale** Optional
### Example
Locale string that overrides default.
You can use the static method `Globalize.translate()`, which uses the default
locale.
### Example
```javascript

@@ -22,1 +21,9 @@ Globalize.locale( "pt_BR" );

```
You can use the instance method `.translate()`, which uses the instance locale.
```javascript
var ptBr = new Globalize( "pt-BR" );
ptBr.translate( "greetings/bye" );
// ➡ "Tchau"
```

@@ -1,5 +0,4 @@

## Globalize.formatNumber( value [, attributes] [, locale] )
## .formatNumber( value [, attributes] )
Format a number according to the given attributes and the given locale (or the
default locale if not specified).
Format a number `value` according to the given `attributes`.

@@ -48,19 +47,26 @@ ### Parameters

**locale** Optional
### Example
Locale string that overrides default.
You can use the static method `Globalize.formatNumber()`, which uses the default
locale.
### Example
```javascript
Globalize.locale( "en" );
Globalize.formatNumber( 3.141592 ); // "3.142"
Globalize.formatNumber( 3.141592, {}, "es" ); // "3,142"
Globalize.formatNumber( 3.141592, {}, "ar" ); // "3٫142"
```
You can use the instance method `.formatNumber()`, which uses the instance
locale.
```javascript
var ar = new Globalize( "ar" ),
es = new Globalize( "es" );
ar.formatNumber( 3.141592 ); // "3٫142"
es.formatNumber( 3.141592 ); // "3,142"
```
Controlling digits by specifying integer and fraction digits counts:
```
```javascript
Globalize.formatNumber( 3.141592, { maximumFractionDigits: 2 } );

@@ -75,3 +81,3 @@ // "3.14"

```
```javascript
Globalize.formatNumber( 3.141592, {

@@ -89,3 +95,3 @@ minimumSignificantDigits: 1,

equal( Globalize.formatNumber( 0.00012345, {
Globalize.formatNumber( 0.00012345, {
minimumSignificantDigits: 1,

@@ -99,5 +105,5 @@ maximumSignificantDigits: 3

```
```javascript
Globalize.formatNumber( 3.141592, { maximumFractionDigits: 2, round: "ceil" } );
// "3.15"
```

@@ -229,2 +229,8 @@ module.exports = function( grunt ) {

},
compare_size: {
files: [
"dist/globalize.min.js",
"dist/globalize/*min.js"
]
},
clean: {

@@ -259,5 +265,6 @@ dist: [

"test:functional",
"uglify"
"uglify",
"compare_size"
] );
};
{
"name": "globalize",
"version": "1.0.0-alpha.2",
"version": "1.0.0-alpha.3",
"description": "New age globalization and localization. Formats and parses strings, dates and numbers in over 350 cultures.",

@@ -65,2 +65,3 @@ "keywords": [

"grunt": "0.4.x",
"grunt-compare-size": "0.4.0",
"grunt-contrib-clean": "0.5.0",

@@ -67,0 +68,0 @@ "grunt-contrib-connect": "0.3.0",

@@ -26,5 +26,5 @@ # Globalize

- [Core](#core)
- [Number module](#number_module)
- [Date module](#date_module)
- [Message module](#message_module)
- [Number module](#number_module)
- more to come...

@@ -100,4 +100,4 @@ - [Development](#development)

| globalize/date.js | +9.2KB | [Date module](#date_module) provides date formatting and parsing |
| globalize/message.js | +0.7KB | [Message module](#message_module) provides message translation |
| globalize/number.js | +3.7KB | [Number module](#number_module) provides number formatting and parsing |
| globalize/translate.js | +0.7KB | [Message module](#message_module) provides message translation |
<!--- By updating this table, also update its clone in #usage -->

@@ -205,3 +205,3 @@

- **`Globalize.locale( [locale] )`**
- **`Globalize.locale( [locale|cldr] )`**

@@ -212,32 +212,22 @@ Set default locale, or get it if locale argument is omitted.

<a name="number_module"></a>
### Number module
- **`[new] Globalize( locale|cldr )`**
- **`Globalize.formatNumber( value [, attributes] [, locale] )`**
Create a Globalize instance.
Format a number according to the given attributes and the given locale (or the
default locale if not specified).
[Read more...](doc/api/core/constructor.md)
[Read more...](doc/api/number/format.md)
- **`Globalize.parseNumber( value [, formats], [locale] )`**
TBD
<a name="date_module"></a>
### Date module
- **`Globalize.formatDate( value, format [, locale] )`**
- **`.formatDate( value, format )`**
Format a date according to the given format and locale (or the current locale
if not specified).
Format a date `value` according to the given `format`.
[Read more...](doc/api/date/format.md)
- **`Globalize.parseDate( value [, formats] [, locale] )`**
- **`.parseDate( value [, formats] )`**
Parse a string representing a date into a JavaScript Date object, taking into
account the given possible formats (or the given locale's set of preset formats
if not provided). As before, the current locale is used if one is not
specified.
Parse a string representing a date into a JavaScript Date object, taking into
account the given possible formats (or the given locale's set of preset
formats if not provided).

@@ -249,9 +239,9 @@ [Read more...](doc/api/date/parse.md)

- **`Globalize.loadMessages( locale, messageData )`**
- **`.loadMessages( messageData )`**
Load message data per locale.
Load message data.
[Read more...](doc/api/message/load.md)
- **`Globalize.translate( path [, locale] )`**
- **`.translate( path )`**

@@ -262,3 +252,19 @@ Translate item given its path.

<a name="number_module"></a>
### Number module
- **`.formatNumber( value [, attributes] )`**
Format a number according to the given attributes.
[Read more...](doc/api/number/format.md)
- **`.parseNumber( value )`**
Parse a string representing a number taking into account the localized
symbols. If value is invalid, `NaN` is returned.
[Read more...](doc/api/number/parse.md)
<a name="development"></a>

@@ -284,3 +290,3 @@ ## Development

│ ├── date.js (date module)
│ ├── translate.js (translate module)
│ ├── message.js (message module)
│ └── util/ (basic JavaScript helpers polyfills, eg array.map)

@@ -305,3 +311,3 @@ └── test/ (unit and functional test files)

Core, and all modules' public APIs are located in the `src/` directory. For
example: `core.js`, `date.js`, and `translate.js`.
example: `core.js`, `date.js`, and `message.js`.

@@ -308,0 +314,0 @@ <a name="build"></a>

@@ -6,3 +6,3 @@ /*!

*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license

@@ -9,0 +9,0 @@ * http://jquery.org/license

@@ -6,3 +6,3 @@ /*!

*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license

@@ -9,0 +9,0 @@ * http://jquery.org/license

@@ -6,3 +6,3 @@ /*!

*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license

@@ -9,0 +9,0 @@ * http://jquery.org/license

@@ -6,3 +6,3 @@ /*!

*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license

@@ -9,0 +9,0 @@ * http://jquery.org/license

@@ -6,3 +6,3 @@ /*!

*
* Copyright 2005, 2013 jQuery Foundation, Inc. and other contributors
* Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors
* Released under the MIT license

@@ -9,0 +9,0 @@ * http://jquery.org/license

define([
"cldr"
], function( Cldr ) {
"cldr",
"./util/always-cldr"
], function( Cldr, alwaysCldr ) {
var defaultLocale,
Globalize = {};
/**
* [new] Globalize( locale|cldr )
*
* @locale [String]
*
* @cldr [Cldr instance]
*
* Create a Globalize instance.
*/
function Globalize( locale ) {
if ( !( this instanceof Globalize ) ) {
return new Globalize( locale );
}
if ( !locale ) {
throw new Error( "Missing locale" );
}
this.cldr = alwaysCldr( locale );
}
/**

@@ -21,15 +40,17 @@ * Globalize.load( json )

/**
* Globalize.locale( [locale] )
* Globalize.locale( [locale|cldr] )
*
* @locale [String]
*
* Set default locale.
* Get default locale if locale argument is undefined.
* Somewhat equivalent to previous culture( selector ).
* @cldr [Cldr instance]
*
* Set default Cldr instance if locale or cldr argument is passed.
*
* Return the default Cldr instance.
*/
Globalize.locale = function( locale ) {
if ( arguments.length ) {
defaultLocale = new Cldr( locale );
this.cldr = alwaysCldr( locale );
}
return defaultLocale;
return this.cldr;
};

@@ -36,0 +57,0 @@

define([
"cldr",
"./common/get-locale",
"./core",

@@ -12,6 +11,6 @@ "./date/all-presets",

"cldr/supplemental"
], function( Cldr, commonGetLocale, Globalize, dateAllPresets, dateExpandPattern, dateFormat, dateParse, alwaysArray, arraySome ) {
], function( Cldr, Globalize, dateAllPresets, dateExpandPattern, dateFormat, dateParse, alwaysArray, arraySome ) {
/**
* Globalize.formatDate( value, pattern, locale )
* .formatDate( value, pattern )
*

@@ -22,7 +21,8 @@ * @value [Date]

*
* @locale [String]
*
* Formats a date or number according to the given pattern string and the given locale (or the default locale if not specified).
* Formats a date or number according to the given pattern string and the default/instance locale.
*/
Globalize.formatDate = function( value, pattern, locale ) {
Globalize.formatDate =
Globalize.prototype.formatDate = function( value, pattern ) {
var cldr;
if ( !( value instanceof Date ) ) {

@@ -36,9 +36,9 @@ throw new Error( "Value is not date" );

locale = commonGetLocale( locale );
pattern = dateExpandPattern( pattern, locale );
return dateFormat( value, pattern, locale );
cldr = this.cldr;
pattern = dateExpandPattern( pattern, cldr );
return dateFormat( value, pattern, cldr );
};
/**
* Globalize.parseDate( value, patterns, locale )
* .parseDate( value, patterns )
*

@@ -49,9 +49,7 @@ * @value [String]

*
* @locale [String]
*
* Return a Date instance or null.
*/
Globalize.parseDate = function( value, patterns, locale ) {
var date;
locale = commonGetLocale( locale );
Globalize.parseDate =
Globalize.prototype.parseDate = function( value, patterns ) {
var cldr, date;

@@ -62,4 +60,6 @@ if ( typeof value !== "string" ) {

cldr = this.cldr;
if ( !patterns ) {
patterns = dateAllPresets( locale );
patterns = dateAllPresets( cldr );
} else {

@@ -70,4 +70,4 @@ patterns = alwaysArray( patterns );

arraySome( patterns, function( pattern ) {
pattern = dateExpandPattern( pattern, locale );
date = dateParse( value, pattern, locale );
pattern = dateExpandPattern( pattern, cldr );
date = dateParse( value, pattern, cldr );
return !!date;

@@ -74,0 +74,0 @@ });

define([
"cldr",
"./common/get-locale",
"./core",
"./util/always-array"
], function( Cldr, commonGetLocale, Globalize, alwaysArray ) {
], function( Cldr, Globalize, alwaysArray ) {
/**
* Globalize.loadMessages( locale, json )
* .loadMessages( json )
*
* @locale [String]
*
* @json [JSON]
*
* Load messages (translation) data per locale.
* Load messages (translation) data for default/instance locale.
*/
Globalize.loadMessages = function( locale, json ) {
Globalize.loadMessages =
Globalize.prototype.loadMessages = function( json ) {
var customData = {
"globalize-messages": {}
};
locale = new Cldr( locale );
customData[ "globalize-messages" ][ locale.attributes.languageId ] = json;
customData[ "globalize-messages" ][ this.cldr.attributes.languageId ] = json;
Cldr.load( customData );

@@ -27,14 +24,12 @@ };

/**
* Globalize.translate( path, locale )
* .translate( path )
*
* @path [String or Array]
*
* @locale [String]
*
* Translate item given its path.
*/
Globalize.translate = function( path , locale ) {
locale = commonGetLocale( locale );
Globalize.translate =
Globalize.prototype.translate = function( path ) {
path = alwaysArray( path );
return locale.get( [ "globalize-messages/{languageId}" ].concat( path ) );
return this.cldr.get( [ "globalize-messages/{languageId}" ].concat( path ) );
};

@@ -41,0 +36,0 @@

define([
"./common/get-locale",
"./core",
"./number/format",
"./number/parse",
"./number/pattern"
], function( commonGetLocale, Globalize, numberFormat, numberPattern ) {
], function( Globalize, numberFormat, numberParse, numberPattern ) {
/**
* Globalize.formatNumber( value, pattern, locale )
* .formatNumber( value, pattern )
*

@@ -17,8 +17,7 @@ * @value [Number]

*
* @locale [String]
*
* Format a number according to the given attributes and the given locale (or the default locale if not specified).
* Format a number according to the given attributes and default/instance locale.
*/
Globalize.formatNumber = function( value, attributes, locale ) {
var pattern;
Globalize.formatNumber =
Globalize.prototype.formatNumber = function( value, attributes ) {
var cldr, pattern;

@@ -30,24 +29,32 @@ if ( typeof value !== "number" ) {

attributes = attributes || {};
locale = commonGetLocale( locale );
cldr = this.cldr;
if ( !attributes.pattern ) {
pattern = numberPattern( attributes.style || "decimal", locale );
pattern = numberPattern( attributes.style || "decimal", cldr );
}
return numberFormat( value, pattern, locale, attributes );
return numberFormat( value, pattern, cldr, attributes );
};
/**
* Globalize.parseNumber( value, patterns, locale )
* .parseNumber( value )
*
* @value [String]
*
* @patterns [TBD]
*
* @locale [String]
*
* Return a Number or null.
* Return the parsed Number (including Infinity) or NaN when value is invalid.
*/
Globalize.parseNumber = function( /*value, patterns, locale*/ ) {
return null;
Globalize.parseNumber =
Globalize.prototype.parseNumber = function( value ) {
var cldr, pattern;
if ( typeof value !== "string" ) {
throw new Error( "Value is not a string" );
}
cldr = this.cldr;
// TODO: What about per mille? Which "style" does it belong to?
pattern = numberPattern( value.indexOf( "%" ) !== -1 ? "percent" : "decimal", cldr );
return numberParse( value, pattern, cldr );
};

@@ -54,0 +61,0 @@

define([
"./format/grouping-separator",
"./format/integer-fraction-digits",
"./format/properties",
"./format/significant-digits",
"./pattern-properties",
"./symbol",
"./symbol/name",
"../util/number/round"
], function( numberFormatGroupingSeparator, numberFormatIntegerFractionDigits, numberFormatProperties, numberFormatSignificantDigits, numberSymbol, numberRound ) {
], function( numberFormatGroupingSeparator, numberFormatIntegerFractionDigits, numberFormatSignificantDigits, numberPatternProperties, numberSymbol, numberSymbolName, numberRound ) {

@@ -41,3 +42,3 @@ /**

round = numberRound( options.round );
properties = numberFormatProperties( pattern[ 0 ] );
properties = numberPatternProperties( pattern[ 0 ] );
padding = properties[ 1 ];

@@ -59,3 +60,3 @@ minimumIntegerDigits = options.minimumIntegerDigits || properties[ 2 ];

pattern = pattern[ 1 ] || "-" + pattern[ 0 ];
properties = numberFormatProperties( pattern );
properties = numberPatternProperties( pattern );
} else {

@@ -122,3 +123,3 @@ pattern = pattern[ 0 ];

}
return numberSymbol( symbol, cldr );
return numberSymbol( numberSymbolName[ symbol ], cldr );
});

@@ -125,0 +126,0 @@ };

define([
"./numbering-system",
"./symbol/name"
], function( numberNumberingSystem, numberSymbolName ) {
"./numbering-system"
], function( numberNumberingSystem ) {
/**
* MinusSign( symbol, cldr )
* Symbol( name, cldr )
*
* Return the localized minus sign.
* @name [String] Symbol name.
*
* @cldr [Cldr instance].
*
* Return the localized symbol given its name.
*/
return function( symbol, cldr ) {
return function( name, cldr ) {
return cldr.main([
"numbers/symbols-numberSystem-" + numberNumberingSystem( cldr ),
numberSymbolName[ symbol ]
name
]);

@@ -16,0 +19,0 @@ };

@@ -19,3 +19,4 @@ require.config({

/* number */
"./functional/number/format"
"./functional/number/format",
"./functional/number/parse"

@@ -22,0 +23,0 @@ ], function() {

define([
"globalize",
"json!fixtures/cldr/main/en/ca-gregorian.json",
"json!fixtures/cldr/main/pt/ca-gregorian.json",
"json!fixtures/cldr/supplemental/likelySubtags.json",

@@ -8,3 +9,3 @@ "json!fixtures/cldr/supplemental/timeData.json",

"globalize/date"
], function( Globalize, enCaGregorian, likelySubtags, timeData, weekData ) {
], function( Globalize, enCaGregorian, ptCaGregorian, likelySubtags, timeData, weekData ) {

@@ -14,2 +15,3 @@ var date = new Date( 2010, 8, 15, 17, 35, 7, 369 );

Globalize.load( enCaGregorian );
Globalize.load( ptCaGregorian );
Globalize.load( likelySubtags );

@@ -23,33 +25,37 @@ Globalize.load( timeData );

test( "should format skeleton", function() {
equal( Globalize.formatDate( date, { skeleton: "d" } ), "15", "" );
equal( Globalize.formatDate( date, { skeleton: "Ed" } ), "15 Wed", "" );
equal( Globalize.formatDate( date, { skeleton: "Ehms" } ), "Wed 5:35:07 PM", "" );
equal( Globalize.formatDate( date, { skeleton: "GyMMMEd" } ), "Wed, Sep 15, 2010 AD", "" );
equal( Globalize.formatDate( date, { skeleton: "yMd" } ), "9/15/2010", "" );
equal( Globalize.formatDate( date, { skeleton: "yQQQ" } ), "Q3 2010", "" );
equal( Globalize.formatDate( date, { skeleton: "d" } ), "15" );
equal( Globalize.formatDate( date, { skeleton: "Ed" } ), "15 Wed" );
equal( Globalize.formatDate( date, { skeleton: "Ehms" } ), "Wed 5:35:07 PM" );
equal( Globalize.formatDate( date, { skeleton: "GyMMMEd" } ), "Wed, Sep 15, 2010 AD" );
equal( Globalize.formatDate( date, { skeleton: "yMd" } ), "9/15/2010" );
equal( Globalize.formatDate( date, { skeleton: "yQQQ" } ), "Q3 2010" );
// Passed as string
equal( Globalize.formatDate( date, "GyMMMEd" ), "Wed, Sep 15, 2010 AD", "" );
equal( Globalize.formatDate( date, "GyMMMEd" ), "Wed, Sep 15, 2010 AD" );
// Via instance .formatDate().
equal( Globalize( "pt" ).formatDate( date, { skeleton: "Ehms" } ), "qua, 5:35:07 PM" );
equal( Globalize( "pt" ).formatDate( date, { skeleton: "GyMMMEd" } ), "qua, 15 'de' set 'de' 2010 d.C." );
});
test( "should format time presets", function() {
equal( Globalize.formatDate( date, { time: "medium" } ), "5:35:07 PM", "" );
equal( Globalize.formatDate( date, { time: "short" } ), "5:35 PM", "" );
equal( Globalize.formatDate( date, { time: "medium" } ), "5:35:07 PM" );
equal( Globalize.formatDate( date, { time: "short" } ), "5:35 PM" );
});
test( "should format date presets", function() {
equal( Globalize.formatDate( date, { date: "full" } ), "Wednesday, September 15, 2010", "" );
equal( Globalize.formatDate( date, { date: "long" } ), "September 15, 2010", "" );
equal( Globalize.formatDate( date, { date: "medium" } ), "Sep 15, 2010", "" );
equal( Globalize.formatDate( date, { date: "short" } ), "9/15/10", "" );
equal( Globalize.formatDate( date, { date: "full" } ), "Wednesday, September 15, 2010" );
equal( Globalize.formatDate( date, { date: "long" } ), "September 15, 2010" );
equal( Globalize.formatDate( date, { date: "medium" } ), "Sep 15, 2010" );
equal( Globalize.formatDate( date, { date: "short" } ), "9/15/10" );
});
test( "should format datetime presets", function() {
equal( Globalize.formatDate( date, { datetime: "medium" } ), "Sep 15, 2010, 5:35:07 PM", "" );
equal( Globalize.formatDate( date, { datetime: "medium" } ), "Sep 15, 2010, 5:35:07 PM" );
});
test( "should format raw patterns", function() {
equal( Globalize.formatDate( date, { pattern: "E, MMM d, y G" } ), "Wed, Sep 15, 2010 AD", "" );
equal( Globalize.formatDate( date, { pattern: "E, MMM d, y G" } ), "Wed, Sep 15, 2010 AD" );
});
});

@@ -5,2 +5,3 @@ define([

"json!fixtures/cldr/main/en/ca-gregorian.json",
"json!fixtures/cldr/main/pt/ca-gregorian.json",
"json!fixtures/cldr/supplemental/likelySubtags.json",

@@ -10,3 +11,3 @@ "json!fixtures/cldr/supplemental/timeData.json",

"globalize/date"
], function( Globalize, startOf, enCaGregorian, likelySubtags, timeData, weekData ) {
], function( Globalize, startOf, enCaGregorian, ptCaGregorian, likelySubtags, timeData, weekData ) {

@@ -16,2 +17,3 @@ var date;

Globalize.load( enCaGregorian );
Globalize.load( ptCaGregorian );
Globalize.load( likelySubtags );

@@ -24,2 +26,6 @@ Globalize.load( timeData );

function assertParseDate( input, options, output ) {
deepEqual( Globalize.parseDate( input, options ), output, JSON.stringify( options ) );
}
test( "should parse skeleton", function() {

@@ -29,4 +35,4 @@ date = new Date();

date = startOf( date, "day" );
deepEqual( Globalize.parseDate( "15", { skeleton: "d" } ), date, "{ skeleton: \"d\" }" );
deepEqual( Globalize.parseDate( "15 Wed", { skeleton: "Ed" } ), date, "{ skeleton: \"Ed\" }" );
assertParseDate( "15", { skeleton: "d" }, date );
assertParseDate( "15 Wed", { skeleton: "Ed" }, date );

@@ -38,12 +44,15 @@ date = new Date();

date = startOf( date, "second" );
deepEqual( Globalize.parseDate( "Wed 5:35:07 PM", { skeleton: "Ehms" } ), date, "{ skeleton: \"Ehms\" }" );
assertParseDate( "Wed 5:35:07 PM", { skeleton: "Ehms" }, date );
date = new Date( 2010, 8, 15 );
date = startOf( date, "day" );
deepEqual( Globalize.parseDate( "Wed, Sep 15, 2010 AD", { skeleton: "GyMMMEd" } ), date, "{ skeleton: \"GyMMMEd\" }" );
deepEqual( Globalize.parseDate( "9/15/2010", { skeleton: "yMd" } ), date, "{ skeleton: \"yMd\" }" );
assertParseDate( "Wed, Sep 15, 2010 AD", { skeleton: "GyMMMEd" }, date );
assertParseDate( "9/15/2010", { skeleton: "yMd" }, date );
date = new Date( 2010, 0 );
date = startOf( date, "year" );
deepEqual( Globalize.parseDate( "Q3 2010", { skeleton: "yQQQ" } ), date, "{ skeleton: \"yQQQ\" }" );
assertParseDate( "Q3 2010", { skeleton: "yQQQ" }, date );
// Via instance globalize.parseDate().
deepEqual( Globalize( "pt" ).parseDate( "2010 T3", { skeleton: "yQQQ" } ), date, "{ skeleton: \"yQQQ\" }" );
});

@@ -57,5 +66,5 @@

date = startOf( date, "second" );
deepEqual( Globalize.parseDate( "5:35:07 PM", { time: "medium" } ), date, "{ time: \"medium\" }" );
assertParseDate( "5:35:07 PM", { time: "medium" }, date );
date = startOf( date, "minute" );
deepEqual( Globalize.parseDate( "5:35 PM", { time: "short" } ), date, "{ time: \"short\" }" );
assertParseDate( "5:35 PM", { time: "short" }, date );
});

@@ -66,6 +75,6 @@

date = startOf( date, "day" );
deepEqual( Globalize.parseDate( "Wednesday, September 15, 2010", { date: "full" } ), date, "{ date: \"full\" }" );
deepEqual( Globalize.parseDate( "September 15, 2010", { date: "long" } ), date, "{ date: \"long\" }" );
deepEqual( Globalize.parseDate( "Sep 15, 2010", { date: "medium" } ), date, "{ date: \"medium\" }" );
deepEqual( Globalize.parseDate( "9/15/10", { date: "short" } ), date, "{ date: \"short\" }" );
assertParseDate( "Wednesday, September 15, 2010", { date: "full" }, date );
assertParseDate( "September 15, 2010", { date: "long" }, date );
assertParseDate( "Sep 15, 2010", { date: "medium" }, date );
assertParseDate( "9/15/10", { date: "short" }, date );
});

@@ -76,7 +85,7 @@

date = startOf( date, "day" );
deepEqual( Globalize.parseDate( "Wednesday, September 15, 2010", { date: "full" } ), date, "{ date: \"full\" }" );
assertParseDate( "Wednesday, September 15, 2010", { date: "full" }, date );
date = new Date( 2010, 8, 15, 17, 35, 7 );
date = startOf( date, "second" );
deepEqual( Globalize.parseDate( "Sep 15, 2010, 5:35:07 PM", { datetime: "medium" } ), date, "{ datetime: \"medium\" }" );
assertParseDate( "Sep 15, 2010, 5:35:07 PM", { datetime: "medium" }, date );
});

@@ -87,3 +96,3 @@

date = startOf( date, "day" );
deepEqual( Globalize.parseDate( "Wed, Sep 15, 2010 AD", { pattern: "E, MMM d, y G" } ), date, "{ pattern: \"E, MMM d, y G\" }" );
assertParseDate( "Wed, Sep 15, 2010 AD", { pattern: "E, MMM d, y G" }, date );
});

@@ -94,5 +103,5 @@

date = startOf( date, "minute" );
deepEqual( Globalize.parseDate( Globalize.formatDate( date, { datetime: "short" } ), { datetime: "short" } ), date, "" );
deepEqual( Globalize.parseDate( Globalize.formatDate( date, { datetime: "short" } ), { datetime: "short" } ), date );
});
});

@@ -21,6 +21,6 @@ define([

test( "should format decimal style", function() {
equal( Globalize.formatNumber( pi ), "3.142", "" );
equal( Globalize.formatNumber( pi, {}, "es" ), "3,142", "" );
equal( Globalize.formatNumber( pi, {}, "ar" ), "3٫142", "" );
equal( Globalize.formatNumber( 99999999.99 ), "99,999,999.99", "" );
equal( Globalize.formatNumber( pi ), "3.142" );
equal( Globalize( "es" ).formatNumber( pi ), "3,142" );
equal( Globalize( "ar" ).formatNumber( pi ), "3٫142" );
equal( Globalize.formatNumber( 99999999.99 ), "99,999,999.99" );

@@ -31,3 +31,3 @@ equal( Globalize.formatNumber( pi, {

maximumFractionDigits: 2
}), "03.14", "" );
}), "03.14" );

@@ -37,3 +37,3 @@ equal( Globalize.formatNumber( pi, {

maximumSignificantDigits: 3
}), "3.14", "" );
}), "3.14" );

@@ -43,3 +43,3 @@ equal( Globalize.formatNumber( 12345, {

maximumSignificantDigits: 3
}), "12,300", "" );
}), "12,300" );

@@ -49,3 +49,3 @@ equal( Globalize.formatNumber( 0.00012345, {

maximumSignificantDigits: 3
}), "0.000123", "" );
}), "0.000123" );

@@ -55,12 +55,12 @@ equal( Globalize.formatNumber( 0.00010001, {

maximumSignificantDigits: 3
}), "0.0001", "" );
}), "0.0001" );
equal( Globalize.formatNumber( 99999999.99, { useGrouping: false } ), "99999999.99", "" );
equal( Globalize.formatNumber( 99999999.99, { useGrouping: false } ), "99999999.99" );
});
test( "should format percent style", function() {
equal( Globalize.formatNumber( pi, { style: "percent" } ), "314%", "" );
equal( Globalize.formatNumber( pi, { style: "percent" }, "ar" ), "314٪", "" );
equal( Globalize.formatNumber( pi, { style: "percent" } ), "314%" );
equal( Globalize( "ar" ).formatNumber( pi, { style: "percent" } ), "314٪" );
});
});

@@ -13,2 +13,5 @@ require.config({

/* core */
"./unit/core/locale",
/* date */

@@ -24,3 +27,4 @@ "./unit/date/expand-pattern",

"./unit/number/format/grouping-separator",
"./unit/number/format"
"./unit/number/format",
"./unit/number/parse"

@@ -27,0 +31,0 @@ ], function() {

@@ -18,25 +18,25 @@ define([

test( "should expand skeleton \"<skeleton>\" (as a String)", function() {
equal( expandPattern( "GyMMMEd", cldr ), "E, MMM d, y G", "" );
equal( expandPattern( "GyMMMEd", cldr ), "E, MMM d, y G" );
});
test( "should expand {skeleton: \"<skeleton>\"}", function() {
equal( expandPattern( { skeleton: "GyMMMEd" }, cldr ), "E, MMM d, y G", "" );
equal( expandPattern( { skeleton: "GyMMMEd" }, cldr ), "E, MMM d, y G" );
});
test( "should expand {date: \"(full, ...)\"}", function() {
equal( expandPattern( { date: "full" }, cldr ), "EEEE, MMMM d, y", "" );
equal( expandPattern( { date: "full" }, cldr ), "EEEE, MMMM d, y" );
});
test( "should expand {time: \"(full, ...)\"}", function() {
equal( expandPattern( { time: "full" }, cldr ), "h:mm:ss a zzzz", "" );
equal( expandPattern( { time: "full" }, cldr ), "h:mm:ss a zzzz" );
});
test( "should expand {datetime: \"(full, ...)\"}", function() {
equal( expandPattern( { datetime: "full" }, cldr ), "EEEE, MMMM d, y 'at' h:mm:ss a zzzz", "" );
equal( expandPattern( { datetime: "full" }, cldr ), "EEEE, MMMM d, y 'at' h:mm:ss a zzzz" );
});
test( "should expand {pattern: \"<pattern>\"}", function() {
equal( expandPattern( { pattern: "MMM d" }, cldr ), "MMM d", "" );
equal( expandPattern( { pattern: "MMM d" }, cldr ), "MMM d" );
});
});

@@ -33,23 +33,23 @@ define([

test( "should format era (G|GG|GGG)", function() {
equal( format( date1, "G", cldr ), "AD", "" );
equal( format( year0, "G", cldr ), "AD", "" );
equal( format( yearBc, "G", cldr ), "BC", "" );
equal( format( date1, "GG", cldr ), "AD", "" );
equal( format( year0, "GG", cldr ), "AD", "" );
equal( format( yearBc, "GG", cldr ), "BC", "" );
equal( format( date1, "GGG", cldr ), "AD", "" );
equal( format( year0, "GGG", cldr ), "AD", "" );
equal( format( yearBc, "GGG", cldr ), "BC", "" );
equal( format( date1, "G", cldr ), "AD" );
equal( format( year0, "G", cldr ), "AD" );
equal( format( yearBc, "G", cldr ), "BC" );
equal( format( date1, "GG", cldr ), "AD" );
equal( format( year0, "GG", cldr ), "AD" );
equal( format( yearBc, "GG", cldr ), "BC" );
equal( format( date1, "GGG", cldr ), "AD" );
equal( format( year0, "GGG", cldr ), "AD" );
equal( format( yearBc, "GGG", cldr ), "BC" );
});
test( "should format era (GGGG)", function() {
equal( format( date1, "GGGG", cldr ), "Anno Domini", "" );
equal( format( year0, "GGGG", cldr ), "Anno Domini", "" );
equal( format( yearBc, "GGGG", cldr ), "Before Christ", "" );
equal( format( date1, "GGGG", cldr ), "Anno Domini" );
equal( format( year0, "GGGG", cldr ), "Anno Domini" );
equal( format( yearBc, "GGGG", cldr ), "Before Christ" );
});
test( "should format era (GGGGG)", function() {
equal( format( date1, "GGGGG", cldr ), "A", "" );
equal( format( year0, "GGGGG", cldr ), "A", "" );
equal( format( yearBc, "GGGGG", cldr ), "B", "" );
equal( format( date1, "GGGGG", cldr ), "A" );
equal( format( year0, "GGGGG", cldr ), "A" );
equal( format( yearBc, "GGGGG", cldr ), "B" );
});

@@ -62,36 +62,36 @@

test( "should format year (y) with no padding", function() {
equal( format( date2, "y", cldr ), "2010", "" );
equal( format( date1, "y", cldr ), "1982", "" );
equal( format( year0, "y", cldr ), "0", "" );
equal( format( date2, "y", cldr ), "2010" );
equal( format( date1, "y", cldr ), "1982" );
equal( format( year0, "y", cldr ), "0" );
});
test( "should format year (yy) with padding, and limit 2 digits", function() {
equal( format( date2, "yy", cldr ), "10", "" );
equal( format( date1, "yy", cldr ), "82", "" );
equal( format( year0, "yy", cldr ), "00", "" );
equal( format( date2, "yy", cldr ), "10" );
equal( format( date1, "yy", cldr ), "82" );
equal( format( year0, "yy", cldr ), "00" );
});
test( "should format year (yyy+) with padding", function() {
equal( format( date1, "yyy", cldr ), "1982", "" );
equal( format( date2, "yyy", cldr ), "2010", "" );
equal( format( year0, "yyyy", cldr ), "0000", "" );
equal( format( date1, "yyyyy", cldr ), "01982", "" );
equal( format( date2, "yyyyy", cldr ), "02010", "" );
equal( format( date1, "yyy", cldr ), "1982" );
equal( format( date2, "yyy", cldr ), "2010" );
equal( format( year0, "yyyy", cldr ), "0000" );
equal( format( date1, "yyyyy", cldr ), "01982" );
equal( format( date2, "yyyyy", cldr ), "02010" );
});
test( "should format year in \"week of year\" (Y) with no padding", function() {
equal( format( date3, "Y", cldr ), "1982", "" );
equal( format( date4, "Y", cldr ), "1994", "" );
equal( format( date3, "Y", cldr ), "1982" );
equal( format( date4, "Y", cldr ), "1994" );
});
test( "should format year in \"week of year\" (YY) with padding, and limit 2 digits", function() {
equal( format( date3, "YY", cldr ), "82", "" );
equal( format( date4, "YY", cldr ), "94", "" );
equal( format( date3, "YY", cldr ), "82" );
equal( format( date4, "YY", cldr ), "94" );
});
test( "should format year in \"week of year\" (YYY+) with padding", function() {
equal( format( date3, "YYY", cldr ), "1982", "" );
equal( format( date4, "YYY", cldr ), "1994", "" );
equal( format( date3, "YYYYY", cldr ), "01982", "" );
equal( format( date4, "YYYYY", cldr ), "01994", "" );
equal( format( date3, "YYY", cldr ), "1982" );
equal( format( date4, "YYY", cldr ), "1994" );
equal( format( date3, "YYYYY", cldr ), "01982" );
equal( format( date4, "YYYYY", cldr ), "01994" );
});

@@ -104,27 +104,27 @@

test( "should format quarter (Q|q) with no padding", function() {
equal( format( date1, "Q", cldr ), "1", "" );
equal( format( date2, "Q", cldr ), "3", "" );
equal( format( date1, "q", cldr ), "1", "" );
equal( format( date2, "q", cldr ), "3", "" );
equal( format( date1, "Q", cldr ), "1" );
equal( format( date2, "Q", cldr ), "3" );
equal( format( date1, "q", cldr ), "1" );
equal( format( date2, "q", cldr ), "3" );
});
test( "should format quarter (QQ|qq) with padding", function() {
equal( format( date1, "QQ", cldr ), "01", "" );
equal( format( date2, "QQ", cldr ), "03", "" );
equal( format( date1, "qq", cldr ), "01", "" );
equal( format( date2, "qq", cldr ), "03", "" );
equal( format( date1, "QQ", cldr ), "01" );
equal( format( date2, "QQ", cldr ), "03" );
equal( format( date1, "qq", cldr ), "01" );
equal( format( date2, "qq", cldr ), "03" );
});
test( "should format quarter (QQQ|qqq)", function() {
equal( format( date1, "QQQ", cldr ), "Q1", "" );
equal( format( date2, "QQQ", cldr ), "Q3", "" );
equal( format( date1, "qqq", cldr ), "Q1", "" );
equal( format( date2, "qqq", cldr ), "Q3", "" );
equal( format( date1, "QQQ", cldr ), "Q1" );
equal( format( date2, "QQQ", cldr ), "Q3" );
equal( format( date1, "qqq", cldr ), "Q1" );
equal( format( date2, "qqq", cldr ), "Q3" );
});
test( "should format quarter (QQQQ|qqqq) with padding", function() {
equal( format( date1, "QQQQ", cldr ), "1st quarter", "" );
equal( format( date2, "QQQQ", cldr ), "3rd quarter", "" );
equal( format( date1, "qqqq", cldr ), "1st quarter", "" );
equal( format( date2, "qqqq", cldr ), "3rd quarter", "" );
equal( format( date1, "QQQQ", cldr ), "1st quarter" );
equal( format( date2, "QQQQ", cldr ), "3rd quarter" );
equal( format( date1, "qqqq", cldr ), "1st quarter" );
equal( format( date2, "qqqq", cldr ), "3rd quarter" );
});

@@ -137,34 +137,34 @@

test( "should format month (M|L) with no padding", function() {
equal( format( date1, "M", cldr ), "1", "" );
equal( format( date2, "M", cldr ), "9", "" );
equal( format( date1, "L", cldr ), "1", "" );
equal( format( date2, "L", cldr ), "9", "" );
equal( format( date1, "M", cldr ), "1" );
equal( format( date2, "M", cldr ), "9" );
equal( format( date1, "L", cldr ), "1" );
equal( format( date2, "L", cldr ), "9" );
});
test( "should format month (MM|LL) with padding", function() {
equal( format( date1, "MM", cldr ), "01", "" );
equal( format( date2, "MM", cldr ), "09", "" );
equal( format( date1, "LL", cldr ), "01", "" );
equal( format( date2, "LL", cldr ), "09", "" );
equal( format( date1, "MM", cldr ), "01" );
equal( format( date2, "MM", cldr ), "09" );
equal( format( date1, "LL", cldr ), "01" );
equal( format( date2, "LL", cldr ), "09" );
});
test( "should format month (MMM|LLL)", function() {
equal( format( date1, "MMM", cldr ), "Jan", "" );
equal( format( date2, "MMM", cldr ), "Sep", "" );
equal( format( date1, "LLL", cldr ), "Jan", "" );
equal( format( date2, "LLL", cldr ), "Sep", "" );
equal( format( date1, "MMM", cldr ), "Jan" );
equal( format( date2, "MMM", cldr ), "Sep" );
equal( format( date1, "LLL", cldr ), "Jan" );
equal( format( date2, "LLL", cldr ), "Sep" );
});
test( "should format month (MMMM|LLLL)", function() {
equal( format( date1, "MMMM", cldr ), "January", "" );
equal( format( date2, "MMMM", cldr ), "September", "" );
equal( format( date1, "LLLL", cldr ), "January", "" );
equal( format( date2, "LLLL", cldr ), "September", "" );
equal( format( date1, "MMMM", cldr ), "January" );
equal( format( date2, "MMMM", cldr ), "September" );
equal( format( date1, "LLLL", cldr ), "January" );
equal( format( date2, "LLLL", cldr ), "September" );
});
test( "should format month (MMMMM|LLLLL)", function() {
equal( format( date1, "MMMMM", cldr ), "J", "" );
equal( format( date2, "MMMMM", cldr ), "S", "" );
equal( format( date1, "LLLLL", cldr ), "J", "" );
equal( format( date2, "LLLLL", cldr ), "S", "" );
equal( format( date1, "MMMMM", cldr ), "J" );
equal( format( date2, "MMMMM", cldr ), "S" );
equal( format( date1, "LLLLL", cldr ), "J" );
equal( format( date2, "LLLLL", cldr ), "S" );
});

@@ -177,15 +177,15 @@

test( "should format week of year (w) with no padding", function() {
equal( format( date1, "w", cldr ), "1", "" );
equal( format( date2, "w", cldr ), "38", "" );
equal( format( date1, "w", cldr ), "1" );
equal( format( date2, "w", cldr ), "38" );
});
test( "should format week of year (ww) with padding", function() {
equal( format( date1, "ww", cldr ), "01", "" );
equal( format( date2, "ww", cldr ), "38", "" );
equal( format( date1, "ww", cldr ), "01" );
equal( format( date2, "ww", cldr ), "38" );
});
test( "should format week of month (W)", function() {
equal( format( date1, "W", cldr ), "1", "" );
equal( format( date2, "W", cldr ), "3", "" );
equal( format( date3, "W", cldr ), "5", "" );
equal( format( date1, "W", cldr ), "1" );
equal( format( date2, "W", cldr ), "3" );
equal( format( date3, "W", cldr ), "5" );
});

@@ -198,25 +198,25 @@

test( "should format day (d) with no padding", function() {
equal( format( date1, "d", cldr ), "2", "" );
equal( format( date2, "d", cldr ), "15", "" );
equal( format( date1, "d", cldr ), "2" );
equal( format( date2, "d", cldr ), "15" );
});
test( "should format day (dd) with padding", function() {
equal( format( date1, "dd", cldr ), "02", "" );
equal( format( date2, "dd", cldr ), "15", "" );
equal( format( date1, "dd", cldr ), "02" );
equal( format( date2, "dd", cldr ), "15" );
});
test( "should format day of year (D) with no padding", function() {
equal( format( date1, "D", cldr ), "2", "" );
equal( format( date2, "D", cldr ), "258", "" );
equal( format( date1, "D", cldr ), "2" );
equal( format( date2, "D", cldr ), "258" );
});
test( "should format day of year (DD|DDD) with padding", function() {
equal( format( date1, "DD", cldr ), "02", "" );
equal( format( date1, "DDD", cldr ), "002", "" );
equal( format( date2, "DD", cldr ), "258", "" );
equal( format( date1, "DD", cldr ), "02" );
equal( format( date1, "DDD", cldr ), "002" );
equal( format( date2, "DD", cldr ), "258" );
});
test( "should format day of week in month (F)", function() {
equal( format( date1, "F", cldr ), "1", "" );
equal( format( date2, "F", cldr ), "3", "" );
equal( format( date1, "F", cldr ), "1" );
equal( format( date2, "F", cldr ), "3" );
});

@@ -229,53 +229,53 @@

test( "should format local day of week (e|c) with no padding", function() {
equal( format( date1, "e", cldr ), "7", "" );
equal( format( date2, "e", cldr ), "4", "" );
equal( format( date1, "c", cldr ), "7", "" );
equal( format( date2, "c", cldr ), "4", "" );
equal( format( date1, "e", cldr ), "7" );
equal( format( date2, "e", cldr ), "4" );
equal( format( date1, "c", cldr ), "7" );
equal( format( date2, "c", cldr ), "4" );
});
test( "should format local day of week (ee|cc) with padding", function() {
equal( format( date1, "ee", cldr ), "07", "" );
equal( format( date2, "ee", cldr ), "04", "" );
equal( format( date1, "cc", cldr ), "07", "" );
equal( format( date2, "cc", cldr ), "04", "" );
equal( format( date1, "ee", cldr ), "07" );
equal( format( date2, "ee", cldr ), "04" );
equal( format( date1, "cc", cldr ), "07" );
equal( format( date2, "cc", cldr ), "04" );
});
test( "should format local day of week (E|EE|EEE|eee|ccc)", function() {
equal( format( date1, "E", cldr ), "Sat", "" );
equal( format( date2, "E", cldr ), "Wed", "" );
equal( format( date1, "EE", cldr ), "Sat", "" );
equal( format( date2, "EE", cldr ), "Wed", "" );
equal( format( date1, "EEE", cldr ), "Sat", "" );
equal( format( date2, "EEE", cldr ), "Wed", "" );
equal( format( date1, "eee", cldr ), "Sat", "" );
equal( format( date2, "eee", cldr ), "Wed", "" );
equal( format( date1, "ccc", cldr ), "Sat", "" );
equal( format( date2, "ccc", cldr ), "Wed", "" );
equal( format( date1, "E", cldr ), "Sat" );
equal( format( date2, "E", cldr ), "Wed" );
equal( format( date1, "EE", cldr ), "Sat" );
equal( format( date2, "EE", cldr ), "Wed" );
equal( format( date1, "EEE", cldr ), "Sat" );
equal( format( date2, "EEE", cldr ), "Wed" );
equal( format( date1, "eee", cldr ), "Sat" );
equal( format( date2, "eee", cldr ), "Wed" );
equal( format( date1, "ccc", cldr ), "Sat" );
equal( format( date2, "ccc", cldr ), "Wed" );
});
test( "should format local day of week (EEEE|eeee|cccc)", function() {
equal( format( date1, "EEEE", cldr ), "Saturday", "" );
equal( format( date2, "EEEE", cldr ), "Wednesday", "" );
equal( format( date1, "eeee", cldr ), "Saturday", "" );
equal( format( date2, "eeee", cldr ), "Wednesday", "" );
equal( format( date1, "cccc", cldr ), "Saturday", "" );
equal( format( date2, "cccc", cldr ), "Wednesday", "" );
equal( format( date1, "EEEE", cldr ), "Saturday" );
equal( format( date2, "EEEE", cldr ), "Wednesday" );
equal( format( date1, "eeee", cldr ), "Saturday" );
equal( format( date2, "eeee", cldr ), "Wednesday" );
equal( format( date1, "cccc", cldr ), "Saturday" );
equal( format( date2, "cccc", cldr ), "Wednesday" );
});
test( "should format local day of week (EEEEE|eeeee|ccccc)", function() {
equal( format( date1, "EEEEE", cldr ), "S", "" );
equal( format( date2, "EEEEE", cldr ), "W", "" );
equal( format( date1, "eeeee", cldr ), "S", "" );
equal( format( date2, "eeeee", cldr ), "W", "" );
equal( format( date1, "ccccc", cldr ), "S", "" );
equal( format( date2, "ccccc", cldr ), "W", "" );
equal( format( date1, "EEEEE", cldr ), "S" );
equal( format( date2, "EEEEE", cldr ), "W" );
equal( format( date1, "eeeee", cldr ), "S" );
equal( format( date2, "eeeee", cldr ), "W" );
equal( format( date1, "ccccc", cldr ), "S" );
equal( format( date2, "ccccc", cldr ), "W" );
});
test( "should format local day of week (EEEEEE|eeeeee|cccccc)", function() {
equal( format( date1, "EEEEEE", cldr ), "Sa", "" );
equal( format( date2, "EEEEEE", cldr ), "We", "" );
equal( format( date1, "eeeeee", cldr ), "Sa", "" );
equal( format( date2, "eeeeee", cldr ), "We", "" );
equal( format( date1, "cccccc", cldr ), "Sa", "" );
equal( format( date2, "cccccc", cldr ), "We", "" );
equal( format( date1, "EEEEEE", cldr ), "Sa" );
equal( format( date2, "EEEEEE", cldr ), "We" );
equal( format( date1, "eeeeee", cldr ), "Sa" );
equal( format( date2, "eeeeee", cldr ), "We" );
equal( format( date1, "cccccc", cldr ), "Sa" );
equal( format( date2, "cccccc", cldr ), "We" );
});

@@ -290,4 +290,4 @@

test( "should format period (a)", function() {
equal( format( date1, "a", cldr ), "AM", "" );
equal( format( date2, "a", cldr ), "PM", "" );
equal( format( date1, "a", cldr ), "AM" );
equal( format( date2, "a", cldr ), "PM" );
});

@@ -300,62 +300,62 @@

test( "should format hour (h) using 12-hour-cycle [1-12] with no padding", function() {
equal( format( date1, "h", cldr ), "9", "" );
equal( format( date2, "h", cldr ), "5", "" );
equal( format( new Date( 0, 0, 0, 0 ), "h", cldr ), "12", "" );
equal( format( date1, "h", cldr ), "9" );
equal( format( date2, "h", cldr ), "5" );
equal( format( new Date( 0, 0, 0, 0 ), "h", cldr ), "12" );
});
test( "should format hour (hh) using 12-hour-cycle [1-12] with padding", function() {
equal( format( date1, "hh", cldr ), "09", "" );
equal( format( date2, "hh", cldr ), "05", "" );
equal( format( new Date( 0, 0, 0, 0 ), "hh", cldr ), "12", "" );
equal( format( date1, "hh", cldr ), "09" );
equal( format( date2, "hh", cldr ), "05" );
equal( format( new Date( 0, 0, 0, 0 ), "hh", cldr ), "12" );
});
test( "should format hour (H) using 24-hour-cycle [0-23] with no padding", function() {
equal( format( date1, "H", cldr ), "9", "" );
equal( format( date2, "H", cldr ), "17", "" );
equal( format( new Date( 0, 0, 0, 0 ), "H", cldr ), "0", "" );
equal( format( date1, "H", cldr ), "9" );
equal( format( date2, "H", cldr ), "17" );
equal( format( new Date( 0, 0, 0, 0 ), "H", cldr ), "0" );
});
test( "should format hour (HH) using 24-hour-cycle [0-23] with padding", function() {
equal( format( date1, "HH", cldr ), "09", "" );
equal( format( date2, "HH", cldr ), "17", "" );
equal( format( new Date( 0, 0, 0, 0 ), "HH", cldr ), "00", "" );
equal( format( date1, "HH", cldr ), "09" );
equal( format( date2, "HH", cldr ), "17" );
equal( format( new Date( 0, 0, 0, 0 ), "HH", cldr ), "00" );
});
test( "should format hour (K) using 12-hour-cycle [0-11] with no padding", function() {
equal( format( date1, "K", cldr ), "9", "" );
equal( format( date2, "K", cldr ), "5", "" );
equal( format( new Date( 0, 0, 0, 0 ), "K", cldr ), "0", "" );
equal( format( date1, "K", cldr ), "9" );
equal( format( date2, "K", cldr ), "5" );
equal( format( new Date( 0, 0, 0, 0 ), "K", cldr ), "0" );
});
test( "should format hour (KK) using 12-hour-cycle [0-11] with padding", function() {
equal( format( date1, "KK", cldr ), "09", "" );
equal( format( date2, "KK", cldr ), "05", "" );
equal( format( new Date( 0, 0, 0, 0 ), "KK", cldr ), "00", "" );
equal( format( date1, "KK", cldr ), "09" );
equal( format( date2, "KK", cldr ), "05" );
equal( format( new Date( 0, 0, 0, 0 ), "KK", cldr ), "00" );
});
test( "should format hour (k) using 24-hour-cycle [1-24] with no padding", function() {
equal( format( date1, "k", cldr ), "9", "" );
equal( format( date2, "k", cldr ), "17", "" );
equal( format( new Date( 0, 0, 0, 0 ), "k", cldr ), "24", "" );
equal( format( date1, "k", cldr ), "9" );
equal( format( date2, "k", cldr ), "17" );
equal( format( new Date( 0, 0, 0, 0 ), "k", cldr ), "24" );
});
test( "should format hour (kk) using 24-hour-cycle [1-24] with padding", function() {
equal( format( date1, "kk", cldr ), "09", "" );
equal( format( date2, "kk", cldr ), "17", "" );
equal( format( new Date( 0, 0, 0, 0 ), "kk", cldr ), "24", "" );
equal( format( date1, "kk", cldr ), "09" );
equal( format( date2, "kk", cldr ), "17" );
equal( format( new Date( 0, 0, 0, 0 ), "kk", cldr ), "24" );
});
test( "should format hour (j) using preferred hour format for the locale (h, H, K, or k) with no padding", function() {
equal( format( date2, "j", cldr ), "5", "" );
equal( format( date2, "j", new Cldr( "pt-BR" ) ), "17", "" );
equal( format( date2, "j", new Cldr( "de" ) ), "17", "" );
equal( format( date2, "j", new Cldr( "en-IN" ) ), "5", "" );
equal( format( date2, "j", new Cldr( "en-GB" ) ), "17", "" );
equal( format( date2, "j", new Cldr( "ru" ) ), "17", "" );
equal( format( date2, "j", cldr ), "5" );
equal( format( date2, "j", new Cldr( "pt-BR" ) ), "17" );
equal( format( date2, "j", new Cldr( "de" ) ), "17" );
equal( format( date2, "j", new Cldr( "en-IN" ) ), "5" );
equal( format( date2, "j", new Cldr( "en-GB" ) ), "17" );
equal( format( date2, "j", new Cldr( "ru" ) ), "17" );
});
test( "should format hour (jj) using preferred hour format for the locale (h, H, K, or k) with padding", function() {
equal( format( date1, "jj", cldr ), "09", "" );
equal( format( date2, "jj", cldr ), "05", "" );
equal( format( new Date( 0, 0, 0, 0 ), "jj", cldr ), "12", "" );
equal( format( date1, "jj", cldr ), "09" );
equal( format( date2, "jj", cldr ), "05" );
equal( format( new Date( 0, 0, 0, 0 ), "jj", cldr ), "12" );
});

@@ -368,9 +368,9 @@

test( "should format minute (m) with no padding", function() {
equal( format( date1, "m", cldr ), "5", "" );
equal( format( date2, "m", cldr ), "35", "" );
equal( format( date1, "m", cldr ), "5" );
equal( format( date2, "m", cldr ), "35" );
});
test( "should format minute (mm) with padding", function() {
equal( format( date1, "mm", cldr ), "05", "" );
equal( format( date2, "mm", cldr ), "35", "" );
equal( format( date1, "mm", cldr ), "05" );
equal( format( date2, "mm", cldr ), "35" );
});

@@ -383,25 +383,25 @@

test( "should format second (s) with no padding", function() {
equal( format( date1, "s", cldr ), "59", "" );
equal( format( date2, "s", cldr ), "7", "" );
equal( format( date1, "s", cldr ), "59" );
equal( format( date2, "s", cldr ), "7" );
});
test( "should format second (ss) with padding", function() {
equal( format( date1, "ss", cldr ), "59", "" );
equal( format( date2, "ss", cldr ), "07", "" );
equal( format( date1, "ss", cldr ), "59" );
equal( format( date2, "ss", cldr ), "07" );
});
test( "should format various milliseconds (S+)", function() {
equal( format( date2, "S", cldr ), "4", "" );
equal( format( date2, "SS", cldr ), "37", "" );
equal( format( date2, "SSS", cldr ), "369", "" );
equal( format( date2, "SSSS", cldr ), "3690", "" );
equal( format( date2, "SSSSS", cldr ), "36900", "" );
equal( format( date2, "S", cldr ), "4" );
equal( format( date2, "SS", cldr ), "37" );
equal( format( date2, "SSS", cldr ), "369" );
equal( format( date2, "SSSS", cldr ), "3690" );
equal( format( date2, "SSSSS", cldr ), "36900" );
});
test( "should format various milliseconds (A+)", function() {
equal( format( date2, "A", cldr ), "633074", "" );
equal( format( date2, "AA", cldr ), "6330737", "" );
equal( format( date2, "AAA", cldr ), "63307369", "" );
equal( format( date2, "AAAA", cldr ), "633073690", "" );
equal( format( date2, "AAAAA", cldr ), "6330736900", "" );
equal( format( date2, "A", cldr ), "633074" );
equal( format( date2, "AA", cldr ), "6330737" );
equal( format( date2, "AAA", cldr ), "63307369" );
equal( format( date2, "AAAA", cldr ), "633073690" );
equal( format( date2, "AAAAA", cldr ), "6330736900" );
});

@@ -408,0 +408,0 @@

@@ -32,8 +32,8 @@ define([

date2.setFullYear( -4 );
deepEqual( parse( "AD 4", "G y", cldr ), date1, "" );
deepEqual( parse( "BC 5", "G y", cldr ), date2, "" );
deepEqual( parse( "AD 4", "GG y", cldr ), date1, "" );
deepEqual( parse( "BC 5", "GG y", cldr ), date2, "" );
deepEqual( parse( "AD 4", "GGG y", cldr ), date1, "" );
deepEqual( parse( "BC 5", "GGG y", cldr ), date2, "" );
deepEqual( parse( "AD 4", "G y", cldr ), date1 );
deepEqual( parse( "BC 5", "G y", cldr ), date2 );
deepEqual( parse( "AD 4", "GG y", cldr ), date1 );
deepEqual( parse( "BC 5", "GG y", cldr ), date2 );
deepEqual( parse( "AD 4", "GGG y", cldr ), date1 );
deepEqual( parse( "BC 5", "GGG y", cldr ), date2 );
});

@@ -46,4 +46,4 @@

date2.setFullYear( -4 );
deepEqual( parse( "Anno Domini 4", "GGGG y", cldr ), date1, "" );
deepEqual( parse( "Before Christ 5", "GGGG y", cldr ), date2, "" );
deepEqual( parse( "Anno Domini 4", "GGGG y", cldr ), date1 );
deepEqual( parse( "Before Christ 5", "GGGG y", cldr ), date2 );
});

@@ -56,4 +56,4 @@

date2.setFullYear( -4 );
deepEqual( parse( "A 4", "GGGGG y", cldr ), date1, "" );
deepEqual( parse( "B 5", "GGGGG y", cldr ), date2, "" );
deepEqual( parse( "A 4", "GGGGG y", cldr ), date1 );
deepEqual( parse( "B 5", "GGGGG y", cldr ), date2 );
});

@@ -66,3 +66,3 @@

test( "should parse year (y) with no padding", function() {
deepEqual( parse( "1982", "y", cldr ), new Date( 1982, 0 ), "" );
deepEqual( parse( "1982", "y", cldr ), new Date( 1982, 0 ) );
});

@@ -72,8 +72,8 @@

// This may change in the future, eg. 82 could eventually be 2082.
deepEqual( parse( "82", "yy", cldr ), new Date( 1982, 0 ), "" );
deepEqual( parse( "82", "yy", cldr ), new Date( 1982, 0 ) );
});
test( "should parse year (yyy+) with padding", function() {
deepEqual( parse( "1982", "yyy", cldr ), new Date( 1982, 0 ), "" );
deepEqual( parse( "01982", "yyyyy", cldr ), new Date( 1982, 0 ), "" );
deepEqual( parse( "1982", "yyy", cldr ), new Date( 1982, 0 ) );
deepEqual( parse( "01982", "yyyyy", cldr ), new Date( 1982, 0 ) );
});

@@ -89,4 +89,4 @@

date1 = startOf( date1, "month" );
deepEqual( parse( "1", "M", cldr ), date1, "" );
deepEqual( parse( "1", "L", cldr ), date1, "" );
deepEqual( parse( "1", "M", cldr ), date1 );
deepEqual( parse( "1", "L", cldr ), date1 );
});

@@ -98,4 +98,4 @@

date1 = startOf( date1, "month" );
deepEqual( parse( "01", "MM", cldr ), date1, "" );
deepEqual( parse( "01", "LL", cldr ), date1, "" );
deepEqual( parse( "01", "MM", cldr ), date1 );
deepEqual( parse( "01", "LL", cldr ), date1 );
});

@@ -107,4 +107,4 @@

date1 = startOf( date1, "month" );
deepEqual( parse( "Jan", "MMM", cldr ), date1, "" );
deepEqual( parse( "Jan", "LLL", cldr ), date1, "" );
deepEqual( parse( "Jan", "MMM", cldr ), date1 );
deepEqual( parse( "Jan", "LLL", cldr ), date1 );
});

@@ -116,4 +116,4 @@

date1 = startOf( date1, "month" );
deepEqual( parse( "January", "MMMM", cldr ), date1, "" );
deepEqual( parse( "January", "LLLL", cldr ), date1, "" );
deepEqual( parse( "January", "MMMM", cldr ), date1 );
deepEqual( parse( "January", "LLLL", cldr ), date1 );
});

@@ -125,4 +125,4 @@

date1 = startOf( date1, "month" );
deepEqual( parse( "J", "MMMMM", cldr ), date1, "" );
deepEqual( parse( "J", "LLLLL", cldr ), date1, "" );
deepEqual( parse( "J", "MMMMM", cldr ), date1 );
deepEqual( parse( "J", "LLLLL", cldr ), date1 );
});

@@ -138,3 +138,3 @@

date1 = startOf( date1, "day" );
deepEqual( parse( "2", "d", cldr ), date1, "" );
deepEqual( parse( "2", "d", cldr ), date1 );
});

@@ -146,3 +146,3 @@

date1 = startOf( date1, "day" );
deepEqual( parse( "02", "dd", cldr ), date1, "" );
deepEqual( parse( "02", "dd", cldr ), date1 );
});

@@ -155,3 +155,3 @@

date1 = startOf( date1, "day" );
deepEqual( parse( "2", "D", cldr ), date1, "" );
deepEqual( parse( "2", "D", cldr ), date1 );
});

@@ -164,4 +164,4 @@

date1 = startOf( date1, "day" );
deepEqual( parse( "02", "DD", cldr ), date1, "" );
deepEqual( parse( "002", "DDD", cldr ), date1, "" );
deepEqual( parse( "02", "DD", cldr ), date1 );
deepEqual( parse( "002", "DDD", cldr ), date1 );
});

@@ -180,4 +180,4 @@

date2 = startOf( date2, "hour" );
deepEqual( parse( "5 AM", "h a", cldr ), date1, "" );
deepEqual( parse( "5 PM", "h a", cldr ), date2, "" );
deepEqual( parse( "5 AM", "h a", cldr ), date1 );
deepEqual( parse( "5 PM", "h a", cldr ), date2 );
});

@@ -193,3 +193,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "9", "h", cldr ), date1, "" );
deepEqual( parse( "9", "h", cldr ), date1 );
});

@@ -201,3 +201,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "09", "hh", cldr ), date1, "" );
deepEqual( parse( "09", "hh", cldr ), date1 );
});

@@ -209,3 +209,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "16", "H", cldr ), date1, "" );
deepEqual( parse( "16", "H", cldr ), date1 );
});

@@ -217,3 +217,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "16", "HH", cldr ), date1, "" );
deepEqual( parse( "16", "HH", cldr ), date1 );
});

@@ -225,3 +225,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "8", "K", cldr ), date1, "" );
deepEqual( parse( "8", "K", cldr ), date1 );
});

@@ -233,3 +233,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "08", "KK", cldr ), date1, "" );
deepEqual( parse( "08", "KK", cldr ), date1 );
});

@@ -241,3 +241,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "17", "k", cldr ), date1, "" );
deepEqual( parse( "17", "k", cldr ), date1 );
});

@@ -249,3 +249,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "17", "kk", cldr ), date1, "" );
deepEqual( parse( "17", "kk", cldr ), date1 );
});

@@ -257,3 +257,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "9", "j", cldr ), date1, "" );
deepEqual( parse( "9", "j", cldr ), date1 );
});

@@ -265,3 +265,3 @@

date1 = startOf( date1, "hour" );
deepEqual( parse( "09", "jj", cldr ), date1, "" );
deepEqual( parse( "09", "jj", cldr ), date1 );
});

@@ -277,3 +277,3 @@

date1 = startOf( date1, "minute" );
deepEqual( parse( "5", "m", cldr ), date1, "" );
deepEqual( parse( "5", "m", cldr ), date1 );
});

@@ -285,3 +285,3 @@

date1 = startOf( date1, "minute" );
deepEqual( parse( "05", "mm", cldr ), date1, "" );
deepEqual( parse( "05", "mm", cldr ), date1 );
});

@@ -297,3 +297,3 @@

date1 = startOf( date1, "second" );
deepEqual( parse( "59", "s", cldr ), date1, "" );
deepEqual( parse( "59", "s", cldr ), date1 );
});

@@ -305,3 +305,3 @@

date1 = startOf( date1, "second" );
deepEqual( parse( "59", "ss", cldr ), date1, "" );
deepEqual( parse( "59", "ss", cldr ), date1 );
});

@@ -313,9 +313,9 @@

date1.setMilliseconds( 400 );
deepEqual( parse( "0 4", "s S", cldr ), date1, "" );
deepEqual( parse( "0 4", "s S", cldr ), date1 );
date1.setMilliseconds( 370 );
deepEqual( parse( "0 37", "s SS", cldr ), date1, "" );
deepEqual( parse( "0 37", "s SS", cldr ), date1 );
date1.setMilliseconds( 369 );
deepEqual( parse( "0 369", "s SSS", cldr ), date1, "" );
deepEqual( parse( "0 3690", "s SSSS", cldr ), date1, "" );
deepEqual( parse( "0 36900", "s SSSSS", cldr ), date1, "" );
deepEqual( parse( "0 369", "s SSS", cldr ), date1 );
deepEqual( parse( "0 3690", "s SSSS", cldr ), date1 );
deepEqual( parse( "0 36900", "s SSSSS", cldr ), date1 );
});

@@ -327,11 +327,11 @@

date1.setMilliseconds( 63307400 );
deepEqual( parse( "633074", "A", cldr ), date1, "" );
deepEqual( parse( "633074", "A", cldr ), date1 );
date1 = startOf( date1, "day" );
date1.setMilliseconds( 63307370 );
deepEqual( parse( "6330737", "AA", cldr ), date1, "" );
deepEqual( parse( "6330737", "AA", cldr ), date1 );
date1 = startOf( date1, "day" );
date1.setMilliseconds( 63307369 );
deepEqual( parse( "63307369", "AAA", cldr ), date1, "" );
deepEqual( parse( "633073690", "AAAA", cldr ), date1, "" );
deepEqual( parse( "6330736900", "AAAAA", cldr ), date1, "" );
deepEqual( parse( "63307369", "AAA", cldr ), date1 );
deepEqual( parse( "633073690", "AAAA", cldr ), date1 );
deepEqual( parse( "6330736900", "AAAAA", cldr ), date1 );
});

@@ -338,0 +338,0 @@

@@ -30,3 +30,3 @@ define([

value: "1"
}], "" );
}] );
deepEqual( tokenizer( "AD", "GG", cldr ), [{

@@ -36,3 +36,3 @@ type: "GG",

value: "1"
}], "" );
}] );
deepEqual( tokenizer( "AD", "GGG", cldr ), [{

@@ -42,3 +42,3 @@ type: "GGG",

value: "1"
}], "" );
}] );
});

@@ -51,3 +51,3 @@

value: "1"
}], "" );
}] );
});

@@ -60,3 +60,3 @@

value: "1"
}], "" );
}] );
});

@@ -72,3 +72,3 @@

lexeme: "1982"
}], "" );
}] );
});

@@ -80,3 +80,3 @@

lexeme: "82"
}], "" );
}] );
});

@@ -88,7 +88,7 @@

lexeme: "1982"
}], "" );
}] );
deepEqual( tokenizer( "01982", "yyyyy", cldr ), [{
type: "yyyyy",
lexeme: "01982"
}], "" );
}] );
});

@@ -100,3 +100,3 @@

lexeme: "1982"
}], "" );
}] );
});

@@ -108,3 +108,3 @@

lexeme: "82"
}], "" );
}] );
});

@@ -116,7 +116,7 @@

lexeme: "1982"
}], "" );
}] );
deepEqual( tokenizer( "01982", "YYYYY", cldr ), [{
type: "YYYYY",
lexeme: "01982"
}], "" );
}] );
});

@@ -132,7 +132,7 @@

lexeme: "1"
}], "" );
}] );
deepEqual( tokenizer( "1", "q", cldr ), [{
type: "q",
lexeme: "1"
}], "" );
}] );
});

@@ -144,7 +144,7 @@

lexeme: "01"
}], "" );
}] );
deepEqual( tokenizer( "01", "qq", cldr ), [{
type: "qq",
lexeme: "01"
}], "" );
}] );
});

@@ -157,3 +157,3 @@

value: "1"
}], "" );
}] );
deepEqual( tokenizer( "Q1", "qqq", cldr ), [{

@@ -163,3 +163,3 @@ type: "qqq",

value: "1"
}], "" );
}] );
});

@@ -172,3 +172,3 @@

value: "1"
}], "" );
}] );
deepEqual( tokenizer( "1st quarter", "qqqq", cldr ), [{

@@ -178,3 +178,3 @@ type: "qqqq",

value: "1"
}], "" );
}] );
});

@@ -190,7 +190,7 @@

lexeme: "1"
}], "" );
}] );
deepEqual( tokenizer( "1", "L", cldr ), [{
type: "L",
lexeme: "1"
}], "" );
}] );
});

@@ -202,7 +202,7 @@

lexeme: "01"
}], "" );
}] );
deepEqual( tokenizer( "01", "LL", cldr ), [{
type: "LL",
lexeme: "01"
}], "" );
}] );
});

@@ -215,3 +215,3 @@

value: "1"
}], "" );
}] );
deepEqual( tokenizer( "Jan", "LLL", cldr ), [{

@@ -221,3 +221,3 @@ type: "LLL",

value: "1"
}], "" );
}] );
});

@@ -230,3 +230,3 @@

value: "1"
}], "" );
}] );
deepEqual( tokenizer( "January", "LLLL", cldr ), [{

@@ -236,3 +236,3 @@ type: "LLLL",

value: "1"
}], "" );
}] );
});

@@ -245,3 +245,3 @@

value: "1"
}], "" );
}] );
deepEqual( tokenizer( "J", "LLLLL", cldr ), [{

@@ -251,3 +251,3 @@ type: "LLLLL",

value: "1"
}], "" );
}] );
});

@@ -263,3 +263,3 @@

lexeme: "1"
}], "" );
}] );
});

@@ -271,3 +271,3 @@

lexeme: "01"
}], "" );
}] );
});

@@ -279,3 +279,3 @@

lexeme: "1"
}], "" );
}] );
});

@@ -291,3 +291,3 @@

lexeme: "2"
}], "" );
}] );
});

@@ -299,3 +299,3 @@

lexeme: "02"
}], "" );
}] );
});

@@ -307,3 +307,3 @@

lexeme: "2"
}], "" );
}] );
});

@@ -315,7 +315,7 @@

lexeme: "02"
}], "" );
}] );
deepEqual( tokenizer( "002", "DDD", cldr ), [{
type: "DDD",
lexeme: "002"
}], "" );
}] );
});

@@ -327,3 +327,3 @@

lexeme: "1"
}], "" );
}] );
});

@@ -339,7 +339,7 @@

lexeme: "7"
}], "" );
}] );
deepEqual( tokenizer( "7", "c", cldr ), [{
type: "c",
lexeme: "7"
}], "" );
}] );
});

@@ -351,7 +351,7 @@

lexeme: "07"
}], "" );
}] );
deepEqual( tokenizer( "07", "cc", cldr ), [{
type: "cc",
lexeme: "07"
}], "" );
}] );
});

@@ -364,3 +364,3 @@

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Sat", "EE", cldr ), [{

@@ -370,3 +370,3 @@ type: "EE",

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Sat", "EEE", cldr ), [{

@@ -376,3 +376,3 @@ type: "EEE",

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Sat", "eee", cldr ), [{

@@ -382,3 +382,3 @@ type: "eee",

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Sat", "ccc", cldr ), [{

@@ -388,3 +388,3 @@ type: "ccc",

value: "sat"
}], "" );
}] );
});

@@ -397,3 +397,3 @@

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Saturday", "eeee", cldr ), [{

@@ -403,3 +403,3 @@ type: "eeee",

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Saturday", "cccc", cldr ), [{

@@ -409,3 +409,3 @@ type: "cccc",

value: "sat"
}], "" );
}] );
});

@@ -419,3 +419,3 @@

value: "sun"
}], "" );
}] );
deepEqual( tokenizer( "S", "eeeee", cldr ), [{

@@ -425,3 +425,3 @@ type: "eeeee",

value: "sun"
}], "" );
}] );
deepEqual( tokenizer( "S", "ccccc", cldr ), [{

@@ -431,3 +431,3 @@ type: "ccccc",

value: "sun"
}], "" );
}] );
});

@@ -440,3 +440,3 @@

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Sa", "eeeeee", cldr ), [{

@@ -446,3 +446,3 @@ type: "eeeeee",

value: "sat"
}], "" );
}] );
deepEqual( tokenizer( "Sa", "cccccc", cldr ), [{

@@ -452,3 +452,3 @@ type: "cccccc",

value: "sat"
}], "" );
}] );
});

@@ -465,3 +465,3 @@

value: "am"
}], "" );
}] );
});

@@ -477,3 +477,3 @@

lexeme: "9"
}], "" );
}] );
});

@@ -485,3 +485,3 @@

lexeme: "09"
}], "" );
}] );
});

@@ -493,3 +493,3 @@

lexeme: "9"
}], "" );
}] );
});

@@ -501,3 +501,3 @@

lexeme: "09"
}], "" );
}] );
});

@@ -509,3 +509,3 @@

lexeme: "9"
}], "" );
}] );
});

@@ -517,3 +517,3 @@

lexeme: "09"
}], "" );
}] );
});

@@ -525,3 +525,3 @@

lexeme: "9"
}], "" );
}] );
});

@@ -533,3 +533,3 @@

lexeme: "09"
}], "" );
}] );
});

@@ -541,3 +541,3 @@

lexeme: "9"
}], "" );
}] );
});

@@ -549,3 +549,3 @@

lexeme: "09"
}], "" );
}] );
});

@@ -561,3 +561,3 @@

lexeme: "5"
}], "" );
}] );
});

@@ -569,3 +569,3 @@

lexeme: "05"
}], "" );
}] );
});

@@ -581,3 +581,3 @@

lexeme: "59"
}], "" );
}] );
});

@@ -589,3 +589,3 @@

lexeme: "59"
}], "" );
}] );
});

@@ -597,19 +597,19 @@

lexeme: "4"
}], "" );
}] );
deepEqual( tokenizer( "37", "SS", cldr ), [{
type: "SS",
lexeme: "37"
}], "" );
}] );
deepEqual( tokenizer( "369", "SSS", cldr ), [{
type: "SSS",
lexeme: "369"
}], "" );
}] );
deepEqual( tokenizer( "3690", "SSSS", cldr ), [{
type: "SSSS",
lexeme: "3690"
}], "" );
}] );
deepEqual( tokenizer( "36900", "SSSSS", cldr ), [{
type: "SSSSS",
lexeme: "36900"
}], "" );
}] );
});

@@ -621,19 +621,19 @@

lexeme: "633074"
}], "" );
}] );
deepEqual( tokenizer( "6330737", "AA", cldr ), [{
type: "AA",
lexeme: "6330737"
}], "" );
}] );
deepEqual( tokenizer( "63307369", "AAA", cldr ), [{
type: "AAA",
lexeme: "63307369"
}], "" );
}] );
deepEqual( tokenizer( "633073690", "AAAA", cldr ), [{
type: "AAAA",
lexeme: "633073690"
}], "" );
}] );
deepEqual( tokenizer( "6330736900", "AAAAA", cldr ), [{
type: "AAAAA",
lexeme: "6330736900"
}], "" );
}] );
});

@@ -640,0 +640,0 @@

@@ -33,24 +33,24 @@ define([

test( "should format integers", function() {
equal( format( pi, "#0", en ), "3", "" );
equal( format( pi, "###0", en ), "3", "" );
equal( format( pi, "#0", en ), "3" );
equal( format( pi, "###0", en ), "3" );
});
test( "should zero-pad minimum integer digits", function() {
equal( format( pi, "0", en ), "3", "" );
equal( format( pi, "00", en ), "03", "" );
equal( format( pi, "000", en ), "003", "" );
equal( format( pi, "0", en ), "3" );
equal( format( pi, "00", en ), "03" );
equal( format( pi, "000", en ), "003" );
});
test( "should not limit the maximum number of digits of integers", function() {
equal( format( earthDiameter, "0", en ), "12735", "" );
equal( format( earthDiameter, "00", en ), "12735", "" );
equal( format( earthDiameter, "#0", en ), "12735", "" );
equal( format( earthDiameter, "0", en ), "12735" );
equal( format( earthDiameter, "00", en ), "12735" );
equal( format( earthDiameter, "#0", en ), "12735" );
});
test( "should format negative integer", function() {
equal( format( -earthDiameter, "0", en ), "-12735", "" );
equal( format( -earthDiameter, "0;(0)", en ), "(12735)", "" );
equal( format( -earthDiameter, "0", en ), "-12735" );
equal( format( -earthDiameter, "0;(0)", en ), "(12735)" );
// The number of digits, minimal digits, and other characteristics shall be ignored in the negative subpattern.
equal( format( -earthDiameter, "0;(0.0##)", en ), "(12735)", "" );
equal( format( -earthDiameter, "0;(0.0##)", en ), "(12735)" );
});

@@ -63,85 +63,85 @@

test( "should format decimals", function() {
equal( format( pi, "0.##", en ), "3.14", "" );
equal( format( pi, "0.##", en ), "3.14" );
});
test( "should limit maximum fraction digits", function() {
equal( format( pi, "0.##", en ), "3.14", "" );
equal( format( pi, "0.0#", en ), "3.14", "" );
equal( format( pi, "0.####", en ), "3.1416", "" );
equal( format( 0.10004, "0.##", en ), "0.1", "" );
equal( format( pi, "0.##", en ), "3.14" );
equal( format( pi, "0.0#", en ), "3.14" );
equal( format( pi, "0.####", en ), "3.1416" );
equal( format( 0.10004, "0.##", en ), "0.1" );
});
test( "should zero-pad minimum fraction digits", function() {
equal( format( earthDiameter, "0.0", en ), "12735.0", "" );
equal( format( deci, "0.00", en ), "0.10", "" );
equal( format( earthDiameter, "0.0", en ), "12735.0" );
equal( format( deci, "0.00", en ), "0.10" );
});
test( "should localize decimal separator symbol (.)", function() {
equal( format( pi, "0.##", es ), "3,14", "" );
equal( format( pi, "0.##", ar ), "3٫14", "" );
equal( format( pi, "0.##", es ), "3,14" );
equal( format( pi, "0.##", ar ), "3٫14" );
});
test( "should allow integer and fraction options override", function() {
equal( format( pi, "0.##", en, { minimumIntegerDigits: 2 } ), "03.14", "" );
equal( format( pi, "0.##", en, { maximumFractionDigits: 1 } ), "3.1", "" );
equal( format( 0.1, "0.##", en, { minimumFractionDigits: 2 } ), "0.10", "" );
equal( format( pi, "0.##", en, { minimumIntegerDigits: 2 } ), "03.14" );
equal( format( pi, "0.##", en, { maximumFractionDigits: 1 } ), "3.1" );
equal( format( 0.1, "0.##", en, { minimumFractionDigits: 2 } ), "0.10" );
equal( format( 1.1, "0.##", en, {
minimumIntegerDigits: 2,
minimumFractionDigits: 3
}), "01.100", "" );
}), "01.100" );
// Use minimumFractionDigits, but no maximumFractionDigits. Sanity check.
equal( format( pi, "0.##", en, { minimumFractionDigits: 4 }), "3.1416", "" );
equal( format( pi, "0.##", en, { minimumFractionDigits: 4 }), "3.1416" );
});
test( "should allow rounding", function() {
equal( format( pi, "0.10", en ), "3.10", "" );
equal( format( pi, "0.20", en ), "3.20", "" );
equal( format( pi, "0.5", en ), "3.0", "" );
equal( format( pi, "0.1", en ), "3.1", "" );
equal( format( pi, "0.10", en ), "3.10" );
equal( format( pi, "0.20", en ), "3.20" );
equal( format( pi, "0.5", en ), "3.0" );
equal( format( pi, "0.1", en ), "3.1" );
});
test( "should allow different rounding options", function() {
equal( format( pi, "0.##", en, { round: "ceil" } ), "3.15", "" );
equal( format( pi, "0.##", en, { round: "floor"} ), "3.14", "" );
equal( format( pi, "0.##", en, { round: "round" } ), "3.14", "" );
equal( format( pi, "0.##", en, { round: "truncate"} ), "3.14", "" );
equal( format( pi, "0.####", en, { round: "ceil" } ), "3.1416", "" );
equal( format( pi, "0.####", en, { round: "floor"} ), "3.1415", "" );
equal( format( pi, "0.####", en, { round: "round" } ), "3.1416", "" );
equal( format( pi, "0.####", en, { round: "truncate"} ), "3.1415", "" );
equal( format( -pi, "0.##", en, { round: "ceil" } ), "-3.14", "" );
equal( format( -pi, "0.##", en, { round: "floor"} ), "-3.15", "" );
equal( format( -pi, "0.##", en, { round: "round" } ), "-3.14", "" );
equal( format( -pi, "0.##", en, { round: "truncate"} ), "-3.14", "" );
equal( format( -pi, "0.####", en, { round: "ceil" } ), "-3.1415", "" );
equal( format( -pi, "0.####", en, { round: "floor"} ), "-3.1416", "" );
equal( format( -pi, "0.####", en, { round: "round" } ), "-3.1416", "" );
equal( format( -pi, "0.####", en, { round: "truncate"} ), "-3.1415", "" );
equal( format( pi, "0.##", en, { round: "ceil" } ), "3.15" );
equal( format( pi, "0.##", en, { round: "floor"} ), "3.14" );
equal( format( pi, "0.##", en, { round: "round" } ), "3.14" );
equal( format( pi, "0.##", en, { round: "truncate"} ), "3.14" );
equal( format( pi, "0.####", en, { round: "ceil" } ), "3.1416" );
equal( format( pi, "0.####", en, { round: "floor"} ), "3.1415" );
equal( format( pi, "0.####", en, { round: "round" } ), "3.1416" );
equal( format( pi, "0.####", en, { round: "truncate"} ), "3.1415" );
equal( format( -pi, "0.##", en, { round: "ceil" } ), "-3.14" );
equal( format( -pi, "0.##", en, { round: "floor"} ), "-3.15" );
equal( format( -pi, "0.##", en, { round: "round" } ), "-3.14" );
equal( format( -pi, "0.##", en, { round: "truncate"} ), "-3.14" );
equal( format( -pi, "0.####", en, { round: "ceil" } ), "-3.1415" );
equal( format( -pi, "0.####", en, { round: "floor"} ), "-3.1416" );
equal( format( -pi, "0.####", en, { round: "round" } ), "-3.1416" );
equal( format( -pi, "0.####", en, { round: "truncate"} ), "-3.1415" );
});
test( "should format significant digits", function() {
equal( format( 123, "@@@", en ), "123", "" );
equal( format( 12345, "@@@", en ), "12300", "" );
equal( format( 12345, "@@#", en ), "12300", "" );
equal( format( 12345, "@##", en ), "12300", "" );
equal( format( pi, "@@", en ), "3.1", "" );
equal( format( pi, "@@#", en ), "3.14", "" );
equal( format( pi, "@@##", en ), "3.142", "" );
equal( format( pi, "@####", en ), "3.1416", "" );
equal( format( 0.10004, "@@", en ), "0.10", "" );
equal( format( 0.10004, "@##", en ), "0.1", "" );
equal( format( 0.12345, "@@@", en ), "0.123", "" );
equal( format( 1.23004, "@@##", en ), "1.23", "" );
equal( format( 123, "@@@", en ), "123" );
equal( format( 12345, "@@@", en ), "12300" );
equal( format( 12345, "@@#", en ), "12300" );
equal( format( 12345, "@##", en ), "12300" );
equal( format( pi, "@@", en ), "3.1" );
equal( format( pi, "@@#", en ), "3.14" );
equal( format( pi, "@@##", en ), "3.142" );
equal( format( pi, "@####", en ), "3.1416" );
equal( format( 0.10004, "@@", en ), "0.10" );
equal( format( 0.10004, "@##", en ), "0.1" );
equal( format( 0.12345, "@@@", en ), "0.123" );
equal( format( 1.23004, "@@##", en ), "1.23" );
});
test( "should format negative decimal", function() {
equal( format( -pi, "0.##", en ), "-3.14", "" );
equal( format( -pi, "0.##;(0.##)", en ), "(3.14)", "" );
equal( format( -pi, "@@#", en ), "-3.14", "" );
equal( format( -pi, "@@#;(@@#)", en ), "(3.14)", "" );
equal( format( -pi, "0.##", en ), "-3.14" );
equal( format( -pi, "0.##;(0.##)", en ), "(3.14)" );
equal( format( -pi, "@@#", en ), "-3.14" );
equal( format( -pi, "@@#;(@@#)", en ), "(3.14)" );
// The number of digits, minimal digits, and other characteristics shall be ignored in the negative subpattern.
equal( format( -pi, "0.##;(0)", en ), "(3.14)", "" );
equal( format( -pi, "@@#;(0)", en ), "(3.14)", "" );
equal( format( -pi, "0.##;(0)", en ), "(3.14)" );
equal( format( -pi, "@@#;(0)", en ), "(3.14)" );
});

@@ -154,7 +154,7 @@

test( "should format grouping separators", function() {
equal( format( earthDiameter, "#,##0.#", en ), "12,735", "" );
equal( format( earthDiameter, "#,#,#0.#", en ), "1,2,7,35", "" );
equal( format( 123456789, "#,##,###,###0", en ), "12,345,6789", "" );
equal( format( 123456789, "###,###,###0", en ), "12,345,6789", "" );
equal( format( 123456789, "##,#,###,###0", en ), "12,345,6789", "" );
equal( format( earthDiameter, "#,##0.#", en ), "12,735" );
equal( format( earthDiameter, "#,#,#0.#", en ), "1,2,7,35" );
equal( format( 123456789, "#,##,###,###0", en ), "12,345,6789" );
equal( format( 123456789, "###,###,###0", en ), "12,345,6789" );
equal( format( 123456789, "##,#,###,###0", en ), "12,345,6789" );
});

@@ -167,19 +167,19 @@

test( "should format percent", function() {
equal( format( 0.01, "0%", en ), "1%", "" );
equal( format( 0.01, "00%", en ), "01%", "" );
equal( format( 0.1, "0%", en ), "10%", "" );
equal( format( 0.5, "#0%", en ), "50%", "" );
equal( format( 1, "0%", en ), "100%", "" );
equal( format( 0.005, "##0.#%", en ), "0.5%", "" );
equal( format( 0.005, "##0.#%", en ), "0.5%", "" );
equal( format( 0.01, "0%", en ), "1%" );
equal( format( 0.01, "00%", en ), "01%" );
equal( format( 0.1, "0%", en ), "10%" );
equal( format( 0.5, "#0%", en ), "50%" );
equal( format( 1, "0%", en ), "100%" );
equal( format( 0.005, "##0.#%", en ), "0.5%" );
equal( format( 0.005, "##0.#%", en ), "0.5%" );
});
test( "should localize percent symbol (%)", function() {
equal( format( 0.5, "#0%", ar ), "50٪", "" );
equal( format( 0.5, "#0%", ar ), "50٪" );
});
test( "should format negative percentage", function() {
equal( format( -0.1, "0%", en ), "-10%", "" );
equal( format( -0.1, "0%;(0%)", en ), "(10%)", "" );
equal( format( -0.1, "0%;(0)%", en ), "(10)%", "" );
equal( format( -0.1, "0%", en ), "-10%" );
equal( format( -0.1, "0%;(0%)", en ), "(10%)" );
equal( format( -0.1, "0%;(0)%", en ), "(10)%" );
});

@@ -192,24 +192,41 @@

test( "should format per mille", function() {
equal( format( 0.001, "0\u2030", en ), "1\u2030", "" );
equal( format( 0.001, "00\u2030", en ), "01\u2030", "" );
equal( format( 0.01, "0\u2030", en ), "10\u2030", "" );
equal( format( 0.1, "0\u2030", en ), "100\u2030", "" );
equal( format( 0.5, "#0\u2030", en ), "500\u2030", "" );
equal( format( 1, "0\u2030", en ), "1000\u2030", "" );
equal( format( 0.0005, "##0.#\u2030", en ), "0.5\u2030", "" );
equal( format( 0.0005, "##0.#\u2030", en ), "0.5\u2030", "" );
equal( format( 0.5, "#0‰", en ), "500\u2030", "" );
equal( format( 0.5, "#0‰", en ), "500‰", "" );
equal( format( 0.001, "0\u2030", en ), "1\u2030" );
equal( format( 0.001, "00\u2030", en ), "01\u2030" );
equal( format( 0.01, "0\u2030", en ), "10\u2030" );
equal( format( 0.1, "0\u2030", en ), "100\u2030" );
equal( format( 0.5, "#0\u2030", en ), "500\u2030" );
equal( format( 1, "0\u2030", en ), "1000\u2030" );
equal( format( 0.0005, "##0.#\u2030", en ), "0.5\u2030" );
equal( format( 0.0005, "##0.#\u2030", en ), "0.5\u2030" );
equal( format( 0.5, "#0‰", en ), "500\u2030" );
equal( format( 0.5, "#0‰", en ), "500‰" );
});
test( "should localize per mille symbol (\u2030)", function() {
equal( format( 0.5, "#0\u2030", ar ), "500؉", "" );
equal( format( 0.5, "#0\u2030", ar ), "500؉" );
});
test( "should format negative mille", function() {
equal( format( -0.001, "0\u2030", en ), "-1\u2030", "" );
equal( format( -0.001, "0\u2030;(0\u2030)", en ), "(1\u2030)", "" );
equal( format( -0.001, "0\u2030;(0)\u2030", en ), "(1)\u2030", "" );
equal( format( -0.001, "0\u2030", en ), "-1\u2030" );
equal( format( -0.001, "0\u2030;(0\u2030)", en ), "(1\u2030)" );
equal( format( -0.001, "0\u2030;(0)\u2030", en ), "(1)\u2030" );
});
/**
* Infinity
*/
test( "should format infinite numbers", function() {
equal( format( Math.pow(2, 2000), "0", en ), "∞" );
equal( format( Math.pow(-2, 2001), "0", en ), "-∞" );
});
/**
* NaN
*/
test( "should format infinite numbers", function() {
equal( format( NaN, "0", en ), "NaN" );
});
});

@@ -8,19 +8,19 @@ define([

test( "should format primary grouping separator", function() {
equal( groupingSeparator( 1, 2 ), "1", "" );
equal( groupingSeparator( 11, 2 ), "11", "" );
equal( groupingSeparator( 111, 2 ), "1,11", "" );
equal( groupingSeparator( 1111, 2 ), "11,11", "" );
equal( groupingSeparator( 11111, 2 ), "1,11,11", "" );
equal( groupingSeparator( 1111111, 3 ), "1,111,111", "" );
equal( groupingSeparator( 1111111.1111, 3 ), "1,111,111.1111", "" );
equal( groupingSeparator( 1, 2 ), "1" );
equal( groupingSeparator( 11, 2 ), "11" );
equal( groupingSeparator( 111, 2 ), "1,11" );
equal( groupingSeparator( 1111, 2 ), "11,11" );
equal( groupingSeparator( 11111, 2 ), "1,11,11" );
equal( groupingSeparator( 1111111, 3 ), "1,111,111" );
equal( groupingSeparator( 1111111.1111, 3 ), "1,111,111.1111" );
});
test( "should format primary and second grouping separator", function() {
equal( groupingSeparator( 111111, 3, 2 ), "1,11,111", "" );
equal( groupingSeparator( 1111111, 3, 2 ), "11,11,111", "" );
equal( groupingSeparator( 11111111, 3, 2 ), "1,11,11,111", "" );
equal( groupingSeparator( 11111111, 2, 1 ), "1,1,1,1,1,1,11", "" );
equal( groupingSeparator( 11111111.1111, 2, 1 ), "1,1,1,1,1,1,11.1111", "" );
equal( groupingSeparator( 111111, 3, 2 ), "1,11,111" );
equal( groupingSeparator( 1111111, 3, 2 ), "11,11,111" );
equal( groupingSeparator( 11111111, 3, 2 ), "1,11,11,111" );
equal( groupingSeparator( 11111111, 2, 1 ), "1,1,1,1,1,1,11" );
equal( groupingSeparator( 11111111.1111, 2, 1 ), "1,1,1,1,1,1,11.1111" );
});
});

@@ -24,7 +24,7 @@ define([

test( "should zero-pad minimum integer digits", function() {
equal( formatIntegerFractionDigits( pi, 2, null, null, round, null ), "03", "" );
equal( formatIntegerFractionDigits( pi, 2, null, null, round, null ), "03" );
});
test( "should not limit the maximum number of digits of integers", function() {
equal( formatIntegerFractionDigits( earthDiameter, 1, null, null, round, null ), "12735", "" );
equal( formatIntegerFractionDigits( earthDiameter, 1, null, null, round, null ), "12735" );
});

@@ -37,31 +37,31 @@

test( "should limit maximum fraction digits", function() {
equal( formatIntegerFractionDigits( pi, 1, 0, 2, round, null ), "3.14", "" );
equal( formatIntegerFractionDigits( pi, 1, 4, 4, round, null ), "3.1416", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, round, null ), "3.14" );
equal( formatIntegerFractionDigits( pi, 1, 4, 4, round, null ), "3.1416" );
});
test( "should zero-pad minimum fraction digits", function() {
equal( formatIntegerFractionDigits( deci, 1, 2, 2, round, null ), "0.10", "" );
equal( formatIntegerFractionDigits( deci, 1, 2, 2, round, null ), "0.10" );
});
test( "should allow rounding", function() {
equal( formatIntegerFractionDigits( pi, 1, 2, 2, round, 0.10 ), "3.10", "" );
equal( formatIntegerFractionDigits( pi, 1, 2, 2, round, 0.10 ), "3.10" );
});
test( "should allow different rounding options", function() {
equal( formatIntegerFractionDigits( pi, 1, 0, 2, ceil, null ), "3.15", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, floor, null ), "3.14", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, round, null ), "3.14", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, truncate, null ), "3.14", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, ceil, null ), "3.1416", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, floor, null), "3.1415", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, round, null ), "3.1416", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, truncate, null ), "3.1415", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, ceil, null ), "-3.14", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, floor, null ), "-3.15", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, round, null ), "-3.14", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, truncate, null ), "-3.14", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, ceil, null ), "-3.1415", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, floor, null ), "-3.1416", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, round, null ), "-3.1416", "" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, truncate, null ), "-3.1415", "" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, ceil, null ), "3.15" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, floor, null ), "3.14" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, round, null ), "3.14" );
equal( formatIntegerFractionDigits( pi, 1, 0, 2, truncate, null ), "3.14" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, ceil, null ), "3.1416" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, floor, null), "3.1415" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, round, null ), "3.1416" );
equal( formatIntegerFractionDigits( pi, 1, 0, 4, truncate, null ), "3.1415" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, ceil, null ), "-3.14" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, floor, null ), "-3.15" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, round, null ), "-3.14" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 2, truncate, null ), "-3.14" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, ceil, null ), "-3.1415" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, floor, null ), "-3.1416" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, round, null ), "-3.1416" );
equal( formatIntegerFractionDigits( -pi, 1, 0, 4, truncate, null ), "-3.1415" );
});

@@ -71,6 +71,6 @@

test( "should ignore decimal error", function() {
equal( formatIntegerFractionDigits( 12341234.233, 1, 1, 3, round, null ), "12341234.233", "" );
equal( formatIntegerFractionDigits( 1234 * 0.0001, 1, 1, 4, round, null ), "0.1234", "" );
equal( formatIntegerFractionDigits( 12341234.233, 1, 1, 3, round, null ), "12341234.233" );
equal( formatIntegerFractionDigits( 1234 * 0.0001, 1, 1, 4, round, null ), "0.1234" );
});
});

@@ -17,26 +17,26 @@ define([

test( "should zero-pad minimum significant figures", function() {
equal( formatSignificantDigits( deci, 3, 3, round ), "0.100", "" );
equal( formatSignificantDigits( deci, 3, 3, round ), "0.100" );
});
test( "should limit maximum significant figures", function() {
equal( formatSignificantDigits( 123, 3, 3, round ), "123", "" );
equal( formatSignificantDigits( 12345, 3, 3, round ), "12300", "" );
equal( formatSignificantDigits( pi, 2, 2, round ), "3.1", "" );
equal( formatSignificantDigits( pi, 2, 3, round ), "3.14", "" );
equal( formatSignificantDigits( pi, 2, 4, round ), "3.142", "" );
equal( formatSignificantDigits( pi, 1, 5, round ), "3.1416", "" );
equal( formatSignificantDigits( 0.10004, 2, 2, round ), "0.10", "" );
equal( formatSignificantDigits( 0.12345, 3, 3, round ), "0.123", "" );
equal( formatSignificantDigits( 0.012345, 3, 3, round ), "0.0123", "" );
equal( formatSignificantDigits( 123, 3, 3, round ), "123" );
equal( formatSignificantDigits( 12345, 3, 3, round ), "12300" );
equal( formatSignificantDigits( pi, 2, 2, round ), "3.1" );
equal( formatSignificantDigits( pi, 2, 3, round ), "3.14" );
equal( formatSignificantDigits( pi, 2, 4, round ), "3.142" );
equal( formatSignificantDigits( pi, 1, 5, round ), "3.1416" );
equal( formatSignificantDigits( 0.10004, 2, 2, round ), "0.10" );
equal( formatSignificantDigits( 0.12345, 3, 3, round ), "0.123" );
equal( formatSignificantDigits( 0.012345, 3, 3, round ), "0.0123" );
});
test( "should allow different round options", function() {
equal( formatSignificantDigits( 0.12345, 3, 3, ceil ), "0.124", "" );
equal( formatSignificantDigits( 0.12345, 3, 3, floor ), "0.123", "" );
equal( formatSignificantDigits( 0.12345, 3, 3, truncate ), "0.123", "" );
equal( formatSignificantDigits( -0.12345, 3, 3, ceil ), "-0.123", "" );
equal( formatSignificantDigits( -0.12345, 3, 3, floor ), "-0.124", "" );
equal( formatSignificantDigits( -0.12345, 3, 3, truncate ), "-0.123", "" );
equal( formatSignificantDigits( 0.12345, 3, 3, ceil ), "0.124" );
equal( formatSignificantDigits( 0.12345, 3, 3, floor ), "0.123" );
equal( formatSignificantDigits( 0.12345, 3, 3, truncate ), "0.123" );
equal( formatSignificantDigits( -0.12345, 3, 3, ceil ), "-0.123" );
equal( formatSignificantDigits( -0.12345, 3, 3, floor ), "-0.124" );
equal( formatSignificantDigits( -0.12345, 3, 3, truncate ), "-0.123" );
});
});
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc