| Current Path : /home/kamilrogam/poligon/projekty/jsLang/assets/ |
| Current File : /home/kamilrogam/poligon/projekty/jsLang/assets/jsLang.js |
const jsLang = function (complexMode = 'false', options) {
const langTriggerContainer = document.createElement('div');
langTriggerContainer.classList += 'jsLang lang-container';
if (options == undefined || options.languages === undefined) {
langTriggerContainer.innerHTML = '<button type="button" class="btn btn-lang btn-EN">EN</button><button type="button" class="btn btn-lang btn-PL">PL</button>';
} else {
options.languages.forEach(function (singleLanguage) {
langTriggerContainer.innerHTML += '<button type="button" class="btn btn-lang btn-' + singleLanguage.toUpperCase() + '">' + singleLanguage.toUpperCase() + '</button>';
});
}
document.body.appendChild(langTriggerContainer);
let docLang;
if (docLang == null) {
docLang = navigator.language;
if (docLang == undefined) {
docLang = 'en';
}
} else {
docLang = document.querySelector('html').getAttribute('lang').toLowerCase();
}
let jsLangBtns = document.querySelectorAll('.jsLang button');
const jsLangTrigger = function (newLang) {
let langFileUrl = 'assets/jsLang-' + newLang.toUpperCase() + '.json';
function Get(langFileUrl) {
HttpReq = new XMLHttpRequest();
HttpReq.open("GET", langFileUrl, false);
HttpReq.send(null);
return HttpReq.responseText;
}
let jsonPhrase = JSON.parse(Get(langFileUrl));
let allTextElements = document.querySelectorAll('[data-jslang-txt]');
let allHrefElements = document.querySelectorAll('[data-jslang-href]');
let allTitleElements = document.querySelectorAll('[data-jslang-title]');
let allAltElements = document.querySelectorAll('[data-jslang-alt]');
let allImgElements = document.querySelectorAll('[data-jslang-src]');
allTextElements.forEach(function (item) {
itemLangID = [];
itemLangID.push(item.getAttribute('data-jslang-txt'));
try {
item.innerHTML = jsonPhrase.text[itemLangID].content;
} catch (e) {
console.error('Broken data for element: data-jslang-txt, ID:' + item.getAttribute('data-jslang-txt') + '\n in file:' + langFileUrl);
}
});
allHrefElements.forEach(function (item) {
itemLangID = [];
itemLangID.push(item.getAttribute('data-jslang-href'));
try {
langPhrase = jsonPhrase.href[itemLangID].content;
item.setAttribute('href', langPhrase);
} catch (e) {
console.error('Broken data for element: data-jslang-href, ID:' + item.getAttribute('data-jslang-href') + '\n in file:' + langFileUrl);
}
});
allTitleElements.forEach(function (item) {
itemLangID = [];
itemLangID.push(item.getAttribute('data-jslang-title'));
try {
langPhrase = jsonPhrase.title[itemLangID].content;
item.setAttribute('title', langPhrase);
} catch (e) {
console.error('Broken data for element: data-jslang-title, ID:' + item.getAttribute('data-jslang-title') + '\n in file:' + langFileUrl);
}
});
allAltElements.forEach(function (item) {
itemLangID = [];
itemLangID.push(item.getAttribute('data-jslang-alt'));
try {
langPhrase = jsonPhrase.alt[itemLangID].content;
item.setAttribute('alt', langPhrase);
} catch (e) {
console.error('Broken data for element: data-jslang-alt, ID:' + item.getAttribute('data-jslang-alt') + '\n in file:' + langFileUrl);
}
});
allImgElements.forEach(function (item) {
itemLangID = [];
itemLangID.push(item.getAttribute('data-jslang-src'));
try {
langPhrase = jsonPhrase.src[itemLangID].content;
item.setAttribute('src', langPhrase);
} catch (e) {
console.error('Broken data for element: data-jslang-src, ID:' + item.getAttribute('data-jslang-src') + '\n in file:' + langFileUrl);
}
});
let regBody = new RegExp('\\bjsLang(.*)?\\b', 'g');
document.body.className = document.body.className.replace(regBody, '');
document.body.classList.add('jsLang-' + newLang.toUpperCase());
document.title = jsonPhrase.navTitle;
document.querySelector('html').setAttribute('lang', newLang.toLowerCase());
}
jsLangBtns.forEach(function (jsLangBtn) {
jsLangBtn.addEventListener('click', function () {
jsLangTrigger(this.innerText.toLowerCase());
window.localStorage.setItem('jsLang', this.innerText.toLowerCase());
});
});
if (complexMode) {
jsLangTrigger(docLang);
}
if (window.localStorage.getItem('jsLang')) {
if (!complexMode) {
document.body.classList += ' jsLang-' + window.localStorage.getItem('jsLang').toUpperCase();
}
if (window.localStorage.getItem('jsLang') !== docLang) {
jsLangTrigger(window.localStorage.getItem('jsLang'));
}
} else {
window.localStorage.setItem('jsLang', docLang);
}
const comment = document.createComment('jsLang by KamilRogala.IT');
document.body.appendChild(comment);
}