MediaWiki:ParseIndice.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.
function parseIndice(base) {
// base="Opere di Niccolò Machiavelli VI.djvu";
if (base===undefined && mw.config.get("wgPageName").indexOf("Modulo:Dati/")===0) base=mw.config.get("wgPageName").replace("Modulo:Dati/","");
var pdxpc = []; // pdxpc è una lista semplice in cui la pagina djvu è l'indice
var pd = ""; // pd è pagina djvu
var pc = ""; // pc è pagina cartacea
var d2b={}; // oggetto corrispondente a d2b Lua
// lettura dell'html della pagina Indice corrispondente a base
html = $.ajax({
url: "/w/index.php?action=render&title=Indice:" + escape(base),
async: false
}).responseText;
// estrazione della lista dei link alle pagine
links = $(".pagineDellEdizione a", $(html)); //
// estrazione di pd e pc dai link e assegnazione a una lista in cui l'indice è pd e il valore è pc
for (i = 0; i < links.length; i += 1) {
pd = eval($(links[i]).attr("title").match(/\/(\d+) */)[1]);
pc = $.trim($(links[i]).text().match(/^0*(.+)/)[1]);
pdxpc[pd] = pc;
}
// la lista viene popolata con stringhe vuote se vi sono dei "buchi" e caricamento in d2b
for (i = 1; i < pdxpc.length - 1; i += 1) {
if (pdxpc[i] === undefined) pdxpc[i] = "";
d2b[i]=pdxpc[i];
}
//salvo d2b in formato JSON
//mw.pageSave(mw.config.get("wgPageName")+"/json", JSON.stringify(d2b),"Dati pagelist in formato JSON");
//
// si costruisce una stringa testo che rappresenta lo script Lua
// (vedi test in [[Modulo:Dati/Opere di Niccolò Machiavelli VI.djvu]])
testo = "local d2b = {}\nlocal b2d = {}\nlocal pagine = {}\n";
for (i = 1; i < pdxpc.length; i += 1) {
testo += "d2b[" + i + "]=\"" + pdxpc[i] + "\"\n";
}
testo += "for i,v in ipairs(d2b)\n do\n b2d[v]=i\n end\n";
/* ATTENZIONE
Volendo usare i dati inseriti in data-toc-data tenere presente che sono codificati con urlencode:stringa|PATH
e vanno decodificati con l'istruzione:
x=JSON.parse(decodeURIComponent($(".toc-data").eq(0).data("toc-data")))
*/
// il testo viene scritto nella pagina (Modulo:Dati/base) in edit
// Importante: disattivare la modalità di edit speciale
s=parseSommario(base);
for (i=0;i<s.length-1;i+=1) {
s[i].to=s[i+1].from-1;
}
s[s.length-1].to=pdxpc.length-1;
testo+="local cap={}\n";
testo+="local i=1\n";
for (i=0;i<s.length;i+=1) {
testo+='cap['+(i+1)+']={}\n';
testo+='cap['+(i+1)+'].nome="'+s[i].nome+'"\n';
testo+='cap['+(i+1)+'].titolo="'+s[i].titolo+'"\n';
testo+='cap['+(i+1)+'].from='+s[i].from+'\n';
testo+='cap['+(i+1)+'].to='+s[i].to+'\n';
testo+='cap['+(i+1)+'].delta="'+s[i].delta+'"\n';
}
var d=$(".ourDiv").data("indexData")[0];
testo+="local indexData={}\n";
testo+='indexData.autore="'+d["Autore"]+'"\n';
testo+='indexData.nomepagina="'+d["NomePagina"]+'"\n';
testo+='indexData.titolo="'+d["Titolo"]+'"\n';
testo+='indexData.anno="'+d["Anno"]+'"\n';
testo+='indexData.editore="'+d["Editore"]+'"\n';
testo+='indexData.citta="'+d["Città"]+'"\n';
testo+='indexData.progetto="'+d["Progetto"]+'"\n';
testo+='indexData.traduttore="'+d["Traduttore"]+'"\n';
testo+='indexData.curatore="'+d["Curatore"]+'"\n';
testo+='indexData.fonte="'+d["Fonte"]+'"\n';
testo+="local infodata={}\n";
testo += "pagine.d2b=d2b\npagine.b2d=b2d\npagine.cap=cap\npagine.indexData=indexData\nreturn pagine";
testo+="\n--[["+JSON.stringify(d2b)+"]]";
scriviBox(testo);
}