Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Blanked the page
Markierungen: Geleert Zurückgesetzt
Zeile 1: Zeile 1:
/* 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;
    }
  }
});

Version vom 8. August 2025, 13:42 Uhr