MediaWiki:Gadget-ModuloDati.js
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.
if (mw.config.get("wgCanonicalNamespace")==="Index" && mw.config.get("wgAction")==="view") {
function parseIndice(base) {
// base="Opere di Niccolò Machiavelli VI.djvu";
if (base===undefined && mw.config.get("wgPageName").indexOf("Indice:")===0) base=mw.config.get("wgPageName").replace("Indice:","");
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:" + encodeURI(base)+"&r="+Math.random(),
async: false
}).responseText;
//console.log(html);
// estrazione della lista dei link alle pagine
links = $(".pagineDellEdizione a", $(html)); //
//console.log(links);
// 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;
}
//console.log(pdxpc);
// 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";
// console.log(testo);
/* 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(encodeURI(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';
// prova fix doppie virgolette
if (s[i].nome.indexOf('"')===-1)
{testo+='cap['+(i+1)+'].nome="'+s[i].nome+'"\n';}
else
{testo+='cap['+(i+1)+'].nome=[['+s[i].nome+']]\n';}
if (s[i].nome.indexOf('"')===-1)
{testo+='cap['+(i+1)+'].titolo="'+s[i].titolo+'"\n';}
else
{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)+"]]";
// console.log(testo);
// qui inserire scrittura remota in Modulo:Dati/
new mw.Api().postWithToken( 'edit', {
action: 'edit',
title: "Modulo:Dati/"+base,
summary:"Creazione/aggiornamento di Modulo:Dati",
text: testo,
}).done(function( data ) {
if ( data && data.edit && data.edit.result === 'Success' ) {
alert("OK, Modulo:Dati/" + base+ " salvata");
} else {
alert("Errore nel salvataggio della pagina");
}
});
}
mw.util.addPortletLink(
'p-tb',
"#",
'ModuloDati',
't-moduloDati',
'Aggiornamento modulo dati'
);
$("#t-moduloDati").click(function(event) {event.preventDefault(); parseIndice();})
}