MediaWiki:Gadget-langs.js

Revision as of 04:24, 18 September 2025 by Raven (talk | contribs) (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(...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
"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("langs-in")) {
				p.children[i].style.display = "none";
			}
		}
	}
}

let hideElements = document.createElement("style");
hideElements.innerHTML = ".langs {display: none;}"
document.head.appendChild(hideElements);
window.onload = () => {
	document.querySelectorAll(".langs").forEach(langs => {
		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();
			};
			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();
};