User:Mike.lifeguard/massBlock.js

From Meta, a Wikimedia project coordination wiki

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.
// Mass block tool by [[User:Krimpet]]
// Navigate to [[Special:Massblock]] to use the tool.

function getParameter(p) {
	var re = new RegExp('&'+p+'=([^&]*)','i');
	var c = window.location.search;
	return unescape((c=c.replace(/^\?/,'&').match(re)) ?c=c[1] :c="");
}

function massblock() {
	if (wgPageName == "Special:Massblock") {
		document.title = "Krimpet's mass block tool";
		document.getElementById("content").innerHTML = "<h1 class=\"firstHeading\">Krimpet's mass block tool</h1><span style=\"color:red\">"
					+"MESS SOMETHING UP WITH THIS, AND <em>YOU</em> TAKE THE BLAME, BUCKO.</span><br /><br />List of IPs to block, "
					+"one on each line please:<br><textarea id=\"iplist\" columns=\"24\" rows=\"10\"></textarea><br /><br />"
					+"Expiry: <input type=\"text\" value=\"1 year\" id=\"expiry\"><br />Reason: <input type=\"text\" value=\""
					+"[[w:open proxy|open proxy]] or [[w:zombie computer|zombie]] ([[m:WM:OP|more info]])\" id=\"reason\"><br />"
					+"<input type=\"checkbox\" id=\"ao\" /> Anon only<br /><input type=\"checkbox\" id=\"acb\" checked=\"checked\" /> "
					+"Prevent account creation<br /><br />Blocks/min: <input type=\"text\" value=\"10\" id=\"epm\"><br /><button "
					+"onclick=\"massblock2()\">Block IPs</button> <button onclick=\"massblock4()\">Abort</button><div style=\"z-index:"
					+"-1;position:relative;top:0px;left:0px\"><iframe name=\"blockframe0\" width=\"1px\" height=\"1px\"></iframe>"
					+"<iframe name=\"blockframe1\" width=\"1px\" height=\"1px\"></iframe><iframe name=\"blockframe2\" width=\"1px\" "
					+"height=\"1px\"></iframe><iframe name=\"blockframe3\" width=\"1px\" height=\"1px\"></iframe><iframe name=\"blockframe4\""
					+"width=\"1px\" height=\"1px\"></iframe><iframe name=\"blockframe5\" width=\"1px\" height=\"1px\"></iframe></div>";
	}
	else if (document.location.search.match("__MASSBLOCK__")) {
		document.getElementById("wpAnonOnly").checked = getParameter("ao") == "1";
		document.getElementById("wpCreateAccount").checked = getParameter("acb") == "1";
		document.getElementById("mw-bi-other").value = getParameter("expiry").replace("+"," ","g");
		document.getElementById("mw-bi-reason").value = getParameter("reason").replace("+"," ","g");
		setTimeout("document.getElementById(\"blockip\").submit()", 500);
	}
}

var wgBlocksToDo;
var wgBlocksToDoIndex;
var wgBlocksToDoInterval = 0;
var wgBlockFrame;
function massblock2() {
	if (!parseFloat(document.getElementById("epm").value)) return;
	wgBlocksToDo = new Array();

	iplist = document.getElementById("iplist").value.split("\n");
	for (i=0;i<iplist.length;i++) {
		wgBlocksToDo[i] = iplist[i].split(":")[0];
	}

	mbcode = "massblock3(wgBlocksToDo[wgBlocksToDoIndex++]);if (wgBlocksToDoIndex >= wgBlocksToDo.length) massblock4();";

	wgBlocksToDoIndex = wgBlockFrame = 0;
	eval(mbcode);
	wgBlocksToDoInterval = setInterval(mbcode, (60 / parseFloat(document.getElementById("epm").value)) * 1000);
}
 
function massblock3(ipToBlock) {
	if (ipToBlock + "" == "undefined") return;

	iplistobj = document.getElementById("iplist");
	if (iplistobj.value.indexOf("\n") == -1) iplistobj.value = "";
	iplistobj.value = iplistobj.value.substring(iplistobj.value.indexOf("\n") + 1);

	if (ipToBlock == "") return;

	frames["blockframe" + wgBlockFrame++].location.href = mw.config.get('wgServer') + wgScript + "?title=Special:Block&wpBlockAddress=" + 
				ipToBlock + "&__MASSBLOCK__=1&wpBlockOther=" + document.getElementById("expiry").value + 
				"&wpBlockReason=" + document.getElementById("reason").value + "&wpAnonOnly=" + (document.getElementById("ao").checked ? "1" : "0") 
				+ "&wpCreateAccount=" + (document.getElementById("acb").checked ? "1" : "0");
	if (wgBlockFrame == 6) wgBlockFrame = 0;
}
 
function massblock4() {
	clearInterval(wgBlocksToDoInterval);
}

$(massblock);