Difference between revisions of "User:SuperHamster/vector.js"
From Nookipedia, the Animal Crossing wiki
SuperHamster (talk | contribs) (Remove, now a gadget) Tag: Blanking |
SuperHamster (talk | contribs) (Restore for test) |
||
Line 1: | Line 1: | ||
+ | /* | ||
+ | * 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 | ||
+ | * {{Projet:JavaScript/Script|Smart patrol}} | ||
+ | */ | ||
+ | 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 ); | ||
+ | } | ||
+ | } ); | ||
+ | } | ||
+ | |||
+ | } ); | ||
+ | } ); | ||
+ | } |
Revision as of 00:29, March 12, 2021
/*
* 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
* {{Projet:JavaScript/Script|Smart patrol}}
*/
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 );
}
} );
}
} );
} );
}