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

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

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

  • فایرفاکس / سافاری: کلید Shift را نگه دارید و روی دکمهٔ Reload کلیک کنید، یا کلید‌های Ctrl-F5 یا Ctrl-R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-R)
  • گوگل کروم: کلیدهای Ctrl+Shift+R را با هم فشار دهید (در رایانه‌های اپل مکینتاش کلید‌های ⌘-Shift-R)
  • اینترنت اکسپلورر/ Edge: کلید Ctrl را نگه‌دارید و روی دکمهٔ Refresh کلیک کنید، یا کلید‌های Ctrl-F5 را با هم فشار دهید
  • اپرا: Ctrl-F5 را بفشارید.
//<nowiki>


(function($){


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

Twinkle.shared = function friendlyshared() {
	if( mw.config.get('wgNamespaceNumber') === 3 && Morebits.isIPAddress(mw.config.get('wgTitle')) ) {
		var username = mw.config.get('wgTitle').split( '/' )[0].replace( /\"/, "\\\""); // only first part before any slashes
		Twinkle.addPortletLink( function(){ Twinkle.shared.callback(username); }, "آی‌پی مشترک", "friendly-shared", "برچسب‌زدن آی‌پی مشترک" );
	}
};

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

	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: 'shared', 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: 'شما می‌توانید به طور اختیاری جزئیاتی برای تماس با سازمان وارد کنید. از این پارامتر اگر فقط سازمان به طور ویژه درخواست کرده‌است که اضافه شود استفاده کنید. شما می‌توانید از ویکی‌متن اگر لازم است استفاده کنید.'
		}
	);
	
	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;
		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 + '}} از پیش در صفحهٔ بحث کاربر وجود دارد... در حال لغوکردن' );
				found = true;
			}
		}

		if( found ) {
			return;
		}

		Morebits.status.info( 'Info', 'الگوی نشانی آی‌پی مشترک را به بالای صفحهٔ بحث کاربر می‌افزاید' );
		text += params.value + '|' + params.organization;
		if( params.value === 'آی‌پی مشترک آموزشی' && params.contact !== '') {
			text += '|' + params.contact;
		}
		if( params.value !== 'هوایز' && 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.getFriendlyPref('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( 'شما باید یک الگوی آی‌پی مشترک را برای استفاده انتخاب کنید!' );
		return;
	}

	var value = shared[0];

	if( e.target.organization.value === '') {
		alert( 'شما باید یک سازمان برای الگوی {{' + value + '}} وارد کنید!' );
		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 = "برچسب‌زدن کامل شد، در حال بارگیری دوباره صفحهٔ بحث در چند ثانیه آینده";

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


//</nowiki>