Your IP : 216.73.216.76


Current Path : /home/kamilrogam/poligon/projekty/jsLang/assets/
Upload File :
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);

}