112 lines
3.4 KiB
JavaScript
112 lines
3.4 KiB
JavaScript
|
|
// Get data from server
|
|
export function getData(path,callback) {
|
|
let xhr = new XMLHttpRequest();
|
|
xhr.overrideMimeType("application/json")
|
|
xhr.open('GET', path, true)
|
|
xhr.onreadystatechange = function () {
|
|
if (xhr.readyState == 4 && xhr.status == "200") {
|
|
if (callback !== undefined) {
|
|
callback(xhr.responseText)
|
|
}
|
|
}
|
|
};
|
|
xhr.send()
|
|
}
|
|
|
|
// Parse JSON from given path into a given variable under a given key
|
|
export function getJSON(variable,key,path) {
|
|
getData(path,function(response) {
|
|
// Parse JSON string into object
|
|
variable[key] = JSON.parse(response);
|
|
});
|
|
}
|
|
|
|
export function sendData(route,data,callback) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open("POST", route, true)
|
|
xhr.setRequestHeader('Content-Type', 'application/json')
|
|
xhr.onreadystatechange = function() {
|
|
if(xhr.readyState === XMLHttpRequest.DONE) {
|
|
var status = xhr.status;
|
|
if (status === 0 || (status >= 200 && status < 400)) {
|
|
// The request has been completed successfully
|
|
if (callback !== undefined) {
|
|
callback(xhr.responseText)
|
|
}
|
|
} else {
|
|
callback(false)
|
|
console.log("Request gave an error")
|
|
// Oh no! There has been an error with the request!
|
|
}
|
|
}
|
|
};
|
|
xhr.send(JSON.stringify(data))
|
|
}
|
|
|
|
export function sendText(route,data,callback) {
|
|
var xhr = new XMLHttpRequest();
|
|
xhr.open("POST", route, true)
|
|
xhr.setRequestHeader('Content-Type', 'text/plain')
|
|
xhr.onreadystatechange = function() {
|
|
if(xhr.readyState === XMLHttpRequest.DONE) {
|
|
var status = xhr.status;
|
|
if (status === 0 || (status >= 200 && status < 400)) {
|
|
// The request has been completed successfully
|
|
if (callback !== undefined) {
|
|
callback(xhr.responseText)
|
|
}
|
|
} else {
|
|
callback(false)
|
|
console.log("Request gave an error")
|
|
// Oh no! There has been an error with the request!
|
|
}
|
|
}
|
|
};
|
|
xhr.send(data)
|
|
}
|
|
|
|
function onlyUnique(value, index, array) {
|
|
return array.indexOf(value) === index;
|
|
}
|
|
|
|
export let locales = {
|
|
en: "English",
|
|
ru: "Русский"
|
|
}
|
|
|
|
export function loadLocaleContent(content,componentName,loaded,callback) {
|
|
let locale
|
|
let langs
|
|
let localesAvailable = Object.keys(locales)
|
|
let localeUrl = location.href.split("/").filter(x => localesAvailable.includes(x))
|
|
if (localeUrl.length>0) {
|
|
locale = localeUrl
|
|
}
|
|
else {
|
|
langs = navigator.languages.map(x => x.split("-")[0]).filter(onlyUnique)
|
|
for (let lang of langs) {
|
|
if (localesAvailable.includes(lang)) {
|
|
locale = lang
|
|
}
|
|
break
|
|
}
|
|
if (locale==undefined) {
|
|
locale = "en"
|
|
}
|
|
}
|
|
getData("/locales/" + locale + "/" + componentName + ".json" ,function(response) {
|
|
let parsed = JSON.parse(response)
|
|
if (callback!=undefined) {
|
|
callback(parsed)
|
|
}
|
|
content.update((obj) => {
|
|
Object.assign(obj,parsed)
|
|
return obj
|
|
})
|
|
loaded.update((val) => {
|
|
return val + 1
|
|
})
|
|
})
|
|
return locale
|
|
} |