Zum Inhalt springen

MediaWiki:Common.js: Unterschied zwischen den Versionen

Aus Pixopedia
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 1: Zeile 1:
mw.loader.using( 'mediawiki.util', function () {
mw.loader.using( 'mediawiki.util', function () {


  // 1. Theme aus Cookie lesen
   function getTheme() {
   function getTheme() {
     var m = document.cookie.match(/(^|;\s*)pixoTheme=(dark|light)/);
     var m = document.cookie.match(/(^|;\s*)pixoTheme=(dark|light)/);
Zeile 7: Zeile 6:
   }
   }


  // 2. Theme auf <html> anwenden
   function applyTheme(theme) {
   function applyTheme(theme) {
     var html = document.documentElement;
     var html = document.documentElement;
Zeile 14: Zeile 12:
   }
   }


  // 3. Theme setzen + Cookie schreiben (1 Jahr gültig)
   function setTheme(theme) {
   function setTheme(theme) {
     document.cookie = 'pixoTheme=' + theme +
     document.cookie = 'pixoTheme=' + theme +
       '; path=/; max-age=' + (60 * 60 * 24 * 365);
       '; path=/; max-age=' + (60 * 60 * 24 * 365);
     applyTheme(theme);
     applyTheme(theme);
     updateLabel(theme);
     updateDropdown(theme);
   }
   }


  // 4. Label des Schalters aktualisieren
   function updateDropdown(theme) {
   function updateLabel(theme) {
     var label = document.querySelector('[data-identifier="theme-dropdown-label"]');
     var el = document.getElementById('pixo-theme-toggle');
     if (!label) return;
     if (!el) return;
     label.textContent = (theme === 'dark') ? 'Dark' : 'Light';
     el.textContent = theme === 'dark' ? '☀ Design (hell)' : '🌙 Design (dunkel)';
   }
   }


   // 5. Start-Theme bestimmen (Cookie oder Standard)
   // Start-Theme: Cookie oder Default
   var theme = getTheme() || 'dark';   // Standard: dunkel
   var theme = getTheme() || 'dark';
   applyTheme(theme);
   applyTheme(theme);


   // 6. Toggle-Button oben ins Benutzer-Menü / Kopfbereich einfügen
   // In den Header einhängen (Vector 2022)
   var personal = document.getElementById('p-personal') ||
   var header = document.querySelector('.vector-header-container .vector-header-start');
                document.getElementById('vector-user-links');
  if (!header) header = document.querySelector('.vector-header-container');


   if (personal) {
   if (header) {
     var ul = personal.querySelector('ul') || personal;
     var wrapper = document.createElement('div');
     var li = document.createElement('li');
     wrapper.className = 'pixo-theme-dropdown';
     li.id = 'pt-pixo-theme';
     wrapper.setAttribute('data-identifier', 'theme-dropdown');


     var a = document.createElement('a');
     wrapper.innerHTML = '' +
    a.id = 'pixo-theme-toggle';
      '<button class="pixo-theme-button" type="button">' +
    a.href = '#';
        '<span data-identifier="theme-dropdown-label"></span> ▾' +
    a.onclick = function (e) {
       '</button>' +
       e.preventDefault();
       '<div class="pixo-theme-menu">' +
       setTheme(theme === 'dark' ? 'light' : 'dark');
        '<button type="button" data-theme-value="light">Light</button>' +
      theme = (theme === 'dark') ? 'light' : 'dark';
        '<button type="button" data-theme-value="dark">Dark</button>' +
    };
      '</div>';


     li.appendChild(a);
     header.appendChild(wrapper);
     ul.appendChild(li);
 
     updateLabel(theme);
     // Klick-Logik
    var btn = wrapper.querySelector('.pixo-theme-button');
    var menu = wrapper.querySelector('.pixo-theme-menu');
 
    btn.addEventListener('click', function () {
      menu.classList.toggle('is-open');
    });
 
    menu.addEventListener('click', function (e) {
      if (e.target.dataset.themeValue) {
        theme = e.target.dataset.themeValue;
        setTheme(theme);
        menu.classList.remove('is-open');
      }
    });
 
    // Label initial setzen
     updateDropdown(theme);
   }
   }
});
});

Version vom 12. Februar 2026, 05:09 Uhr

mw.loader.using( 'mediawiki.util', function () {

  function getTheme() {
    var m = document.cookie.match(/(^|;\s*)pixoTheme=(dark|light)/);
    return m ? m[2] : null;
  }

  function applyTheme(theme) {
    var html = document.documentElement;
    html.classList.remove('theme-dark', 'theme-light');
    html.classList.add('theme-' + theme);
  }

  function setTheme(theme) {
    document.cookie = 'pixoTheme=' + theme +
      '; path=/; max-age=' + (60 * 60 * 24 * 365);
    applyTheme(theme);
    updateDropdown(theme);
  }

  function updateDropdown(theme) {
    var label = document.querySelector('[data-identifier="theme-dropdown-label"]');
    if (!label) return;
    label.textContent = (theme === 'dark') ? 'Dark' : 'Light';
  }

  // Start-Theme: Cookie oder Default
  var theme = getTheme() || 'dark';
  applyTheme(theme);

  // In den Header einhängen (Vector 2022)
  var header = document.querySelector('.vector-header-container .vector-header-start');
  if (!header) header = document.querySelector('.vector-header-container');

  if (header) {
    var wrapper = document.createElement('div');
    wrapper.className = 'pixo-theme-dropdown';
    wrapper.setAttribute('data-identifier', 'theme-dropdown');

    wrapper.innerHTML = '' +
      '<button class="pixo-theme-button" type="button">' +
        '<span data-identifier="theme-dropdown-label"></span> ▾' +
      '</button>' +
      '<div class="pixo-theme-menu">' +
        '<button type="button" data-theme-value="light">Light</button>' +
        '<button type="button" data-theme-value="dark">Dark</button>' +
      '</div>';

    header.appendChild(wrapper);

    // Klick-Logik
    var btn = wrapper.querySelector('.pixo-theme-button');
    var menu = wrapper.querySelector('.pixo-theme-menu');

    btn.addEventListener('click', function () {
      menu.classList.toggle('is-open');
    });

    menu.addEventListener('click', function (e) {
      if (e.target.dataset.themeValue) {
        theme = e.target.dataset.themeValue;
        setTheme(theme);
        menu.classList.remove('is-open');
      }
    });

    // Label initial setzen
    updateDropdown(theme);
  }
});