مدیاویکی:Gadget-friendlytalkback-2020.js: تفاوت میان نسخه‌ها

از ویکی حقوق
پرش به ناوبری پرش به جستجو
جز (۱ نسخه واردشده)
جز (۱ نسخه واردشده)
 
(یک نسخهٔ میانی ویرایش شده توسط یک کاربر دیگر نشان داده نشد)
خط ۶۹: خط ۶۹:
form.append({
form.append({
type: 'field',
type: 'field',
label: 'Work area',
label: 'محدودهٔ کار',
name: 'work_area'
name: 'work_area'
});
});
خط ۳۱۰: خط ۳۱۰:
},
},
// let's keep AN and its cousins at the top
// let's keep AN and its cousins at the top
/*
// Localized [AfC is now active on fawiki (وپ:مبا)]
'afchd': {
'afchd': {
label: 'WP:AFCHD (Articles for creation/Help desk)',
label: 'وپ:مکمبا (مقاله‌ها برای ایجاد/میز کمک)',
text: '{{subst:AFCHD/u|$SECTION}} ~~~~',
text: '{{جا:مکمبا/ک|$SECTION}} ~~~~',
editSummary: 'You have replies at the [[Wikipedia:AFCHD|Articles for Creation Help Desk]]'
editSummary: 'پاسخی برای درخواست کمک شما در [[ویکی‌پدیا:مکمبا|میز کمک مقاله‌ها برای ایجاد]] ارسال شده‌است'
},
},
/*
'coin': {
'coin': {
label: 'WP:COIN (Conflict of interest noticeboard)',
label: 'WP:COIN (Conflict of interest noticeboard)',
خط ۴۱۶: خط ۴۱۷:


var noticetext = Twinkle.talkback.getNoticeWikitext(tbtarget, page, section, message);
var noticetext = Twinkle.talkback.getNoticeWikitext(tbtarget, page, section, message);
form.previewer.beginRender(noticetext, 'User_talk:' + mw.config.get('wgRelevantUserName')); // Force wikitext/correct username
form.previewer.beginRender(noticetext, 'بحث_کاربر:' + mw.config.get('wgRelevantUserName')); // Force wikitext/correct username
};
};



نسخهٔ کنونی تا ‏۲۲ ژوئن ۲۰۲۱، ساعت ۲۱:۳۳

// <nowiki>


(function($) {


/*
 ****************************************
 *** friendlytalkback.js: Talkback module
 ****************************************
 * Mode of invocation:     Tab ("TB")
 * Active on:              Any page with relevant user name (userspace, contribs, etc.)
 * Config directives in:   FriendlyConfig
 */

Twinkle.talkback = function() {

	if (!mw.config.get('wgRelevantUserName')) {
		return;
	}

	Twinkle.addPortletLink(Twinkle.talkback.callback, 'بازبحث', 'friendly-talkback', 'گفتگوی آسان'); // localized
};

Twinkle.talkback.callback = function() {
	if (mw.config.get('wgRelevantUserName') === mw.config.get('wgUserName') && !confirm("اوضاع این قدر بد است که می‌خواهید با خودتان گفتگو کنید؟")) { // localized
		return;
	}

	var Window = new Morebits.simpleWindow(600, 350);
	Window.setTitle('بازبحث'); // localized
	Window.setScriptName('توینکل'); // localized
	Window.addFooterLink('دربارهٔ {{بازبحث}}', 'الگو:بازبحث'); //localized
	Window.addFooterLink('راهنمای توینکل', 'en:WP:TW/DOC#talkback'); //localized

	var form = new Morebits.quickForm(Twinkle.talkback.evaluate);

	form.append({ type: 'radio', name: 'tbtarget',
		list: [
			{
				label: 'بازبحث: صفحهٔ بحث من', //localized
				value: 'mytalk',
				checked: 'true'
			},
			{
				label: 'بازبحث: صفحهٔ بحث کاربر دیگر', //localized
				value: 'usertalk'
			},
			{
				label: 'بازبحث: صفحه‌ای دیگر', //localized
				value: 'other'
			},
			{
				label: '«لطفاً ببینید»', //localized
				value: 'see'
			},
			{
				label: 'آگاه‌سازی درخصوص تابلوی اعلانات', //localized
				value: 'notice'
			},
			{
				label: '«رایانامه دارید»', //localized
				value: 'mail'
			}
		],
		event: Twinkle.talkback.changeTarget
	});

	form.append({
		type: 'field',
		label: 'محدودهٔ کار',
		name: 'work_area'
	});

	var previewlink = document.createElement('a');
	$(previewlink).click(function() {
		Twinkle.talkback.preview(result);  // |result| is defined below
	});
	previewlink.style.cursor = 'pointer';
	previewlink.textContent = 'پیش‌نمایش'; // localized
	form.append({ type: 'div', id: 'talkbackpreview', label: [ previewlink ] });
	form.append({ type: 'div', id: 'friendlytalkback-previewbox', style: 'display: none' });

	form.append({ type: 'submit' });

	var result = form.render();
	Window.setContent(result);
	Window.display();
	result.previewer = new Morebits.wiki.preview($(result).find('div#friendlytalkback-previewbox').last()[0]);

	// We must init the
	var evt = document.createEvent('Event');
	evt.initEvent('change', true, true);
	result.tbtarget[0].dispatchEvent(evt);

	// Check whether the user has opted out from talkback
	var query = {
		action: 'query',
		prop: 'extlinks',
		titles: 'بحث کاربر:' + mw.config.get('wgRelevantUserName'), //localized
		elquery: 'userjs.invalid/noTalkback',
		ellimit: '1'
	};
	var wpapi = new Morebits.wiki.api('دریافت وضعیت استثنا از بازبحث', query, Twinkle.talkback.callback.optoutStatus); // localized
	wpapi.post();
};

Twinkle.talkback.optout = '';

Twinkle.talkback.callback.optoutStatus = function(apiobj) {
	var $el = $(apiobj.getXML()).find('el');
	if ($el.length) {
		Twinkle.talkback.optout = mw.config.get('wgRelevantUserName') + ' ترجیح می‌دهد بازبحث دریافت نکند'; // localized
		var url = $el.text();
		var reason = mw.util.getParamValue('reason', url);
		Twinkle.talkback.optout += reason ? ': ' + reason : '.';
	}
	$('#twinkle-talkback-optout-message').text(Twinkle.talkback.optout);
};

var prev_page = '';
var prev_section = '';
var prev_message = '';

Twinkle.talkback.changeTarget = function(e) {
	var value = e.target.values;
	var root = e.target.form;
	var old_area = Morebits.quickForm.getElements(root, 'work_area')[0];

	if (root.section) {
		prev_section = root.section.value;
	}
	if (root.message) {
		prev_message = root.message.value;
	}
	if (root.page) {
		prev_page = root.page.value;
	}

	var work_area = new Morebits.quickForm.element({
		type: 'field',
		label: 'اطلاعات بازبحث', // localized
		name: 'work_area'
	});

	root.previewer.closePreview();

	switch (value) {
		case 'mytalk':
			/* falls through */
		default:
			work_area.append({
				type: 'div',
				label: '',
				style: 'color: red',
				id: 'twinkle-talkback-optout-message'
			});
			work_area.append({
				type: 'input',
				name: 'section',
				label: 'عنوان بخش (اختیاری)', // localized
				tooltip: 'عنوان بخشی از صفحهٔ بحث شما که در آن برای کاربر پیام گذاشته‌اید. اگر چنین بخشی وجود ندارد این جعبه را خالی بگذارید.', // localized
				value: prev_section
			});
			break;

		case 'usertalk':
			work_area.append({
				type: 'div',
				label: '',
				style: 'color: red',
				id: 'twinkle-talkback-optout-message'
			});
			work_area.append({
				type: 'input',
				name: 'page',
				label: 'کاربر (اجباری)', // localized
				tooltip: 'نام کاربری که در صفحهٔ بحثش پیام گذاشته‌اید. این پارامتر اجباری است.', // localized
				value: prev_page,
				required: true
			});

			work_area.append({
				type: 'input',
				name: 'section',
				label: 'عنوان بخش (اختیاری)', // localized
				tooltip: 'عنوان بخشی از صفحه که در آن پیام گذاشته‌اید. اگر چنین بخشی وجود ندارد این پارامتر را خالی بگذارید.', // localized
				value: prev_section
			});
			break;

		case 'notice':
			var noticeboard = work_area.append({
				type: 'select',
				name: 'noticeboard',
				label: 'تابلوی اعلانات:', // localized
				event: function(e) {
					if (e.target.value === 'afchd') {
						Morebits.quickForm.overrideElementLabel(e.target.form.section, 'عنوان پیش‌نویس (بدون پیشوند «پیش‌نویس»): '); // localized
						Morebits.quickForm.setElementTooltipVisibility(e.target.form.section, false);
					} else {
						Morebits.quickForm.resetElementLabel(e.target.form.section);
						Morebits.quickForm.setElementTooltipVisibility(e.target.form.section, true);
					}
				}
			});

			$.each(Twinkle.talkback.noticeboards, function(value, data) {
				noticeboard.append({
					type: 'option',
					label: data.label,
					value: value,
					selected: !!data.defaultSelected
				});
			});

			work_area.append({
				type: 'input',
				name: 'section',
				label: 'ریسهٔ پیوندشده', // localized
				tooltip: 'عنوان ریسهٔ مرتبط در تابلوی اعلانات.', // localized
				value: prev_section
			});
			break;

		case 'other':
			work_area.append({
				type: 'div',
				label: '',
				style: 'color: red',
				id: 'twinkle-talkback-optout-message'
			});
			work_area.append({
				type: 'input',
				name: 'page',
				label: 'نام کامل صفحه (اجباری)', // localized
				tooltip: "نام کامل صفحه‌ای که در آن برای کاربر پیام گذاشته‌اید. نام را با پیشوند وارد کنید، مثلاً «ویکی‌پدیا:قهوه‌خانه/فنی». این پارامتر اجباری است.", // localized
				value: prev_page,
				required: true
			});

			work_area.append({
				type: 'input',
				name: 'section',
				label: 'عنوان بخش (اختیاری)', // localized
				tooltip: 'عنوان بخشی از صفحه که در آن پیام گذاشته‌اید. اگر چنین بخشی وجود ندارد این پارامتر را خالی بگذارید.', // localized
				value: prev_section
			});
			break;

		case 'mail':
			work_area.append({
				type: 'input',
				name: 'section',
				label: 'موضوع رایانامه (اختیاری)', // localized
				tooltip: 'عبارتی که به عنوان موضوع ایمیل ذکر کردید.' // localized
			});
			break;

		case 'see':
			work_area.append({
				type: 'input',
				name: 'page',
				label: 'نام کامل صفحه (اجباری)', // localized
				tooltip: "نام کامل صفحه‌ای که در آن برای کاربر پیام گذاشته‌اید. نام را با پیشوند وارد کنید، مثلاً «ویکی‌پدیا:قهوه‌خانه/فنی». این پارامتر اجباری است.", // localized
				value: prev_page,
				required: true
			});
			work_area.append({
				type: 'input',
				name: 'section',
				label: 'عنوان بخش (اختیاری)', // localized
				tooltip: 'عنوان بخشی از صفحه که در آن پیام گذاشته‌اید. اگر چنین بخشی وجود ندارد این پارامتر را خالی بگذارید.', // localized
				value: prev_section
			});
			break;
	}

	if (value !== 'notice') {
		work_area.append({ type: 'textarea', label: 'پیام اضافه (اختیاری):', name: 'message', tooltip: 'پیام اضافه‌ای که می‌خواهید زیر الگوی بازبحث نوشته شود. امضای شما به طور خودکار به انتهای پیام اضافه خواهد شد.' }); // localized
	}

	work_area = work_area.render();
	root.replaceChild(work_area, old_area);
	if (root.message) {
		root.message.value = prev_message;
	}

	$('#twinkle-talkback-optout-message').text(Twinkle.talkback.optout);
};

Twinkle.talkback.noticeboards = {
	'an': {
		label: "وپ:تام (تابلوی اعلانات مدیران)", // localized
		text: '== ' + Twinkle.getPref('adminNoticeHeading') + ' ==\n' +
		"{{subst:آگاه‌سازی تام|بخش=$SECTION}} ~~~~", // localized
		editSummary: 'آگاه‌سازی از بحثی که در [[ویکی‌پدیا:تابلوی اعلانات مدیران]] مطرح شده‌است' // localized
	},
	'an3': {
		label: "وپ:ن۳ب (تابلوی اعلانات جنگ ویرایشی)", // localized
		text: '{{subst:آگاه‌سازی تام۳|$SECTION}} ~~~~', // localized
		editSummary: "آگاه‌سازی از شکایتی که در [[ویکی‌پدیا:تابلوی اعلانات مدیران/نقض ۳ برگردان]] مطرح شده‌است." // localized
	},
	'ani': {
		label: "شکایت در وپ:تام (تابلوی اعلانات مدیران)", // localized
		text: '== ' + Twinkle.getPref('adminNoticeHeading') + ' ==\n' +
		"{{subst:آگاه‌سازی شکایت در تام|بخش=$SECTION}} ~~~~", // localized
		editSummary: 'آگاه‌سازی از شکایتی که در [[ویکی‌پدیا:تابلوی اعلانات مدیران]] مطرح شده‌است', // localized
		defaultSelected: true
	},
	// let's keep AN and its cousins at the top
	// Localized [AfC is now active on fawiki (وپ:مبا)]
	'afchd': {
		label: 'وپ:مکمبا (مقاله‌ها برای ایجاد/میز کمک)',
		text: '{{جا:مکمبا/ک|$SECTION}} ~~~~',
		editSummary: 'پاسخی برای درخواست کمک شما در [[ویکی‌پدیا:مکمبا|میز کمک مقاله‌ها برای ایجاد]] ارسال شده‌است'
	},
	/*
	'coin': {
		label: 'WP:COIN (Conflict of interest noticeboard)',
		text: '{{subst:Coin-notice|thread=$SECTION}} ~~~~',
		editSummary: 'Notice of discussion at [[Wikipedia:Conflict of interest noticeboard]]'
	},
	*/ // localized [removed]
	'drn': {
		label: 'وپ:تاحا (تابلوی اعلانات حل اختلاف)', // localized
		text: '{{subst:آگاه‌سازی تاحا|بخش=$SECTION}} ~~~~', // localized
		editSummary: 'آگاه‌سازی از بحثی در [[ویکی‌پدیا:تابلوی اعلانات حل اختلاف]]' // localized
	}/*,
	'effp': {
		label: 'WP:EFFP/R (Edit filter false positive report)',
		text: '{{EFFPReply|1=$SECTION|2=~~~~}}',
		editSummary: 'You have replies to your [[Wikipedia:Edit filter/False positives/Reports|edit filter false positive report]]'
	},
	'hd': {
		label: 'WP:HD (Help desk)',
		text: '== Your question at the Help desk ==\n' + '{{helpdeskreply|1=$SECTION|ts=~~~~~}}',
		editSummary: 'You have replies at the [[Wikipedia:Help desk|Wikipedia help desk]]'
	},
	'th': {
		label: 'WP:THQ (Teahouse question forum)',
		text: "== Teahouse talkback: you've got messages! ==\n{{WP:Teahouse/Teahouse talkback|WP:Teahouse/Questions|$SECTION|ts=~~~~}}",
		editSummary: 'You have replies at the [[Wikipedia:Teahouse/Questions|Teahouse question board]]'
	},
	'otrs': {
		label: 'WP:OTRS/N (OTRS noticeboard)',
		text: '{{OTRSreply|1=$SECTION|2=~~~~}}',
		editSummary: 'You have replies at the [[Wikipedia:OTRS noticeboard|OTRS noticeboard]]'
	}
	*/ // localized [removed]
};

Twinkle.talkback.evaluate = function(e) {
	var form = e.target;
	var tbtarget = form.getChecked('tbtarget')[0];
	var page, message;
	var section = form.section.value;

	var editSummary;
	if (tbtarget === 'notice') {
		page = form.noticeboard.value;
		editSummary = Twinkle.talkback.noticeboards[page].editSummary;
	} else {

		// usertalk, other, see
		page = form.page ? form.page.value : mw.config.get('wgUserName');
		if (form.message) {
			message = form.message.value.trim();
		}

		if (tbtarget === 'mail') {
			editSummary = "اعلان: شما رایانامه دریافت کردید"; // localized
		} else if (tbtarget === 'see') {
			editSummary = 'لطفا بحث در [[:' + page + (section ? '#' + section : '') + ']] را ببینید'; // localized
		} else {  // tbtarget one of mytalk, usertalk, other
			editSummary = 'بازبحث ([[:'; // localized
			if (tbtarget !== 'other' && !/^\s*user talk:/i.test(page)) {
				editSummary += 'بحث کاربر:'; // localized
			}
			editSummary += page + (section ? '#' + section : '') + ']])';
		}
	}
	var text = '\n\n' + Twinkle.talkback.getNoticeWikitext(tbtarget, page, section, message);

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(form);

	var fullUserTalkPageName = mw.config.get('wgFormattedNamespaces')[mw.config.get('wgNamespaceIds').user_talk] + ':' + mw.config.get('wgRelevantUserName');

	Morebits.wiki.actionCompleted.redirect = fullUserTalkPageName;
	Morebits.wiki.actionCompleted.notice = 'بازبحث کامل شد؛ بارگیری مجدد صفحه بحث در چند ثانیه'; // localized

	var talkpage = new Morebits.wiki.page(fullUserTalkPageName, 'اضافه کردن بازبحث'); // localized

	talkpage.setAppendText(text);
	talkpage.setEditSummary(editSummary + Twinkle.getPref('summaryAd'));
	talkpage.setCreateOption('recreate');
	talkpage.setMinorEdit(Twinkle.getPref('markTalkbackAsMinor'));
	talkpage.setFollowRedirect(true);
	talkpage.append();
};

Twinkle.talkback.preview = function(form) {
	var tbtarget = form.getChecked('tbtarget')[0];
	var section = form.section.value;
	var page, message;

	if (tbtarget === 'notice') {
		page = form.noticeboard.value;
	} else {
		// usertalk, other, see
		page = form.page ? form.page.value : mw.config.get('wgUserName');
		if (form.message) {
			message = form.message.value.trim();
		}
	}

	var noticetext = Twinkle.talkback.getNoticeWikitext(tbtarget, page, section, message);
	form.previewer.beginRender(noticetext, 'بحث_کاربر:' + mw.config.get('wgRelevantUserName')); // Force wikitext/correct username
};

Twinkle.talkback.getNoticeWikitext = function(tbtarget, page, section, message) {
	var text;
	if (tbtarget === 'notice') {
		text = Morebits.string.safeReplace(Twinkle.talkback.noticeboards[page].text, '$SECTION', section);
	} else if (tbtarget === 'see') {
		text = '{{جا:دعوت|مکان=' + page + (section ? '#' + section : '') + '|بیشتر=' + message.trim() + '}}'; // lacalized 
	} else {
		text = '==';
		if (tbtarget === 'mail') {
			text += Twinkle.getPref('mailHeading') + '==\n' + "{{رایانامه|subject=" + section; // localized
		} else {  // tbtarget one of mytalk, usertalk, other
			// clean talkback heading: strip section header markers that were erroneously suggested in the documentation
			text += Twinkle.getPref('talkbackHeading').replace(/^\s*=+\s*(.*?)\s*=+$\s*/, '$1') +
				'==\n' + '{{بازبحث|' + page + (section ? '|' + section : ''); // localized
		}
		text += '|ts=~~~~~}}';

		if (message) {
			text += '\n' + message + '  ~~~~';
		} else if (Twinkle.getPref('insertTalkbackSignature')) {
			text += '\n~~~~';
		}
	}
	return text;
};

})(jQuery);


// </nowiki>