MediaWiki: Common.js: Difference between revisions

From Dreams Knowledge Platform
Jump to: navigation, search
(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:
/* Any JavaScript here will be loaded for all users on every page load. */
mw.hook( 'wikipage.content' ).add( function ( $content ) {
var KEY = 'dreams-progress';
var done;
try { done = JSON.parse( localStorage.getItem( KEY ) || '[]' ); }
catch ( e ) { done = []; }


const KEY = 'dreams-progress';
function save() {
const done = new Set(JSON.parse(localStorage.getItem(KEY) || '[]'));
try { localStorage.setItem( KEY, JSON.stringify( done ) ); } catch ( e ) {}
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();
var root = ( $content && $content[ 0 ] ) || document;
  if (slug && done.has(slug)) item.classList.add('sump-prereq__item--done');
var items = root.querySelectorAll( '.sump-prereq__item' );
  item.querySelector('.sump-prereq__box').addEventListener('click', () => {
 
    item.classList.toggle('sump-prereq__item--done');
Array.prototype.forEach.call( items, function ( item ) {
    done.has(slug) ? done.delete(slug) : done.add(slug);
if ( item.getAttribute( 'data-prereq-init' ) ) { return; }
    localStorage.setItem(KEY, JSON.stringify([...done]));
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();
		} );
	} );
} );