i18n: Fix support for ES5 and above

This commit is contained in:
Michael Fabian 'Xaymar' Dirks
2018-11-29 18:48:43 +01:00
parent a2f0659bce
commit 8ee2ea05f3
2 changed files with 38 additions and 30 deletions
+1 -1
View File
@@ -6,7 +6,7 @@
},
"extends": "eslint:recommended",
"parserOptions": {
"ecmaVersion": 2018,
"ecmaVersion": 5,
"sourceType": "module"
},
"rules": {
+37 -29
View File
@@ -1,3 +1,5 @@
'use strict';
/*
Internationalization Class for JavaScript
Copyright (C) 2018 Michael Fabian 'Xaymar' Dirks <info@xaymar.com>
@@ -273,44 +275,50 @@ class I18n {
language = this._sanitizeLanguage(language);
this._verifyData(data);
return new Promise(async (resolve, reject) => {
try {
let json_data;
// Decode File, Blob and string to JSON object.
if ((data instanceof File) || (data instanceof Blob)) {
return new Promise((resolve, reject) => {
// Decode data from various forms.
let decodePromise;
if ((data instanceof File) || (data instanceof Blob)) {
decodePromise = new Promise((fileResolve, fileReject) => {
let freader = new FileReader();
await new Promise((resolve2, reject2) => {
freader.onload(() => {
resolve2();
});
freader.onabort((ev) => {
reject2(ev);
});
freader.onerror((ev) => {
reject2(ev);
});
freader.readAsText(data, encoding);
freader.onload(() => {
fileResolve(JSON.parse(freader.result));
});
json_data = JSON.parse(freader.result);
} else if (typeof (data) == 'string') {
json_data = JSON.parse(data);
} else if (typeof (data) == 'object') {
json_data = data;
}
freader.onabort((ev) => {
fileReject(ev);
});
freader.onerror((ev) => {
fileReject(ev);
});
freader.readAsText(data, encoding);
});
} else if (typeof(data) == 'string') {
decodePromise = new Promise((parseResolve, parseReject) => {
parseReject;
parseResolve(JSON.parse(data));
});
} else if (typeof(data) == 'object') {
decodePromise = new Promise((passResolve, passReject) => {
passReject;
passResolve(data);
});
} else {
reject('invalid data');
}
// Load Data
decodePromise.then((result) => {
let language_map = new Map();
for (let key in json_data) {
language_map.set(key, json_data[key]);
for (let key in result) {
language_map.set(key, result[key]);
}
this.languages.set(language, language_map);
this.dirtyTs = performance.now();
resolve(language);
} catch (e) {
reject(e);
return;
}
}, (reason) => {
reject(reason);
});
});
}