Utente:Superchilum/InterwikiCat.js

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.

/**
 * Importato da [[:en:User:Jalo/Sandbox]]
 * =====================================================================
 * =========================== ATTENZIONE:  ============================
 * === Lo script è vecchio e ne è caldamente sconsigliato l'utilizzo ===
 * =====================================================================
 */
// controlla se l'array "array" contiene il valore "stringa"
function contiene(array, stringa) {
    for (var i = 0; i < array.length; i++) {
        if (array[i] == stringa) {
            return true;
        }
    }
    return false;
}

var vociInglesi;
var vociDaTrad;
var vociSuItEng;
var vociSuItIta;
var interwikisDaTradCount;
var interwikisSuItCount;
var sizesDaTradCount;
var noCategory;
var vociDaTradDaSort;
var vociSuItDaSort;

var countVociDaTrad = 0;

// cicla sull'elenco delle categorie chieste dall'utente
function analisiVoci() {
    for (i = 0; i < vociInglesi.length; i++)
    {
        // Ricava l'elenco degli interwiki della voce in oggetto
        $.ajax({
            url: mw.util.wikiScript('api'),
            data: {
                action: 'query',
                prop: 'langlinks|revisions',
                titles: vociInglesi[i],
                redirects: '',
                format: 'xml',
                lllimit: '500',
                rvprop: 'size'
            },
			dataType: "xml",
			type: "POST",
			success: function(response){
				params = this.data.split('&');
				voce = "";
				for (j = 0; j < params.length; j++)
				{
					if (params[j].indexOf('titles=') != -1)
					{
						voce = params[j].substr(7); // titles=
						break;
					}
				}
				addToVociDaTrad(response, voce);
			}
        })
    }
}

function addToVociDaTrad(api, en) {
    if (api == null)
    {
        ++countVociDaTrad;
        return;
    }

    // Cerca se c'è "it.wiki"
    interwikis = api.getElementsByTagName('ll');

    trovato = "";
    for (j=0; j<interwikis.length; j++)
        if (interwikis[j].getAttribute('lang')=="it")
        {
            trovato = interwikis[j].textContent;
            break;
        }

    // Cerca la dimensione
    sizes = api.getElementsByTagName('rev');
    size = 0;
	
    if (sizes.length == 0)
        size = 0;
    else
        size = sizes[0].getAttribute('size');
		
    if (trovato == "")
    {
		while (en.indexOf('+')!=-1)
			en = en.replace('+',' ');
        vociDaTrad.push(en);
        interwikisDaTradCount.push(interwikis.length);
        sizesDaTradCount.push(size);
    }
    else
    {
		while (en.indexOf('+')!=-1)
			en = en.replace('+',' ');
        vociSuItEng.push(en);
        vociSuItIta.push(trovato);
        interwikisSuItCount.push(interwikis.length);
    }

    if (++countVociDaTrad == vociInglesi.length)
    {
        // crea la lista da ordinare
        for (i = 0; i < vociDaTrad.length; i++)
        {
            vociDaTradDaSort.push("<li><a href='"+mw.config.get('wgServer')+"/wiki/"+vociDaTrad[i].replace(/'/g, "%27")+"'>" + decodeURIComponent(vociDaTrad[i]) + "</a> (" + interwikisDaTradCount[i] + " interlink) (" + sizesDaTradCount[i] + " bytes)</li>");
        }
        for (i = 0; i < vociSuItEng.length; i++)
        {
            vociSuItDaSort.push("<li><a href='"+mw.config.get('wgServer')+"/wiki/"+encodeURIComponent(vociSuItEng[i]).replace(/'/g, "%27")+"'>" + vociSuItEng[i] + "</a>  --> <a href='http://it.wikipedia.org/wiki/"+encodeURIComponent(vociSuItIta[i]).replace(/'/g, "%27")+"'>" + vociSuItIta[i] + "</a> (" + interwikisSuItCount[i] + " interlink)</li>");
        }
		
        // ordina le liste
        vociDaTradDaSort.sort();
        vociSuItDaSort.sort();
            
        // crea contenuto da salvare
        contenutoDaTrad = "";
        for (i = 0; i < vociDaTradDaSort.length; i++)
        {
            contenutoDaTrad += vociDaTradDaSort[i];
        }
        
        contenutoSuIt = "";

        for (i = 0; i < vociSuItDaSort.length; i++)
        {
            contenutoSuIt += vociSuItDaSort[i];
        }
        
        // crea lista categorie inesistenti
        nocat = "";
        if (noCategory.length > 0)
        {
            nocat += "Le seguenti categorie non esistono su "+mw.config.get('wgContentLanguage')+".wiki o sono vuote: ";
        
            for (i = 0; i < noCategory.length; i++)
            {
                nocat += noCategory[i] + ", ";
            }
            
            nocat = nocat.substr(0, nocat.length-2) + "<br/><br/>";
        }
        
        // finito di creare la lista la mostro in una nuova finestra
        myRef = window.open('about:blank','mywin', 'left=20,top=20,width=500,height=300,toolbar=yes,resizable=yes');
        myRef.document.write("<div style='width: 100%; height: 100%; overflow: auto'> ");
        myRef.document.write("<big><big><big>Voci di "+mw.config.get('wgContentLanguage')+".wiki mancanti su it.wiki</big></big></big><br/><br/>");
        myRef.document.write("<ol>"+contenutoDaTrad+"</ol>");
        myRef.document.write("<big><big><big>Voci di "+mw.config.get('wgContentLanguage')+".wiki già su it.wiki</big></big></big><br/><br/>");
        myRef.document.write("<ol>"+contenutoSuIt+"</ol>");
        myRef.document.write(nocat);
        myRef.document.write("</div>");
    }
}

var totaleCategorie = 0;
var countCategorie = 0;

// cicla sull'elenco delle categorie chieste dall'utente
function scansioneCategorie() {
    categorie = document.getElementById("Lista").value.split("\n");
    totaleCategorie = categorie.length;
	count = 0;
    for (i = 0; i < categorie.length; i++)
    {
	    prosegui = false;
        $.ajax({
            url: mw.util.wikiScript('api'),
            data: {
                action: 'query',
                list: 'categorymembers',
                cmprop: 'title',
                cmnamespace: '0',
                cmlimit: '500',
                format: 'xml',
                cmtitle: 'Category:'+categorie[i]
            },
			dataType: "xml",
			type: "POST",
			success: function(response){
				params = this.data.split('&');
				cat = "";
				for (j = 0; j < params.length; j++)
				{
					if (params[j].indexOf('cmtitle=') != -1)
					{
						cat = params[j].substr(19); // cmtitle=Category%3A
						break;
					}
				}
				addToVociInglesi (response, cat);
			}
        })
    }
}

function addToVociInglesi(api, cat) {
    if (typeof(cat) == 'undefined')
    {
		if (++countCategorie == totaleCategorie)
			analisiVoci();
        return;
    }

    if (cat.length > 0)
      if (api.getElementsByTagName("categorymembers")[0].childNodes.length == 0) // categoria non esistente
          noCategory.push(cat);
    
    if (api)
    {
        cm = api.getElementsByTagName('cm');
        var voce="";
        for(j=cm.length-1; j >= 0 ; j--) {
            voce = cm[j].attributes[1].nodeValue;
            if (voce == "") continue;
            if (!contiene(vociInglesi, voce)) // se non è già in lista
                vociInglesi.push(voce);
        }
    }
    
    if (++countCategorie == totaleCategorie)
        analisiVoci();
}

// mostra finestra in cui si chiede quali categorie tradurre
function categorieDaTradurre() {
	vociInglesi = new Array();
	vociDaTrad = new Array();
	vociSuItEng = new Array();
	vociSuItIta = new Array();
	interwikisDaTradCount = new Array();
	interwikisSuItCount = new Array();
	sizesDaTradCount = new Array();
	noCategory = new Array();
	vociDaTradDaSort = new Array();
	vociSuItDaSort = new Array();
	countCategorie = 0;
	countVociDaTrad = 0;
 
    var $dialog, $fieldset;
    // create the dialog html
    $dialog = $('#gtb-dialog').html('Elenco delle categorie da tradurre (una per riga e senza "Category:")');
    $fieldset = $('<fieldset>').css('border-color', 'gray').appendTo($dialog);
	$('<legend>').text('Categorie').appendTo($fieldset);
	$fieldset
		.append($('<textarea/>')
					.attr('rows', 10)
					.attr('width', '90%')
					.attr('wrap', 'off')
					.attr('name', 'Lista')
					.attr('id', 'Lista')
					.attr('value', ''))
		.append('<br/>');

    // show the dialog
    var Buttons = new Object();
    var OKText = 'OK';
    var CancelText = 'Cancel';
    Buttons[OKText] = function () {
                $dialog.find('textarea').each(function () {
                    scansioneCategorie();
                });
                $(this).dialog('close');
            };
    Buttons[CancelText] = function () {
                $(this).dialog('close');
            };
    $dialog.dialog({
        title: "Analisi categorie",
        width: 300,
        resizable: false,
        modal: true,
        zIndex: 10000,
        buttons: Buttons
    });
}

$(function () {
    mw.util.addPortletLink('p-tb', 'javascript:categorieDaTradurre()', 'Voci da tradurre', 'daTradIT');
    document.getElementById('daTradIT').firstChild.accessKey = 'V';
    document.getElementById('daTradIT').title = 'Voci da tradurre (Alt-Shift-V)';

	// setup dialog
	mw.loader.using(['jquery.ui'], function () {
		$('<div>')
			.attr('id', 'gtb-dialog')
			.appendTo('body');
	});
})
//