core-resource-app-test
Version:
App that contains assets and scripts for the core apps
443 lines (327 loc) • 15.6 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
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; };
var _logger = require('./logger.js');
var _logger2 = _interopRequireDefault(_logger);
var _EventEmitter2 = require('./EventEmitter.js');
var _EventEmitter3 = _interopRequireDefault(_EventEmitter2);
var _ResourceStore = require('./ResourceStore.js');
var _ResourceStore2 = _interopRequireDefault(_ResourceStore);
var _Translator = require('./Translator.js');
var _Translator2 = _interopRequireDefault(_Translator);
var _LanguageUtils = require('./LanguageUtils.js');
var _LanguageUtils2 = _interopRequireDefault(_LanguageUtils);
var _PluralResolver = require('./PluralResolver.js');
var _PluralResolver2 = _interopRequireDefault(_PluralResolver);
var _Interpolator = require('./Interpolator.js');
var _Interpolator2 = _interopRequireDefault(_Interpolator);
var _BackendConnector = require('./BackendConnector.js');
var _BackendConnector2 = _interopRequireDefault(_BackendConnector);
var _CacheConnector = require('./CacheConnector.js');
var _CacheConnector2 = _interopRequireDefault(_CacheConnector);
var _defaults2 = require('./defaults.js');
var _postProcessor = require('./postProcessor.js');
var _postProcessor2 = _interopRequireDefault(_postProcessor);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _defaults(obj, defaults) { var keys = Object.getOwnPropertyNames(defaults); for (var i = 0; i < keys.length; i++) { var key = keys[i]; var value = Object.getOwnPropertyDescriptor(defaults, key); if (value && value.configurable && obj[key] === undefined) { Object.defineProperty(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, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : _defaults(subClass, superClass); }
function noop() {}
var I18n = function (_EventEmitter) {
_inherits(I18n, _EventEmitter);
function I18n() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var callback = arguments[1];
_classCallCheck(this, I18n);
var _this = _possibleConstructorReturn(this, _EventEmitter.call(this));
_this.options = (0, _defaults2.transformOptions)(options);
_this.services = {};
_this.logger = _logger2.default;
_this.modules = { external: [] };
if (callback && !_this.isInitialized && !options.isClone) {
var _ret;
// https://github.com/i18next/i18next/issues/879
if (!_this.options.initImmediate) return _ret = _this.init(options, callback), _possibleConstructorReturn(_this, _ret);
setTimeout(function () {
_this.init(options, callback);
}, 0);
}
return _this;
}
I18n.prototype.init = function init() {
var _this2 = this;
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var callback = arguments[1];
if (typeof options === 'function') {
callback = options;
options = {};
}
this.options = _extends({}, (0, _defaults2.get)(), this.options, (0, _defaults2.transformOptions)(options));
this.format = this.options.interpolation.format;
if (!callback) callback = noop;
function createClassOnDemand(ClassOrObject) {
if (!ClassOrObject) return null;
if (typeof ClassOrObject === 'function') return new ClassOrObject();
return ClassOrObject;
}
// init services
if (!this.options.isClone) {
if (this.modules.logger) {
_logger2.default.init(createClassOnDemand(this.modules.logger), this.options);
} else {
_logger2.default.init(null, this.options);
}
var lu = new _LanguageUtils2.default(this.options);
this.store = new _ResourceStore2.default(this.options.resources, this.options);
var s = this.services;
s.logger = _logger2.default;
s.resourceStore = this.store;
s.resourceStore.on('added removed', function (lng, ns) {
s.cacheConnector.save();
});
s.languageUtils = lu;
s.pluralResolver = new _PluralResolver2.default(lu, { prepend: this.options.pluralSeparator, compatibilityJSON: this.options.compatibilityJSON, simplifyPluralSuffix: this.options.simplifyPluralSuffix });
s.interpolator = new _Interpolator2.default(this.options);
s.backendConnector = new _BackendConnector2.default(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);
// pipe events from backendConnector
s.backendConnector.on('*', function (event) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
_this2.emit.apply(_this2, [event].concat(args));
});
s.backendConnector.on('loaded', function (loaded) {
s.cacheConnector.save();
});
s.cacheConnector = new _CacheConnector2.default(createClassOnDemand(this.modules.cache), s.resourceStore, s, this.options);
// pipe events from backendConnector
s.cacheConnector.on('*', function (event) {
for (var _len2 = arguments.length, args = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
args[_key2 - 1] = arguments[_key2];
}
_this2.emit.apply(_this2, [event].concat(args));
});
if (this.modules.languageDetector) {
s.languageDetector = createClassOnDemand(this.modules.languageDetector);
s.languageDetector.init(s, this.options.detection, this.options);
}
this.translator = new _Translator2.default(this.services, this.options);
// pipe events from translator
this.translator.on('*', function (event) {
for (var _len3 = arguments.length, args = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
args[_key3 - 1] = arguments[_key3];
}
_this2.emit.apply(_this2, [event].concat(args));
});
this.modules.external.forEach(function (m) {
if (m.init) m.init(_this2);
});
}
// append api
var storeApi = ['getResource', 'addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle', 'hasResourceBundle', 'getResourceBundle'];
storeApi.forEach(function (fcName) {
_this2[fcName] = function () {
var _store;
return (_store = _this2.store)[fcName].apply(_store, arguments);
};
});
var load = function load() {
_this2.changeLanguage(_this2.options.lng, function (err, t) {
_this2.isInitialized = true;
_this2.logger.log('initialized', _this2.options);
_this2.emit('initialized', _this2.options);
callback(err, t);
});
};
if (this.options.resources || !this.options.initImmediate) {
load();
} else {
setTimeout(load, 0);
}
return this;
};
/* eslint consistent-return: 0 */
I18n.prototype.loadResources = function loadResources() {
var _this3 = this;
var callback = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : noop;
if (!this.options.resources) {
if (this.language && this.language.toLowerCase() === 'cimode') return callback(); // avoid loading resources for cimode
var toLoad = [];
var append = function append(lng) {
if (!lng) return;
var lngs = _this3.services.languageUtils.toResolveHierarchy(lng);
lngs.forEach(function (l) {
if (toLoad.indexOf(l) < 0) toLoad.push(l);
});
};
if (!this.language) {
// at least load fallbacks in this case
var fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);
fallbacks.forEach(function (l) {
return append(l);
});
} else {
append(this.language);
}
if (this.options.preload) {
this.options.preload.forEach(function (l) {
return append(l);
});
}
this.services.cacheConnector.load(toLoad, this.options.ns, function () {
_this3.services.backendConnector.load(toLoad, _this3.options.ns, callback);
});
} else {
callback(null);
}
};
I18n.prototype.reloadResources = function reloadResources(lngs, ns) {
if (!lngs) lngs = this.languages;
if (!ns) ns = this.options.ns;
this.services.backendConnector.reload(lngs, ns);
};
I18n.prototype.use = function use(module) {
if (module.type === 'backend') {
this.modules.backend = module;
}
if (module.type === 'cache') {
this.modules.cache = module;
}
if (module.type === 'logger' || module.log && module.warn && module.error) {
this.modules.logger = module;
}
if (module.type === 'languageDetector') {
this.modules.languageDetector = module;
}
if (module.type === 'postProcessor') {
_postProcessor2.default.addPostProcessor(module);
}
if (module.type === '3rdParty') {
this.modules.external.push(module);
}
return this;
};
I18n.prototype.changeLanguage = function changeLanguage(lng, callback) {
var _this4 = this;
var done = function done(err, l) {
_this4.translator.changeLanguage(l);
if (l) {
_this4.emit('languageChanged', l);
_this4.logger.log('languageChanged', l);
}
if (callback) callback(err, function () {
return _this4.t.apply(_this4, arguments);
});
};
var setLng = function setLng(l) {
if (l) {
_this4.language = l;
_this4.languages = _this4.services.languageUtils.toResolveHierarchy(l);
if (_this4.services.languageDetector) _this4.services.languageDetector.cacheUserLanguage(l);
}
_this4.loadResources(function (err) {
done(err, l);
});
};
if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {
setLng(this.services.languageDetector.detect());
} else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {
this.services.languageDetector.detect(setLng);
} else {
setLng(lng);
}
};
I18n.prototype.getFixedT = function getFixedT(lng, ns) {
var _this5 = this;
var fixedT = function fixedT(key, opts) {
for (var _len4 = arguments.length, rest = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) {
rest[_key4 - 2] = arguments[_key4];
}
var options = _extends({}, opts);
if ((typeof opts === 'undefined' ? 'undefined' : _typeof(opts)) !== 'object') {
options = _this5.options.overloadTranslationOptionHandler([key, opts].concat(rest));
}
options.lng = options.lng || fixedT.lng;
options.lngs = options.lngs || fixedT.lngs;
options.ns = options.ns || fixedT.ns;
return _this5.t(key, options);
};
if (typeof lng === 'string') {
fixedT.lng = lng;
} else {
fixedT.lngs = lng;
}
fixedT.ns = ns;
return fixedT;
};
I18n.prototype.t = function t() {
var _translator;
return this.translator && (_translator = this.translator).translate.apply(_translator, arguments);
};
I18n.prototype.exists = function exists() {
var _translator2;
return this.translator && (_translator2 = this.translator).exists.apply(_translator2, arguments);
};
I18n.prototype.setDefaultNamespace = function setDefaultNamespace(ns) {
this.options.defaultNS = ns;
};
I18n.prototype.loadNamespaces = function loadNamespaces(ns, callback) {
var _this6 = this;
if (!this.options.ns) return callback && callback();
if (typeof ns === 'string') ns = [ns];
ns.forEach(function (n) {
if (_this6.options.ns.indexOf(n) < 0) _this6.options.ns.push(n);
});
this.loadResources(callback);
};
I18n.prototype.loadLanguages = function loadLanguages(lngs, callback) {
if (typeof lngs === 'string') lngs = [lngs];
var preloaded = this.options.preload || [];
var newLngs = lngs.filter(function (lng) {
return preloaded.indexOf(lng) < 0;
});
// Exit early if all given languages are already preloaded
if (!newLngs.length) return callback();
this.options.preload = preloaded.concat(newLngs);
this.loadResources(callback);
};
I18n.prototype.dir = function dir(lng) {
if (!lng) lng = this.languages && this.languages.length > 0 ? this.languages[0] : this.language;
if (!lng) return 'rtl';
var rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam'];
return rtlLngs.indexOf(this.services.languageUtils.getLanguagePartFromCode(lng)) >= 0 ? 'rtl' : 'ltr';
};
/* eslint class-methods-use-this: 0 */
I18n.prototype.createInstance = function createInstance() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var callback = arguments[1];
return new I18n(options, callback);
};
I18n.prototype.cloneInstance = function cloneInstance() {
var _this7 = this;
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var callback = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : noop;
var mergedOptions = _extends({}, this.options, options, { isClone: true });
var clone = new I18n(mergedOptions);
var membersToCopy = ['store', 'services', 'language'];
membersToCopy.forEach(function (m) {
clone[m] = _this7[m];
});
clone.translator = new _Translator2.default(clone.services, clone.options);
clone.translator.on('*', function (event) {
for (var _len5 = arguments.length, args = Array(_len5 > 1 ? _len5 - 1 : 0), _key5 = 1; _key5 < _len5; _key5++) {
args[_key5 - 1] = arguments[_key5];
}
clone.emit.apply(clone, [event].concat(args));
});
clone.init(mergedOptions, callback);
clone.translator.options = clone.options; // sync options
return clone;
};
return I18n;
}(_EventEmitter3.default);
exports.default = new I18n();