User:Liangent/Gadgets/Twinkle/batchundelete.js
外观
注意:保存之后,你必须清除浏览器缓存才能看到做出的更改。Google Chrome、Firefox、Microsoft Edge及Safari:按住⇧ Shift键并单击工具栏的“刷新”按钮。参阅Help:绕过浏览器缓存以获取更多帮助。
// If TwinkleConfig aint exist.
if( typeof( TwinkleConfig ) == 'undefined' ) {
TwinkleConfig = {};
}
/**
TwinkleConfig.deletionSummaryAd (string)
If ad should be added or not to deletion summary, default [[WP:TWINKLE|TWINKLE]]
*/
if( typeof( TwinkleConfig.deletionSummaryAd ) == 'undefined' ) {
TwinkleConfig.deletionSummaryAd = " using [[WP:TWINKLE|TW]]";
}
/**
TwinkleConfig.batchundeleteChunks (integer)
How many pages should be processed at a time
*/
if( typeof( TwinkleConfig.batchUndeleteChunks ) == 'undefined' ) {
TwinkleConfig.batchundeleteChunks = 50;
}
/**
TwinkleConfig.batchUndeleteMinCutOff (integer)
How many pages left in the process of being completed should allow a new batch to be initialized
*/
if( typeof( TwinkleConfig.batchUndeleteMinCutOff ) == 'undefined' ) {
TwinkleConfig.batchUndeleteMinCutOff = 5;
}
/**
TwinkleConfig.batchMax (integer)
How many pages should be processed maximum
*/
if( typeof( TwinkleConfig.batchMax ) == 'undefined' ) {
TwinkleConfig.batchMax = 5000;
}
function twinklebatchundelete() {
if( wgNamespaceNumber != Namespace.USER ) {
return;
}
if( userIsInGroup( 'sysop' ) ) {
addPortletLink( 'p-cactions', "javascript:twinklebatchundelete.callback()", "und-batch", "tw-batch-undel", "Undelete 'em all", "");
}
}
addOnloadHook(twinklebatchundelete);
twinklebatchundelete.callback = function twinklebatchundeleteCallback() {
var Window = new SimpleWindow( 800, 400 );
var form = new QuickForm( twinklebatchundelete.callback.evaluate );
form.append( {
type: 'textarea',
name: 'reason',
label: 'Reason: '
} );
var query = {
'action': 'query',
'generator': 'links',
'titles': wgPageName,
'gpllimit' : TwinkleConfig.batchMax, // the max for sysops
};
var wikipedia_api = new Wikipedia.api( 'Grabbing pages', query, function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//page[@missing]', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
var list = [];
for ( var i = 0; i < snapshot.snapshotLength; ++i ) {
var object = snapshot.snapshotItem(i);
var page = xmlDoc.evaluate( '@title', object, null, XPathResult.STRING_TYPE, null ).stringValue;
list.push( {label:page, value:page, checked: true });
}
self.params.form.append( {
type: 'checkbox',
name: 'pages',
list: list
}
)
self.params.form.append( { type:'submit' } );
var result = self.params.form.render();
self.params.Window.setContent( result );
} );
wikipedia_api.params = { form:form, Window:Window };
wikipedia_api.post();
var root = document.createElement( 'div' );
Status.init( root );
Window.setContent( root );
Window.display();
}
twinklebatchundelete.currentUndeleteCounter = 0;
twinklebatchundelete.currentundeleteor;
twinklebatchundelete.callback.evaluate = function( event ) {
Wikipedia.actionCompleted.notice = 'Status';
Wikipedia.actionCompleted.postfix = 'batch undeletion is now completed';
var pages = event.target.getChecked( 'pages' );
var reason = event.target.reason.value;
if( ! reason ) {
return;
}
Status.init( event.target );
if( !pages ) {
Status.error( 'Error', 'nothing to undelete, aborting' );
return;
}
var work = pages.chunk( TwinkleConfig.batchUndeleteChunks );
Wikipedia.addCheckpoint();
twinklebatchundelete.currentundeleteor = window.setInterval( twinklebatchundelete.callbacks.main, 1000, work, reason );
}
twinklebatchundelete.callbacks = {
main: function( work, reason ) {
if( work.length == 0 && twinklebatchundelete.currentUndeleteCounter <= 0 ) {
Status.info( 'work done' );
window.clearInterval( twinklebatchundelete.currentundeleteor );
Wikipedia.removeCheckpoint();
return;
} else if( work.length != 0 && twinklebatchundelete.currentUndeleteCounter <= TwinkleConfig.batchUndeleteMinCutOff ) {
var pages = work.shift();
twinklebatchundelete.currentUndeleteCounter += pages.length;
for( var i = 0; i < pages.length; ++i ) {
var title = pages[i];
var query = {
'title': 'Special:Undelete',
'target': title,
'action': 'submit'
};
var wikipedia_wiki = new Wikipedia.wiki( "Undeleting " + title, query, twinklebatchundelete.callbacks.undeletePage, function( self ) {
--twinklebatchundelete.currentUndeleteCounter;
var link = document.createElement( 'a' );
link.setAttribute( 'href', wgArticlePath.replace( '$1', self.params.title ) );
link.setAttribute( 'title', self.params.title );
link.appendChild( document.createTextNode( self.params.title ) );
self.statelem.info( [ 'completed (' , link , ')' ] );
});
wikipedia_wiki.params = { title:title, reason: reason };
wikipedia_wiki.get();
}
}
},
undeletePage: function( self ) {
var form = self.responseXML.getElementById('undelete');
var postData = {
'wpComment': self.params.reason + '.' + TwinkleConfig.deletionSummaryAd,
'target': self.params.image,
'wpEditToken': form.wpEditToken.value,
'restore': 1
}
self.post( postData );
}
};