MediaWiki:Common.js: Unterschied zwischen den Versionen

Nachtmodus für alle: Schalter „Automatisch · Hell · Dunkel“ (Rechner oben rechts, Handy oben im Menü), Wahl im Browser gemerkt; ohne Wahl entscheidet die Einstellung des Geräts (MediaWiki:Common.css). Testbausteine entfernt, alte Testlinks funktionieren weiter.
Nachtmodus: Wahl zusätzlich im MediaWiki-Cookie merken (Klasse ckw-farbe-clientpref-…) – damit „Dunkel“ schon beim Laden greift, ohne Aufblitzen, sobald der Server die Grundklasse ausgibt; ohne sie wie bisher
Zeile 1: Zeile 1:
/* CK-Wissen (seit 25.09.2026): Nachtmodus.
/* CK-Wissen (seit 25.09.2026): Nachtmodus.
   Ohne Wahl richtet sich die Seite nach der Einstellung von Handy oder Rechner – das macht MediaWiki:Common.css allein
   Ohne Wahl richtet sich die Seite nach der Einstellung von Handy oder Rechner – das macht MediaWiki:Common.css allein
   (Block „Nachtmodus“, ohne Skript und ohne Aufblitzen). Dieses Skript zeigt den Schalter „Automatisch · Hell · Dunkel“
   (Block B, ohne Skript und ohne Aufblitzen). Dieses Skript zeigt den Schalter „Automatisch · Hell · Dunkel“
   (Rechner: oben rechts, Handy: oben im Menü ☰) und merkt sich eine Wahl im Browser (Klassen ckw-hell / ckw-nacht).
   (Rechner: oben rechts, Handy: oben im Menü ☰) und merkt sich eine Wahl an zwei Stellen:
  - im Browser-Speicher (localStorage „ckw-farbe“) – bleibt, solange niemand die Website-Daten löscht;
  - im Cookie von MediaWiki („…mwclientpreferences“, Eintrag ckw-farbe-clientpref-hell/-dunkel, 30 Tage, wird bei jedem
    Besuch erneuert). Dieses Cookie liest MediaWiki schon beim Laden und tauscht am <html> die Grundklasse
    ckw-farbe-clientpref-auto gegen die Wahl aus, bevor etwas zu sehen ist – ohne Aufblitzen. Die Grundklasse gibt der
    Server aus (LocalSettings.php, Block ckw-nachtmodus-2026), beim Bearbeiten nicht.
  Fehlt die Grundklasse, setzt dieses Skript wie bisher die Klassen ckw-nacht / ckw-hell (dann blitzt es kurz).
   Beim Bearbeiten bleibt die Seite hell. Alte Testlinks (&nachtmodus=test / aus) funktionieren weiter. */
   Beim Bearbeiten bleibt die Seite hell. Alte Testlinks (&nachtmodus=test / aus) funktionieren weiter. */
( function () {
( function () {
'use strict';
'use strict';
var SCHLUESSEL = 'ckw-farbe';
var SCHLUESSEL = 'ckw-farbe';
var KEKS = 'mwclientpreferences'; // mw.cookie ergänzt den Namen des Wikis davor
var WERTE = [ 'auto', 'hell', 'dunkel' ];
var html = document.documentElement;
var html = document.documentElement;
var bearbeiten = [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1;
var bearbeiten = [ 'edit', 'submit' ].indexOf( mw.config.get( 'wgAction' ) ) !== -1;


function gueltig( w ) { return WERTE.indexOf( w ) !== -1; }
// Wert der Klasse ckw-farbe-clientpref-… am <html> (null, wenn der Server die Grundklasse nicht ausgibt)
function klassenwert() {
var m = html.className.match( /(?:^|\s)ckw-farbe-clientpref-(\w+)(?=\s|$)/ );
return m ? m[ 1 ] : null;
}
function lesen() {
function lesen() {
try {
var w = null;
var w = localStorage.getItem( SCHLUESSEL );
try { w = localStorage.getItem( SCHLUESSEL ); } catch ( e ) {}
return w === 'hell' || w === 'dunkel' ? w : 'auto';
if ( gueltig( w ) ) { return w; }
} catch ( e ) { return 'auto'; }
w = klassenwert();
return gueltig( w ) ? w : 'auto';
}
// Cookie für MediaWiki: Einträge anderer Funktionen bleiben erhalten; „auto“ = kein Eintrag
function keks( w ) {
mw.loader.using( 'mediawiki.cookie' ).then( function () {
var alt = mw.cookie.get( KEKS ) || '';
var teile = alt.split( ',' ).filter( function ( t ) {
return /^[\w-]+-clientpref-\w+$/.test( t ) && t.indexOf( SCHLUESSEL + '-clientpref-' ) !== 0;
} );
if ( w !== 'auto' ) { teile.push( SCHLUESSEL + '-clientpref-' + w ); }
var neu = teile.join( ',' );
if ( neu !== alt || w !== 'auto' ) { mw.cookie.set( KEKS, neu || null ); }
} );
}
}
function merken( w ) {
function merken( w ) {
try {
try { localStorage.setItem( SCHLUESSEL, w ); } catch ( e ) {}
if ( w === 'auto' ) { localStorage.removeItem( SCHLUESSEL ); } else { localStorage.setItem( SCHLUESSEL, w ); }
keks( w );
} catch ( e ) {}
}
}
function anwenden( w ) {
function anwenden( w ) {
var k = klassenwert();
if ( k !== null && k !== w ) {
html.classList.remove( 'ckw-farbe-clientpref-' + k );
html.classList.add( 'ckw-farbe-clientpref-' + w );
}
html.classList.toggle( 'ckw-nacht', w === 'dunkel' && !bearbeiten );
html.classList.toggle( 'ckw-nacht', w === 'dunkel' && !bearbeiten );
html.classList.toggle( 'ckw-hell', w === 'hell' );
html.classList.toggle( 'ckw-hell', w === 'hell' );
Zeile 47: Zeile 78:
}
}
} catch ( e ) {}
} catch ( e ) {}
anwenden( lesen() );
var jetzt = lesen();
anwenden( jetzt );
keks( jetzt ); // Cookie anlegen, angleichen oder um 30 Tage verlängern


function schalter( lang ) {
function schalter( lang ) {