Bước tới nội dung

Thành viên:NguoiDungKhongDinhDanh/massblock.js

Bách khoa toàn thư mở Wikipedia
Chú ý: Sau khi lưu thay đổi trang, bạn phải xóa bộ nhớ đệm của trình duyệt để nhìn thấy các thay đổi. Google Chrome, Firefox, Internet ExplorerSafari: Giữ phím ⇧ Shift và nhấn nút Reload/Tải lại trên thanh công cụ của trình duyệt. Để biết chi tiết và hướng dẫn cho các trình duyệt khác, xem Trợ giúp:Xóa bộ nhớ đệm.
//Tks4Fish's mass blocking tool//Adapted from [[:w:en:User:Timotheus_Canens/massblock.js]], who adapted it from [[User:Animum/massdelete.js]]/* jshint esversion: 8, esnext:false */async function doMassBlock() {	document.getElementById("wpMassBlockSubmit").disabled = true;	var users = document.getElementById("wpMassBlockUsers").value.split("\n");	if(users.length == 0) return;		var wpMassBlockSummaryTalk = document.getElementById("wpMassBlockSummaryTalk").value;	var wpMassBlockSummaryUser = document.getElementById("wpMassBlockSummaryUser").value;	var wpMassBlockReasons = document.getElementById("wpMassBlockReasons").value;	var wpMassBlockMessage = document.getElementById("wpMassBlockMessage").value;	var wpMassBlockReason = document.getElementById("wpMassBlockReason").value;	var wpMassBlockExpiry = document.getElementById("wpMassBlockExpiry").value;	var wpMassBlockTag = document.getElementById("wpMassBlockTag").value;		var wpMassBlockAutoblock = document.getElementById("wpMassBlockAutoblock").checked;	var wpMassBlockTalkpage = document.getElementById("wpMassBlockTalkpage").checked;	var wpMassBlockAnononly = document.getElementById("wpMassBlockAnononly").checked;	var wpMassBlockNocreate = document.getElementById("wpMassBlockNocreate").checked;	var wpMassBlockReblock = document.getElementById("wpMassBlockReblock").checked;	var wpMassBlockEmail = document.getElementById("wpMassBlockEmail").checked;		var blocked = 0;	var talkpageedited = 0;	var userpageedited = 0;	var failed = [];	var error = [];		for(i = 0; i < users.length; i++) {		var user = users[i];		if(user.length > 0) {			let data = await new mw.Api().postWithToken("csrf", {				"action": "block",				"format": "json",				"user": user,				"reason": (wpMassBlockReasons == "other" ? wpMassBlockReason : wpMassBlockReasons + (wpMassBlockReason ? ": " + wpMassBlockReason : "")),				"expiry": (wpMassBlockExpiry == "" ? "indefinite" : wpMassBlockExpiry),				"anononly": (wpMassBlockAnononly ? true : false),				"nocreate": (wpMassBlockNocreate ? true : false),				"autoblock": (wpMassBlockAutoblock ? true : false),				"noemail": (wpMassBlockEmail ? true : false),				"allowusertalk": (wpMassBlockTalkpage ? false : true),				"reblock": (wpMassBlockReblock ? true : false),				"formatversion": "2"			});			if(data.block) { //If blocked, update the blocked count and the button.				blocked++;				// now edit user and user talk.				if(wpMassBlockMessage != "") {					let data = await new mw.Api().postWithToken("csrf", {						"action": "edit",						"format": "json",						"watchlist": "nochange",						"title": "User talk:" + user,						"summary": wpMassBlockSummaryTalk,						"appendtext": wpMassBlockMessage					});					if(data.edit) {						talkpageedited++;					}					else { //If not edited, add the title to the "failed" array and a description of the error to the "error" array.						failed.push("User talk:" + user);						error.push(data.error.info);					}				}				if(wpMassBlockTag != "") {					let data = await new mw.Api().postWithToken("csrf", {						"action": "edit",						"format": "json",						"watchlist": "nochange",						"title": "User:" + user,						"summary": wpMassBlockSummaryUser,						"text": wpMassBlockTag					});					if(data.edit) {						userpageedited ++;					}					else { //If not edited, add the title to the "failed" array and a description of the error to the "error" array.						failed.push("User talk:" + user);						error.push(data.error.info);					}				}				document.getElementById("wpMassBlockSubmit").value = "(" + blocked + "/" + talkpageedited + "/" + userpageedited + ")";			}			else { //If not blocked, add the title to the "failed" array and a description of the error to the "error" array.				failed.push("Special:Block/" + user);				error.push(data.error.info);			}		}		if(!users[i+1]) {			document.getElementById("wpMassBlockSubmit").value = "(" + blocked + "/" + talkpageedited + "/" + userpageedited + ")";			if(failed.length > 0) {				var linkedList = "";								for(x = 0; x < failed.length; x++) {					linkedList += "<li><a href=\"" + wgScript + "?title=" + encodeURIComponent(failed[x]) + "\">" + failed[x] + "</a>: " + error[x] + "</li>"; //Links the titles in the "failed" array				}				document.getElementById("wpMassBlockFailedContainer").innerHTML += '<br /><b>Failed actions:</b><ul>' + linkedList + '</ul>';			}		}	}}function massblockform() {	var bodyContent = (mw.config.get("skin") == "cologneblue" ? "article" : "bodyContent");	document.getElementsByTagName("h1")[0].textContent = "Tks4Fish's mass-blocking tool";	document.title = "Tks4Fish's mass-blocking tool - Wikipedia, the free encyclopedia";	document.getElementById(bodyContent).innerHTML = '<h3 id="siteSub">From Wikipedia, the free encyclopedia</h3><br /><br />'		+ '<form id="wpMassBlock" name="wpMassBlock">'		+ '<b>If you abuse this tool, it\'s <i>your</i> fault, not mine.</b>'		+ '<div id="wpMassBlockFailedContainer"></div>'		+ '<br /><br />'			+ 'Users to block (one on each line, please):<br />'				+ '<textarea tabindex="1" accesskey="," name="wpMassBlockUsers" id="wpMassBlockUsers" rows="10" cols="80"></textarea>'			+ 'Talk page message, if any (leave blank to leave no message):<br />'				+ '<textarea tabindex="2" accesskey="," name="wpMassBlockMessage" id="wpMassBlockMessage" rows="10" cols="80"></textarea>'			+ 'Replace user page text with (leave blank for no change):<br />'				+ '<textarea tabindex="3" accesskey="," name="wpMassBlockTag" id="wpMassBlockTag" rows="10" cols="80"></textarea>'			+ '<br /><br /><table style="background-color:transparent">'				+ '<tr><td>Common reasons:</td>'					+ '<td><select id="wpMassBlockReasons">'						+ '<optgroup label="Other reason">'							+ '<option value="other">Other reason</option>'						+ '</optgroup>'						+ '<optgroup label="Common reasons">'							+ '<option value="Vandalism">Vandalism</option>'							+ '<option value="Vandalism-only account">Vandalism-only account</option>'							+ '<option value="Violations of the Biographies of living persons policy">Violations of the Biographies of living persons policy</option>'							+ '<option value="Using Wikipedia for spam or advertising purposes">Using Wikipedia for spam or advertising purposes</option>'							+ '<option value="Spam / advertising-only account">Spam / advertising-only account</option>'							+ '<option value="Creating attack, nonsense or other inappropriate pages">Creating attack, nonsense or other inappropriate pages</option>'							+ '<option value="Creating copyright violations">Creating copyright violations</option>'							+ '<option value="Abusing multiple accounts">Abusing multiple accounts</option>'							+ '<option value="Block evasion">Block evasion</option>'							+ '<option value="Personal attacks or harassment">Personal attacks or harassment</option>'							+ '<option value="Edit warring">Edit warring</option>'							+ '<option value="Violation of the three-revert rule">Violation of the three-revert rule</option>'							+ '<option value="Disruptive editing">Disruptive editing</option>'							+ '<option value="Long-term abuse">Long-term abuse</option>'							+ '<option value="Making legal threats">Making legal threats</option>'							+ '<option value="Arbitration enforcement">Arbitration enforcement</option>'							+ '<option value="Deliberately triggering the Edit filter">Deliberately triggering the Edit filter</option>'							+ '<option value="Revoking talk page access: inappropriate use of user talk page while blocked">Revoking talk page access: inappropriate use of user talk page while blocked</option>'							+ '<option value="\{\{anonblock}}">\{\{anonblock}}</option>'							+ '<option value="\{\{schoolblock}}">\{\{schoolblock}}</option>'							+ '<option value="\{\{blocked proxy}}">\{\{blocked proxy}}</option>'							+ '<option value="\{\{usernameblock}}">\{\{usernameblock}}</option>'							+ '<option value="\{\{UsernameHardBlocked}}">\{\{UsernameHardBlocked}}</option>'							+ '<option value="\{\{spamusernameblock}}">\{\{spamusernameblock}}</option>'							+ '<option value="\{\{softerblock}}">\{\{softerblock}}</option>'							+ '<option value="\{\{checkuserblock}}">\{\{checkuserblock}}</option>'							+ '<option value="\{\{checkuserblock-account}}">\{\{checkuserblock-account}}</option>'							+ '<option value="\{\{Tor}}">\{\{Tor}}</option>'							+ '<option value="\{\{Vaublock}}">\{\{Vaublock}}</option>'						+ '</optgroup>'					+ '</select></td></tr>'			+ '<tr><td>Other/additional reason:</td>'				+ '<td><input type="text" id="wpMassBlockReason" name="wpMassBlockReason" maxlength="255" /></td></tr>'			+ '<tr><td>Expiration time (blank for indefinite):</td>'				+ '<td><input type="text" id="wpMassBlockExpiry" name="wpMassBlockExpiry" maxlength="255" /></td></tr>'			+ '<tr><td>Edit summary for talk page edit:</td>'				+ '<td><input type="text" id="wpMassBlockSummaryTalk" name="wpMassBlockSummaryTalk" maxlength="255" /></td></tr>'			+ '<tr><td>Edit summary for user page edit:</td>'				+ '<td><input type="text" id="wpMassBlockSummaryUser" name="wpMassBlockSummaryUser" maxlength="255" /></td></tr>'				+ '<tr><td>Block anonymous users only (IPs only):</td><td><input type="checkbox" id="wpMassBlockAnononly" name="wpMassBlockAnononly" /></td></tr>'				+ '<tr><td>Enable autoblock (accounts only):</td><td><input type="checkbox" id="wpMassBlockAutoblock" name="wpMassBlockAutoblock" checked="checked" /></td></tr>'				+ '<tr><td>Block account creation:</td><td><input type="checkbox" id="wpMassBlockNocreate" name="wpMassBlockNocreate" checked="checked" /></td></tr>'				+ '<tr><td>Block email:</td><td><input type="checkbox" id="wpMassBlockEmail" name="wpMassBlockEmail" /></td></tr>'				+ '<tr><td>Remove talk page access:</td><td><input type="checkbox" id="wpMassBlockTalkpage" name="wpMassBlockTalkpage" /></td></tr>'				+ '<tr><td>Override existing blocks:</td><td><input type="checkbox" id="wpMassBlockReblock" name="wpMassBlockReblock" checked="checked" /></td></tr>'				+ '<tr><td><input type="button" id="wpMassBlockSubmit" name="wpMassBlockSubmit" value="Block" onclick="doMassBlock()" /></td></tr>'		+ '</form>';	document.getElementById("wpMassBlockReasons").onchange = function() {		var maxlength = (document.getElementById("wpMassBlockReasons").value == "other" ? 255 : 253-document.getElementById("wpMassBlockReasons").value.length); //It's 253 because of the two characters (": ") in addition to the selected summary.		document.getElementById("wpMassBlockReason").setAttribute("maxlength", maxlength);	};}if (mw.config.get('wgNamespaceNumber') == -1 &&	mw.config.get('wgCanonicalSpecialPageName') === 'Blankpage' &&	mw.config.get('wgUserGroups').indexOf('sysop') !== -1 &&	mw.config.get('wgTitle').split('/',2)[1] === 'MassBlock') {		$(massblockform);}