User:Void/testing.js
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.
/*
* Simple script designed to mass undelete pages deleted by a user.
* You are responsible for any and all actions you take using this tool. PLEASE be careful.
*/
//Add link
var user = mw.config.get( 'wgRelevantUserName' );
if( user !== null ){
var unNuke = mw.util.addPortletLink(
'p-tb',
'#',
'un-Nuke',
'pt-unnuke',
'Undelete all pages deleted by this user.'
);
}
$( unNuke ).click( function () {
$.getJSON(
//Get deletions
mw.util.wikiScript('api'),
{
format: 'json',
action: 'query',
list: 'logevents',
leprop: 'title',
leaction: 'delete/delete',
leuser: user,
lelimit: 500 //Going all out
}
).done( function ( data ) {
try {
var titles = [];
for( i = 0; i < data.query.logevents.length; i++ ) {
titles.push( data.query.logevents[i].title );
}
for( i = 0; i < titles.length; i++){
undelete( titles[i] );
}
}
catch ( e ) {
console.log( "Content request error: " + e.message );
console.log( "Content request response: " + JSON.stringify( data ) );
}
} ).fail( function () {
console.log( "While getting the userlist, there was an AJAX error." );
} );
});
function undelete( pageTitle ) {
$.ajax( {
url: mw.util.wikiScript( 'api' ),
type: 'POST',
dataType: 'json',
data: {
format: 'json',
action: 'undelete',
title: pageTitle,
reason: 'Mass undeletion of pages',
token: mw.user.tokens.get( 'csrfToken' ),
}
} ).done(console.log( "Undeleted page: " + pageTitle )
).fail( function ( e, data ){
console.log( e.message );
console.log( JSON.stringify( data ) );
});
}
//Add link
if( user !== null ){
var unMove = mw.util.addPortletLink(
'p-tb',
'#',
'un-move',
'pt-un-move',
'Unmove all pages moved by this user.'
);
}
$( unMove ).click( function () {
$.getJSON(
//Get deletions
mw.util.wikiScript('api'),
{
format: 'json',
action: 'query',
list: 'logevents',
leprop: 'title|details',
leaction: 'move/move',
leuser: user,
lelimit: 500 //Going all out
}
).done( function ( data ) {
try {
var fromTitles = [];
var toTitles = [];
for( i = 0; i < data.query.logevents.length; i++ ) {
toTitles.push( data.query.logevents[i].title );
fromTitles.push( data.query.logevents[i].params.target_title );
}
for( i = 0; i < fromTitles.length; i++){
delPage( toTitles[i] );
unmove( fromTitles[i], toTitles[i] );
}
}
catch ( e ) {
console.log( "Content request error: " + e.message );
console.log( "Content request response: " + JSON.stringify( data ) );
}
} ).fail( function () {
console.log( "While getting the userlist, there was an AJAX error." );
} );
});
function delPage( pTitle ) {
$.ajax( {
url: mw.util.wikiScript( 'api' ),
type: 'POST',
dataType: 'json',
data: {
format: 'json',
action: 'delete',
title: pTitle,
reason: 'Deleted to make way for move',
token: mw.user.tokens.get( 'csrfToken' ),
}
} ).done(console.log( "Deleted page " + pTitle )
).fail( function ( e, data ){
console.log( e.message );
console.log( JSON.stringify( data ) );
});
}
function unmove( fromTitle, toTitle ) {
$.ajax( {
url: mw.util.wikiScript( 'api' ),
type: 'POST',
dataType: 'json',
data: {
format: 'json',
action: 'move',
title: fromTitle,
to: toTitle,
movetalk: 1,
noredirect: 1,
reason: 'Reverting page moves',
token: mw.user.tokens.get( 'csrfToken' ),
}
} ).done(console.log( "Moved page " + fromTitle + " to " + toTitle )
).fail( function ( e, data ){
console.log( e.message );
console.log( JSON.stringify( data ) );
});
}