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

از ویکی حقوق
پرش به ناوبری پرش به جستجو
جز (۱ نسخه واردشده)
جز (۱ نسخه واردشده)
 
(یک نسخهٔ میانی ویرایش شده توسط یک کاربر دیگر نشان داده نشد)
خط ۱۴۶: خط ۱۴۶:
query = {
query = {
'action': 'query',
'action': 'query',
'titles': 'Talk:' + pageName
'titles': 'بحث:' + pageName
};
};
wikipedia_api = new Morebits.wiki.api('بررسی این که ' + pageName + ' صفحهٔ بحث دارد یا نه', query, // localized
wikipedia_api = new Morebits.wiki.api('بررسی این که ' + pageName + ' صفحهٔ بحث دارد یا نه', query, // localized

نسخهٔ کنونی تا ‏۲۲ ژوئن ۲۰۲۱، ساعت ۲۱:۳۳

// <nowiki>


(function($) {


/*
****************************************
*** twinkledeprod.js: Batch deletion of expired PRODs (sysops only)
****************************************
* Mode of invocation:     Tab ("Deprod")
* Active on:              Categories whose name contains "proposed_deletion"
*/

Twinkle.deprod = function() {
	if (
		!Morebits.userIsSysop ||
		mw.config.get('wgNamespaceNumber') !== 14 ||
		!(/حذف_زمان‌دار/i).test(mw.config.get('wgPageName')) // localized
	) {
		return;
	}
	Twinkle.addPortletLink(Twinkle.deprod.callback, 'حذف زماندار دسته‌جمعی', 'tw-deprod', 'صفحه‌های ایجاد شده در این رده را حذف زماندار کنید'); // localized
};

var concerns = {};

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

	var form = new Morebits.quickForm(callback_commit);

	var statusdiv = document.createElement('div');
	statusdiv.style.padding = '15px';  // just so it doesn't look broken
	Window.setContent(statusdiv);
	Morebits.status.init(statusdiv);
	Window.display();

	var query = {
		'action': 'query',
		'generator': 'categorymembers',
		'gcmtitle': mw.config.get('wgPageName'),
		'gcmlimit': 'max', // 500 is max for normal users, 5000 for bots and sysops
		'gcmnamespace': '0|6|108|2', // mostly to ignore categories
		'prop': [ 'info', 'revisions' ],
		'rvprop': [ 'content' ],
		'inprop': [ 'protection' ]
	};

	var statelem = new Morebits.status('گرفتن فهرست صفحه‌ها'); // localized
	var wikipedia_api = new Morebits.wiki.api('در حال بارگیری...', query, function(apiobj) { // localized
		var $doc = $(apiobj.responseXML);
		var $pages = $doc.find('page[ns!="6"]');  // all non-files
		var list = [];
		var re = /\{\{حذف زماندار/; // localized
		$pages.each(function() {
			var $page = $(this);
			var title = $page.attr('title');
			var content = $page.find('revisions rev').text();
			var $editprot = $page.find('pr[type="edit"][level="sysop"]');
			var isProtected = $editprot.length > 0;

			var metadata = [];
			var res = re.exec(content);
			if (res) {
				var parsed = Morebits.wikitext.template.parse(content, res.index);
				concerns[title] = parsed.parameters['اهمیت'] || ''; // localized
				metadata.push(concerns[title]);
			}
			if (isProtected) {
				metadata.push('محافظت کامل' + // localized
					($editprot.attr('expiry') === 'infinity' ? ' بی‌پایان' : '، انقضا در ' + $editprot.attr('expiry'))); // localized
			}
			list.push({
				label: metadata.length ? '(' + metadata.join('; ') + ')' : '',
				value: title,
				checked: concerns[title] !== '',
				style: isProtected ? 'color:red' : ''
			});
		});
		apiobj.params.form.append({ type: 'header', label: 'صفحه‌ها برای حذف' }); // localized
		apiobj.params.form.append({
			type: 'button',
			label: 'انتخاب همه', // localized
			event: function(e) {
				$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', true);
			}
		});
		apiobj.params.form.append({
			type: 'button',
			label: 'انتخاب هیچ‌کدام', // localized
			event: function(e) {
				$(Morebits.quickForm.getElements(e.target.form, 'pages')).prop('checked', false);
			}
		});
		apiobj.params.form.append({
			'type': 'checkbox',
			'name': 'pages',
			'list': list
		});
		apiobj.params.form.append({
			'type': 'submit'
		});

		var rendered = apiobj.params.form.render();
		apiobj.params.Window.setContent(rendered);
		$(Morebits.quickForm.getElements(rendered, 'pages')).each(function(index, checkbox) {
			var $checkbox = $(checkbox);
			var link = Morebits.htmlNode('a', $checkbox.val());
			link.setAttribute('class', 'deprod-page-link');
			link.setAttribute('href', mw.util.getUrl($checkbox.val()));
			link.setAttribute('target', '_blank');
			$checkbox.next().prepend([link, ' ']);
		});
	}, statelem);

	wikipedia_api.params = { form: form, Window: Window };
	wikipedia_api.post();
};

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

		var batchOperation = new Morebits.batchOperation('حذف صفحه‌ها'); // localized
		batchOperation.setOption('chunkSize', Twinkle.getPref('proddeleteChunks'));
		batchOperation.setOption('preserveIndividualStatusLines', true);
		batchOperation.setPageList(pages);
		batchOperation.run(function(pageName) {
			var params = { page: pageName, reason: concerns[page] };

			var query = {
				'action': 'query',
				'titles': pageName,
				'prop': 'redirects',
				'rdlimit': 'max' // 500 is max for normal users, 5000 for bots and sysops
			};
			var wikipedia_api = new Morebits.wiki.api('دریافت تغییرمسیرها', query, callback_deleteRedirects); // localized
			wikipedia_api.params = params;
			wikipedia_api.post();

			query = {
				'action': 'query',
				'titles': 'بحث:' + pageName
			};
			wikipedia_api = new Morebits.wiki.api('بررسی این که ' + pageName + ' صفحهٔ بحث دارد یا نه', query, // localized
				callback_deleteTalk);
			wikipedia_api.params = params;
			wikipedia_api.post();

			var page = new Morebits.wiki.page(pageName, 'در حال حذف مقاله‌ها ' + pageName); // localized
			page.setEditSummary('سرآمدن [[ویکی‌پدیا:حذف زمان‌دار|حذف زمان‌دار]]، مشکل صفحه: ' + (concerns[pageName] === undefined ? 'نامشخص' : concerns[pageName]) + Twinkle.getPref('deletionSummaryAd')); // localized
			page.suppressProtectWarning();
			page.deletePage(batchOperation.workerSuccess, batchOperation.workerFailure);
		});
	},
	callback_deleteTalk = function(apiobj) {
		var $doc = $(apiobj.responseXML);
		var exists = $doc.find('page:not([missing])').length > 0;

		if (!exists) {
		// no talk page; forget about it
			return;
		}

		var page = new Morebits.wiki.page('Talk:' + apiobj.params.page, 'حذف صفحهٔ بحث ' + apiobj.params.page); // localized
		page.setEditSummary('[[وپ:محس#ع۸|ع۸]]: [[راهنما:صفحه بحث|صفحهٔ بحث]] صفحهٔ حذف شده «' + apiobj.params.page + '»' + Twinkle.getPref('deletionSummaryAd')); // localized
		page.deletePage();
	},
	callback_deleteRedirects = function(apiobj) {
		var $doc = $(apiobj.responseXML);
		$doc.find('redirects rd').each(function() {
			var title = $(this).attr('title');
			var page = new Morebits.wiki.page(title, 'حذف تغییر مسیر صفحه ' + title); // localized
			page.setEditSummary('[[وپ:محس#ع۸|ع۸]]: تغییر مسیر به صفحهٔ حذف شده «' + apiobj.params.page + '»' + Twinkle.getPref('deletionSummaryAd')); // localized
			page.deletePage();
		});
	};

})(jQuery);


// </nowiki>