مدیاویکی:Gadget-friendlyshared-2020.js

از ویکی‌پدیا، دانشنامهٔ آزاد

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

// <nowiki>


(function($) { // eslint-disable-line no-unused-vars


/*
 ****************************************
 *** friendlyshared.js: Shared IP tagging module
 ****************************************
 * Mode of invocation:     Tab ("Shared")
 * Active on:              Existing IP user talk pages
 */

Twinkle.shared = function friendlyshared() {
	if (mw.config.get('wgNamespaceNumber') === 3 && mw.util.isIPAddress(mw.config.get('wgTitle'))) {
		var username = mw.config.get('wgRelevantUserName');
		Twinkle.addPortletLink(function() {
			Twinkle.shared.callback(username);
		}, 'آی‌پی اشتراکی', 'friendly-shared', 'برچسب‌زدن آی‌پی‌های اشتراکی'); // localized
	}
};

Twinkle.shared.callback = function friendlysharedCallback() {
	var Window = new Morebits.simpleWindow(600, 420);
	Window.setTitle('برچسب زدن نشانی‌های آی‌پی اشتراکی'); // localized
	Window.setScriptName('توینکل'); // localized
	Window.addFooterLink('راهنمای توینکل', 'en:WP:TW/DOC#shared'); // localiezd

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

	var div = form.append({
		type: 'div',
		id: 'sharedip-templatelist',
		className: 'morebits-scrollbox'
	}
	);
	div.append({ type: 'header', label: 'الگوهای نشانی آی‌پی اشتراکی' }); // localized
	div.append({ type: 'radio', name: 'shared', list: Twinkle.shared.standardList,
		event: function(e) {
			Twinkle.shared.callback.change_shared(e);
			e.stopPropagation();
		}
	});

	var org = form.append({ type: 'field', label: 'سایر جزئیات (اختیاری) را پر کنید و روی دکمهٔ پایین فرم کلیک کنید' }); // localized
	org.append({
		type: 'input',
		name: 'organization',
		label: 'مالک/گردانندهٔ نشانی آی‌پی', // localized
		disabled: true,
		tooltip: 'می‌توانید به صورت اختیاری نام سازمانی را که مالک/گردانندهٔ نشانی آی‌پی است، وارد کنید. در صورت لزوم می‌توانید از ویکی‌کد استفاده کنید.' // localized
	}
	);
	org.append({
		type: 'input',
		name: 'host',
		label: 'نام میزبان (اختیاری)', // localized
		disabled: true,
		tooltip: 'نام میزبان (نظیر proxy.example.com) می‌تواند به صورت اختیاری در اینجا وارد شود و با الگو پیوند خواهد یافت.' // localized
	}
	);
	org.append({
		type: 'input',
		name: 'contact',
		label: 'اطلاعات تماس (فقط در صورت درخواست)', // localized
		disabled: true,
		tooltip: 'می‌توانید به طور اختیاری برخی از اطلاعات تماس را برای آن سازمان وارد کنید. از این پارامتر فقط در صورتی استفاده کنید که سازمان به‌طور خاص درخواست کرده است که آن را اضافه کنید. در صورت لزوم می‌توانید از ویکی‌کد استفاده کنید.' // localized
	}
	);

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

	var result = form.render();
	Window.setContent(result);
	Window.display();
};

Twinkle.shared.standardList = [
	{
		label: '{{آی‌پی مشترک}}: الگوی استاندارد نشانی آی‌پی مشترک', // localized
		value: 'آی‌پی مشترک', // localized
		tooltip: 'الگوی صفحه بحث کاربر آی‌پی که اطلاعات مفیدی را برای کاربران آی‌پی و کسانی که مایل به هشدار به آن‌ها یا بستن یا تحریم آن‌ها هستند نشان می‌دهد' // localized
	},
	{
		label: '{{آی‌پی مشترک آموزشی}}: الگوی اصلاح‌شده نشانی آی‌پی مشترک برای مؤسسات آموزشی', // localized
		value: 'آی‌پی مشترک آموزشی' // localized
	},
	{
		label: '{{آی‌پی مشترک شرکتی}}: الگوی اصلاح‌شده نشانی آی‌پی مشترک برای مشاغل', // localized
		value: 'آی‌پی مشترک آموزشی' // localized
	},
	{
		label: '{{نشانی آی‌پی مشترک (عمومی)}}: الگوی اصلاح‌شده نشانی آی‌پی مشترک برای پایانه‌های عمومی', // localized
		value: 'آی‌پی مشترک (عمومی)' // localized
	},
	{
		label: '{{آی‌پی مشترک دولتی}}: الگوی اصلاح‌شده نشانی آی‌پی مشترک برای آژانس‌های دولتی یا دفترهای خدماتی', // localized
		value: 'آی‌پی مشترک دولتی' // localized
	},
	{
		label: '{{آی‌پی پویا}}: الگوی اصلاح‌شده نشانی آی‌پی مشترک برای سازمان‌هایی با آدرس‌دهی پویا', // localized
		value: 'آی‌پی پویا' // localized
	},
	{
		label: '{{آی‌پی ایستا}}: الگوی اصلاح‌شده نشانی آی‌پی مشترک برای آدرس‌های آی‌پی ثابت', // localized
		value: 'آی‌پی ایستا' // localized
	},
	{
		label: '{{آی‌اس‌پی}}: الگوی اصلاح‌شده نشانی آی‌پی مشترک برای سازمان‌های ISP (به طور خاص پراکسی)', // localized
		value: 'آی‌اس‌پی' // localized
	},
	{
		label: '{{آی‌پی تلفن همراه}}:الگوی اصلاح‌شده نشانی آی‌پی مشترک برای شرکت‌های تلفن همراه و مشتریان آنها', // localized
		value: 'آی‌پی تلفن همراه' // localized
	},
	{
		label: '{{Whois}}: الگوی آدرس‌های آی‌پی که نیاز به نظارت دارند، اما معلوم نیست که ایستا، پویا یا مشترک هستند', // localized
		value: 'Whois'
	}
];

Twinkle.shared.callback.change_shared = function friendlysharedCallbackChangeShared(e) {
	e.target.form.contact.disabled = e.target.value !== 'آی‌پی مشترک آموزشی';  // only supported by {{Shared IP edu}} // localized
	e.target.form.organization.disabled = false;
	e.target.form.host.disabled = e.target.value === 'Whois';  // host= not supported by {{Whois}}
};

Twinkle.shared.callbacks = {
	main: function(pageobj) {
		var params = pageobj.getCallbackParameters();
		var pageText = pageobj.getPageText();
		var found = false;
		var text = '{{';

		for (var i = 0; i < Twinkle.shared.standardList.length; i++) {
			var tagRe = new RegExp('(\\{\\{' + Twinkle.shared.standardList[i].value + '(\\||\\}\\}))', 'im');
			if (tagRe.exec(pageText)) {
				Morebits.status.warn('Info', 'الگوی {{' + Twinkle.shared.standardList[i].value + '}} روی صفحهٔ بحث پیدا شد؛ نصب الگو متوقف شد.'); // localized
				found = true;
			}
		}

		if (found) {
			return;
		}

		Morebits.status.info('Info', 'الگوی نشانی آی‌پی مشترک را در بالای صفحه بحث کاربر اضافه می‌کند.'); // localized
		text += params.value + '|' + params.organization;
		if (params.value === 'Shared IP edu' && params.contact !== '') {
			text += '|' + params.contact;
		}
		if (params.value !== 'Whois' && params.host !== '') {
			text += '|host=' + params.host;
		}
		text += '}}\n\n';

		var summaryText = 'افزودن الگوی {{[[الگو:' + params.value + '|' + params.value + ']]}}.';
		pageobj.setPageText(text + pageText);
		pageobj.setEditSummary(summaryText + Twinkle.getPref('summaryAd'));
		pageobj.setMinorEdit(Twinkle.getPref('markSharedIPAsMinor'));
		pageobj.setCreateOption('recreate');
		pageobj.save();
	}
};

Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {
	var shared = e.target.getChecked('shared');
	if (!shared || shared.length <= 0) {
		alert('برای استفاده باید یک الگوی نشانی آی‌پی مشترک انتخاب کنید!'); // localized
		return;
	}

	var value = shared[0];

	if (e.target.organization.value === '') {
		alert('برای الگوی {{' + value + '}} باید نام سازمان را وارد کنید!'); // localized
		return;
	}

	var params = {
		value: value,
		organization: e.target.organization.value,
		host: e.target.host.value,
		contact: e.target.contact.value
	};

	Morebits.simpleWindow.setButtonsEnabled(false);
	Morebits.status.init(e.target);

	Morebits.wiki.actionCompleted.redirect = mw.config.get('wgPageName');
	Morebits.wiki.actionCompleted.notice = 'برچسب زدن کامل شد، بارگیری صفحه بحث ظرف چند ثانیهٔ دیگر'; // localized

	var wikipedia_page = new Morebits.wiki.page(mw.config.get('wgPageName'), 'اصلاح صفحهٔ بحث کاربر'); // localized
	wikipedia_page.setFollowRedirect(true);
	wikipedia_page.setCallbackParameters(params);
	wikipedia_page.load(Twinkle.shared.callbacks.main);
};
})(jQuery);


// </nowiki>