مدیاویکی:Gadget-twinkledeprod.js

از ایران پدیا
پرش به ناوبری پرش به جستجو

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
//<nowiki>


(function($){


/*
****************************************
*** twinkledeprod.js: Batch deletion of expired PRODs (sysops only)
****************************************
* Mode of invocation:     Tab ("حذف زمان‌دار")
* Active on:              Categories whose name starts with "رده:حذف زمان‌دار از تاریخ"
* Config directives in:   TwinkleConfig
*/

Twinkle.deprod = function() {
	if( mw.config.get( 'wgNamespaceNumber' ) !== 14 || ! Morebits.userIsInGroup( 'sysop' ) || !((/^رده:حذف_زمان‌دار_از_تاریخ/).test(mw.config.get( 'wgPageName' ))) ) {
		return;
	}
	Twinkle.addPortletLink( callback, "حذف زمان‌دار", "tw-deprod", "حذف صفحه‌های زمان‌دار یافت‌شده در این رده");
};

var unlinkCache = {},
concerns = {},
currentDeleteCounter = 0,
currentUnlinkCounter = 0,
currentDeletor = null,

callback = function() {
	var Window = new Morebits.simpleWindow( 800, 400 );
	Window.setTitle( "پاکسازی حذف زمان‌دار" );
	Window.setScriptName( "توینکل" );
	Window.addFooterLink( "حذف زمان‌دار", "اپ:زمان‌دار" );
	Window.addFooterLink( "راهنمای توینکل", "ip:TW/DOC#deprod" );

	var form = new Morebits.quickForm( callback_commit );

	var query = {
		'action': 'query',
		'generator': 'categorymembers',
		'gcmtitle': mw.config.get( 'wgPageName' ),
		'gcmlimit' : 5000, // the max for sysops
		'prop': [ 'categories', 'revisions' ],
		'rvprop': [ 'content' ]
	};

	var iranpedia_api = new Morebits.wiki.api( 'در حال گرفتن صفحه‌ها', query,
		function( self ) {
			var $doc = $(self.responseXML);
			var $pages = $doc.find('page[ns!="6"]');  // all non-files
			var list = [];
			var re = /\{\{Proposed deletion/;
			$pages.each(function() {
				var $self = $(this);
				var page = $self.attr('title');
				var content = $self.find('revisions rev').text();
				var concern = '';
				var res = re.exec(content);
				if( res ) {
					var parsed = Morebits.wikitext.template.parse( content, res.index );
					concern = parsed.parameters.concern || '';
				}
				list.push( {label:page + ' (' + concern + ')' , value:page, checked:concern !== '' });
				concerns[page] = concern;

			});
			self.params.form.append({
				'type': 'checkbox',
				'name': 'pages',
				'list': list
			});
			self.params.form.append({
				'type': 'submit'
			});
			self.params.Window.setContent(  self.params.form.render() );
		});

	iranpedia_api.params = { form:form, Window:Window };
	iranpedia_api.post();
	var root = document.createElement( 'div' );
	Morebits.simpleWindow.setButtonsEnabled( true );

	Morebits.status.init( root );
	Window.setContent( root );
	Window.display();
},

callback_commit = function(event) {
	var pages = event.target.getChecked( 'pages' );
	Morebits.status.init( event.target );

	var toCall = function( work ) {
		if( work.length === 0 ) {
			Morebits.status.info( 'انجام شد' );
			window.clearInterval( currentDeletor );
			Morebits.wiki.removeCheckpoint();
			return;
		} else if( currentDeleteCounter <= 0 || currentUnlinkCounter <= 0 ) {
			unlinkCache = []; // Clear the cache
			var pages = work.pop(), i;
			for( i = 0; i < pages.length; ++i ) {
				var page = pages[i];
				var query = {
					'action': 'query',
					'prop': 'revisions',
					'rvprop': [ 'content' ],
					'rvlimit': 1,
					'titles': page
				};
				var iranpedia_api = new Morebits.wiki.api( 'در حال بررسی وجودداشتن صفحه ' + page, query, callback_check );
				iranpedia_api.params = { page:page, reason: concerns[page] };
				iranpedia_api.post();
			}
		}
	};

	var work = Morebits.array.chunk( pages, Twinkle.getPref('proddeleteChunks') );
	Morebits.wiki.addCheckpoint();
	currentDeletor = window.setInterval( toCall, 1000, work );
},
callback_check = function( self ) {
	var $doc  = $(self.responseXML);
	var normal = $doc.find('normalized n').attr('to');
	if( normal ) {
		self.params.page = normal;
	}
	var exists = $doc.find('pages page:not([missing])').length > 0;

	if( ! exists ) {
		self.statelem.error( "به نظر می‌رسد که صفحه وجود ندارد، شاید از پیش حذف شده‌باشد." );
		return;
	}

	var query = {
		'action': 'query',
		'list': 'backlinks',
		'blfilterredir': 'redirects',
		'bltitle': self.params.page,
		'bllimit': Morebits.userIsInGroup( 'sysop' ) ? 5000 : 500 // 500 is max for normal users, 5000 for bots and sysops
	};
	var iranpedia_api = new Morebits.wiki.api( 'در حال گرفتن تغییرمسیرها', query, callback_deleteRedirects );
	iranpedia_api.params = self.params;
	iranpedia_api.post();

	var page = new Morebits.wiki.page('بحث:' + self.params.page, "در حال حذف صفحهٔ بحث");
	page.setEditSummary("[[اپ:محس#ع۸|ع۸]]: [[راهنما:صفحه بحث|صفحهٔ  بحث]]ِ یک صفحهٔ حذف‌شده «" + self.params.page + "»" + Twinkle.getPref('deletionSummaryAd'));
	page.deletePage();

	page = new Morebits.wiki.page(self.params.page, "در حال حذف نوشتار");
	page.setEditSummary("[[اپ:زمان‌دار|حذف زمان‌دار]] منقضی‌شده، دلیل این بود: " + self.params.reason + Twinkle.getPref('deletionSummaryAd'));
	page.deletePage();
},
callback_deleteRedirects = function( self ) {
	var $doc = $(self.responseXML);
	$doc.find("backlinks bl").each(function(){
		var title = $(this).attr('title');
		var page = new Morebits.wiki.page(title, "در حال حذف صفحهٔ تغییرمسیر " + title);
		page.setEditSummary("[[اپ:محس#ت۱|ت۱]]: تغییرمسیر به صفحهٔ حذف‌شده «" + self.params.page + "»" + Twinkle.getPref('deletionSummaryAd'));
		page.deletePage();
	});
};

})(jQuery);


//</nowiki>