User:C.Syde65/global.js

AjaxRCRefreshText = 'Auto-refresh'; AjaxRCRefreshHoverText = 'Automatically refresh the page'; ajaxPages = ["Special:RecentChanges", "Special:WikiActivity"];

window.UserTagsJS = { modules: { inactive: 62, newuser: true, autoconfirmed: true, mwGroups: [ 'bureaucrat', 'sysop', 'assistant', 'rollback', 'chatmoderator', 'bannedfromchat' ]   },    tags: { assistant: 'Assistant', threadmoderator: 'Discussions Moderator', 'content-moderator': 'Content Moderator' },   oasisPlaceBefore: '' };

importArticles({   type: 'script',    articles: [        'u:dev:MediaWiki:ChatHacks.js',        'u:dev:MediaWiki:EditIntroButton/code.js',        'u:dev:MediaWiki:AjaxRC/code.js',        'u:dev:MediaWiki:PurgeButton/code.js',        'u:dev:MediaWiki:UserTags/code.js',        'u:dev:MediaWiki:RevealAnonIP/code.js',        'u:dev:MediaWiki:FindAndReplace/code.js'    ] });

/* mw.loader.using(['mediawiki.util', 'mediawiki.api'], function {
 * 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+

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"/> 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"/>  ' + 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(' Delete</a>').after('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('<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(' | Nuke</a>'); break; case "Specialpages": if (!$('a[title="Special:Nuke"]').length) $('.mw-specialpagerestricted a[title="Special:Undelete"]').after('<li class="mw-specialpagerestricted">Mass delete</a></li>'); else $('.mw-specialpagerestricted a[title="Special:Nuke"]').after('<li class="mw-specialpagerestricted">Mass delete (JavaScript)</a></li>'); break; case "Blankpage": if ($.getUrlVar('blankspecial') == "nuke") self.init; break; default: return; break; }

});

/* mw.loader.using('mediawiki.api', function {	//Exit if normal rollback links are present	if ($('.mw-rollback-link').length) return;	var conf = mw.config.get([ 'wgAction', 'wgCanonicalSpecialPageName', 'wgContentLanguage', 'wgPageName', 'wgUserLanguage', 'skin' ]),	i18n = {		en: {			rollback: "rollback",			description: "&quot;Rollback&quot; reverts edit(s) to this page of the last contributor in one click",			summary: "Reverted edits by $1 (talk | block) to last version by $2 (script)",			summaryShort: "Reverted edits by $1 (talk | block) to last version by $2 (script)",			editConflict: "Unable to rollback (edit conflict)",			contentFail: "Unable to rollback (failed to get page content)",			singleEditor: "Unable to rollback (no different editor found)",			revisionFail: "Unable to rollback (failed to get revisions)",			editFail: "Unable to rollback (failed to publish edit)",			success: "Rollback successful"		}	};	i18n = i18n[conf.wgUserLanguage] || i18n[conf.wgUserLanguage.split('-')[0]] || i18n[conf.wgContentLanguage] || i18n[conf.wgContentLanguage.split('-')[0]] || i18n.en; conf.API = new mw.Api; conf.token = mw.user.tokens.values.editToken; //History if (conf.wgAction == "history" && $('#pagehistory li').length > 1) $('#pagehistory li:first .mw-history-undo a').before(' ' + i18n.rollback + '</a> | '); //Contributions else if (conf.wgCanonicalSpecialPageName == "Contributions") { $('#mw-content-text ul').find('li').each(function {			if ($(this).find('.mw-uctop').length)				$(this).append(' [' + i18n.rollback + '</a>] ');		}); }	//Diffs else if (($.getUrlVar('diff') || $.getUrlVar('oldid')) && $('#differences-nextlink').length === 0) $('.mw-usertoollinks:last').after('   [' + i18n.rollback + '</a>] '); else return; mw.util.addCSS('.mw-custom-rollback-link a { cursor: pointer; }'); $('.mw-custom-rollback-link a').click(function {		getRevisionIdAndContent($(this).data('id'),$(this).data('user').replace(/_/g, " "));		$(this).parent.remove;	}); function getRevisionIdAndContent(title,target) { conf.API.get({		action: 'query',		prop: 'revisions',		titles: title,		rvprop: 'user|ids',		rvlimit: 500,		cb: new Date.getTime		}) .done(function(d) {			if (!d.error) {				var revisions;				for (var i in d.query.pages) {					revisions = d.query.pages[i].revisions;				}				//Don't rollback if the page has been edited since by somebody else than the intended person to rollback from				if (target != revisions[0].user) {					outputError(i18n.editConflict);					return;				}				var lastUser,				revId;				for (var j in revisions) {					if (revisions[j].user != target) {						lastUser = revisions[j].user; //remember last author						revId = revisions[j].revid; //get revision to revert to						break;					}				}				if (lastUser) {					conf.API.get({ action: 'query', prop: 'revisions', rvprop: 'content', revids: revId, cb: new Date.getTime })					.done(function(d) { if (!d.error) { var content = ""; //can be no content on page for (var i in d.query.pages) { if (d.query.pages[i].revisions) content = d.query.pages[i].revisions[0]["*"]; }							performRollback(title,content,target,lastUser); }						else outputError(i18n.contentFail + ': ' + d.error.code); })					.fail(function { outputError(i18n.contentFail); });				}				else					outputError(i18n.singleEditor);			}			else				outputError(i18n.revisionFail + ': ' + d.error.code);		}) .fail(function {			outputError(i18n.revisionFail);		}); }	function performRollback(page,text,user,user2) { var summary = i18n.summary.replace(/\$1/g,user).replace(/\$2/g,user2); conf.API.post({		action: 'edit',		title: page,		text: text,		summary: summary,		minor: true,		token: conf.token		}) .done(function(d) {			if (!d.error) {				new BannerNotification(i18n.success,'confirm').show;							}			else				outputError(i18n.editFail + ': ' + d.error.code);		}) .fail(function {			outputError(i18n.editFail);		}); }	function outputError(text) { switch (conf.skin) { case 'oasis': case 'wikia': new BannerNotification(text,'error').show; break; default: alert(text); break; }		} }); // Adds NavigationPopups // wikipedia:User:Lupin/popups popupRevertSummary = 'Revert to revision dated %s by %s, oldid %s using popups'; popupQueriedRevertSummary = 'Revert to revision $1 dated $2 by $3 using popups'; popupExtendedRevertSummary = 'Revert to revision dated %s by %s, oldid %s using popups'; popupQueriedRevertToPreviousSummary = 'Revert to the revision prior to revision $1 dated $2 by $3 using popups'; popupRevertToPreviousSummary = 'Revert to the revision prior to revision %s using popups'; popupRevertSummaryPrompt = true; popupStructure = 'menus'; popupFixDabs = 'true'; popupFixDabsSummary = 'Disambiguate %s to %s using popups'; popupRmDabLinkSummary = 'Remove link to dab page %s using popups'; mw.loader.load("//en.wikipedia.org/w/index.php?title=User:Lupin/popups.js&action=raw&ctype=text/javascript&oldid=805750784"); importStylesheetURI('https://en.wikipedia.org/w/index.php?action=raw&ctype=text/css&title=MediaWiki:Gadget-navpop.css'); // END Adds NavigationPopups // install User:Cacycle/wikEdDiff enhanced diff importScriptURI('//en.wikipedia.org/w/index.php?title=User:Cacycle/wikEdDiff.js&action=raw&ctype=text/javascript');
 * Rollback
 * @description Perform rollbacks without needing to be in the usergroup
 * @author Ozank

if(window.location.pathname.indexOf('Special:InfoboxBuilder') != -1) { var pname = window.location.pathname.split('Special:InfoboxBuilder/')[1]; location.replace(document.URL.replace(window.location.href.split('/wiki/')[1], 'Template:' + pname + '?action=edit&useeditor=source')); }

importArticles({   type: 'script',    articles: [        'u:dev:MediaWiki:WorkingMoreUsersCount.js'    ] });

// Add wgWikiName variable to mw.config // By User:Colouratura mw.config.values[ 'wgWikiName' ] = function { return window.location.toString.split( '.wikia.com' )[ 0 ].slice( 7 ); };

// Load the following code on vstf.wikia.com and communitycouncil.wikia.com only if (['vstf', 'communitycouncil'].includes(mw.config.get('wgWikiName'))) { importArticles({   type: 'script',    articles: [        'u:dev:SeeMoreActivityButton/code.js',        'u:dev:AjaxRC/code.js',    ]  });

;(function {   if (navLinks) return;    var user = mw.util.wikiUrlencode(mw.config.get('wgUserName')),        links = {          contribs: {            text: 'My Contributions',            url: '/wiki/Special:Mycontributions'          },          blogs: {            text: 'My Blogs',            url: '/wiki/User_blog:' + user          },          watchlist: {            text: 'My Watchlist',            url: '/wiki/Special:Watchlist'          },          followed: {            text: 'My Followed Pages',            url: '/wiki/Special:Following'          }      },      html = '',      navLinks = true;    for (var i in links) {      html += '<li>' + links[i].text + '</a></li>';    }    document.querySelector('.wds-global-navigation__user-menu .wds-list > li:nth-child(2)').insertAdjacentHTML('afterEnd', html);  }); }

importArticles({   type: 'script',    articles: [        // ...        'u:kocka:MediaWiki:AjaxThreadDelete/code.js',        // ...    ] });