پرش به محتوا

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

از ویکی‌پدیا، دانشنامهٔ آزاد
محتوای حذف‌شده محتوای افزوده‌شده
بهبود متن
پیگیری خودکار صفحهٔ ویرایش تا به مانند Special:Diff/31780410 راه‌حلی برایش پیدا کنیم
خط ۱۱۶: خط ۱۱۶:
}), {
}), {
wpTextbox1: content,
wpTextbox1: content,
wpWatchthis: '',
wpDiff: '',
wpDiff: '',
wpSummary: summary,
wpSummary: summary,

نسخهٔ ‏۱۳ آوریل ۲۰۲۱، ساعت ۱۵:۵۵

(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([
					'در پایین مقاله‌هایی که قابلیت پر شدن با این رده را دارند فهرست شده‌اند، پیش از افزودن رده لطفاً دقت کنید که رده‌های فرزند در مقاله نباشد. ترجیح ویکی‌پدیا این است که رده پدر زمانی که رده فرزند در مقاله موجود است، افزوده نشود. (در حال حاضر فقط صفحه‌های فضای نام اصلی فهرست شده‌اند و شامل زیررده‌ها نیست)',
					$('<ul>').append(
						entries.map(function (entry) {
							return $('<li>').append(entry[1], ' ', $('<button>', {
								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')
											),
											'افزودن رده به کمک توفاویکی رده',
											'MediaWiki:TofawikiCategoryNotice.js'
										);
									})
								}
							}));
						})
					)
				])
			);
		});
	});
	
	function addCategoryToPageContent(content, category) {
		return content.replace(/\n\[\[رده:[\s\S]*\n\[\[رده:.*\]\]/, function (cats) {
			return persianSortText(cats + '\n[' + '[رده:' + mw.config.get('wgTitle') + ']' + ']');
		});
	}
	
	
	function dePersian(text) {
		return text
			.replace(/ی/g, 'ي')
			.replace(/ک/g, 'ك')
			.replace(/گ/g, 'كی')
			.replace(/ژ/g, 'زی')
			.replace(/چ/g, 'جی')
			.replace(/پ/g, 'بی');
	}

	function persianSortText(text) {
		return text.split('\n').sort(function (x, y) {
			var keyX = dePersian(x),
				keyY = dePersian(y);
			if (keyX < keyY) {
				return -1;
			}
			if (keyX > keyY) {
				return 1;
			}
			return 0;
		}).join('\n');
	}

	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,
			wpWatchthis: '',
			wpDiff: '',
			wpSummary: summary,
			wpUltimateParam: 1
		});
	}
}(jQuery, mediaWiki));