summaryrefslogtreecommitdiffstats
path: root/web/static/js/react-intl-2.0.0-beta-2/react-intl.js
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2016-03-14 08:50:46 -0400
committerChristopher Speller <crspeller@gmail.com>2016-03-16 18:02:55 -0400
commit12896bd23eeba79884245c1c29fdc568cf21a7fa (patch)
tree4e7f83d3e2564b9b89d669e9f7905ff11768b11a /web/static/js/react-intl-2.0.0-beta-2/react-intl.js
parent29fe6a3d13c9c7aa490fffebbe5d1b5fdf1e3090 (diff)
downloadchat-12896bd23eeba79884245c1c29fdc568cf21a7fa.tar.gz
chat-12896bd23eeba79884245c1c29fdc568cf21a7fa.tar.bz2
chat-12896bd23eeba79884245c1c29fdc568cf21a7fa.zip
Converting to Webpack. Stage 1.
Diffstat (limited to 'web/static/js/react-intl-2.0.0-beta-2/react-intl.js')
-rw-r--r--web/static/js/react-intl-2.0.0-beta-2/react-intl.js3842
1 files changed, 0 insertions, 3842 deletions
diff --git a/web/static/js/react-intl-2.0.0-beta-2/react-intl.js b/web/static/js/react-intl-2.0.0-beta-2/react-intl.js
deleted file mode 100644
index 1f6d611fe..000000000
--- a/web/static/js/react-intl-2.0.0-beta-2/react-intl.js
+++ /dev/null
@@ -1,3842 +0,0 @@
-/*
- * Copyright 2015, Yahoo Inc.
- * Copyrights licensed under the New BSD License.
- * See the accompanying LICENSE file for terms.
- */
-
-(function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('react')) :
- typeof define === 'function' && define.amd ? define(['exports', 'react'], factory) :
- factory((global.ReactIntl = {}),global.React);
-}(this, function (exports,React) { 'use strict';
-
- var React__default = 'default' in React ? React['default'] : React;
-
- var babelHelpers = {};
-
- babelHelpers.typeof = function (obj) {
- return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
- };
-
- babelHelpers.classCallCheck = function (instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- };
-
- babelHelpers.createClass = (function () {
- function defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
- }
-
- return function (Constructor, protoProps, staticProps) {
- if (protoProps) defineProperties(Constructor.prototype, protoProps);
- if (staticProps) defineProperties(Constructor, staticProps);
- return Constructor;
- };
- })();
-
- babelHelpers.defineProperty = function (obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
-
- return obj;
- };
-
- babelHelpers.extends = Object.assign || function (target) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
-
- for (var key in source) {
- if (Object.prototype.hasOwnProperty.call(source, key)) {
- target[key] = source[key];
- }
- }
- }
-
- return target;
- };
-
- babelHelpers.inherits = function (subClass, superClass) {
- if (typeof superClass !== "function" && superClass !== null) {
- throw new TypeError("Super expression must either be null or a function, not " + typeof superClass);
- }
-
- subClass.prototype = Object.create(superClass && superClass.prototype, {
- constructor: {
- value: subClass,
- enumerable: false,
- writable: true,
- configurable: true
- }
- });
- if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
- };
-
- babelHelpers.possibleConstructorReturn = function (self, call) {
- if (!self) {
- throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
- }
-
- return call && (typeof call === "object" || typeof call === "function") ? call : self;
- };
-
- babelHelpers.toConsumableArray = function (arr) {
- if (Array.isArray(arr)) {
- for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
-
- return arr2;
- } else {
- return Array.from(arr);
- }
- };
-
- babelHelpers;
- // GENERATED FILE
- var defaultLocaleData = { "locale": "en", "pluralRuleFunction": function pluralRuleFunction(n, ord) {
- var s = String(n).split("."),
- v0 = !s[1],
- t0 = Number(s[0]) == n,
- n10 = t0 && s[0].slice(-1),
- n100 = t0 && s[0].slice(-2);if (ord) return n10 == 1 && n100 != 11 ? "one" : n10 == 2 && n100 != 12 ? "two" : n10 == 3 && n100 != 13 ? "few" : "other";return n == 1 && v0 ? "one" : "other";
- }, "fields": { "year": { "displayName": "Year", "relative": { "0": "this year", "1": "next year", "-1": "last year" }, "relativeTime": { "future": { "one": "in {0} year", "other": "in {0} years" }, "past": { "one": "{0} year ago", "other": "{0} years ago" } } }, "month": { "displayName": "Month", "relative": { "0": "this month", "1": "next month", "-1": "last month" }, "relativeTime": { "future": { "one": "in {0} month", "other": "in {0} months" }, "past": { "one": "{0} month ago", "other": "{0} months ago" } } }, "day": { "displayName": "Day", "relative": { "0": "today", "1": "tomorrow", "-1": "yesterday" }, "relativeTime": { "future": { "one": "in {0} day", "other": "in {0} days" }, "past": { "one": "{0} day ago", "other": "{0} days ago" } } }, "hour": { "displayName": "Hour", "relativeTime": { "future": { "one": "in {0} hour", "other": "in {0} hours" }, "past": { "one": "{0} hour ago", "other": "{0} hours ago" } } }, "minute": { "displayName": "Minute", "relativeTime": { "future": { "one": "in {0} minute", "other": "in {0} minutes" }, "past": { "one": "{0} minute ago", "other": "{0} minutes ago" } } }, "second": { "displayName": "Second", "relative": { "0": "now" }, "relativeTime": { "future": { "one": "in {0} second", "other": "in {0} seconds" }, "past": { "one": "{0} second ago", "other": "{0} seconds ago" } } } } };
-
- // GENERATED FILE
- var defaultLocale$1 = { "locale": "en", "pluralRuleFunction": function pluralRuleFunction(n, ord) {
- var s = String(n).split("."),
- v0 = !s[1],
- t0 = Number(s[0]) == n,
- n10 = t0 && s[0].slice(-1),
- n100 = t0 && s[0].slice(-2);if (ord) return n10 == 1 && n100 != 11 ? "one" : n10 == 2 && n100 != 12 ? "two" : n10 == 3 && n100 != 13 ? "few" : "other";return n == 1 && v0 ? "one" : "other";
- } };
-
- /*
- Copyright (c) 2014, Yahoo! Inc. All rights reserved.
- Copyrights licensed under the New BSD License.
- See the accompanying LICENSE file for terms.
- */
-
- /* jslint esnext: true */
-
- var hop$1 = Object.prototype.hasOwnProperty;
-
- function extend(obj) {
- var sources = Array.prototype.slice.call(arguments, 1),
- i,
- len,
- source,
- key;
-
- for (i = 0, len = sources.length; i < len; i += 1) {
- source = sources[i];
- if (!source) {
- continue;
- }
-
- for (key in source) {
- if (hop$1.call(source, key)) {
- obj[key] = source[key];
- }
- }
- }
-
- return obj;
- }
-
- // Purposely using the same implementation as the Intl.js `Intl` polyfill.
- // Copyright 2013 Andy Earnshaw, MIT License
-
- var realDefineProp$1 = (function () {
- try {
- return !!Object.defineProperty({}, 'a', {});
- } catch (e) {
- return false;
- }
- })();
-
- var es3$1 = !realDefineProp$1 && !Object.prototype.__defineGetter__;
-
- var defineProperty$1 = realDefineProp$1 ? Object.defineProperty : function (obj, name, desc) {
-
- if ('get' in desc && obj.__defineGetter__) {
- obj.__defineGetter__(name, desc.get);
- } else if (!hop$1.call(obj, name) || 'value' in desc) {
- obj[name] = desc.value;
- }
- };
-
- var objCreate$1 = Object.create || function (proto, props) {
- var obj, k;
-
- function F() {}
- F.prototype = proto;
- obj = new F();
-
- for (k in props) {
- if (hop$1.call(props, k)) {
- defineProperty$1(obj, k, props[k]);
- }
- }
-
- return obj;
- };
-
- var parser = (function () {
- /*
- * Generated by PEG.js 0.8.0.
- *
- * http://pegjs.majda.cz/
- */
-
- function peg$subclass(child, parent) {
- function ctor() {
- this.constructor = child;
- }
- ctor.prototype = parent.prototype;
- child.prototype = new ctor();
- }
-
- function SyntaxError(message, expected, found, offset, line, column) {
- this.message = message;
- this.expected = expected;
- this.found = found;
- this.offset = offset;
- this.line = line;
- this.column = column;
-
- this.name = "SyntaxError";
- }
-
- peg$subclass(SyntaxError, Error);
-
- function parse(input) {
- var options = arguments.length > 1 ? arguments[1] : {},
- peg$FAILED = {},
- peg$startRuleFunctions = { start: peg$parsestart },
- peg$startRuleFunction = peg$parsestart,
- peg$c0 = [],
- peg$c1 = function peg$c1(elements) {
- return {
- type: 'messageFormatPattern',
- elements: elements
- };
- },
- peg$c2 = peg$FAILED,
- peg$c3 = function peg$c3(text) {
- var string = '',
- i,
- j,
- outerLen,
- inner,
- innerLen;
-
- for (i = 0, outerLen = text.length; i < outerLen; i += 1) {
- inner = text[i];
-
- for (j = 0, innerLen = inner.length; j < innerLen; j += 1) {
- string += inner[j];
- }
- }
-
- return string;
- },
- peg$c4 = function peg$c4(messageText) {
- return {
- type: 'messageTextElement',
- value: messageText
- };
- },
- peg$c5 = /^[^ \t\n\r,.+={}#]/,
- peg$c6 = { type: "class", value: "[^ \\t\\n\\r,.+={}#]", description: "[^ \\t\\n\\r,.+={}#]" },
- peg$c7 = "{",
- peg$c8 = { type: "literal", value: "{", description: "\"{\"" },
- peg$c9 = null,
- peg$c10 = ",",
- peg$c11 = { type: "literal", value: ",", description: "\",\"" },
- peg$c12 = "}",
- peg$c13 = { type: "literal", value: "}", description: "\"}\"" },
- peg$c14 = function peg$c14(id, format) {
- return {
- type: 'argumentElement',
- id: id,
- format: format && format[2]
- };
- },
- peg$c15 = "number",
- peg$c16 = { type: "literal", value: "number", description: "\"number\"" },
- peg$c17 = "date",
- peg$c18 = { type: "literal", value: "date", description: "\"date\"" },
- peg$c19 = "time",
- peg$c20 = { type: "literal", value: "time", description: "\"time\"" },
- peg$c21 = function peg$c21(type, style) {
- return {
- type: type + 'Format',
- style: style && style[2]
- };
- },
- peg$c22 = "plural",
- peg$c23 = { type: "literal", value: "plural", description: "\"plural\"" },
- peg$c24 = function peg$c24(pluralStyle) {
- return {
- type: pluralStyle.type,
- ordinal: false,
- offset: pluralStyle.offset || 0,
- options: pluralStyle.options
- };
- },
- peg$c25 = "selectordinal",
- peg$c26 = { type: "literal", value: "selectordinal", description: "\"selectordinal\"" },
- peg$c27 = function peg$c27(pluralStyle) {
- return {
- type: pluralStyle.type,
- ordinal: true,
- offset: pluralStyle.offset || 0,
- options: pluralStyle.options
- };
- },
- peg$c28 = "select",
- peg$c29 = { type: "literal", value: "select", description: "\"select\"" },
- peg$c30 = function peg$c30(options) {
- return {
- type: 'selectFormat',
- options: options
- };
- },
- peg$c31 = "=",
- peg$c32 = { type: "literal", value: "=", description: "\"=\"" },
- peg$c33 = function peg$c33(selector, pattern) {
- return {
- type: 'optionalFormatPattern',
- selector: selector,
- value: pattern
- };
- },
- peg$c34 = "offset:",
- peg$c35 = { type: "literal", value: "offset:", description: "\"offset:\"" },
- peg$c36 = function peg$c36(number) {
- return number;
- },
- peg$c37 = function peg$c37(offset, options) {
- return {
- type: 'pluralFormat',
- offset: offset,
- options: options
- };
- },
- peg$c38 = { type: "other", description: "whitespace" },
- peg$c39 = /^[ \t\n\r]/,
- peg$c40 = { type: "class", value: "[ \\t\\n\\r]", description: "[ \\t\\n\\r]" },
- peg$c41 = { type: "other", description: "optionalWhitespace" },
- peg$c42 = /^[0-9]/,
- peg$c43 = { type: "class", value: "[0-9]", description: "[0-9]" },
- peg$c44 = /^[0-9a-f]/i,
- peg$c45 = { type: "class", value: "[0-9a-f]i", description: "[0-9a-f]i" },
- peg$c46 = "0",
- peg$c47 = { type: "literal", value: "0", description: "\"0\"" },
- peg$c48 = /^[1-9]/,
- peg$c49 = { type: "class", value: "[1-9]", description: "[1-9]" },
- peg$c50 = function peg$c50(digits) {
- return parseInt(digits, 10);
- },
- peg$c51 = /^[^{}\\\0-\x1F \t\n\r]/,
- peg$c52 = { type: "class", value: "[^{}\\\\\\0-\\x1F \\t\\n\\r]", description: "[^{}\\\\\\0-\\x1F \\t\\n\\r]" },
- peg$c53 = "\\\\",
- peg$c54 = { type: "literal", value: "\\\\", description: "\"\\\\\\\\\"" },
- peg$c55 = function peg$c55() {
- return '\\';
- },
- peg$c56 = "\\#",
- peg$c57 = { type: "literal", value: "\\#", description: "\"\\\\#\"" },
- peg$c58 = function peg$c58() {
- return '\\#';
- },
- peg$c59 = "\\{",
- peg$c60 = { type: "literal", value: "\\{", description: "\"\\\\{\"" },
- peg$c61 = function peg$c61() {
- return '{';
- },
- peg$c62 = "\\}",
- peg$c63 = { type: "literal", value: "\\}", description: "\"\\\\}\"" },
- peg$c64 = function peg$c64() {
- return '}';
- },
- peg$c65 = '\\u',
- peg$c66 = { type: "literal", value: '\\u', description: '"\\\\u"' },
- peg$c67 = function peg$c67(digits) {
- return String.fromCharCode(parseInt(digits, 16));
- },
- peg$c68 = function peg$c68(chars) {
- return chars.join('');
- },
- peg$currPos = 0,
- peg$reportedPos = 0,
- peg$cachedPos = 0,
- peg$cachedPosDetails = { line: 1, column: 1, seenCR: false },
- peg$maxFailPos = 0,
- peg$maxFailExpected = [],
- peg$silentFails = 0,
- peg$result;
-
- if ("startRule" in options) {
- if (!(options.startRule in peg$startRuleFunctions)) {
- throw new Error("Can't start parsing from rule \"" + options.startRule + "\".");
- }
-
- peg$startRuleFunction = peg$startRuleFunctions[options.startRule];
- }
-
- function text() {
- return input.substring(peg$reportedPos, peg$currPos);
- }
-
- function offset() {
- return peg$reportedPos;
- }
-
- function line() {
- return peg$computePosDetails(peg$reportedPos).line;
- }
-
- function column() {
- return peg$computePosDetails(peg$reportedPos).column;
- }
-
- function expected(description) {
- throw peg$buildException(null, [{ type: "other", description: description }], peg$reportedPos);
- }
-
- function error(message) {
- throw peg$buildException(message, null, peg$reportedPos);
- }
-
- function peg$computePosDetails(pos) {
- function advance(details, startPos, endPos) {
- var p, ch;
-
- for (p = startPos; p < endPos; p++) {
- ch = input.charAt(p);
- if (ch === "\n") {
- if (!details.seenCR) {
- details.line++;
- }
- details.column = 1;
- details.seenCR = false;
- } else if (ch === "\r" || ch === '\u2028' || ch === '\u2029') {
- details.line++;
- details.column = 1;
- details.seenCR = true;
- } else {
- details.column++;
- details.seenCR = false;
- }
- }
- }
-
- if (peg$cachedPos !== pos) {
- if (peg$cachedPos > pos) {
- peg$cachedPos = 0;
- peg$cachedPosDetails = { line: 1, column: 1, seenCR: false };
- }
- advance(peg$cachedPosDetails, peg$cachedPos, pos);
- peg$cachedPos = pos;
- }
-
- return peg$cachedPosDetails;
- }
-
- function peg$fail(expected) {
- if (peg$currPos < peg$maxFailPos) {
- return;
- }
-
- if (peg$currPos > peg$maxFailPos) {
- peg$maxFailPos = peg$currPos;
- peg$maxFailExpected = [];
- }
-
- peg$maxFailExpected.push(expected);
- }
-
- function peg$buildException(message, expected, pos) {
- function cleanupExpected(expected) {
- var i = 1;
-
- expected.sort(function (a, b) {
- if (a.description < b.description) {
- return -1;
- } else if (a.description > b.description) {
- return 1;
- } else {
- return 0;
- }
- });
-
- while (i < expected.length) {
- if (expected[i - 1] === expected[i]) {
- expected.splice(i, 1);
- } else {
- i++;
- }
- }
- }
-
- function buildMessage(expected, found) {
- function stringEscape(s) {
- function hex(ch) {
- return ch.charCodeAt(0).toString(16).toUpperCase();
- }
-
- return s.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\x08/g, '\\b').replace(/\t/g, '\\t').replace(/\n/g, '\\n').replace(/\f/g, '\\f').replace(/\r/g, '\\r').replace(/[\x00-\x07\x0B\x0E\x0F]/g, function (ch) {
- return '\\x0' + hex(ch);
- }).replace(/[\x10-\x1F\x80-\xFF]/g, function (ch) {
- return '\\x' + hex(ch);
- }).replace(/[\u0180-\u0FFF]/g, function (ch) {
- return '\\u0' + hex(ch);
- }).replace(/[\u1080-\uFFFF]/g, function (ch) {
- return '\\u' + hex(ch);
- });
- }
-
- var expectedDescs = new Array(expected.length),
- expectedDesc,
- foundDesc,
- i;
-
- for (i = 0; i < expected.length; i++) {
- expectedDescs[i] = expected[i].description;
- }
-
- expectedDesc = expected.length > 1 ? expectedDescs.slice(0, -1).join(", ") + " or " + expectedDescs[expected.length - 1] : expectedDescs[0];
-
- foundDesc = found ? "\"" + stringEscape(found) + "\"" : "end of input";
-
- return "Expected " + expectedDesc + " but " + foundDesc + " found.";
- }
-
- var posDetails = peg$computePosDetails(pos),
- found = pos < input.length ? input.charAt(pos) : null;
-
- if (expected !== null) {
- cleanupExpected(expected);
- }
-
- return new SyntaxError(message !== null ? message : buildMessage(expected, found), expected, found, pos, posDetails.line, posDetails.column);
- }
-
- function peg$parsestart() {
- var s0;
-
- s0 = peg$parsemessageFormatPattern();
-
- return s0;
- }
-
- function peg$parsemessageFormatPattern() {
- var s0, s1, s2;
-
- s0 = peg$currPos;
- s1 = [];
- s2 = peg$parsemessageFormatElement();
- while (s2 !== peg$FAILED) {
- s1.push(s2);
- s2 = peg$parsemessageFormatElement();
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c1(s1);
- }
- s0 = s1;
-
- return s0;
- }
-
- function peg$parsemessageFormatElement() {
- var s0;
-
- s0 = peg$parsemessageTextElement();
- if (s0 === peg$FAILED) {
- s0 = peg$parseargumentElement();
- }
-
- return s0;
- }
-
- function peg$parsemessageText() {
- var s0, s1, s2, s3, s4, s5;
-
- s0 = peg$currPos;
- s1 = [];
- s2 = peg$currPos;
- s3 = peg$parse_();
- if (s3 !== peg$FAILED) {
- s4 = peg$parsechars();
- if (s4 !== peg$FAILED) {
- s5 = peg$parse_();
- if (s5 !== peg$FAILED) {
- s3 = [s3, s4, s5];
- s2 = s3;
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- if (s2 !== peg$FAILED) {
- while (s2 !== peg$FAILED) {
- s1.push(s2);
- s2 = peg$currPos;
- s3 = peg$parse_();
- if (s3 !== peg$FAILED) {
- s4 = peg$parsechars();
- if (s4 !== peg$FAILED) {
- s5 = peg$parse_();
- if (s5 !== peg$FAILED) {
- s3 = [s3, s4, s5];
- s2 = s3;
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- }
- } else {
- s1 = peg$c2;
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c3(s1);
- }
- s0 = s1;
- if (s0 === peg$FAILED) {
- s0 = peg$currPos;
- s1 = peg$parsews();
- if (s1 !== peg$FAILED) {
- s1 = input.substring(s0, peg$currPos);
- }
- s0 = s1;
- }
-
- return s0;
- }
-
- function peg$parsemessageTextElement() {
- var s0, s1;
-
- s0 = peg$currPos;
- s1 = peg$parsemessageText();
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c4(s1);
- }
- s0 = s1;
-
- return s0;
- }
-
- function peg$parseargument() {
- var s0, s1, s2;
-
- s0 = peg$parsenumber();
- if (s0 === peg$FAILED) {
- s0 = peg$currPos;
- s1 = [];
- if (peg$c5.test(input.charAt(peg$currPos))) {
- s2 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s2 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c6);
- }
- }
- if (s2 !== peg$FAILED) {
- while (s2 !== peg$FAILED) {
- s1.push(s2);
- if (peg$c5.test(input.charAt(peg$currPos))) {
- s2 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s2 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c6);
- }
- }
- }
- } else {
- s1 = peg$c2;
- }
- if (s1 !== peg$FAILED) {
- s1 = input.substring(s0, peg$currPos);
- }
- s0 = s1;
- }
-
- return s0;
- }
-
- function peg$parseargumentElement() {
- var s0, s1, s2, s3, s4, s5, s6, s7, s8;
-
- s0 = peg$currPos;
- if (input.charCodeAt(peg$currPos) === 123) {
- s1 = peg$c7;
- peg$currPos++;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c8);
- }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parse_();
- if (s2 !== peg$FAILED) {
- s3 = peg$parseargument();
- if (s3 !== peg$FAILED) {
- s4 = peg$parse_();
- if (s4 !== peg$FAILED) {
- s5 = peg$currPos;
- if (input.charCodeAt(peg$currPos) === 44) {
- s6 = peg$c10;
- peg$currPos++;
- } else {
- s6 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c11);
- }
- }
- if (s6 !== peg$FAILED) {
- s7 = peg$parse_();
- if (s7 !== peg$FAILED) {
- s8 = peg$parseelementFormat();
- if (s8 !== peg$FAILED) {
- s6 = [s6, s7, s8];
- s5 = s6;
- } else {
- peg$currPos = s5;
- s5 = peg$c2;
- }
- } else {
- peg$currPos = s5;
- s5 = peg$c2;
- }
- } else {
- peg$currPos = s5;
- s5 = peg$c2;
- }
- if (s5 === peg$FAILED) {
- s5 = peg$c9;
- }
- if (s5 !== peg$FAILED) {
- s6 = peg$parse_();
- if (s6 !== peg$FAILED) {
- if (input.charCodeAt(peg$currPos) === 125) {
- s7 = peg$c12;
- peg$currPos++;
- } else {
- s7 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c13);
- }
- }
- if (s7 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c14(s3, s5);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parseelementFormat() {
- var s0;
-
- s0 = peg$parsesimpleFormat();
- if (s0 === peg$FAILED) {
- s0 = peg$parsepluralFormat();
- if (s0 === peg$FAILED) {
- s0 = peg$parseselectOrdinalFormat();
- if (s0 === peg$FAILED) {
- s0 = peg$parseselectFormat();
- }
- }
- }
-
- return s0;
- }
-
- function peg$parsesimpleFormat() {
- var s0, s1, s2, s3, s4, s5, s6;
-
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c15) {
- s1 = peg$c15;
- peg$currPos += 6;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c16);
- }
- }
- if (s1 === peg$FAILED) {
- if (input.substr(peg$currPos, 4) === peg$c17) {
- s1 = peg$c17;
- peg$currPos += 4;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c18);
- }
- }
- if (s1 === peg$FAILED) {
- if (input.substr(peg$currPos, 4) === peg$c19) {
- s1 = peg$c19;
- peg$currPos += 4;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c20);
- }
- }
- }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parse_();
- if (s2 !== peg$FAILED) {
- s3 = peg$currPos;
- if (input.charCodeAt(peg$currPos) === 44) {
- s4 = peg$c10;
- peg$currPos++;
- } else {
- s4 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c11);
- }
- }
- if (s4 !== peg$FAILED) {
- s5 = peg$parse_();
- if (s5 !== peg$FAILED) {
- s6 = peg$parsechars();
- if (s6 !== peg$FAILED) {
- s4 = [s4, s5, s6];
- s3 = s4;
- } else {
- peg$currPos = s3;
- s3 = peg$c2;
- }
- } else {
- peg$currPos = s3;
- s3 = peg$c2;
- }
- } else {
- peg$currPos = s3;
- s3 = peg$c2;
- }
- if (s3 === peg$FAILED) {
- s3 = peg$c9;
- }
- if (s3 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c21(s1, s3);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parsepluralFormat() {
- var s0, s1, s2, s3, s4, s5;
-
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c22) {
- s1 = peg$c22;
- peg$currPos += 6;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c23);
- }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parse_();
- if (s2 !== peg$FAILED) {
- if (input.charCodeAt(peg$currPos) === 44) {
- s3 = peg$c10;
- peg$currPos++;
- } else {
- s3 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c11);
- }
- }
- if (s3 !== peg$FAILED) {
- s4 = peg$parse_();
- if (s4 !== peg$FAILED) {
- s5 = peg$parsepluralStyle();
- if (s5 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c24(s5);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parseselectOrdinalFormat() {
- var s0, s1, s2, s3, s4, s5;
-
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 13) === peg$c25) {
- s1 = peg$c25;
- peg$currPos += 13;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c26);
- }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parse_();
- if (s2 !== peg$FAILED) {
- if (input.charCodeAt(peg$currPos) === 44) {
- s3 = peg$c10;
- peg$currPos++;
- } else {
- s3 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c11);
- }
- }
- if (s3 !== peg$FAILED) {
- s4 = peg$parse_();
- if (s4 !== peg$FAILED) {
- s5 = peg$parsepluralStyle();
- if (s5 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c27(s5);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parseselectFormat() {
- var s0, s1, s2, s3, s4, s5, s6;
-
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 6) === peg$c28) {
- s1 = peg$c28;
- peg$currPos += 6;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c29);
- }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parse_();
- if (s2 !== peg$FAILED) {
- if (input.charCodeAt(peg$currPos) === 44) {
- s3 = peg$c10;
- peg$currPos++;
- } else {
- s3 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c11);
- }
- }
- if (s3 !== peg$FAILED) {
- s4 = peg$parse_();
- if (s4 !== peg$FAILED) {
- s5 = [];
- s6 = peg$parseoptionalFormatPattern();
- if (s6 !== peg$FAILED) {
- while (s6 !== peg$FAILED) {
- s5.push(s6);
- s6 = peg$parseoptionalFormatPattern();
- }
- } else {
- s5 = peg$c2;
- }
- if (s5 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c30(s5);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parseselector() {
- var s0, s1, s2, s3;
-
- s0 = peg$currPos;
- s1 = peg$currPos;
- if (input.charCodeAt(peg$currPos) === 61) {
- s2 = peg$c31;
- peg$currPos++;
- } else {
- s2 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c32);
- }
- }
- if (s2 !== peg$FAILED) {
- s3 = peg$parsenumber();
- if (s3 !== peg$FAILED) {
- s2 = [s2, s3];
- s1 = s2;
- } else {
- peg$currPos = s1;
- s1 = peg$c2;
- }
- } else {
- peg$currPos = s1;
- s1 = peg$c2;
- }
- if (s1 !== peg$FAILED) {
- s1 = input.substring(s0, peg$currPos);
- }
- s0 = s1;
- if (s0 === peg$FAILED) {
- s0 = peg$parsechars();
- }
-
- return s0;
- }
-
- function peg$parseoptionalFormatPattern() {
- var s0, s1, s2, s3, s4, s5, s6, s7, s8;
-
- s0 = peg$currPos;
- s1 = peg$parse_();
- if (s1 !== peg$FAILED) {
- s2 = peg$parseselector();
- if (s2 !== peg$FAILED) {
- s3 = peg$parse_();
- if (s3 !== peg$FAILED) {
- if (input.charCodeAt(peg$currPos) === 123) {
- s4 = peg$c7;
- peg$currPos++;
- } else {
- s4 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c8);
- }
- }
- if (s4 !== peg$FAILED) {
- s5 = peg$parse_();
- if (s5 !== peg$FAILED) {
- s6 = peg$parsemessageFormatPattern();
- if (s6 !== peg$FAILED) {
- s7 = peg$parse_();
- if (s7 !== peg$FAILED) {
- if (input.charCodeAt(peg$currPos) === 125) {
- s8 = peg$c12;
- peg$currPos++;
- } else {
- s8 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c13);
- }
- }
- if (s8 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c33(s2, s6);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parseoffset() {
- var s0, s1, s2, s3;
-
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 7) === peg$c34) {
- s1 = peg$c34;
- peg$currPos += 7;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c35);
- }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parse_();
- if (s2 !== peg$FAILED) {
- s3 = peg$parsenumber();
- if (s3 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c36(s3);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parsepluralStyle() {
- var s0, s1, s2, s3, s4;
-
- s0 = peg$currPos;
- s1 = peg$parseoffset();
- if (s1 === peg$FAILED) {
- s1 = peg$c9;
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$parse_();
- if (s2 !== peg$FAILED) {
- s3 = [];
- s4 = peg$parseoptionalFormatPattern();
- if (s4 !== peg$FAILED) {
- while (s4 !== peg$FAILED) {
- s3.push(s4);
- s4 = peg$parseoptionalFormatPattern();
- }
- } else {
- s3 = peg$c2;
- }
- if (s3 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c37(s1, s3);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
-
- return s0;
- }
-
- function peg$parsews() {
- var s0, s1;
-
- peg$silentFails++;
- s0 = [];
- if (peg$c39.test(input.charAt(peg$currPos))) {
- s1 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c40);
- }
- }
- if (s1 !== peg$FAILED) {
- while (s1 !== peg$FAILED) {
- s0.push(s1);
- if (peg$c39.test(input.charAt(peg$currPos))) {
- s1 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c40);
- }
- }
- }
- } else {
- s0 = peg$c2;
- }
- peg$silentFails--;
- if (s0 === peg$FAILED) {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c38);
- }
- }
-
- return s0;
- }
-
- function peg$parse_() {
- var s0, s1, s2;
-
- peg$silentFails++;
- s0 = peg$currPos;
- s1 = [];
- s2 = peg$parsews();
- while (s2 !== peg$FAILED) {
- s1.push(s2);
- s2 = peg$parsews();
- }
- if (s1 !== peg$FAILED) {
- s1 = input.substring(s0, peg$currPos);
- }
- s0 = s1;
- peg$silentFails--;
- if (s0 === peg$FAILED) {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c41);
- }
- }
-
- return s0;
- }
-
- function peg$parsedigit() {
- var s0;
-
- if (peg$c42.test(input.charAt(peg$currPos))) {
- s0 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s0 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c43);
- }
- }
-
- return s0;
- }
-
- function peg$parsehexDigit() {
- var s0;
-
- if (peg$c44.test(input.charAt(peg$currPos))) {
- s0 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s0 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c45);
- }
- }
-
- return s0;
- }
-
- function peg$parsenumber() {
- var s0, s1, s2, s3, s4, s5;
-
- s0 = peg$currPos;
- if (input.charCodeAt(peg$currPos) === 48) {
- s1 = peg$c46;
- peg$currPos++;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c47);
- }
- }
- if (s1 === peg$FAILED) {
- s1 = peg$currPos;
- s2 = peg$currPos;
- if (peg$c48.test(input.charAt(peg$currPos))) {
- s3 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s3 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c49);
- }
- }
- if (s3 !== peg$FAILED) {
- s4 = [];
- s5 = peg$parsedigit();
- while (s5 !== peg$FAILED) {
- s4.push(s5);
- s5 = peg$parsedigit();
- }
- if (s4 !== peg$FAILED) {
- s3 = [s3, s4];
- s2 = s3;
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- } else {
- peg$currPos = s2;
- s2 = peg$c2;
- }
- if (s2 !== peg$FAILED) {
- s2 = input.substring(s1, peg$currPos);
- }
- s1 = s2;
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c50(s1);
- }
- s0 = s1;
-
- return s0;
- }
-
- function peg$parsechar() {
- var s0, s1, s2, s3, s4, s5, s6, s7;
-
- if (peg$c51.test(input.charAt(peg$currPos))) {
- s0 = input.charAt(peg$currPos);
- peg$currPos++;
- } else {
- s0 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c52);
- }
- }
- if (s0 === peg$FAILED) {
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 2) === peg$c53) {
- s1 = peg$c53;
- peg$currPos += 2;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c54);
- }
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c55();
- }
- s0 = s1;
- if (s0 === peg$FAILED) {
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 2) === peg$c56) {
- s1 = peg$c56;
- peg$currPos += 2;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c57);
- }
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c58();
- }
- s0 = s1;
- if (s0 === peg$FAILED) {
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 2) === peg$c59) {
- s1 = peg$c59;
- peg$currPos += 2;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c60);
- }
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c61();
- }
- s0 = s1;
- if (s0 === peg$FAILED) {
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 2) === peg$c62) {
- s1 = peg$c62;
- peg$currPos += 2;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c63);
- }
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c64();
- }
- s0 = s1;
- if (s0 === peg$FAILED) {
- s0 = peg$currPos;
- if (input.substr(peg$currPos, 2) === peg$c65) {
- s1 = peg$c65;
- peg$currPos += 2;
- } else {
- s1 = peg$FAILED;
- if (peg$silentFails === 0) {
- peg$fail(peg$c66);
- }
- }
- if (s1 !== peg$FAILED) {
- s2 = peg$currPos;
- s3 = peg$currPos;
- s4 = peg$parsehexDigit();
- if (s4 !== peg$FAILED) {
- s5 = peg$parsehexDigit();
- if (s5 !== peg$FAILED) {
- s6 = peg$parsehexDigit();
- if (s6 !== peg$FAILED) {
- s7 = peg$parsehexDigit();
- if (s7 !== peg$FAILED) {
- s4 = [s4, s5, s6, s7];
- s3 = s4;
- } else {
- peg$currPos = s3;
- s3 = peg$c2;
- }
- } else {
- peg$currPos = s3;
- s3 = peg$c2;
- }
- } else {
- peg$currPos = s3;
- s3 = peg$c2;
- }
- } else {
- peg$currPos = s3;
- s3 = peg$c2;
- }
- if (s3 !== peg$FAILED) {
- s3 = input.substring(s2, peg$currPos);
- }
- s2 = s3;
- if (s2 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c67(s2);
- s0 = s1;
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- } else {
- peg$currPos = s0;
- s0 = peg$c2;
- }
- }
- }
- }
- }
- }
-
- return s0;
- }
-
- function peg$parsechars() {
- var s0, s1, s2;
-
- s0 = peg$currPos;
- s1 = [];
- s2 = peg$parsechar();
- if (s2 !== peg$FAILED) {
- while (s2 !== peg$FAILED) {
- s1.push(s2);
- s2 = peg$parsechar();
- }
- } else {
- s1 = peg$c2;
- }
- if (s1 !== peg$FAILED) {
- peg$reportedPos = s0;
- s1 = peg$c68(s1);
- }
- s0 = s1;
-
- return s0;
- }
-
- peg$result = peg$startRuleFunction();
-
- if (peg$result !== peg$FAILED && peg$currPos === input.length) {
- return peg$result;
- } else {
- if (peg$result !== peg$FAILED && peg$currPos < input.length) {
- peg$fail({ type: "end", description: "end of input" });
- }
-
- throw peg$buildException(null, peg$maxFailExpected, peg$maxFailPos);
- }
- }
-
- return {
- SyntaxError: SyntaxError,
- parse: parse
- };
- })();
-
- function Compiler(locales, formats, pluralFn) {
- this.locales = locales;
- this.formats = formats;
- this.pluralFn = pluralFn;
- }
-
- Compiler.prototype.compile = function (ast) {
- this.pluralStack = [];
- this.currentPlural = null;
- this.pluralNumberFormat = null;
-
- return this.compileMessage(ast);
- };
-
- Compiler.prototype.compileMessage = function (ast) {
- if (!(ast && ast.type === 'messageFormatPattern')) {
- throw new Error('Message AST is not of type: "messageFormatPattern"');
- }
-
- var elements = ast.elements,
- pattern = [];
-
- var i, len, element;
-
- for (i = 0, len = elements.length; i < len; i += 1) {
- element = elements[i];
-
- switch (element.type) {
- case 'messageTextElement':
- pattern.push(this.compileMessageText(element));
- break;
-
- case 'argumentElement':
- pattern.push(this.compileArgument(element));
- break;
-
- default:
- throw new Error('Message element does not have a valid type');
- }
- }
-
- return pattern;
- };
-
- Compiler.prototype.compileMessageText = function (element) {
- // When this `element` is part of plural sub-pattern and its value contains
- // an unescaped '#', use a `PluralOffsetString` helper to properly output
- // the number with the correct offset in the string.
- if (this.currentPlural && /(^|[^\\])#/g.test(element.value)) {
- // Create a cache a NumberFormat instance that can be reused for any
- // PluralOffsetString instance in this message.
- if (!this.pluralNumberFormat) {
- this.pluralNumberFormat = new Intl.NumberFormat(this.locales);
- }
-
- return new PluralOffsetString(this.currentPlural.id, this.currentPlural.format.offset, this.pluralNumberFormat, element.value);
- }
-
- // Unescape the escaped '#'s in the message text.
- return element.value.replace(/\\#/g, '#');
- };
-
- Compiler.prototype.compileArgument = function (element) {
- var format = element.format;
-
- if (!format) {
- return new StringFormat(element.id);
- }
-
- var formats = this.formats,
- locales = this.locales,
- pluralFn = this.pluralFn,
- options;
-
- switch (format.type) {
- case 'numberFormat':
- options = formats.number[format.style];
- return {
- id: element.id,
- format: new Intl.NumberFormat(locales, options).format
- };
-
- case 'dateFormat':
- options = formats.date[format.style];
- return {
- id: element.id,
- format: new Intl.DateTimeFormat(locales, options).format
- };
-
- case 'timeFormat':
- options = formats.time[format.style];
- return {
- id: element.id,
- format: new Intl.DateTimeFormat(locales, options).format
- };
-
- case 'pluralFormat':
- options = this.compileOptions(element);
- return new PluralFormat(element.id, format.ordinal, format.offset, options, pluralFn);
-
- case 'selectFormat':
- options = this.compileOptions(element);
- return new SelectFormat(element.id, options);
-
- default:
- throw new Error('Message element does not have a valid format type');
- }
- };
-
- Compiler.prototype.compileOptions = function (element) {
- var format = element.format,
- options = format.options,
- optionsHash = {};
-
- // Save the current plural element, if any, then set it to a new value when
- // compiling the options sub-patterns. This conforms the spec's algorithm
- // for handling `"#"` syntax in message text.
- this.pluralStack.push(this.currentPlural);
- this.currentPlural = format.type === 'pluralFormat' ? element : null;
-
- var i, len, option;
-
- for (i = 0, len = options.length; i < len; i += 1) {
- option = options[i];
-
- // Compile the sub-pattern and save it under the options's selector.
- optionsHash[option.selector] = this.compileMessage(option.value);
- }
-
- // Pop the plural stack to put back the original current plural value.
- this.currentPlural = this.pluralStack.pop();
-
- return optionsHash;
- };
-
- // -- Compiler Helper Classes --------------------------------------------------
-
- function StringFormat(id) {
- this.id = id;
- }
-
- StringFormat.prototype.format = function (value) {
- if (!value) {
- return '';
- }
-
- return typeof value === 'string' ? value : String(value);
- };
-
- function PluralFormat(id, useOrdinal, offset, options, pluralFn) {
- this.id = id;
- this.useOrdinal = useOrdinal;
- this.offset = offset;
- this.options = options;
- this.pluralFn = pluralFn;
- }
-
- PluralFormat.prototype.getOption = function (value) {
- var options = this.options;
-
- var option = options['=' + value] || options[this.pluralFn(value - this.offset, this.useOrdinal)];
-
- return option || options.other;
- };
-
- function PluralOffsetString(id, offset, numberFormat, string) {
- this.id = id;
- this.offset = offset;
- this.numberFormat = numberFormat;
- this.string = string;
- }
-
- PluralOffsetString.prototype.format = function (value) {
- var number = this.numberFormat.format(value - this.offset);
-
- return this.string.replace(/(^|[^\\])#/g, '$1' + number).replace(/\\#/g, '#');
- };
-
- function SelectFormat(id, options) {
- this.id = id;
- this.options = options;
- }
-
- SelectFormat.prototype.getOption = function (value) {
- var options = this.options;
- return options[value] || options.other;
- };
-
- // -- MessageFormat --------------------------------------------------------
-
- function MessageFormat(message, locales, formats) {
- // Parse string messages into an AST.
- var ast = typeof message === 'string' ? MessageFormat.__parse(message) : message;
-
- if (!(ast && ast.type === 'messageFormatPattern')) {
- throw new TypeError('A message must be provided as a String or AST.');
- }
-
- // Creates a new object with the specified `formats` merged with the default
- // formats.
- formats = this._mergeFormats(MessageFormat.formats, formats);
-
- // Defined first because it's used to build the format pattern.
- defineProperty$1(this, '_locale', { value: this._resolveLocale(locales) });
-
- // Compile the `ast` to a pattern that is highly optimized for repeated
- // `format()` invocations. **Note:** This passes the `locales` set provided
- // to the constructor instead of just the resolved locale.
- var pluralFn = this._findPluralRuleFunction(this._locale);
- var pattern = this._compilePattern(ast, locales, formats, pluralFn);
-
- // "Bind" `format()` method to `this` so it can be passed by reference like
- // the other `Intl` APIs.
- var messageFormat = this;
- this.format = function (values) {
- return messageFormat._format(pattern, values);
- };
- }
-
- // Default format options used as the prototype of the `formats` provided to the
- // constructor. These are used when constructing the internal Intl.NumberFormat
- // and Intl.DateTimeFormat instances.
- defineProperty$1(MessageFormat, 'formats', {
- enumerable: true,
-
- value: {
- number: {
- 'currency': {
- style: 'currency'
- },
-
- 'percent': {
- style: 'percent'
- }
- },
-
- date: {
- 'short': {
- month: 'numeric',
- day: 'numeric',
- year: '2-digit'
- },
-
- 'medium': {
- month: 'short',
- day: 'numeric',
- year: 'numeric'
- },
-
- 'long': {
- month: 'long',
- day: 'numeric',
- year: 'numeric'
- },
-
- 'full': {
- weekday: 'long',
- month: 'long',
- day: 'numeric',
- year: 'numeric'
- }
- },
-
- time: {
- 'short': {
- hour: 'numeric',
- minute: 'numeric'
- },
-
- 'medium': {
- hour: 'numeric',
- minute: 'numeric',
- second: 'numeric'
- },
-
- 'long': {
- hour: 'numeric',
- minute: 'numeric',
- second: 'numeric',
- timeZoneName: 'short'
- },
-
- 'full': {
- hour: 'numeric',
- minute: 'numeric',
- second: 'numeric',
- timeZoneName: 'short'
- }
- }
- }
- });
-
- // Define internal private properties for dealing with locale data.
- defineProperty$1(MessageFormat, '__localeData__', { value: objCreate$1(null) });
- defineProperty$1(MessageFormat, '__addLocaleData', { value: function value(data) {
- if (!(data && data.locale)) {
- throw new Error('Locale data provided to IntlMessageFormat is missing a ' + '`locale` property');
- }
-
- MessageFormat.__localeData__[data.locale.toLowerCase()] = data;
- } });
-
- // Defines `__parse()` static method as an exposed private.
- defineProperty$1(MessageFormat, '__parse', { value: parser.parse });
-
- // Define public `defaultLocale` property which defaults to English, but can be
- // set by the developer.
- defineProperty$1(MessageFormat, 'defaultLocale', {
- enumerable: true,
- writable: true,
- value: undefined
- });
-
- MessageFormat.prototype.resolvedOptions = function () {
- // TODO: Provide anything else?
- return {
- locale: this._locale
- };
- };
-
- MessageFormat.prototype._compilePattern = function (ast, locales, formats, pluralFn) {
- var compiler = new Compiler(locales, formats, pluralFn);
- return compiler.compile(ast);
- };
-
- MessageFormat.prototype._findPluralRuleFunction = function (locale) {
- var localeData = MessageFormat.__localeData__;
- var data = localeData[locale.toLowerCase()];
-
- // The locale data is de-duplicated, so we have to traverse the locale's
- // hierarchy until we find a `pluralRuleFunction` to return.
- while (data) {
- if (data.pluralRuleFunction) {
- return data.pluralRuleFunction;
- }
-
- data = data.parentLocale && localeData[data.parentLocale.toLowerCase()];
- }
-
- throw new Error('Locale data added to IntlMessageFormat is missing a ' + '`pluralRuleFunction` for :' + locale);
- };
-
- MessageFormat.prototype._format = function (pattern, values) {
- var result = '',
- i,
- len,
- part,
- id,
- value;
-
- for (i = 0, len = pattern.length; i < len; i += 1) {
- part = pattern[i];
-
- // Exist early for string parts.
- if (typeof part === 'string') {
- result += part;
- continue;
- }
-
- id = part.id;
-
- // Enforce that all required values are provided by the caller.
- if (!(values && hop$1.call(values, id))) {
- throw new Error('A value must be provided for: ' + id);
- }
-
- value = values[id];
-
- // Recursively format plural and select parts' option — which can be a
- // nested pattern structure. The choosing of the option to use is
- // abstracted-by and delegated-to the part helper object.
- if (part.options) {
- result += this._format(part.getOption(value), values);
- } else {
- result += part.format(value);
- }
- }
-
- return result;
- };
-
- MessageFormat.prototype._mergeFormats = function (defaults, formats) {
- var mergedFormats = {},
- type,
- mergedType;
-
- for (type in defaults) {
- if (!hop$1.call(defaults, type)) {
- continue;
- }
-
- mergedFormats[type] = mergedType = objCreate$1(defaults[type]);
-
- if (formats && hop$1.call(formats, type)) {
- extend(mergedType, formats[type]);
- }
- }
-
- return mergedFormats;
- };
-
- MessageFormat.prototype._resolveLocale = function (locales) {
- if (typeof locales === 'string') {
- locales = [locales];
- }
-
- // Create a copy of the array so we can push on the default locale.
- locales = (locales || []).concat(MessageFormat.defaultLocale);
-
- var localeData = MessageFormat.__localeData__;
- var i, len, localeParts, data;
-
- // Using the set of locales + the default locale, we look for the first one
- // which that has been registered. When data does not exist for a locale, we
- // traverse its ancestors to find something that's been registered within
- // its hierarchy of locales. Since we lack the proper `parentLocale` data
- // here, we must take a naive approach to traversal.
- for (i = 0, len = locales.length; i < len; i += 1) {
- localeParts = locales[i].toLowerCase().split('-');
-
- while (localeParts.length) {
- data = localeData[localeParts.join('-')];
- if (data) {
- // Return the normalized locale string; e.g., we return "en-US",
- // instead of "en-us".
- return data.locale;
- }
-
- localeParts.pop();
- }
- }
-
- var defaultLocale = locales.pop();
- throw new Error('No locale data has been added to IntlMessageFormat for: ' + locales.join(', ') + ', or the default locale: ' + defaultLocale);
- };
-
- MessageFormat.__addLocaleData(defaultLocale$1);
- MessageFormat.defaultLocale = 'en';
-
- // GENERATED FILE
- var defaultLocale = { "locale": "en", "pluralRuleFunction": function pluralRuleFunction(n, ord) {
- var s = String(n).split("."),
- v0 = !s[1],
- t0 = Number(s[0]) == n,
- n10 = t0 && s[0].slice(-1),
- n100 = t0 && s[0].slice(-2);if (ord) return n10 == 1 && n100 != 11 ? "one" : n10 == 2 && n100 != 12 ? "two" : n10 == 3 && n100 != 13 ? "few" : "other";return n == 1 && v0 ? "one" : "other";
- }, "fields": { "year": { "displayName": "Year", "relative": { "0": "this year", "1": "next year", "-1": "last year" }, "relativeTime": { "future": { "one": "in {0} year", "other": "in {0} years" }, "past": { "one": "{0} year ago", "other": "{0} years ago" } } }, "month": { "displayName": "Month", "relative": { "0": "this month", "1": "next month", "-1": "last month" }, "relativeTime": { "future": { "one": "in {0} month", "other": "in {0} months" }, "past": { "one": "{0} month ago", "other": "{0} months ago" } } }, "day": { "displayName": "Day", "relative": { "0": "today", "1": "tomorrow", "-1": "yesterday" }, "relativeTime": { "future": { "one": "in {0} day", "other": "in {0} days" }, "past": { "one": "{0} day ago", "other": "{0} days ago" } } }, "hour": { "displayName": "Hour", "relativeTime": { "future": { "one": "in {0} hour", "other": "in {0} hours" }, "past": { "one": "{0} hour ago", "other": "{0} hours ago" } } }, "minute": { "displayName": "Minute", "relativeTime": { "future": { "one": "in {0} minute", "other": "in {0} minutes" }, "past": { "one": "{0} minute ago", "other": "{0} minutes ago" } } }, "second": { "displayName": "Second", "relative": { "0": "now" }, "relativeTime": { "future": { "one": "in {0} second", "other": "in {0} seconds" }, "past": { "one": "{0} second ago", "other": "{0} seconds ago" } } } } };
-
- // Purposely using the same implementation as the Intl.js `Intl` polyfill.
- // Copyright 2013 Andy Earnshaw, MIT License
-
- var hop$2 = Object.prototype.hasOwnProperty;
- var toString = Object.prototype.toString;
-
- var realDefineProp$2 = (function () {
- try {
- return !!Object.defineProperty({}, 'a', {});
- } catch (e) {
- return false;
- }
- })();
-
- var es3$2 = !realDefineProp$2 && !Object.prototype.__defineGetter__;
-
- var defineProperty$2 = realDefineProp$2 ? Object.defineProperty : function (obj, name, desc) {
-
- if ('get' in desc && obj.__defineGetter__) {
- obj.__defineGetter__(name, desc.get);
- } else if (!hop$2.call(obj, name) || 'value' in desc) {
- obj[name] = desc.value;
- }
- };
-
- var objCreate$2 = Object.create || function (proto, props) {
- var obj, k;
-
- function F() {}
- F.prototype = proto;
- obj = new F();
-
- for (k in props) {
- if (hop$2.call(props, k)) {
- defineProperty$2(obj, k, props[k]);
- }
- }
-
- return obj;
- };
-
- var arrIndexOf = Array.prototype.indexOf || function (search, fromIndex) {
- /*jshint validthis:true */
- var arr = this;
- if (!arr.length) {
- return -1;
- }
-
- for (var i = fromIndex || 0, max = arr.length; i < max; i++) {
- if (arr[i] === search) {
- return i;
- }
- }
-
- return -1;
- };
-
- var isArray = Array.isArray || function (obj) {
- return toString.call(obj) === '[object Array]';
- };
-
- var dateNow = Date.now || function () {
- return new Date().getTime();
- };
-
- /*
- Copyright (c) 2014, Yahoo! Inc. All rights reserved.
- Copyrights licensed under the New BSD License.
- See the accompanying LICENSE file for terms.
- */
-
- /* jslint esnext: true */
-
- var round = Math.round;
-
- function daysToYears(days) {
- // 400 years have 146097 days (taking into account leap year rules)
- return days * 400 / 146097;
- }
-
- function diff (from, to) {
- // Convert to ms timestamps.
- from = +from;
- to = +to;
-
- var millisecond = round(to - from),
- second = round(millisecond / 1000),
- minute = round(second / 60),
- hour = round(minute / 60),
- day = round(hour / 24),
- week = round(day / 7);
-
- var rawYears = daysToYears(day),
- month = round(rawYears * 12),
- year = round(rawYears);
-
- return {
- millisecond: millisecond,
- second: second,
- minute: minute,
- hour: hour,
- day: day,
- week: week,
- month: month,
- year: year
- };
- }
-
- // -----------------------------------------------------------------------------
-
- var FIELDS = ['second', 'minute', 'hour', 'day', 'month', 'year'];
- var STYLES = ['best fit', 'numeric'];
-
- // -- RelativeFormat -----------------------------------------------------------
-
- function RelativeFormat(locales, options) {
- options = options || {};
-
- // Make a copy of `locales` if it's an array, so that it doesn't change
- // since it's used lazily.
- if (isArray(locales)) {
- locales = locales.concat();
- }
-
- defineProperty$2(this, '_locale', { value: this._resolveLocale(locales) });
- defineProperty$2(this, '_options', { value: {
- style: this._resolveStyle(options.style),
- units: this._isValidUnits(options.units) && options.units
- } });
-
- defineProperty$2(this, '_locales', { value: locales });
- defineProperty$2(this, '_fields', { value: this._findFields(this._locale) });
- defineProperty$2(this, '_messages', { value: objCreate$2(null) });
-
- // "Bind" `format()` method to `this` so it can be passed by reference like
- // the other `Intl` APIs.
- var relativeFormat = this;
- this.format = function format(date, options) {
- return relativeFormat._format(date, options);
- };
- }
-
- // Define internal private properties for dealing with locale data.
- defineProperty$2(RelativeFormat, '__localeData__', { value: objCreate$2(null) });
- defineProperty$2(RelativeFormat, '__addLocaleData', { value: function value(data) {
- if (!(data && data.locale)) {
- throw new Error('Locale data provided to IntlRelativeFormat is missing a ' + '`locale` property value');
- }
-
- RelativeFormat.__localeData__[data.locale.toLowerCase()] = data;
-
- // Add data to IntlMessageFormat.
- MessageFormat.__addLocaleData(data);
- } });
-
- // Define public `defaultLocale` property which can be set by the developer, or
- // it will be set when the first RelativeFormat instance is created by
- // leveraging the resolved locale from `Intl`.
- defineProperty$2(RelativeFormat, 'defaultLocale', {
- enumerable: true,
- writable: true,
- value: undefined
- });
-
- // Define public `thresholds` property which can be set by the developer, and
- // defaults to relative time thresholds from moment.js.
- defineProperty$2(RelativeFormat, 'thresholds', {
- enumerable: true,
-
- value: {
- second: 45, // seconds to minute
- minute: 45, // minutes to hour
- hour: 22, // hours to day
- day: 26, // days to month
- month: 11 // months to year
- }
- });
-
- RelativeFormat.prototype.resolvedOptions = function () {
- return {
- locale: this._locale,
- style: this._options.style,
- units: this._options.units
- };
- };
-
- RelativeFormat.prototype._compileMessage = function (units) {
- // `this._locales` is the original set of locales the user specified to the
- // constructor, while `this._locale` is the resolved root locale.
- var locales = this._locales;
- var resolvedLocale = this._locale;
-
- var field = this._fields[units];
- var relativeTime = field.relativeTime;
- var future = '';
- var past = '';
- var i;
-
- for (i in relativeTime.future) {
- if (relativeTime.future.hasOwnProperty(i)) {
- future += ' ' + i + ' {' + relativeTime.future[i].replace('{0}', '#') + '}';
- }
- }
-
- for (i in relativeTime.past) {
- if (relativeTime.past.hasOwnProperty(i)) {
- past += ' ' + i + ' {' + relativeTime.past[i].replace('{0}', '#') + '}';
- }
- }
-
- var message = '{when, select, future {{0, plural, ' + future + '}}' + 'past {{0, plural, ' + past + '}}}';
-
- // Create the synthetic IntlMessageFormat instance using the original
- // locales value specified by the user when constructing the the parent
- // IntlRelativeFormat instance.
- return new MessageFormat(message, locales);
- };
-
- RelativeFormat.prototype._getMessage = function (units) {
- var messages = this._messages;
-
- // Create a new synthetic message based on the locale data from CLDR.
- if (!messages[units]) {
- messages[units] = this._compileMessage(units);
- }
-
- return messages[units];
- };
-
- RelativeFormat.prototype._getRelativeUnits = function (diff, units) {
- var field = this._fields[units];
-
- if (field.relative) {
- return field.relative[diff];
- }
- };
-
- RelativeFormat.prototype._findFields = function (locale) {
- var localeData = RelativeFormat.__localeData__;
- var data = localeData[locale.toLowerCase()];
-
- // The locale data is de-duplicated, so we have to traverse the locale's
- // hierarchy until we find `fields` to return.
- while (data) {
- if (data.fields) {
- return data.fields;
- }
-
- data = data.parentLocale && localeData[data.parentLocale.toLowerCase()];
- }
-
- throw new Error('Locale data added to IntlRelativeFormat is missing `fields` for :' + locale);
- };
-
- RelativeFormat.prototype._format = function (date, options) {
- var now = options && options.now !== undefined ? options.now : dateNow();
-
- if (date === undefined) {
- date = now;
- }
-
- // Determine if the `date` and optional `now` values are valid, and throw a
- // similar error to what `Intl.DateTimeFormat#format()` would throw.
- if (!isFinite(now)) {
- throw new RangeError('The `now` option provided to IntlRelativeFormat#format() is not ' + 'in valid range.');
- }
-
- if (!isFinite(date)) {
- throw new RangeError('The date value provided to IntlRelativeFormat#format() is not ' + 'in valid range.');
- }
-
- var diffReport = diff(now, date);
- var units = this._options.units || this._selectUnits(diffReport);
- var diffInUnits = diffReport[units];
-
- if (this._options.style !== 'numeric') {
- var relativeUnits = this._getRelativeUnits(diffInUnits, units);
- if (relativeUnits) {
- return relativeUnits;
- }
- }
-
- return this._getMessage(units).format({
- '0': Math.abs(diffInUnits),
- when: diffInUnits < 0 ? 'past' : 'future'
- });
- };
-
- RelativeFormat.prototype._isValidUnits = function (units) {
- if (!units || arrIndexOf.call(FIELDS, units) >= 0) {
- return true;
- }
-
- if (typeof units === 'string') {
- var suggestion = /s$/.test(units) && units.substr(0, units.length - 1);
- if (suggestion && arrIndexOf.call(FIELDS, suggestion) >= 0) {
- throw new Error('"' + units + '" is not a valid IntlRelativeFormat `units` ' + 'value, did you mean: ' + suggestion);
- }
- }
-
- throw new Error('"' + units + '" is not a valid IntlRelativeFormat `units` value, it ' + 'must be one of: "' + FIELDS.join('", "') + '"');
- };
-
- RelativeFormat.prototype._resolveLocale = function (locales) {
- if (typeof locales === 'string') {
- locales = [locales];
- }
-
- // Create a copy of the array so we can push on the default locale.
- locales = (locales || []).concat(RelativeFormat.defaultLocale);
-
- var localeData = RelativeFormat.__localeData__;
- var i, len, localeParts, data;
-
- // Using the set of locales + the default locale, we look for the first one
- // which that has been registered. When data does not exist for a locale, we
- // traverse its ancestors to find something that's been registered within
- // its hierarchy of locales. Since we lack the proper `parentLocale` data
- // here, we must take a naive approach to traversal.
- for (i = 0, len = locales.length; i < len; i += 1) {
- localeParts = locales[i].toLowerCase().split('-');
-
- while (localeParts.length) {
- data = localeData[localeParts.join('-')];
- if (data) {
- // Return the normalized locale string; e.g., we return "en-US",
- // instead of "en-us".
- return data.locale;
- }
-
- localeParts.pop();
- }
- }
-
- var defaultLocale = locales.pop();
- throw new Error('No locale data has been added to IntlRelativeFormat for: ' + locales.join(', ') + ', or the default locale: ' + defaultLocale);
- };
-
- RelativeFormat.prototype._resolveStyle = function (style) {
- // Default to "best fit" style.
- if (!style) {
- return STYLES[0];
- }
-
- if (arrIndexOf.call(STYLES, style) >= 0) {
- return style;
- }
-
- throw new Error('"' + style + '" is not a valid IntlRelativeFormat `style` value, it ' + 'must be one of: "' + STYLES.join('", "') + '"');
- };
-
- RelativeFormat.prototype._selectUnits = function (diffReport) {
- var i, l, units;
-
- for (i = 0, l = FIELDS.length; i < l; i += 1) {
- units = FIELDS[i];
-
- if (Math.abs(diffReport[units]) < RelativeFormat.thresholds[units]) {
- break;
- }
- }
-
- return units;
- };
-
- RelativeFormat.__addLocaleData(defaultLocale);
- RelativeFormat.defaultLocale = 'en';
-
- function addLocaleData() {
- var data = arguments.length <= 0 || arguments[0] === undefined ? [] : arguments[0];
-
- var locales = Array.isArray(data) ? data : [data];
-
- locales.forEach(function (localeData) {
- MessageFormat.__addLocaleData(localeData);
- RelativeFormat.__addLocaleData(localeData);
- });
- }
-
- function hasLocaleData(locale) {
- var normalizedLocale = locale && locale.toLowerCase();
-
- return !!(MessageFormat.__localeData__[normalizedLocale] && RelativeFormat.__localeData__[normalizedLocale]);
- }
-
- var bool = React.PropTypes.bool;
- var number = React.PropTypes.number;
- var string = React.PropTypes.string;
- var func = React.PropTypes.func;
- var object = React.PropTypes.object;
- var oneOf = React.PropTypes.oneOf;
- var shape = React.PropTypes.shape;
-
- var intlConfigPropTypes = {
- locale: string,
- formats: object,
- messages: object,
-
- defaultLocale: string,
- defaultFormats: object
- };
-
- var intlFormatPropTypes = {
- formatDate: func.isRequired,
- formatTime: func.isRequired,
- formatRelative: func.isRequired,
- formatNumber: func.isRequired,
- formatPlural: func.isRequired,
- formatMessage: func.isRequired,
- formatHTMLMessage: func.isRequired
- };
-
- var intlShape = shape(babelHelpers.extends({}, intlConfigPropTypes, intlFormatPropTypes, {
- now: func.isRequired
- }));
-
- var messageDescriptorPropTypes = {
- id: string.isRequired,
- description: string,
- defaultMessage: string
- };
-
- var dateTimeFormatPropTypes = {
- localeMatcher: oneOf(['best fit', 'lookup']),
- formatMatcher: oneOf(['basic', 'best fit']),
-
- timeZone: string,
- hour12: bool,
-
- weekday: oneOf(['narrow', 'short', 'long']),
- era: oneOf(['narrow', 'short', 'long']),
- year: oneOf(['numeric', '2-digit']),
- month: oneOf(['numeric', '2-digit', 'narrow', 'short', 'long']),
- day: oneOf(['numeric', '2-digit']),
- hour: oneOf(['numeric', '2-digit']),
- minute: oneOf(['numeric', '2-digit']),
- second: oneOf(['numeric', '2-digit']),
- timeZoneName: oneOf(['short', 'long'])
- };
-
- var numberFormatPropTypes = {
- localeMatcher: oneOf(['best fit', 'lookup']),
-
- style: oneOf(['decimal', 'currency', 'percent']),
- currency: string,
- currencyDisplay: oneOf(['symbol', 'code', 'name']),
- useGrouping: bool,
-
- minimumIntegerDigits: number,
- minimumFractionDigits: number,
- maximumFractionDigits: number,
- minimumSignificantDigits: number,
- maximumSignificantDigits: number
- };
-
- var relativeFormatPropTypes = {
- style: oneOf(['best fit', 'numeric']),
- units: oneOf(['second', 'minute', 'hour', 'day', 'month', 'year'])
- };
-
- var pluralFormatPropTypes = {
- style: oneOf(['cardinal', 'ordinal'])
- };
-
- var invariant = (function (module) {
- var exports = module.exports;
- /**
- * Copyright 2013-2015, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
- 'use strict'
-
- /**
- * Use invariant() to assert state which your program assumes to be true.
- *
- * Provide sprintf-style format (only %s is supported) and arguments
- * to provide information about what broke and what you were
- * expecting.
- *
- * The invariant message will be stripped in production, but the invariant
- * will remain to ensure logic does not differ in production.
- */
-
- ;
- var __DEV__ = "development" !== 'production';
-
- var invariant = function invariant(condition, format, a, b, c, d, e, f) {
- if (__DEV__) {
- if (format === undefined) {
- throw new Error('invariant requires an error message argument');
- }
- }
-
- if (!condition) {
- var error;
- if (format === undefined) {
- error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.');
- } else {
- var args = [a, b, c, d, e, f];
- var argIndex = 0;
- error = new Error(format.replace(/%s/g, function () {
- return args[argIndex++];
- }));
- error.name = 'Invariant Violation';
- }
-
- error.framesToPop = 1; // we don't care about invariant's own frame
- throw error;
- }
- };
-
- module.exports = invariant;
- return module.exports;
- })({exports:{}});
-
- var ESCAPED_CHARS = {
- '&': '&amp;',
- '>': '&gt;',
- '<': '&lt;',
- '"': '&quot;',
- '\'': '&#x27;'
- };
-
- var UNSAFE_CHARS_REGEX = /[&><"']/g;
-
- function escape(str) {
- return ('' + str).replace(UNSAFE_CHARS_REGEX, function (match) {
- return ESCAPED_CHARS[match];
- });
- }
-
- function invariantIntlContext() {
- var _ref = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
-
- var intl = _ref.intl;
-
- invariant(intl, '[React Intl] Could not find required `intl` object. ' + '<IntlProvider> needs to exist in the component ancestry.');
- }
-
- function shallowEquals(objA, objB) {
- if (objA === objB) {
- return true;
- }
-
- if ((typeof objA === 'undefined' ? 'undefined' : babelHelpers.typeof(objA)) !== 'object' || objA === null || (typeof objB === 'undefined' ? 'undefined' : babelHelpers.typeof(objB)) !== 'object' || objB === null) {
- return false;
- }
-
- var keysA = Object.keys(objA);
- var keysB = Object.keys(objB);
-
- if (keysA.length !== keysB.length) {
- return false;
- }
-
- // Test for A's keys different from B.
- var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
- for (var i = 0; i < keysA.length; i++) {
- if (!bHasOwnProperty(keysA[i]) || objA[keysA[i]] !== objB[keysA[i]]) {
- return false;
- }
- }
-
- return true;
- }
-
- function shouldIntlComponentUpdate(_ref2, nextProps, nextState) {
- var props = _ref2.props;
- var state = _ref2.state;
- var _ref2$context = _ref2.context;
- var context = _ref2$context === undefined ? {} : _ref2$context;
- var nextContext = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
- var _context$intl = context.intl;
- var intl = _context$intl === undefined ? {} : _context$intl;
- var _nextContext$intl = nextContext.intl;
- var nextIntl = _nextContext$intl === undefined ? {} : _nextContext$intl;
-
- return !shallowEquals(nextProps, props) || !shallowEquals(nextState, state) || !shallowEquals(nextIntl, intl);
- }
-
- function getDisplayName(Component) {
- return Component.displayName || Component.name || 'Component';
- }
-
- function injectIntl(WrappedComponent) {
- var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
- var _options$intlPropName = options.intlPropName;
- var intlPropName = _options$intlPropName === undefined ? 'intl' : _options$intlPropName;
- var _options$withRef = options.withRef;
- var withRef = _options$withRef === undefined ? false : _options$withRef;
-
- var InjectIntl = (function (_Component) {
- babelHelpers.inherits(InjectIntl, _Component);
-
- function InjectIntl(props, context) {
- babelHelpers.classCallCheck(this, InjectIntl);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(InjectIntl).call(this, props, context));
-
- invariantIntlContext(context);
- return _this;
- }
-
- babelHelpers.createClass(InjectIntl, [{
- key: 'getWrappedInstance',
- value: function getWrappedInstance() {
- invariant(withRef, '[React Intl] To access the wrapped instance, ' + 'the `{withRef: true}` option must be set when calling: ' + '`injectIntl()`');
-
- return this.refs.wrappedInstance;
- }
- }, {
- key: 'render',
- value: function render() {
- return React__default.createElement(WrappedComponent, babelHelpers.extends({}, this.props, babelHelpers.defineProperty({}, intlPropName, this.context.intl), {
- ref: withRef ? 'wrappedInstance' : null
- }));
- }
- }]);
- return InjectIntl;
- })(React.Component);
-
- InjectIntl.displayName = 'InjectIntl(' + getDisplayName(WrappedComponent) + ')';
-
- InjectIntl.contextTypes = {
- intl: intlShape
- };
-
- InjectIntl.WrappedComponent = WrappedComponent;
-
- return InjectIntl;
- }
-
- var DATE_TIME_FORMAT_OPTIONS = Object.keys(dateTimeFormatPropTypes);
- var NUMBER_FORMAT_OPTIONS = Object.keys(numberFormatPropTypes);
- var RELATIVE_FORMAT_OPTIONS = Object.keys(relativeFormatPropTypes);
- var PLURAL_FORMAT_OPTIONS = Object.keys(pluralFormatPropTypes);
-
- function filterFormatOptions(whitelist, obj) {
- var defaults = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
-
- return whitelist.reduce(function (opts, name) {
- if (obj.hasOwnProperty(name)) {
- opts[name] = obj[name];
- } else if (defaults.hasOwnProperty(name)) {
- opts[name] = defaults[name];
- }
-
- return opts;
- }, {});
- }
-
- function getNamedFormat(formats, type, name) {
- var format = formats && formats[type] && formats[type][name];
- if (format) {
- return format;
- }
-
- if ("development" !== 'production') {
- console.error('[React Intl] No ' + type + ' format named: ' + name);
- }
- }
-
- function formatDate(config, state, value) {
- var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
- var locale = config.locale;
- var formats = config.formats;
- var format = options.format;
-
- var date = new Date(value);
- var defaults = format && getNamedFormat(formats, 'date', format);
-
- var filteredOptions = filterFormatOptions(DATE_TIME_FORMAT_OPTIONS, options, defaults);
-
- return state.getDateTimeFormat(locale, filteredOptions).format(date);
- }
-
- function formatTime(config, state, value) {
- var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
- var locale = config.locale;
- var formats = config.formats;
- var format = options.format;
-
- var date = new Date(value);
- var defaults = format && getNamedFormat(formats, 'time', format);
-
- var filteredOptions = filterFormatOptions(DATE_TIME_FORMAT_OPTIONS, options, defaults);
-
- return state.getDateTimeFormat(locale, filteredOptions).format(date);
- }
-
- function formatRelative(config, state, value) {
- var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
- var locale = config.locale;
- var formats = config.formats;
- var format = options.format;
-
- var date = new Date(value);
- var now = new Date(options.now);
- var defaults = format && getNamedFormat(formats, 'relative', format);
-
- var filteredOptions = filterFormatOptions(RELATIVE_FORMAT_OPTIONS, options, defaults);
-
- return state.getRelativeFormat(locale, filteredOptions).format(date, {
- now: isFinite(now) ? now : state.now()
- });
- }
-
- function formatNumber(config, state, value) {
- var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
- var locale = config.locale;
- var formats = config.formats;
- var format = options.format;
-
- var defaults = format && getNamedFormat(formats, 'number', format);
-
- var filteredOptions = filterFormatOptions(NUMBER_FORMAT_OPTIONS, options, defaults);
-
- return state.getNumberFormat(locale, filteredOptions).format(value);
- }
-
- function formatPlural(config, state, value) {
- var options = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
- var locale = config.locale;
-
- var filteredOptions = filterFormatOptions(PLURAL_FORMAT_OPTIONS, options);
-
- return state.getPluralFormat(locale, filteredOptions).format(value);
- }
-
- function formatMessage(config, state) {
- var messageDescriptor = arguments.length <= 2 || arguments[2] === undefined ? {} : arguments[2];
- var values = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
- var locale = config.locale;
- var formats = config.formats;
- var messages = config.messages;
- var defaultLocale = config.defaultLocale;
- var defaultFormats = config.defaultFormats;
- var id = messageDescriptor.id;
- var defaultMessage = messageDescriptor.defaultMessage;
-
- // `id` is a required field of a Message Descriptor.
-
- invariant(id, '[React Intl] An `id` must be provided to format a message.');
-
- var message = messages && messages[id];
- var hasValues = Object.keys(values).length > 0;
-
- // Avoid expensive message formatting for simple messages without values. In
- // development messages will always be formatted in case of missing values.
- if (!hasValues && "development" === 'production') {
- return message || defaultMessage || id;
- }
-
- var formattedMessage = undefined;
-
- if (message) {
- try {
- var formatter = state.getMessageFormat(message, locale, formats);
-
- formattedMessage = formatter.format(values);
- } catch (e) {
- if ("development" !== 'production') {
- console.error('[React Intl] Error formatting message: "' + id + '" for locale: "' + locale + '"' + (defaultMessage ? ', using default message as fallback.' : '') + ('\n' + e));
- }
- }
- } else {
- if ("development" !== 'production') {
- console.error('[React Intl] Missing message: "' + id + '" for locale: "' + locale + '"' + (defaultMessage ? ', using default message as fallback.' : ''));
- }
- }
-
- if (!formattedMessage && defaultMessage) {
- try {
- var formatter = state.getMessageFormat(defaultMessage, defaultLocale, defaultFormats);
-
- formattedMessage = formatter.format(values);
- } catch (e) {
- if ("development" !== 'production') {
- console.error('[React Intl] Error formatting the default message for: "' + id + '"' + ('\n' + e));
- }
- }
- }
-
- if (!formattedMessage) {
- if ("development" !== 'production') {
- console.error('[React Intl] Cannot format message: "' + id + '", ' + ('using message ' + (message || defaultMessage ? 'source' : 'id') + ' as fallback.'));
- }
- }
-
- return formattedMessage || message || defaultMessage || id;
- }
-
- function formatHTMLMessage(config, state, messageDescriptor) {
- var rawValues = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
-
- // Process all the values before they are used when formatting the ICU
- // Message string. Since the formatted message might be injected via
- // `innerHTML`, all String-based values need to be HTML-escaped.
- var escapedValues = Object.keys(rawValues).reduce(function (escaped, name) {
- var value = rawValues[name];
- escaped[name] = typeof value === 'string' ? escape(value) : value;
- return escaped;
- }, {});
-
- return formatMessage(config, state, messageDescriptor, escapedValues);
- }
-
- var format = Object.freeze({
- formatDate: formatDate,
- formatTime: formatTime,
- formatRelative: formatRelative,
- formatNumber: formatNumber,
- formatPlural: formatPlural,
- formatMessage: formatMessage,
- formatHTMLMessage: formatHTMLMessage
- });
-
- /*
- Copyright (c) 2014, Yahoo! Inc. All rights reserved.
- Copyrights licensed under the New BSD License.
- See the accompanying LICENSE file for terms.
- */
-
- /* jslint esnext: true */
-
- // Function.prototype.bind implementation from Mozilla Developer Network:
- // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind#Polyfill
-
- var bind = Function.prototype.bind || function (oThis) {
- if (typeof this !== 'function') {
- // closest thing possible to the ECMAScript 5
- // internal IsCallable function
- throw new TypeError('Function.prototype.bind - what is trying to be bound is not callable');
- }
-
- var aArgs = Array.prototype.slice.call(arguments, 1),
- fToBind = this,
- fNOP = function fNOP() {},
- fBound = function fBound() {
- return fToBind.apply(this instanceof fNOP ? this : oThis, aArgs.concat(Array.prototype.slice.call(arguments)));
- };
-
- if (this.prototype) {
- // native functions don't have a prototype
- fNOP.prototype = this.prototype;
- }
- fBound.prototype = new fNOP();
-
- return fBound;
- };
-
- // Purposely using the same implementation as the Intl.js `Intl` polyfill.
- // Copyright 2013 Andy Earnshaw, MIT License
-
- var hop = Object.prototype.hasOwnProperty;
-
- var realDefineProp = (function () {
- try {
- return !!Object.defineProperty({}, 'a', {});
- } catch (e) {
- return false;
- }
- })();
-
- var es3 = !realDefineProp && !Object.prototype.__defineGetter__;
-
- var defineProperty = realDefineProp ? Object.defineProperty : function (obj, name, desc) {
-
- if ('get' in desc && obj.__defineGetter__) {
- obj.__defineGetter__(name, desc.get);
- } else if (!hop.call(obj, name) || 'value' in desc) {
- obj[name] = desc.value;
- }
- };
-
- var objCreate = Object.create || function (proto, props) {
- var obj, k;
-
- function F() {}
- F.prototype = proto;
- obj = new F();
-
- for (k in props) {
- if (hop.call(props, k)) {
- defineProperty(obj, k, props[k]);
- }
- }
-
- return obj;
- };
-
- function resolveLocale(locales) {
- // IntlMessageFormat#_resolveLocale() does not depend on `this`.
- return MessageFormat.prototype._resolveLocale(locales);
- }
-
- function findPluralFunction(locale) {
- // IntlMessageFormat#_findPluralFunction() does not depend on `this`.
- return MessageFormat.prototype._findPluralRuleFunction(locale);
- }
-
- var IntlPluralFormat = function IntlPluralFormat(locales) {
- var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
- babelHelpers.classCallCheck(this, IntlPluralFormat);
-
- var useOrdinal = options.style === 'ordinal';
- var pluralFn = findPluralFunction(resolveLocale(locales));
-
- this.format = function (value) {
- return pluralFn(value, useOrdinal);
- };
- };
-
- // -----------------------------------------------------------------------------
-
- function createFormatCache(FormatConstructor) {
- var cache = objCreate(null);
-
- return function () {
- var args = Array.prototype.slice.call(arguments);
- var cacheId = getCacheId(args);
- var format = cacheId && cache[cacheId];
-
- if (!format) {
- format = new (bind.apply(FormatConstructor, [null].concat(args)))();
-
- if (cacheId) {
- cache[cacheId] = format;
- }
- }
-
- return format;
- };
- }
-
- // -- Utilities ----------------------------------------------------------------
-
- function getCacheId(inputs) {
- // When JSON is not available in the runtime, we will not create a cache id.
- if (typeof JSON === 'undefined') {
- return;
- }
-
- var cacheId = [];
-
- var i, len, input;
-
- for (i = 0, len = inputs.length; i < len; i += 1) {
- input = inputs[i];
-
- if (input && (typeof input === 'undefined' ? 'undefined' : babelHelpers.typeof(input)) === 'object') {
- cacheId.push(orderedProps(input));
- } else {
- cacheId.push(input);
- }
- }
-
- return JSON.stringify(cacheId);
- }
-
- function orderedProps(obj) {
- var props = [],
- keys = [];
-
- var key, i, len, prop;
-
- for (key in obj) {
- if (obj.hasOwnProperty(key)) {
- keys.push(key);
- }
- }
-
- var orderedKeys = keys.sort();
-
- for (i = 0, len = orderedKeys.length; i < len; i += 1) {
- key = orderedKeys[i];
- prop = {};
-
- prop[key] = obj[key];
- props[i] = prop;
- }
-
- return props;
- }
-
- var intlConfigPropNames = Object.keys(intlConfigPropTypes);
- var intlFormatPropNames = Object.keys(intlFormatPropTypes);
-
- var IntlProvider = (function (_Component) {
- babelHelpers.inherits(IntlProvider, _Component);
-
- function IntlProvider(props, context) {
- babelHelpers.classCallCheck(this, IntlProvider);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(IntlProvider).call(this, props, context));
-
- invariant(Intl, '[React Intl] The `Intl` APIs must be available in the runtime, ' + 'and do not appear to be built-in. An `Intl` polyfill should be loaded.\n' + 'See: http://formatjs.io/guides/runtime-environments/');
-
- // Used to stabilize time when performing an initial rendering so that
- // all relative times use the same reference "now" time.
- var initialNow = undefined;
- if (isFinite(props.initialNow)) {
- initialNow = Number(props.initialNow);
- } else {
- // When an `initialNow` isn't provided via `props`, look to see an
- // <IntlProvider> exists in the ancestry and call its `now()`
- // function to propagate its value for "now".
- initialNow = context.intl ? context.intl.now() : Date.now();
- }
-
- _this.state = {
- // Creating `Intl*` formatters is expensive so these format caches
- // memoize the `Intl*` constructors and have the same lifecycle as
- // this IntlProvider instance.
- getDateTimeFormat: createFormatCache(Intl.DateTimeFormat),
- getNumberFormat: createFormatCache(Intl.NumberFormat),
- getMessageFormat: createFormatCache(MessageFormat),
- getRelativeFormat: createFormatCache(RelativeFormat),
- getPluralFormat: createFormatCache(IntlPluralFormat),
-
- // Wrapper to provide stable "now" time for initial render.
- now: function now() {
- return _this._didDisplay ? Date.now() : initialNow;
- }
- };
- return _this;
- }
-
- babelHelpers.createClass(IntlProvider, [{
- key: 'getConfig',
- value: function getConfig() {
- var _this2 = this;
-
- var _context$intl = this.context.intl;
- var intlContext = _context$intl === undefined ? {} : _context$intl;
-
- // Build a whitelisted config object from `props` and `context.intl`, if
- // an <IntlProvider> exists in the ancestry.
-
- var config = intlConfigPropNames.reduce(function (config, name) {
- config[name] = _this2.props[name] || intlContext[name];
- return config;
- }, {});
-
- if (!hasLocaleData(config.locale)) {
- var _config = config;
- var locale = _config.locale;
- var defaultLocale = _config.defaultLocale;
- var defaultFormats = _config.defaultFormats;
-
- if ("development" !== 'production') {
- console.error('[React Intl] Missing locale data for locale: "' + locale + '". ' + ('Using default locale: "' + defaultLocale + '" as fallback.'));
- }
-
- // Since there's no registered locale data for `locale`, this will
- // fallback to the `defaultLocale` to make sure things can render.
- // The `messages` are overridden to the `defaultProps` empty object
- // to maintain referential equality across re-renders. It's assumed
- // each <FormattedMessage> contains a `defaultMessage` prop.
- config = babelHelpers.extends({}, config, {
- locale: defaultLocale,
- formats: defaultFormats,
- messages: IntlProvider.defaultProps.messages
- });
- }
-
- return config;
- }
- }, {
- key: 'getBoundFormatFns',
- value: function getBoundFormatFns(config, state) {
- return intlFormatPropNames.reduce(function (boundFormatFns, name) {
- boundFormatFns[name] = format[name].bind(null, config, state);
- return boundFormatFns;
- }, {});
- }
- }, {
- key: 'getChildContext',
- value: function getChildContext() {
- var config = this.getConfig();
-
- // Bind intl factories and current config to the format functions.
- var boundFormatFns = this.getBoundFormatFns(config, this.state);
-
- return {
- intl: babelHelpers.extends({}, config, boundFormatFns, {
- now: this.state.now
- })
- };
- }
- }, {
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate() {
- for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {
- next[_key] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));
- }
- }, {
- key: 'componentDidMount',
- value: function componentDidMount() {
- this._didDisplay = true;
- }
- }, {
- key: 'render',
- value: function render() {
- return React.Children.only(this.props.children);
- }
- }]);
- return IntlProvider;
- })(React.Component);
-
- IntlProvider.displayName = 'IntlProvider';
-
- IntlProvider.contextTypes = {
- intl: intlShape
- };
-
- IntlProvider.childContextTypes = {
- intl: intlShape.isRequired
- };
-
- IntlProvider.propTypes = babelHelpers.extends({}, intlConfigPropTypes, {
- children: React.PropTypes.element.isRequired,
- initialNow: React.PropTypes.any
- });
-
- IntlProvider.defaultProps = {
- formats: {},
- messages: {},
-
- defaultLocale: 'en',
- defaultFormats: {}
- };
-
- var FormattedDate = (function (_Component) {
- babelHelpers.inherits(FormattedDate, _Component);
-
- function FormattedDate(props, context) {
- babelHelpers.classCallCheck(this, FormattedDate);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(FormattedDate).call(this, props, context));
-
- invariantIntlContext(context);
- return _this;
- }
-
- babelHelpers.createClass(FormattedDate, [{
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate() {
- for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {
- next[_key] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));
- }
- }, {
- key: 'render',
- value: function render() {
- var formatDate = this.context.intl.formatDate;
- var _props = this.props;
- var value = _props.value;
- var children = _props.children;
-
- var formattedDate = formatDate(value, this.props);
-
- if (typeof children === 'function') {
- return children(formattedDate);
- }
-
- return React__default.createElement(
- 'span',
- null,
- formattedDate
- );
- }
- }]);
- return FormattedDate;
- })(React.Component);
-
- FormattedDate.displayName = 'FormattedDate';
-
- FormattedDate.contextTypes = {
- intl: intlShape
- };
-
- FormattedDate.propTypes = babelHelpers.extends({}, dateTimeFormatPropTypes, {
- value: React.PropTypes.any.isRequired,
- format: React.PropTypes.string,
- children: React.PropTypes.func
- });
-
- var FormattedTime = (function (_Component) {
- babelHelpers.inherits(FormattedTime, _Component);
-
- function FormattedTime(props, context) {
- babelHelpers.classCallCheck(this, FormattedTime);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(FormattedTime).call(this, props, context));
-
- invariantIntlContext(context);
- return _this;
- }
-
- babelHelpers.createClass(FormattedTime, [{
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate() {
- for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {
- next[_key] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));
- }
- }, {
- key: 'render',
- value: function render() {
- var formatTime = this.context.intl.formatTime;
- var _props = this.props;
- var value = _props.value;
- var children = _props.children;
-
- var formattedTime = formatTime(value, this.props);
-
- if (typeof children === 'function') {
- return children(formattedTime);
- }
-
- return React__default.createElement(
- 'span',
- null,
- formattedTime
- );
- }
- }]);
- return FormattedTime;
- })(React.Component);
-
- FormattedTime.displayName = 'FormattedTime';
-
- FormattedTime.contextTypes = {
- intl: intlShape
- };
-
- FormattedTime.propTypes = babelHelpers.extends({}, dateTimeFormatPropTypes, {
- value: React.PropTypes.any.isRequired,
- format: React.PropTypes.string,
- children: React.PropTypes.func
- });
-
- var SECOND = 1000;
- var MINUTE = 1000 * 60;
- var HOUR = 1000 * 60 * 60;
- var DAY = 1000 * 60 * 60 * 24;
-
- // The maximum timer delay value is a 32-bit signed integer.
- // See: https://mdn.io/setTimeout
- var MAX_TIMER_DELAY = 2147483647;
-
- function selectUnits(delta) {
- var absDelta = Math.abs(delta);
-
- if (absDelta < MINUTE) {
- return 'second';
- }
-
- if (absDelta < HOUR) {
- return 'minute';
- }
-
- if (absDelta < DAY) {
- return 'hour';
- }
-
- // The maximum scheduled delay will be measured in days since the maximum
- // timer delay is less than the number of milliseconds in 25 days.
- return 'day';
- }
-
- function getUnitDelay(units) {
- switch (units) {
- case 'second':
- return SECOND;
- case 'minute':
- return MINUTE;
- case 'hour':
- return HOUR;
- case 'day':
- return DAY;
- default:
- return MAX_TIMER_DELAY;
- }
- }
-
- var FormattedRelative = (function (_Component) {
- babelHelpers.inherits(FormattedRelative, _Component);
-
- function FormattedRelative(props, context) {
- babelHelpers.classCallCheck(this, FormattedRelative);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(FormattedRelative).call(this, props, context));
-
- invariantIntlContext(context);
-
- var now = isFinite(props.initialNow) ? Number(props.initialNow) : context.intl.now();
-
- // `now` is stored as state so that `render()` remains a function of
- // props + state, instead of accessing `Date.now()` inside `render()`.
- _this.state = { now: now };
- return _this;
- }
-
- babelHelpers.createClass(FormattedRelative, [{
- key: 'scheduleNextUpdate',
- value: function scheduleNextUpdate(props, state) {
- var _this2 = this;
-
- var updateInterval = props.updateInterval;
-
- // If the `updateInterval` is falsy, including `0`, then auto updates
- // have been turned off, so we bail and skip scheduling an update.
-
- if (!updateInterval) {
- return;
- }
-
- var delta = Number(props.value) - state.now;
- var units = props.units || selectUnits(delta);
-
- var unitDelay = getUnitDelay(units);
- var unitRemainder = Math.abs(delta % unitDelay);
-
- // We want the largest possible timer delay which will still display
- // accurate information while reducing unnecessary re-renders. The delay
- // should be until the next "interesting" moment, like a tick from
- // "1 minute ago" to "2 minutes ago" when the delta is 120,000ms.
- var delay = delta < 0 ? Math.max(updateInterval, unitDelay - unitRemainder) : Math.max(updateInterval, unitRemainder);
-
- clearTimeout(this._timer);
-
- this._timer = setTimeout(function () {
- _this2.setState({ now: _this2.context.intl.now() });
- }, delay);
- }
- }, {
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate() {
- for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {
- next[_key] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));
- }
- }, {
- key: 'componentWillUpdate',
- value: function componentWillUpdate(nextProps, nextState) {
- this.scheduleNextUpdate(nextProps, nextState);
- }
- }, {
- key: 'componentDidMount',
- value: function componentDidMount() {
- this.scheduleNextUpdate(this.props, this.state);
- }
- }, {
- key: 'componentWillUnmount',
- value: function componentWillUnmount() {
- clearTimeout(this._timer);
- }
- }, {
- key: 'render',
- value: function render() {
- var formatRelative = this.context.intl.formatRelative;
- var _props = this.props;
- var value = _props.value;
- var children = _props.children;
-
- var formattedRelative = formatRelative(value, babelHelpers.extends({}, this.props, this.state));
-
- if (typeof children === 'function') {
- return children(formattedRelative);
- }
-
- return React__default.createElement(
- 'span',
- null,
- formattedRelative
- );
- }
- }]);
- return FormattedRelative;
- })(React.Component);
-
- FormattedRelative.displayName = 'FormattedRelative';
-
- FormattedRelative.contextTypes = {
- intl: intlShape
- };
-
- FormattedRelative.propTypes = babelHelpers.extends({}, relativeFormatPropTypes, {
- value: React.PropTypes.any.isRequired,
- format: React.PropTypes.string,
- updateInterval: React.PropTypes.number,
- initialNow: React.PropTypes.any,
- children: React.PropTypes.func
- });
-
- FormattedRelative.defaultProps = {
- updateInterval: 1000 * 10
- };
-
- var FormattedNumber = (function (_Component) {
- babelHelpers.inherits(FormattedNumber, _Component);
-
- function FormattedNumber(props, context) {
- babelHelpers.classCallCheck(this, FormattedNumber);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(FormattedNumber).call(this, props, context));
-
- invariantIntlContext(context);
- return _this;
- }
-
- babelHelpers.createClass(FormattedNumber, [{
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate() {
- for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {
- next[_key] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));
- }
- }, {
- key: 'render',
- value: function render() {
- var formatNumber = this.context.intl.formatNumber;
- var _props = this.props;
- var value = _props.value;
- var children = _props.children;
-
- var formattedNumber = formatNumber(value, this.props);
-
- if (typeof children === 'function') {
- return children(formattedNumber);
- }
-
- return React__default.createElement(
- 'span',
- null,
- formattedNumber
- );
- }
- }]);
- return FormattedNumber;
- })(React.Component);
-
- FormattedNumber.displayName = 'FormattedNumber';
-
- FormattedNumber.contextTypes = {
- intl: intlShape
- };
-
- FormattedNumber.propTypes = babelHelpers.extends({}, numberFormatPropTypes, {
- value: React.PropTypes.any.isRequired,
- format: React.PropTypes.string,
- children: React.PropTypes.func
- });
-
- var FormattedPlural = (function (_Component) {
- babelHelpers.inherits(FormattedPlural, _Component);
-
- function FormattedPlural(props, context) {
- babelHelpers.classCallCheck(this, FormattedPlural);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(FormattedPlural).call(this, props, context));
-
- invariantIntlContext(context);
- return _this;
- }
-
- babelHelpers.createClass(FormattedPlural, [{
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate() {
- for (var _len = arguments.length, next = Array(_len), _key = 0; _key < _len; _key++) {
- next[_key] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this].concat(next));
- }
- }, {
- key: 'render',
- value: function render() {
- var formatPlural = this.context.intl.formatPlural;
- var _props = this.props;
- var value = _props.value;
- var other = _props.other;
- var children = _props.children;
-
- var pluralCategory = formatPlural(value, this.props);
- var formattedPlural = this.props[pluralCategory] || other;
-
- if (typeof children === 'function') {
- return children(formattedPlural);
- }
-
- return React__default.createElement(
- 'span',
- null,
- formattedPlural
- );
- }
- }]);
- return FormattedPlural;
- })(React.Component);
-
- FormattedPlural.displayName = 'FormattedPlural';
-
- FormattedPlural.contextTypes = {
- intl: intlShape
- };
-
- FormattedPlural.propTypes = babelHelpers.extends({}, pluralFormatPropTypes, {
- value: React.PropTypes.any.isRequired,
-
- other: React.PropTypes.node.isRequired,
- zero: React.PropTypes.node,
- one: React.PropTypes.node,
- two: React.PropTypes.node,
- few: React.PropTypes.node,
- many: React.PropTypes.node,
-
- children: React.PropTypes.func
- });
-
- FormattedPlural.defaultProps = {
- style: 'cardinal'
- };
-
- var FormattedMessage = (function (_Component) {
- babelHelpers.inherits(FormattedMessage, _Component);
-
- function FormattedMessage(props, context) {
- babelHelpers.classCallCheck(this, FormattedMessage);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(FormattedMessage).call(this, props, context));
-
- invariantIntlContext(context);
- return _this;
- }
-
- babelHelpers.createClass(FormattedMessage, [{
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate(nextProps) {
- var values = this.props.values;
- var nextValues = nextProps.values;
-
- if (!shallowEquals(nextValues, values)) {
- return true;
- }
-
- // Since `values` has already been checked, we know they're not
- // different, so the current `values` are carried over so the shallow
- // equals comparison on the other props isn't affected by the `values`.
- var nextPropsToCheck = babelHelpers.extends({}, nextProps, {
- values: values
- });
-
- for (var _len = arguments.length, next = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- next[_key - 1] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this, nextPropsToCheck].concat(next));
- }
- }, {
- key: 'render',
- value: function render() {
- var formatMessage = this.context.intl.formatMessage;
- var _props = this.props;
- var id = _props.id;
- var description = _props.description;
- var defaultMessage = _props.defaultMessage;
- var values = _props.values;
- var tagName = _props.tagName;
- var children = _props.children;
-
- // Creates a token with a random UID that should not be guessable or
- // conflict with other parts of the `message` string.
-
- var uid = Math.floor(Math.random() * 0x10000000000).toString(16);
- var tokenRegexp = new RegExp('(@__ELEMENT-' + uid + '-\\d+__@)', 'g');
-
- var generateToken = (function () {
- var counter = 0;
- return function () {
- return '@__ELEMENT-' + uid + '-' + (counter += 1) + '__@';
- };
- })();
-
- var tokenizedValues = {};
- var elements = {};
-
- // Iterates over the `props` to keep track of any React Element values
- // so they can be represented by the `token` as a placeholder when the
- // `message` is formatted. This allows the formatted message to then be
- // broken-up into parts with references to the React Elements inserted
- // back in.
- Object.keys(values).forEach(function (name) {
- var value = values[name];
-
- if (React.isValidElement(value)) {
- var token = generateToken();
- tokenizedValues[name] = token;
- elements[token] = value;
- } else {
- tokenizedValues[name] = value;
- }
- });
-
- var descriptor = { id: id, description: description, defaultMessage: defaultMessage };
- var formattedMessage = formatMessage(descriptor, tokenizedValues);
-
- // Split the message into parts so the React Element values captured
- // above can be inserted back into the rendered message. This approach
- // allows messages to render with React Elements while keeping React's
- // virtual diffing working properly.
- var nodes = formattedMessage.split(tokenRegexp).filter(function (part) {
- return !!part;
- }).map(function (part) {
- return elements[part] || part;
- });
-
- if (typeof children === 'function') {
- return children.apply(undefined, babelHelpers.toConsumableArray(nodes));
- }
-
- return React.createElement.apply(undefined, [tagName, null].concat(babelHelpers.toConsumableArray(nodes)));
- }
- }]);
- return FormattedMessage;
- })(React.Component);
-
- FormattedMessage.displayName = 'FormattedMessage';
-
- FormattedMessage.contextTypes = {
- intl: intlShape
- };
-
- FormattedMessage.propTypes = babelHelpers.extends({}, messageDescriptorPropTypes, {
- values: React.PropTypes.object,
- tagName: React.PropTypes.string,
- children: React.PropTypes.func
- });
-
- FormattedMessage.defaultProps = {
- values: {},
- tagName: 'span'
- };
-
- var FormattedHTMLMessage = (function (_Component) {
- babelHelpers.inherits(FormattedHTMLMessage, _Component);
-
- function FormattedHTMLMessage(props, context) {
- babelHelpers.classCallCheck(this, FormattedHTMLMessage);
-
- var _this = babelHelpers.possibleConstructorReturn(this, Object.getPrototypeOf(FormattedHTMLMessage).call(this, props, context));
-
- invariantIntlContext(context);
- return _this;
- }
-
- babelHelpers.createClass(FormattedHTMLMessage, [{
- key: 'shouldComponentUpdate',
- value: function shouldComponentUpdate(nextProps) {
- var values = this.props.values;
- var nextValues = nextProps.values;
-
- if (!shallowEquals(nextValues, values)) {
- return true;
- }
-
- // Since `values` has already been checked, we know they're not
- // different, so the current `values` are carried over so the shallow
- // equals comparison on the other props isn't affected by the `values`.
- var nextPropsToCheck = babelHelpers.extends({}, nextProps, {
- values: values
- });
-
- for (var _len = arguments.length, next = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
- next[_key - 1] = arguments[_key];
- }
-
- return shouldIntlComponentUpdate.apply(undefined, [this, nextPropsToCheck].concat(next));
- }
- }, {
- key: 'render',
- value: function render() {
- var formatHTMLMessage = this.context.intl.formatHTMLMessage;
- var _props = this.props;
- var id = _props.id;
- var description = _props.description;
- var defaultMessage = _props.defaultMessage;
- var rawValues = _props.values;
- var tagName = _props.tagName;
- var children = _props.children;
-
- var descriptor = { id: id, description: description, defaultMessage: defaultMessage };
- var formattedHTMLMessage = formatHTMLMessage(descriptor, rawValues);
-
- if (typeof children === 'function') {
- return children(formattedHTMLMessage);
- }
-
- // Since the message presumably has HTML in it, we need to set
- // `innerHTML` in order for it to be rendered and not escaped by React.
- // To be safe, all string prop values were escaped when formatting the
- // message. It is assumed that the message is not UGC, and came from the
- // developer making it more like a template.
- //
- // Note: There's a perf impact of using this component since there's no
- // way for React to do its virtual DOM diffing.
- return React.createElement(tagName, {
- dangerouslySetInnerHTML: {
- __html: formattedHTMLMessage
- }
- });
- }
- }]);
- return FormattedHTMLMessage;
- })(React.Component);
-
- FormattedHTMLMessage.displayName = 'FormattedHTMLMessage';
-
- FormattedHTMLMessage.contextTypes = {
- intl: intlShape
- };
-
- FormattedHTMLMessage.propTypes = babelHelpers.extends({}, messageDescriptorPropTypes, {
- values: React.PropTypes.object,
- tagName: React.PropTypes.string,
- children: React.PropTypes.func
- });
-
- FormattedHTMLMessage.defaultProps = {
- values: {},
- tagName: 'span'
- };
-
- addLocaleData(defaultLocaleData);
-
- function defineMessages(messageDescriptors) {
- // This simply returns what's passed-in because it's meant to be a hook for
- // babel-plugin-react-intl.
- return messageDescriptors;
- }
-
- exports.addLocaleData = addLocaleData;
- exports.defineMessages = defineMessages;
- exports.intlShape = intlShape;
- exports.injectIntl = injectIntl;
- exports.IntlProvider = IntlProvider;
- exports.FormattedDate = FormattedDate;
- exports.FormattedTime = FormattedTime;
- exports.FormattedRelative = FormattedRelative;
- exports.FormattedNumber = FormattedNumber;
- exports.FormattedPlural = FormattedPlural;
- exports.FormattedMessage = FormattedMessage;
- exports.FormattedHTMLMessage = FormattedHTMLMessage;
-
-}));
-//# sourceMappingURL=react-intl.js.map \ No newline at end of file