Usuario:Alvaro qc/twinklebatchprotect.js
Nota: Después de guardar, debes refrescar la caché de tu navegador para ver los cambios. Internet Explorer: mantén presionada Ctrl mientras pulsas Actualizar. Firefox: mientras presionas Mayús pulsas el botón Actualizar, (o presiona Ctrl-Shift-R). Los usuarios de Google Chrome y Safari pueden simplemente pulsar el botón Recargar. Para más detalles e instrucciones acerca de otros exploradores, véase Ayuda:Cómo limpiar la caché.
// If TwinkleConfig aint exist.
if( typeof( TwinkleConfig ) == 'undefined' ) {
TwinkleConfig = {};
}
/**
TwinkleConfig.summaryAd (string)
If ad should be added or not to summary, default [[WP:TWINKLE|TWINKLE]]
*/
if( typeof( TwinkleConfig.summaryAd ) == 'undefined' ) {
TwinkleConfig.summaryAd = " using [[WP:TW|TW]]";
}
/**
TwinkleConfig.protectionSummaryAd (string)
If ad should be added or not to protection summary, default [[WP:TWINKLE|TWINKLE]]
*/
if( typeof( TwinkleConfig.protectionSummaryAd ) == 'undefined' ) {
TwinkleConfig.protectionSummaryAd = " using [[WP:TW|TW]]";
}
/**
TwinkleConfig.batchProtectChunks (integer)
How many pages should be processed at a time
*/
if( typeof( TwinkleConfig.batchProtectChunks ) == 'undefined' ) {
TwinkleConfig.batchProtectChunks = 50;
}
/**
TwinkleConfig.batchMax (integer)
How many pages should be processed maximum
*/
if( typeof( TwinkleConfig.batchMax ) == 'undefined' ) {
TwinkleConfig.batchMax = 5000;
}
function twinklebatchprotect() {
if( ! userIsInGroup( 'sysop' ) ) {
return;
}
mw.util.addPortletLink( 'p-cactions', "javascript:twinklebatchprotect.callback()", "p-batch", "tw-pbatch", "Protect pages found on this page", "");
}
$(twinklebatchprotect);
twinklebatchprotect.unlinkCache = {};
twinklebatchprotect.callback = function twinklesbatchprotectCallback() {
var Window = new SimpleWindow( 800, 400 );
Window.setTitle( "Batch protection" );
var form = new QuickForm( twinklebatchprotect.callback.evaluate );
form.append( {
type: 'select',
name: 'move',
label: 'Move protection',
list: [
{
label: 'Allow all users',
value: ''
},
{
label: 'Block new and unregistered users',
value: 'autoconfirmed'
},
{
label: 'Block all non-admin users',
value: 'sysop',
selected: true
}
]
} );
form.append( {
type: 'select',
name: 'edit',
label: 'Edit/Create protection',
list: [
{
label: 'Allow all users',
value: ''
},
{
label: 'Block new and unregistered users',
value: 'autoconfirmed'
},
{
label: 'Block all non-admin users',
value: 'sysop',
selected: true
}
]
} );
form.append( {
type: 'checkbox',
list: [
{
name: 'cascade',
label: 'Cascade protection'
}
]
} );
form.append( {
type: 'select',
name: 'expiry',
label: 'Expiration: ',
list: [
{ label: '15 minutes', value: '15 minutes' },
{ label: '30 minutes', value: '30 minutes' },
{ label: '45 minutes', value: '45 minutes' },
{ label: '1 hour', value: '1 hour' },
{ label: '2 hours', value: '2 hours' },
{ label: '3 hours', value: '3 hours' },
{ label: '6 hours', value: '6 hours' },
{ label: '12 hours', value: '12 hours' },
{ label: '1 day', value: '1 day' },
{ label: '2 days', value: '2 days' },
{ label: '3 days', value: '3 days' },
{ label: '4 days', value: '4 days' },
{ label: '5 days', value: '5 days' },
{ label: '6 days', value: '6 days' },
{ label: '1 week', value: '1 week' },
{ label: '2 weeks', value: '2 weeks' },
{ label: '1 month', value: '1 month' },
{ label: '2 months', value: '2 months' },
{ label: '3 months', value: '3 months' },
{ label: '6 months', value: '6 months' },
{ label: '1 year', value: '1 year' },
{ label: '2 years', value: '2 years' },
{ label: '3 years', value: '3 years' },
{ label: '6 years', value: '6 years' },
{ label: 'indefinite', selected: true, value:'indefinite' }
]
} );
form.append( {
type: 'textarea',
name: 'reason',
label: 'Reason: '
} );
var query = {
'action': 'query',
'generator': 'links',
'titles': wgPageName,
'prop': [ 'revisions' ],
'rvprop': [ 'size' ]
};
var wikipedia_api = new Wikipedia.api( 'Grabbing pages', query, function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//page', 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;
var size = xmlDoc.evaluate( 'revisions/rev/@size', object, null, XPathResult.NUMBER_TYPE, null ).numberValue;
list.push( {label:page + (size ? ' (' + size + ')' : '' ), 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();
}
twinklebatchprotect.currentProtectCounter = 0;
twinklebatchprotect.currentprotector;
twinklebatchprotect.callback.evaluate = function twinklebatchprotectCallbackEvaluate(event) {
wgPageName = wgPageName.replace( /_/g, ' ' ); // for queen/king/whatever and country!
var pages = event.target.getChecked( 'pages' );
var reason = event.target.reason.value;
var edit = event.target.edit.value;
var cascade = event.target.cascade.checked;
var expiry = event.target.expiry.value;
var move = event.target.move.value;
if( ! reason ) {
return;
}
Status.init( event.target );
function toCall( work ) {
if( work.length == 0 ) {
Status.info( 'work done' );
window.clearInterval( twinklebatchprotect.currentprotector );
Wikipedia.removeCheckpoint();
return;
} else if( twinklebatchprotect.currentProtectCounter <= 0 ) {
var pages = work.shift();
twinklebatchprotect.currentProtectCounter = pages.length;
for( var i = 0; i < pages.length; ++i ) {
var page = pages[i];
var query = {
'action': 'query',
'titles': page
}
var wikipedia_api = new Wikipedia.api( 'Checking if page ' + page + ' exists', query, twinklebatchprotect.callbacks.main );
wikipedia_api.params = { page:page, reason:reason, move: move, edit: edit, expiry: expiry, cascade: cascade };
wikipedia_api.post();
}
}
}
var work = pages.chunk( TwinkleConfig.batchProtectChunks );
Wikipedia.addCheckpoint();
twinklebatchprotect.currentprotector = window.setInterval( toCall, 1000, work );
}
twinklebatchprotect.callbacks = {
main: function( self ) {
var xmlDoc = self.responseXML;
var normal = xmlDoc.evaluate( '//normalized/n/@to', xmlDoc, null, XPathResult.STRING_TYPE, null ).stringValue;
if( normal ) {
self.params.page = normal;
}
var query = {
'title': self.params.page,
'action': 'protect'
};
var wikipedia_wiki = new Wikipedia.wiki( 'Protecting page ' + self.params.page, query, twinklebatchprotect.callbacks.protectPage, function( self ) {
--twinklebatchprotect.currentProtectCounter;
var link = document.createElement( 'a' );
link.setAttribute( 'href', wgArticlePath.replace( '$1', self.query['title'] ) );
link.setAttribute( 'title', self.query['title'] );
link.appendChild( document.createTextNode( self.query['title'] ) );
self.statelem.info( [ 'completed (' , link , ')' ] );
} );
wikipedia_wiki.params = self.params;
wikipedia_wiki.followRedirect = false;
wikipedia_wiki.get();
},
protectPage: function( self ) {
var form = self.responseXML.getElementById( 'mw-Protect-Form' );
var postData = {
'wpEditToken': form.wpEditToken.value,
'mwProtectWatch': form.mwProtectWatch.checked ? '' : undefined,
'mwProtect-cascade': self.params.cascade ? '' : undefined,
'mwProtect-expiry': self.params.expiry != 'indefinite' ? self.params.expiry : undefined,
'mwProtect-level-edit': self.params.edit,
'mwProtect-level-move': self.params.move,
'mwProtect-level-create': self.params.edit,
'mwProtect-reason': self.params.reason + TwinkleConfig.protectionSummaryAd
};
self.post( postData );
}
}