MediaWiki:Gadget-tradLink.js

Da Semi del Verbo, l'enciclopedia dell'influenza del Vangelo sulla cultura

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();
		}
	}
} );