MediaWiki:Gadget-tradLink.js

Da Semi del Verbo, l'enciclopedia dell'influenza del Vangelo sulla cultura
Versione del 10 feb 2019 alle 16:30 di it>Daimona Eaytoy (Solite graffe che tanto opzionali non sono, esplicito che nei catch qualcosa ci andrebbe sempre, fosse anche solo un commento per spiegare come mai non ci interessa l'errore)
(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
  • Opera: premi Ctrl-F5.
/** 
 *
 *Considera il testo selezionato come il titolo di una voce straniera, e lo trasforma nel titolo dell'equivalente voce italiana
 *
 * Autore : [[:it:User:Jalo]]
 *
 * Lo script contiene funzioni (tradLink_showDialog e keypress) derivate da:
 * http://it.wikipedia.org/w/index.php?title=MediaWiki:Gadget-tb-base.js&oldid=66478020
 * scritto da [[:it:User:Rotpunkt]]
 */

// Show the dialog in order to ask for the template parameters.
function tradLink_showDialog( data, page ) {
	lingue = tradLink_getLingue();

	var $dialog, $fieldset;
	// create the dialog html
	$dialog = $( '#gtb-dialog' ).html( "Inserire l'elenco delle lingue da utilizzare per il tool TradLink" );
	$fieldset = $( '<fieldset>' ).css( 'border-color', 'gray' ).appendTo( $dialog );
	$( '<legend>' ).text( "Elenco" ).appendTo( $fieldset );
	count = 1;
	$.each( lingue, function( id, val ) {
		$( '<label>' )
			.attr( 'for', id )
			.text( "Alt+" + count + ': ' )
			.appendTo( $fieldset );
		$fieldset
			.append( $( '<input/>' )
				.attr( 'id', id )
				.attr( 'type', 'text' )
				.attr( 'size', 3 )
				.attr( 'value', ( val || '' ) ) )
			.append( '<br/>' );
		count++;
	} );
	// show the dialog
	var Buttons = {};
	var OKText = 'OK';
	var CancelText = 'Cancel';
	Buttons[ OKText ] = function() {
		var params = [];
		count = 0;
		$dialog.find( 'input:text' ).each( function() {
			params[ count++ ] = $.trim( $( this ).val() );
		} );
		lingue = params.join();
		var d = new Date();
		d.setTime( d.getTime() + ( 20 * 365 * 24 * 60 * 60 * 1000 ) ); // 20 years
		var expires = "expires=" + d.toUTCString();
		document.cookie = "tradLinkLangs=" + lingue + "; " + expires;
		$( this ).dialog( 'close' );
	};
	Buttons[ CancelText ] = function() {
		$( this ).dialog( 'close' );
	};
	$dialog.dialog( {
		title: "Configurazione del tool TradLink",
		width: 300,
		resizable: false,
		modal: true,
		zIndex: 10000,
		buttons: Buttons
	} );
}

function tradLink_getLingue() {
	value = "";
	var name = "tradLinkLangs=";
	var ca = document.cookie.split( ';' );
	for ( var i = 0; i < ca.length; i++ ) {
		var c = ca[ i ];
		while ( c.charAt( 0 ) === ' ' ) {
			c = c.substring( 1 );
		}
		if ( c.indexOf( name ) === 0 ) {
			value = c.substring( name.length, c.length );
		}
	}

	if ( value !== "" ) {
		splitted = value.split( ',' );
		return [ splitted[ 0 ], splitted[ 1 ], splitted[ 2 ], splitted[ 3 ], splitted[ 4 ], splitted[ 5 ], splitted[ 6 ], splitted[ 7 ], splitted[ 8 ] ];
	} else {
		return [ 'en', 'nl', 'de', 'sv', 'fr', 'ru', 'es', 'war', 'vi' ];
	}
}

function tradLink_tradLink( cod ) {
	lingue = tradLink_getLingue();

	var toTrad = mw.html.escape( $( '#wpTextbox1' ).textSelection( 'getSelection' ) );
	var trad = "";
	$.getJSON( "https://" + lingue[ cod ] + ".wikipedia.org/w/api.php?callback=?", {
			action: "query",
			prop: "langlinks",
			lllang: "it",
			titles: toTrad,
			format: "json",
			redirects: ""
		},
		function( data ) {
			selStart = document.getElementById( 'wpTextbox1' ).selectionStart;
			selEnd = document.getElementById( 'wpTextbox1' ).selectionEnd;
			if ( typeof( data ) != "undefined" &&
				typeof( data.query ) != "undefined" &&
				typeof( data.query.pages ) != "undefined"
			) {
				for ( var key in data.query.pages ) {
					if ( typeof( data.query.pages[ key ] ) != "undefined" &&
						typeof( data.query.pages[ key ].langlinks ) != "undefined" &&
						typeof( data.query.pages[ key ].langlinks[ 0 ] ) != "undefined" &&
						typeof( data.query.pages[ key ].langlinks[ 0 ][ "*" ] ) != "undefined"
					) {
						trad = data.query.pages[ key ].langlinks[ 0 ][ "*" ];
						try {
							mw.html.escape( $( '#wpTextbox1' ).textSelection( 'encapsulateSelection', {
								pre: trad + "[",
								post: "]"
							} ) );
						} catch ( err ) {
							// ...?
						}
						document.getElementById( 'wpTextbox1' ).selectionStart = selStart + trad.length;
						document.getElementById( 'wpTextbox1' ).selectionEnd = selEnd + trad.length + 2;

						return;
					}
				}
			}
			try {
				mw.html.escape( $( '#wpTextbox1' ).textSelection( 'encapsulateSelection', {
					pre: "",
					post: "[NO LINK]"
				} ) );
			} catch ( err ) {
				// ...?
			}
			document.getElementById( 'wpTextbox1' ).selectionStart = selEnd;
			document.getElementById( 'wpTextbox1' ).selectionEnd = selEnd + 9;
		} );
}

// setup hotkeys
$( '#wpTextbox1' ).keydown( function( event ) {
	var key = event.charCode ? event.charCode : event.keyCode ? event.keyCode : 0;
	var button, help = '';
	if ( event.altKey && !event.shiftKey && !event.ctrlKey && !event.metaKey ) {
		if ( event.which === 48 ) {
			// configure
			tradLink_showDialog();
			event.preventDefault();
		} else if ( event.which >= 49 && event.which < 57 ) {
			// execute
			tradLink_tradLink( event.which - 49 );
			event.preventDefault();
		}
	}
} );