MediaWiki:Gadget-tradLink.js

Da Cathopedia, l'enciclopedia cattolica.
Vai alla navigazione Vai alla ricerca

Nota: Dopo aver salvato le preferenze, perché i cambi abbiano effetto, devi bypassare la cache del tuo browser. Mozilla / Firefox / Safari: tieni premuto Shift mentre clicchi Reload, o premi Ctrl-Shift-R (Cmd-Shift-R per Apple Mac); Google Chrome: premi Ctrl o Shift mentre clicchi F5; IE: premi Ctrl mentre clicchi Refresh, o premi Ctrl-F5; Konqueror:: clicca semplicemente il pulsante di Reload, o premi F5; se usi Opera devi cancellare completamente la chache nel menu Tools→Preferences.

/* 

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  scriptcontiene 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 = new Object();
    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();
        }
    }
});