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

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

$(function() {
	function loadPage(title, callback) {
		new mw.Api().get({
			action: 'query',
			prop: 'revisions',
			titles: title,
			rvprop: 'content',
			format: 'json'
		}).then(function(data) {
			try {
				callback($.map(data.query.pages, function(value) {
					return value;
				})[0].revisions[0]['*']);
			} catch (exception) {
				callback('');
			}
		}).catch(function(data) {
			callback($.map(data.query.pages, function(value) {
				return value;
			})[0].revisions[0]);
		});
	}

	function savePage(title, text, summary, callback) {
		return new mw.Api().post({
			action: 'edit',
			title: title,
			text: text,
			summary: summary,
			minor: '',
			token: mw.user.tokens.get('csrfToken')
		}).then(function(data) {
			if (data.error && data.error.info) {
				mw.notify(data.error.info);
			} else {
				callback();
			}
		}).catch(function(data) {
			mw.notify(data);
		});
	}

	function CloseTalkPage(text) {
		text = text.replace("<!-- ↓ پایین این خط - جدید در بالا ↓ -->", "<!-- ↓ پایین این خط - جدید در بالا ↓ -->\n{{ویکی‌پدیا:گزیدن نگاره برگزیده/" + mw.config.get('wgTitle') + "}}");
		mw.notify('الگو پیشنهاد برگزیدگی به صفحه افزوده شد!');
		return text;
	}

	function loadSavePageRefresh(page, replaceCallback, summary) {
		loadPage(page, function(text) {
			savePage(page, replaceCallback(text), summary, function() {
				//window.location = mw.util.getUrl(page) + '?action=purge';
			});
		});
	}

	function addBotLink2(botName, id, tooltip, note, botUrl, imageUrl) {
		$(mw.util.addPortletLink(
			'p-cactions',
			'#',
			botName,
			id,
			tooltip
		)).click(function(e) {
			e.preventDefault();
			mw.notify(note, {
				autoHide: false
			});
			$.get(new mw.Uri(botUrl).extend({
				enwiki: mw.config.get('wgTitle'),
			}).toString()).then(function(result) {
				mw.notify(result.msg, {
					autoHide: false
				});
				loadSavePageRefresh("ویکی‌پدیا:گزیدن نگاره برگزیده",
					function(text) {
						return CloseTalkPage(text)
					}, '/' + '*افزودن نظرخواهی جدید*' + '/');
				var uri = new mw.Uri();
				uri.query = {
					title: "ویکی‌پدیا:گزیدن نگاره برگزیده/" + mw.config.get('wgTitle'),
					action: 'edit',
					redlink: 1,
					withJS: 'MediaWiki:AHK2.js',
					summary: 'ایجاد صفحه نظرخواهی بر اساس ابزار',
					text: result.page_content,
				};
				uri.path = mw.config.get('wgScriptPath') + '/index.php';
				window.location = uri.toString();
			})
		}).find('a').prepend(imageUrl ? [$('<img>', {
			src: imageUrl,
			height: 20,
			width: 20
		}), ' '] : '');
	}

	function addBotLink(botName, id, tooltip, note, botUrl, imageUrl) {
		$(mw.util.addPortletLink(
			'p-cactions', '#', botName, id, tooltip
		)).click(function(e) {
			e.preventDefault();
			mw.notify(note, { autoHide: false });
			var pageTitle=mw.config.get('wgTitle')
			if (id === 'ca-r-replace') {//اگر ابزار جایگزینی پیوند بود
				alert('ویرایش صرفاً به قصد جایگزینی [[تغییرمسیر]] > [[صفحهٔ هدف]]، عمل پسندیده‌ای نیست. لطفاً از این ابزار فقط در جهت اصلاح پیوندهای نادرست به درست استفاده کنید.')
				var link1 = prompt("برای [[پیوند۱]] > [[پیوند۲]] عنوان پیوند مبدأ یا پیوند۱ چیست؟");
				var link2 = prompt("برای [[پیوند۱]] > [[پیوند۲]] عنوان پیوند مقصد یا پیوند۲ چیست؟");
				if (link1.length > 1 && link2.length > 1){
					var reResion = prompt("چرا می‌خواهید [["+link1+"]] > [["+link2+"]] جایگزین شود؟");
					if (reResion.length <= 1){
						alert('دلیل جایگزینی را مشخص نکردید!')
						var reResion = prompt("چرا می‌خواهید [["+link1+"]] > [["+link2+"]] جایگزین شود؟");
						if (reResion.length <= 1){return;}
					}
					pageTitle=link1+'---'+link2+'---'+reResion
				}else{
					alert('پیوند۱ یا پیوند۲ تعریف مشخص نشده‌اند در نتیجه عمل جایگزینی انجام نمی‌شود!')
				}
			}
			$.get(new mw.Uri(botUrl).extend({
				title: pageTitle,
				fawiki: mw.config.get('wgTitle').replace(/ /g,'_'),
				user: 'کاربر:' + mw.config.get('wgUserName'),
				namespace: mw.config.get('wgNamespaceNumber')
			}).toString()).then(function(result) {
				mw.notify(result.msg, {
					autoHide: false
				});
				var resultmsg = result.msg;
				
				var uri = new mw.Uri(),
					pageTitle;
				if (id === 'ca-eval' && mw.config.get('wgNamespaceNumber') === 0) {
					pageTitle = 'بحث:' + mw.config.get('wgPageName')
				} else if (id === 'ca-articleneeded') {
					pageTitle = resultmsg;
				} else {
					pageTitle = mw.config.get('wgPageName')
				}
				uri.query = {
					'title': pageTitle,
					'diff': 'cur',
					'oldid': 'prev'
				};
				uri.path = mw.config.get('wgScriptPath') + '/index.php';
				if (id !== 'ca-articlefilling' && id !== 'ca-filling'&& id !== 'ca-navebox' && id !== 'ca-pipe'){
					window.location = uri.toString();
				}else if (id !== 'ca-r-replace'){
					mw.notify('ربات شروع به کار کرد.');
				}else{
					setTimeout(function() {
						var uri = new mw.Uri()
						uri.query = {
							'title': pageTitle
						};
						uri.path = mw.config.get('wgScriptPath') + '/index.php';
						window.location = uri.toString();
					}, 8000);//تاخیر در به‌روز کردن صفحه تا ربات در این مدت تعدادی صفحه به رده افزوده باشد.
				}
			});
		}).find('a').prepend(imageUrl ? [$('<img>', {
			src: imageUrl,
			height: 20,
			width: 20
		}), ' '] : '');
	}
	
	// If the user is blocked don't show these tools
	var TheQuery='//fa.wikipedia.org/w/api.php?format=json&action=query&list=users&usprop=blockinfo&ususers='+mw.config.get('wgUserName')
	var blocked;

	$.getJSON(TheQuery).then(function (query) {
		if (!query || !query.query) { return; }
		query = query.query;
		var user = query.users[0];
		try {
			blocked = typeof user.blockedby != "undefined";
		} catch(e) {
			return;
		}
	}).then(function() {
		if (blocked) {
			// alert( 'Yes')
			return;
		}
	});

	if (mw.config.get('wgNamespaceNumber') === 0 &&
		$('[class=new][title^="پرونده:"]').length !== 0 &&
		$('#catlinks a[href="/wiki/%D8%B1%D8%AF%D9%87:%D8%B5%D9%81%D8%AD%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%AF%D8%A7%D8%B1%D8%A7%DB%8C_%D9%BE%DB%8C%D9%88%D9%86%D8%AF_%D8%AE%D8%B1%D8%A7%D8%A8_%D8%A8%D9%87_%D9%BE%D8%B1%D9%88%D9%86%D8%AF%D9%87"]').length !== 0) {
		// رده:صفحه‌های_دارای_پیوند_خراب_به_پرونده
		$.get('//rezabot.toolforge.org/uploadfairuse.php', { title: mw.config.get('wgPageName') });
		//mw.notify('درخواست بارگذاری تصویر منصفانهٔ ناموجود داده شد.', { autoHide: false })
	};

	if (mw.config.get('wgNamespaceNumber') === 14) {
		// ابزار افزودن | به اعضای رده‌ها
		addBotLink(
			' پیش‌فرض رده',
			'ca-pipe',
			'افزودن پیش‌فرض به اعضای رده برای نمایش بهتر آنها در رده',
			'افزودن پیش‌فرض‌رده به رده‌ها آغاز شد، لطفاً کمی صبر کنید.',
			'//rezabot.toolforge.org/piping.php',
			'//upload.wikimedia.org/wikipedia/commons/8/80/Ic_flip_48px.svg'
		);
		addBotLink(
			'پرکردن رده (با ربات رده‌همسنگ)',
			'ca-filling',
			'افزودن صفحه به رده به کمک ربات رده همسنگ',
			'ربات رده همسنگ شروع به کار کرد',
			'//rezabot.toolforge.org/fillcat.php',
			'//upload.wikimedia.org/wikipedia/commons/f/fb/Ic_archive_48px.svg'
		);
		addBotLink(
			'فهرست صفحات مورد نیاز',
			'ca-articleneeded',
			'تهیه فهرست صفحاتی که در این رده موجودند و در ویکی‌فا وجود ندارند',
			'ربات در حال تهیه فهرست صفحات در زیرصفحهٔ کاربری شماست.',
			'//rezabot.toolforge.org/neededarticle.php',
			'//upload.wikimedia.org/wikipedia/commons/f/fc/Ic_assignment_48px.svg'
		);
		if (mw.config.get('wgUserGroups').indexOf('autopatrolled') > -1 || mw.config.get('wgUserGroups').indexOf('sysop') > -1) {
			// ابزار انتقال رده فقط برای مدیران و گشت‌زن‌ها فعال شود
			importScript('MediaWiki:Gadget-CategoryMove.js');
		}
	}
	if (mw.config.get('wgNamespaceNumber') === 10) {
		// ابزار افزودن ناوباکس
		addBotLink(
			' افزودن ناوباکس',
			'ca-navebox',
			'افزودن الگوی ناوباکس به مقالات',
			'افزودن ناوباکس به مقالات آغاز شد، لطفاً کمی صبر کنید.',
			'//rezabot.toolforge.org/addnavbox.php',
			'//upload.wikimedia.org/wikipedia/commons/3/3f/Ic_add_circle_48px.svg'
		);
	}
	if (mw.config.get('wgNamespaceNumber') === 0) {
		// ابزار افزودن جعبه همسنگ
		// ابزار درجه‌بندی مقالات در بحث مقاله وپ:آفلاین
		addBotLink(
			' جعبه و نگارخانه',
			'ca-box',
			'افزودن جعبه اطلاعات و نگارخانه از ویکی‌پدیای انگلیسی',
			'شروع دریافت جعبه و نگارخانه، لطفاً کمی صبر کنید.',
			'//rezabot.toolforge.org/getbox.php',
			'//upload.wikimedia.org/wikipedia/commons/c/c9/Ic_crop_original_48px.svg'
		);
	   //ابزار رده همسنگ
		addBotLink(
			'رده همسنگ',
			'ca-articlefilling',
			'افزودن صفحه به رده به کمک ربات رده همسنگ',
			'ربات رده همسنگ شروع به کار کرد',
			'//rezabot.toolforge.org/fillcatArticle.php',
			'//upload.wikimedia.org/wikipedia/commons/f/fb/Ic_archive_48px.svg'
		);
	   //افزودن خصوصیت به آیتم ویکی‌داده 
		addBotLink(
			'به‌روز کردن آیتم ویکی‌داده',
			'ca-wikidataitem',
			'افزودن خصوصیت به آیتم ویکی‌داده و رده مقاله ویکی‌فا (فقط برای مقاله انسان)',
			'ربات به‌روز کردن آیتم ویکی‌داده شروع به کار کرد',
			'//rezabot.toolforge.org/wikidataitem.php',
			'//upload.wikimedia.org/wikipedia/commons/0/0d/Ic_recent_actors_48px.svg'
		);
		// ویکی‌سازی
		addBotLink(
			' ویکی‌سازی',
			'ca-wikify',
			'ابزاری رباتیک برای ویکی‌سازی متن مقاله‌ها بر پایهٔ عنوان مقالات موجود',
			'ربات ویکی‌سازی شروع به کار کرد لطفاً کمی صبر کنید.',
			'//rezabot.toolforge.org/wikifyer.php',
			'//upload.wikimedia.org/wikipedia/commons/a/a5/Ic_fullscreen_36px.svg'
		);
		// ابزار اصلاح منابع ناموجود
		if ($('#catlinks a[href="/wiki/%D8%B1%D8%AF%D9%87:%D8%B5%D9%81%D8%AD%D9%87%E2%80%8C%D9%87%D8%A7%DB%8C_%D8%A8%D8%A7_%DB%8C%D8%A7%D8%AF%DA%A9%D8%B1%D8%AF_%D8%AE%D8%B1%D8%A7%D8%A8_(%D9%81%D9%82%D8%AF%D8%A7%D9%86_%D9%85%D9%86%D8%A8%D8%B9)"]').length !== 0) {
			//فقط برای مقاله‌های عضو رده:صفحه‌های با یادکرد خراب (فقدان منبع)
			addBotLink(
				'منبع ناموجود',
				'ca-citaion',
				'ابزاری برای اصلاح منبع ناموجود بر پایهٔ ویکی‌پدیای انگلیسی',
				'اصلاح منبع ناموجود شروع شد، لطفاً کمی صبر کنید.',
				'//rezabot.toolforge.org/missedref.php',
				'//upload.wikimedia.org/wikipedia/commons/c/c7/Ic_comment_48px.svg'
			);
		}
		// ابزار گروه‌بندی ارجاع‌ها
		addBotLink(
			' گروه‌بندی ارجاع',
			'ca-ref-group',
			'گروه‌بندی ارجاع‌ها',
			'کد گروه‌بندی ارجاع‌ها شروع شد، لطفاً کمی صبر کنید.',
			'//rezabot.toolforge.org/groupingRef.php',
			'//upload.wikimedia.org/wikipedia/commons/c/ca/Ic_games_48px.svg'
		);
		// ابزار ربات زیباسازی
		/*
		addBotLink(
			' زیباسازی',
			'ca-cosmetic',
			'زیباسازی و ابرابزار',
			'زیباسازی و اعمال کد ابرابزار شروع شد، لطفاً کمی صبر کنید.',
			'//rezabot.toolforge.org/cosmetic.php'
		);*/
	}
	if (mw.config.get('wgNamespaceNumber') === 0 || mw.config.get('wgNamespaceNumber') === 1) {
		// ابزار درجه‌بندی مقالات در بحث مقاله وپ:آفلاین
		addBotLink(
			' ارزشیابی',
			'ca-eval',
			'ابزار ارزشیابی مقاله‌ها توسط ربات در بحث مقاله (وپ:آفلاین)',
			'شروع ارزشیابی، لطفاً کمی صبر کنید.',
			'//rezabot.toolforge.org/ranking.php',
			'//upload.wikimedia.org/wikipedia/commons/2/22/Ic_iso_48px.svg'
		);

		//ابزار رفع ابهام پیوند از صفحات
		mw.util.addPortletLink('p-cactions', 'https://dispenser.info.tm/~dispenser/cgi-bin/dablinks.py?page=' + encodeURI(mw.config.get('wgPageName'))+'&lang=fa', 'رفع ابهام پیوندها','P-disambig', 'رفع ابهام پیوندها', '');
	}
	// ابزار حذف پیوند به بیرون اسپم

	if ((mw.config.get('wgUserGroups').indexOf('autopatrolled') > -1 || mw.config.get('wgUserGroups').indexOf('sysop') > -1) && mw.config.get('wgNamespaceNumber') > -1) {
		// شرط برای کاربری که گشت خودکار دارد
		// ابزار حذف الگوهای ناموجود
		addBotLink(
			' الگوهای حذف‌شده',
			'ca-r-temp',
			'برداشتن الگوهای حذف‌شده از مقاله',
			'شروع حذف الگو از مقاله، لطفاً کمی صبر کنید.',
			'ptbot.toolforge.org/api/q_remove_templates.php',
			'//upload.wikimedia.org/wikipedia/commons/d/d2/Ic_remove_circle_48px.svg'
		);	
		/*
		// ابزار جایگزینی پیوند
		addBotLink(
			'جایگزینی پیوند',
			'ca-r-replace',
			'جایگزینی پیوند۱ با پیوند۲',
			'شروع جایگزینی پیوند، لطفاً کمی صبر کنید.',
			'rezabot.toolforge.org/replacelink.php',
			'//upload.wikimedia.org/wikipedia/commons/8/8f/Replace_icon.px.svg'
		);*/
	}
	if (mw.config.get('wgNamespaceNumber') === 6) {
		// ابزار نامزد کردن تصاویر برگزیده
		addBotLink2(
			'برگزیدن نگاره',
			'ca-eval',
			'ابزار نامزد کردن نگاره‌ها در وپ:گنب',
			'شروع نامزد کردن، لطفاً کمی صبر کنید.',
			'//dexbot.toolforge.org/anab.php',
			'//upload.wikimedia.org/wikipedia/commons/2/29/Ic_folder_special_48px.svg'
		);
	}
	// Permanent link
	if (mw.config.get('wgNamespaceNumber') > -1) {
		// Do not turn this into <a> element, it will break Visual Editor
		$('#t-permalink').append(' ', $('<span>', {
			style: "font-size:12px;color:#36c",
			html: "&#10012;"
		}).click(function (e) {
			prompt('پیوند پایدار', '[[Special:PermaLink/' + mw.config.get('wgRevisionId') + ']]');
		})).hover(function() {
			$(this).css('cursor', 'pointer');
			$(this).css('cursor', 'auto');
		});
	}
});