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