MediaWiki:Common.js: Difference between revisions

From Donate
Jump to navigation Jump to search
Content deleted Content added
move initialisation to function, only run on actual landing pages
indentation to tabs
 
(66 intermediate revisions by 3 users not shown)
Line 1:
/**
* MediaWiki:Common.js - Any JavaScript here will be loaded for all users on every page load.
**/
 
$(function getQuerystring( key ) {
// TODO: Replace with mw.util.getParamValue() everywhere, and remove
key = key.replace( /[\[]/, '\\\[' ).replace( /[\]]/, '\\\]' );
var regex = new RegExp( '[\\?&]' + key + '=([a-zA-Z0-9\.\_\-]*)' );
var qs = regex.exec( window.location.search );
return qs == null ? '' : qs[1];
}
 
mw.loader.using( ['mediawiki.util', 'mediawiki.Uri'] ).done( function() {
function checkPaymentOutages() {
/* Check against the scheduled payment method outages
* in global variable "outages" (loaded cross-wiki from meta)
* and hide the relevant button for any which are ongoing.
*/
 
// If Jimmy tweets a bare link to https://donate.wikimedia.org/w/index.php?title=Special:LandingPage
// var outages = outages || []; // don't die if it hasn't loaded...
// we are gonna have a bad time as geolocation doesn't happen. Do a redirect to send them round again
var now = new Date();
try {
var uri = new mw.Uri( window.location.href );
if ( uri.query.title === 'Special:LandingPage' && uri.query.country === undefined && uri.query.retried === undefined ) {
console.log( 'redirecting to pick up country parameter' );
uri.path = '';
uri.query.retried = 1; // only do this once
delete uri.query.title;
window.location.href = uri.toString();
}
} catch (error) {
console.warn('Error parsing URL. Possibly due to unreplaced % signs?');
}
 
// Disable logo link
for (var i = outages.length - 1; i >= 0; i--) {
$('#p-logo a').attr( { href: '#', title: '' } );
if ( now > outages[i]['start'] ) {
if ( now < outages[i]['end'] ) {
if ( (typeof outages[i]['country'] === 'undefined') || (outages[i]['country'] == country) ) {
$('.paymentmethod-' + outages[i]['method']).hide();
}
}
}
}
}
 
// Code for donation forms - https://donate.wikimedia.org/wiki/MediaWiki:DonationForm.js
function adjustHPC() {
if ( document.forms['donateForm'] ) {
/* Adjust amounts based on highest previous contribution (hpc)
var formJS = mw.util.getParamValue( 'formJS' );
or most recent contribution (mrc) parameter. Used for emails.
if ( formJS && formJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
TODO: split data out? */
mw.loader.load( '/w/index.php?title=' + formJS + '&action=raw&ctype=text/javascript' );
} else {
mw.loader.load( '/w/index.php?title=MediaWiki:DonationForm.js&action=raw&ctype=text/javascript' );
}
 
// Load monthly convert JS
// Look for 'hpc' parameter, then 'mrc'. If neither, then bail out.
// TODO: allow loading different JS variants, either here or defined in the Template
var hpc = parseFloat( mw.util.getParamValue('hpc') );
mw.loader.load( '/w/index.php?title=MediaWiki:MonthlyConvert.js&action=raw&ctype=text/javascript' );
if( isNaN(hpc) ) {
}
hpc = parseFloat( mw.util.getParamValue('mrc') );
if( isNaN(hpc) ) {
return;
}
}
 
// Allow manual country selection and reload
var hpcSet = mw.util.getParamValue('hpcSet');
// Run this only when needed
var enableCountrySelect = function() {
var language = mw.config.get('wgPageContentLanguage'),
countrySelect = document.getElementById('country-select');
 
// Translations
var currency = $("input[name='currency_code']").val();
if ( language !== var'en' && language !== mw.config.get('wgUserLanguageen-gb' ); {
const translationsUrl = 'https://donate.wikimedia.org/wiki/Module:Country_links/data.json?action=raw';
$.getJSON( translationsUrl, function( translations ) {
if ( translations[language] ) {
var list = Array.from( countrySelect.options );
list.forEach( option => {
option.innerText = translations[language][option.value] || option.innerText;
});
// Sort for new language
list.sort( function(a, b) {
return a.innerText.localeCompare( b.innerText );
});
for ( var i = 0; i < list.length; i++ ) {
list[i].parentNode.appendChild( list[i] );
}
}
});
}
 
document.getElementById('country-select-go').addEventListener( 'click', function(e) {
var radioAmountsData = {
if ( countrySelect.value ) {
'USD' : {
mw.loader.using( ['mediawiki.Uri'] ).done( function() {
'default' : [
var uri = new mw.Uri( document.location.href );
[ 0, [ 5, 10, 20, 25, 35, 50, 100 ] ],
uri.query.country = countrySelect.value;
[ 5, [ 10, 15, 20, 35, 50, 100, 150 ] ],
document.location = uri.toString();
[ 10, [ 15, 20, 25, 35, 50, 100, 150 ] ],
});
[ 15, [ 20, 25, 35, 50, 75, 100, 250 ] ],
}
[ 20, [ 25, 35, 50, 75, 100, 150, 250 ] ],
});
[ 25, [ 30, 40, 50, 75, 100, 150, 250 ] ],
};
[ 35, [ 25, 50, 75, 100, 200, 250, 300 ] ],
[ 75, [ 25, 50, 75, 100, 200, 300, 500 ] ],
[ 100, [ 25, 50, 100, 150, 250, 500, 1000 ] ],
[ 150, [ 50, 100, 150, 200, 350, 500, 1000 ] ],
[ 200, [ 100, 150, 200, 300, 400, 500, 1000 ] ],
[ 500, [ 100, 250, 500, 750, 1000, 1500, 2000 ] ],
[ 1000, [ 500, 1000, 2000, 2500, 3000, 4000, 5000 ] ]
],
'low2016' : [
[ 0, [ 3, 5, 10, 20, 30, 50, 100 ] ],
[ 5, [ 5, 10, 20, 35, 50, 100, 150 ] ],
[ 10, [ 10, 15, 20, 35, 50, 100, 150 ] ],
[ 15, [ 15, 20, 25, 35, 50, 100, 150 ] ],
[ 20, [ 20, 25, 35, 50, 75, 100, 150 ] ],
[ 25, [ 25, 35, 50, 75, 100, 150, 250 ] ],
[ 35, [ 25, 50, 75, 100, 200, 250, 300 ] ],
[ 75, [ 25, 50, 75, 100, 200, 300, 500 ] ],
[ 100, [ 25, 50, 100, 150, 250, 500, 1000 ] ],
[ 150, [ 50, 100, 150, 200, 350, 500, 1000 ] ],
[ 200, [ 100, 150, 200, 300, 400, 500, 1000 ] ],
[ 500, [ 100, 250, 500, 750, 1000, 1500, 2000 ] ],
[ 1000, [ 500, 1000, 2000, 2500, 3000, 4000, 5000 ] ]
]
},
'BRL' : [
[ 0, [ 15, 25, 50, 75, 100, 150, 300 ] ],
[ 5, [ 25, 35, 50, 75, 100, 200, 300 ] ],
[ 10, [ 30, 50, 75, 100, 150, 300, 500 ] ],
[ 15, [ 50, 75, 100, 150, 225, 300, 500 ] ],
[ 20, [ 50, 100, 150, 225, 300, 400, 500 ] ],
[ 25, [ 75, 125, 200, 250, 300, 400, 500 ] ],
[ 35, [ 100, 150, 225, 300, 500, 750, 1000 ] ],
[ 75, [ 100, 150, 225, 300, 500, 1000, 1500 ] ],
[ 100, [ 100, 150, 300, 500, 1000, 1500, 3000 ] ],
[ 150, [ 250, 500, 750, 1000, 1500, 3000, 5000 ] ],
[ 200, [ 500, 1000, 2000, 3000, 4000, 5000, 10000 ] ],
[ 500, [ 1000, 2500, 5000, 7500, 10000, 12500, 15000 ] ],
[ 1000, [ 1000, 2500, 5000, 7500, 10000, 12500, 15000 ] ]
],
'JPY' : [
[ 0, [ 500, 1000, 2000, 2500, 4000, 5000, 10000 ] ],
[ 5, [ 1000, 1500, 2500, 4000, 5000, 10000, 15000 ] ],
[ 10, [ 1500, 2000, 3000, 4000, 5000, 10000, 15000 ] ],
[ 15, [ 2000, 2500, 3500, 5000, 7500, 10000, 25000 ] ],
[ 20, [ 2500, 3500, 5000, 7500, 10000, 15000, 25000 ] ],
[ 25, [ 3000, 4000, 5000, 7500, 10000, 15000, 25000 ] ],
[ 35, [ 2500, 5000, 7500, 10000, 20000, 30000, 50000 ] ],
[ 75, [ 2500, 5000, 7500, 10000, 20000, 50000, 100000 ] ],
[ 100, [ 5000, 10000, 15000, 20000, 35000, 50000, 100000 ] ],
[ 500, [ 10000, 25000, 50000, 75000, 100000, 150000, 200000 ] ]
],
'SEK' : [
[ 0, [ 20, 50, 100, 200, 300, 500, 1000 ] ],
[ 3, [ 30, 50, 100, 200, 300, 500, 1000 ] ],
[ 5, [ 50, 100, 150, 200, 300, 500, 1000 ] ],
[ 23, [ 50, 100, 200, 300, 500, 750, 1000 ] ]
]
};
radioAmountsData.AUD = radioAmountsData.USD;
radioAmountsData.CAD = radioAmountsData.USD;
radioAmountsData.GBP = radioAmountsData.USD;
radioAmountsData.NZD = radioAmountsData.USD;
radioAmountsData.EUR = radioAmountsData.USD;
 
if ( document.getElementById('country-change') ) {
var appealAmountsData = {
document.getElementById('country-change').addEventListener( 'click', function(e) {
'USD' : [
document.getElementById('country-change-select').style.display = 'block';
[ 0, [ 5, 10, 20 ] ],
enableCountrySelect();
[ 10, [ 10, 20, 50 ] ],
});
[ 20, [ 20, 30, 50 ] ],
}
[ 35, [ 20, 30, 50 ] ],
[ 50, [ 20, 50, 100 ] ],
[ 75, [ 50, 75, 100 ] ],
[ 100, [ 75, 100, 150 ] ],
[ 150, [ 75, 100, 200 ] ],
[ 200, [ 100, 200, 300 ] ]
],
'JPY' : [
[ 0, [ 300, 500, 1000 ] ],
[ 3, [ 500, 1000, 1500 ] ],
[ 5, [ 1000, 1500, 2000 ] ],
[ 10, [ 1500, 2000, 5000 ] ],
[ 20, [ 2000, 3000, 5000 ] ],
[ 50, [ 2000, 5000, 10000 ] ],
[ 100, [ 5000, 10000, 15000 ] ]
],
'SEK' : [
[ 0, [ 20, 50, 100 ] ],
[ 3, [ 30, 50, 100 ] ],
[ 5, [ 50, 100, 150 ] ],
[ 15, [ 100, 150, 200 ] ],
[ 23, [ 100, 200, 300 ] ],
[ 38, [ 100, 200, 500 ] ],
[ 75, [ 100, 500, 750 ] ],
[ 112, [ 100, 500, 1000 ] ]
]
};
appealAmountsData.AUD = appealAmountsData.USD;
appealAmountsData.CAD = appealAmountsData.USD;
appealAmountsData.GBP = appealAmountsData.USD;
appealAmountsData.NZD = appealAmountsData.USD;
appealAmountsData.EUR = appealAmountsData.USD;
 
if ( document.getElementById('geolocate-error') ) {
var formats = {
enableCountrySelect();
"USD" : "$\t",
}
"EUR" : {
"en" : "€\t",
"cy" : "€\t",
"ga" : "€\t",
"mt" : "€\t",
"nl" : "€ \t",
"lv" : "€ \t",
"tr" : "€ \t",
"default" : "\t €"
},
"AUD" : "$\t",
"CAD" : {
"fr" : "\t $",
"default" : "$\t"
},
"GBP" : "£\t",
"NZD" : "$\t",
"JPY" : "¥\t",
"SEK" : "\t kr",
"BRL" : "R$\t"
};
 
try {
var format = formats[currency][language] || formats[currency]["default"] || formats[currency] || '\t';
let uri = new mw.Uri( window.location.href );
if ( uri.query.showCountryConfirm ) {
document.getElementById('country-confirm').style.display = 'block';
}
} catch (error) {
console.warn('Error parsing URL. Possibly due to unreplaced % signs?');
}
 
// Code for Thank You pages - https://donate.wikimedia.org/wiki/MediaWiki:ThankYouPage.js
// Radio button amounts
if ( mw.config.get( 'wgTitle' ).indexOf('Thank You') !== -1 ) {
var radioAmounts = pickAmountArray( radioAmountsData, currency, hpc, hpcSet );
mw.loader.load( '/w/index.php?title=MediaWiki:ThankYouPage.js&action=raw&ctype=text/javascript' );
if ( radioAmounts.length ) {
}
// Change buttons
for (var j = 0; j < radioAmounts.length; j++) {
var $radio = $("#input_amount_" + j);
var $label = $("label[for='input_amount_" + j + "']");
$radio.val( radioAmounts[j] );
$label.text( format.replace('\t', radioAmounts[j]) );
}
}
 
// Code for support pages - https://donate.wikimedia.org/wiki/MediaWiki:SupportPage.js
// Appeal amounts
// TODO: have a better way to trigger this
var appealAmounts = pickAmountArray( appealAmountsData, currency, hpc, hpcSet );
var supportPages = [ 'Ways to Give', 'Problems donating', 'Cancel or change recurring giving',
if ( appealAmounts.length ) {
'Matching Gifts', 'Support Page', 'FAQ', 'Tax deductibility',
// Build string
'US State Solicitation Disclosures', 'Draft:FAQ' ];
var appealAmountString = '';
if ( supportPages.indexOf( mw.config.get( 'wgTitle' ).split('/')[0] ) !== -1 ) {
for( var k = 0; k < appealAmounts.length; k++ ) {
mw.loader.load( '/w/index.php?title=MediaWiki:SupportPage.js&action=raw&ctype=text/javascript' );
appealAmountString += format.replace('\t', appealAmounts[k]) + ', ';
}
}
appealAmountString = appealAmountString.trim();
 
// Load some tools for editors - https://donate.wikimedia.org/wiki/MediaWiki:EditTemplates.js
$('.consider-amounts').html(appealAmountString);
if ( mw.config.get( 'wgUserName' ) !== null ) {
}
mw.loader.load( '/w/index.php?title=MediaWiki:EditTemplates.js&action=raw&ctype=text/javascript' );
}
 
/**
}
* @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
* @rev 6
*/
var extraCSS = mw.util.getParamValue( 'withCSS' ),
extraJS = mw.util.getParamValue( 'withJS' );
 
if ( extraCSS ) {
function pickAmountArray( data, currency, hpc, hpcSet ) {
if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
/**
mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' );
* Choose the amounts for radio buttons / appeal based on hpc
} else {
* @param {Object} data
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
* @param {String} currency
}
* @param {Number} hpc
}
* @param {String} hpcSet
* @return {Array} Array of amounts (as numbers)
*/
 
if ( extraJS ) {
var set, amounts;
if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' );
} else {
mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
}
}
 
/* HACK to run certain inline scripts when document ready (e.g. so jquery is avaliable)
if ( !(currency in data) ) {
TODO: Make suitable for multiple scripts. Or figure out a better way to do this.
return [];
*/
}
if ( typeof inlineScriptWhenReady !== 'undefined') {
inlineScriptWhenReady();
}
 
} );
if ( $.isArray(data[currency]) ) {
// No variant sets
set = data[currency];
} else {
// We need to go deeper. Check the variants.
if ( hpcSet in data[currency] ) {
set = data[currency][hpcSet];
} else {
set = data[currency]['default'];
}
}
 
// Find correct amount array for this hpc
for (var i = 0; i < set.length; i++) {
if ( set[i][0] > hpc ) {
break;
}
amounts = set[i][1];
}
 
return amounts;
 
}
 
function preSelect() {
/* Check for a 'preSelect' url parameter, and select that option.
If there isn't an option, add it to the "Other" box and select that */
var preSelectAmount = mw.util.getParamValue('preSelect');
if ( preSelectAmount > 0 ) {
$preSelectOption = $('input[name="amount"][value="' + preSelectAmount + '"]');
if ( $preSelectOption.length ) {
// Select existing input
$preSelectOption.prop('checked', true);
} else {
$('#input_amount_other_box').val( preSelectAmount );
$('#input_amount_other').prop('checked', true);
}
}
}
 
/* Form functions */
function clearOther(box) {
document.getElementById("input_amount_other").checked = true;
box.value = "";
}
 
function selectOther() {
document.getElementById("input_amount_other").checked = true;
}
 
function resetOther(box) {
box.value = "</html>{{int:donate_interface-other}}<html>";
}
 
function selectAmount() {
$('#input_amount_other_box').val('');
$('input[name="amountGiven"]').val('');
}
/* End form functions */
 
function donationPageInit() {
 
if ( document.paypalcontribution ) {
document.paypalcontribution.utm_medium.value = mw.util.getParamValue( 'utm_medium' );
document.paypalcontribution.utm_campaign.value = mw.util.getParamValue( 'utm_campaign' );
document.paypalcontribution.utm_key.value = mw.util.getParamValue( 'utm_key' );
 
// Strip protocol to stop firewall throwing fits
document.paypalcontribution.referrer.value = document.referrer.replace(/https?:\/\//i, "");
 
// hide frequency options in India, where we can only handle one-time donations
if (document.paypalcontribution.country.value === 'IN') {
$("#frequency_onetime").prop('checked', true);
$(".frequency-options").hide();
$("#cancel-monthly").hide();
}
}
 
// Block typing symbols in input field, otherwise Safari allows them and then chokes
// https://phabricator.wikimedia.org/T118741
document.getElementById('input_amount_other_box').onkeypress = function(e) {
var chr = String.fromCharCode(e.which);
if ("$£€¥".indexOf(chr) !== -1) {
return false;
}
};
 
// Disable submitting form with return key
$( 'form[name="paypalcontribution"]' ).bind( 'keypress', function(e) {
var code = ( e.keyCode ? e.keyCode : e.which );
if ( code == 13 ) return false;
});
 
// Disable logo link
$("#p-logo a").attr("href", "#");
$("#p-logo a").attr("title", "");
 
// This is 1 by default, make it 0
$('#searchInput').attr('tabindex', 0);
 
$(".input_amount_other").click(function() {
$("#input_amount_other_box").focus();
});
 
// Allow preselecting monthly
if( mw.util.getParamValue('monthly') ) {
$('#frequency_monthly').click();
}
 
try {
adjustHPC();
preSelect(); // Make sure to do this *after* other fiddling with values
}
finally {
$('.consider-amounts').show();
$('#actual-form').show();
$('#actual-form-loading').hide();
}
 
// Load list of payment outages from meta, and hide any which are current
$.getScript('//meta.wikimedia.org/w/index.php?' + $.param( { title:'MediaWiki:FR2013/Resources/PaymentOutages.js', action:'raw', ctype:'text/javascript' } ),
function() {
setTimeout(checkPaymentOutages(), 250); // allow time for script to have _executed_ (not just loaded)
}
);
}
 
 
$(document).ready(function() {
 
mw.loader.using( ['mediawiki.util','mediawiki.config'] ).done( function() {
if ( mw.config.get('wgPageName') === 'Special:LandingPage' ) {
donationPageInit();
}
});
 
});
 
$(document).ready(function() {
/* HACK to run certain inline scripts when document ready (e.g. so jquery is avaliable)
TODO: Make suitable for multiple scripts. Or figure out a better way to do this.
*/
if ( typeof inlineScriptWhenReady !== 'undefined') {
inlineScriptWhenReady();
}
});

Latest revision as of 12:12, 15 May 2024

/**
 * MediaWiki:Common.js - Any JavaScript here will be loaded for all users on every page load.
 **/

$(function() {

	mw.loader.using( ['mediawiki.util', 'mediawiki.Uri'] ).done( function() {

		// If Jimmy tweets a bare link to https://donate.wikimedia.org/w/index.php?title=Special:LandingPage
		// we are gonna have a bad time as geolocation doesn't happen. Do a redirect to send them round again
		try {
			var uri = new mw.Uri( window.location.href );
			if ( uri.query.title === 'Special:LandingPage' && uri.query.country === undefined && uri.query.retried === undefined ) {
				console.log( 'redirecting to pick up country parameter' );
				uri.path = '';
				uri.query.retried = 1; // only do this once
				delete uri.query.title;
				window.location.href = uri.toString();
			}
		} catch (error) {
			console.warn('Error parsing URL. Possibly due to unreplaced % signs?');
		}

		// Disable logo link
		$('#p-logo a').attr( { href: '#', title: '' } );

		// Code for donation forms - https://donate.wikimedia.org/wiki/MediaWiki:DonationForm.js
		if ( document.forms['donateForm'] ) {
			var formJS = mw.util.getParamValue( 'formJS' );
			if ( formJS && formJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
				mw.loader.load( '/w/index.php?title=' + formJS + '&action=raw&ctype=text/javascript' );
			} else {
				mw.loader.load( '/w/index.php?title=MediaWiki:DonationForm.js&action=raw&ctype=text/javascript' );
			}

			// Load monthly convert JS
			// TODO: allow loading different JS variants, either here or defined in the Template
			mw.loader.load( '/w/index.php?title=MediaWiki:MonthlyConvert.js&action=raw&ctype=text/javascript' );
		}

		// Allow manual country selection and reload
		// Run this only when needed
		var enableCountrySelect = function() {
			var language = mw.config.get('wgPageContentLanguage'),
				countrySelect = document.getElementById('country-select');

			// Translations
			if ( language !== 'en' && language !== 'en-gb' ) {
				const translationsUrl = 'https://donate.wikimedia.org/wiki/Module:Country_links/data.json?action=raw';
				$.getJSON( translationsUrl, function( translations ) {
					if ( translations[language] ) {
						var list = Array.from( countrySelect.options );
						list.forEach( option => {
							option.innerText = translations[language][option.value] || option.innerText;
						});
						// Sort for new language
						list.sort( function(a, b) {
							return a.innerText.localeCompare( b.innerText );
						});
						for ( var i = 0; i < list.length; i++ ) {
							list[i].parentNode.appendChild( list[i] );
						}
					}
				});
			}

			document.getElementById('country-select-go').addEventListener( 'click', function(e) {
				if ( countrySelect.value ) {
					mw.loader.using( ['mediawiki.Uri'] ).done( function() {
						var uri = new mw.Uri( document.location.href );
						uri.query.country = countrySelect.value;
						document.location = uri.toString();
					});
				}
			});
		};

		if ( document.getElementById('country-change') ) {
			document.getElementById('country-change').addEventListener( 'click', function(e) {
				document.getElementById('country-change-select').style.display = 'block';
				enableCountrySelect();
			});
		}

		if ( document.getElementById('geolocate-error') ) {
			enableCountrySelect();
		}

		try {
			let uri = new mw.Uri( window.location.href );
			if ( uri.query.showCountryConfirm ) {
				document.getElementById('country-confirm').style.display = 'block';
			}
		} catch (error) {
			console.warn('Error parsing URL. Possibly due to unreplaced % signs?');
		}

		// Code for Thank You pages - https://donate.wikimedia.org/wiki/MediaWiki:ThankYouPage.js
		if ( mw.config.get( 'wgTitle' ).indexOf('Thank You') !== -1 ) {
			mw.loader.load( '/w/index.php?title=MediaWiki:ThankYouPage.js&action=raw&ctype=text/javascript' );
		}

		// Code for support pages - https://donate.wikimedia.org/wiki/MediaWiki:SupportPage.js
		// TODO: have a better way to trigger this
		var supportPages = [ 'Ways to Give', 'Problems donating', 'Cancel or change recurring giving',
							 'Matching Gifts', 'Support Page', 'FAQ', 'Tax deductibility',
							 'US State Solicitation Disclosures', 'Draft:FAQ' ];
		if ( supportPages.indexOf( mw.config.get( 'wgTitle' ).split('/')[0] ) !== -1 ) {
			mw.loader.load( '/w/index.php?title=MediaWiki:SupportPage.js&action=raw&ctype=text/javascript' );
		}

		// Load some tools for editors - https://donate.wikimedia.org/wiki/MediaWiki:EditTemplates.js
		if ( mw.config.get( 'wgUserName' ) !== null ) {
			mw.loader.load( '/w/index.php?title=MediaWiki:EditTemplates.js&action=raw&ctype=text/javascript' );
		}

		/**
		 * @source www.mediawiki.org/wiki/Snippets/Load_JS_and_CSS_by_URL
		 * @rev 6
		 */
		var extraCSS = mw.util.getParamValue( 'withCSS' ),
			extraJS = mw.util.getParamValue( 'withJS' );

		if ( extraCSS ) {
			if ( extraCSS.match( /^MediaWiki:[^&<>=%#]*\.css$/ ) ) {
				mw.loader.load( '/w/index.php?title=' + extraCSS + '&action=raw&ctype=text/css', 'text/css' );
			} else {
				mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withCSS value' } );
			}
		}

		if ( extraJS ) {
			if ( extraJS.match( /^MediaWiki:[^&<>=%#]*\.js$/ ) ) {
				mw.loader.load( '/w/index.php?title=' + extraJS + '&action=raw&ctype=text/javascript' );
			} else {
				mw.notify( 'Only pages from the MediaWiki namespace are allowed.', { title: 'Invalid withJS value' } );
			}
		}

	   /* HACK to run certain inline scripts when document ready (e.g. so jquery is avaliable)
			TODO: Make suitable for multiple scripts. Or figure out a better way to do this.
		*/
		if ( typeof inlineScriptWhenReady !== 'undefined') {
			inlineScriptWhenReady();
		}

	} );
});