Nota: dopo aver pubblicato, potrebbe essere necessario pulire la cache del proprio browser per vedere i cambiamenti.

  • Firefox / Safari: tieni premuto il tasto delle maiuscole Shift e fai clic su Ricarica, oppure premi Ctrl-F5 o Ctrl-R (⌘-R su Mac)
  • Google Chrome: premi Ctrl-Shift-R (⌘-Shift-R su un Mac)
  • Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
  • Opera: premi Ctrl-F5.
// due funzioni importanti per gestire bene i lemmi

// trasforma un testo qualsiasi in un oggetto XXX composto da tre liste (lista dei lemmi; lista dei caratteri interposti ai lemmi;lista dei tags html) e da un flag 0/1
function splitta(testo) {
   
   var lista={};
   lista.tags=produciLista(testo,"<",">",1);
   for (i=0;i<lista.tags.length;i+=1) {testo=testo.replace(lista.tags[i],"<!!!>");}
   testo=replaceAll(testo,"&nbsp;","[]");
   
   lista.parole=testo.split(/[\.\ \,\ \;\:\-\_\"\n\t\)\(\/\d\}\{\[\]\*\?\%\!\>\<\=\|\!\?]+/g);
   lista.punteggiatura=testo.split(/[^\.\ \,\ \;\:\-\_\"\n\t\)\(\/\d\}\{\[\]\*\?\%\!\>\<\=\|\!\?]+/g).join("x");
   
   lista.punteggiatura=replaceAll(lista.punteggiatura,"< >","&nbsp").split("x");
   lista.prima=(lista.parole[0]=="") ? 1 : 0;
   lista.parole=(lista.parole[0]=="") ? lista.parole.slice(1) : lista.parole; lista.punteggiatura=(lista.punteggiatura[0]=="") ? lista.punteggiatura.slice(1) : lista.punteggiatura;
  
   if (lista.parole.length<lista.punteggiatura.length) lista.parole.push(""); 
   if (lista.parole.length>lista.punteggiatura.length) lista.punteggiatura.push(""); 
   return lista;   
}

function desplitta(oggetto) {
     t="";
	 if (oggetto.prima==0) {
	    for (i=0;i<oggetto.parole.length;i+=1) {t+=oggetto.parole[i]+oggetto.punteggiatura[i];}
	 } else {
	    for (i=0;i<oggetto.parole.length;i+=1) {t+=oggetto.punteggiatura[i]+oggetto.parole[i];}
	 }
	 t=replaceAll(t,"[]","&nbsp;");
	 for (i=0;i<oggetto.tags.length;i+=1) {
	     t=t.replace("<!!!>",oggetto.tags[i]);
	 }
	 return t;
} 

var sostituzioni={};
var diz={};
var sost={};
diz.base="";
diz.chiudi=function() {$("#editDiz").remove();}
diz.salva=function() {
     window.localStorage.setItem(diz.base,$("#editDizBox2").val()); 
     window.localStorage.setItem(sost.base,JSON.stringify(sostituzioni)); 
     $("#editDiz").remove(); 
     dizionario=window.localStorage.getItem(diz.base).split(/, */);
     }
diz.memorizza=function() {
if (wgTitle.indexOf("Dizionario")>-1) scriviBox($("#editDizBox2").val());
if (wgTitle.indexOf("Sostituzioni")>-1) scriviBox($("#editDizBox3").val());
}
diz.unique=function (l) {
      var ll=[]; 
      $.each(l, function(idx,val) {
           if ($.inArray(val,ll)==-1 && val!="") ll.push(val);
      });
      return ll.sort();}
diz.nuove=function (l) {var ll=[];$.each(l, function(idx,val) {if ($.inArray(val,dizionario)==-1 && val!="") ll.push(val);});return ll.sort();}
diz.unisci=function () { 
          var nuove=$("#editDizBox1").val().split(/, */);
          // qui separare nuove e sostituzioni
          var dizNuove=[];
          var sostNuove=[];
          $.each(nuove, function(idx,val) {if (val.indexOf(":")==-1) {
                     dizNuove.push(val);
                     } else {
                     sostNuove.push(val);
                     }
          });
          // qui aggiornare sostituzioni  
          sostNuove=sostNuove.join(", ");
          sost.append(sostNuove);
          $("#editDizBox3").val(sost.stringify(sostituzioni));        
    

          vecchie=diz.unique(dizionario.concat(dizNuove));
          $("#editDizBox1").val("");
          $("#editDizBox2").val(vecchie.join(", "));

}
diz.parse=function () {
     var r=RegExp(String.fromCharCode(160),"g");
     if (wgCanonicalNamespace=="Page" || wgCanonicalNamespace=="") {
        if (wgAction="edit") var lista=$("#mw-content-text").text().replace(r," ").toLocaleLowerCase().split(/[\.\ \,  \;\:\-\_\"\n\t\)\(\/\d\}\{\[\]\*\?\%\!\>\<\=\►\◄\↑\▲]+/g).sort();
        if (wgAction="submit") var lista=$(".mw-content-ltr").text().replace(r," ").toLocaleLowerCase().split(/[\.\ \,  \;\:\-\_\"\n\t\)\(\/\d\}\{\[\]\*\?\%\!\>\<\=\►\◄\↑\▲]+/g).sort();
     } 
     if (wgCanonicalNamespace=="Project" &&  wgAction=="edit") {
           var lista=leggiBox().replace(r," ").toLocaleLowerCase().split(/[\.\ \,  \;\:\-\_\"\n\t\)\(\/\d\}\{\[\]\*\?\%\!\>\<\=\►\◄\↑\▲]+/g).sort();   
     }
     lista=diz.unique(lista);
     lista=diz.nuove(lista).join(", ");
     $("#editDizBox1").val(lista);
     return lista;
}

diz.evidenziaNuove=function () {
var t1=diz.parse().split(/,\ /);
var sp=splitta($(".pagetext").html());
for (i=0;i<sp.parole.length;i+=1) {if ($.inArray(sp.parole[i].toLocaleLowerCase(),t1)!=-1) sp.parole[i]="<span style='background-color:#80FFFF'>"+sp.parole[i]+"</span>";}
$(".pagetext").html(desplitta(sp));
}
diz.predisponi=function () {
   var box=$("<div>")
         .attr("id","editDiz")
         .css({"position":"fixed",
               "display":"block",
               "z-index":"100",
               "top":"20px","left":"20px",
               "background-color":"white",
               "border":"2px solid black"})
         .append($('<p style="font-size:smaller;margin:0px; line-height:1.1em;color:blue;">parole nuove</p>'))
         .append($('<textarea rows="8" style="width:33em" id="editDizBox1"></textarea><br />'))
         .append($('<p style="font-size:smaller;margin:0px; line-height:1.1em;color:blue;">dizionario</p>'))
         .append($('<textarea rows="8" style="width:33em" id="editDizBox2"></textarea><br />'))
         .append($('<p style="font-size:smaller;margin:0px; line-height:1.1em;color:blue;">sostituzioni</p>'))
         .append($('<textarea rows="8" style="width:33em" id="editDizBox3"></textarea><br />'))
         .append($(
         '<button type="button" onclick="diz.chiudi()">Chiudi</button>'+
         '<button type="button" onclick="diz.unisci()">Unisci</button>'+
         '<button type="button" onclick="diz.salva()">Salva</button>')).draggable();
         if  (wgCanonicalNamespace=="Project" && wgAction=="edit") box.append($('<button type="button" onclick="diz.memorizza()">Salva nella pagina</button>'));
         if  (wgCanonicalNamespace=="Page" && wgAction=="edit") box.append($('<button type="button" onclick="sost.sostituisci()">Sostituisci</button>'));
   $("body").append(box);
   $("#editDizBox2").val(dizionario.join(", "));
   $("#editDizBox3").val(sost.stringify(sostituzioni));
      diz.parse();
   
}

// sostituzione
sost.sostituisci=function() {
   var testo=splitta(leggiBox());
   $.each(testo.parole, function(ind,val) {if (sostituzioni[val]!=undefined) testo.parole[ind]=sostituzioni[val];});
   scriviBox(desplitta(testo));
}

// da t tipo aaa:aab, bbb:bbc, aggiorna un dizionario 
sost.append=function (t) { 
   var t=t.split(/, */);
   
   $.each(t,function(idx,val) {
   
   var v1=$.trim(val.split(":")[0]);
   var v2=$.trim(val.split(":")[1]);
   if (sostituzioni[v1]==undefined) sostituzioni[v1]=v2;
   });
   }
// ritrasforma un dizionario s in una stringa tipo aaa:aab, bbb:bbc, ....
sost.stringify = function (s) {
var t=[];
$.each(s, function(key,val) {t.push(key+":"+val);});
t=t.join(", ");
return t;
}

// attivazione all'apertura del documento
$(document).ready(function () {
   if (wgCanonicalNamespace=="Page" || wgCanonicalNamespace=="" || wgCanonicalNamespace=="Project" ) {
      if (wgCanonicalNamespace=="") {
          diz.base=$("a[class*='prp-']").attr("title").replace("Pagina:","").split("/")[0]+":dizionario";
          }
      else {
          diz.base=wgTitle.split("/")[0]+":dizionario";
          }
          sost.base=diz.base.replace(":dizionario",":sostituzioni");
      if (window.localStorage.getItem(diz.base)==undefined) {
           dizionario=[];
           } else {
           dizionario=window.localStorage.getItem(diz.base).split(/, */);
           }
      if (window.localStorage.getItem(sost.base)==undefined) {
           sostituzioni={};
           } else {
           sostituzioni=JSON.parse(window.localStorage.getItem(sost.base));
           }
      newButton("diz","diz.predisponi()","evs");
      newButton("nuove","diz.evidenziaNuove()","vs");
      
   }
});