MediaWiki:Gadget-tradLink.js

Versione del 10 mar 2021 alle 14:37 di Daimona Eaytoy (discussione | contributi) (tutto in una IIFE + use strict (e basta, anche se il diff fa paura))

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]]
 */

/* global mediaWiki, jQuery, OO */
( function( mw, $ ) {
	'use strict';

	// 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();
			}
		}
	} );
}( mediaWiki, jQuery ) );