مدیاویکی:TofawikiCategory.js

از ویکی‌پدیا، دانشنامهٔ آزاد

نکته: برای دیدن تغییرات، ممکن است نیاز باشد که حافظهٔ نهانی مرورگر خود را پس از انتشار پاک‌سازی کنید. گوگل کروم، فایرفاکس، مایکروسافت اج و سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload در نوار ابزار مرورگر کلیک کنید. برای آگاهی از جزئیات و نحوهٔ پاک‌سازی حافظهٔ نهانی سایر مرورگرها، صفحهٔ ویکی‌پدیا:میانگیر مرورگرتان را خالی کنید را ببینید.

(function ($, mw) {
	'use strict';

	$(function () {
		var englishLink = $('.interwiki-en a');
		if (englishLink.length === 0) return console.log('دارای پیوند به ویکی‌پدیای انگلیسی نیست.');
		var englishCategory = (englishLink[0].href || '').split('.wikipedia.org/wiki/Category:')[1] || '';
		if (englishCategory === '') return console.log('پیوند به ویکی‌پدیای انگلیسی رده نیود یا قابل تشخیص نیست.');
		$.post('https://linkstranslator.toolforge.org', {
			from: 'en',
			fromCategory: englishCategory,
			to: 'fa',
			notToCategory: mw.config.get('wgTitle')
		}).then(function (result) {
			var entries = Object.entries(result);
			if (entries.length === 0) return console.log('رده‌ای برای افزودن نبود');
			$('#mw-content-text').before(
				$('<div>').css({
					padding: '1em',
					border: '2px lightgray solid',
					'border-radius': '20px'
				}).append([
					'در پایین مقاله‌هایی که قابلیت پر شدن با این رده را دارند فهرست شده‌اند، پیش از افزودن رده لطفاً دقت کنید که رده‌های فرزند در مقاله نباشد. ترجیح ویکی‌پدیا این است که رده پدر زمانی که رده فرزند در مقاله موجود است، افزوده نشود. (در حال حاضر فقط صفحه‌های فضای نام اصلی فهرست شده‌اند و شامل زیررده‌ها نیست)',
					$('<div>').css({
						'max-height': 300,
						'column-count': 3,
						'column-width': '24em',
						'overflow': 'auto'
					}).append(
						$('<ul>').css('margin-top', 0).append(
							entries.map(function (entry) {
								return $('<li>').append(entry[1], ' ', $('<div>', {
									class: 'mw-ui-button',
									style: 'font-size: 70%; min-height: initial',
									text: 'افزودن',
									click: function (e) {
										e.preventDefault();
										e.target.disabled = true;
										loadPage(entry[1]).then(function (content) {
											bringShowChanges(
												entry[1],
												addCategoryToPageContent(
													content, mw.config.get('wgTitle'), entry[1]
												),
												'افزودن ردهٔ «' + mw.config.get('wgTitle') + '» به کمک توفاویکی رده',
												'MediaWiki:TofawikiCategoryNotice.js'
											);
										})
									}
								}));
							})
						)
					)
				])
			);
		});
	});

	function addCategoryToPageContent(content, newCategory, pageName) {
        var sortCategories = (window.persianWikiTools || {}).sortCategories ||
        	function (x) { return x; };
		return sortCategories(content.replace(/(\[\[رده:|$)/, function (x) { 
			return '[' + '[رده:' + newCategory + ']' + ']\n' + x;
		}), pageName);
	}

	function loadPage(title) {
		return new mw.Api().get({
			action: 'query',
			prop: 'revisions',
			titles: title,
			rvprop: 'content',
			format: 'json'
		}).then(function (data) {
			return Object.values(data.query.pages)[0].revisions[0]['*'];
		});
	}
	
	function openPostPage(url, data) {
		var form = document.createElement('form');
		document.body.appendChild(form);
		form.target = '_blank';
		form.method = 'post';
		form.action = url;
		for (var name in data) {
			var input = document.createElement('input');
			input.type = 'hidden';
			input.name = name;
			input.value = data[name];
			form.appendChild(input);
		}
		form.submit();
		document.body.removeChild(form);
	}
	
	function bringShowChanges(page, content, summary, withJS) {
		openPostPage(new mw.Uri(mw.config.get('wgScript')).extend({
			title: page,
			withJS: withJS, // remove if isn't needed
			action: 'submit'
		}), {
			wpTextbox1: content,
			wpDiff: '',
			wpSummary: summary,
			wpUltimateParam: 1
		});
	}
}(jQuery, mediaWiki));