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

از ایران پدیا
پرش به ناوبری پرش به جستجو

نکته: پس از انتشار ممکن است برای دیدن تغییرات نیاز باشد که حافظهٔ نهانی مرورگر خود را پاک کنید.

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
// <nowiki> // DO NOT REMOVE THIS LINE EVER
/*jslint browser: true, white: true*/
/*global mediaWiki, jQuery*/
/*!
 * @author User:Ebraminio, User:Yamaha5
 */
(function ($, mw) {
	'use strict';

	function createPage(title, text, summary, callback) {
		return new mw.Api().post({
			action: 'edit',
			title: title,
			text: text,
			summary: summary,
			createonly: '',
			bot: '',
			token: mw.user.tokens.get('editToken')
		});
	}

	$.when($.ready, mw.loader.using('oojs-ui')).then(function () {
		// mw.util.addCSS('#t-redirectmaker { font-weight: bold; }');
		$(mw.util.addPortletLink('p-tb', '#', 'تغییرمسیر\u200cساز', 't-redirectmaker', 'ایجاد تغییرمسیر به صورت خودکار')).click(function (e) {
			e.preventDefault();
			
			var namespaces = {
				0: "",
				2: "کاربر:",
				4: ["وپ:", "ویکی\u200cپدیا:"],
				6: "پرونده:",
				8: "مدیاویکی:",
				10: "الگو:",
				12: "راهنما:",
				14: "رده:",
				100: "درگاه:",
				102: "کتاب:",
				446: "برنامه آموزشی:",
				828: "پودمان:"
			};
	
			var append = "@";
			var buttonText = "@";
			var ns = mw.config.get("wgNamespaceNumber");
			if (typeof namespaces[ns] === "object") {
				append = namespaces[ns][0] + "@" + namespaces[ns][1] + mw.config.get("wgTitle");
				buttonText = namespaces[ns][0] + "@اینجا";
			} else if (typeof namespaces[ns] === "string") {
				append = namespaces[ns] + "@" + namespaces[ns] + mw.config.get("wgTitle");
				buttonText = namespaces[ns] + "@اینجا";
			}
	
			var redirectMakerInput = $('<textarea>', {
				style: 'width: 100%; background-color: white; resize:vertical; padding-left: 50px;',
				placeholder: 'مبدأ@مقصد',
				rows: 7
			});
	
			var form = $('<div>').append(
				$('<div style="width: 40em">تغییرمسیرها را در خط\u200cهای جداگانه در جعبهٔ زیر وارد کنید:</div>'),
				$('<span>', {
					text: buttonText,
					style: "position: absolute; left: 1em;",
					class: "mw-ui-button mw-ui-constructive"
				}).click(function () {
					var value = redirectMakerInput.val().trim();
					if (value !== '')
						value = value + '\n';
					value = value + append;
					redirectMakerInput.val(value).focus();
				}),
				redirectMakerInput
			);
	
			// Hack
			mw.util.addCSS('.oo-ui-window-frame { width: 700px!important; }');

			OO.ui.confirm(form).then(function (confirmed) {
				if (!confirmed) {
					form.remove();
					return;
				}
				
				var requests = redirectMakerInput.val();
				if (requests === '') {
					mw.notify('لطفاً فرم درخواست را به درستی پر کنید');
					return;
				}

				requests.split('\n').map(function (x) {
					return function () {
						var req = x.split('@');
						if (req.length !== 2) {
							return;
						}
						var from = req[0].trim();
						var to = req[1].trim();
						return createPage(
							from,
							'#تغییرمسیر [[' + to + ']]',
							'ایجاد تغییرمسیر برای [[' + to + ']] (ابزار تغییرمسیرساز)'
						).then(function () {
							mw.notify('ایجاد ' + to + ' با موفقیت انجام شد.');
						}, function () {
							// revive the chain
							return $.Deferred().resolve();
						});
					};
				}).reduce(function (defer, job) {
					return defer.then(job);
				}, $.Deferred().resolve()).then(function () {
					mw.notify('ایجاد تغییرمسیرها\u200cها به پایان رسید، لطفاً بررسی کنید.');
					window.location = mw.util.getUrl('ویژه:مشارکت‌ها/' + mw.config.get('wgUserName'));
				});
			});

		});
	});
}(jQuery, mediaWiki));