MediaWiki:Common.js

From Dreams Knowledge Platform
Jump to: navigation, search

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
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();
		} );
	} );
} );