ব্যবহারকারী:ARI/common.js
লক্ষ্য করুন: প্রকাশ করার পর, পরিবর্তনগুলো দেখতে আপনাকে আপনার ব্রাউজারের ক্যাশে পরিষ্কার করার প্রয়োজন হতে পারে।
- ফায়ারফক্স / সাফারি: পুনরায় লোড-এ ক্লিক করার সময় শিফট টিপে ধরে রাখুন, অথবা হয় Ctrl-F5 বা Ctrl-R টিপুন (ম্যাকে ⌘-R টিপুন)
- গুগল ক্রোম: Ctrl-Shift-R (ম্যাকে ⌘-Shift-R) টিপুন
- এজ: Ctrl ধরে রাখা অবস্থায় Refresh-এ ক্লিক করুন, অথবা Ctrl-F5 টিপুন।
- অপেরা: Ctrl-F5 টিপুন।
/**
* Mass Rollback Script (Standalone)
* Adds a "Mass Rollback" button to Special:Contributions
*/
mw.loader.using( ['mediawiki.util', 'mediawiki.api'], function () {
$(document).ready( function () {
// 1. Only run on Special:Contributions
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) !== 'Contributions' ) {
return;
}
// 2. Only run if user is Sysop or Rollbacker
var userGroups = mw.config.get( 'wgUserGroups' );
if ( !userGroups.includes('sysop') && !userGroups.includes('rollbacker') ) {
return;
}
// 3. Add the link to the interface
var $rollbackLink = $( '<a>' )
.text( 'Mass Rollback' )
.attr( 'href', '#' )
.css( { 'font-weight': 'bold', 'color': '#d33' } )
.click( function ( e ) {
e.preventDefault();
confirmRollback();
} );
$( '#contentSub' ).append( ' [', $rollbackLink, ']' );
// 4. Function to confirm and execute
function confirmRollback() {
var targetUser = mw.config.get( 'wgRelevantUserName' );
if ( !targetUser ) {
alert( 'Could not determine the username.' );
return;
}
var reason = prompt( "Enter a reason for mass rollback (optional):", "Mass rollback of edits by " + targetUser );
if ( reason === null ) return; // User cancelled
var limit = prompt( "How many edits to check? (Max 100)", "20" );
if ( !limit ) return;
executeRollback( targetUser, reason, limit );
}
// 5. The API Execution
function executeRollback( user, summary, limit ) {
var api = new mw.Api();
// Notification start
mw.notify( 'Fetching contributions...', { tag: 'mass-rollback' } );
// Get user contributions
api.get( {
action: 'query',
list: 'usercontribs',
ucuser: user,
uclimit: limit,
ucprop: 'title|ids|top' // We need 'top' to know if it's the latest edit
} ).done( function ( data ) {
var contribs = data.query.usercontribs;
var count = 0;
// Loop through contributions
contribs.forEach( function ( contrib ) {
// Only rollback if the edit is the current "top" revision
if ( contrib.top !== undefined ) {
count++;
// Perform the rollback
api.postWithToken( 'rollback', {
action: 'rollback',
title: contrib.title,
user: user,
summary: summary,
markbot: true // Mark as bot edit to hide from Recent Changes
} ).done( function () {
console.log( 'Rolled back: ' + contrib.title );
} ).fail( function ( code, result ) {
console.log( 'Failed to rollback ' + contrib.title + ': ' + code );
} );
}
} );
mw.notify( 'Initiated rollback on ' + count + ' pages. Check your browser console (F12) for progress.', { type: 'success' } );
} ).fail( function () {
mw.notify( 'API Error: Could not fetch contributions.', { type: 'error' } );
} );
}
} );
} );