MediaWiki:Common.js: differenze tra le versioni

Da Wikisource.
Contenuto cancellato Contenuto aggiunto
aggiungo link "Scarica come ePub"
Nessun oggetto della modifica
Riga 119: Riga 119:
*/
*/
datiPagina={};
datiPagina={};
r6=/(.*)\<\!--(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)--\>/; // regex per elemento datiPagina a 6 cifre
r4=/(.*)\<\!--(\d+)\s(\d+)\s(\d+)\s(\d+)--\>/; // regex per elemento datiPagina a 6 cifre

/*
Funzione base caricamento datiPagina con nuovo meccanismo sperimentale
Scatta solo se esiste un commento a 6 elementi numerici nel codice
*/
function newDpl(testo) {
if (r6.test(testo)) {
testo=testo.split("\n");
datiPagina={};
datiPagina["righe"]=[];
for (var i=0;i<testo.length;i+=1) {
if (r6.test(testo[i])) {var res=r6.exec(testo[i]);
datiPagina["xypagina"]=[res[6],res[7]];
var riga=[res[2],res[3],res[4],res[5],res[1]];
datiPagina["righe"].push(riga);
testo[i]=res[1];
}
if (r4.test(testo[i])) {
var res=r4.exec(testo[i]);
var riga=[res[2],res[3],res[4],res[5],res[1]];
datiPagina["righe"].push(riga);
testo[i]=res[1];
}
}
testo=testo.join("\n");
}
return testo;
}


//funzione "dummy", destinata a essere sostituita da funzioni omonime più complesse testate in [[Utente:Alex_brollo/vector.js]]
//funzione "dummy", destinata a essere sostituita da funzioni omonime più complesse testate in [[Utente:Alex_brollo/vector.js]]
Riga 125: Riga 155:
function spanSALdelete() {
function spanSALdelete() {
var editbox = document.getElementsByName('wpTextbox1')[0];
var editbox = document.getElementsByName('wpTextbox1')[0];
testo=editbox.value;
editbox.value=newDpl(testo);
if (editbox && wgCanonicalNamespace == "Pagina") {
if (editbox && wgCanonicalNamespace == "Pagina") {
//carica eventuale valore areaDatiPagina in datiPagina ed elimina testo da editbox.value
//carica eventuale valore areaDatiPagina in datiPagina ed elimina testo da editbox.value
Riga 147: Riga 179:
}
}
}
}


$(document).ready(spanSALdelete);
$(document).ready(spanSALdelete);



Versione delle 20:29, 14 gen 2012

/* <pre> */

/* Il codice JavaScript inserito qui viene caricato da ciascuna pagina, per tutti gli utenti. */

/* traduzione dei messaggi javascript */
 
self.ws_messages = { 
 
	'iwtrans':'Il suo testo proviene da', 
	'iwtrans2':'Il suo testo proviene da un altro sottodominio di Wikisource.',

	'compare_with':  'Confronto con:',
	'compare_texts': 'Confronta testi'
}

var proofreadpage_show_headers=true;


/* rimuove gli spazi alle estremità della stringa */
String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
}
/* aggiunge un metodo conta all'oggetto String. 
Restistuisce il numero di sottostringhe stringa contenute nella stringa principale. Il confronto è sensibile 
alle maiuscole/minuscole.  */
String.prototype.count = function(stringa) {
	var n=0;
        var testo=this
        while (testo.indexOf(stringa)>-1) {
             n=n+1;
             testo=testo.replace(stringa,"");
        }
        return n;
}
/* aggiunge il metodo isOdd a Number */
Number.prototype.isOdd = function() {
    if (this % 1 !=0 || this < 0) {return undefined;}
    if (this % 2 == 0) {return true;} else {return false;}
}
/* conta il numero di occorrenze di stringa dentro testo*/
function count(testo,stringa) {
  n=0;
  while (testo.indexOf(stringa)>-1) {
    n=n+1;
    testo=testo.replace(stringa,"");
    }
  return n;
}

/* estensione jQuery che aggiunge la funzione getUrlVar(), per recuperare il valore di un parametro dalla request
 *
 * da http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html
 */
$.extend({
  getUrlVars: function(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});


//modifica un dato link settando il parametro par in fondo all'URL
function setURLVar(link, par, val) {
	if (link) {
		href = link.attr("href");
		
		//rimuovi il parametro se c'era gia'
		if (href.indexOf(par) != -1) {
			regex = new RegExp(par+"\=([a-z0-9]*)");
			href = href.replace(regex, "");
		}
		
		if (href.indexOf("?") == -1) {
			href += "?" + par + "=" + val;
		}
		else {
			href += "&" + par + "=" + val;
		}
		link.attr("href", href);
	}
}


/*
 * IMPORTANTE: Base.js deve essere importato prima di poter usare qualunque altro script da wikisource.org
 */
mw.loader.load('//wikisource.org/w/index.php?title=MediaWiki:Base.js&action=raw&ctype=text/javascript');

//disable ThomasV's "simplified lst"
self.proofreadpage_raw_lst=true;

// Codice utilizzato per le chiamate OCR
mw.loader.load('//wikisource.org/w/index.php?title=MediaWiki:OCR.js&action=raw&ctype=text/javascript');

// Iw_pages: Trasclusione di pagine tra sottodomini tramite le API
mw.loader.load('//wikisource.org/w/index.php?title=MediaWiki:InterWikiTransclusion.js&action=raw&ctype=text/javascript');

// Script per il confronto fra testi
mw.loader.load('//wikisource.org/w/index.php?title=MediaWiki:Compare.js&action=raw&ctype=text/javascript');


/* script per la creazione dell'area dati */
importScript("MediaWiki:Areadati.js");



/* Funzioni di semantizzazione SAL pagina
1. spanSALdelete(): rimuove lo span SAL dal testo Pagina: in edit
 */
datiPagina={};
r6=/(.*)\<\!--(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)\s(\d+)--\>/; // regex per elemento datiPagina a 6 cifre
r4=/(.*)\<\!--(\d+)\s(\d+)\s(\d+)\s(\d+)--\>/;               // regex per elemento datiPagina a 6 cifre

/*
Funzione base caricamento datiPagina con nuovo meccanismo sperimentale
Scatta solo se esiste un commento a 6 elementi numerici nel codice
*/
function newDpl(testo) {
 if (r6.test(testo)) {
    testo=testo.split("\n");
    datiPagina={};
    datiPagina["righe"]=[];
    for (var i=0;i<testo.length;i+=1) {
        if (r6.test(testo[i])) {var res=r6.exec(testo[i]); 
                       datiPagina["xypagina"]=[res[6],res[7]];
                       var riga=[res[2],res[3],res[4],res[5],res[1]];
                       datiPagina["righe"].push(riga);
                       testo[i]=res[1];                       
        } 
        if (r4.test(testo[i])) {
            var res=r4.exec(testo[i]); 
            var riga=[res[2],res[3],res[4],res[5],res[1]];
            datiPagina["righe"].push(riga);
            testo[i]=res[1];    
        }
    }
    testo=testo.join("\n");
 }
 return testo;
}

//funzione "dummy", destinata a essere sostituita da funzioni omonime più complesse testate in [[Utente:Alex_brollo/vector.js]]
function elaboradatiPagina(i) {riga=datiPagina["righe"][i][4]+"\n"; return riga;}

function spanSALdelete() {
    var editbox = document.getElementsByName('wpTextbox1')[0];
    testo=editbox.value;
    editbox.value=newDpl(testo);
    if (editbox && wgCanonicalNamespace == "Pagina") {
        //carica eventuale valore areaDatiPagina in datiPagina ed elimina testo da editbox.value
        areaDatiPagina=find_stringa(editbox.value, "<!-- Area dati\n","\n-->",1);
        if (areaDatiPagina && areaDatiPagina!="") {
           editbox.value=editbox.value.replace(areaDatiPagina, "");
           datiPagina=JSON.parse(areaDatiPagina.replace("<!-- Area dati\n","").replace("\n-->",""));
           // se in editbox non resta nulla gattacicova....
           if (editbox.value.trim()=="") {
              for (i=0;i<datiPagina["righe"].length;i+=1) {
                    editbox.value+=elaboradatiPagina(i); 
                    }
              }
           }
        //elimina eventuale riga vuota dopo l'ultimo span SAL (inserita al salvataggio dal "bug della riga vuota")
        editbox.value = editbox.value.replace(/<\/span>[\r\n]+$/, '</span>');

        while (find_stringa(editbox.value, '<span class="SAL">',"</span>",1)!="") {
             spanData=find_stringa(editbox.value, '<span class="SAL">',"</span>",1);
             editbox.value = editbox.value.replace(spanData,"");
        }
    }
}


$(document).ready(spanSALdelete);

/*
2: inserisce i dati SAL nelle pagine Pagina all'atto del salvataggio della pagina
*/
function aggiungiSal() {
    var editbox = document.getElementsByName('wpTextbox1')[0];
    var pagina = wgTitle.substring(wgTitle.indexOf("/") + 1);
    var sal=proofreadpage_quality;
    var user=proofreadpage_username;

    //predispongo il nuovo span 
    codice='<span class="SAL">'+pagina+','+sal+','+user+'</span>';

    // elimino i vecchi span
    s0=produciLista(editbox.value,'<span class="SAL"','</span>',1); 
    for(i=0; i<s0.length;i+=1) {
        editbox.value=editbox.value.replace(s0[i],'');
    }

    //listo i tag section 
    //s1=produciLista(editbox.value,"<section begin","/>",1);
    s2=produciLista(editbox.value,"<section end","/>",1);
    s1=[];

    // caricati tutti i section tag in s2, li ricarico in s1 eliminando i doppioni e i casi
    // in cui il tag contiene il carattere @
    for(i=0; i<s2.length;i+=1) {
        if ($.inArray(s2[i],s1)== -1 && s2[i].indexOf("@") == -1)  
           { 
           s1.push(s2[i]);
           }
    }

    // aggiungo lo span a ogni section oppure in testa alla pagina 
    if (s1.length>0) {
        for(i=0; i<s1.length;i+=1) {
            //editbox.value=editbox.value.replace(s1[i],s1[i]+codice);
            editbox.value=editbox.value.replace(s1[i],codice+s1[i]);

        }
    }
    else {
        //{editbox.value=codice+editbox.value;}
       finale=editbox.value.substring(editbox.value.length-8).toLowerCase();
       if (finale=="{{nop}}\n")
          {editbox.value=editbox.value.substring(0,editbox.value.length-1);}
       finale=editbox.value.substring(editbox.value.length-8).toLowerCase();
       if (finale!="\n{{nop}}") 
           
       {editbox.value=editbox.value+codice;}
       else
       {editbox.value=editbox.value.substring(0,editbox.value.length-8)+codice+"\n{{nop}}";}
    }

    //se ci sono più sections con lo stesso nome, lo span viene inserito più volte: quindi eliminiamo quelli di troppo
    var re = new RegExp(codice+codice, "g");
    editbox.value=editbox.value.replace(re, codice);
    editbox.value=editbox.value.replace(re, codice);
    //aggiungi l'area dati, ma solo se non vuota
    if (JSON.stringify(datiPagina)!="{}") editbox.value+="<!-- Area dati\n"+JSON.stringify(datiPagina)+"\n-->";
    //ci metto una pezza: se lo span interferisce con l'apertura di una tabella, metti un a capo tra i due
    //editbox.value=editbox.value.replace(/<\/span>\{\|/g, "</span>\n{|");
}
/* Assegna ai link pagina in ns0 l'immagine SAL estraendola dal codice pagina transcluso 
Funzioni chiamate: 
1. SALarray(), che restituisce l'array dei dati estratti dal codice html delle pagine trancluse
2. immagineSAL(), che modifica il codice html facendo comparire le icone nei link usando i dati estratti da SALarray. La
   funzione richiede che il template crei un  codice File:00%.png; lo 00% viene sostituito con il valore appropriato. 
*/

jQuery(document).ready(function(){
   listaSal=SALarray();
   for (i=0;i<listaSal.length;i+=1){ 
       immagineSAL(listaSal[i]);}
   }
);

function SALarray(){
sv=[]; 
sv['0']='00%';
sv['1']='25%';
sv['2']='50%';
sv['3']='75%';
sv['4']='100%';
y=[];
x=jQuery("span.SAL").map(function() {
  return jQuery(this).html();
}).get(); 
for (i=0;i<x.length;i+=1) {x[i]=x[i].split(",");x[i][1]=sv[x[i][1]];}
return x;
}


/*Questo codice ricerca la stringa html relativa all'immagine SAL 00% della pagina  e modifica il codice per puntare a un differente SAL
*/

function immagineSAL(listaDati) {
     if (listaDati.length<2) {return;}
     else {
          a=jQuery('span a[title$="/'+listaDati[0]+'"]').siblings('a.image').html();
          if (a) {
               //prima di fare la sostituzione cerco tutti i 100% e ci metto un segnaposto, per tenerli fuori dalla successiva replace
               a=a.replace(/100\%/g, "___cento___");
               a=a.replace(/00\%/g, listaDati[1]);
               a=a.replace(/___cento___/g, "100%");
               if (listaDati.length>2) {
                    a=a.replace('<img ','<img title="Ultima modifica di '+listaDati[2]+'" ');
               }
               jQuery('span a[title$="/'+listaDati[0]+'"]').siblings('a.image').html(a);
          }
     }
}


/*
	interwikiExtra: carica i collegamenti alle versioni straniere ed alternative
*/
function interwikiExtra() 
{
	// ripeti per tutti gli elementi <span>
   for(var i=0; a = document.getElementsByTagName("span")[i]; i++) {
	// se si trova uno span "linkInfo"
      if(a.className == "interwiki-info") {
	// ripeti per tutti gli elementi <li>
         var count=0;
         
         for(var j=0; b = document.getElementsByTagName("li")[j]; j++) {
            if(b.className == "interwiki-" + a.id) {
               // se c'è già il testo default toglilo
               b.innerHTML = b.innerHTML.replace(/\(orig\.\)/g, "") + " " + a.title;
               if(a.title == "(orig.)") { b.title = "Testo originale"; }
            }
         else if(b.className == "interwiki-" + a.id.substr(0,a.id.length-1)) {
               count = count+1;
               if(a.id.charAt(a.id.length-1) == count) {
                  b.innerHTML = b.innerHTML.replace(/\(orig\.\)/g, "") + " "+a.title;
               }
            }
         }
      }
      if(a.className == "AltraVersione") {
         p = a.title.indexOf("|");
         pvers = document.getElementById("p-version");
         if (pvers == null) {
           c = document.getElementById("column-one");
           if (c) {
             c.innerHTML = c.innerHTML
               + "<div class=\"portlet\" id=\"p-version\">"
               + "<h5>Altre versioni</h5>"
               + "<div class=\"pBody\">"
               + "<ul>"
               + "</ul>"
               + "</div>";
               pvers = document.getElementById("p-version");
           }
           //fix per vector
           else {
             c = document.getElementById("mw-panel");
             if (c) {
               c.innerHTML = c.innerHTML
                 + "<div class=\"portal expanded\" id=\"p-version\">"
                 + "<h5>Altre versioni</h5>"
                 + "<div class=\"body\" style=\"display:block\">"
                 + "<ul>"
                 + "</ul>"
                 + "</div>";
                 pvers = document.getElementById("p-version");
             }
           }
         }
         e = pvers.getElementsByTagName("ul")[0]; 
         etichetta = a.title.substr(p+1,a.title.length-1);
         nuovoLink = $(e).html() 
           + "<li><a href=\"/wiki/" + a.title.substr(0,p) + "\" title=\"" + a.title.substr(0,p) + "\" >" + etichetta + "</a>";

         //link per il confronto tra due testi di it.source
         $(e).html(nuovoLink + '<a href="#" onclick="compare_ajax(\'it\', \'' + a.title.substr(0,p).replace(/\'/g, "\\'") + '\')" title="' + ws_msg('compare_texts') + '">&nbsp;⇔</a></li>');
      }
   }
}
addOnloadHook(interwikiExtra);


/*
	Script di Candalua per la duplicazione delle barre di navigazione
	se nella pagina è presente sotto l'intestazione la barra di navigazione,
        la duplica e mostra il duplicato a fondo pagina
*/
addOnloadHook( function() {
     if (wgNamespaceNumber == 0) {
         $("table#barra_navigazione").clone().attr('id', 'barra_navigazione_sotto').appendTo($("table#barra_navigazione").parent());
     }
});

/*
	FasiAvanzamento: mostra l'icona del SAL leggendo la pagina linkata dal template {{Testo}} --- OBSOLETO
	DataUltimaRevisione: mostra la data dell'ultima revisione della pagina
	IconeSALtesti: mostra le icone per la modifica semplificata del SAL nei testi
*/
//importScript('MediaWiki:FasiAvanzamento.js');
importScript('MediaWiki:DataUltimaRevisione.js');
importScript("MediaWiki:IconeSALtesti.js");

/*
	"onglets": carica le icone SAL accanto a ''testo''
*/
function onglets()
{
	// primo tab: inserimento di icona
   var a = document.getElementById("ca-nstab-main");
   if(a){
          a = a.firstChild.firstChild;
          var s = a.innerHTML;

          q = document.getElementById("textquality")
          if( q ) {
                var image = "";
                if( q.className == "00%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/00%25.svg/9px-00%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "25%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/3/34/25%25.svg/9px-25%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "50%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/c2/50%25.svg/9px-50%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "75%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/4/49/75%25.svg/9px-75%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "100%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/ce/100%25.svg/9px-100%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "101%") { 
                   image = " <img src='//upload.wikimedia.org/wikisource/it/7/73/101%25.png' alt='' width='10' height='10' longdesc='' />"; }
                if( q.className == "Edizioni Wikisource") { 
                   image = " <img src='//upload.wikimedia.org/wikisource/it/7/73/101%25.png' alt='' width='10' height='10' longdesc='' />"; }
                  a.innerHTML = s+image;
                }
       }
}

addOnloadHook(onglets);

/*
	onglets2: carica le icone SAL accanto a ''pagina'' nel 
*/
function onglets2()
{
	// primo tab
   var a = document.getElementById("ca-nstab-pagina");
   if(a){
          a = a.firstChild.firstChild;
          var s = a.innerHTML;

          q = document.getElementById("pagequality")
          if( q ) {
                var image = "";

if( q.className == "00%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/00%25.svg/9px-00%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "25%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/3/34/25%25.svg/9px-25%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "50%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/c2/50%25.svg/9px-50%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "75%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/4/49/75%25.svg/9px-75%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "100%") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/ce/100%25.svg/9px-100%25.svg' alt='' width='9' height='9' longdesc='' />"; }


                if( q.className == "quality0") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/d/d6/00%25.svg/9px-00%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "quality1") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/3/34/25%25.svg/9px-25%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "quality2") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/c2/50%25.svg/9px-50%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "quality3") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/4/49/75%25.svg/9px-75%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "quality4") { 
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/ce/100%25.svg/9px-100%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                
                if( q.className == "Edizioni Wikisource") { 
                   image = " <img src='//upload.wikimedia.org/wikisource/it/7/73/101%25.svg' alt='' width='10' height='10' longdesc='' />"; }
                  a.innerHTML = s+image;
                }
       }
}
addOnloadHook(onglets2);

/*
      onglets3: carica le icone SAL accanto a ''indice''
 */
function onglets3()
{
   var a = document.getElementById("ca-nstab-indice");
   if(a) {
          a = a.firstChild.firstChild;
          var s = a.innerHTML;
          q = document.getElementById("pagequality");
          if( q ) {
                var image = "";
 
                if( q.className == "25%") {
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/3/34/25%25.svg/9px-25%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "50%") {
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/c2/50%25.svg/9px-50%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "75%") {
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/4/49/75%25.svg/9px-75%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                if( q.className == "100%") {
                   image = " <img src='//upload.wikimedia.org/wikipedia/commons/thumb/c/ce/100%25.svg/9px-100%25.svg' alt='' width='9' height='9' longdesc='' />"; }
                a.innerHTML = s+image;
          }

          //se i seguenti campi di Indice sono vuoti, carica in automatico dei valori predefiniti
          var campoQualita = document.getElementsByName("Qualità")[0];
          if (campoQualita) {
                    if (campoQualita.value == "") campoQualita.value = "25%";
          }
          var campoPagine = document.getElementsByName("Pagine")[0];
          if (campoPagine) {
                    if (campoPagine.value == "") campoPagine.value = "{{Indice pagine|1}}\n<pagelist />";
          }
          var campoImmagine = document.getElementsByName("Immagine")[0];
          if (campoImmagine && wgTitle.indexOf(".djvu")!=-1) {
                    if (campoImmagine.value == "") campoImmagine.value = wgTitle+"|page=1";
          }
   }
}
addOnloadHook(onglets3);


/*
	al passaggio del mouse su un rimando di nota genera un tooltip con il testo della nota
*/
addOnloadHook ( function ()
{
 sups = document.getElementsByTagName("sup");
 for (i=0; i<sups.length; i++)
 {
   note_id = sups[i].childNodes[0].href;
   if (note_id && (note_id.indexOf("#") != -1))
   {
     note_id = document.getElementById(note_id.substr(note_id.indexOf("#")+1));
     if (note_id) {
           text = note_id.innerHTML;
           text = text.replace(/<br \/>/gi, "&#13;")
                      .replace(/<a href="#cite_ref-[0-9]*">↑<\/a>/gi, "")
                      .replace(/<span class="numeropagina">(.*?)\]<\/span>/gi, "")
                      .replace(/<span class="SAL">(.*?)<\/span>/gi, "")
                      .replace(/<\/?[^>]+>/gi, '');
           sups[i].title = text;
      }
   }
 }
})

/*
	il link per caricare file nel menu di sinistra lo facciamo puntare direttamente a Commons
*/
addOnloadHook( function() {
    $("#t-upload a").attr("href", "//commons.wikimedia.org/wiki/Special:Upload?uselang=it");
    $("#t-upload a").attr("title", "Carica su Commons [alt-u]");
    $("#t-upload a").text("Carica su Commons");
});

/*
	NavigationBar: gestisce i menu a scomparsa
*/
var NavigationBarHide = '▲ Nascondi';
var NavigationBarShow = '▼ Espandi';
// NavigationBarShowDefault = 0;	// tutte le barre verrano nascoste
// NavigationBarShowDefault = 1;	// su pagine con più di una barra tutte le barre verranno nascoste
var NavigationBarShowDefault = 0;
// mostra e nasconde contenuto e immagine (se presente) delle barre di navigazione
// Parametri:
//     indexNavigationBar: l'indice della barra di navigazione da contrarre
function toggleNavigationBar(indexNavigationBar)
{
   var NavToggle = document.getElementById("NavToggle" + indexNavigationBar);
   var NavFrame = document.getElementById("NavFrame" + indexNavigationBar);

   if (!NavFrame || !NavToggle) {
       return false;
   }

	// se mostrato ora
   if (NavToggle.firstChild.data == NavigationBarHide) {
       for (
               var NavChild = NavFrame.firstChild;
               NavChild != null;
               NavChild = NavChild.nextSibling
           ) {
           if (NavChild.className == 'NavPic') {
               NavChild.style.display = 'none';
           }
           if (NavChild.className == 'NavContent') {
               NavChild.style.display = 'none';
           }
           if (NavChild.className == 'NavToggle') {
               NavChild.firstChild.data = NavigationBarShow;
           }
       }

	// se nascosto ora
   } else if (NavToggle.firstChild.data == NavigationBarShow) {
       for (
               var NavChild = NavFrame.firstChild;
               NavChild != null;
               NavChild = NavChild.nextSibling
           ) {
           if (NavChild.className == 'NavPic') {
               NavChild.style.display = 'block';
           }
           if (NavChild.className == 'NavContent') {
               NavChild.style.display = 'block';
           }
           if (NavChild.className == 'NavToggle') {
               NavChild.firstChild.data = NavigationBarHide;
           }
       }
   }
}
// aggiunge i pulsanti "mostra/nascondi" alle barre di navigazione
function createNavigationBarToggleButton()
{
   var indexNavigationBar = 0;
	// ripeti per tutti gli elementi <div>
   for(
           var i=0; 
           NavFrame = document.getElementsByTagName("div")[i]; 
           i++
       ) {
	// se si trova una barra di navigazione
       if (NavFrame.className == "NavFrame") {

           indexNavigationBar++;
           var NavToggle = document.createElement("a");
           NavToggle.className = 'NavToggle';
           NavToggle.setAttribute('id', 'NavToggle' + indexNavigationBar);
           NavToggle.setAttribute('href', 'javascript:toggleNavigationBar(' + indexNavigationBar + ');');

           var NavToggleText = document.createTextNode(NavigationBarHide);
           NavToggle.appendChild(NavToggleText);

  	// aggiunge un pulsante "NavToggle" come primo elemento del div 
  	// in < div class="NavFrame" >
           NavFrame.insertBefore(
               NavToggle,
               NavFrame.firstChild
           );
           NavFrame.setAttribute('id', 'NavFrame' + indexNavigationBar);
       }
   }
	// se si trovano più barre di navigazione rispetto a Default: nascondi tutte
   if (NavigationBarShowDefault < indexNavigationBar) {
       for(
               var i=1; 
               i<=indexNavigationBar; 
               i++
       ) {
           toggleNavigationBar(i);
       }
   }

}
$(document).ready(createNavigationBarToggleButton);


/*
	addCharSubsetMenu: genera i menu a tendine nella sezione di modifica delle pagine.
	L'ordine della lista deve corrispondere a quello di MediaWiki:Edittools !
*/
function addCharSubsetMenu() {
  var specialchars = document.getElementById('specialchars');

  if (specialchars) {
    var menu = "<select style=\"display:inline\" onChange=\"chooseCharSubset(selectedIndex)\">";
    menu += "<option>Simboli</option>";
    menu += "<option>Latino esteso</option>";
    menu += "<option>Greco antico</option>";
    menu += "<option>Greco moderno</option>";
    menu += "<option>Cirillico</option>";
    menu += "<option>Arabo</option>";
    menu += "<option>Ebraico e yiddish</option>";
    menu += "<option>Armeno</option>";
    menu += "<option>Geroglifico</option>";
    menu += "<option>Vietnamita</option>";
    menu += "<option>IPA</option>";
    menu += "<option>Matematica</option>";
    menu += "</select>";
    specialchars.innerHTML = menu + specialchars.innerHTML;

    /* default subset - try to use a cookie some day */
    chooseCharSubset(0);
  }
}
/* select subsection of special characters */
function chooseCharSubset(s) {
  var l = document.getElementById('specialchars').getElementsByTagName('p');
  for (var i = 0; i < l.length ; i++) {
    l[i].style.display = i == s ? 'inline' : 'none';
    l[i].style.visibility = i == s ? 'visible' : 'hidden';
  }
}
addOnloadHook(addCharSubsetMenu);


/*
   Funzioni varie di Alex brollo, con la complicità di FiloSottile e Candalua, per gestire la semantizzazione dei 
   contenuti di alcuni template in ns0 e in nsAutore e per eseguire modifiche automatiche in questi namespace e 
   anche nei namespace Pagina e Indice
*/ 
// elabora al volo il testo un attimo dopo il caricamento
function elabNs0() {
     var editbox = document.getElementsByName('wpTextbox1')[0];

     //nasconde l'area dati (il ciclo serve a trovare eventuali aree dati duplicate)
     areaDati = find_stringa(editbox.value, "<!-- Area dati:", "a qui -->", true, "");
     while (areaDati != "") {
         editbox.value = editbox.value.replace(areaDati,"");
         areaDati = find_stringa(editbox.value, "<!-- Area dati:", "a qui -->", true, "");
     }

     //nasconde il Conteggio pagine
     editbox.value = editbox.value.replace("{{Conteggio pagine|[[Speciale:Statistiche]]}}", "");
}
 
function verificaPagina() {
       var editbox = document.getElementsByName('wpTextbox1')[0];
       editbox.value = editbox.value.replace(/—/g,"— ")
          .replace(/—\ \ /g,"— ");

       aggiungiSal();
       if (wgPageName.indexOf("Pagina:La_Sacra_Bibbia_(Diodati_1885).djvu")==0) {bibbia1();}
}

// eliminazione section versetti in apertura pagina
$(document).ready( function () {
       if (wgPageName.indexOf("Pagina:La_Sacra_Bibbia_(Diodati_1885).djvu")==0)                           
       {bibbia2();}
       })

function verificaIndice() {
       var editbox = document.getElementsByName('wpTextbox1')[0];
       editbox.value = editbox.value.replace("—","— ").replace("—  ","— ");
       editbox.value=areaDati+editbox.value;
}
function verificaNs0() {
       var editbox = document.getElementsByName('wpTextbox1')[0];

       //controlla che la pagina contenga il template:Qualità (se non è una pagina di disambigua o un redirect o la pagina principale o una sezione di pagina)
       if (editbox.value.search(/\{\{[Qq]ualità\|/) == -1
              && editbox.value.search(/\{\{[Dd]isambigua/) == -1  
              && editbox.value.search(/#RINVIA/) == -1
              && editbox.value.search(/#REDIRECT/) == -1
              && wgTitle.search(/Pagina principale/) == -1
              && $('[name=wpSection]').val() != undefined && $('[name=wpSection]').val() == '' ) {
              alert("Si prega di assegnare una qualità alla pagina, selezionando una delle icone qualità in basso");
              return false;
       }

       //compila automaticamente il campo "URL della versione cartacea a fronte" se è vuoto ma c'è un tag pages
       if (editbox.value.search(/<pages index=\".*?\"/) != -1 && 
         editbox.value.search(/URL della versione cartacea a fronte\s*=\s*\n/) != -1) {
            m = editbox.value.match(/<pages index=\"(.*?)\"/); 
            editbox.value = editbox.value.replace(/URL della versione cartacea a fronte\s*=\s*\n/, "URL della versione cartacea a fronte =Indice:" + m[1] + "\n");
       }

       editbox.value = editbox.value.replace("—","— ").replace("—  ","— ");

       //funzione importata da Mediawiki:Areadati.js
       creaAreaDatiNs0();
}
function verificaAutore() {
       var editbox = document.getElementsByName('wpTextbox1')[0];
       editbox.value = editbox.value.replace("—","— ").replace("—  ","— ");

       //funzione importata da Mediawiki:Areadati.js
       creaAreaDatiAutore();
}

// predisposizione variabile areaDati  e routine di pre-elaborazione al caricamento della pagina di edit
areaDati="valore iniziale di areadati";

 
function elabNs0_onEdit(){
   // Solo ns0, Autore o Discussioni indice e edit
   if ( ( wgNamespaceNumber != 0 && wgNamespaceNumber != 102 && wgNamespaceNumber != 111) || !document.getElementById('wpTextbox1') ) return; 

   elabNs0();
}
addOnloadHook(elabNs0_onEdit);


function impostaBottoni(fun) {
	var saveButton = document.getElementById("wpSave");
	var previewButton = document.getElementById("wpPreview");
	var diffButton = document.getElementById("wpDiff");
	if (saveButton) {
		saveButton.onclick = fun;
		previewButton.onclick = fun;
		diffButton.onclick = fun;
	} 
}


// predisposizione per collegamento verifica() all'evento onSubmit
$(document).ready( function () {
       if (wgCanonicalNamespace == "Pagina")                  { impostaBottoni(verificaPagina);   }
       else if (wgCanonicalNamespace == "")                   { impostaBottoni(verificaNs0);      }
       else if (wgCanonicalNamespace == "Indice")             { impostaBottoni(proofreadpage_fill_index_IT);   }
       else if (wgCanonicalNamespace == "Discussioni_indice") { impostaBottoni(verificaIndice);   }
       else if (wgCanonicalNamespace == "Autore")             { impostaBottoni(verificaAutore);   }
})

function produciLista(testo, s1, s2, delim, x) {
    lista = new Array();
    while (find_stringa(testo, s1, s2, delim, x) > "") {
        elemento = find_stringa(testo, s1, s2, delim, x);
        testo = testo.replace(elemento, "");
        if (delim) {
            lista.push(elemento);
        } 
        else {
            lista.push(elemento.slice(s1.length, - s2.length));
        }
    }
    return lista;
} 
/* 
Ricerca nella stringa testo la sottostringa che inizia con idi e termina con idf.  (idi e idf sono stringhe).

Se dc ("delimitatori compresi") è 1, restituisce la sottostringa completa di idi e idf; se dc è 0, restituisce la stringa
senza delimitatori; parametro opzionale con default 0.
Per risolvere correttamente il caso di ricerca di tag annidati, come i template, in cui l'identificatore iniziale ha una 
parte non aspecifica, e una parte specifica, può essere passato un quinto parametro, che definisce  la parte aspecifica dell'identificatore iniziale.

Esempio: volendo ottenere l'intero contenuto del template {{centrato|{{sc|Testo di prova}}|l=18em}}, il risultato corretto
NON proviene dalla ricerca find_stringa("{{centrato|","}}",1), perchè sarebbe {{centrato|{{sc|Testo di prova}}. 
Impostando invece find_stringa("{{centrato|","}}",1,"{{"), visto che "{{" è la parte aspecifica del primo delimitatore,
si ottiene il risultato corretto, a prescindere dal numero dei template annidati. 

Se la sottostringa non viene trovata, la funzione restituisce una stringa vuota "". 

*/
function find_stringa(testo, idi, idf, dc, x) {
   idip = testo.indexOf(idi);         
   idfp = testo.indexOf(idf, idip + idi.length) + idf.length; 
   if (idip > -1 && idfp >- 1) {
        if (x!="") {
            while (count(testo.slice(idip, idfp),x) > count(testo.slice(idip, idfp), idf)) {
                idfp=testo.indexOf(idf, idfp) + idf.length;
            }                
        }
        if (dc == 0) {
             vvalore = testo.slice(idip + idi.length, idfp - idf.length);
        }
        else {
            vvalore = testo.slice(idip, idfp);
        }
   }
   else {
       vvalore="";
   }
   return vvalore;
}

/* Fine funzioni Alex

*/



/* Adattamento da http://wikisource.org/wiki/MediaWiki:OCR.js
 * per far comparire il bottone OCR anche sulla nuova barra degli strumenti "avanzata"
 */
function addOCRButton2New(id,comment,source,onclick) {
 
	var new_tb  = document.getElementById("wikiEditor-ui-toolbar"); 
	if(new_tb) {
		var group = new_tb.childNodes[0].childNodes[1];
                var image = document.createElement("img");
		image.width = 46;
		image.height = 22;
		image.border = 0;
		image.className = "mw-toolbar-editbutton";
		image.style.cursor = "pointer";
		image.alt = "OCR";
		image.title = comment;
		image.src = source;
		image.onclick = onclick;
		group.appendChild(image);
        }
}
 
function addOCRButtonNew(){
 
    if(!self.proofreadPageIsEdit) return;
    if(!self.proofreadPageViewURL) return;
 
    addOCRButton2New("wpOcr","Get the text by OCR","//upload.wikimedia.org/wikipedia/commons/e/e0/Button_ocr.png",add_ocr);
 
}
 
if(!self.proofreadpage_disable_ocr) hookEvent("load",addOCRButtonNew);



/* modifica la casella di ricerca in alto a destra
 * per cercare di default sia in ns0 che in Autore:
 */
addOnloadHook(function () {
    var searchButton = document.getElementById('searchButton');
    if (!searchButton) return;
 
    var searchNs0Hidden = document.createElement('input');
    searchNs0Hidden.id = 'searchNs0Hidden';
    searchNs0Hidden.type = 'hidden';
    searchNs0Hidden.name = 'ns0';
    searchNs0Hidden.value = '1';
 
    var searchNs102Hidden = document.createElement('input');
    searchNs102Hidden.id = 'searchNs102Hidden';
    searchNs102Hidden.type = 'hidden';
    searchNs102Hidden.name = 'ns102';
    searchNs102Hidden.value = '1';
 
    searchButton.parentNode.insertBefore(searchNs0Hidden, searchButton);
    searchButton.parentNode.insertBefore(searchNs102Hidden, searchButton);
});

/* OCR automatico alla creazione di una nuova Pagina
Aggiungo valutazione automatica prosa/poesia
 */
function postOCRAutomatico() {
  if (wgCanonicalNamespace == "Pagina" && wgAction == "edit" && wgArticleId == 0) {
    var editbox = document.getElementsByName('wpTextbox1')[0];
    editbox.value = editbox.value.replace(/'/g, '’')
    .replace(/’’’/g, '\'\'\'')
    .replace(/’’/g, '\'\'')
    .replace(/ \n/g, '\n')
    .replace(/-\n/g, '')
    .replace(/- \n/g, '')
    .replace(/- /g, '― ')
    .replace(/ì’/g, 'l’')
    .replace(/ deir /g, ' dell’')
    .replace(/ air /g, ' all’')
    .replace(/ neir /g, ' nell’') 
    .replace(/ perche /g, ' perchè ')
    .replace(/ poiche /g, ' poichè ')
    .replace(/ piu /g, ' più ')
    .replace(/([bcdfghlmnprstvzBCDFGHLMNPRSTV])’ /g, '$1’')
    .replace(/eh’/g, 'ch’')
    .replace(/\s+$/, '');

    //inserisce un a capo all'inizio del footer (per il bug 26028)
    footer = $('[name=wpFooterTextbox]')
    if ( !footer.val().match(/^\n/) ) {
        footer.val( '\n' + footer.val() );
    }
  }
}
$(document).ready(postOCRAutomatico);



/* Versione leggermente modificata della stessa funzione presente su l'estension ProofreadPage
 * questa in più crea un'area dati al salvataggio (delle pagine Indice)
 *
 * based on the same function from proofread_index.js written by ThomasV
 * http://wikisource.org/w/extensions/ProofreadPage/proofread_index.js
 */
function proofreadpage_fill_index_IT() {
	var form = document.getElementById( 'editform' );
	var result = '{{:MediaWiki:Proofreadpage_index_template';
	var index_attributes = self.prp_index_attributes.split( '\n' );
 
	//inizio area dati
	var textdata = '<!-- Area dati: non modificare da qui: --><includeonly><div style="display:none">';

	//se Titolo e TitoloOriginale sono uguali a NomePagina, mettili vuoti
	var nomePagina = $("#editform input[name=NomePagina]").val();
	if ($("#editform input[name=Titolo]").val() == nomePagina) { $("#editform input[name=Titolo]").val(""); }
	if ($("#editform input[name=TitoloOriginale]").val() == nomePagina) { $("#editform input[name=TitoloOriginale]").val(""); }

	for( i = 0; i < index_attributes.length; i++ ) {
		m = index_attributes[i].split( '|' );
		param_name = m[0];
 
		value = form.elements[param_name].value;
		// remove trailing \n
		value = value.replace( /\n$/, '' );
 
		// replace pipe symbol everywhere...
		value = value.replace( /\|/g, '{{!}}' );
 
		// ...except in links...
		do {
			prev = value;
			value = value.replace( /\[\[(.*?)\{\{!\}\}(.*?)\]\]/g, '[[$1|$2]]' );
		} while ( value != prev );
 
		// ..and in templates
		do {
			prev = value;
			value = value.replace( /\{\{(.*?)\{\{!\}\}(.*?)\}\}/g, '{{$1|$2}}' );
		} while ( value != prev );

		result = result + '\n|' + param_name + '=' + value;
 
		//area dati
                if (value.trim() != "") { 
                    textdata = textdata + '<section begin="' + param_name + '"/>' + value.trim().replace(/\{\{!\}\}/g, '|') + '<section end="' + param_name + '"/>\n';
                }
	}
 
	//fine area dati 
	textdata = textdata + '</div></includeonly><!-- a qui -->';
 
	result = result + "\n}}";
 
	//area dati
 	result = textdata + result;
 
	form.elements['wpTextbox1'].value = result;
}
/***************
La funzione codifica() riceve un testo markup wiki e restituisce un testo "puro" e una lista ordinata degli elementi
che vanno protetti da replace() pena l'interruzione di link ecc. 
 
ATTENZIONE: funzione in fase di test
 
**************/
function codifica(testo) {
var l=[];
var res=ss(testo,l,"<math","</math>","");
res=ss(res[0],res[1],"<!--","-->","<");
res=ss(res[0],res[1],"{","}","{");
res=ss(res[0],res[1],"[","]","[");
res=ss(res[0],res[1],"<",">","<");
res=ss(res[0],res[1],"http://"," ","");
return res;
}
 
function ss(testo,l,tagi,tagf,x) { 
    while (find_stringa(testo,tagi,tagf,1)>"") {
        var el=find_stringa(testo,tagi,tagf,1,tagi); 
        testo=testo.replace(el, "###el"+l.length+"###"); 
        l.push(el);} 
    return [testo,l]; } 
/***************
La funzione decodifica() riceve un testo codificato e la lista degli elementi protetti e restituisce un testo con gli elementi protetti risistemati al loro posto; è complementare a codifica()
**************/
function decodifica(testo,l) {
    for (i=l.length-1; i>-1; i=i-1) {
       testo=testo.replace("###el"+i+"###",l[i]);
       }
    return testo;
}

/* Sostituisce tutti gli apostrofi dattilografici in tipografici, ma rispetta gli apostrofi di marckup wiki e gli apostrofi
contenuti in: math, {{{}}}, {{}}, [[]], [], http:..... */

function apostrofi(editbox) {
  if (editbox==undefined) {var editbox = document.getElementsByName('wpTextbox1')[0];}
      var testoCod=codifica(editbox.value);
      testoCod[0] = testoCod[0].replace(/'/g, '’').replace(/’’’/g, '\'\'\'').replace(/’’/g, '\'\''); 
      editbox.value=decodifica(testoCod[0],testoCod[1]);
}



//messaggio custom vicino ai bottoni qualità in ns Pagina
$(document).ready(function() {
    var s = $("div.editCheckboxes > span");
    if (s.html()) {
       s.html(s.html().replace("Status della pagina", '<a href="/wiki/Aiuto:Stato_di_Avanzamento_del_Lavoro" target="_blank">Cosa significano le icone?</a> &middot; <a href="/wiki/Aiuto:Qualità_dei_testi/Percorso_guidato" target="_blank">Percorso guidato</a>'));
    }
    $("div.editCheckboxes span span.quality0").attr("title", "Pagina senza testo da trascrivere (0%)");
    $("div.editCheckboxes span span.quality1").attr("title", "Pagina incompleta (25%)");
    $("div.editCheckboxes span span.quality2").attr("title", "Pagina completa, ma da formattare (50%)");
    $("div.editCheckboxes span span.quality3").attr("title", "Pagina completa e formattata, da rileggere (75%)");
    $("div.editCheckboxes span span.quality4").attr("title", "Pagina riletta (100%)");

    //ri-settiamo il checked sul bottone giusto, che con l'html().replace di cui sopra viene perso
    if (document.editform && document.editform.quality) {
        switch( self.proofreadpage_quality ) {
            case 4:
                document.editform.quality[4].checked = true;
                break;
            case 3:
                document.editform.quality[3].checked = true;
                break;
            case 1:
                document.editform.quality[2].checked = true;
                break;
            case 2:
                document.editform.quality[1].checked = true;
                break;
            case 0:
                document.editform.quality[0].checked = true;
                break;
        }
    }
});

// FUNZIONI PER INGRANDIRE/RIMPICCIOLIRE IL CARATTERE DEI TESTI
//dimensione di default 100%
var dimensioneCarattere = 100;

function ingrandisciCarattere() {
  if (dimensioneCarattere < 200) dimensioneCarattere += 10;
  $("#box_esterno").css("font-size", dimensioneCarattere+"%");
  $("#compare2 #box_esterno").css("font-size", dimensioneCarattere+"%");
}

function riduciCarattere() {
  if (dimensioneCarattere > 50) dimensioneCarattere -= 10;
  $("#box_esterno").css("font-size", dimensioneCarattere+"%");
  $("#compare2 #box_esterno").css("font-size", dimensioneCarattere+"%");
}

if (wgNamespaceNumber == 0 && $("#box_esterno").length > 0) {
 $(document).ready( function() {
  var d = '<div class="noprint" style="position:fixed; right:0px; z-index:2"><a href="javascript:ingrandisciCarattere()"><img src="//upload.wikimedia.org/wikipedia/commons/3/30/Farm-Fresh_magnifier_zoom_in.png" title="Ingrandisci carattere" alt="Ingrandisci carattere" /></a> <a href="javascript:riduciCarattere()"><img src="//upload.wikimedia.org/wikipedia/commons/e/ea/Farm-Fresh_magnifier_zoom_out.png" title="Riduci carattere" alt="Riduci carattere" /></a></div>';
  $("#jump-to-nav").before(d);
 });
}

// FIX PROBLEMA DI VISUALIZZAZIONE NUMERI DI RIGA IN INTERNET EXPLORER 7
// sposta lo span.numeroriga da così: <br/>&#160;&#160;<span>...</span>restodeltesto.... 
// a così: <br/><span>...</span>&#160;&#160;testotestotesto....
// altrimenti su IE7 lo span cade sulla riga successiva al testo
if ( $.browser.msie ) {
  $(document).ready( function() {
    $("span.numeroriga").each( function(index) {
      $(this).insertAfter( $(this).prev() );
    });
  });
}

// Autofocus nel campo "ricerca" della homepage
$(document).ready( function ()
{
  if (window.mediaWiki &&
      mediaWiki.config.get("wgNamespaceNumber") == 0 &&
      mediaWiki.config.get("wgPageName") == "Pagina_principale" &&
      mediaWiki.config.get("wgAction") == "view")
    document.getElementById("searchInput").focus();
});

/* La funzione restituisce testo, in cui tutte le istanze di a sono sostituite con b, esattamente come il metodo .replace() di python.
Nel caso in cui a==b oppure a=="" restituisce testo immodificato 
Nota: testo,a,b sono di tipo stringa */
function replaceAll(testo,a,b) {
     if (a==b) return testo;
     if (a=="") return testo;
     if (testo.count(a)==0) return testo;
     if (testo.count(a)==1) {testo=testo.replace(a,b);return testo;}
     while (testo.indexOf(a)>-1) {
          testo=testo.replace(a,b);}
      return testo;
      }

//pezza per la toolbar della casella di modifica in nsPagina: 
//su schermi stretti o con font ingrandito i comandi vanno a capo e quindi escono dal contenitore
$(document).ready( function () {
  $('.wikiEditor-ui-toolbar div').css('height', 'auto');
});

//link "Scarica come ePub" nel menu a sx
if ( $('#box_esterno').length > 0 ) {
  $(document).ready( function () {
      mw.util.addPortletLink('p-coll-print_export', '//toolserver.org/~tpt/wsexport/book.php?lang=it&format=epub&page=' + mw.config.get('wgPageName'), 'Scarica come ePub', 'n-epubExport', 'Scarica in formato ePub', '', '#t-print'); 
   });
}
/* </pre> */