Note: After saving, you have to bypass your browser's cache to see the changes. Internet Explorer: press Ctrl-F5, Mozilla: hold down Shift while clicking Reload (or press Ctrl-Shift-R), Opera/Konqueror: press F5, Safari: hold down Shift + Alt while clicking Reload, Chrome: hold down Shift while clicking Reload.
/* jshint curly:false, scripturl:true, strict:true */
/* global mw, $, importScript*/

var ns = mw.config.get('wgNamespaceNumber'), //  global [[Bugzilla:33837]] <nowiki>
	ul = mw.config.get('wgUserLanguage'),
	pn = mw.config.get('wgPageName'),
	un = mw.config.get('wgUserName'),
	ac = mw.config.get('wgAction'),
	ti = mw.config.get('wgTitle'),
	cun = '', // (optional) CUSTOM username
	convertToSVGTypes = 'geology, meteorology, road sign, text logo',
	GlobalReplaceDefaultReason = '',
	ext, bSVG,
	AjaxDeleteExtraButtons = [];

window.delReqGlobalUsage = 1; // AQD DelReqHandler
// window.largerGallery = 1.25;

function prefillDupe(e) { // hack for AjaxDeleteExtraButtons duplicate
	'use strict';
	if (!e || !e.target) return;
	e.preventDefault();
	AjaxQuickDelete.insertTagOnPage(
		'{{duplicate|1=%PARAMETER%|user=%USER%}}',
		'Tagging as duplicate of [[File:%PARAMETER%]]',
		'{{subst:Speedynote|1=%FILE%|2={{subst:int:File-exists-duplicate|}} [[:File:%PARAMETER%]].}}',
		'Duplicate notification',
		'Which file is this a duplicate of?',
		'', 1
	);
	setTimeout(function () { // cleanup prefix / namespace "File:"
		var $t = $('#AjaxQuestion0');
		$t.val($('#mw-imagepage-section-duplicates ul a').eq(0).attr('title')).focusout(function (e) {
			e.preventDefault();
			return $t.val($.trim($t.val()).replace(/^[Ff]ile\:/, ''));
		});
	}, 200);
}

switch (ns) {
	case 6: /** Files only **/
		ext = ti.slice(-3).toUpperCase();
		bSVG = (!ext.indexOf('SVG'));

		// importScript('MediaWiki:ExCommons.js');  // - copy files to individual Wikis before deleting them on Commons
		// importScript('User:Sreejithk2000/JustReplace.js');
		importScript('User:Perhelion/JustReplace+.js');
		importScript('User:Perhelion/cleanup.js'); // File desc. cleanup
		// importScript('User:Magog the Ogre/cleanup.js'); // File desc. cleanup
		// importScript('User:Rillke/bigChunkedUpload.js'); // [[Help:Chunked upload]]

		importScript('User:Majora/LicenseReview.js');

		/* // AQD prefill move values
	if (!$('#AjaxRenameLink').length) // AQD prefill move values
		$('#mw-content-text').after($('<div>', {
				id: 'AjaxRenameLink',
				style: 'visibility:hidden'
			}).append([
					$('<span>', {
						id: 'AjaxRenameDestination',
						text: "OOjs UI icon "
					}),
					$('<span>', {
						id: 'AjaxRenameReason',
						text: "[[COM:MOVE#cite_ref-2|move criteria #2]] (+more meaningful)"
					})
				]));*/

		if (bSVG) { /** SVG only **/

		// Simple SVG code edit (beta)
			importScript('User:Rillke/SVGedit.js');

			// W3C-Validator check-link for every SVG (by [[User: Perhelion]] fixed also now for admins); + detailed byte-size
			importScript('User:Perhelion/simpleSVGcheck.js');

			AjaxDeleteExtraButtons.push({
				label: 'PoorSVG', // TracedSVG
				tag: '{{PoorSVG|1=%PARAMETER%}}', // Raster file
				img_summary: 'This SVG contains poor traced elements, please revectorize',
				talk_tag: '{{subst:TracedSVG/notify|1=%FILE%|2=%PARAMETER%}}',
				talk_summary: 'Poor SVG note',
				prompt_text: 'Which file is the original of?',
				optin_notify: 1
			}, {
				label: 'BadSVG',
				tag: '{{BadSVG}}',
				img_summary: 'This file contains raster graphics that should be removed',
				talk_tag: '{{subst:BadSVG/notification|1=%FILE%}}',
				talk_summary: 'Bad SVG note',
				prompt_text: 'Please remove embedded raster graphics?',
				optin_notify: 1
			}, {
				label: 'SVGbug', // SVGbug
				tag: '{{SVGbug|1=%PARAMETER%}}', // Raster file
				img_summary: 'This SVG contains one or more libRSVG bugs',
				prompt_text: 'Description of the bug or a link?'
			});
		} else { // not SVG
			AjaxDeleteExtraButtons.push({
				label: 'ToSVG notify',
				tag: '{{Convert to SVG|%PARAMETER%}}',
				img_summary: 'This file should be better a SVG',
				talk_tag: '{{subst:Please use SVG|1=%FILE%}}',
				talk_summary: 'Use SVG note',
				prompt_text: 'Please use SVG insteed of raster graphics. Which type?'
			});
			GlobalReplaceDefaultReason = ext + ' → SVG';
			importScript('User:Perhelion/fixconverttosvg.js');
		}

		// [[Help:QuickDelete]]
		// To watch user talk pages, to which you add tags
		window.AjaxDeleteWatchUserTalk = true;
		// To watch file pages, to which you add tags
		window.AjaxDeleteWatchFile = true;
		// adding more buttons :
		AjaxDeleteExtraButtons.push({
	    label: 'Copyvio (www)',
	    tag: '{' + '{copyvio|1=[[COM:NETCOPYRIGHT|Copyright violation]], found elsewhere on the web and unlikely to be own work: [https://www.google.com/searchbyimage?image_url={{filepath:{' + '{subst:BASEPAGENAME}}}} google search]}}',
	    img_summary: 'speedy deletion: possible copyvio',
	    talk_tag: '{' + '{subst:copyvionote|1=%FILE%}}',
	    talk_summary: 'Notification of possible copyright violation for %FILE%'
		}, /* { //notice talk_tag and talk_summary must be '' (void string) if uploader must not be notified
		'label' : 'Duplicate',
		'tag' : '{{duplicate|1=%PARAMETER%|user=%USER%}}',
		'img_summary' : 'Tagging as duplicate of [[File:%PARAMETER%]]', // FIXME!?: $.trim(%PARAMETER%).replace(/^(?:File|Image)\:/, '')
		'talk_tag' : '{{subst:Speedynote|1=%FILE%|2={{subst:int:File-exists-duplicate|}} [[:File:%PARAMETER%]].}}',
		'talk_summary' : 'Duplicate notification',
		'prompt_text' : 'Which file is this a duplicate of?',
		optin_notify: 1
		},  */
		{ // notice talk_tag and talk_summary must be '' (void string) if uploader must not be notified
			label: 'Speedy',
			tag: '{{Speedydelete|1=%PARAMETER%}}',
			img_summary: 'Tagging as speedy delete because: %PARAMETER%',
			talk_tag: '{{subst:Speedynote|1=%FILE%|2=%PARAMETER%}}',
			talk_summary: 'Speedy notification',
			prompt_text: 'Speedy: why ? MUST PREVENT UPLOADER'
		}, {
			label: 'Wrong License',
			tag: '{{wl|1=%PARAMETER%}}',
			img_summary: 'Tagging as wrongly licensed because: %PARAMETER%',
			talk_tag: '{{subst:Wrong license note|2=%PARAMETER%|1=%FILE%}}',
			talk_summary: 'Notification of possible wrong license',
			prompt_text: 'Incorrect license: reason?'
		}, {
			label: 'Thumbnail',
			tag: '{{Thumbnail}}',
			img_summary: 'Tagging as thumbnail',
			talk_tag: '{{subst:Do not upload thumbnails|1=%FILE%}}',
			talk_summary: 'Thumb note',
			prompt_text: 'Please re-upload the full resolution version?',
			optin_notify: 1
		}, {
			label: 'Watermark',
			tag: '{{Watermark|1=}}',
			img_summary: 'This file contains a watermark that should be removed',
			talk_tag: '{{subst:No watermarks|1=:%FILE%}}',
			talk_summary: 'Watermarks note',
			prompt_text: 'Please remove Watermarks?',
			optin_notify: 1
		});

		// [[MediaWiki:Gadget-AjaxQuickDelete.js]]
		$.when(mw.loader.using('mediawiki.util'), $.ready).always(function () {
			'use strict';
			$(mw.util.addPortletLink('p-tb', '#', 'Duplicate', 't-dupe', null)).on('click', prefillDupe);
			mw.util.addPortletLink('p-cactions', 'https://tools.wmflabs.org/derivative/deri1.php?image=File:' + ti, 'derivateFX', 't-derivate', null);
			importScript('MediaWiki:Gadget-InformationToCOA.js');
		});

		// Make editing and adding descriptions easier
		// importScript('User:MarkTraceur/editDescriptions.js'); too beta
		break; // Files only end
	case -1:
	// importScript('User:Whym/lockrollback.js');
		$('.mw-rollback-link a').hide();

		switch (mw.config.get('wgCanonicalSpecialPageName')) {
			case 'Search':
				mw.loader.load('https://de.wikipedia.org/w/index.php?title=MediaWiki:Gadget-DeepCat.js&action=raw&ctype=text/javascript');
				break;
			case 'Contributions': // Admin only
				// mw.loader.load('https://en.wikipedia.org/w/index.php?title=User:Writ_Keeper/Scripts/massRevdel.js&action=raw&ctype=text/javascript');
				break;
			case 'RecentChanges':
				importScript('User:Krinkle/SplitRC2.js');
				break;
			case 'Watchlist':
				importScript('User:Krinkle/Watchlist-wo-usercreations.js');
				break;
		}
		break;
	case 2:
	case 3:
		importScript('User:~riley/gadgets/SpamUserPage.js'); // Linkback: [[User:Mr. Stradivarius/gadgets/SpamUserPage.js]]
		break;
	case 14:
		if (ac === 'view') {
			importScript('User:Jheald/wdcat.js');
			importScript('User:Perhelion/massrename.js');
			// SORT CONVERT-TO-SVG TAGS:
			importScript('User:Perhelion/fixconverttosvg.js');

		}
		if (ti === 'Media requiring renaming') // [[:Category:Media requiring renaming]]
			window.largerGalleryZoom = 1;
}

if (ac === 'history') { // Patroller only
	importScript('MediaWiki:PatrolPageRevisions.js');
	mw.loader.using('jquery.confirmable', function () {
		'use strict';
		$('.mw-rollback-link a').addClass('reactivate-as-confirmable').confirmable();
	});
} else if (['edit', 'submit'].indexOf(ac) !== -1) {
	// Autocomplete for links and templates, written by [[משתמש:ערן]]
	mw.loader.load('https://he.wikipedia.org/w/load.php?modules=ext.gadget.autocomplete', 'text/javascript', false);
}

// Insert a personalized Texttemplate into the Special:Upload edit box.
// I upload mostly my own work; preload input form; adapted from [[User: Dschwen]]
$(function () {
	'use strict';
	if (pn === 'Special:Upload' && /&uselang=([^&]*)ownwork/.test(location.search)) {
		var re = RegExp.$1;
		// mw.loader.using('moment',function(){
		setTimeout(function () {
			$('#wpUploadDescription').val(
				'== {{int:filedesc}} ==\n' +
				'{{Information\n' +
				'|description=\n{{en|1=}}\n' +
				(re ? '{{' + re + '|1=}}\n' : '') +
				'|date=' + '{{Originaluploaddate|}} {{vectorization}}' +
				'{{Uploaddate|{{subst:CURRENTYEAR}}-{{subst:CURRENTMONTH}}-{{subst:CURRENTDAY2}}}}\n' +
				'|source={{own based|…}}\n' +
				// + moment().format('YYYY-MM-DD') + '}}\n' +
				'|author={{AutVec||' + un + '}}\n' +
				'|permission=\n' +
				'|other versions=\n' +
				'<gallery widths="100" heights="100" showfilename>\n\n</gallery>\n' +
				'|other fields={{Igen|h|+|s=|u=' + un + '}}\n' +
				'}}\n\n' +
				'== {{int:license-header}} ==\n' +
				'{{self|GFDL|cc-by-sa-4.0|author=I, [[User:' + un + '|' + cun + ']]}}');
		}, 100);
		// });
	} else { $('#n-uploadbtn').children('a').attr('href', '/w/index.php?title=Special:Upload&uselang=' +	(ul === 'en' ? '' : ul) + 'ownwork&uploadformstyle=plain'); }
});

mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Hoo_man/smart_rollback.js&action=raw&ctype=text/javascript');
// Warning this action does fastundo on contributions or diff without confirm.
importScript('User:Perhelion/AjaxUndo.js');
if (ns !== -1) mw.loader.using('mediawiki.util', function () {
	importScript('MediaWiki:Gadget-NewPP-report.js');
});

// //////// Cat-A-Lot user preferences //////////
window.catALotPrefs = {
	watchlist: 'watch',
	minor: true,
	editpages: true,
	docleanup: true,
	subcatcount: 50
};

/* MediaWiki:Gadget-markAdmins.js configuration */
window.markAdminCfg = {
	groups: {
		'steward':	{ enabled: 1 },
		'vrt-permissions':	{ enabled: 1 },
		'image-reviewer':	{ enabled: 1 }
	}
};

// vFCProfil/////////////////////////////////////
// ///// VISUAL FILE CHANGE CONFIGURATION ///////
// /// DO NOT MODIFY BY HAND - FINGERS AWAY! ////
// //////////////////////////////////////////////
window.vFC_Profiles = { SVG: { editInputs: { mdDeleteReason: '', mdEditSummary: '→SVG', mdReplacePermission: false, mdDeleteHeading: 'Files in [[:Category:Diagrams in German]] ', mdTalkNote: 'Yours sincerely,', mdRRegEx1: true, mdRVar1: true, mdMatchText1: '/Category:Charts in English/g', mdReplaceText1: 'Category:SVG charts in English', mdRRegEx2: false, mdRVar2: true, mdMatchText2: '', mdReplaceText2: '', selPreserve: 'secure', alsoPreserve: '' }, action: 'c_replace', objectMembers: { queryParams: { target: 'Category:Charts in English', cmdir: 'asc', cmsort: 'sortkey', cmstartsortkey: '', cmcontinue: 'file|57494b49534f555243452028454e2920464952535420313030302056414c49444154494f4e532e504e47|25826615' }, startInput: { mode: 'Category', modeCat: true, modeUser: false, modePage: false, target: 'Category:Charts in English', loadThumbs: true, loadWikitext: true, startDate: '', startFile: '' } }, proceedAt: { vals: ['file|454c454354524f4e4943204348454154494e4720504152454e54532050455243455054494f4e532e504e47|17574410', 'file|57494b49534f555243452028454e2920464952535420313030302056414c49444154494f4e532e504e47|25826615'], setVals: ['cmcontinue'] }, time: '2015-07-21T16:50:16.750Z' } };
// ////////////////////////////////vFCProfilEnd//
// </nowiki>

// catALot///////////////////////////////////////
// //////// Cat-a-lot user preferences //////////
window.catALotPrefs = { redir_category: 'Category redirects', watchlist: 'nochange', minor: true, editpages: true, docleanup: true, subcatcount: 50, button: true };
// //////////////////////////////////catALotEnd//