User:Magalhães/autoEdit.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.
/**********************************************************************************
***********************************************************************************
**                                 _        ______    _ _ _                      **
**                                | |      |  ____|  | (_) |                     **
**                      __ _ _   _| |_ ___ | |__   __| |_| |_                    **
**                     / _` | | | | __/ _ \|  __| / _` | | __|                   **
**                    | (_| | |_| | || (_) | |___| (_| | | |_                    **
**                     \__,_|\__,_|\__\___/|______\__,_|_|\__|  v1.1             **
**                                                                               **
** ----------------------------------------------------------------------------- **
**  To instal :                                                                  **
**   Add to your common.js [[Special:MyPage/common.js]],                         **
**   importScript( 'User:Jitrixis/autoEdit.js' );                                **
**                                                                               **
**  Links :                                                                      **
**    [[User:Jitrixis/autoEdit.js]]                                              **
**    [[User talk:Jitrixis/autoEdit.js]]                                         **
**    [[User talk:Jitrixis/autoEdit.js/lists]]                                   **
**    [[Wikidata:Tools#User:Jitrixis.2FautoEdit.js]]                             **
**                                                                               **
**  In collaboration with [[User:Zolo]]                                          **
**                                                                               **
***********************************************************************************
**********************************************************************************/

/////////////////////////////////////////////////////////////////////////
//////////////THE TRANSLATION VARIABLE IS UNDER THE LISTE ^^/////////////
/////////////////////////////////////////////////////////////////////////
/////////////////////////LISTES VARIABLE GLOBALE/////////////////////////
var desclist = {
		'a city in the Philippines': {
 				'en': 'city in the Philippines',
 				'de': 'Stadt auf den Philippinen',
 				'nl': 'stad in de Filipijnen',
 		},
 		'french departement': {
				'af': 'Franse departement',
				'als': 'Département z Frànkrich',
 				'ar': 'إقليم فرنسي',
 				'an': 'departemento frances',
 				'ast': 'departamentu de Francia',
 				'bar': 'Französisches Département',
 				'bg': 'Департамент на Франция',
 				'ca': 'departament de França',
 				'cs': 'francouzský departement',
 				'co': 'dipartimentu di a Francia',
 				'cy': 'département Ffrainc',
 				'da': 'fransk departement',
 				'de': 'französisches Departement',
 				'en': 'French department',
 				'eo': 'Franca departemento',
 				'es': 'departamento francés',
 				'et': 'Prantsusmaa departemang',
 				'fi': 'Ranskan departementti',
 				'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',
 				'it': 'dipartimento francese',
 				'ja': 'フランスの県',
 				'jv': 'Departemen ing Prancis',
 				'ko': '프랑스의 주',
 				'la': 'praefectura Franciae',
 				'kg': 'kizunga ya Fwalansa',
 				'lad': 'departamento franses',
 				'lb': 'franséischt Departement',
 				'lt': 'Prancūzijos departamentas',
 				'lv': 'Francijas departaments',
 				'lmo': 'dipartiment fransés',
 				'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-min-nan': 'Hoat-kok ê chi̍t khóan'
 		},
 		'french administrative region': {
  				'af': 'administratiewe gewes (région) van Frankryk',
 				'als': 'Region vun Frànkrich',
 				'an': 'rechión de Francia',
 				'ang': 'land on Francum',
 				'an': 'rechión de Francia',
 				'ast': 'rexón de Francia',
 				'az': 'Fransa region',
 				'bar': 'Region in Frånkreich',
 				'br': 'Rannvro Bro-C\'hall',
 				'bs': 'regija u  Francuskoj',
 				'ca': 'regió administrativa francesa',
 				'ca': 'regione francese',
 				'cs': 'francouzský region',
				'da': 'fransk region',
				'de': 'französische Region',
				'en': 'administrative region of France',
				'ext': 'rehión aministrativa de Francia',
				'eo': 'regiono de Francio',
				'es': 'región de Francia',
				'fr': 'région administrative française',
				'frp': 'règ·ion administrativa francêsa',
				'fy': 'regio yn Frankryk',
				'gl': 'rexión de Francia',
				'gv': 'ard ny Frank',
				'hu': 'Franciaország régió',
				'ia': 'region de Francia',
				'id': 'région di Perancis',
				'io': 'Franciana regiono',
				'is': 'Hérað Frakklands',
				'it': 'regione francese',
				'ja': 'フランスの地域圏',
				'jv': 'région Perancis',
				'ko': '프랑스의 레지옹',
				'la': 'regio Franciae',
				'lb': 'regioun vu Frankräich',
				'lmo': 'Region frances',
				'mg': 'faritra frantsay',
				'ms': 'Kawasan di Perancis',
				'nds': 'Regionen vun Frankriek',
				'nl': 'regio van Frankrijk',
				'nrm': 'régioun de Fraunce',
				'oc': 'region francesa',
				'os': 'регион Францы',
				'pms': 'region dla Fransa',
				'pl': 'francúzsky administratívny región',
				'ru': 'регион Франции',
				'sq': 'rajon administrativ në Francën',
				'sv': 'fransk region',
				'vi': 'Vùng của Pháp',
				'zh': '法国大区',
				'zh-min-nan': 'Hoat-kok ê tōa-khu (région)'
 		},
 		'church of the holy spirit': {
				'be': 'Царква Святога Духа',
				'cs': 'Kostel svatého Ducha',
				'da': 'Helligåndskirken',
				'de': 'Heilig-Geist-Kirche',
				'en': 'Church of the Holy Spirit',
				'eo': 'Preĝejo de Sankta Spirito',
				'es': 'Iglesia del Espíritu Santo',
				'et': 'Püha Vaimu kirik',
				'fr': 'Église du Saint-Esprit',
				'it': 'Chiesa dello Spirito Santo',
				'nl': 'Heilige Geestkerk',
				'pl': 'Kościół Ducha Świętego',
				'pt': 'Igreja do Espírito Santo',
				'ru': 'Церковь Святого Духа',
				'sk': 'Kostol Svätého Ducha',
				'sv': 'Helgeandskyrkan',
				'uk': 'Церква Святого Духа',
				'zh': '圣神教堂'
 		},
 		'date': {
				'ca': 'data',
				'de': 'Datum',
				'en': 'date',
				'en': 'date',
				'eo': 'dato',
				'gl': 'data',
				'fr': 'date',
				'he': 'דייט',
				'it': 'date',
				'ja': '伊達',
				'ko': '데이트',
				'nl': 'date',
				'pl': 'date',
				'ru': 'дата',
				'tl': 'date',
				'zh': '伊達'
 		}
};
importScript('User:'+wgUserName+'/autoEditLists.js');
/////////////////////////LISTES/////////////////////////

( function ( mw, $ ) {

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

	/*
	**Localized message.
	*/
	var transData = {
		'en': {
			'box-title': 'Automatic addition',
			'box-cancel': 'Close',
			'box-send': 'Update',
			'sended': 'Sent',
			'labels': 'Labels',
			'descriptions': 'Descriptions',
			'list': 'Lists',
			'none': 'None',
			'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="http://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. ///////////////////////////////////////////////////////
		},
                'fr': {
			'box-title': 'Ajout automatique',
			'box-cancel': 'Fermer',
			'box-send': 'Mettre à jour',
			'sended': 'Envoyés',
			'labels': 'Libéllés',
			'descriptions': 'Descriptions',
			'list': 'Listes',
			'none': 'Aucune',
			'warning-message': '<ul><li>L\'option "libéllés" : Ajoute automatiquement le libéllé de toutes les langues grâce au liens interwiki.</li><li>L\'option "description" : Ajoute automatiquement la description grâce à une liste que vous pouvez personnaliser (<a href="http://www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">lien</a>).</li></ul>'
		},
		'de': {
                        'box-title': 'Autmatisches hinzufügen',
                        'box-cancel': 'Schließen',
                        'box-send': 'Update',
                        'sended': 'Gesendet',
                        'labels': 'Bezeichnungen',
                        'descriptions': 'Beschreibungen',
                        'list': 'Listen',
                        'none': 'Nichts',
                        'warning-message': '<ul><li>Bezeichnungen Checkbox: Bearbeite automatisch die Bezeichnungen von allen Sprachlinks der Interwiki Seite-Links.</li><li>Beschreibungen Checkbox: Bearbeite automatisch die Beschreibungen nach einer Liste, die du bearbeiten kannst. (<a href="http://www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">Link</a>).</li></ul>',
                },
		'nl': {
                        'box-title': 'Automatisch toevoegen',
                        'box-cancel': 'Sluiten',
                        'box-send': 'Updaten',
                        'sended': 'Verzonden',
                        'labels': 'Labels',
                        'descriptions': 'Beschrijvingen',
                        'list': 'Lijsten',
                        'none': 'Niks',
                        'warning-message': '<ul><li>Selectievakje labels : Labels automatisch updaten door middel van de taalverwijzingen.</li><li>Selectievakje beschrijvingen : Beschrijvingen automatisch updaten door een zelf gemaakte lijst (<a href="http://www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">link</a>).</li></ul>',
                },
		'it': {
                        'box-title': 'Aggiunta automatica',
                        'box-cancel': 'Chiudi',
                        'box-send': 'Aggiorna',
                        'sended': 'Inserito',
                        'labels': 'Etichette',
                        'descriptions': 'Descrizioni',
                        'list': 'Elenchi',
                        'none': 'Nessuno',
                        'warning-message': '<ul><li>Casella etichette : Aggiorna automaticamente l\'etichetta di tutte le lingue grazie ai collegamenti interwiki.</li><li>Descriptions checkbox : Casella descrizioni : Aggiorna automaticamente la descrizione grazie a un elenco che puoi personalizzare (<a href="http://www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">link</a>).</li></ul>',
                },
		'es': {
                        'box-title': 'Adición automática',
                        'box-cancel': 'Cerrar',
                        'box-send': 'Actualizar',
                        'sended': 'Enviado',
                        'labels': 'Etiquetas',
                        'descriptions': 'Descripciones',
                        'list': 'Listas',
                        'none': 'Ninguna',
                        'warning-message': '<ul><li>Casilla de etiquetas: Actualizar automáticamente la etiqueta de todos los idiomas a partir de los enlaces interwiki.</li><li>Casilla de descripciones: Actualizar automáticamente la descripción de múltiples idiomas a partir de una lista que usted puede personalizar (<a href="http://www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">enlace</a>).</li></ul>',
                },
		'fi': {
                        'box-title': 'Automaattinen täydennys',
                        'box-cancel': 'Sulje',
                        'box-send': 'Päivitä',
                        'sended': 'Lähetetty',
                        'labels': 'Otsikot',
                        'descriptions': 'Kuvaukset',
                        'list': 'Listat',
                        'none': 'Ei mitään',
                        'warning-message': '<ul><li>Otsikot-valintaruutu : Päivittää automaattisesti kaikkien kielten otsikot kieltenvälisten linkkien mukaan.</li><li>Kuvaukset-valintaruutu : Päivittää automaattisesti kaikkien kielten kuvaukset listojen mukaan, joita voi tehdä itse (<a href="http://www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">linkki</a>).</li></ul>',
                },
		'fa': {
                        'box-title': 'لقب خودکار',
                        'box-cancel': 'بستن',
                        'box-send': 'به روز',
                        'sended': 'فرستاده شد',
                        'labels': 'برچسب‌ها',
                        'descriptions': 'توضیحات',
                        'list': 'فهرست‌ها',
                        'none': 'هیچکدام',
                        'warning-message': '<ul><li>دکمهٔ برچسب‌ها : به‌روز رسانی برچسب پیوندهای زبان های دیگر بر پایه میان ویکی‌ها.</li><li>دکمهٔ توضیحات : به‌روز رسانی توضیحات پیوندهای زبان های دیگر بر پایه فهرستی که می‌توانید آن را شخصی‌سازی نمائید. (<a href="http://www.wikidata.org/w/index.php?title=User:'+wgUserName+'/autoEditLists.js&action=edit&editintro=User talk:Jitrixis/autoEdit.js/editintro">پیوند</a>).</li></ul>',
                }

	};
	
	/*
	**Check if main language can be translated.
	*/
	var lang = mw.user.options.get( 'language' );
	if( !inArray( lang, ['en', 'fr', 'de', 'nl', 'it', 'es', 'fi', 'fa'] ) ) {
		lang = 'en';
	}

	/*
	**Return if the array conain the value.
	*/
	function inArray( value, array ) {
		var contains = false;	
		for (var i = 0; i < array.length; i++) {
			contains = array[i] == value;
			if(contains) {
				break;
			}
		}
		return contains;
	}

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

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

	/*
	**Dialog and link
	*/
	function labelLister() {
				var selectButton = "";
				for (var nb in desclist) {
					var optionText = "";
					if(desclist[nb][mw.user.options.get( 'language' )]){
						optionText = desclist[nb][mw.user.options.get( 'language' )];
					} else if(desclist[nb]['en']) {
						optionText = desclist[nb]['en'];
					} else {
						optionText = nb;
					}
					selectButton += '<option value="' + nb + '">' + optionText + '</option>';
				}
				desclist['none'] = {};
			mw.loader.using( ['jquery.ui'], function() {
				var 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( 'list' ) + '</legend><select id="autoEdit-list" style="width:100%"><option value="null" selected="selected">' + translate( 'none' ) + '</option>' + selectButton;
				formFind += '</select></fieldset></div><div id="autoEdit-success" style="width:100%"></div></form></div>';
				if(document.getElementById("content")) {
					var messageFind = $( formFind ).appendTo( '#content' );
				} else {
					var 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: 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();
						}
					} ]
				} );
				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' );
				} );
			} );
	}

	/*
	**List label, description and sitelinks
	*/
	function labelListing() {
		var iwiki = {};
		var desc = [];
		var inputSelect = $( '#autoEdit-list' ).val();
		$.ajax({
  			url: mw.util.wikiScript( 'api' ),
			data: {
				'format': 'json',
				'action': 'wbgetitems',
				'ids': itemId,
				'props': 'labels|descriptions|sitelinks'
			},
			success: function( data ) {
				for (var id in data.items[itemId].sitelinks) {
					iwiki[getLanguageCodeFromWikiId(id)] = data.items[itemId].sitelinks[id].title.replace(/\(.*\)/g,"");
				}
				for (var id in data.items[itemId].labels) {
					//if(iwiki[id]){
						try{
						delete iwiki[id];
						} catch (err) {
						}
					//}
				}
				for (var id in data.items[itemId].descriptions) {
					//if(desclist[inputSelect][id]){
						try{
						delete desclist[inputSelect][id];
						} catch (err) {
						}
					//}
				}
				apiGet(iwiki, desclist[inputSelect]);
			},
			error: function() {
				alert( 'API Error' );
				onError();
			}
		});
	}

	function apiGet(lbl, desc){
		sendItem(lbl, desc);
	}
	/*
	**Send the input value on the edit menu
	*/
	function setItem( item, summary ) {
		$.ajax( {
			type: 'POST',
  			url: mw.util.wikiScript( 'api' ),
			data: {
				'format': 'json',
				'action': 'wbsetitem',
				'id': itemId,
				'type': 'item',
				'token': mw.user.tokens.get( 'csrfToken' ),
				'data': item,
				'summary': '[[User:Jitrixis/autoEdit.js|autoEdit]] ' + summary,
				'exclude': 'pageid|ns|title|lastrevid|touched|sitelinks|aliases'
			}
		} )
		.done(function( data ) {
			if(data.success == 1){
				alert(translate( 'sended' ));
				$( '#autoEdit' ).dialog( "close" );
			} else {
				$('#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 inputLabel = document.getElementById("autoEdit-label").checked;
		var inputDesc = document.getElementById("autoEdit-desc").checked;
		var inputSelect = $( '#autoEdit-list' ).val();
		var sommaire = "Update ";
		//CREATE LABEL SAVE
		var jsonLabel = [];
		if(inputLabel == true){
			for (var nb in lbl) {
				if(lbl[nb] != ""){
					var jsonLabelArray = {};
					jsonLabelArray = {
						"language": nb,
						"value": lbl[nb],
					}
					jsonLabel.push(jsonLabelArray);
				}
			}
		sommaire += "Labels ";
		}
		//CREATE DESCRIPTION SAVE
		var jsonDesc = [];
		if(inputDesc == true){
			for (var nb in desc) {
				if(desc[nb] != ""){
					var jsonDescArray = {};
					jsonDescArray = {
						"language": nb,
						"value": desc[nb],
					}
					jsonDesc.push(jsonDescArray);
				}
			}
		sommaire += "Descriptions (" + inputSelect + ")";
		}
			setItem( $.toJSON( { 'labels': jsonLabel, 'descriptions': jsonDesc } ), sommaire);
	}

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