User:Coeee/common.js

/* * Rollback * Perform rollbacks without needing to be in the usergroup * @author Ozuzanna */ ; (function($, mw) { var main = { 	init: function { 		//check if user has rollback permission already 		var userGroups = ["rollback","content-moderator","sysop","vstf","helper","staff"], 		ownGroups = mw.config.get('wgUserGroups'), 		hasPermissionAlready = false; 		for (var i in ownGroups) { 			if (userGroups.indexOf(ownGroups[i]) !== -1) { 				hasPermissionAlready = true; 				break; 			} 		} 		if (hasPermissionAlready) return; 		if (mw.config.get('wgAction') == "history" && $('#pagehistory li').length > 1) 			$('#pagehistory li:first .mw-history-undo a').before(' rollback | '); 		else if (mw.config.get('wgCanonicalSpecialPageName') == "Contributions") { 			$('#mw-content-text ul').find('li').each(function { if ($(this).find('.mw-uctop').length) $(this).append(' [rollback] '); }); 		} 		else if (($.getUrlVar('diff') || $.getUrlVar('oldid')) && $('#differences-nextlink').length == 0) 			$('.mw-usertoollinks:last').after('   [rollback] '); 		$('.mw-custom-rollback-link a').click(function { main.getRevisionIdAndContent($(this).attr('data-id')); }); 	}, 	getRevisionIdAndContent: function(title) { 		var API = new mw.Api; 		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; } 				var currentUser = revisions[0].user, //current user rollbacking from lastUser, revId; for (var i in revisions) { if (revisions[i].user != currentUser) { lastUser = revisions[i].user; //remember last author revId = revisions[i].revid; //get revision to revert to 						break; } 				} 				if (lastUser) { 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 so initialise empty as failsafe 							for (var i in d.query.pages) { 								if (d.query.pages[i].revisions) 									content = d.query.pages[i].revisions[0]["*"]; 							} 							main.performRollback(title,content,currentUser,lastUser); 						} 						else 							new BannerNotification('Unable to rollback (failed to get page content): ' + d.error.code,'error').show; 					}) .fail(function { 						new BannerNotification('Unable to rollback: failed to get page content!','error').show;				 					}); } 				else new BannerNotification('Unable to rollback: no different editor found!','error').show; } 			else new BannerNotification('Unable to rollback (failed to get revisions): ' + d.error.code,'error').show; }) 		.fail(function { new BannerNotification('Unable to rollback: failed to get revisions!','error').show; });			 	}, 	performRollback: function(page,text,user,user2) { 		var API = new mw.Api; 		API.post({ action: 'edit', title: page, text: text, summary: 'Reverted edits by ' + user + ' (talk | block ) to last version by ' + user2 + ' (script)', token: mw.user.tokens.values.editToken }) 		.done(function(d) { if (!d.error) { new BannerNotification('Rollback successful!','confirm').show; } 			else new BannerNotification('Unable to rollback (failed to publish edit): ' + d.error.code,'error').show; }) 		.fail(function { new BannerNotification('Unable to rollback: failed to publish edit!','error').show; });	 	} }; main.init; }) (this.jQuery, this.mediaWiki);