User:Reza1615/properties.js

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
( function ( mw, $ ) {

	var i18nData = {
		'en': {
			'PropertyTool-box-title': 'Array Properties',
			'PropertyTool-box-warning': 'This tool only sets a request for a bot, and only after a review would it be done',
			'PropertyTool-box-lang': 'Language: ',
			'PropertyTool-box-source': 'Source: Input Category or Template that you want to select items by.',
			'PropertyTool-box-category': 'Category of wiki pages (items): ',
			'PropertyTool-box-template': 'Template which wiki pages (items) use: ',
			'PropertyTool-box-pn': 'Property which should be copied: ',
			'PropertyTool-box-item': 'The item which the property Should be Linked to: ',
			'PropertyTool-box-ignoreprefix': 'Ignore prefix word: ',
			'PropertyTool-box-ignore': 'Ignore article(s): ',
			'PropertyTool-box-create': 'Create: ',
			'PropertyTool-box-recursion': 'Recursion: ',
                        'PropertyTool-success':'Request is Reported successfully!',
                        'PropertyTool-Error':'Unknown Error!',
                        'PropertyTool-warning-sitebox':'You should Input prefix of a Wikipedia language site!',
                        'PropertyTool-warning-sourcebox':'You should Input Category or Template that you want to refer!',
                        'PropertyTool-warning-pnbox':'You should Input correct Property Link!',
                        'PropertyTool-warning-itembox':'You should Input correct Item Link!',
			'PropertyTool-send': 'Send request',
			'PropertyTool-reset': 'Reset'
		},
		'fa': {
			'PropertyTool-box-title': 'تکثیر خصوصیات',
			'PropertyTool-box-warning': 'این ابزار فقط برای درخواست است. پس از بررسی درخواست توسط مدیران، ربات آن را اجرا خواهد کرد!',
			'PropertyTool-box-lang': 'زبان: ',
			'PropertyTool-box-source': 'منبع:به عنوان منبع رده یا الگوی مورد نظرتان را وارد کنید.',
			'PropertyTool-box-category': 'رده‌ای که صفحات ویکی (آیتم‌ها) در آن هستند:  ',
			'PropertyTool-box-template': 'الگویی که صفحات ویکی (آیتم‌ها) از آن استفاده می‌کنند: ',
			'PropertyTool-box-pn': 'خصوصیتی که باید تکثیر شود: ',
			'PropertyTool-box-item': 'آیتمی که خصوصیت باید به آن پیوند دهد: ',
			'PropertyTool-box-ignoreprefix': 'استثنای ابتدای عبارت: ',
			'PropertyTool-box-ignore': 'استثناها: ',
			'PropertyTool-box-create': 'ایجاد: ',
			'PropertyTool-box-recursion': 'تعداد زیر رده: ',
                        'PropertyTool-success':'درخواست با موفقیت انجام شد!',
                        'PropertyTool-Error':'خطای نامعلوم!',
                        'PropertyTool-warning-sitebox':'باید کد ویکی‌پدیای مورد نظرتان را وارد کنید‍‌',
                        'PropertyTool-warning-sourcebox':'باید رده یا الگوی مورد نظرتان را وارد کنید!',
                        'PropertyTool-warning-pnbox':'باید پیوند درست به خصوصیت مورد نظرتان را وارد کنید!',
                        'PropertyTool-warning-itembox':'باید پیوند درست به آیتم خصوصیت مورد نظرتان را وارد کنید!',
			'PropertyTool-send': 'درخواست تکثیر',
			'PropertyTool-reset': 'خالی کردن فرم'
		},
                'ar': {
                        'PropertyTool-box-title': 'نسخ الخاصیات',
                        'PropertyTool-box-warning': 'هذه الأداة لإرسال الطلب فقط. ستقوم البوتات بتنفيذ الطلب بعد تأييد الإداريون !',
                        'PropertyTool-box-lang': 'اللغة: ',
                        'PropertyTool-box-source': 'المصدر : إدخل القالب أو التصنيف الذي تريد تحديد الصفحاب حسبه.',
                        'PropertyTool-box-category': 'التصنيف الذي يحتوي على الصفحات:  ',
                        'PropertyTool-box-template': 'القالب الذي يحتوي على الصفحات: ',
                        'PropertyTool-box-pn': 'الخاصية التي يجب نسخها: ',
                        'PropertyTool-box-item': 'الصفة التي ينبغي ربط الخاصية إليها: ',
                        'PropertyTool-box-ignoreprefix': 'إستثناء بداية الكلمة: ',
                        'PropertyTool-box-ignore': 'الإستثناءات: ',
                        'PropertyTool-box-create': 'إنشاء: ',
                        'PropertyTool-box-recursion': 'عدد الصفحات: ',
                        'PropertyTool-success':'تم ارسال الطلب بنجاح!',
                        'PropertyTool-Error':'خطأ غير معروف!',
                        'PropertyTool-warning-sitebox':'يجب عليك إدخال الرمز الخاص بلغتك (ar للعربية)‍‌',
                        'PropertyTool-warning-sourcebox':'يجب عليك إدخال التصنيف أو القالب الذي تريد أن تشير اليه!',
                        'PropertyTool-warning-pnbox':'يجب عليك إدخال رابط الصحيح للخاصية!',
                        'PropertyTool-warning-itembox':'يجب عليك إدخال رابط الصحيح للصفة!',
                        'PropertyTool-send': 'ارسال الطلب',
                        'PropertyTool-reset': 'تفريغ الإستمارة'
                }
	};
	i18nData.no = i18nData.nb;

	var parts = mw.user.options.get( 'language' ).split("-");
	if( parts[1]=='hans' || parts[1]=='cn' || parts[1]=='sg' || parts[1]=='my' ) {
		var lang = 'zh-hans';
	} else if ( parts[1]=='hant' || parts[1]=='hk' || parts[1]=='tw' || parts[1]=='mo' ) {
		var lang = 'zh-hant';
	} else if ( i18nData[parts[0]] ) {
		var lang = parts[0];
	} else {
		var lang = 'en';
	}

	/**
	 * Return the localized version of a message
	 */
	function i18n( key ) {
		if( i18nData[ lang ][ key ] ) {
			return i18nData[ lang ][ key ];
		} else {
			return i18nData[ 'en' ][ key ];
		}
	}

	/**
	 * Create the dialog and add a link in toolBox
	 */

	function init() {
		mw.loader.using( ['jquery.ui'], function() {
			var formFind = '<div id="PropertyTool" title="' + i18n( 'PropertyTool-box-title' ) + '"><form>';
			formFind += '<p>' + i18n( 'PropertyTool-box-warning' ) + '</p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-lang' ) +' <input type="text" id="langbox" size="9" value="'+lang +'"/></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-source' ) + '</p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-category' ) + ' <input type="text" id="catbox" size="20" value="Category:" /></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-template' ) + ' <input type="text" id="tempbox" size="20" value="Template:"/></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-pn' ) + ' <input type="text" id="pnbox" size="5" value="P"/></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-item' ) + ' <input type="text" id="itembox" size="8" value="Q"/></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-ignoreprefix' ) + ' <input type="text" id="prefixbox" size="9" value=""/></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-ignore' ) + ' <input type="text" id="ignobox1" size="9" value=""/>,<input type="text" id="ignobox2" size="9" value=""/>,<input type="text" id="ignobox3" size="9" value=""/></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-create' ) + ' <input type="text" id="createbox" size="4" value=""/></p>';
			formFind += '<p>' + i18n( 'PropertyTool-box-recursion' ) + ' <input type="text" id="recurbox" size="3" value=""/></p>';
			formFind += '</form></div>';
			var messageFind = $( formFind ).appendTo( '#content' );
			messageFind.dialog( {
				autoOpen: false,
				modal: true,
				width: 600,
				buttons: [ {
					id: 'PropertyTool-button-import',
					text: i18n( 'PropertyTool-send' ),
					click: function() {
						work();
					}
				     }/*,
                                        {
					id: 'PropertyTool-button-reset',
					text: i18n( 'PropertyTool-reset' ),
					click: function() {
					       document.getElementById("pnbox").value='P';
                                               document.getElementById("itembox").value='Q';
                                               document.getElementById("prefixbox").value=lang;
                                               document.getElementById("ignobox1").value='';
                                               document.getElementById("ignobox2").value='';
                                               document.getElementById("ignobox3").value='';
                                               document.getElementById("createbox").value='';
                                               document.getElementById("recurbox").value='';
					}*/]
			} );

			var PorpertyToolLink = mw.util.addPortletLink( 'p-tb', '#', i18n( 'PropertyTool-box-title' ), 't-PropertyTool', i18n( 'PropertyTool-box-title' ) );
			$(PorpertyToolLink).click( show );
		} );
	}

	/**
	 * Show the dialog
	 */
	function show() {
			formFind = $( '#PropertyTool-lang' );
			$( 'div#PropertyTool' ).dialog( 'open' );
	}

	function work() {
            var langbox=document.getElementById("langbox").value;
            var catbox=document.getElementById("catbox").value;
            var tempbox=document.getElementById("tempbox").value;
            if (catbox!="Category:" && catbox){
                      var sourcebox=catbox;
                      sourcebox=sourcebox.replace(/Category\:/g ,'');
                      sourcebox=sourcebox.replace(/category\:/g ,'');
                      sourcebox='Category:'+sourcebox
            };
            if (tempbox!='Template:' && tempbox){
                      var sourcebox=tempbox;
                      sourcebox=sourcebox.replace(/Template\:/g ,'');
                      sourcebox=sourcebox.replace(/template\:/g ,'');
                      sourcebox='Template:'+sourcebox
            };
            var pnbox=document.getElementById("pnbox").value;
            var itembox=document.getElementById("itembox").value;
            var RequsterUser=mw.config.get('wgUserName');
            var prefixbox=document.getElementById("prefixbox").value;
            var ignobox1=document.getElementById("ignobox1").value;
            if (document.getElementById("ignobox2").value){ignobox1+=','+document.getElementById("ignobox2").value};
            if (document.getElementById("ignobox3").value){ignobox1+=','+document.getElementById("ignobox3").value};
            var createbox=document.getElementById("createbox").value;
            var recurbox=document.getElementById("recurbox").value;
            if (!(langbox)){
                alert(i18n( 'PropertyTool-warning-sitebox' ));
                return
            };
            if (!(sourcebox)){
                alert(i18n( 'PropertyTool-warning-sourcebox' ));
                return
            };
            if (!(pnbox!='P'&&pnbox!='')){
                alert(i18n( 'PropertyTool-warning-pnbox' ))
                return
            };
            if (!(itembox!='Q'&&itembox!='')){
                alert(i18n( 'PropertyTool-warning-itembox' ))
                return
            };
            var requestTemplate='\n{{User:Legobot/properties.js/row|'+langbox+'|'+sourcebox+'|'+pnbox+'|'+itembox+'|'+RequsterUser
            if ((prefixbox)){
                requestTemplate=requestTemplate+'|ignoreprefix='+prefixbox
            };
            if ((ignobox1)){
                requestTemplate=requestTemplate+'|ignore='+ignobox1
            };
            if ((createbox)){
                requestTemplate=requestTemplate+'|create='+createbox
            };
            if ((recurbox)){
                requestTemplate=requestTemplate+'|recursion='+recurbox
            };
            requestTemplate=requestTemplate+'}}';

            //prompt(requestTemplate);
 	    addRequest(
			requestTemplate,
			function() {
				mw.notify( i18n( 'PropertyTool-success' ) );
			},
			'Add a property Array Request'
		);
            $( 'div#PropertyTool' ).dialog( 'close' );
	}

	function onError() {
            mw.notify( i18n( 'PropertyTool-Error' ) );
	}

	/**
	 * Add new error request.
	 */
	function addRequest( entity, success, reason ) {
		var title = 'User_talk:Legobot/properties.js/requests';
		$.ajax( {
			type: 'POST',
  			url: mw.util.wikiScript( 'api' ),
			data: {
				'format': 'json',
				'action': 'edit',
				'title': title,
				'summary': reason,
				'appendtext': entity ,
				'token': mw.user.tokens.get( 'csrfToken' )
			},
			success: function( data ) {
					if( data.error && data.error.info ) {
						onError();
					} else {
						success();
					}
			},
			error: function(jqXHR, textStatus, errorThrown) {
				onError();
			}
		});
	}
	$( document ).ready( init );
} ( mediaWiki, jQuery ) );