مدیاویکی:Gadget-twinkledeprod.js: تفاوت میان نسخه‌ها

از ایران پدیا
پرش به ناوبری پرش به جستجو
بدون خلاصۀ ویرایش
جز (۱ نسخه واردشده)
 
(یک نسخهٔ میانیِ ایجادشده توسط همین کاربر نشان داده نشد)
(بدون تفاوت)

نسخهٔ کنونی تا ‏۲ دسامبر ۲۰۱۷، ساعت ۲۰:۵۲

//<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>