Files
yavsc/web/Scripts/globalize/currency.js
Paul Schneider eb5263078f * MarkdownHelper.cs:
implements MarkdownDeep helper from NuGet

* uninstdbws.sql:
* jquery-2.1.3.js:
* jquery-2.1.4.js:
* date.js:
* mdd_help.htm:
* scorediv-latest.js:
* jquery-2.1.4.min.js:
* jquery-2.1.3.min.js:
* plural.js:
* number.js:
* jquery-2.1.4.min.map:
* message.js:
* jquery-2.1.3.min.map:
* jquery-2.1.3-vsdoc.js:
* currency.js:
* jquery-2.1.4-vsdoc.js:
* globalize.js:
* MarkdownDeepLib.min.js:
* relative-time.js:
* globalize.cultures.js:
* globalize.culture.kn.js:
* globalize.culture.or.js:
* globalize.culture.pa.js:
* globalize.culture.pl.js:
* globalize.culture.fo.js:
* globalize.culture.ps.js:
* globalize.culture.fi.js:
* globalize.culture.fa.js:
* globalize.culture.fr.js:
* globalize.culture.nn.js:
* globalize.culture.no.js:
* globalize.culture.gl.js:
* globalize.culture.gd.js:
* globalize.culture.ga.js:
* globalize.culture.oc.js:
* globalize.culture.fy.js:
* globalize.culture.eu.js:
* globalize.culture.se.js:
* globalize.culture.si.js:
* globalize.culture.sk.js:
* globalize.culture.sl.js:
* globalize.culture.sq.js:
* globalize.culture.sr.js:
* globalize.culture.sv.js:
* globalize.culture.sa.js:
* globalize.culture.pt.js:
* globalize.culture.et.js:
* globalize.culture.es.js:
* globalize.culture.rm.js:
* globalize.culture.ro.js:
* globalize.culture.ru.js:
* globalize.culture.rw.js:
* globalize.culture.gu.js:
* globalize.culture.kk.js:
* globalize.culture.ka.js:
* globalize.culture.mk.js:
* globalize.culture.ja.js:
* globalize.culture.iu.js:
* globalize.culture.ml.js:
* globalize.culture.mn.js:
* globalize.culture.mi.js:
* globalize.culture.ky.js:
* globalize.culture.lo.js:
* globalize.culture.ko.js:
* globalize.culture.lt.js:
* globalize.culture.lv.js:
* globalize.culture.km.js:
* globalize.culture.kl.js:
* globalize.culture.it.js:
* globalize.culture.nb.js:
* globalize.culture.hr.js:
* globalize.culture.ne.js:
* globalize.culture.hi.js:
* globalize.culture.he.js:
* globalize.culture.ha.js:
* globalize.culture.nl.js:
* globalize.culture.hu.js:
* globalize.culture.mr.js:
* globalize.culture.is.js:
* globalize.culture.ii.js:
* globalize.culture.ig.js:
* globalize.culture.ms.js:
* globalize.culture.id.js:
* globalize.culture.hy.js:
* globalize.culture.mt.js:
* globalize.culture.sw.js:
* globalize.culture.bs.js:
* globalize.culture.tt.js:
* globalize.culture.lb.js:
* globalize.culture.ug.js:
* globalize.culture.br.js:
* globalize.culture.bo.js:
* globalize.culture.uk.js:
* globalize.culture.ca.js:
* globalize.culture.tk.js:
* globalize.culture.da.js:
* globalize.culture.cy.js:
* globalize.culture.tn.js:
* globalize.culture.cs.js:
* globalize.culture.co.js:
* globalize.culture.tr.js:
* globalize.culture.bn.js:
* globalize.culture.as.js:
* globalize.culture.yo.js:
* globalize.culture.ar.js:
* globalize.culture.zh.js:
* globalize.culture.zu.js:
* globalize.culture.am.js:
* globalize.culture.af.js:
* globalize.culture.xh.js:
* globalize.culture.ur.js:
* globalize.culture.bg.js:
* globalize.culture.uz.js:
* globalize.culture.be.js:
* globalize.culture.ba.js:
* globalize.culture.vi.js:
* globalize.culture.az.js:
* globalize.culture.wo.js:
* globalize.culture.dv.js:
* globalize.culture.te.js:
* globalize.culture.de.js:
* globalize.culture.tg.js:
* globalize.culture.ta.js:
* globalize.culture.el.js:
* globalize.culture.th.js:
* globalize.culture.arn.js:
* globalize.culture.gsw.js:
* globalize.culture.nso.js:
* globalize.culture.sah.js:
* globalize.culture.syr.js:
* globalize.culture.tzm.js:
* globalize.culture.kok.js:
* globalize.culture.dsb.js:
* globalize.culture.moh.js:
* globalize.culture.sms.js:
* globalize.culture.smn.js:
* globalize.culture.smj.js:
* globalize.culture.sma.js:
* globalize.culture.hsb.js:
* globalize.culture.quz.js:
* globalize.culture.fil.js:
* globalize.culture.qut.js:
* globalize.culture.prs.js:
* globalize.culture.mn-MN.js:
* globalize.culture.rm-CH.js:
* globalize.culture.ta-IN.js:
* globalize.culture.ml-IN.js:
* globalize.culture.zh-CN.js:
* globalize.culture.zh-HK.js:
* globalize.culture.tn-ZA.js:
* globalize.culture.ms-BN.js:
* globalize.culture.ro-RO.js:
* globalize.culture.sq-AL.js:
* globalize.culture.mr-IN.js:
* globalize.culture.yo-NG.js:
* globalize.culture.pt-PT.js:
* globalize.culture.sa-IN.js:
* globalize.culture.zh-MO.js:
* globalize.culture.am-ET.js:
* globalize.culture.lt-LT.js:
* globalize.culture.tk-TM.js:
* globalize.culture.sw-KE.js:
* globalize.culture.af-ZA.js:
* globalize.culture.lo-LA.js:
* globalize.culture.lv-LV.js:
* globalize.culture.mk-MK.js:
* globalize.culture.zh-SG.js:
* globalize.culture.zh-TW.js:
* globalize.culture.sv-FI.js:
* globalize.culture.mi-NZ.js:
* globalize.culture.zu-ZA.js:
* globalize.culture.sv-SE.js:
* globalize.culture.xh-ZA.js:
* globalize.culture.uk-UA.js:
* globalize.culture.se-SE.js:
* globalize.culture.nn-NO.js:
* globalize.culture.si-LK.js:
* globalize.culture.nl-NL.js:
* globalize.culture.ur-PK.js:
* globalize.culture.pl-PL.js:
* globalize.culture.or-IN.js:
* globalize.culture.tt-RU.js:
* globalize.culture.pa-IN.js:
* globalize.culture.ug-CN.js:
* globalize.culture.rw-RW.js:
* globalize.culture.se-FI.js:
* globalize.culture.se-NO.js:
* globalize.culture.nl-BE.js:
* globalize.culture.ru-RU.js:
* globalize.culture.mt-MT.js:
* globalize.culture.th-TH.js:
* globalize.culture.wo-SN.js:
* globalize.culture.pt-BR.js:
* globalize.culture.ms-MY.js:
* globalize.culture.vi-VN.js:
* globalize.culture.te-IN.js:
* globalize.culture.sk-SK.js:
* globalize.culture.ne-NP.js:
* globalize.culture.tr-TR.js:
* globalize.culture.sl-SI.js:
* globalize.culture.ps-AF.js:
* globalize.culture.nb-NO.js:
* globalize.culture.oc-FR.js:
* globalize.culture.en-JM.js:
* globalize.culture.en-MY.js:
* globalize.culture.en-NZ.js:
* globalize.culture.en-PH.js:
* globalize.culture.en-SG.js:
* globalize.culture.en-TT.js:
* globalize.culture.en-US.js:
* globalize.culture.en-IN.js:
* globalize.culture.dv-MV.js:
* globalize.culture.el-GR.js:
* globalize.culture.en-AU.js:
* globalize.culture.en-BZ.js:
* globalize.culture.en-CA.js:
* globalize.culture.en-GB.js:
* globalize.culture.en-IE.js:
* globalize.culture.en-ZA.js:
* globalize.culture.es-ES.js:
* globalize.culture.es-GT.js:
* globalize.culture.es-HN.js:
* globalize.culture.es-MX.js:
* globalize.culture.es-NI.js:
* globalize.culture.es-PA.js:
* globalize.culture.es-PE.js:
* globalize.culture.es-EC.js:
* globalize.culture.en-ZW.js:
* globalize.culture.es-AR.js:
* globalize.culture.es-BO.js:
* globalize.culture.es-CL.js:
* globalize.culture.es-CO.js:
* globalize.culture.es-CR.js:
* globalize.culture.es-DO.js:
* globalize.culture.de-LU.js:
* globalize.culture.ar-OM.js:
* globalize.culture.ar-QA.js:
* globalize.culture.ar-SA.js:
* globalize.culture.ar-SY.js:
* globalize.culture.ar-TN.js:
* globalize.culture.ar-YE.js:
* globalize.culture.as-IN.js:
* globalize.culture.ar-MA.js:
* globalize.culture.ar-DZ.js:
* globalize.culture.ar-EG.js:
* globalize.culture.ar-IQ.js:
* globalize.culture.ar-JO.js:
* globalize.culture.ar-KW.js:
* globalize.culture.ar-LB.js:
* globalize.culture.ar-LY.js:
* globalize.culture.ba-RU.js:
* globalize.culture.cs-CZ.js:
* globalize.culture.cy-GB.js:
* globalize.culture.da-DK.js:
* globalize.culture.de-AT.js:
* globalize.culture.de-CH.js:
* globalize.culture.de-DE.js:
* globalize.culture.de-LI.js:
* globalize.culture.co-FR.js:
* globalize.culture.be-BY.js:
* globalize.culture.bg-BG.js:
* globalize.culture.bn-BD.js:
* globalize.culture.bn-IN.js:
* globalize.culture.bo-CN.js:
* globalize.culture.br-FR.js:
* globalize.culture.ca-ES.js:
* globalize.culture.es-PR.js:
* globalize.culture.hi-IN.js:
* globalize.culture.hr-BA.js:
* globalize.culture.hr-HR.js:
* globalize.culture.hu-HU.js:
* globalize.culture.hy-AM.js:
* globalize.culture.id-ID.js:
* globalize.culture.he-IL.js:
* globalize.culture.fy-NL.js:
* globalize.culture.ga-IE.js:
* globalize.culture.gd-GB.js:
* globalize.culture.gl-ES.js:
* globalize.culture.gu-IN.js:
* globalize.culture.ka-GE.js:
* globalize.culture.ig-NG.js:
* globalize.culture.km-KH.js:
* globalize.culture.kn-IN.js:
* globalize.culture.ar-BH.js:
* globalize.culture.ko-KR.js:
* globalize.culture.ky-KG.js:
* globalize.culture.lb-LU.js:
* globalize.culture.kl-GL.js:
* globalize.culture.ii-CN.js:
* globalize.culture.is-IS.js:
* globalize.culture.it-CH.js:
* globalize.culture.it-IT.js:
* globalize.culture.ja-JP.js:
* globalize.culture.ar-AE.js:
* globalize.culture.kk-KZ.js:
* globalize.culture.fr-MC.js:
* globalize.culture.fr-LU.js:
* globalize.culture.fr-FR.js:
* globalize.culture.fa-IR.js:
* globalize.culture.fr-CH.js:
* globalize.culture.et-EE.js:
* globalize.culture.fi-FI.js:
* globalize.culture.fo-FO.js:
* globalize.culture.fr-BE.js:
* globalize.culture.fr-CA.js:
* globalize.culture.eu-ES.js:
* globalize.culture.es-US.js:
* globalize.culture.es-PY.js:
* globalize.culture.es-UY.js:
* globalize.culture.es-VE.js:
* globalize.culture.es-SV.js:
* globalize.culture.sma-SE.js:
* globalize.culture.hsb-DE.js:
* globalize.culture.prs-AF.js:
* globalize.culture.sma-NO.js:
* globalize.culture.qut-GT.js:
* globalize.culture.moh-CA.js:
* globalize.culture.zh-CHT.js:
* globalize.culture.quz-BO.js:
* globalize.culture.fil-PH.js:
* globalize.culture.zh-CHS.js:
* globalize.culture.smj-NO.js:
* globalize.culture.gsw-FR.js:
* globalize.culture.nso-ZA.js:
* globalize.culture.sms-FI.js:
* globalize.culture.quz-PE.js:
* globalize.culture.sah-RU.js:
* globalize.culture.kok-IN.js:
* globalize.culture.syr-SY.js:
* globalize.culture.smj-SE.js:
* globalize.culture.arn-CL.js:
* globalize.culture.dsb-DE.js:
* globalize.culture.quz-EC.js:
* globalize.culture.smn-FI.js:
* globalize.culture.en-029.js:
* globalize.culture.uz-Latn.js:
* globalize.culture.tg-Cyrl.js:
* globalize.culture.iu-Cans.js:
* globalize.culture.mn-Mong.js:
* globalize.culture.az-Latn.js:
* globalize.culture.az-Cyrl.js:
* globalize.culture.sr-Cyrl.js:
* globalize.culture.mn-Cyrl.js:
* globalize.culture.bs-Cyrl.js:
* globalize.culture.iu-Latn.js:
* globalize.culture.ha-Latn.js:
* globalize.culture.sr-Latn.js:
* globalize.culture.zh-Hant.js:
* globalize.culture.bs-Latn.js:
* globalize.culture.uz-Cyrl.js:
* globalize.culture.zh-Hans.js:
* globalize.culture.tzm-Latn.js:
* globalize.culture.iu-Latn-CA.js:
* globalize.culture.sr-Latn-RS.js:
* globalize.culture.sr-Latn-ME.js:
* globalize.culture.sr-Latn-CS.js:
* globalize.culture.sr-Latn-BA.js:
* globalize.culture.sr-Cyrl-RS.js:
* globalize.culture.sr-Cyrl-ME.js:
* globalize.culture.sr-Cyrl-CS.js:
* globalize.culture.sr-Cyrl-BA.js:
* globalize.culture.ha-Latn-NG.js:
* globalize.culture.mn-Mong-CN.js:
* globalize.culture.az-Cyrl-AZ.js:
* globalize.culture.az-Latn-AZ.js:
* globalize.culture.uz-Latn-UZ.js:
* globalize.culture.uz-Cyrl-UZ.js:
* globalize.culture.iu-Cans-CA.js:
* globalize.culture.bs-Cyrl-BA.js:
* globalize.culture.bs-Latn-BA.js:
* globalize.culture.tg-Cyrl-TJ.js:
* globalize.culture.tzm-Latn-DZ.js: Package update

* cldr.js:
* globalize.js:
* event.js:
* unresolved.js:
* supplemental.js: * adds Localisation purpose dependency

* mdd_styles.css:
* mdd_gripper.png:
* mdd_toolbar.png:
* mdd_ajax_loader.gif:
* mdd_modal_background.png: Adds Markdown editor resources

* CalendarController.cs: Refactoring : moved Notification and
  MessagesWithPayLoad into the Google data model (YavscModel)

* BlogsController.cs: * Removes input validation, in order to process
  some Markdown values.
* Makes the "Edit" Method the one that do the inital post (makes the
  "Post" method obsolete)


* App.master: * jQuery version updated to 2.1.4


* style.css: Sets a non null padding to the body of html pages.


* Edit.aspx: Passes from BBCodes to Markdown at edition time,
adds the Markdown editor.

* UserPost.aspx: Now displays Markdown content

* Web.config: * Modifies the "Thanks" configuration
* Removes useless addembly bindings
* 

* Web.csproj:
* packages.config: Package updates

* instdbws.sql: Adds a GCM registration id in the user's profile data.


* LoginModel.cs: Allows numbers in passords and logins

* YavscModel.csproj: GCM refactorisation

* Post.aspx: Replaced by Edit.aspx
2015-06-05 14:47:35 +02:00

414 lines
13 KiB
JavaScript

/*!
* Globalize v1.0.0
*
* http://github.com/jquery/globalize
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2015-04-23T12:02Z
*/
(function( root, factory ) {
// UMD returnExports
if ( typeof define === "function" && define.amd ) {
// AMD
define([
"cldr",
"../globalize",
"./number",
"cldr/event",
"cldr/supplemental"
], factory );
} else if ( typeof exports === "object" ) {
// Node, CommonJS
module.exports = factory( require( "cldrjs" ), require( "globalize" ) );
} else {
// Global
factory( root.Cldr, root.Globalize );
}
}(this, function( Cldr, Globalize ) {
var alwaysArray = Globalize._alwaysArray,
formatMessage = Globalize._formatMessage,
numberNumberingSystem = Globalize._numberNumberingSystem,
numberPattern = Globalize._numberPattern,
stringPad = Globalize._stringPad,
validate = Globalize._validate,
validateCldr = Globalize._validateCldr,
validateDefaultLocale = Globalize._validateDefaultLocale,
validateParameterPresence = Globalize._validateParameterPresence,
validateParameterType = Globalize._validateParameterType,
validateParameterTypeNumber = Globalize._validateParameterTypeNumber,
validateParameterTypePlainObject = Globalize._validateParameterTypePlainObject;
var validateParameterTypeCurrency = function( value, name ) {
validateParameterType(
value,
name,
value === undefined || typeof value === "string" && ( /^[A-Za-z]{3}$/ ).test( value ),
"3-letter currency code string as defined by ISO 4217"
);
};
var validatePluralModulePresence = function() {
validate( "E_MISSING_PLURAL_MODULE", "Plural module not loaded.",
Globalize.plural !== undefined, {} );
};
/**
* supplementalOverride( currency, pattern, cldr )
*
* Return pattern with fraction digits overriden by supplemental currency data.
*/
var currencySupplementalOverride = function( currency, pattern, cldr ) {
var digits,
fraction = cldr.supplemental([ "currencyData/fractions", currency ]) ||
cldr.supplemental( "currencyData/fractions/DEFAULT" );
digits = +fraction._digits;
if ( digits ) {
fraction = "." + stringPad( "0", digits ).slice( 0, -1 ) + fraction._rounding;
} else {
fraction = "";
}
return pattern.replace( /\.(#+|0*[0-9]|0+[0-9]?)/g, fraction );
};
var objectFilter = function( object, testRe ) {
var key,
copy = {};
for ( key in object ) {
if ( testRe.test( key ) ) {
copy[ key ] = object[ key ];
}
}
return copy;
};
var currencyUnitPatterns = function( cldr ) {
return objectFilter( cldr.main([
"numbers",
"currencyFormats-numberSystem-" + numberNumberingSystem( cldr )
]), /^unitPattern/ );
};
/**
* codeProperties( currency, cldr )
*
* Return number pattern with the appropriate currency code in as literal.
*/
var currencyCodeProperties = function( currency, cldr ) {
var pattern = numberPattern( "decimal", cldr );
// The number of decimal places and the rounding for each currency is not locale-specific. Those
// values overridden by Supplemental Currency Data.
pattern = currencySupplementalOverride( currency, pattern, cldr );
return {
currency: currency,
pattern: pattern,
unitPatterns: currencyUnitPatterns( cldr )
};
};
/**
* nameFormat( formattedNumber, pluralForm, properties )
*
* Return the appropriate name form currency format.
*/
var currencyNameFormat = function( formattedNumber, pluralForm, properties ) {
var displayName, unitPattern,
displayNames = properties.displayNames || {},
unitPatterns = properties.unitPatterns;
displayName = displayNames[ "displayName-count-" + pluralForm ] ||
displayNames[ "displayName-count-other" ] ||
displayNames.displayName ||
properties.currency;
unitPattern = unitPatterns[ "unitPattern-count-" + pluralForm ] ||
unitPatterns[ "unitPattern-count-other" ];
return formatMessage( unitPattern, [ formattedNumber, displayName ]);
};
/**
* nameProperties( currency, cldr )
*
* Return number pattern with the appropriate currency code in as literal.
*/
var currencyNameProperties = function( currency, cldr ) {
var properties = currencyCodeProperties( currency, cldr );
properties.displayNames = objectFilter( cldr.main([
"numbers/currencies",
currency
]), /^displayName/ );
return properties;
};
/**
* Unicode regular expression for: everything except math symbols, currency signs, dingbats, and
* box-drawing characters.
*
* Generated by:
*
* regenerate()
* .addRange( 0x0, 0x10FFFF )
* .remove( require( "unicode-7.0.0/categories/S/symbols" ) ).toString();
*
* https://github.com/mathiasbynens/regenerate
* https://github.com/mathiasbynens/unicode-7.0.0
*/
var regexpNotS = /[\0-#%-\*,-;\?-\]_a-\{\}\x7F-\xA1\xA7\xAA\xAB\xAD\xB2\xB3\xB5-\xB7\xB9-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376-\u0383\u0386-\u03F5\u03F7-\u0481\u0483-\u058C\u0590-\u0605\u0609\u060A\u060C\u060D\u0610-\u06DD\u06DF-\u06E8\u06EA-\u06FC\u06FF-\u07F5\u07F7-\u09F1\u09F4-\u09F9\u09FC-\u0AF0\u0AF2-\u0B6F\u0B71-\u0BF2\u0BFB-\u0C7E\u0C80-\u0D78\u0D7A-\u0E3E\u0E40-\u0F00\u0F04-\u0F12\u0F14\u0F18\u0F19\u0F20-\u0F33\u0F35\u0F37\u0F39-\u0FBD\u0FC6\u0FCD\u0FD0-\u0FD4\u0FD9-\u109D\u10A0-\u138F\u139A-\u17DA\u17DC-\u193F\u1941-\u19DD\u1A00-\u1B60\u1B6B-\u1B73\u1B7D-\u1FBC\u1FBE\u1FC2-\u1FCC\u1FD0-\u1FDC\u1FE0-\u1FEC\u1FF0-\u1FFC\u1FFF-\u2043\u2045-\u2051\u2053-\u2079\u207D-\u2089\u208D-\u209F\u20BE-\u20FF\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u218F\u2308-\u230B\u2329\u232A\u23FB-\u23FF\u2427-\u243F\u244B-\u249B\u24EA-\u24FF\u2768-\u2793\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2B74\u2B75\u2B96\u2B97\u2BBA-\u2BBC\u2BC9\u2BD2-\u2CE4\u2CEB-\u2E7F\u2E9A\u2EF4-\u2EFF\u2FD6-\u2FEF\u2FFC-\u3003\u3005-\u3011\u3014-\u301F\u3021-\u3035\u3038-\u303D\u3040-\u309A\u309D-\u318F\u3192-\u3195\u31A0-\u31BF\u31E4-\u31FF\u321F-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u32FF\u3400-\u4DBF\u4E00-\uA48F\uA4C7-\uA6FF\uA717-\uA71F\uA722-\uA788\uA78B-\uA827\uA82C-\uA835\uA83A-\uAA76\uAA7A-\uAB5A\uAB5C-\uD7FF\uDC00-\uFB28\uFB2A-\uFBB1\uFBC2-\uFDFB\uFDFE-\uFE61\uFE63\uFE67\uFE68\uFE6A-\uFF03\uFF05-\uFF0A\uFF0C-\uFF1B\uFF1F-\uFF3D\uFF3F\uFF41-\uFF5B\uFF5D\uFF5F-\uFFDF\uFFE7\uFFEF-\uFFFB\uFFFE\uFFFF]|\uD800[\uDC00-\uDD36\uDD40-\uDD78\uDD8A\uDD8B\uDD8D-\uDD8F\uDD9C-\uDD9F\uDDA1-\uDDCF\uDDFD-\uDFFF]|[\uD801\uD803-\uD819\uD81B-\uD82E\uD830-\uD833\uD836-\uD83A\uD83F-\uDBFF][\uDC00-\uDFFF]|\uD802[\uDC00-\uDC76\uDC79-\uDEC7\uDEC9-\uDFFF]|\uD81A[\uDC00-\uDF3B\uDF40-\uDF44\uDF46-\uDFFF]|\uD82F[\uDC00-\uDC9B\uDC9D-\uDFFF]|\uD834[\uDCF6-\uDCFF\uDD27\uDD28\uDD65-\uDD69\uDD6D-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDDDE-\uDDFF\uDE42-\uDE44\uDE46-\uDEFF\uDF57-\uDFFF]|\uD835[\uDC00-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFFF]|\uD83B[\uDC00-\uDEEF\uDEF2-\uDFFF]|\uD83C[\uDC2C-\uDC2F\uDC94-\uDC9F\uDCAF\uDCB0\uDCC0\uDCD0\uDCF6-\uDD0F\uDD2F\uDD6C-\uDD6F\uDD9B-\uDDE5\uDE03-\uDE0F\uDE3B-\uDE3F\uDE49-\uDE4F\uDE52-\uDEFF\uDF2D-\uDF2F\uDF7E\uDF7F\uDFCF-\uDFD3\uDFF8-\uDFFF]|\uD83D[\uDCFF\uDD4B-\uDD4F\uDD7A\uDDA4\uDE43\uDE44\uDED0-\uDEDF\uDEED-\uDEEF\uDEF4-\uDEFF\uDF74-\uDF7F\uDFD5-\uDFFF]|\uD83E[\uDC0C-\uDC0F\uDC48-\uDC4F\uDC5A-\uDC5F\uDC88-\uDC8F\uDCAE-\uDFFF]|[\uD800-\uDBFF]/;
/**
* symbolProperties( currency, cldr )
*
* Return pattern replacing `¤` with the appropriate currency symbol literal.
*/
var currencySymbolProperties = function( currency, cldr, options ) {
var currencySpacing, pattern,
regexp = {
"[:digit:]": /\d/,
"[:^S:]": regexpNotS
},
symbol = cldr.main([
"numbers/currencies",
currency,
"symbol"
]);
currencySpacing = [ "beforeCurrency", "afterCurrency" ].map(function( position ) {
return cldr.main([
"numbers",
"currencyFormats-numberSystem-" + numberNumberingSystem( cldr ),
"currencySpacing",
position
]);
});
pattern = cldr.main([
"numbers",
"currencyFormats-numberSystem-" + numberNumberingSystem( cldr ),
options.style === "accounting" ? "accounting" : "standard"
]);
pattern =
// The number of decimal places and the rounding for each currency is not locale-specific.
// Those values are overridden by Supplemental Currency Data.
currencySupplementalOverride( currency, pattern, cldr )
// Replace "¤" (\u00A4) with the appropriate symbol literal.
.split( ";" ).map(function( pattern ) {
return pattern.split( "\u00A4" ).map(function( part, i ) {
var currencyMatch = regexp[ currencySpacing[ i ].currencyMatch ],
surroundingMatch = regexp[ currencySpacing[ i ].surroundingMatch ],
insertBetween = "";
// For currencyMatch and surroundingMatch definitions, read [1].
// When i === 0, beforeCurrency is being handled. Otherwise, afterCurrency.
// 1: http://www.unicode.org/reports/tr35/tr35-numbers.html#Currencies
currencyMatch = currencyMatch.test( symbol.charAt( i ? symbol.length - 1 : 0 ) );
surroundingMatch = surroundingMatch.test(
part.charAt( i ? 0 : part.length - 1 ).replace( /[#@,.]/g, "0" )
);
if ( currencyMatch && part && surroundingMatch ) {
insertBetween = currencySpacing[ i ].insertBetween;
}
return ( i ? insertBetween : "" ) + part + ( i ? "" : insertBetween );
}).join( "'" + symbol + "'" );
}).join( ";" );
return {
pattern: pattern
};
};
/**
* objectOmit( object, keys )
*
* Return a copy of the object, filtered to omit the blacklisted key or array of keys.
*/
var objectOmit = function( object, keys ) {
var key,
copy = {};
keys = alwaysArray( keys );
for ( key in object ) {
if ( keys.indexOf( key ) === -1 ) {
copy[ key ] = object[ key ];
}
}
return copy;
};
function validateRequiredCldr( path, value ) {
validateCldr( path, value, {
skip: [ /supplemental\/currencyData\/fractions\/[A-Za-z]{3}$/ ]
});
}
/**
* .currencyFormatter( currency [, options] )
*
* @currency [String] 3-letter currency code as defined by ISO 4217.
*
* @options [Object]:
* - style: [String] "symbol" (default), "accounting", "code" or "name".
* - see also number/format options.
*
* Return a function that formats a currency according to the given options and default/instance
* locale.
*/
Globalize.currencyFormatter =
Globalize.prototype.currencyFormatter = function( currency, options ) {
var cldr, numberFormatter, plural, properties, style;
validateParameterPresence( currency, "currency" );
validateParameterTypeCurrency( currency, "currency" );
validateParameterTypePlainObject( options, "options" );
options = options || {};
style = options.style || "symbol";
cldr = this.cldr;
validateDefaultLocale( cldr );
// Get properties given style ("symbol" default, "code" or "name").
cldr.on( "get", validateRequiredCldr );
properties = ({
accounting: currencySymbolProperties,
code: currencyCodeProperties,
name: currencyNameProperties,
symbol: currencySymbolProperties
}[ style ] )( currency, cldr, options );
cldr.off( "get", validateRequiredCldr );
// options = options minus style, plus raw pattern.
options = objectOmit( options, "style" );
options.raw = properties.pattern;
// Return formatter when style is "symbol" or "accounting".
if ( style === "symbol" || style === "accounting" ) {
return this.numberFormatter( options );
}
// Return formatter when style is "code" or "name".
validatePluralModulePresence();
numberFormatter = this.numberFormatter( options );
plural = this.pluralGenerator();
return function( value ) {
validateParameterPresence( value, "value" );
validateParameterTypeNumber( value, "value" );
return currencyNameFormat( numberFormatter( value ), plural( value ), properties );
};
};
/**
* .currencyParser( currency [, options] )
*
* @currency [String] 3-letter currency code as defined by ISO 4217.
*
* @options [Object] see currencyFormatter.
*
* Return the currency parser according to the given options and the default/instance locale.
*/
Globalize.currencyParser =
Globalize.prototype.currencyParser = function( /* currency, options */ ) {
// TODO implement parser.
};
/**
* .formatCurrency( value, currency [, options] )
*
* @value [Number] number to be formatted.
*
* @currency [String] 3-letter currency code as defined by ISO 4217.
*
* @options [Object] see currencyFormatter.
*
* Format a currency according to the given options and the default/instance locale.
*/
Globalize.formatCurrency =
Globalize.prototype.formatCurrency = function( value, currency, options ) {
validateParameterPresence( value, "value" );
validateParameterTypeNumber( value, "value" );
return this.currencyFormatter( currency, options )( value );
};
/**
* .parseCurrency( value, currency [, options] )
*
* @value [String]
*
* @currency [String] 3-letter currency code as defined by ISO 4217.
*
* @options [Object]: See currencyFormatter.
*
* Return the parsed currency or NaN when value is invalid.
*/
Globalize.parseCurrency =
Globalize.prototype.parseCurrency = function( /* value, currency, options */ ) {
};
return Globalize;
}));