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

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

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

// <nowiki>


(function($) {


/*
 ****************************************
 *** friendlyshared.js: Shared IP tagging module
 ****************************************
 * Mode of invocation:     Tab ("Shared")
 * Active on:              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', 'برچسب زدن آی‌پی مشترک');
	}
};

Twinkle.shared.callback = function friendlysharedCallback() {
	var Window = new Morebits.simpleWindow(600, 450);
	Window.setTitle('برچسب زدن نشانی‌های آی‌پی مشترک');
	Window.setScriptName('توینکل');
	Window.addFooterLink('ترجیحات آی‌پی مشترک', 'وپ:توینکل/ترجیحات#shared');
	Window.addFooterLink('راهنمای توینکل', 'وپ:توینکل/توضیحات#مشترک');
	Window.addFooterLink('ارائهٔ بازخورد', 'بوپ:توینکل');

	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: 'الگوهای نشانی آی‌پی مشترک' });
	div.append({ type: 'radio', name: 'template', list: Twinkle.shared.standardList,
		event: function(e) {
			Twinkle.shared.callback.change_shared(e);
			e.stopPropagation();
		}
	});

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

	var previewlink = document.createElement('a');
	$(previewlink).click(function() {
		Twinkle.shared.preview(result);
	});
	previewlink.style.cursor = 'pointer';
	previewlink.textContent = 'پیش‌نمایش';
	form.append({ type: 'div', id: 'sharedpreview', label: [ previewlink ] });
	form.append({ type: 'submit' });

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

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

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

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

		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('اطلاعات', '{{' + Twinkle.shared.standardList[i].value + '}} از پیش در صفحهٔ بحث کاربر موجود است… در حال صرف نظر');
				found = true;
			}
		}

		if (found) {
			return;
		}

		Morebits.status.info('اطلاعات', 'الگوی نشانی آی‌پی مشترک به بالای صفحهٔ بحث کاربر افزوده خواهد شد.');
		var text = Twinkle.shared.getTemplateWikitext(params);

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

Twinkle.shared.preview = function(form) {
	var input = Morebits.quickForm.getInputData(form);
	if (input.template) {
		var previewDialog = new Morebits.simpleWindow(700, 500);
		previewDialog.setTitle('پیش‌نمایش الگوی آی‌پی مشترک');
		previewDialog.setScriptName('افزودن الگوی آی‌پی مشترک');
		previewDialog.setModality(true);

		var previewdiv = document.createElement('div');
		previewdiv.style.marginRight = previewdiv.style.marginLeft = '0.5em';
		previewdiv.style.fontSize = 'small';
		previewDialog.setContent(previewdiv);

		var previewer = new Morebits.wiki.preview(previewdiv);
		previewer.beginRender(Twinkle.shared.getTemplateWikitext(input), mw.config.get('wgPageName'));

		var submit = document.createElement('input');
		submit.setAttribute('type', 'submit');
		submit.setAttribute('value', 'Close');
		previewDialog.addContent(submit);

		previewDialog.display();

		$(submit).click(function() {
			previewDialog.close();
		});
	}
};

Twinkle.shared.getTemplateWikitext = function(input) {
	var text = '{{' + input.template + '|' + input.organization;
	if (input.contact) {
		text += '|' + input.contact;
	}
	if (input.host) {
		text += '|میزبان=' + input.host;
	}
	text += '}}\n\n';
	return text;
};

Twinkle.shared.callback.evaluate = function friendlysharedCallbackEvaluate(e) {
	var params = Morebits.quickForm.getInputData(e.target);
	if (!params.template) {
		alert('باید یک الگوی نشانی آی‌پی مشترک را برای استفاده انتخاب کنید!');
		return;
	}
	if (!params.organization) {
		alert('برای الگوی {{' + params.template + '}} باید نام یک سازمان را وارد کنید!');
		return;
	}

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

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

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

Twinkle.addInitCallback(Twinkle.shared, 'shared');
})(jQuery);


// </nowiki>