From Wikipedia, the free encyclopedia
Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.

// TOD session caching to session/local storage to save mad api calls



mw.loader.load( "/?title=User:Fred_Gandt/subdueLinks.css&action=raw&ctype=text/css", "text/css" );

$( document ).ready( () => {

	"use strict";

	let dflt_opts = { "On load": false, "Subdue links": false },

		frm = document.createElement( "form" ),

		opts = Object.assign( {}, dflt_opts ), // TEMPORARY KLUDGE

		lbl, npt, trg;

	const FGSL = "fg-subdue-links",

		OPTS_NAME = `userjs-${FGSL}`,

		toggleSubduction = tggl => document.getElementById( "mw-content-text" ).classList.toggle( FGSL, tggl ),

		stringyOpts = () => JSON.stringify( opts ),

		setOpts = () => {

			opts = Array.from( frm.querySelectorAll( "input" ) ).reduce( ( o, cv ) => {

				o cv.name  = cv.checked;

				return o;

			}, {} );

			toggleSubduction( opts "Subdue links"  );

			$.ajax( {

				url: "/w/api.php",

				dataType: "json",

				type: "POST",

				data: {

					token: mw.user.tokens.values.csrfToken,

					optionvalue: stringyOpts(),

					optionname: OPTS_NAME,

					action: "options",

					format: "json"

				},

				success: data => {

					if ( data.error ) {

						console.error( data.error.info );

					}

				},

				error: ( something, went, wrong ) => {

					console.error( something );

					window.alert( `Something went wrong:\n\n${went}:\n\n${wrong}` );

				}

			} );

		};

	

	opts = JSON.parse( mw.user.options.values OPTS_NAME  || stringyOpts() );

	

	if ( !Object.getOwnPropertyNames( opts ).length ) { // TEMPORARY FIX just in case anyone was using it while I was messing it up

		opts = Object.assign( {}, dflt_opts );

	}

	

	opts "Subdue links"  = toggleSubduction( opts "On load"  && opts "Subdue links"  ); // TODO revisit this *cough* "logic" kludge when doing the session caching

	

	Object.getOwnPropertyNames( opts ).forEach( pn => {

		npt = document.createElement( "input" );

		npt.checked = opts pn ];

		npt.type = "checkbox";

		lbl = document.createElement( "label" );

		npt.name = lbl.textContent = pn;

		lbl.append( npt );

		frm.append( lbl );

	} );

	frm.id = FGSL;

	frm.addEventListener( "change", setOpts, { passive: true } );

	document.getElementById( "p-tb" ).querySelector( "div" ).append( frm );

} );