User:SuperHamster/vector.js

/*
 * This script adds a tab which allows a mass patrolling on the current page. Because it was pointless to mark as patrolled 10 intermediate versions when we can read the difference between the first and the last

if ( mw.config.get('wgNamespaceNumber') >= 0 ) {

mw.loader.using( 'mediawiki.util', function {        $( function ( $ ) {

var link = mw.util.addPortletLink( 'p-cactions', '#', 'Smart patrol', 'Smart patrol' ); $( link ).click( function ( e ) {               e.preventDefault;                mw.loader.using( [ 'mediawiki.api', 'mediawiki.notify', 'oojs-ui' ], function  { askToLaunch; } );           } );

function askToLaunch { new OO.ui.confirm( 'Are you sure you want to patrol all the page revisions?' ).then( function ( response ) {                   if ( response === true ) {                        getAndProcessRevisions;                    }                } ); }

function getAndProcessRevisions( apicontinue ) { var params = { 'action': 'query', 'format': 'json', 'prop': 'revisions', 'titles': mw.config.get( 'wgPageName' ), 'formatversion': 2, 'rvprop': 'ids', 'rvlimit': 50 };               if ( apicontinue ) { $.extend( params, apicontinue ); }               new mw.Api .get( params ) .then( function ( data ) {                       var revisions = data.query.pages[ 0 ].revisions;                        markRevisionsAsPatrolled( revisions )                            .then( function ( shouldContinue ) { if ( shouldContinue && data[ 'continue' ] ) { getAndProcessRevisions( data[ 'continue' ] ); } else { window.location.reload; }                           } )                            .fail( function ( error ) { mw.notify( 'Something went wrong: ' + error, { title: 'Smart Patrol', type: 'error' } ); } );                   } )                    .fail( function ( error ) {                        mw.notify( 'Something went wrong: ' + error, { title: 'Smart Patrol', type: 'error' } );                    } ); }

function markRevisionsAsPatrolled( revisions ) { var deferred = $.Deferred; markOneAsPatrolled( revisions, 0, deferred ); return deferred.promise; }

function markOneAsPatrolled( revisions, index, deferred ) { var revid = revisions[ index ].revid; new mw.Api .postWithToken( 'patrol', {                       'action': 'patrol',                        'revid': revid                    } ) .then( function ( info ) {                       console.log( 'Successfully patrolled: ' + revid );                        if ( revisions[ index + 1 ] ) {                            markOneAsPatrolled( revisions, index + 1, deferred );                        } else {                            deferred.resolve( true );                        }                    } ) .fail( function ( error ) {                       if ( error === 'notpatrollable' ) {                            console.log( "Can't be patrolled as it's too old: " + revid );                            deferred.resolve( false );                        } else {                            deferred.reject( error );                        }                    } ); }

} );   } ); }