MediaWiki:Common.js
Aus Wiki.sah
Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Strg+F5
// === Google Analytics mit Selbst-Ausschluss ===
// Prüfen, ob der Benutzer das Opt-out-Cookie gesetzt hat
if (document.cookie.indexOf('disableGA=true') === -1) {
// Google Analytics laden
var script = document.createElement('script');
script.async = true;
script.src = 'https://www.googletagmanager.com/gtag/js?id=UA-7078304';
document.head.appendChild(script);
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-7078304');
} else {
console.log('Google Analytics ist für diesen Benutzer deaktiviert.');
}
// === Button / Link zum Selbst-Ausschluss ===
mw.hook('wikipage.content').add(function($content) {
if ($content.find('#gaOptOut').length === 0) return;
$content.find('#gaOptOut').on('click', function() {
document.cookie = "disableGA=true; expires=Fri, 31 Dec 9999 23:59:59 GMT; path=/";
alert("Google Analytics wurde für dich deaktiviert.");
});
});
function ModifySidebar( action, section, name, link ) {
try {
switch ( section ) {
case 'languages':
var target = 'p-lang';
break;
case 'toolbox':
var target = 'p-tb';
break;
case 'navigation':
var target = 'p-navigation';
break;
default:
var target = 'p-' + section;
break;
}
if ( action == 'add' ) {
var node = document.getElementById( target )
.getElementsByTagName( 'div' )[0]
.getElementsByTagName( 'ul' )[0];
var aNode = document.createElement( 'a' );
var liNode = document.createElement( 'li' );
aNode.appendChild( document.createTextNode( name ) );
aNode.setAttribute( 'href', link );
liNode.appendChild( aNode );
liNode.className = 'plainlinks';
node.appendChild( liNode );
}
if ( action == 'remove' ) {
var list = document.getElementById( target )
.getElementsByTagName( 'div' )[0]
.getElementsByTagName( 'ul' )[0];
var listelements = list.getElementsByTagName( 'li' );
for ( var i = 0; i < listelements.length; i++ ) {
if (
listelements[i].getElementsByTagName( 'a' )[0].innerHTML == name ||
listelements[i].getElementsByTagName( 'a' )[0].href == link
)
{
list.removeChild( listelements[i] );
}
}
}
} catch( e ) {
// let's just ignore what's happened
return;
}
}
function CustomizeModificationsOfSidebar() {
// adds [[Special:CategoryTree]] to toolbox
ModifySidebar( 'add', 'toolbox', 'CategoryTree', 'http://en.wikipedia.org/wiki/Special:CategoryTree' );
// removes [[Special:Upload]] from toolbox
ModifySidebar( 'remove', 'toolbox', 'Upload file', 'http://en.wikipedia.org/wiki/Special:Upload' );
}
jQuery( CustomizeModificationsOfSidebar );
// === Minimaler Consent-Banner + Consent Mode v2 für MediaWiki ===
// Replace these placeholders before using:
// - G_MEASUREMENT_ID -> your gtag measurement id (optional, if you use GA/GA4)
// - ADSENSE_PUBLISHER -> your AdSense publisher id like "ca-pub-1605738920284413"
(function () {
// --- Konfiguration ---
var G_MEASUREMENT_ID = 'G-MEASUREMENT-ID'; // optional, oder leer lassen
var ADSENSE_PUBLISHER = 'ca-pub-1605738920284413'; // ersetzen
var STORAGE_KEY = 'site_consent_ads'; // Werte: 'granted' | 'denied'
// Admin-Ausnahme: eingeloggte Benutzer sehen kein Banner
if (mw.config.get('wgUserName') !== null) return;
// Hilfsfunktionen
function setConsentState(state) {
try { localStorage.setItem(STORAGE_KEY, state); } catch (e) {}
// Update Google Consent Mode
if (window.gtag) {
if (state === 'granted') {
gtag('consent', 'update', { 'ad_storage': 'granted', 'analytics_storage': 'granted' });
} else {
gtag('consent', 'update', { 'ad_storage': 'denied', 'analytics_storage': 'denied' });
}
}
}
function getConsentState() {
try { return localStorage.getItem(STORAGE_KEY); } catch (e) { return null; }
}
function injectScript(src, id, onload, onerror) {
if (id && document.getElementById(id)) { if (onload) onload(); return; }
var s = document.createElement('script');
if (id) s.id = id;
s.src = src;
s.async = true;
if (onload) s.onload = onload;
if (onerror) s.onerror = onerror;
document.head.appendChild(s);
}
// gtag loader (mit initialer Default-Consent 'denied' für EU-Konformität)
function ensureGtag() {
if (window.gtag) return;
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
window.gtag = window.gtag || gtag;
// initial deny to be privacy-safe
gtag('consent', 'default', { 'ad_storage': 'denied', 'analytics_storage': 'denied' });
if (G_MEASUREMENT_ID && G_MEASUREMENT_ID.indexOf('G-') === 0) {
injectScript('https://www.googletagmanager.com/gtag/js?id=' + encodeURIComponent(G_MEASUREMENT_ID), 'gtag-js', function(){
// nothing — gtag() already defined
});
}
}
// AdSense loader (will be present but behavior depends on consent state)
function ensureAdsense() {
// add publisher meta if not present
if (!document.querySelector('script[data-ad-client]')) {
var s = document.createElement('script');
s.async = true;
s.src = 'https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js';
s.setAttribute('data-ad-client', ADSENSE_PUBLISHER);
document.head.appendChild(s);
}
}
// Banner erstellen
function createBanner() {
if (document.getElementById('consent-banner')) return;
var banner = document.createElement('div');
banner.id = 'consent-banner';
banner.className = 'consent-banner';
banner.innerHTML = '<div class="consent-inner">Wir nutzen Werbung, um diese Inhalte kostenlos zu halten. ' +
'<button id="consent-accept" class="consent-btn primary">Einwilligen</button>' +
'<button id="consent-decline" class="consent-btn">Nicht einwilligen</button>' +
'<a id="consent-settings" href="#" class="consent-link">Einstellungen</a>' +
'</div>';
document.body.appendChild(banner);
document.getElementById('consent-accept').addEventListener('click', function(e){
e.preventDefault();
setConsentState('granted');
hideBanner();
// update gtag and allow personalized ads
if (window.gtag) gtag('consent','update',{ 'ad_storage':'granted','analytics_storage':'granted' });
});
document.getElementById('consent-decline').addEventListener('click', function(e){
e.preventDefault();
setConsentState('denied');
hideBanner();
if (window.gtag) gtag('consent','update',{ 'ad_storage':'denied','analytics_storage':'denied' });
});
document.getElementById('consent-settings').addEventListener('click', function(e){
e.preventDefault();
openSettingsDialog();
});
}
function hideBanner() {
var b = document.getElementById('consent-banner');
if (b) b.style.display = 'none';
}
// einfache Einstellungen (kann ausgebaut werden)
function openSettingsDialog() {
alert('Einstellungen:\\n\nEinwilligen = personalisierte Werbung zulassen.\\nNicht einwilligen = nur nicht-personalisierte Werbung.');
}
// Optionaler leichter AdBlock-Check (falls du das willst)
function checkAdblockAndShowNotice() {
// create test node that adblockers often hide
var bait = document.createElement('div');
bait.className = 'adbait';
bait.style.cssText = 'width:1px;height:1px;position:absolute;left:-9999px;';
document.body.appendChild(bait);
window.setTimeout(function() {
var blocked = (window.getComputedStyle && window.getComputedStyle(bait).display === 'none') || !document.body.contains(bait);
try { document.body.removeChild(bait); } catch(e) {}
if (blocked) {
// minimalistische Hinweisleiste, nur für echte Besucher (nicht admin)
if (!document.getElementById('adblock-warning')) {
var w = document.createElement('div');
w.id = 'adblock-warning';
w.className = 'adblock-warning';
w.innerHTML = 'Es scheint ein Werbeblocker aktiv zu sein. Bitte deaktiviere ihn für <strong>science-at-home.de</strong>, um uns zu unterstützen. ' +
'<button id="adblock-close" class="consent-btn">Schließen</button>';
document.body.appendChild(w);
document.getElementById('adblock-close').addEventListener('click', function(){ w.style.display='none'; });
}
}
}, 800);
}
// Start-Flow
function init() {
// load gtag & adsense early (gtag default denied)
ensureGtag();
ensureAdsense();
var state = getConsentState();
if (!state) {
// show banner after slight delay so user isn't überrumpelt
setTimeout(function(){ createBanner(); }, 800);
// also check AdBlocker (optional)
checkAdblockAndShowNotice();
} else {
// apply stored consent state
setConsentState(state);
// no banner
}
}
// Kick off
if (document.readyState === 'complete' || document.readyState === 'interactive') {
init();
} else {
window.addEventListener('load', init);
}
})();