User:संतोष दहिवळ/स्वयंचलित जोडणी.js

From Wikidata
Jump to navigation Jump to search

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.
//
var desclist = {

		'फ्रान्सचे विभाग': {
                        'af': 'Franse departement',
                        'als': 'Département z Frànkrich',
                        'an': 'departemento frances',
                        'ar': 'إقليم فرنسي',
                        'ast': 'departamentu de Francia',
                        'bar': 'Französisches Département',
                        'bg': 'Департамент на Франция',
                        'ca': 'departament de França',
                        'co': 'dipartimentu di a Francia',
                        'cs': 'francouzský departement',
                        'cy': 'département Ffrainc',
                        'da': 'fransk departement',
                        'de': 'französisches Département',
                        'en': 'French department',
                        'eo': 'Franca departemento',
                        'es': 'departamento francés',
                        'et': 'Prantsusmaa departemang',
                        'fr': 'département français',
                        'frp': 'dèpartement francês',
                        'fy': 'Frânsk departemint',
                        'gl': 'departamento francés',
                        'hu': 'megye Franciaországban',
                        'id': 'sebuah departemen Perancis',
                        'io': 'departmento di Francia',
                        'is': 'sýsla í Frakklandi',
                        'it': 'dipartimento francese',
                        'ja': 'フランスの県',
                        'jv': 'Departemen ing Prancis',
                        'kg': 'kizunga ya Fwalansa',
                        'ko': '프랑스의 주',
                        'la': 'praefectura Franciae',
                        'lad': 'departamento franses',
                        'lb': 'franséischt Departement',
                        'lmo': 'dipartiment fransés',
                        'lt': 'Prancūzijos departamentas',
                        'lv': 'Francijas departaments',
                        'mr': 'फ्रान्सचा विभाग',
                        'ms': 'jabatan di Perancis',
                        'nds': 'Bezirke vun Frankriek',
                        'nl': 'Frans departement',
                        'nn': 'franske departement',
                        'no': 'fransk departement',
                        'oc': 'departament francés',
                        'pam': 'Departamentu ning France',
                        'pl': 'francuski departament',
                        'pt': 'departamento da França',
                        'ro': 'departament Franței',
                        'ru': 'департамент Франции',
                        'sco': 'French depairtment',
                        'se': 'Frankriikka departemeantta',
                        'simple': 'French department',
                        'sl': 'departement vo Francúzsku',
                        'sv': 'franskt departement',
                        'sw': 'département ya Ufaransa',
                        'th': 'จังหวัดในประเทศฝรั่งเศส',
                        'vec': 'dipartimento fransexe',
                        'vi': 'tỉnh của Pháp',
                        'vls': 'Frans departement',
                        'vo': 'Ziläk in Fransän',
                        'zea': 'Frans departement',
                        'zh': '法国省份',
                        'zh-hans': '法国省份',
                        'zh-hant': '法國省份',
                        'zh-min-nan': 'Hoat-kok ê chi̍t khóan',
                        
		}
};
/////////////////////////LISTES/////////////////////////

( function ( mw, $ ) {

	/*
	** Return item Number.
	*/
	var itemId = mw.config.get( 'wbEntityId' );
	if ( !itemId ) {
		return;
	}

	importScript( 'User:' + mw.config.get( 'wgUserName' ) + '/autoEditLists.js' );

	/*
	** Localized message.
	*/
	var transData = {
		'hi': {
			'box-title': 'स्वयंचलित जोडणी',
			'box-cancel': 'बंद',
			'box-send': 'अद्ययावत',
			'sended': 'पाठवा',
			'labels': 'लेबल',
			'descriptions': 'वर्णन',
			'parameters': 'घटक',
			'list': 'यादी',
			'prefix': 'उपसर्ग तसेच ठेवा ',
			'none': 'काही नाही',
			'warning-autocheck': 'Update automatically labels',
			'warning-message': '<ul><li>Labels checkbox : Update automatically the label of all language thanks to the interwiki site links.</li><li>Descriptions checkbox : Update automatically the description thanks to a list that you can custom (<a href="//www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">link</a>).</li></ul>',
			// DO NOT TRANSLATE. ///// If your reading direction is left to right, /////
			// if not translate by ('floatRight': 'left','floatLeft': 'right') /////////
			'floatRight': 'right',
			'floatLeft': 'left'
			// DO NOT TRANSLATE. ///////////////////////////////////////////////////////
		},
		'mr': {
			'box-title': 'स्वयंचलित जोडणी',
			'box-cancel': 'बंद',
			'box-send': 'अद्ययावत',
			'sended': 'पाठवा',
			'labels': 'लेबल',
			'descriptions': 'वर्णन',
			'parameters': 'घटक',
			'list': 'यादी',
			'prefix': 'उपसर्ग तसेच ठेवा ',
			'none': 'काही नाही',
			'warning-autocheck': 'Update automatically labels',
			'warning-message': '<ul><li>Labels checkbox : Update automatically the label of all language thanks to the interwiki site links.</li><li>Descriptions checkbox : Update automatically the description thanks to a list that you can custom (<a href="//www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">link</a>).</li></ul>',
			// DO NOT TRANSLATE. ///// If your reading direction is left to right, /////
			// if not translate by ('floatRight': 'left','floatLeft': 'right') /////////
			'floatRight': 'right',
			'floatLeft': 'left'
			// DO NOT TRANSLATE. ///////////////////////////////////////////////////////
		}
	};

	/*
	** Check if main language can be translated.
	*/
	var lang = mw.config.get( 'wgUserLanguage' );
	if ( ! transData.hasOwnProperty( lang ) ) {
		lang = 'en';
	}

	/*
	** Return localized message.
	*/
	function translate( key ) {
		if ( transData[ lang ].hasOwnProperty( key ) ) {
			return transData[ lang ][ key ];
		} else {
			return transData[ 'en' ][ key ];
		}
	}

	/**
	 * Return the language code from the ID of the Wiki
	 */
	function getLanguageCodeFromWikiId( wiki ) {
		if ( wiki === 'alswiki' ) {
			return 'gsw';
		} else if ( wiki === 'be_x_oldwiki' ) {
			return 'be-tarask';
		} else if ( wiki === 'simplewiki' ) {
			return 'en';
		}
		var splited = wiki.match( /^(.*)wiki$/i );
		if ( !splited[1] ) {
			return '';
		} else {
			return splited[1].replace( /_/g, '-' );
		}
	}

	/*
	** Dialog and link
	*/
	function labelLister() {
		var nb, selectButton = "";
		for ( nb in desclist ) {
			if ( desclist[nb][mw.user.options.get( 'language' )] ) {
				selectButton += '<option value="' + nb + '">' + desclist[nb][mw.user.options.get( 'language' )] + ' (' + nb + ')</option>';
			} else if ( desclist[nb]['en'] ) {
				selectButton += '<option value="' + nb + '">' + desclist[nb]['en'] + ' (' + nb + ')</option>';
			} else {
				selectButton += '<option value="' + nb + '">' + nb + '</option>';
			}
		}
		desclist['none'] = {};
		mw.loader.using( ['jquery.ui'], function () {
			var formFind, messageFind;
			formFind = '<div id="autoEdit" title=""><form id="editForm"><div id="autoEdit-main">' + translate( 'warning-message' ) + '<fieldset><legend>' + translate( 'box-send' ) + ' :</legend><input type="checkbox" id="autoEdit-label"/><label for="autoEdit-label">' + translate( 'labels' ) + '</label>&nbsp;&nbsp;&nbsp;<input type="checkbox" id="autoEdit-desc"/><label for="autoEdit-desc">' + translate( 'descriptions' ) + '</label></fieldset><fieldset><legend>' + translate( 'parameters' ) + '</legend><label for="autoEdit-liste">' + translate( 'list' ) + ' :</label><select id="autoEdit-list" style="width:90%"><option value="null" selected="selected">' + translate( 'none' ) + '</option>' + selectButton;
			formFind += '</select><br/><br/><hr style="clear:both"/><input type="checkbox" id="autoEdit-prefix"><label for="autoEdit-prefix">' + translate( 'prefix' ) + '</label></fieldset></div><div id="autoEdit-success" style="width:100%"></div></form></div>';
			if ( document.getElementById( 'content' ) ) {
				messageFind = $( formFind ).appendTo( '#content' );
			} else {
				messageFind = $( formFind ).appendTo( '#mw_content' );
			}
			messageFind.dialog( {
				title: '<img id="autoEdit-logo" src="//upload.wikimedia.org/wikipedia/commons/2/28/Symbol_arrow_up.svg" style="color:black;width:20px">' + translate( 'box-title' ),
				autoOpen: false,
				modal: true,
				width: 500,
				//height: 355,
				show: 'blind',
				hide: 'blind',
				buttons: [ {
					text: '[X] ' + translate( 'labels' ),
					id: 'autoCheckLabels',
					title: translate( 'warning-autocheck' ),
					click: function () {
						document.getElementById( 'autoEdit-label' ).checked = true;
						document.getElementById( 'autoEdit-main' ).style.display = 'none';
						var loader = '<img style="margin-left:45%" id="autoEdit-loader" src="//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif"/><br/>';
						$( '#autoEdit-success' ).append( loader );
						labelListing();
					}
				},{
					text: translate( 'box-cancel' ),
					click: function () {
						$( this ).dialog( 'close' );
					}
				},{
					text: translate( 'box-send' ),
					click: function () {
						document.getElementById( 'autoEdit-main' ).style.display = 'none';
						var loader = '<img style="margin-left:45%" id="autoEdit-loader" src="//upload.wikimedia.org/wikipedia/commons/d/de/Ajax-loader.gif"/><br/>';
						$( '#autoEdit-success' ).append( loader );
						labelListing();
					}
				} ]
			} );
			//ADD PlUG-IN TO LABELLISTER
			var plugin = '<a style="text-align:center;font-size:0.7em" href="#" class="PGautoedit" alt="' + translate( 'box-title' ) + '"><span style="font-color:green">' + translate( 'box-title' ) + '</span></a>';
			$( '#labelLister-plugin' ).append( plugin );
			$( '.PGautoedit' ).click( function () {
				$( '#autoEdit-success' ).empty();
				document.getElementById( 'autoEdit-main' ).style.display = 'inline';
				$( '.ui-dialog-buttonset' ).css( 'width', '100%' );
				$( '.ui-button' ).css( 'float', translate( 'floatRight' ) );
				$( 'div#autoEdit' ).dialog( 'open' );
				$( '#autoCheckLabels' ).css( 'float', translate( 'floatLeft' ) );
			} );
			var portletLink = mw.util.addPortletLink( 'p-tb', '#', translate( 'box-title' ), 't-autoEdit', translate( 'box-title' ) );
			$( portletLink ).click( function () {
				$( '#autoEdit-success' ).empty();
				document.getElementById( 'autoEdit-main' ).style.display = 'inline';
				$( '.ui-dialog-buttonset' ).css( 'width', '100%' );
				$( '.ui-button' ).css( 'float', translate( 'floatRight' ) );
				$( 'div#autoEdit' ).dialog( 'open' );
				$( '#autoCheckLabels' ).css( 'float', translate( 'floatLeft' ) );
				return false;
			} );
		} );
	}

	/*
	** List label, description and sitelinks
	*/
	function labelListing() {
		$.ajax( {
			url: mw.util.wikiScript( 'api' ),
			data: {
				'format': 'json',
				'action': 'wbgetentities',
				'ids': itemId,
				'props': 'labels|descriptions|sitelinks'
			}
		} )
		.done( function ( data ) {
			var id, sitelink, entity = data.entities[itemId], iwiki = {}, inputSelect = $( '#autoEdit-list' ).val();
			for ( id in entity.sitelinks ) {
				sitelink = entity.sitelinks[id];
				if( !document.getElementById( 'autoEdit-prefix' ).checked ){
					sitelink.title = sitelink.title.replace( /^(.*:)*/g, "" );
				}
				iwiki[getLanguageCodeFromWikiId( id )] = sitelink.title.replace( /\(.*\)/g, "" ); //Delete Disambiguation
				if ( id === 'enwiki' ) {
					iwiki['en-ca'] = sitelink.title.replace( /\(.*\)/g, "" );
					iwiki['en-gb'] = sitelink.title.replace( /\(.*\)/g, "" );
				} else if ( id === 'zh_yuewiki' ) {
					iwiki['yue'] = sitelink.title.replace( /\(.*\)/g, "" );
				} else if ( id === 'ptwiki' ) {
					iwiki['pt-br'] = sitelink.title.replace( /\(.*\)/g, "" );
				} else if ( id === 'dewiki' ) {
					iwiki['de'] = sitelink.title.replace( / \(.*?\)$/, "" );
					// iwiki['de-formal'] = sitelink.title.replace( /\(.*\)/g, "" ); Disabled per talk page oldid=29709890
					if ( iwiki['de'].indexOf( "ß" ) !== -1 ) {
						iwiki['de-ch'] = iwiki['de'].replace( /ß/g, "ss" );
					}
				} else if ( id === 'fawiki' ) {
					iwiki['fa'] = sitelink.title;//In Farsi () are important
				} else if ( id === 'nowiki' ) {
					iwiki['nb'] = sitelink.title.replace( / \(.*?\)$/, "" );
				}
			}
			for ( id in entity.labels ) {
				//if ( iwiki[id] ) {
					try {
					delete iwiki[id];
					} catch ( err ) {
					}
				//}
			}
			for ( id in entity.descriptions ) {
				//if ( desclist[inputSelect][id] ) {
					try {
					delete desclist[inputSelect][id];
					} catch ( err ) {
					}
				//}
			}
			sendItem( iwiki, desclist[inputSelect] );
		} )
		.fail( function () {
			mw.notify( 'API Error', { title: 'autoEdit.js :', tag: 'autoEdit' } );
		} );
	}

	/*
	** Send the input value on the edit menu
	*/
	function setItem( item, summary, summarynotify ) {
		$.ajax( {
			type: 'POST',
			url: mw.util.wikiScript( 'api' ),
			data: {
				'format': 'json',
				'action': 'wbeditentity',
				'id': itemId,
				'token': mw.user.tokens.get( 'csrfToken' ),
				'data': item,
				'summary': '[[MediaWiki talk:Gadget-autoEdit.js|autoEdit]] ' + summary,
				'exclude': 'pageid|ns|title|lastrevid|touched|sitelinks|aliases'
			}
		} )
		.done( function ( data ) {
			if ( data.success === 1 ) {
				mw.notify( translate( 'sended' ) + summarynotify, { title: 'autoEdit.js :', tag: 'autoEdit' } );
				$( '#autoEdit' ).dialog( 'close' );
			} else {
				$( '#autoEdit-success' ).empty();
				mw.notify( 'Error : ' + $.toJSON( data ), { title: 'autoEdit.js :', tag: 'autoEdit' } );
				$( '#autoEdit-success' ).append( 'Error : ' );
				$( '#autoEdit-success' ).append( $.toJSON( data ) );
			}
		} )
		.fail( function ( data ) {
			$( '#autoEdit' ).append( $.toJSON( data.success ) );
		} );
	}

	/*
	** Control how to send an item
	*/
	function sendItem( lbl, desc ) {
		var nb;
		var inputLabel = document.getElementById( 'autoEdit-label' ).checked;
		var inputDesc = document.getElementById( 'autoEdit-desc' ).checked;
		var inputSelect = $( '#autoEdit-list' ).val();
		var sommaire = "Update ";
		var summarynotify = " → ";
		//CREATE LABEL SAVE
		var jsonLabel = [];
		if ( inputLabel ) {
			for ( nb in lbl ) {
				if ( lbl.hasOwnProperty( nb ) ) {
					jsonLabel.push( {
						language: nb,
						value: lbl[nb]
					} );
				}
			}
			sommaire += "Labels ";
			summarynotify += translate( 'labels' ) + " ";
		}
		//CREATE DESCRIPTION SAVE
		var jsonDesc = [];
		if ( inputDesc ) {
			for ( nb in desc ) {
				if ( desc.hasOwnProperty( nb ) ) {
					jsonDesc.push( {
						language: nb,
						value: desc[nb]
					} );
				}
			}
			sommaire += "Descriptions (" + inputSelect + ")";
			summarynotify += translate( 'descriptions' ) + " (" + inputSelect + ")";
		}
		setItem( $.toJSON( { 'labels': jsonLabel, 'descriptions': jsonDesc } ), sommaire, summarynotify );
	}

	$( document ).ready( labelLister );
} ( mediaWiki, jQuery ) );