صارف:Yethrosh/twinklebatchdelete.js
(صارف:محمد شعیب/twinklebatchdelete.js سے رجوع مکرر)
آپ کی توجہ درکار ہے۔ اس صفحہ میں جو اسکرپٹ شامل ہیں، وہ صفحہ لوڈ ہونے پر ہر دفعہ چلیں گی۔ لہذا خراب، غلط اور نامناسب کوڈ یا اسکرپٹ یہاں درج نہ کریں۔ اس سے آپ کے کھاتے کو بھی خطرہ لاحق ہو سکتا ہے۔ |
یاددہانی: محفوظ کرنے کے بعد تازہ ترین تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیش صاف کرنا ہوگا۔
- فائرفاکس/ سفاری: جب Reload پر کلک کریں تو Shift دبا کر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R- )
- گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
- انٹرنیٹ ایکسپلورر: جب Refresh پر کلک کریں تو Ctrl یا Ctrl-F5 دبائیں
- اوپیرا: Tools → Preferences میں جائیں اور کیش صاف کریں
اس اسکرپٹ کی دستاویزی تفصیلات صارف:Yethrosh/twinklebatchdelete پر درج کی جا سکتی ہیں۔ |
// 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 = " باستخدام [[وب:لمح|لمح]]";
}
/**
TwinkleConfig.deletionSummaryAd (string)
If ad should be added or not to deletion summary, default [[وب:لمح البصر|لمح البصر]]
*/
if( typeof( TwinkleConfig.deletionSummaryAd ) == 'undefined' ) {
TwinkleConfig.deletionSummaryAd = " باستخدام [[وب:لمح|لمح]]";
}
/**
TwinkleConfig.batchdeleteChunks (integer)
How many pages should be processed at a time
*/
if( typeof( TwinkleConfig.batchDeleteChunks ) == 'undefined' ) {
TwinkleConfig.batchdeleteChunks = 50;
}
/**
TwinkleConfig.batchDeleteMinCutOff (integer)
How many pages left in the process of being completed should allow a new batch to be initialized
*/
if( typeof( TwinkleConfig.batchDeleteMinCutOff ) == 'undefined' ) {
TwinkleConfig.batchDeleteMinCutOff = 5;
}
/**
TwinkleConfig.batchMax (integer)
How many pages should be processed maximum
*/
if( typeof( TwinkleConfig.batchMax ) == 'undefined' ) {
TwinkleConfig.batchMax = 5000;
}
function twinklebatchdelete() {
if( userIsInGroup( 'sysop' ) && (wgNamespaceNumber > 0 || wgCanonicalSpecialPageName == 'Prefixindex') ) {
mw.util.addPortletLink( 'p-cactions', "javascript:twinklebatchdelete.callback()", "حذ.دفعة", "tw-batch", "حذف الصفحات الموجودة على هذه الصفحة أو في هذه التصنيف", "");
}
}
$(twinklebatchdelete);
twinklebatchdelete.unlinkCache = {};
twinklebatchdelete.callback = function twinklesbatchdeleteCallback() {
if( wgCanonicalSpecialPageName == 'Prefixindex' && ! QueryString.exists( 'from' ) ) {
// Hey, we need "something" at least
return;
}
var Window = new SimpleWindow( 800, 400 );
Window.setTitle( "الحذف دفعة" );
var form = new QuickForm( twinklebatchdelete.callback.evaluate );
form.append( {
type: 'checkbox',
list: [
{
label: 'حذف الصفحة',
name: 'delete_page',
value: 'delete',
checked: true
},
{
label: 'انزع الوصلات',
name: 'unlink_page',
value: 'unlink',
checked: true
}
]
} );
form.append( {
type: 'textarea',
name: 'reason',
label: 'السبب: '
} );
if( wgNamespaceNumber == Namespace.CATEGORY ) {
var query = {
'action': 'query',
'generator': 'categorymembers',
'gcmtitle': wgPageName,
'gcmlimit' : TwinkleConfig.batchMax, // the max for sysops
'prop': [ 'categories', 'revisions' ],
'rvprop': [ 'size' ]
};
} else if( wgCanonicalSpecialPageName == 'Prefixindex' ) {
var query = {
'action': 'query',
'generator': 'allpages',
'gapnamespace': QueryString.get( 'namespace' ),
'gapprefix': QueryString.get( 'from' ).toUpperCaseFirstChar(),
'gaplimit' : TwinkleConfig.batchMax, // the max for sysops
'prop' : ['categories', 'revisions' ],
'rvprop': [ 'size' ]
}
} else {
var query = {
'action': 'query',
'generator': 'links',
'titles': wgPageName,
'gpllimit' : TwinkleConfig.batchMax, // the max for sysops
'prop': [ 'categories', 'revisions' ],
'rvprop': [ 'size' ]
};
}
var wikipedia_api = new Wikipedia.api( 'يتم سحب الصفحات', query, function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//page[@ns != "' + Namespace.IMAGE + '" and not(@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;
var size = xmlDoc.evaluate( 'revisions/rev/@size', object, null, XPathResult.NUMBER_TYPE, null ).numberValue;
var disputed = xmlDoc.evaluate( 'boolean(categories/cl[@title="Category:Contested candidates for speedy deletion"])', object, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue;
list.push( {label:page + ' (' + size + ')' + ( disputed ? ' DISPUTED' : '' ), value:page, checked:!disputed });
}
self.params.form.append( {
type: 'checkbox',
name: 'pages',
list: list
}
)
self.params.form.append( { type:'submit', label:'أرسل' } );
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();
}
twinklebatchdelete.currentDeleteCounter = 0;
twinklebatchdelete.currentUnlinkCounter = 0;
twinklebatchdelete.currentdeletor;
twinklebatchdelete.callback.evaluate = function twinklebatchdeleteCallbackEvaluate(event) {
Wikipedia.actionCompleted.notice = 'Status';
Wikipedia.actionCompleted.postfix = 'انتهى الحذف';
wgPageName = wgPageName.replace( /_/g, ' ' ); // for queen/king/whatever and country!
var pages = event.target.getChecked( 'pages' );
var reason = event.target.reason.value;
var delete_page = event.target.delete_page.checked;
var unlink_page = event.target.unlink_page.checked;
if( ! reason ) {
return;
}
Status.init( event.target );
if( !pages ) {
Status.error( 'Error', 'لا شيء للحذف' );
return;
}
function toCall( work ) {
if( work.length == 0 && twinklebatchdelete.currentDeleteCounter <= 0 && twinklebatchdelete.currentUnlinkCounter <= 0 ) {
window.clearInterval( twinklebatchdelete.currentdeletor );
Wikipedia.removeCheckpoint();
return;
} else if( work.length != 0 && ( twinklebatchdelete.currentDeleteCounter <= TwinkleConfig.batchDeleteMinCutOff || twinklebatchdelete.currentUnlinkCounter <= TwinkleConfig.batchDeleteMinCutOff ) ) {
twinklebatchdelete.unlinkCache = []; // Clear the cache
var pages = work.shift();
twinklebatchdelete.currentDeleteCounter += pages.length;
twinklebatchdelete.currentUnlinkCounter += 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( 'يتم التأكد إذا كانت صفحة ' + page + ' موجودة', query, twinklebatchdelete.callbacks.main );
wikipedia_api.params = { page:page, reason:reason, unlink_page:unlink_page, delete_page:delete_page };
wikipedia_api.post();
}
}
}
var work = pages.chunk( TwinkleConfig.batchdeleteChunks );
Wikipedia.addCheckpoint();
twinklebatchdelete.currentdeletor = window.setInterval( toCall, 1000, work );
}
twinklebatchdelete.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 exists = xmlDoc.evaluate( 'boolean(//pages/page[not(@missing)])', xmlDoc, null, XPathResult.BOOLEAN_TYPE, null ).booleanValue;
if( ! exists ) {
self.statelem.error( "It seems that the page doesn't exists, perhaps it has already been deleted" );
return;
}
if( self.params.unlink_page ) {
var query = {
'action': 'query',
'list': 'backlinks',
'blfilterredir': 'nonredirects',
'blnamespace': [0, 100], // main space and portal space only
'bltitle': self.params.page,
'bllimit': userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
};
var wikipedia_api = new Wikipedia.api( 'يتم سحب الوصلات', query, twinklebatchdelete.callbacks.unlinkBacklinksMain );
wikipedia_api.params = self.params;
wikipedia_api.post();
} else {
--twinklebatchdelete.currentUnlinkCounter;
}
if( self.params.delete_page ) {
var query = {
'action': 'query',
'list': 'backlinks',
'blfilterredir': 'redirects',
'bltitle': self.params.page,
'bllimit': userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
};
var wikipedia_api = new Wikipedia.api( 'يتم سحب الوصلات', query, twinklebatchdelete.callbacks.deleteRedirectsMain );
wikipedia_api.params = self.params;
wikipedia_api.post();
var query = {
'title': self.params.page,
'action': 'delete'
};
var wikipedia_wiki = new Wikipedia.wiki( 'يتم حذف صفحة ' + self.params.page, query, twinklebatchdelete.callbacks.deletePage, function( self ) {
--twinklebatchdelete.currentDeleteCounter;
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( [ 'انتهى (' , link , ')' ] );
} );
wikipedia_wiki.params = self.params;
wikipedia_wiki.followRedirect = false;
wikipedia_wiki.get();
} else {
--twinklebatchdelete.currentDeleteCounter;
}
},
deleteRedirectsMain: function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//backlinks/bl/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
var total = snapshot.snapshotLength * 2;
if( snapshot.snapshotLength == 0 ) {
return;
}
var statusIndicator = new Status('يتم حذف التحويلات', '0%');
var onsuccess = function( self ) {
var obj = self.params.obj;
var total = self.params.total;
var now = parseInt( 100 * ++(self.params.current)/total ) + '%';
obj.update( now );
self.statelem.unlink();
if( self.params.current >= total ) {
obj.info( now + ' (انتهى)' );
Wikipedia.removeCheckpoint();
}
}
var onloaded = onsuccess;
var onloading = function( self ) {}
Wikipedia.addCheckpoint();
if( snapshot.snapshotLength == 0 ) {
statusIndicator.info( '100% (انتهى)' );
Wikipedia.removeCheckpoint();
return;
}
var params = clone( self.params );
params.current = 0;
params.total = total;
params.obj = statusIndicator;
for ( var i = 0; i < snapshot.snapshotLength; ++i ) {
var title = snapshot.snapshotItem(i).value;
var query = {
'title': title,
'action': 'delete'
}
var wikipedia_wiki = new Wikipedia.wiki( "يتم حذف " + title, query, twinklebatchdelete.callbacks.deleteRedirects );
wikipedia_wiki.params = params;
wikipedia_wiki.onloading = onloading;
wikipedia_wiki.onloaded = onloaded;
wikipedia_wiki.onsuccess = onsuccess;
wikipedia_wiki.followRedirect = false;
wikipedia_wiki.get();
}
},
deleteRedirects: function( self ) {
var form = this.responseXML.getElementById( 'deleteconfirm' );
if( ! form ) { // Image deletion is b0rked :(
form = this.responseXML.getElementsByTagName( 'form' )[0];
var postData = {
'wpReason': "(تم الشطب استناد ([[وب:شطب#R1|لبند الطبR1]])، صفحة تحويل لصفحة محذوفة \"" + self.params.page + "\"." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
} else {
var postData = {
'wpWatch': form.wpWatch.checked ? '' : undefined,
'wpReason': "تم الشطب استناد ([[وب:شطب#R1|لبند الطبR1]])، صفحة تحويل لصفحة مذوفة \"" + self.params.page + "\"." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
}
self.post( postData );
},
deletePage: function( self ) {
var form = this.responseXML.getElementById( 'deleteconfirm' );
var postData = {
'wpWatch': form.wpWatch.checked ? '' : undefined,
'wpReason': "تم الشطب \"" + self.params.reason + "\"." + TwinkleConfig.deletionSummaryAd,
'wpEditToken': form.wpEditToken.value
}
self.post( postData );
},
unlinkBacklinksMain: function( self ) {
var xmlDoc = self.responseXML;
var snapshot = xmlDoc.evaluate('//backlinks/bl/@title', xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null );
if( snapshot.snapshotLength == 0 ) {
--twinklebatchdelete.currentUnlinkCounter;
return;
}
var statusIndicator = new Status('يتم نزع الوصلات', '0%');
var total = snapshot.snapshotLength * 2;
var onsuccess = function( self ) {
var obj = self.params.obj;
var total = self.params.total;
var now = parseInt( 100 * ++(self.params.current)/total ) + '%';
obj.update( now );
self.statelem.unlink();
if( self.params.current >= total ) {
obj.info( now + ' (انتهى)' );
--twinklebatchdelete.currentUnlinkCounter;
Wikipedia.removeCheckpoint();
}
}
var onloaded = onsuccess;
var onloading = function( self ) {}
Wikipedia.addCheckpoint();
if( snapshot.snapshotLength == 0 ) {
statusIndicator.info( '100% (انتهى)' );
--twinklebatchdelete.currentUnlinkCounter;
Wikipedia.removeCheckpoint();
return;
}
self.params.total = total;
self.params.obj = statusIndicator;
self.params.current = 0;
for ( var i = 0; i < snapshot.snapshotLength; ++i ) {
var title = snapshot.snapshotItem(i).value;
var query = {
'title': title,
'action': 'submit'
}
var wikipedia_wiki = new Wikipedia.wiki( "يتم إزالة الوصلات في " + title, query, twinklebatchdelete.callbacks.unlinkBacklinks );
var params = clone( self.params );
params.title = title;
wikipedia_wiki.params = params;
wikipedia_wiki.onloading = onloading;
wikipedia_wiki.onloaded = onloaded;
wikipedia_wiki.onsuccess = onsuccess;
wikipedia_wiki.get();
}
},
unlinkBacklinks: function( self ) {
var form = self.responseXML.getElementById('editform');
if( ! form ) {
// we probably just deleted it, as a recursive backlink
self.onsuccess( self );
Wikipedia.actionCompleted( self );
return;
}
var text;
if( self.params.title in twinklebatchdelete.unlinkCache ) {
text = twinklebatchdelete.unlinkCache[ self.params.title ];
} else {
text = form.wpTextbox1.value;
}
var old_text = text;
var wikiPage = new Mediawiki.Page( text );
wikiPage.removeLink( self.params.page );
text = wikiPage.getText();
twinklebatchdelete.unlinkCache[ self.params.title ] = text;
if( text == old_text ) {
// Nothing to do, return
self.onsuccess( self );
Wikipedia.actionCompleted( self );
return;
}
var postData = {
'wpMinoredit': form.wpMinoredit.checked ? '' : undefined,
'wpWatchthis': undefined,
'wpStarttime': form.wpStarttime.value,
'wpEdittime': form.wpEdittime.value,
'wpAutoSummary': form.wpAutoSummary.value,
'wpEditToken': form.wpEditToken.value,
'wpSummary': 'يتم إزالة الوصلات لصفحة ' + self.params.page + " التي تم حذفها \"" + self.params.reason + "\")" + "; " + TwinkleConfig.deletionSummaryAd,
'wpTextbox1': text
};
self.post( postData );
}
}