MediaWiki:Common.js: Unterschied zwischen den Versionen
Änderung 377 von Beeventionmanual (Diskussion) rückgängig gemacht. Markierungen: Rückgängigmachung Zurückgesetzt |
Keine Bearbeitungszusammenfassung Markierung: Zurückgesetzt |
||
| Zeile 1: | Zeile 1: | ||
/* Eigene Sprachleiste: UI-Sprache + PageTranslation-Ziel umschalten */ | /* Eigene Sprachleiste: UI-Sprache + PageTranslation-Ziel umschalten (immer Content-Sprache nutzen) */ | ||
mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { | mw.loader.using(['mediawiki.util', 'mediawiki.api'], function () { | ||
// ---- deine Sprachen ---- | // ---- deine Sprachen ---- | ||
| Zeile 28: | Zeile 8: | ||
{ code: 'fr', label: 'Français' } | { code: 'fr', label: 'Français' } | ||
]; | ]; | ||
var userLang = (mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage') || 'de').toLowerCase(); | var userLang = (mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage') || 'de').toLowerCase(); | ||
var pageName = mw.config.get('wgPageName'); | var pageName = mw.config.get('wgPageName'); | ||
var baseTitle = pageName.replace(/\/[a-z]{2}(?:-[a-z]{2})?$/i, ''); | |||
// | // === Automatische Weiterleitung auf Content-Sprache (ULS) === | ||
if (mw.config.get('wgAction') === 'view') { | |||
var currentSuffix = (pageName.match(/\/([a-z]{2}(?:-[a-z]{2})?)$/i) || [])[1]; | |||
if (currentSuffix !== userLang) { | |||
location.replace(mw.util.getUrl(baseTitle + '/' + userLang)); | |||
return; // Rest erst nach Redirect | |||
} | |||
} | |||
// ============================================================ | |||
// Wenn bereits eine Leiste existiert, nichts tun | |||
if (document.getElementById('custom-langbar')) return; | |||
// Leiste bauen | // Leiste bauen | ||
| Zeile 46: | Zeile 35: | ||
a.textContent = lang.label; | a.textContent = lang.label; | ||
a.dataset.code = lang.code; | a.dataset.code = lang.code; | ||
if (userLang === lang.code.toLowerCase()) a.className = 'active-lang'; | if (userLang === lang.code.toLowerCase()) a.className = 'active-lang'; | ||
a.addEventListener('click', function (e) { | a.addEventListener('click', function (e) { | ||
e.preventDefault(); | e.preventDefault(); | ||
switchLanguageAndGo(lang.code); | switchLanguageAndGo(lang.code); | ||
}); | }); | ||
bar.appendChild(a); | bar.appendChild(a); | ||
}); | }); | ||
| Zeile 61: | Zeile 47: | ||
header.parentNode.insertBefore(bar, header.nextSibling); | header.parentNode.insertBefore(bar, header.nextSibling); | ||
// ---- Logik: Sprache setzen + auf | // ---- Logik: Sprache setzen + auf Übersetzungsunterseite springen ---- | ||
function switchLanguageAndGo(code) { | function switchLanguageAndGo(code) { | ||
code = code.toLowerCase(); | code = code.toLowerCase(); | ||
var target = baseTitle + '/' + code; | |||
if (mw.config.get('wgUserName')) { | if (mw.config.get('wgUserName')) { | ||
new mw.Api().postWithToken('csrf', { | new mw.Api().postWithToken('csrf', { | ||
| Zeile 80: | Zeile 57: | ||
change: 'language=' + code | change: 'language=' + code | ||
}).always(function () { | }).always(function () { | ||
location.href = | location.href = mw.util.getUrl(target); | ||
}); | }); | ||
return; | return; | ||
} | } | ||
try { localStorage.setItem('preferredLang', code); } catch (e) {} | try { localStorage.setItem('preferredLang', code); } catch (e) {} | ||
location.href = | location.href = mw.util.getUrl(target); | ||
} | } | ||
| Zeile 98: | Zeile 74: | ||
if (!mw.config.get('wgUserName')) { | if (!mw.config.get('wgUserName')) { | ||
var ns = mw.config.get('wgNamespaceNumber'); | var ns = mw.config.get('wgNamespaceNumber'); | ||
if (ns % 2 === 1) { | if (ns % 2 === 1) { | ||
var subjectUrl = mw.util.getUrl(mw.config.get('wgPageName').replace(/^Talk:/, '')); | var subjectUrl = mw.util.getUrl(mw.config.get('wgPageName').replace(/^Talk:/, '')); | ||
window.location.href = subjectUrl; | window.location.href = subjectUrl; | ||
Version vom 8. August 2025, 12:05 Uhr
/* Eigene Sprachleiste: UI-Sprache + PageTranslation-Ziel umschalten (immer Content-Sprache nutzen) */
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' }
];
var userLang = (mw.config.get('wgUserLanguage') || mw.config.get('wgContentLanguage') || 'de').toLowerCase();
var pageName = mw.config.get('wgPageName');
var baseTitle = pageName.replace(/\/[a-z]{2}(?:-[a-z]{2})?$/i, '');
// === Automatische Weiterleitung auf Content-Sprache (ULS) ===
if (mw.config.get('wgAction') === 'view') {
var currentSuffix = (pageName.match(/\/([a-z]{2}(?:-[a-z]{2})?)$/i) || [])[1];
if (currentSuffix !== userLang) {
location.replace(mw.util.getUrl(baseTitle + '/' + userLang));
return; // Rest erst nach Redirect
}
}
// ============================================================
// Wenn bereits eine Leiste existiert, nichts tun
if (document.getElementById('custom-langbar')) return;
// 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 Übersetzungsunterseite springen ----
function switchLanguageAndGo(code) {
code = code.toLowerCase();
var target = baseTitle + '/' + code;
if (mw.config.get('wgUserName')) {
new mw.Api().postWithToken('csrf', {
action: 'options',
change: 'language=' + code
}).always(function () {
location.href = mw.util.getUrl(target);
});
return;
}
try { localStorage.setItem('preferredLang', code); } catch (e) {}
location.href = mw.util.getUrl(target);
}
// Anonyme erkennen und Flag auf <html> setzen
if (!mw.config.get('wgUserName')) {
document.documentElement.classList.add('bv-anon');
}
// Gäste nicht auf Diskussionsseiten lassen → auf Inhaltsseite umleiten
if (!mw.config.get('wgUserName')) {
var ns = mw.config.get('wgNamespaceNumber');
if (ns % 2 === 1) {
var subjectUrl = mw.util.getUrl(mw.config.get('wgPageName').replace(/^Talk:/, ''));
window.location.href = subjectUrl;
}
}
});