//
// 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='"+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='"+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 "+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 "+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 "+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
});
}
addOnloadHook(function () {
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');
});
})
//