MediaWiki:Common.js: Unterschied zwischen den Versionen

Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
Zeile 101: Zeile 101:
   })(jQuery, mw);
   })(jQuery, mw);
});
});




// === Skript 2 ===
// === Skript 2 ===
/* Sticky Charity Banner (v1) – MediaWiki
  - Fix am oberen Rand
  - Schließen mit Erinnerung (session/day/forever)
  - Automatisches Ende via endISO
  - Links: Extern + interne Wiki-Seite
*/
mw.loader.using(['mediawiki.util', 'jquery']).then(function () {
  (function ($, mw) {
    'use strict';
    var CONFIG = {
      enabled: true,
      id: 'charity_banner_v1',              // Bei inhaltlichen Änderungen erhöhen
      text: '❤️ Unterstütze die Kinderherzen-Charity – Jede Spende zählt!',
      primary: {                            // Externer Link
        label: 'Mehr erfahren',
        href: 'https://www.kinderherzen.de/whisky-fuer-den-guten-zweck/'
      },
      secondary: {                          // Interner Wiki-Link
        label: 'Mehr auf dem Wiki',
        href: 'https://ados-wiki.de/index.php?title=Charity-Event_%E2%80%9EWhisky_f%C3%BCr_den_guten_Zweck%E2%80%9C_%E2%80%93_The_Whisky_Waiter'
      },
      showOnNamespaces: 'all',              // 'all' oder Array z. B. [0,4]
      endISO: null,                        // z. B. '2025-10-06T23:59:59Z' (danach ausgeblendet)
      dismiss: { mode: 'day' },            // 'session' | 'day' | 'forever'
      zIndex: 10050                        // über normalen Headern
    };
    if (!CONFIG.enabled) return;
    // Zeitfenster prüfen
    if (CONFIG.endISO && new Date() > new Date(CONFIG.endISO)) return;
    // Namespace-Filter
    var ns = mw.config.get('wgNamespaceNumber');
    if (CONFIG.showOnNamespaces !== 'all' &&
        $.isArray(CONFIG.showOnNamespaces) &&
        $.inArray(ns, CONFIG.showOnNamespaces) === -1) {
      return;
    }
    // Dismiss-Speicher
    function getLS(k){ try { return localStorage.getItem(k); } catch(e){ return null; } }
    function setLS(k,v){ try { localStorage.setItem(k,v); } catch(e){} }
    var key = 'sticky_banner:' + CONFIG.id;
    var today = (function(d){ return d.getFullYear()+'-'+('0'+(d.getMonth()+1)).slice(-2)+'-'+('0'+d.getDate()).slice(-2); })(new Date());
    var dismissed = getLS(key);
    if (CONFIG.dismiss.mode === 'forever' && dismissed) return;
    if (CONFIG.dismiss.mode === 'day' && dismissed === today) return;
    // session: nicht in localStorage speichern → immer wieder pro Session möglich
    $(function () {
      // Banner HTML
      var $bar = $('<div>', {
        'class': 'mw-sticky-banner',
        'role': 'region',
        'aria-label': 'Charity-Hinweis',
        'style': 'z-index:' + CONFIG.zIndex + ';'
      });
      var $inner = $('<div>', { 'class': 'mw-sticky-banner__inner' });
      var $text = $('<div>', { 'class': 'mw-sticky-banner__text', 'html': mw.html.escape(CONFIG.text) });
      // Buttons
      var $btns = $('<div>', { 'class': 'mw-sticky-banner__btns' });
      if (CONFIG.primary && CONFIG.primary.href) {
        $btns.append($('<a>', {
          'class': 'mw-sticky-banner__btn mw-sticky-banner__btn--primary',
          'href': CONFIG.primary.href,
          'target': '_blank',
          'rel': 'noopener'
        }).text(CONFIG.primary.label || 'Mehr erfahren'));
      }
      if (CONFIG.secondary && CONFIG.secondary.href) {
        $btns.append($('<a>', {
          'class': 'mw-sticky-banner__btn mw-sticky-banner__btn--secondary',
          'href': CONFIG.secondary.href
        }).text(CONFIG.secondary.label || 'Mehr auf dem Wiki'));
      }
      var $close = $('<button>', {
        'class': 'mw-sticky-banner__close',
        'type': 'button',
        'aria-label': 'Banner schließen'
      }).text('×');
      $inner.append($text, $btns, $close);
      $bar.append($inner);
      $('body').prepend($bar);
      $('body').addClass('mw-sticky-banner-active');
      function rememberDismiss() {
        if (CONFIG.dismiss.mode === 'forever') { setLS(key, '1'); }
        else if (CONFIG.dismiss.mode === 'day') { setLS(key, today); }
        // session → nichts speichern
      }
      function close() {
        rememberDismiss();
        $bar.remove();
        $('body').removeClass('mw-sticky-banner-active');
      }
      $close.on('click', close);
    });
  })(jQuery, mw);
});