Vai al contenuto

MediaWiki:ParseIndice.js

Da Wikisource.

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);
}