MediaWiki:Gadget-langs.js: Difference between revisions

Created page with ""use strict" class LanguageTab { constructor(element) { this.element = element; this.lang = element.lang; let nameElement = element.querySelector(".langs-language-name"); this.langName = nameElement.innerText; nameElement.remove(); } select() { let p = this.element.parentElement; for (let i = 0; i < p.children.length; i++) { if (p.children[i] == this.element) { p.children[i].style.display = "block"; } else if (p.children[i].classList.contains(..."
 
No edit summary
 
(8 intermediate revisions by the same user not shown)
Line 11: Line 11:
select() {
select() {
let p = this.element.parentElement;
let p = this.element.parentElement;
for (let i = 0; i < p.children.length; i++) {
p.querySelectorAll(".langs-in").forEach((e) => {
if (p.children[i] == this.element) {
if (e == this.element) {
p.children[i].style.display = "block";
e.style.display = "block";
} else if (p.children[i].classList.contains("langs-in")) {
} else {
p.children[i].style.display = "none";
e.style.display = "none";
}
}
}
});
let tabs = p.querySelector(".langs-tabs");
tabs.querySelectorAll(".langs-tab-selected").forEach((e) => {
e.classList.remove("langs-tab-selected");
});
this.tabElement.classList.add("langs-tab-selected");
}
}
}
}


let hideElements = document.createElement("style");
document.querySelectorAll(".langs").forEach(langs => {
hideElements.innerHTML = ".langs {display: none;}"
langs.style.display = "block";
document.head.appendChild(hideElements);
let tabs = [];
window.onload = () => {
for (let i = 0; i < langs.children.length; i++) {
document.querySelectorAll(".langs").forEach(langs => {
tabs.push(new LanguageTab(langs.children[i]));
let tabs = [];
}
for (let i = 0; i < langs.children.length; i++) {
if (tabs.length == 0) return;
tabs.push(new LanguageTab(langs.children[i]));
let firstTab = tabs[0];
tabs.sort((a, b) => a.langName.localeCompare(b.langName));
let tabsContainer = document.createElement("div");
langs.insertAdjacentElement('afterbegin', tabsContainer);
tabsContainer.className = "langs-tabs";
for (let i = 0; i < tabs.length; i++) {
let tab = tabs[i];
let tabElement = document.createElement("span");
tabElement.className = "langs-tab";
tabElement.innerText = tab.langName;
tabElement.onclick = () => {
tab.select();
};
tab.tabElement = tabElement;
tabsContainer.appendChild(tabElement);
}
let hasUserLanguage = false;
for (let i = 0; i < tabs.length; i++) {
if (tabs[i].lang == mw.config.get("wgUserLanguage")) {
hasUserLanguage = true;
tabs[i].select();
}
}
if (tabs.length == 0) return;
}
let firstTab = tabs[0];
if (!hasUserLanguage) firstTab.select();
tabs.sort((a, b) => a.langName.localeCompare(b.langName));
});
let tabsContainer = document.createElement("div");
langs.insertAdjacentElement('afterbegin', tabsContainer);
tabsContainer.className = "langs-tabs";
for (let i = 0; i < tabs.length; i++) {
let tab = tabs[i];
let tabElement = document.createElement("span");
tabElement.className = "langs-tab";
tabElement.innerText = tab.langName;
tabElement.onclick = () => {
tab.select();
};
tabsContainer.appendChild(tabElement);
}
let hasUserLanguage = false;
for (let i = 0; i < tabs.length; i++) {
if (tabs[i].lang == "en") {
hasUserLanguage = true;
tabs[i].select();
}
}
if (!hasUserLanguage) firstTab.select();
});
hideElements.remove();
};

Latest revision as of 05:25, 18 September 2025

"use strict"

class LanguageTab {
	constructor(element) {
		this.element = element;
		this.lang = element.lang;
		let nameElement = element.querySelector(".langs-language-name");
		this.langName = nameElement.innerText;
		nameElement.remove();
	}
	select() {
		let p = this.element.parentElement;
		p.querySelectorAll(".langs-in").forEach((e) => {
			if (e == this.element) {
				e.style.display = "block";
			} else {
				e.style.display = "none";
			}
		});
		let tabs = p.querySelector(".langs-tabs");
		tabs.querySelectorAll(".langs-tab-selected").forEach((e) => {
			e.classList.remove("langs-tab-selected");
		});
		this.tabElement.classList.add("langs-tab-selected");
	}
}

document.querySelectorAll(".langs").forEach(langs => {
	langs.style.display = "block";
	let tabs = [];
	for (let i = 0; i < langs.children.length; i++) {
		tabs.push(new LanguageTab(langs.children[i]));
	}
	if (tabs.length == 0) return;
	let firstTab = tabs[0];
	tabs.sort((a, b) => a.langName.localeCompare(b.langName));
	let tabsContainer = document.createElement("div");
	langs.insertAdjacentElement('afterbegin', tabsContainer);
	tabsContainer.className = "langs-tabs";
	for (let i = 0; i < tabs.length; i++) {
		let tab = tabs[i];
		let tabElement = document.createElement("span");
		tabElement.className = "langs-tab";
		tabElement.innerText = tab.langName;
		tabElement.onclick = () => {
			tab.select();
		};
		tab.tabElement = tabElement;
		tabsContainer.appendChild(tabElement);
	}
	let hasUserLanguage = false;
	for (let i = 0; i < tabs.length; i++) {
		if (tabs[i].lang == mw.config.get("wgUserLanguage")) {
			hasUserLanguage = true;
			tabs[i].select();
		}
	}
	if (!hasUserLanguage) firstTab.select();
});