Monchbox Wiki
Advertisement

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/* 
 * WhamAPI.js, inspired by Joeyaa's Wham.js (http://vstf.wikia.com/wiki/User:Joeyaa/wham.js)
 * 
 * Basically this is an API version of Wham that allows you to not only wham people from any number of random pages,
 * but also with more control over which things you wham. Because some people have some legit contribs
 */

importScriptURI('http://monchbox.wikia.com/index.php?title=MediaWiki:APIQuery.js&action=raw&ctype=text/javascript');

function WhamUI() {
	if(!document.getElementById('wham')) {
		if(wgPageName == 'Special:RecentChanges'){
		var html = '<div id="wham" onmouseover="this.getElementsByTagName(\'div\')[0].style.display = \'block\'" onmouseout="this.getElementsByTagName(\'div\')[0].style.display = \'none\'" style="width:170px; font-size:12px; line-height:12px; color:red; margin:0 2px 2px 2px;">Wham<div style="position:absolute; width:170px; padding:5px; background-color:#fff; color:#333; border:1px solid #aaa; display:none;"><div><label for="wham-user">User</label><input id="wham-user" type="text" style="display:block; width:165px;"></div><div><label for="wham-user" title="Only delete/rollback edits since this time">Since</label><input id="wham-since" type="text" style="display:block; width:165px;"></div><div><label for="wham-summary">Summary</label><input id="wham-summary" type="text" style="display:block; width:165px;"></div><div><label for="wham-expiry" title="Only used in blocks">Expiry</label><input id="wham-expiry" type="text" style="display:block; width:165px;"></div><div style="font-size:13px;"><a id="wham-delete" href="javascript:Whamdelete(document.getElementById(\'wham-user\').value, document.getElementById(\'wham-since\').value, document.getElementById(\'wham-summary\').value)">Delete</a> | <a id="wham-delete" href="javascript:Whamrollback(document.getElementById(\'wham-user\').value, document.getElementById(\'wham-since\').value, document.getElementById(\'wham-summary\').value)">Rollback</a> | <a id="wham-delete" href="javascript:Whamblock(document.getElementById(\'wham-user\').value, document.getElementById(\'wham-summary\').value, document.getElementById(\'wham-expiry\').value)">Block</a> | <a id="wham-all" href="javascript:Wham(document.getElementById(\'wham-user\').value, document.getElementById(\'wham-since\').value, document.getElementById(\'wham-summary\').value, document.getElementById(\'wham-expiry\').value)">All</a></div></div></div>';
			if(document.body.className.indexOf('skin-oasis') != -1) {
				if(document.getElementById('WikiHeader').getElementsByTagName('div')[0].className.indexOf('AdminDashboardGeneralHeader') != -1) {$('.AdminDashboardGeneralHeader').after(html);}
				else {$('#WikiaPageHeader').append(html);}
			}
			else {
				$('#firstHeading').append(html);
			}
		}
		if(wgPageName == 'Special:Contributions') {
			var html = '<div id="wham" onmouseover="this.getElementsByTagName(\'div\')[0].style.display = \'block\'" onmouseout="this.getElementsByTagName(\'div\')[0].style.display = \'none\'" style="width:170px; font-size:12px; line-height:12px; color:red; margin:0 2px 2px 2px;">Wham<div style="position:absolute; width:170px; padding:5px; background-color:#fff; color:#333; border:1px solid #aaa; display:none;"><div><label for="wham-since" title="Only delete/rollback edits since this time">Since</label><input id="wham-since" type="text" style="display:block; width:165px;"></div><div><label for="wham-summary">Summary</label><input id="wham-summary" type="text" style="display:block; width:165px;"></div><div><label for="wham-expiry" title="Only used in blocks">Expiry</label><input id="wham-expiry" type="text" style="display:block; width:165px;"></div><div style="font-size:13px;"><a id="wham-delete" href="javascript:Whamdelete(\'' + $('input[name="target"]')[0].value + '\', document.getElementById(\'wham-since\').value, document.getElementById(\'wham-summary\').value)">Delete</a> | <a id="wham-delete" href="javascript:Whamrollback(\'' + $('input[name="target"]')[0].value + '\', document.getElementById(\'wham-since\').value, document.getElementById(\'wham-summary\').value)">Rollback</a> | <a id="wham-delete" href="javascript:Whamblock(\'' + $('input[name="target"]')[0].value + '\', document.getElementById(\'wham-summary\').value, document.getElementById(\'wham-expiry\').value)">Block</a> | <a id="wham-all" href="javascript:Wham(\'' + $('input[name="target"]')[0].value + '\', document.getElementById(\'wham-since\').value, document.getElementById(\'wham-summary\').value, document.getElementById(\'wham-expiry\').value)">All</a></div></div>';
			if(document.body.className.indexOf('skin-oasis') != -1) {
				$('#WikiaArticle').prepend(html);
			}
			else {
				$('#contentSub').append(html);
			}
		}
	}
}
addOnloadHook(WhamUI);
if(window.ajaxCallAgain) {ajaxCallAgain.push(WhamUI);}

function Wham(user, time, summary, expiry) {
	var limit = 50;
	if(!user) {return;}
	if(time) {time = timestr(time); limit = 5000;} //Try parsing basic format: HH:MM, MN DD, YYYY
	else {time = '';}
	if(!summary) {var summary = '';}
	if(!expiry) {var expiry = '2 week';}

	api.send(new api.Query(api, 'GET', 'action=query&list=usercontribs&ucuser=' + user + '&ucend=' + time + '&uclimit=' + limit, function(result) {
		for(var i in result.query.usercontribs) {
			if(result.query.usercontribs[i].new == '') {
				$('a[title="' + result.query.usercontribs[i].title + '"] ~ abbr.newpage').html('<img src="https://images.wikia.nocookie.net/dev/images/8/82/Facebook_throbber.gif" style="vertical-align: baseline;" border="0" alt="Whamming...">');
				api.send(new api.Query(api, 'POST', 'action=delete&title=' + result.query.usercontribs[i].title + '&reason=' + summary, function(result) {
					$('a[title="' + this.params.title + '"] ~ abbr.newpage').html('Wham\'d');
				}));
			}
			else if(result.query.usercontribs[i].top == '') {
				$('a[title="' + result.query.usercontribs[i].title + '"] + span + span.mw-uctop').html('<img src="https://images.wikia.nocookie.net/dev/images/8/82/Facebook_throbber.gif" style="vertical-align: baseline;" border="0" alt="Whamming...">');
				api.send(new api.Query(api, 'POST', 'action=rollback&title=' + result.query.usercontribs[i].title + '&user=' + user + '&summary=' + summary, function(result) {
					$('a[title="' + this.params.title + '"] + span + span.mw-uctop').html('Wham\'d');
				}));
			}
		}
	}));
	Whamblock(user, summary, expiry);
}
function Whamblock(user, summary, expiry) {
	if(!user) {return;}
	if(!summary) {var summary = '';}
	if(!expiry) {var expiry = '2 week';}
	api.send(new api.Query(api, 'POST', 'action=block&user=' + user + '&expiry=' + expiry + '&reason=' + summary + '&nocreate&autoblock&noemail', function(result) {
		$('a[title="User:' + this.params.user + '"]').after('<span> (Wham\'d)</span>');
	}));
}
function Whamdelete(user, time, summary) {
	var limit = 50;
	if(!user) {return;}
	if(time) {time = '&ucend=' + timestr(time); limit = 5000;}
	else {time = '';}
	if(!summary) {var summary = '';}
	api.send(new api.Query(api, 'GET', 'action=query&list=usercontribs&ucuser=' + user + time + '&uclimit=' + limit, function(result) {
		for(var i in result.query.usercontribs) {
			if(result.query.usercontribs[i].new == '') {
				$('a[title="' + result.query.usercontribs[i].title + '"] ~ abbr.newpage').html('<img src="https://images.wikia.nocookie.net/dev/images/8/82/Facebook_throbber.gif" style="vertical-align: baseline;" border="0" alt="Whamming..."> ');
				api.send(new api.Query(api, 'POST', 'action=delete&title=' + result.query.usercontribs[i].title + '&reason=' + summary, function(result) {
					$('a[title="' + this.params.title + '"] ~ abbr.newpage').html('Wham\'d ');
				}));
			}
		}
	}));
}
function Whamrollback(user, time, summary) {
	var limit = 50;
	if(!user) {return;}
	if(time) {time = '&ucend=' + timestr(time); limit = 5000;}
	else {time = '';}
	if(!summary) {var summary = '';}
	
	api.send(new api.Query(api, 'GET', 'action=query&list=usercontribs&ucuser=' + user + time + '&uclimit=' + limit, function(result) {
		for(var i in result.query.usercontribs) {
			if(result.query.usercontribs[i].top == '') {
				var page = result.query.usercontribs[i].title;
				var rollback = false;
				for(var j = 0; j < wgUserRights.length; j++) {
					if(wgUserRights[j] == 'rollback' || wgUserRights[j] == 'sysop' || wgUserRights[j] == 'vstf' || wgUserRights[j] == 'helper' || wgUserRights[j] == 'staff') {rollback = true; break;}
				}
				if(rollback) {
					api.send(new api.Query(api, 'POST', {action: 'rollback', title: page, user: user, summary: summary}, function(result) {
						$('a[title="' + this.params.title + '"] + span + span.mw-uctop').html('Wham\'d ');
					}));
				}
				else {
					api.send(new api.Query(api, 'GET', {action: 'query', prop: 'revisions', titles: page, rvlimit: '5000', indexpageids: 1}, function(result) {
						var revs = result.query.pages[result.query.pageids[0]].revisions;
						if(revs[0].user != user) {return;}
						var i = 1;
						while(revs[i].user == revs[0].user) {i++;}
						api.send(new api.Query(api, 'POST', {action: 'edit', title: this.params.titles, undo: revs[i].revid, undoafter: revs[0].revid, summary: (summary ? summary : 'Reverted edits by [[User:' + revs[0].user + '|' + revs[0].user + ']] ([[User talk:' + revs[0].user + '|talk]] | [[Special:Contributions/' + revs[0].user + '|contribs]]) to last version by [[User:' + revs[i + 1].user + '|' + revs[i + 1].user + ']]')}, function(result) {
							$('a[title="' + this.params.title + '"] + span + span.mw-uctop').html('Wham\'d ');
						}));
					}));
				}
				$('a[title="' + result.query.usercontribs[i].title + '"] + span + span.mw-uctop').html('<img src="https://images.wikia.nocookie.net/dev/images/8/82/Facebook_throbber.gif" style="vertical-align: baseline;" border="0" alt="Whamming..."> ');
			}
		}
	}));
}

function timestr(time) {
	try { //Some of this may break if the date is a fail
		time = time.removeTrailing(' ');
		var date = new Date();
		var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
		if(time.split(',').length == 3) { //Contains two commas, assumed to be full string
			var hours = time.split(',')[0].removeTrailing(' ').split(':')[0].removeTrailing(' '); if(hours < 10 && hours.length < 2) {hours = '0' + hours;}
			var minutes = time.split(',')[0].removeTrailing(' ').split(':')[1].removeTrailing(' '); if(minutes < 10 && minutes.length < 2) {minutes = '0' + minutes;}
			var month = time.split(',')[1].removeTrailing(' ').split(' ')[0];
			for(var i = 0; i < months.length; i++) {if(months[i] == month) {month = i + 1; break;}}
			if(month < 10) {month = '0' + month;}
			var days = time.split(',')[1].removeTrailing(' ').split(' ')[time.split(',')[1].removeTrailing(' ').split(' ').length -1]; if(days < 10) {days = '0' + days;}
			var year = time.split(',')[2].removeTrailing(' ');
		}
		else if(time.split(',').length == 2) { //Contains one comma, assumed to be month, day and year
			var hours = '00';
			var minutes = '00';
			var month = time.split(',')[0].removeTrailing(' ').split(' ')[0];
			for(var i = 0; i < months.length; i++) {if(months[i] == month) {month = i + 1; break;}}
			if(month < 10) {month = '0' + month;}
			var days = time.split(',')[0].removeTrailing(' ').split(' ')[time.split(',')[0].removeTrailing(' ').split(' ').length - 1]; if(days < 10) {days = '0' + days;}
			var year = time.split(',')[1].removeTrailing(' ');
		}
		else { //Contains no commas, is either month and day or a time
			if(time.indexOf(':') != -1) { //Time
				time = time.replace(/ /g, '');
				var hours = time.split(':')[0]; if(hours < 10 && hours.length < 2) {hours = '0' + hours;}
				var minutes = time.split(':')[1]; if(minutes < 10 && minutes.length < 2) {minutes = '0' + minutes;}
				var days = date.getUTCDate(); if(days < 10) {days = '0' + days;}
				var month = date.getUTCMonth() + 1; if(month < 10) {month = '0' + month;}
				var year = date.getUTCFullYear();
			}
			else { //Date
				var hours = '00';
				var minutes = '00';
				var month = time.split(' ')[0];
				for(var i = 0; i < months.length; i++) {if(months[i] == month) {month = i + 1; break;}}
				if(month < 10) {month = '0' + month;}
				var days = time.split(' ')[time.split(' ').length - 1]; if(days < 10) {days = '0' + days;}
				var year = date.getUTCFullYear();
			}
		}
		
		return year + '-' + month + '-' + days + 'T' + hours + ':' + minutes + ':00Z';
	}
	catch(err) {console.log(err); return time;}
}

String.prototype.removeTrailing = function(char) {
	var str = this;
	while(str.charAt(0) == char) {str = str.substring(1, str.length);}
	while(str.charAt(str.length - 1) == char) {str = str.substring(0, str.length - 1);}
	return str;
}
Advertisement