MediaWiki:Common.js: Unterschied zwischen den Versionen
Cezary (Diskussion | Beiträge) 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. |
Cezary (Diskussion | Beiträge) 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 | (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 ( | (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; | ||
try { w = localStorage.getItem( SCHLUESSEL ); } catch ( e ) {} | |||
if ( gueltig( w ) ) { return w; } | |||
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 ) {} | ||
keks( w ); | |||
} | } | ||
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( | var jetzt = lesen(); | ||
anwenden( jetzt ); | |||
keks( jetzt ); // Cookie anlegen, angleichen oder um 30 Tage verlängern | |||
function schalter( lang ) { | function schalter( lang ) { | ||