UNPKG

react-localize-redux

Version:
1,318 lines (1,040 loc) 100 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react")); else if(typeof define === 'function' && define.amd) define(["react"], factory); else if(typeof exports === 'object') exports["ReactLocalizeRedux"] = factory(require("react")); else root["ReactLocalizeRedux"] = factory(root["React"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_0__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // identity function for calling harmony imports with the correct context /******/ __webpack_require__.i = function(value) { return value; }; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 13); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_0__; /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTranslate = exports.getTranslationsForSpecificLanguage = exports.getTranslationsForActiveLanguage = exports.translationsEqualSelector = exports.getActiveLanguage = exports.getOptions = exports.getLanguages = exports.getTranslations = exports.setActiveLanguage = exports.addTranslationForLanguage = exports.addTranslation = exports.initialize = exports.localizeReducer = exports.defaultTranslateOptions = exports.TRANSLATE = exports.SET_ACTIVE_LANGUAGE = exports.ADD_TRANSLATION_FOR_LANGUAGE = exports.ADD_TRANSLATION = exports.INITIALIZE = undefined; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _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; }; exports.languages = languages; exports.translations = translations; exports.options = options; var _react = __webpack_require__(0); var React = _interopRequireWildcard(_react); var _flat = __webpack_require__(16); var _reselect = __webpack_require__(10); var _utils = __webpack_require__(3); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _defineProperty(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; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } /** * ACTIONS */ /** * TYPES */ // This is to get around the whole default options issue with Flow // I tried using the $Diff approach, but with no luck so for now stuck with this terd. // Because sometimes you just want flow to shut up! var INITIALIZE = exports.INITIALIZE = '@@localize/INITIALIZE'; var ADD_TRANSLATION = exports.ADD_TRANSLATION = '@@localize/ADD_TRANSLATION'; var ADD_TRANSLATION_FOR_LANGUAGE = exports.ADD_TRANSLATION_FOR_LANGUAGE = '@@localize/ADD_TRANSLATION_FOR_LANGUAGE'; var SET_ACTIVE_LANGUAGE = exports.SET_ACTIVE_LANGUAGE = '@@localize/SET_ACTIVE_LANGUAGE'; var TRANSLATE = exports.TRANSLATE = '@@localize/TRANSLATE'; /** * REDUCERS */ function languages() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; var action = arguments[1]; switch (action.type) { case INITIALIZE: var _options = action.payload.options || {}; return action.payload.languages.map(function (language, index) { var isActive = function isActive(code) { return _options.defaultLanguage !== undefined ? code === _options.defaultLanguage : index === 0; }; // check if it's using array of Language objects, or array of language codes return typeof language === 'string' ? { code: language, active: isActive(language) // language codes } : _extends({}, language, { active: isActive(language.code) }); // language objects }); case SET_ACTIVE_LANGUAGE: return state.map(function (language) { return language.code === action.payload.languageCode ? _extends({}, language, { active: true }) : _extends({}, language, { active: false }); }); default: return state; } } function translations() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var action = arguments[1]; var flattenedTranslations = void 0; var translationWithTransform = void 0; switch (action.type) { case INITIALIZE: if (!action.payload.translation) { return state; } flattenedTranslations = (0, _flat.flatten)(action.payload.translation, { safe: true }); var _options2 = action.payload.options || {}; var firstLanguage = typeof action.payload.languages[0] === 'string' ? action.payload.languages[0] : action.payload.languages[0].code; var _defaultLanguage = _options2.defaultLanguage || firstLanguage; var isMultiLanguageTranslation = Object.keys(flattenedTranslations).some(function (item) { return Array.isArray(flattenedTranslations[item]); }); // add translation based on whether it is single vs multi language translation data var newTranslation = isMultiLanguageTranslation ? flattenedTranslations : (0, _utils.getSingleToMultilanguageTranslation)(_defaultLanguage, action.languageCodes, flattenedTranslations, state); return _extends({}, state, newTranslation); case ADD_TRANSLATION: translationWithTransform = action.payload.translationOptions && action.payload.translationOptions.translationTransform !== undefined ? action.payload.translationOptions.translationTransform(action.payload.translation || {}, action.languageCodes) : action.payload.translation; return _extends({}, state, (0, _flat.flatten)(translationWithTransform, { safe: true })); case ADD_TRANSLATION_FOR_LANGUAGE: flattenedTranslations = (0, _flat.flatten)(action.payload.translation, { safe: true }); return _extends({}, state, (0, _utils.getSingleToMultilanguageTranslation)(action.payload.language, action.languageCodes, flattenedTranslations, state)); default: return state; } } function options() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : defaultTranslateOptions; var action = arguments[1]; switch (action.type) { case INITIALIZE: var _options3 = action.payload.options || {}; var _defaultLanguage2 = _options3.defaultLanguage || action.languageCodes[0]; return _extends({}, state, (0, _utils.validateOptions)(_options3), { defaultLanguage: _defaultLanguage2 }); default: return state; } } var defaultTranslateOptions = exports.defaultTranslateOptions = { renderToStaticMarkup: false, renderInnerHtml: false, ignoreTranslateChildren: false, defaultLanguage: '', onMissingTranslation: function onMissingTranslation(_ref) { var translationId = _ref.translationId, languageCode = _ref.languageCode; return 'Missing translationId: ${ translationId } for language: ${ languageCode }'; } }; var initialState = { languages: [], translations: {}, options: defaultTranslateOptions }; var localizeReducer = exports.localizeReducer = function localizeReducer() { var state = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : initialState; var action = arguments[1]; // execute the languages reducer first as we need access to those values for other reducers var languagesState = languages(state.languages, action); var languageCodes = languagesState.map(function (language) { return language.code; }); return { languages: languagesState, translations: translations(state.translations, _extends({}, action, { languageCodes: languageCodes })), options: options(state.options, _extends({}, action, { languageCodes: languageCodes })) }; }; /** * ACTION CREATORS */ var initialize = exports.initialize = function initialize(payload) { return { type: INITIALIZE, payload: payload }; }; var addTranslation = exports.addTranslation = function addTranslation(translation, options) { return { type: ADD_TRANSLATION, payload: { translation: translation, translationOptions: options } }; }; var addTranslationForLanguage = exports.addTranslationForLanguage = function addTranslationForLanguage(translation, language) { return { type: ADD_TRANSLATION_FOR_LANGUAGE, payload: { translation: translation, language: language } }; }; var setActiveLanguage = exports.setActiveLanguage = function setActiveLanguage(languageCode) { return { type: SET_ACTIVE_LANGUAGE, payload: { languageCode: languageCode } }; }; /** * SELECTORS */ var getTranslations = exports.getTranslations = function getTranslations(state) { return state.translations; }; var getLanguages = exports.getLanguages = function getLanguages(state) { return state.languages; }; var getOptions = exports.getOptions = function getOptions(state) { return state.options; }; var getActiveLanguage = exports.getActiveLanguage = function getActiveLanguage(state) { var languages = getLanguages(state); return languages.filter(function (language) { return language.active === true; })[0]; }; /** * A custom equality checker that checker that compares an objects keys and values instead of === comparison * e.g. {name: 'Ted', sport: 'hockey'} would result in 'name,sport - Ted,hocker' which would be used for comparison * * NOTE: This works with activeLanguage, languages, and translations data types. * If a new data type is added to selector this would need to be updated to accomodate */ var translationsEqualSelector = exports.translationsEqualSelector = (0, _reselect.createSelectorCreator)(_reselect.defaultMemoize, function (prev, cur) { var prevKeys = (typeof prev === 'undefined' ? 'undefined' : _typeof(prev)) === 'object' ? Object.keys(prev).toString() : undefined; var curKeys = (typeof cur === 'undefined' ? 'undefined' : _typeof(cur)) === 'object' ? Object.keys(cur).toString() : undefined; var prevValues = (typeof prev === 'undefined' ? 'undefined' : _typeof(prev)) === 'object' ? (0, _utils.objectValuesToString)(prev) : undefined; var curValues = (typeof cur === 'undefined' ? 'undefined' : _typeof(cur)) === 'object' ? (0, _utils.objectValuesToString)(cur) : undefined; var prevCacheValue = prevKeys !== undefined && prevValues !== undefined ? prevKeys + ' - ' + prevValues : prev; var curCacheValue = curKeys !== undefined && curValues !== undefined ? curKeys + ' - ' + curValues : cur; return prevCacheValue === curCacheValue; }); var getTranslationsForActiveLanguage = exports.getTranslationsForActiveLanguage = translationsEqualSelector(getActiveLanguage, getLanguages, getTranslations, _utils.getTranslationsForLanguage); var getTranslationsForSpecificLanguage = exports.getTranslationsForSpecificLanguage = translationsEqualSelector(getLanguages, getTranslations, function (languages, translations) { return (0, _reselect.defaultMemoize)(function (languageCode) { return (0, _utils.getTranslationsForLanguage)({ code: languageCode, active: false }, languages, translations); }); }); var getTranslate = (0, _reselect.createSelector)(getTranslationsForActiveLanguage, getTranslationsForSpecificLanguage, getActiveLanguage, getOptions, function (translationsForActiveLanguage, getTranslationsForLanguage, activeLanguage, initializeOptions) { return function (value) { var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var translateOptions = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}; var defaultLanguage = initializeOptions.defaultLanguage, defaultOptions = _objectWithoutProperties(initializeOptions, ['defaultLanguage']); var overrideLanguage = translateOptions.language; var translations = overrideLanguage !== undefined ? getTranslationsForLanguage(overrideLanguage) : translationsForActiveLanguage; var defaultTranslations = activeLanguage && activeLanguage.code === defaultLanguage ? translationsForActiveLanguage : getTranslationsForLanguage(defaultLanguage); var languageCode = overrideLanguage !== undefined ? overrideLanguage : activeLanguage && activeLanguage.code; var mergedOptions = _extends({}, defaultOptions, translateOptions); var getTranslation = function getTranslation(translationId) { var hasValidTranslation = translations[translationId] !== undefined; var hasValidDefaultTranslation = defaultTranslations[translationId] !== undefined; var defaultTranslation = hasValidDefaultTranslation ? (0, _utils.getLocalizedElement)({ translation: defaultTranslations[translationId], data: data, renderInnerHtml: mergedOptions.renderInnerHtml }) : "No default translation found! Ensure you've added translations for your default langauge."; // if translation is not valid then generate the on missing translation message in it's place var translation = hasValidTranslation ? translations[translationId] : mergedOptions.onMissingTranslation({ translationId: translationId, languageCode: languageCode, defaultTranslation: defaultTranslation }); // if translations are missing than ovrride data to include translationId, languageCode // as these will be needed to render missing translations message var translationData = hasValidTranslation ? data : { translationId: translationId, languageCode: languageCode }; return (0, _utils.getLocalizedElement)({ translation: translation, data: translationData, languageCode: languageCode, renderInnerHtml: mergedOptions.renderInnerHtml }); }; if (typeof value === 'string') { return getTranslation(value); } else if (Array.isArray(value)) { return value.reduce(function (prev, cur) { return _extends({}, prev, _defineProperty({}, cur, getTranslation(cur))); }, {}); } else { throw new Error('react-localize-redux: Invalid key passed to getTranslate.'); } }; }); exports.getTranslate = getTranslate; /***/ }), /* 2 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalizeContext = exports.getContextPropsFromState = undefined; var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); var _createReactContext = __webpack_require__(15); var _createReactContext2 = _interopRequireDefault(_createReactContext); var _reselect = __webpack_require__(10); var _localize = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var dispatchInitialize = function dispatchInitialize(dispatch) { return function (payload) { return dispatch((0, _localize.initialize)(payload)); }; }; var dispatchAddTranslation = function dispatchAddTranslation(dispatch) { return function (translation) { return dispatch((0, _localize.addTranslation)(translation)); }; }; var dispatchAddTranslationForLanguage = function dispatchAddTranslationForLanguage(dispatch) { return function (translation, language) { return dispatch((0, _localize.addTranslationForLanguage)(translation, language)); }; }; var dispatchSetActiveLanguage = function dispatchSetActiveLanguage(dispatch) { return function (languageCode) { return dispatch((0, _localize.setActiveLanguage)(languageCode)); }; }; var getContextPropsFromState = exports.getContextPropsFromState = function getContextPropsFromState(dispatch) { return (0, _reselect.createSelector)(_localize.getTranslate, _localize.getLanguages, _localize.getActiveLanguage, _localize.getOptions, function (translate, languages, activeLanguage, options) { var defaultLanguage = options.defaultLanguage || languages[0] && languages[0].code; var renderToStaticMarkup = options.renderToStaticMarkup; var ignoreTranslateChildren = options.ignoreTranslateChildren !== undefined ? options.ignoreTranslateChildren : _localize.defaultTranslateOptions.ignoreTranslateChildren; return { translate: translate, languages: languages, defaultLanguage: defaultLanguage, activeLanguage: activeLanguage, initialize: dispatchInitialize(dispatch), addTranslation: dispatchAddTranslation(dispatch), addTranslationForLanguage: dispatchAddTranslationForLanguage(dispatch), setActiveLanguage: dispatchSetActiveLanguage(dispatch), renderToStaticMarkup: renderToStaticMarkup, ignoreTranslateChildren: ignoreTranslateChildren }; }); }; var defaultLocalizeState = (0, _localize.localizeReducer)(undefined, {}); var defaultContext = getContextPropsFromState(function () {})(defaultLocalizeState); var LocalizeContext = exports.LocalizeContext = (0, _createReactContext2.default)(defaultContext); /***/ }), /* 3 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.warning = exports.get = exports.getSingleToMultilanguageTranslation = exports.storeDidChange = exports.getTranslationsForLanguage = exports.validateOptions = exports.objectValuesToString = exports.getIndexForLanguageCode = exports.templater = exports.hasHtmlTags = exports.getLocalizedElement = undefined; var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); var _localize = __webpack_require__(1); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _toConsumableArray(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); } } var getLocalizedElement = exports.getLocalizedElement = function getLocalizedElement(options) { var translation = options.translation, data = options.data, renderInnerHtml = options.renderInnerHtml; var translatedValueOrArray = templater(translation, data); // if result of templater is string, do the usual stuff if (typeof translatedValueOrArray === 'string') { return renderInnerHtml === true && hasHtmlTags(translatedValueOrArray) ? _react2.default.createElement('span', { dangerouslySetInnerHTML: { __html: translatedValueOrArray } }) : translatedValueOrArray; } // at this point we know we have react components; // check if there are HTMLTags in the translation (not allowed) var _iteratorNormalCompletion = true; var _didIteratorError = false; var _iteratorError = undefined; try { for (var _iterator = translatedValueOrArray[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) { var portion = _step.value; if (typeof portion === 'string' && hasHtmlTags(portion)) { warning('HTML tags in the translation string are not supported when passing React components as arguments to the translation.'); return ''; } } // return as Element } catch (err) { _didIteratorError = true; _iteratorError = err; } finally { try { if (!_iteratorNormalCompletion && _iterator.return) { _iterator.return(); } } finally { if (_didIteratorError) { throw _iteratorError; } } } return _react2.default.createElement.apply(_react2.default, ['span', null].concat(_toConsumableArray(translatedValueOrArray))); }; var hasHtmlTags = exports.hasHtmlTags = function hasHtmlTags(value) { var pattern = /(&[^\s]*;|<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[\^'">\s]+))?)+\s*|\s*)\/?>)/; return value.search(pattern) >= 0; }; /** * @func templater * @desc A poor mans template parser * @param {string} strings The template string * @param {object} data The data that should be inserted in template * @return {string} The template string with the data merged in */ var templater = exports.templater = function templater(strings) { var data = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; if (!strings) return ''; // ${**} // brackets to include it in the result of .split() var genericPlaceholderPattern = '(\\${\\s*[^\\s}]+\\s*})'; // split: from 'Hey ${name}' -> ['Hey', '${name}'] // filter: clean empty strings // map: replace ${prop} with data[prop] var splitStrings = strings.split(new RegExp(genericPlaceholderPattern, 'gmi')).filter(function (str) { return !!str; }).map(function (templatePortion) { var matched = void 0; for (var prop in data) { if (matched) break; var pattern = '\\${\\s*' + prop + '\\s*}'; var regex = new RegExp(pattern, 'gmi'); if (regex.test(templatePortion)) matched = data[prop]; } if (typeof matched === 'undefined') return templatePortion; return matched; }); // if there is a React element, return as array if (splitStrings.some(function (portion) { return _react2.default.isValidElement(portion); })) { return splitStrings; } // otherwise concatenate all portions into the translated value return splitStrings.reduce(function (translated, portion) { return translated + ('' + portion); }, ''); }; var getIndexForLanguageCode = exports.getIndexForLanguageCode = function getIndexForLanguageCode(code, languages) { return languages.map(function (language) { return language.code; }).indexOf(code); }; var objectValuesToString = exports.objectValuesToString = function objectValuesToString(data) { return !Object.values ? Object.keys(data).map(function (key) { return data[key].toString(); }).toString() : Object.values(data).toString(); }; var validateOptions = exports.validateOptions = function validateOptions(options) { if (options.onMissingTranslation !== undefined && typeof options.onMissingTranslation !== 'function') { throw new Error('react-localize-redux: an invalid onMissingTranslation function was provided.'); } if (options.renderToStaticMarkup !== false && typeof options.renderToStaticMarkup !== 'function') { throw new Error('\n react-localize-redux: initialize option renderToStaticMarkup is invalid.\n Please see https://ryandrewjohnson.github.io/react-localize-redux-docs/#initialize.\n '); } return options; }; var getTranslationsForLanguage = exports.getTranslationsForLanguage = function getTranslationsForLanguage(language, languages, translations) { // no language! return no translations if (!language) { return {}; } var languageCode = language.code; var languageIndex = getIndexForLanguageCode(languageCode, languages); var keys = Object.keys(translations); var totalKeys = keys.length; var translationsForLanguage = {}; for (var i = 0; i < totalKeys; i++) { var key = keys[i]; translationsForLanguage[key] = translations[key][languageIndex]; } return translationsForLanguage; }; var storeDidChange = exports.storeDidChange = function storeDidChange(store, onChange) { var currentState = void 0; function handleChange() { var nextState = store.getState(); if (nextState !== currentState) { onChange(currentState); currentState = nextState; } } var unsubscribe = store.subscribe(handleChange); handleChange(); return unsubscribe; }; var getSingleToMultilanguageTranslation = exports.getSingleToMultilanguageTranslation = function getSingleToMultilanguageTranslation(language, languageCodes, flattenedTranslations, existingTranslations) { var languageIndex = languageCodes.indexOf(language); var translations = languageIndex >= 0 ? flattenedTranslations : {}; var keys = Object.keys(translations); var totalKeys = keys.length; var singleLanguageTranslations = {}; var _loop = function _loop(i) { var key = keys[i]; // loop through each language, and for languages that don't match languageIndex // keep existing translation data, and for languageIndex store new translation data var translationValues = languageCodes.map(function (code, index) { var existingValues = existingTranslations[key] || []; return index === languageIndex ? flattenedTranslations[key] : existingValues[index]; }); singleLanguageTranslations[key] = translationValues; }; for (var i = 0; i < totalKeys; i++) { _loop(i); } return singleLanguageTranslations; }; var get = exports.get = function get(obj, path) { var defaultValue = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : undefined; var pathArr = path.split('.').filter(Boolean); return pathArr.reduce(function (ret, key) { return ret && ret[key] ? ret[key] : defaultValue; }, obj); }; // Thanks react-redux for utility function // https://github.com/reactjs/react-redux/blob/master/src/utils/warning.js var warning = exports.warning = function warning(message) { if (typeof console !== 'undefined' && typeof console.error === 'function') { console.error(message); } try { // This error was thrown as a convenience so that if you enable // "break on all exceptions" in your console, // it would pause the execution at this line. throw new Error(message); } catch (e) {} }; /***/ }), /* 4 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ var emptyFunction = __webpack_require__(6); /** * Similar to invariant but only logs a warning if the condition is not met. * This can be used to log issues in development environments in critical * paths. Removing the logging code for production environments will keep the * same logic and follow the same code paths. */ var warning = emptyFunction; if (true) { var printWarning = function printWarning(format) { for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { args[_key - 1] = arguments[_key]; } var argIndex = 0; var message = 'Warning: ' + format.replace(/%s/g, function () { return args[argIndex++]; }); if (typeof console !== 'undefined') { console.error(message); } try { // --- Welcome to debugging React --- // This error was thrown as a convenience so that you can use this stack // to find the callsite that caused this warning to fire. throw new Error(message); } catch (x) {} }; warning = function warning(condition, format) { if (format === undefined) { throw new Error('`warning(condition, format, ...args)` requires a warning ' + 'message argument'); } if (format.indexOf('Failed Composite propType: ') === 0) { return; // Ignore CompositeComponent proptype check. } if (!condition) { for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { args[_key2 - 2] = arguments[_key2]; } printWarning.apply(undefined, [format].concat(args)); } }; } module.exports = warning; /***/ }), /* 5 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _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; }; var _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; }; }(); exports.withLocalize = withLocalize; var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); var _hoistNonReactStatics = __webpack_require__(18); var _hoistNonReactStatics2 = _interopRequireDefault(_hoistNonReactStatics); var _LocalizeContext = __webpack_require__(2); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(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; } function _inherits(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; } function withLocalize(WrappedComponent) { var LocalizedComponent = function (_Component) { _inherits(LocalizedComponent, _Component); function LocalizedComponent() { _classCallCheck(this, LocalizedComponent); return _possibleConstructorReturn(this, (LocalizedComponent.__proto__ || Object.getPrototypeOf(LocalizedComponent)).apply(this, arguments)); } _createClass(LocalizedComponent, [{ key: 'render', value: function render() { var _this2 = this; return _react2.default.createElement( _LocalizeContext.LocalizeContext.Consumer, null, function (context) { return _react2.default.createElement(WrappedComponent, _extends({}, context, _this2.props)); } ); } }]); return LocalizedComponent; }(_react.Component); (0, _hoistNonReactStatics2.default)(LocalizedComponent, WrappedComponent); return LocalizedComponent; } /***/ }), /* 6 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * */ function makeEmptyFunction(arg) { return function () { return arg; }; } /** * This function accepts and discards inputs; it has no side effects. This is * primarily useful idiomatically for overridable function endpoints which * always need to be callable, since JS lacks a null-call idiom ala Cocoa. */ var emptyFunction = function emptyFunction() {}; emptyFunction.thatReturns = makeEmptyFunction; emptyFunction.thatReturnsFalse = makeEmptyFunction(false); emptyFunction.thatReturnsTrue = makeEmptyFunction(true); emptyFunction.thatReturnsNull = makeEmptyFunction(null); emptyFunction.thatReturnsThis = function () { return this; }; emptyFunction.thatReturnsArgument = function (arg) { return arg; }; module.exports = emptyFunction; /***/ }), /* 7 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * */ /** * 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 validateFormat = function validateFormat(format) {}; if (true) { validateFormat = function validateFormat(format) { if (format === undefined) { throw new Error('invariant requires an error message argument'); } }; } function invariant(condition, format, a, b, c, d, e, f) { validateFormat(format); 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; /***/ }), /* 8 */ /***/ (function(module, exports, __webpack_require__) { /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ if (true) { var REACT_ELEMENT_TYPE = (typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element')) || 0xeac7; var isValidElement = function(object) { return typeof object === 'object' && object !== null && object.$$typeof === REACT_ELEMENT_TYPE; }; // By explicitly using `prop-types` you are opting into new development behavior. // http://fb.me/prop-types-in-prod var throwOnDirectAccess = true; module.exports = __webpack_require__(22)(isValidElement, throwOnDirectAccess); } else { // By explicitly using `prop-types` you are opting into new production behavior. // http://fb.me/prop-types-in-prod module.exports = require('./factoryWithThrowingShims')(); } /***/ }), /* 9 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; /** * Copyright (c) 2013-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED'; module.exports = ReactPropTypesSecret; /***/ }), /* 10 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; exports.__esModule = true; exports.defaultMemoize = defaultMemoize; exports.createSelectorCreator = createSelectorCreator; exports.createStructuredSelector = createStructuredSelector; function defaultEqualityCheck(a, b) { return a === b; } function areArgumentsShallowlyEqual(equalityCheck, prev, next) { if (prev === null || next === null || prev.length !== next.length) { return false; } // Do this in a for loop (and not a `forEach` or an `every`) so we can determine equality as fast as possible. var length = prev.length; for (var i = 0; i < length; i++) { if (!equalityCheck(prev[i], next[i])) { return false; } } return true; } function defaultMemoize(func) { var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck; var lastArgs = null; var lastResult = null; // we reference arguments instead of spreading them for performance reasons return function () { if (!areArgumentsShallowlyEqual(equalityCheck, lastArgs, arguments)) { // apply arguments instead of spreading for performance. lastResult = func.apply(null, arguments); } lastArgs = arguments; return lastResult; }; } function getDependencies(funcs) { var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs; if (!dependencies.every(function (dep) { return typeof dep === 'function'; })) { var dependencyTypes = dependencies.map(function (dep) { return typeof dep; }).join(', '); throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']')); } return dependencies; } function createSelectorCreator(memoize) { for (var _len = arguments.length, memoizeOptions = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { memoizeOptions[_key - 1] = arguments[_key]; } return function () { for (var _len2 = arguments.length, funcs = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { funcs[_key2] = arguments[_key2]; } var recomputations = 0; var resultFunc = funcs.pop(); var dependencies = getDependencies(funcs); var memoizedResultFunc = memoize.apply(undefined, [function () { recomputations++; // apply arguments instead of spreading for performance. return resultFunc.apply(null, arguments); }].concat(memoizeOptions)); // If a selector is called with the exact same arguments we don't need to traverse our dependencies again. var selector = defaultMemoize(function () { var params = []; var length = dependencies.length; for (var i = 0; i < length; i++) { // apply arguments instead of spreading and mutate a local list of params for performance. params.push(dependencies[i].apply(null, arguments)); } // apply arguments instead of spreading for performance. return memoizedResultFunc.apply(null, params); }); selector.resultFunc = resultFunc; selector.recomputations = function () { return recomputations; }; selector.resetRecomputations = function () { return recomputations = 0; }; return selector; }; } var createSelector = exports.createSelector = createSelectorCreator(defaultMemoize); function createStructuredSelector(selectors) { var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector; if (typeof selectors !== 'object') { throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + typeof selectors)); } var objectKeys = Object.keys(selectors); return selectorCreator(objectKeys.map(function (key) { return selectors[key]; }), function () { for (var _len3 = arguments.length, values = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { values[_key3] = arguments[_key3]; } return values.reduce(function (composition, value, index) { composition[objectKeys[index]] = value; return composition; }, {}); }); } /***/ }), /* 11 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.LocalizeProvider = undefined; var _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; }; }(); var _react = __webpack_require__(0); var _react2 = _interopRequireDefault(_react); var _localize = __webpack_require__(1); var _LocalizeContext = __webpack_require__(2); var _utils = __webpack_require__(3); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(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; } function _inherits(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; } var LocalizeProvider = exports.LocalizeProvider = function (_Component) { _inherits(LocalizeProvider, _Component); function LocalizeProvider(props) { _classCallCheck(this, LocalizeProvider); var _this = _possibleConstructorReturn(this, (LocalizeProvider.__proto__ || Object.getPrototypeOf(LocalizeProvider)).call(this, props)); var dispatch = _this.props.store ? _this.props.store.dispatch : _this.dispatch.bind(_this); _this.getContextPropsSelector = (0, _LocalizeContext.getContextPropsFromState)(dispatch); var initialState = _this.props.initialize !== undefined ? (0, _localize.localizeReducer)(undefined, { type: _localize.INITIALIZE, payload: _this.props.initialize }) : (0, _localize.localizeReducer)(undefined, {}); _this.state = { localize: initialState }; return _this; } _createClass(LocalizeProvider, [{ key: 'componentDidMount', value: function componentDidMount() { this.initExternalStore(); this.subscribeToExternalStore(); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { this.unsubscribeFromStore && this.unsubscribeFromStore(); } }, { key: 'initExternalStore', value: function initExternalStore() { var _props = this.props, store = _props.store, initialize = _props.initialize; if (store && initialize) { store.dispatch((0, _localize.initialize)(initialize)); } } }, { key: 'subscribeToExternalStore', value: function subscribeToExternalStore() { var store = this.props.store; if (store) { this.unsubscribeFromStore = (0, _utils.storeDidChange)(store, this.onStateDidChange.bind(this)); } } }, { key: 'onStateDidChange', value: function onStateDidChange(prevState) { if (!this.props.store) { return; } var getState = this.props.getState || function (state) { return state.localize; }; var prevLocalizeState = prevState && getState(prevState); var curLocalizeState = getState(this.props.store.getState()); var prevActiveLanguage = prevState && (0, _localize.getActiveLanguage)(prevLocalizeState); var curActiveLanguage = (0, _localize.getActiveLanguage)(curLocalizeState); var prevOptions = prevState && (0, _localize.getOptions)(prevLocalizeState); var curOptions = (0, _localize.getOptions)(curLocalizeState); var prevTranslations = prevState && (0, _localize.getTranslationsForActiveLanguage)(prevLocalizeState); var curTranslations = (0, _localize.getTranslationsForActiveLanguage)(curLocalizeState); var hasActiveLangaugeChanged = (prevActiveLanguage && prevActiveLanguage.code) !== (curActiveLanguage && curActiveLanguage.code); var hasOptionsChanged = prevOptions !== curOptions; var hasTranslationsChanged = prevTranslations !== curTranslations; if (hasActiveLangaugeChanged || hasOptionsChanged || hasTranslationsChanged) { this.setState({ localize: curLocalizeState }); } } }, { key: 'dispatch', value: function dispatch(action) { this.setState(function (prevState) { return { localize: (0, _localize.localizeReducer)(prevState.localize, action) }; }); } }, { key: 'render', value: function render() { this.contextProps = this.getContextPropsSelector(this.state.localize); return _react2.default.createElement( _LocalizeContext.LocalizeContext.Provider, { value: this.contextProps }, this.props.children ); } }]); return LocalizeProvider; }(_react.Component); /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Translate = undefined; var _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; }; var _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; }; }(); var _react = __webpack_require__(0); var React = _interopRequireWildcard(_react); var _propTypes = __webpack_require__(8); var _propTypes2 = _interopRequireDefault(_propTypes); var _localize = __webpack_require__(1); var _utils = __webpack_require__(3); var _LocalizeContext = __webpack_require__(2); var _withLocalize = __webpack_require__(5); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function _defineProperty(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; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(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; } function _inherits(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, configurabl