Utente:Alex brollo/dizionari.js
Aspetto
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)
- Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure 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," ","[]");
lista.parole=testo.split(/[\.\ \,\ \;\:\-\_\"\n\t\)\(\/\d\}\{\[\]\*\?\%\!\>\<\=\|\!\?]+/g);
lista.punteggiatura=testo.split(/[^\.\ \,\ \;\:\-\_\"\n\t\)\(\/\d\}\{\[\]\*\?\%\!\>\<\=\|\!\?]+/g).join("x");
lista.punteggiatura=replaceAll(lista.punteggiatura,"< >"," ").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,"[]"," ");
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");
}
});