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

ویکی‌پدیادان، آچیق بیلیک‌لیک‌دن

' 'قئید:' یازدیق‌دان سونرا دییشیک‌لیک‌لری گؤرمک اوچون براوزئرینیزین کئش یادداشیندا تمیزلمه‌نیز لازیم اولا بیلر.

  • 'فایرفاکس / سافاری:Shift دویمه‌سینه باسین "یئنی‌دن یوکله"-ا داخیل اولون یا دا Ctrl-F5 یا Ctrl-R ائدین (ماج اوچون ⌘-R).
  • 'گووگل کروم:'Ctrl+Shift+R باسین. (ماج اوچون ⌘-Shift-R)
  • 'اینترنت ایکسپئلور: کلید Ctrl باسین یئنی‌لئ 'یئ داخیل اولون یا دا Ctrl-F5 ائدین.
  • 'اوپئرا:' آلت‌لری → سئچیملر 'دن اؤنبئللیغی Tools → Preferences تمیزلیین.
/**
 * Immediate delete and move files for Image-reviewer group
 * 
 * Author: User:Ebraminio
 */
(function ($, mw) {
	'use strict';

	if (mw.config.get('wgNamespaceNumber') !== 6 ||
			mw.config.get('wgAction') !== 'view') {
		return;
	}
	
	function imageDelete(dialog, file, reason, extra) {
		$.ajax({
			url: '//tools.wmflabs.org/fawikiauto/',
			data: {
				action: 'requestDeletion',
				file: file,
				reason: reason,
				extra: extra
			},
			dataType: 'json',
			xhrFields: { withCredentials: true }
		}).then(function (data) {
			if (data === null) {
				$('#imageReviewerDeleteDialog').text('خطای اساسی');
				return;
			}
			if (data.error) {
				$('#imageReviewerDeleteDialog').text('خطای ابزار: ' + data.error);
				return;
			}
			if (data.url) {
				$('#imageReviewerDeleteDialog').html($('<a>', {
					style: 'font-size: 200%',
					href: '//' + data.url,
					text: 'خود را به ابزار بشناسانید!',
					target: '_blank'
				}).click(function () {
					$(dialog).dialog('close');
				}));
				return;
			}
			$(dialog).dialog('close');
			mw.notify('با تشکر، حذف با موفقیت انجام شد!');
			location.href = location.href;
		}, function (e) {
			$('#imageReviewerDeleteDialog').text('خطای ربات: ' + e);
		});
	}

	var deleteReasons = {
		F8: 'تصویر تکراری با تصویری در انبار (پیوند تصویر انبار را در زیر وارد کنید)',
		F1: 'تکراری (پیوند تصویر دیگر را در زیر وارد کنید)',
		F2: 'تصویر خراب',
		F4: 'حق تکثیر یا منبع نامعلوم',
		F5: 'تصویر منصفانه یتیم',
		F9: 'تصویر ناقض حق تکثیر (پیوند مستقیم تصویر را در زیر وارد کنید)'
	};

	function deleteDialog(e) {
		e.preventDefault();
		mw.util.addCSS("#imageReviewerDeleteDialogMain * { font-family: Tahoma, 'Iranian Sans', 'DejaVu Sans', 'Noto Sans', 'Droid Arabic Kufi', sans-serif !important; } ");
			
		$('<div id="imageReviewerDeleteDialog"><select style="width: 100%;" id="imageReviewerDeleteSelect">' +
				$.map(deleteReasons, function (desc, reason) { return '<option value="' + reason + '">' + desc + '</option>'; }).join('\n') +
			'</select><br /><input id="deleteReasonAdditional" style="width: 70%" placeholder="توضیح اضافی در صورت نیاز" /></div>'
			).dialog({
			title: 'حذف رباتیک تصویر (آزمایشی)',
			width: '40%',
			open: function () {
				var that = $(this);
				$.ajax({
					url: '//tools.wmflabs.org/fawikiauto/?action=identify',
					dataType: 'json',
					xhrFields: { withCredentials: true }
				}).then(function (data) {
					if (data.url) {
						$('#imageReviewerDeleteDialog').html($('<a>', {
							style: 'font-size: 200%',
							href: '//' + data.url,
							text: 'خود را به ابزار بشناسانید!',
							target: '_blank'
						}).click(function () {
							that.dialog('close');
						}));
						return;
					}
				});
				$("#deleteReasonAdditional").val($('.mw-imagepage-duplicates a[href^="//commons"]:first()').text());
			},
			buttons: {
				'درخواست حذف': function () {
					$("#imageReviewerDeleteDialogMain .ui-dialog-buttonpane").hide();
					imageDelete(
						this,
						mw.config.get('wgTitle'),
						$('#imageReviewerDeleteSelect').val(),
						$('#deleteReasonAdditional').val()
					);
					
					$("#imageReviewerDeleteDialogMain .ui-dialog-buttonpane").hide();
					$('#imageReviewerDeleteDialog').html($('<center>').append($.createSpinner({
						size: 'large',
						type: 'block'
					})));
				}
			},
			close: function () {
				$(this).remove();
			}
		}).parent().prop('id', 'imageReviewerDeleteDialogMain');
	}
	
	var moveReasons = {
		M1: 'درخواست بارگذار',
		M2: 'تغییر نام‌های کاملاً بی‌معنی به نام‌های مناسب، بر طبق آن‌چه تصویر نشان می‌دهد',
		M3: 'تصحیح نام‌های گمراه‌کننده به نام‌های صحیحشان',
		M4: 'تغییر نام‌های گونه‌های زیست‌شناسی به نام‌های علمی دوبخشی',
		M5: 'تصحیح اشتباهات آشکار در نام پرونده‌ها',
		M6: 'هماهنگ کردن نام پرونده‌های مجموعه‌ای از تصاویر',
		M7: 'ابهام‌زدایی پرونده‌ها با نام‌های بیش از حد مشابه',
		M8: 'حذف نام‌های تحقیرآمیز، توهین‌آمیز یا بی‌ادبانه که برای توصیف پرونده مناسب نیستند',
		other: 'سایر دلایل'
	};
	
	// Token could be retrieved from mw.user.tokens but currently it doesn't have csrf explicitly
	var csrfToken;
	function getCsrfToken() {
		return new mw.Api().post({
			action: 'query',
			meta: 'tokens',
			format: 'json'
		}).then(function (data) {
			csrfToken = data.query.tokens.csrftoken;
		});
	}
	
	function moveFile(from, to, reason) {
		return new mw.Api().post({
			reason: reason,
			action: 'move',
			from: from,
			to: to,
			token: csrfToken,
			movetalk: '',
			format: 'json'
		});
	}
	
	// Image-reviewers doesn't have move without redirect right so doing it in another pass
	function deleteRedirect(title, reason) {
		return new mw.Api().post({
			action: 'delete',
			title: title,
			reason: reason,
			token: csrfToken
		});
	}
	
	function moveDialog(e) {
		e.preventDefault();
		mw.util.addCSS("#imageReviewerMoveDialogMain * { font-family: Tahoma, 'Iranian Sans', 'DejaVu Sans', 'Noto Sans', 'Droid Arabic Kufi', sans-serif !important; } ");
			
		$('<div id="imageReviewerMoveDialog">' +
				'<div>نام جدید: <input id="newFileMove" style="width: 70%" placeholder="نام جدید برای پرونده" /></div><br>' +
				'<div>دلیل:<br><select style="width: 100%;" id="imageReviewerMoveSelect">' +
					$.map(moveReasons, function (desc, reason) { return '<option value="' + reason + '">' + desc + '</option>'; }).join('\n') +
				'</select></div>' +
				'<div><input id="moveReason" style="width: 70%" placeholder="توضیح اضافی در صورت نیاز" /></div><br>' +
				'<div><label><input type="checkbox" checked="checked" id="moveBacklinks"> انتقال استفاده‌های در مقاله‌ها</label></div>' +
				'<div><label><input type="checkbox" id="moveDelete">حذف تغییر مسیر پس از انتقال</label></div><br>' +
				'<div>* اگر نام جدید پرونده‌ای در ویکی‌انبار است بهتر است از ابزار حذف استفاده کنید.</div>' +
				'</div>').dialog({
			title: 'انتقال خودکار',
			width: '40%',
			open: function () {
				$("#newFileMove").val(mw.config.get('wgTitle'));
			},
			buttons: { 'انتقال': function () {
				var that = $(this);
				$("#imageReviewerMoveDialogMain .ui-dialog-buttonpane").hide();
				$('#imageReviewerMoveDialog *').hide();
				$('#imageReviewerMoveDialog').append($('<center>').append($.createSpinner({
					size: 'large',
					type: 'block'
				})).append('<div>', { id: 'movestatus' }));
				var reason = $('#moveReason').val();
				if ($('#imageReviewerMoveSelect').val() !== 'other') {
					reason = moveReasons[$('#imageReviewerMoveSelect').val()];
					if ($('#moveReason').val() !== '') {
						reason = reason + ': ' + $('#moveReason').val();
					}
				}
				var newName = $('#newFileMove').val().replace(/^(File:|پرونده:|Image:|تصویر:)/g, '');
				$('#movestatus').text('گرفتن توکن');
				getCsrfToken().then(function () {
					$('#movestatus').text('انتقال پرونده');
					return moveFile('پرونده:' + mw.config.get('wgTitle'), 'پرونده:' + newName, reason);
				}).then(function () {
					if ($("#moveBacklinks").val() !== "on") { return; }
					$('#movestatus').text('ویرایش صفحه‌های استفاده‌شده');
					return mw.libs.globalReplace(
						mw.config.get('wgTitle'),
						newName,
						'تغییر نام',
						reason
					);
				}).then(function () {
					if ($("#moveDelete").val() !== "on") { return; }
					$('#movestatus').text('حذف تغییرمسیر');
					return deleteRedirect('پرونده:' + mw.config.get('wgTitle'), reason);
				}).then(function () {
					that.dialog('close');
					mw.notify('انتقال موفقیت‌آمیز بود، ویرایش‌هایتان را بررسی کنید.');
					location.href = mw.util.getUrl('ویژه:مشارکت‌ها/' + mw.config.get('wgUserName'));
				}, function () {
					that.dialog('close');
					mw.notify('انتقال به دلایلی موفقیت‌آمیر نبود.');
					location.href = mw.util.getUrl('ویژه:مشارکت‌ها/' + mw.config.get('wgUserName'));
				});
			}
		}, close: function () {
			$(this).remove();
		} }).parent().prop('id', 'imageReviewerMoveDialogMain');
	}

	$.when($.ready, mw.loader.using(['jquery.ui', 'jquery.spinner', 'ext.gadget.libGlobalReplace'])).then(function () {
		if (mw.config.get('wgNamespaceNumber') !== 6 ||
				mw.config.get('wgAction') !== 'view' ||
				$('#ca-view-foreign, #mw-imagepage-nofile').length !== 0) {
			return;
		}
		$('#ca-imagedelete, #ca-imagemove, #ca-move').remove();
		$(mw.util.addPortletLink('p-cactions', '#', 'حذف رباتیک', 'ca-imagedelete', 'درخواست حذف خودکار تصویر، ویژهٔ بازبینان تصاویر و مدیران'))
			.click(deleteDialog);
		$(mw.util.addPortletLink('p-cactions', '#', 'انتقال خودکار', 'ca-imagemove', 'انتقال خودکار')).click(moveDialog);
	});
}(jQuery, mediaWiki));