MediaWiki:Common.js: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Markierung: Zurückgesetzt
Keine Bearbeitungszusammenfassung
Markierung: Manuelle Zurücksetzung
Zeile 1.245: Zeile 1.245:


// ============================================================
// ============================================================
(function(){
  if (!window.mw) return;
  function setOn(on){
    document.body.classList.toggle('halloween-on', !!on);
    try { localStorage.setItem('adosHalloween', on ? '1':'0'); } catch(e){}
    // Optional: „Only Halloween“-Banner steuern (falls vorhanden)
    var hh = document.querySelector('.only-halloween');
    if (hh) hh.style.display = on ? '' : 'none';
  }
  function isOct31(){
    try {
      const now = new Date();
      const fmt = new Intl.DateTimeFormat('de-DE', { timeZone: 'Europe/Berlin', month:'numeric', day:'numeric' });
      const parts = fmt.formatToParts(now);
      const m = +parts.find(p=>p.type==='month').value;
      const d = +parts.find(p=>p.type==='day').value;
      return (m===10 && d===31);
    } catch(e){ return false; }
  }
  // URL-Override ?halloween=on/off
  const params = new URLSearchParams(location.search);
  const force = params.get('halloween');
  // Local preference
  let saved = null;
  try { saved = localStorage.getItem('adosHalloween'); } catch(e){}
  let enable = false;
  if (force === 'on') enable = true;
  else if (force === 'off') enable = false;
  else if (saved === '1') enable = true;
  else if (saved === '0') enable = false;
  else enable = isOct31();
  function addToggle(){
    // kleiner Toggle-Link in Vector (Personal-Menü) oder Minerva (Footer)
    const btn = document.createElement('a');
    btn.id = 'pt-halloween-toggle';
    btn.href = '#';
    btn.textContent = document.body.classList.contains('halloween-on') ? '🎃 Halloween an' : '🎃 Halloween aus';
    btn.addEventListener('click', function(ev){
      ev.preventDefault();
      const on = !document.body.classList.contains('halloween-on');
      setOn(on);
      btn.textContent = on ? '🎃 Halloween an' : '🎃 Halloween aus';
    });
    const vector = document.getElementById('p-personal');
    const minervaFooter = document.querySelector('.minerva-footer') || document.querySelector('#footer');
    if (vector && vector.querySelector('ul')) {
      const li = document.createElement('li');
      li.appendChild(btn);
      vector.querySelector('ul').appendChild(li);
    } else if (minervaFooter) {
      const wrap = document.createElement('div');
      wrap.style.textAlign = 'center';
      wrap.style.margin = '.5rem 0';
      wrap.appendChild(btn);
      minervaFooter.appendChild(wrap);
    } else {
      document.body.appendChild(btn);
    }
  }
  // Anwenden + Toggle setzen
  if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', function(){ setOn(enable); addToggle(); });
  } else {
    setOn(enable); addToggle();
  }
})();