MediaWiki:Common.js: Unterschied zwischen den Versionen
Admin (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Admin (Diskussion | Beiträge) 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); | |||
}); | |||