MediaWiki:Common.js: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
| Zeile 80: | Zeile 80: | ||
} | } | ||
} catch (e) {} | } catch (e) {} | ||
}); | |||
// Anonyme erkennen und Flag auf <html> setzen | |||
mw.loader.using('mediawiki.util', function () { | |||
if (!mw.config.get('wgUserName')) { | |||
document.documentElement.classList.add('bv-anon'); | |||
} | |||
}); | }); | ||
Version vom 8. August 2025, 10:02 Uhr
/* Eigene Sprachleiste: UI-Sprache + PageTranslation-Ziel umschalten */
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () {
// ---- deine Sprachen ----
var LANGS = [
{ code: 'de', label: 'Deutsch' },
{ code: 'en', label: 'English' },
{ code: 'fr', label: 'Français' }
];
if (document.getElementById('custom-langbar')) return;
var userLang = (mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage') || 'de').toLowerCase();
var pageName = mw.config.get('wgPageName');
// Basis-Seitenname ohne evtl. Sprach-Suffix (/en, /fr, /pt-br, …)
var baseTitle = pageName.replace(/\/[a-z]{2}(?:-[a-z]{2})?$/i, '');
// Leiste bauen
var bar = document.createElement('div');
bar.id = 'custom-langbar';
LANGS.forEach(function (lang) {
var a = document.createElement('a');
a.href = '#';
a.textContent = lang.label;
a.dataset.code = lang.code;
if (userLang === lang.code.toLowerCase()) a.className = 'active-lang';
a.addEventListener('click', function (e) {
e.preventDefault();
switchLanguageAndGo(lang.code);
});
bar.appendChild(a);
});
// Unter die Minerva-Header-Bar hängen
var header = document.querySelector('.minerva-header') || document.body;
header.parentNode.insertBefore(bar, header.nextSibling);
// ---- Logik: Sprache setzen + auf Übersetzung springen ----
function targetUrlFor(code) {
// Special:MyLanguage löst auf die passende /lang-Unterseite auf
var title = 'Special:MyLanguage/' + baseTitle;
var url = mw.util.getUrl(title);
// setlang damit Gäste UND eingeloggte sofort die richtige UI sehen
var sep = url.indexOf('?') > -1 ? '&' : '?';
return url + sep + 'setlang=' + encodeURIComponent(code);
}
function switchLanguageAndGo(code) {
code = code.toLowerCase();
// Eingeloggt: Preference setzen, dann auf MyLanguage weiterleiten
if (mw.config.get('wgUserName')) {
new mw.Api().postWithToken('csrf', {
action: 'options',
change: 'language=' + code
}).always(function () {
location.href = targetUrlFor(code);
});
return;
}
// Gäste: direkt mit setlang auf MyLanguage gehen (persistenter als nur uselang)
try { localStorage.setItem('preferredLang', code); } catch (e) {}
location.href = targetUrlFor(code);
}
// Optional: Gästen automatisch ihre zuletzt gewählte Sprache geben
try {
var pref = localStorage.getItem('preferredLang');
if (!mw.config.get('wgUserName') && pref && userLang !== pref.toLowerCase() && !/[?&](?:use|set)lang=/.test(location.search)) {
var auto = targetUrlFor(pref);
// Soft-redirect nur, wenn wir nicht schon auf Special:MyLanguage sind
if (!/^Special:MyLanguage\//i.test(mw.config.get('wgTitle'))) {
location.replace(auto);
}
}
} catch (e) {}
});
// Anonyme erkennen und Flag auf <html> setzen
mw.loader.using('mediawiki.util', function () {
if (!mw.config.get('wgUserName')) {
document.documentElement.classList.add('bv-anon');
}
});