MediaWiki:Gadget-tradLink.js

Versione del 10 feb 2019 alle 18:30 di Daimona Eaytoy (discussione | contributi) (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)

Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.


Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere 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();
		}
	}
} );