User:PlaceRebuilder/common.js

/* mw.loader.using(['mediawiki.util', 'mediawiki.api'], function { var ug = mw.config.get('wgUserGroups'); if (ug.indexOf('content-moderator') + ug.indexOf('sysop') + ug.indexOf('vstf') + ug.indexOf('staff') + ug.indexOf('helper') == -5) return; var config = mw.config.get([ 'skin', 'stylepath', 'wgArticlePath', 'wgFormattedNamespaces', 'wgMainpage', 'wgSiteName' ]), token = mw.user.tokens.values.editToken, API = new mw.Api, deleteDelay = window.nukeDelay || 1000; config.wgArticlePath = config.wgArticlePath.slice(0,-2); var self = {	init: function {		$('.header-column.header-title h1').text('Nuke');		document.title = "Nuke - " + config.wgSiteName;		if ($.getUrlVar('nukeuser')) {			var user = $.getUrlVar('nukeuser'),			deleteReason = window.nukeDeleteReason || "Mass removal of pages created by " + user.replace(/_/g,' ');			$('#mw-content-text p').html('Switch to Nuke main form The following pages were created by ' + user.replace(/_/g,' ') + '; put in a comment and hit the button to delete them. Reason for deletion:  Delete Delete');			$('#nuke-status').html('Getting pages... please wait ');			API.get({ action: 'query', list: 'usercontribs', ucnamespace: $.getUrlVar('nukenamespace') || , ucuser: user, uclimit: 5000, cb: new Date.getTime })			.done(function(d) { if (!d.error) { var usercontribs = d.query.usercontribs, maxLimit = $.getUrlVar('nukelimit') || 500, count = 0, images = []; for (var i in usercontribs) { if (count >= maxLimit) break; if (usercontribs[i].hasOwnProperty('new')) { var escapedTitle = encodeURIComponent(usercontribs[i].title); if (!$.getUrlVar('nukematch') || new RegExp($.getUrlVar('nukematch')).test(usercontribs[i].title)) { $('#nuke-query-results').append(' ' + usercontribs[i].title + '</li>'); if (usercontribs[i].title.slice(0,5) == "File:") images.push(usercontribs[i].title); count++; }						}					}					if (!$('.nuke-query-result').length) self.outputError("No user contributions found"); else { if (images.length > 0) self.displayImages(images); }				}				else self.outputError("Failed to get user contributions: " + d.error.code); })			.fail(function { self.outputError("Failed to get user contributions"); });			$('#nuke-status').empty;		}		else {			$('#mw-content-text p').html('This tool allows for mass deletions of pages recently added by a given user or IP address. Input the username or IP address to get a list of pages to delete, or leave blank for all users. Username, IP address or blank: <input type="text" id="nuke-username"/> Pattern for the page name: <input type="text" id="nuke-match"/> Limit to namespace: <select id="nuke-namespace"><option value="All">All <option value="Main" ns="0">Main <option value="Project" ns="4">Project <option value="Project talk" ns="5">Project talk <option value="Talk" ns="1">Talk <option value="User" ns="2">User <option value="User talk" ns="3">User talk <option value="File" ns="6">File <option value="File talk" ns="7">File talk <option value="Template" ns="10">Template <option value="Template talk" ns="11">Template talk <option value="Help" ns="12">Help <option value="Help talk" ns="13">Help talk <option value="Category" ns="14">Category <option value="Category talk" ns="15">Category talk Maximum number of pages: <input type="text" id="nuke-max" value="500"/> <a class="wikia-button" id="nuke-rc">Go</a> ');			$('#nuke-rc').click(function { if ($(this).attr('disabled')) return; $(this).attr('disabled','disabled'); if ($('#nuke-username').val) { var locationStr = config.wgArticlePath + 'Special:Blankpage?blankspecial=nuke&nukeuser=' + $('#nuke-username').val; if ($('#nuke-namespace').val != "All") locationStr += '&nukenamespace=' + $('#nuke-namespace option:selected').attr('ns'); if ($.isNumeric($('#nuke-max').val) && $('#nuke-max').val > 0) locationStr += '&nukelimit=' + $('#nuke-max').val; if ($('#nuke-match').val) locationStr += '&nukematch=' + $('#nuke-match').val; location.replace(locationStr); return; }				$('#nuke-query-results').empty; if ($('.nuke-submit').length) { $('.nuke-submit').remove; $('#mw-content-text > p:nth-child(1) > br:nth-child(14)').remove; }				$('#nuke-status').html('Getting pages... please wait <img src="' + config.stylepath + '/common/progress-wheel.gif"/>'); API.get({						action: 'query',					list: 'recentchanges',					rcshow: '!bot',					rctype: 'new|log',					rclimit: 5000,					cb: new Date.getTime 				}) .done(function(d) {					if (!d.error) {						var recentchanges = d.query.recentchanges,						RCTitles = [],						maxLimit = $('#nuke-max').val || 5000,						count = 0,						images = [];						for (var i in recentchanges) {							if (count >= maxLimit) break;							if ($.inArray(recentchanges[i].title,RCTitles) == -1 && (($('#nuke-namespace').val == "Main" && recentchanges[i].title.split(':').length === 1) || $('#nuke-namespace').val == "All" || $('#nuke-namespace').val == "Project" && new RegExp(config.wgFormattedNamespaces[4] + ':').test(recentchanges[i].title) || $('#nuke-namespace').val == "Project talk" && new RegExp(config.wgFormattedNamespaces[5] + ':').test(recentchanges[i].title) || new RegExp($('#nuke-namespace').val + ':').test(recentchanges[i].title)) && (recentchanges[i].type == "new" || (recentchanges[i].type == "log" && recentchanges[i].ns == 6))) { 								if (!$('#nuke-match').val || new RegExp($('#nuke-match').val).test(recentchanges[i].title)) { RCTitles.push(recentchanges[i].title); var escapedTitle = encodeURIComponent(recentchanges[i].title); $('#nuke-query-results').append('<li class="nuke-query-result"><input type="checkbox" class="nuke-title-check" checked="checked"/> <a href="' + config.wgArticlePath + escapedTitle + '" target="_blank"> ' + recentchanges[i].title + '</a></li>'); if (recentchanges[i].title.slice(0,5) == "File:") images.push(recentchanges[i].title); count++; }							}						}						if (!$('.nuke-query-result').length) self.outputError("No recent changes found"); else { $('#nuke-query-results').before(' <a class="wikia-button nuke-submit">Delete</a>').after('<a class="wikia-button nuke-submit">Delete</a>'); $('#nuke-status').empty; if (images.length > 0) self.displayImages(images); }					}					else self.outputError("Failed to get recent changes: " + d.error.code); })				.fail(function { self.outputError("Failed to get recent changes"); });				$('#nuke-status').empty;				$(this).removeAttr('disabled');			}); }		$('.nuke-submit').click(function {			if (!$('.nuke-query-result').length || $(this).attr('disabled')) return;			$('.nuke-submit').attr('disabled','disabled');			$('#nuke-status').html('Deleting pages... please wait <img src="' + config.stylepath + '/common/progress-wheel.gif"/>');			$('.nuke-title-check:checked').each(function(i) { var title = $(this).parent.find('a').text; setTimeout(function {					API.post({ action: 'delete', title: title, reason: $('#nuke-delete-reason').val || , bot: true, token: token })					.done(function(d) { if (!d.error) { console.log('Deletion of ' + title + ' successful!'); } 						else { console.log('Failed to delete ' + title + ': '+ d.error.code); }					})					.fail(function { console.log('Failed to delete ' + title); });					if (i === $('.nuke-title-check:checked').length - 1) {						setTimeout(function { location.replace(config.wgArticlePath + config.wgMainpage); }, 1000);	 					}				}, i*deleteDelay); });		});	},	outputError: function(text) { switch (config.skin) { case 'oasis': case 'wikia': new BannerNotification(text,'error').show; break; default: alert(text); break; }	},	displayImages: function(imgs) { API.post({ //POST instead of GET for longer length		action: 'query',		prop: 'imageinfo',		titles: imgs.join('|'),		iiprop: 'url',		iilimit: 500		}) .done(function(d) {			if (!d.error) {				mw.util.addCSS('.thumbnail-nuke { width: 120px; height: 77px; }');				for (var i in d.query.pages) {					if (d.query.pages[i].missing != "") {						var href = config.wgArticlePath + encodeURIComponent(d.query.pages[i].title);						$('a[href="' + href + '"]').parent.children('.nuke-title-check').after('<a href="' + href + '"><img class="thumbnail-nuke" src="' + d.query.pages[i].imageinfo[0].url + '" /></a>');					}				}			}			else				self.outputError('Failed to display images: ' + d.error.code);		}) .fail(function {				self.outputError('Failed to display images');					}); } }; switch (mw.config.get('wgCanonicalSpecialPageName')) { case "Contributions": $('#contentSub a:last-child').after(' | <a title="Special:Nuke" href="' + mw.config.get('wgArticlePath').replace('$1','Special:Blankpage?blankspecial=nuke&nukeuser=' + mw.config.get('wgPageName').split('/')[1] ) + '">Nuke</a>'); break; case "Specialpages": if (!$('a[title="Special:Nuke"]').length) $('.mw-specialpagerestricted a[title="Special:Undelete"]').after('<li class="mw-specialpagerestricted"><a title="Special:Nuke" href="' + mw.config.get('wgArticlePath').replace('$1','Special:Blankpage?blankspecial=nuke') + '">Mass delete</a></li>'); else $('.mw-specialpagerestricted a[title="Special:Nuke"]').after('<li class="mw-specialpagerestricted"><a title="Special:Nuke" href="' + mw.config.get('wgArticlePath').replace('$1','Special:Blankpage?blankspecial=nuke') + '">Mass delete (JavaScript)</a></li>'); break; case "Blankpage": if ($.getUrlVar('blankspecial') == "nuke") self.init; break; default: return; break; } });
 * Nuke
 * Reverse engineered Nuke extension
 * https://www.mediawiki.org/wiki/Extension:Nuke is the page of the official MW extension
 * @author Ozank Cx
 * @todo - implement usercontribs API if Wikia update to MW 1.23+