User:Kiteretsu/revert-and-block.js
Jump to navigation
Jump to search
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.
//<nowiki>
$( function () {
var ADVERT = " ([[User:Infinityboy7/revert-and-block|RNB]])";
var IP_BLOCK_LENGTH = window.revertAndBlockIpBlockLength || "indefinitely";
if( mw.config.get( "wgAction" ) === "history" ) {
mw.loader.using( [ "mediawiki.util", "mediawiki.api" ] ).then( function () {
var MONTHS = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
var api = new mw.Api();
function deliverBlockTemplate( username, isAnon ) {
var now = new Date();
var sectionName = MONTHS[now.getMonth()] + " " + now.getFullYear();
api.get( {
prop: "revisions",
rvprop: "content",
rvlimit: "1",
rvslots: "main",
titles: "User talk:" + username,
formatversion: "2"
} ).then( function ( data ) {
var existingText;
if( data.query.pages[0].missing ) {
existingText = "";
} else {
existingText = data.query.pages[0].revisions[0].slots.main.content;
}
var shouldAddSectionHeader = !( new RegExp( /==\s*/.source +
sectionName.replace( " ", "\\s*" ) + /\s*==/.source ).test( existingText ) );
var textToAdd = "\n\n" +
( shouldAddSectionHeader
? "== " + sectionName + " ==\n\n"
: ""
) +
"{{subst:uw-vblock|" +
( isAnon
? "anon=yes|time=" + IP_BLOCK_LENGTH + "|"
: "indef=yes|"
) +
"sig=yes|page=" + mw.config.get( "wgPageName" ) + "}}";
return api.postWithToken( "csrf", {
action: "edit",
title: "User talk:" + username,
appendtext: textToAdd,
summary: "You have been blocked from editing for persistent vandalism." + ADVERT
} );
} ).then( function () {
mw.notify( "Notification sent." );
} );
}
function appendLink( obj ) {
obj.append( $( "<span>" ).append( $( "<a>" )
.attr( "href", "#" )
.text( "RNB" )
.click( function () {
var api = new mw.Api();
var parentLine = $( this ).parents( "li" );
var username = parentLine.find( ".history-user a" ).get( 0 ).textContent;
var parentLineEl = parentLine.get(0);
// A crucial confirmation...
if( window.revertAndBlockNoConfirm || confirm( "Revert and block " + username + "?" ) ) {
// Revert edit
api.postWithToken( "csrf", {
action: "edit",
title: mw.config.get( "wgPageName" ),
undo: parentLineEl.dataset.mwRevid,
undoafter: parentLineEl.nextElementSibling && parentLineEl.nextElementSibling.dataset.mwRevid
} ).then( function () { mw.notify( "Undid revision." ); } );
// Add talk page template
var isAnon = parentLine.find( ".history-user a" ).hasClass( "mw-anonuserlink" );
deliverBlockTemplate( username, isAnon );
// Place indef/31 hr block (for logged-in users & IPs respectively)
api.postWithToken( "csrf", {
action: "block",
user: username,
expiry: isAnon ? IP_BLOCK_LENGTH : "never",
reason: "[[Wikipedia:Vandalism|Vandalism]]",
nocreate: "true",
autoblock: "true",
watchuser: "true",
} ).then( function () { mw.notify( "Blocked." ); } );
}
return false;
} ) ) );
}
var selector = "span.mw-changeslist-links:not(.mw-history-histlinks):not(.mw-usertoollinks)";
// Adding the hook automatically calls appendLink for the first time
mw.hook( "wikipage.content" ).add( function ( obj ) { appendLink( obj.find( selector ) ); } );
} );
}
} );
//</nowiki>