Wikisłownikarz:Peter Bowman/suppress.js
Uwaga: aby zobaczyć zmiany po opublikowaniu, może zajść potrzeba wyczyszczenia pamięci podręcznej przeglądarki.
- Firefox / Safari: Przytrzymaj Shift podczas klikania Odśwież bieżącą stronę, lub naciśnij klawisze Ctrl+F5, lub Ctrl+R (⌘-R na komputerze Mac)
- Google Chrome: Naciśnij Ctrl-Shift-R (⌘-Shift-R na komputerze Mac)
- Internet Explorer / Edge: Przytrzymaj Ctrl, jednocześnie klikając Odśwież, lub naciśnij klawisze Ctrl+F5
- Opera: Naciśnij klawisze Ctrl+F5.
( function ( mw, $ ) {
var api, user;
var stats = {
rollbackDone: 0,
rollbackFailed: 0,
deleteDone: 0,
deleteFailed: 0
};
var rollbackQuery = {
markbot: true,
summary: 'rewert – obchodzenie blokady'
};
var msgOptions = {
autoHide: false
};
var rollbackMsgOptions = {
tag: 'rollback'
};
var deleteMsgOptions = {
tag: 'delete'
};
function recursiveRollback( pages, index ) {
mw.notify(
'Rewertowanie... ' + ( index = index || 1 ),
$.extend( {}, msgOptions, rollbackMsgOptions )
);
return api.rollback( pages.pop(), user, rollbackQuery ).then( function () {
stats.rollbackDone++;
return pages.length ? recursiveRollback( pages, ++index ) : undefined;
}, function () {
stats.rollbackFailed++;
return pages.length ? recursiveRollback( pages, ++index ) : undefined;
} );
}
function recursiveDelete( pages, index ) {
var query = {
formatversion: 2,
action: 'delete',
title: pages.pop(),
reason: 'Masowe usuwanie wkładu ' + user
};
mw.notify(
'Usuwanie... ' + ( index = index || 1 ),
$.extend( {}, msgOptions, deleteMsgOptions )
);
return api.postWithToken( 'delete', query ).then( function () {
stats.deleteDone++;
return pages.length ? recursiveDelete( pages, ++index ) : undefined;
}, function () {
stats.deleteFailed++;
return pages.length ? recursiveDelete( pages, ++index ) : undefined;
} );
}
if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Contributions' ) {
$.when(
mw.loader.using( 'mediawiki.api' ),
$.ready
).done( function () {
api = new mw.Api();
user = mw.config.get( 'wgRelevantUserName' );
$( '<input>' )
.attr( {
type: 'submit',
value: 'Zablokuj i usuń wkład'
} )
.prependTo( '#mw-content-text' )
.on( 'click', function ( e ) {
var rollbackList, deleteList;
if ( confirm( 'Jesteś tego pewien?' ) ) {
rollbackQuery.summary = prompt( 'Wskaż uzasadnienie rewertu', rollbackQuery.summary );
api.postWithToken( 'block', {
action: 'block',
user: user,
expiry: prompt( 'Wskaż czas trwania blokady', 'infinite' ),
reason: prompt( 'Wskaż powód blokady', 'obchodzenie blokady' ),
nocreate: true,
autoblock: true,
reblock: true
} )
.then( function () {
mw.notify( 'Zablokowanie się powiodło.', msgOptions );
return api.get( {
formatversion: 2,
list: 'usercontribs',
ucuser: user,
uclimit: 'max'
} );
}, function () {
mw.notify( 'Wystąpił błąd podczas nakładania blokady.', $.extend( {}, msgOptions, {
type: 'error'
} ) );
} )
.then( function ( data ) {
var worklist = {};
$.each( data.query.usercontribs, function ( i, contrib ) {
var obj = worklist.hasOwnProperty( contrib.title )
? worklist[ contrib.title ]
: {
top: false,
new: false
};
obj.top |= contrib.top;
obj.new |= contrib.new;
worklist[ contrib.title ] = obj;
} );
rollbackList = $.grep( Object.keys( worklist ), function ( title ) {
var obj = worklist[ title ];
return obj.top && !obj.new;
} );
deleteList = $.grep( Object.keys( worklist ), function ( title ) {
var obj = worklist[ title ];
return obj.top && obj.new;
} );
mw.notify( mw.format(
'Pobrano wkład użytkownika: $1 edycji, $2 do przetworzenia (nowych: $3, bieżących: $4).',
Object.keys( worklist ).length,
rollbackList.length + deleteList.length,
deleteList.length,
rollbackList.length
), msgOptions );
} )
.then( function () {
if ( rollbackList.length ) {
return recursiveRollback( rollbackList ).then( function () {
var msg = mw.format(
'Zrewertowanych: $1, błędów: $2.',
stats.rollbackDone,
stats.rollbackFailed
);
mw.notify( msg, $.extend( {}, msgOptions, rollbackMsgOptions, {
type: stats.rollbackFailed ? 'warn' : 'info'
} ) );
} );
}
} )
.then( function () {
if ( deleteList.length ) {
return recursiveDelete( deleteList ).then( function () {
var msg = mw.format(
'Usuniętych: $1, błędów: $2.',
stats.deleteDone,
stats.deleteFailed
);
mw.notify( msg, $.extend( {}, msgOptions, deleteMsgOptions, {
type: stats.deleteFailed ? 'warn' : 'info'
} ) );
} );
}
} );
}
return false;
} );
} );
}
}( mediaWiki, jQuery ) );