User:MusikAnimal/spamublock-toolbox.js

Note: After saving, you have to bypass your browser's cache to see the changes. Google Chrome, Firefox, Microsoft Edge and Safari: Hold down the ⇧ Shift key and click the Reload toolbar button. For details and instructions about other browsers, see Wikipedia:Bypass your cache.
//<nowiki>
(function() {
	var namespace = mw.config.get('wgNamespaceNumber'),
		pageName = mw.config.get('wgPageName'),
		myUserName = mw.config.get('wgUserName'),
		userName = mw.config.get('wgRelevantUserName'),
		templateName = "uw-spamublock";

	if([2,3].indexOf(namespace) !== -1) {
		mw.util.addPortletLink(
			'p-tb', 'javascript:void(0)',
		    '{{spamublock}}', 't-spamublock', 'Delete user page and execute {{uw-spamublock}} on current user',
		    '', '#t-whatlinkshere'
		);

		$('#t-spamublock').on('click', function() {
			if (confirm('This script will delete the current user page, block the user as {{uw-spamublock}} and leave that template on their talk page, or the template specified at [[Special:MyPage/uw-spamublock]], if present.\n\nARE YOU SURE YOU WANT TO PROCEED?')) {
				$('#t-spamublock').text('Please wait...');
				getTemplate();
			}
		});
	}

	var api = new mw.Api();

	function getTemplate() {
		api.get({
			action: 'query',
			titles: 'User:'+myUserName+'/uw-spamublock'
		}).then(function(data) {
			var query = data.query.pages;
			if(Object.keys(query)[0] > 0) {
				templateName = 'User:'+myUserName+'/uw-spamublock';
			} else {
				templateName += "|sig=yes";
			}
			templateName = "{{subst:"+templateName+"}}";
			deleteUserPage();
		});
	}

	function deleteUserPage() {
		api.postWithToken("delete", {
			action: 'delete',
			reason: '[[WP:G11|G11]]: Unambiguous [[WP:NOTADVERTISING|advertising]] or promotion',
			title: pageName
		}).then(function(deleteData) {
			$("#mw-content-text").html(
				"<p><b>Deleted</b> page <a href='"+mw.util.getUrl(pageName)+"'>"+pageName+"</a> <i>(<a href='"+mw.util.getUrl('WP:G11')+"'>G11</a>: Unambiguous <a href='"+mw.util.getUrl('WP:NOTADVERTISING')+"'>advertising</a> or promotion)</i></p>"
			);
			blockUser();
		},function(error) {
			$("#mw-content-text").html(
				"<p><b>Error</b> deleting page "+pageName+": "+error+"</p>"
			);
		});
	}

	function blockUser() {
		var blockReason = '{{uw-spamublock}} <!-- Promotional username, promotional edits -->';
		
		api.postWithToken("block", {
			action: 'block',
			allowusertalk: true,
			autoblock: true,
			nocreate: true,
			reason: blockReason,
			user: userName
		}).then(function(blockData) {
			$("#mw-content-text").append(
				"<p><b>Blocked</b> <a href='"+mw.util.getUrl('User:'+userName)+"'>"+userName+"</a> (account creation blocked) with an expiry time of indefinite <i>(<span id='spamublock-blocked-reason'></span>)</i></p>"
			);
			$('<span/>').text(blockReason).appendTo("#spamublock-blocked-reason");
			templateUser();
		}, function(error) {
			$("#mw-content-text").append(
				"<p><b>Error</b> blocking <a href='"+mw.util.getUrl('User:'+userName)+"'>"+userName+"</a>: "+error+"</p>"
			);
		});
	}

	function templateUser() {
		var monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
			d = new Date();

		api.postWithToken( "edit", {
			action: "edit",
			section: 'new',
			sectiontitle: monthNames[d.getMonth()] + ' ' + d.getFullYear(),
			summary: "You have been indefinitely blocked from editing because your account is being used only for [[WP:SPAM|spam or advertising]] and your username is a violation of the [[WP:U|username policy]]. (using [[User:MusikAnimal/spamublock|spamublock.js]])",
			text: "\n"+templateName,
			title: "User talk:"+userName
		}).then(function(editData) {
			$("#mw-content-text").append(
				"<p><b>Edited</b> <a href='"+mw.util.getUrl('User talk:'+userName)+"'>User talk:"+userName+"</a>: Created new section with template "+templateName+"</p>" +
				"<p><b>Complete (<a href='javascript:document.location.reload()'>reload</a>)</b></p>"
			);
		},function(error) {
			$("#mw-content-text").append(
				"<p><b>Error</b> editing <a href='"+mw.util.getUrl('User talk:'+userName)+"'>User talk:"+userName+"</a>: "+error+"</p>"
			);
		});
	}
}());
//</nowiki>