123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- (function (global, factory) {
- typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :
- typeof define === 'function' && define.amd ? define(factory) :
- (global.i18nextXHRBackend = factory());
- }(this, (function () { 'use strict';
- var arr = [];
- var each = arr.forEach;
- var slice = arr.slice;
- function defaults(obj) {
- each.call(slice.call(arguments, 1), function (source) {
- if (source) {
- for (var prop in source) {
- if (obj[prop] === undefined) obj[prop] = source[prop];
- }
- }
- });
- return obj;
- }
- 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; };
- function addQueryString(url, params) {
- if (params && (typeof params === 'undefined' ? 'undefined' : _typeof(params)) === 'object') {
- var queryString = '',
- e = encodeURIComponent;
- // Must encode data
- for (var paramName in params) {
- queryString += '&' + e(paramName) + '=' + e(params[paramName]);
- }
- if (!queryString) {
- return url;
- }
- url = url + (url.indexOf('?') !== -1 ? '&' : '?') + queryString.slice(1);
- }
- return url;
- }
- // https://gist.github.com/Xeoncross/7663273
- function ajax(url, options, callback, data, cache) {
- if (data && (typeof data === 'undefined' ? 'undefined' : _typeof(data)) === 'object') {
- if (!cache) {
- data['_t'] = new Date();
- }
- // URL encoded form data must be in querystring format
- data = addQueryString('', data).slice(1);
- }
- if (options.queryStringParams) {
- url = addQueryString(url, options.queryStringParams);
- }
- try {
- var x;
- if (XMLHttpRequest) {
- x = new XMLHttpRequest();
- } else {
- x = new ActiveXObject('MSXML2.XMLHTTP.3.0');
- }
- x.open(data ? 'POST' : 'GET', url, 1);
- if (!options.crossDomain) {
- x.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
- }
- x.withCredentials = !!options.withCredentials;
- if (data) {
- x.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
- }
- if (x.overrideMimeType) {
- x.overrideMimeType("application/json");
- }
- var h = options.customHeaders;
- if (h) {
- for (var i in h) {
- x.setRequestHeader(i, h[i]);
- }
- }
- x.onreadystatechange = function () {
- x.readyState > 3 && callback && callback(x.responseText, x);
- };
- x.send(data);
- } catch (e) {
- console && console.log(e);
- }
- }
- 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; }; }();
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
- function getDefaults() {
- return {
- loadPath: '/locales/{{lng}}/{{ns}}.json',
- addPath: '/locales/add/{{lng}}/{{ns}}',
- allowMultiLoading: false,
- parse: JSON.parse,
- crossDomain: false,
- ajax: ajax
- };
- }
- var Backend = function () {
- function Backend(services) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- _classCallCheck(this, Backend);
- this.init(services, options);
- this.type = 'backend';
- }
- _createClass(Backend, [{
- key: 'init',
- value: function init(services) {
- var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- this.services = services;
- this.options = defaults(options, this.options || {}, getDefaults());
- }
- }, {
- key: 'readMulti',
- value: function readMulti(languages, namespaces, callback) {
- var loadPath = this.options.loadPath;
- if (typeof this.options.loadPath === 'function') {
- loadPath = this.options.loadPath(languages, namespaces);
- }
- var url = this.services.interpolator.interpolate(loadPath, { lng: languages.join('+'), ns: namespaces.join('+') });
- this.loadUrl(url, callback);
- }
- }, {
- key: 'read',
- value: function read(language, namespace, callback) {
- var loadPath = this.options.loadPath;
- if (typeof this.options.loadPath === 'function') {
- loadPath = this.options.loadPath([language], [namespace]);
- }
- var url = this.services.interpolator.interpolate(loadPath, { lng: language, ns: namespace });
- this.loadUrl(url, callback);
- }
- }, {
- key: 'loadUrl',
- value: function loadUrl(url, callback) {
- var _this = this;
- this.options.ajax(url, this.options, function (data, xhr) {
- if (xhr.status >= 500 && xhr.status < 600) return callback('failed loading ' + url, true /* retry */);
- if (xhr.status >= 400 && xhr.status < 500) return callback('failed loading ' + url, false /* no retry */);
- var ret = void 0,
- err = void 0;
- try {
- ret = _this.options.parse(data, url);
- } catch (e) {
- err = 'failed parsing ' + url + ' to json';
- }
- if (err) return callback(err, false);
- callback(null, ret);
- });
- }
- }, {
- key: 'create',
- value: function create(languages, namespace, key, fallbackValue) {
- var _this2 = this;
- if (typeof languages === 'string') languages = [languages];
- var payload = {};
- payload[key] = fallbackValue || '';
- languages.forEach(function (lng) {
- var url = _this2.services.interpolator.interpolate(_this2.options.addPath, { lng: lng, ns: namespace });
- _this2.options.ajax(url, _this2.options, function (data, xhr) {
- //const statusCode = xhr.status.toString();
- // TODO: if statusCode === 4xx do log
- }, payload);
- });
- }
- }]);
- return Backend;
- }();
- Backend.type = 'backend';
- return Backend;
- })));
|