MediaWiki: Common.js: Difference between revisions
From Dreams Knowledge Platform
(Created page with "→Any JavaScript here will be loaded for all users on every page load.: const KEY = 'dreams-progress'; const done = new Set(JSON.parse(localStorage.getItem(KEY) || '[]')); document.querySelectorAll('.sump-prereq__item').forEach(item => { const a = item.querySelector('a[href]'); const slug = a && new URL(a.href, location.href).pathname.split('/').pop(); if (slug && done.has(slug)) item.classList.add('sump-prereq__item--done'); item.querySelector('.sump-prereq_...") |
No edit summary |
||
| Line 1: | Line 1: | ||
mw.hook( 'wikipage.content' ).add( function ( $content ) { | |||
var KEY = 'dreams-progress'; | |||
var done; | |||
try { done = JSON.parse( localStorage.getItem( KEY ) || '[]' ); } | |||
catch ( e ) { done = []; } | |||
function save() { | |||
try { localStorage.setItem( KEY, JSON.stringify( done ) ); } catch ( e ) {} | |||
} | |||
var root = ( $content && $content[ 0 ] ) || document; | |||
var items = root.querySelectorAll( '.sump-prereq__item' ); | |||
Array.prototype.forEach.call( items, function ( item ) { | |||
if ( item.getAttribute( 'data-prereq-init' ) ) { return; } | |||
item.setAttribute( 'data-prereq-init', '1' ); | |||
}); | var box = item.querySelector( '.sump-prereq__box' ); | ||
var link = item.querySelector( 'a[href]' ); | |||
var slug = link ? decodeURIComponent( link.pathname.split( '/' ).pop() ) : null; | |||
if ( !box ) { return; } | |||
if ( slug && done.indexOf( slug ) !== -1 ) { | |||
item.classList.add( 'sump-prereq__item--done' ); | |||
} | |||
box.style.cursor = 'pointer'; | |||
box.addEventListener( 'click', function () { | |||
var nowDone = item.classList.toggle( 'sump-prereq__item--done' ); | |||
var idx = slug ? done.indexOf( slug ) : -1; | |||
if ( nowDone && slug && idx === -1 ) { done.push( slug ); } | |||
if ( !nowDone && idx !== -1 ) { done.splice( idx, 1 ); } | |||
save(); | |||
} ); | |||
} ); | |||
} ); | |||
Latest revision as of 12:37, 25 June 2026
mw.hook( 'wikipage.content' ).add( function ( $content ) {
var KEY = 'dreams-progress';
var done;
try { done = JSON.parse( localStorage.getItem( KEY ) || '[]' ); }
catch ( e ) { done = []; }
function save() {
try { localStorage.setItem( KEY, JSON.stringify( done ) ); } catch ( e ) {}
}
var root = ( $content && $content[ 0 ] ) || document;
var items = root.querySelectorAll( '.sump-prereq__item' );
Array.prototype.forEach.call( items, function ( item ) {
if ( item.getAttribute( 'data-prereq-init' ) ) { return; }
item.setAttribute( 'data-prereq-init', '1' );
var box = item.querySelector( '.sump-prereq__box' );
var link = item.querySelector( 'a[href]' );
var slug = link ? decodeURIComponent( link.pathname.split( '/' ).pop() ) : null;
if ( !box ) { return; }
if ( slug && done.indexOf( slug ) !== -1 ) {
item.classList.add( 'sump-prereq__item--done' );
}
box.style.cursor = 'pointer';
box.addEventListener( 'click', function () {
var nowDone = item.classList.toggle( 'sump-prereq__item--done' );
var idx = slug ? done.indexOf( slug ) : -1;
if ( nowDone && slug && idx === -1 ) { done.push( slug ); }
if ( !nowDone && idx !== -1 ) { done.splice( idx, 1 ); }
save();
} );
} );
} );