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; | ||
p.querySelectorAll(".langs-in").forEach((e) => { | |||
if ( | if (e == this.element) { | ||
e.style.display = "block"; | |||
} else | } 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"; | |||
document. | let tabs = []; | ||
for (let i = 0; i < langs.children.length; i++) { | |||
tabs.push(new LanguageTab(langs.children[i])); | |||
let | } | ||
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(); | |||
}); | |||
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();
});