Wikisłownikarz:Peter Bowman/suppress.js

Z Wikisłownika – wolnego słownika wielojęzycznego

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 ) );