// TOD session caching to session/local storage to save mad api calls
mw.loader.load( "/w/index.php?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 );
} );