MediaWiki:Gadget-Tools.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)
  • Internet Explorer / Edge: tieni premuto il tasto Ctrl e fai clic su Aggiorna, oppure premi Ctrl-F5
  • Opera: premi Ctrl-F5.
// <nowiki>
$(document).ready(function() { 
	// pone sal0 e salva la pagina con un click; chiede se azzerare il testo eventualmente presente
	sal0 = function() {
		var testo = leggiBox();
		if ($.trim(testo) !== "") {
			var remove = prompt("Cancello il contenuto? s=SI, n=NO");
			if (remove === "s") testo="";
		}
		scriviBox(testo);
		$(".quality0 input").click();
		$("#wpSave").click();
		$("#handle button[title='Salva le modifiche']").click();
	};
	
	// funzione per aggiungere colonne a colonne 
	append = function() { 
		if (selection()[1].length > 0) {
			mw.a=selection(); // si memorizza in a gli elementi da aggiungere
			scriviBox(mw.a[0]+mw.a[2]);
			return;
		}
		else {
			mw.b=selection();
			mw.a[1]=mw.a[1].split("\n");
			mw.b[2]=mw.b[2].split("\n");
			$.each(mw.a[1],function(index,value) {
				mw.b[2][index]=mw.b[2][index]+"||"+value;
			});
			mw.b[2]=mw.b[2].join("\n");
			scriviBox(mw.b.join(""));
		}
	};
	
	/* 
	// restituisce document.activeElement e una lista di tre stringhe che rappresentano il testo dell'elemento 
	// suddiviso in base alla selezione (pre, selezione, post)
	
	function sel() {
	    var elemento=document.activeElement;
		var ss=elemento.selectionStart;
		var se=elemento.selectionEnd;
		var contenuto=elemento.value;
		var s=[contenuto.substring(0,ss),contenuto.substring(ss,se),contenuto.substring(se)];
		return [elemento, s];
	}
	*/
	
	// funzione di "incapsulamento" basata su sel()
	incaps = function(pre,post) {
		var s=sel();
		var testo=s[1][0]+pre+s[1][1]+post+s[1][2];
		s[0].value=testo;
	};
	
	// divide la pagina in due section s1 e s2, oppure una section s2 in una s2 e s3, usando come punto di separazione
	// la posizione del puntatore. Usa sel() 
	newSections = function() {
		var s=sel();
		if (s[1][2].indexOf('<section end="s2" />')===-1) {
			s[1][0]='<section begin="s1" />'+s[1][0]+'<section end="s1" />';
			s[1][2]='<section begin="s2" />'+s[1][2]+'<section end="s2" />'; 
		}
		else {
			s[1][0]=s[1][0]+'<section end="s2" />';
			s[1][2]='<section begin="s3" />'+s[1][2].replace('<section end="s2" />','<section end="s3" />');    
		}
		s[0].value=s[1][0]+s[1][1]+s[1][2];
		return;
	};
	
	/* conta il numero di occorrenze di stringa dentro testo*/
	count = function(testo, stringa) {
		n = 0;
		while (testo.indexOf(stringa) > -1) {
			n = n + 1;
			testo = testo.replace(stringa, "");
		}
		return n;
	};
	
	find_stringa = function(testo, idi, idf, dc, x) {
		idip = testo.indexOf(idi);
		idfp = testo.indexOf(idf, idip + idi.length) + idf.length;
		if (idip > -1 && idfp > -1) {
			if (x !== "") {
				while (count(testo.slice(idip, idfp), x) > count(testo.slice(idip, idfp), idf)) {
					idfp = testo.indexOf(idf, idfp) + idf.length;
				}
			}
			if (dc === 0) {
				vvalore = testo.slice(idip + idi.length, idfp - idf.length);
			} else {
				vvalore = testo.slice(idip, idfp);
			}
		} else {
			vvalore = "";
		}
		return vvalore;
	};
	
	produciLista = function(testo, s1, s2, delim, x) {
		lista = [];
		while (find_stringa(testo, s1, s2, true, x) > "") {
			elemento = find_stringa(testo, s1, s2, true, x);
			testo = testo.replace(elemento, "");
			if (delim) {
				lista.push(elemento);
			} else {
				lista.push(elemento.slice(s1.length, - s2.length));
			}
		}
		return lista;
	};
	
	/* 
	In questa pagina saranno raccolti sperimentalmente tutti gli script utilizzati dai vari tool a "chiamata libera", 
	da collegare a un pulsante, a un link, a un tattoo a scelta dell'utente. Le funzioni attivate in Preferenze 
	caricheranno solo il sistema di richiamo di default; la funzione sarà comunque attiva anche se non sarà collegata 
	a un sistema di richiamo. 
	
	I tools opera-specifici superati saranno raccolti in MediaWiki:ToolsSuperati.js
	
	*/
	
	/* importazione dei link da wikidata a showbox 
	function wikidatalinks() {
		var dati = $("body").data("wikidata").entities[$("body").data("wikidataID")], testo = "";
		testo += '<p>Link a it.wikipedia: <a href="http://it.wikipedia.org/wiki/' + dati.sitelinks.itwiki.title.replace(/ /g, "_") + '">' + dati.sitelinks.itwiki.title + "</a></p>";
		testo += '<p>Link a en.wikipedia: <a href="http://en.wikipedia.org/wiki/' + dati.sitelinks.enwiki.title.replace(/ /g, "_") + '">' + dati.sitelinks.enwiki.title + "</a></p>";
		testo += '<p>Link a fr.wikipedia:  <a href="http://fr.wikipedia.org/wiki/' + dati.sitelinks.frwiki.title.replace(/ /g, "_") + '">' + dati.sitelinks.frwiki.title + "</a></p>";
		$("#showboxContent").html(testo);
		$("#showbox").show();
	}*/
	
	dpFont = function() {
		if ($("#wpTextbox1").css("font-family") === "DPCustomMono2") $("#wpFooterTextbox,#wpHeaderTextbox,#wpTextbox1").css("font-family", "Courier");
		else {
			$("#wpFooterTextbox,#wpHeaderTextbox,#wpTextbox1").css("font-family", "DPCustomMono2");
		}
	};
	
	// creazione di una div .ourData
	($("<div class='ourDiv' style='display:none;'></div>")).appendTo($("body"));
	
	// importazione funzioni parsing di Information/Book + Creator
	// importScript("Utente:Alex brollo/ParsingHproduct.js");
	
	// Trasforma una stringa in una riga tabella (v. Trattato di archeologia - Gentile)
	// Apporre un carattere nella posizione della separazione delle celle, selezionare e cliccare
	rmak = function() {
		var t = selection();
		riga = t[1];
		riga = riga.replace("\n", " ").replace("\n", " ");
		cella = '|-\n|width="85%" class="dotted"|<span class="opaque">##</span>||align="right"|##';
		riga = cella.replace("##", riga.split("|")[0]).replace("##", riga.split("|")[1]);
		t[1] = riga;
		//scriviBox(sel.join(""));
		scriviSel(t);
	};
	
	// R-
	excludeR = function() {
	
		t = selection();
		t[1] = "::::::{"+"{R-}}" + t[1];
		scriviSel(t);
		//scriviBox(t.join(""));
	};
	
	// Elimina righe vuote. Se esiste selezione agisce solo sulla selezione (modifica 15.06.2015 Alex)
	eliminaRigheVuote = function() {
		if (selection()[1]==="") {
			t = leggiBox().split("\n");
			t1 = [];
			for (i = 0; i < t.length; i += 1) {
				if ($.trim(t[i]).length > 0) t1.push(t[i]);
			}
			scriviBox(t1.join("\n"));
		} else {
			selezione=selection();
			t=selezione[1].split("\n");		
			t1 = [];
			for (i = 0; i < t.length; i += 1) {
				if ($.trim(t[i]).length > 0) t1.push(t[i]);
			}
			selezione[1]=t1.join("\n");
			scriviBox(selezione.join(""));
		} 
		return;
	};
	
	
	// Funzioni per gesione maiuscole/minuscole
	
	capitalize = function(testo) {
		testo = testo.split(" ");
		for (var i = 0; i < testo.length; i += 1) {
			testo[i] = testo[i].substring(0, 1).toLocaleUpperCase() + testo[i].substring(1).toLocaleLowerCase();
		}
		return testo.join(" ");
	};
	
	changeCase = function(testo) {
		if (testo === testo.toLocaleUpperCase()) testo = testo.toLocaleLowerCase();
		else testo = testo.toLocaleUpperCase();
		return testo;
	};
	
	capit = function() {
		var t = selection();
		t[1] = capitalize(t[1]);
		//scriviBox(t.join(""));
		scriviSel(t);
	};
	
	up_low = function() {
		var t = selection();
		t[1] = changeCase(t[1]);
		scriviSel(t);
		//scriviBox(t.join(""), "", t[0].length, t[0].length + t[1].length);
	};
	
	// Funzioni per indentaVersi
	indentSelection = function() {
		t = selection();
		if (t[0].indexOf("\n") === -1) {
			t[1] = t[0] + t[1];
			t[0] = "";
		} else {
			pn = t[0].lastIndexOf("\n");
			t[1] = t[0].substring(pn + 1) + t[1];
			t[0] = t[0].substring(0, pn + 1);
		}
		var t1 = t[1].split("\n");
		for (var i = 0; i < t1.length; i += 1) {
			t1[i] = "     " + t1[i];
		}
		t[1] = t1.join("\n");
		//scriviBox(t.join(""), "", t[0].length, t[0].length + t[1].length);
		scriviSel(t);
	};
	
	deIndentSelection = function() {
		t = selection();
		if (t[0].indexOf("\n") === -1) {
			t[1] = t[0] + t[1];
			t[0] = "";
		} else {
			pn = t[0].lastIndexOf("\n");
			t[1] = t[0].substring(pn + 1) + t[1];
			t[0] = t[0].substring(0, pn + 1);
		}
		var t1 = t[1].split("\n");
		for (var i = 0; i < t1.length; i += 1) {
			for (j = 0; j < 5; j += 1) {
				if (t1[i].substring(0, 1) === " ") t1[i] = t1[i].substring(1);
				else break;
			}
		}
		t[1] = t1.join("\n");
		//scriviBox(t.join(""), "", t[0].length, t[0].length + t[1].length);
		scriviSel(t);
	};
	// Funzioni scovate da Samuele, "toppa" per il layout
	
	pr_fill_table = function() {
		while (self.table.firstChild) {
			self.table.removeChild(self.table.firstChild);
		}
		if (!pr_horiz) {
			var t_table = document.createElement('table');
			var t_body = document.createElement('tbody');
			var cell_left = document.createElement('td');
			var cell_right = document.createElement('td');
			t_table.appendChild(t_body);
			var t_row = document.createElement('tr');
			t_row.setAttribute('valign', 'top');
			cell_left.style.cssText = 'width:50%; padding-right:0.5em;vertical-align:top;';
			cell_right.setAttribute('rowspan', '3');
			cell_right.style.cssText = 'vertical-align:top;';
			t_row.appendChild(cell_left);
			t_row.appendChild(cell_right);
			t_body.appendChild(t_row);
			cell_right.appendChild(pr_container_parent);
			cell_left.appendChild(self.text_container);
			self.table.appendChild(t_table);
		} else {
			self.table.appendChild(self.text_container);
			form = document.getElementById('editform');
			tb = document.getElementById('toolbar');
			if (tb) {
				tb.parentNode.insertBefore(pr_container_parent, tb);
			} else if (form) {
				form.parentNode.insertBefore(pr_container_parent, form);
			} else {
				self.table.insertBefore(pr_container_parent, self.table.firstChild);
			}
		}
		if (proofreadPageIsEdit) {
			if (!pr_horiz) {
				self.DisplayHeight = Math.ceil(pr_height * 0.85);
				self.DisplayWidth = parseInt(pr_width / 2 - 70);
				css_wh = 'width:' + self.DisplayWidth + 'px; height:' + self.DisplayHeight + 'px;';
				pr_container_parent.style.cssText = 'position:relative;width:' + self.DisplayWidth + 'px;';
			} else {
				self.DisplayHeight = Math.ceil(pr_height * 0.4);
				css_wh = 'width:100%; height:' + self.DisplayHeight + 'px;';
				pr_container_parent.style.cssText = 'position:relative;height:' + self.DisplayHeight + 'px;';
			}
			self.container_css = 'position:absolute;top:0px;cursor:default; background:#000000; overflow:auto; ' + css_wh;
			pr_container.style.cssText = self.container_css;
		}
		pr_zoom(0);
	};
	if (typeof (window.innerWidth) === 'number') {
		pr_width = window.innerWidth;
		pr_height = window.innerHeight;
	} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		pr_width = document.documentElement.clientWidth;
		pr_height = document.documentElement.clientHeight;
	} else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
		pr_width = document.body.clientWidth;
		pr_height = document.body.clientHeight;
	}
	
	acd_add = {};
	
	ac_plus = function() {
		var t = selection();
		var autore = t[1];
		if (acd[autore] === undefined) {
			if (acd_add[autore] !== undefined) {
				acd[autore] = acd_add[autore];
			} else {
				autoreCompleto = prompt("Autore ignoto. Inserisci cognome e nome:", autore);
				autoreCompleto = autoreCompleto.trim();
				if (autoreCompleto === "") return;
	
				acd_add[autore] = autoreCompleto;
				acd[autore] = autoreCompleto;
				saveCookAcd();
			}
	
		}
		t[1] = "{"+"{AutoreCitato|" + acd[autore] + "|" + autore + "}}";
		//scriviBox(t.join(""));
		scriviSel(t);
	};
	
	pr_toggle_layout = function() {
		self.pr_horiz = !self.pr_horiz;
		pr_fill_table();
		pr_reset_size();
		pr_zoom(0);
	};
	
	pr_reset_size = function() {
		var box = document.getElementById('wpTextbox1');
		var h = document.
		getElementById('prp_header');
		var f = document.getElementById('prp_footer');
		if (h.style.cssText === 'display:none;') {
			box.style.cssText = 'height:' + (self.DisplayHeight - 6) + 'px';
		} else {
			if (self.pr_horiz) {
				box.style.cssText = 'height:' + (self.DisplayHeight - 6) + 'px';
			} else {
				box.style.cssText = 'height:' + (self.DisplayHeight - 6 - h.offsetHeight - f.offsetHeight) + 'px';
			}
		}
	};
	
	// Fine funzioni toggle layout
	// Crea il testo del template Intestazione (richiesto da Barbaforcuta)
	
	intestazione = function() {
		scriviBox("{"+"{Intestazione\n| Nome e cognome dell'autore =\n| Titolo = \n| Anno di pubblicazione =\n| Lingua originale del testo = \n| Nome e cognome del traduttore = \n| Anno di traduzione = \n| Progetto = \n| Argomento =\n| URL della versione cartacea a fronte =\n}}");
	};
	// Ideato da Luigi62. Produce la lista delle istanze di AutoreIgnoto nelle pagine Pagina.
	autoreIgnoto = function() {
		testo = leggiBox() + "\n<pre>\n";
		puntanoQui = JSON.parse($.ajax({
			url: "/w/api.php?action=query&format=json&list=embeddedin&eititle=Template:AutoreIgnoto&einamespace=108&eilimit=500",
			async: false
		}).responseText);
		for (i = 0; i < puntanoQui.query.embeddedin.length; i += 1) {
			pagina = puntanoQui.query.embeddedin[i].title;
			$.ajax({
				url: mw.config.get("wgServer")+"/w/index.php?action=raw&title=" + pagina,
			}).done(function(rawText) {
				l = produciLista(rawText, "{"+"{AutoreIgnoto|", "}}", 0);
				for (j = 0; j < l.length; j += 1) {
					testo += pagina + "\t" + l[j] + "\n";
					scriviBox(testo);
				}
				scriviBox(testo + "</pre>");
			});
		}
	};
	
	// Gestisce l'inserimento di note
	note = function() {
		var t = selection();
		if (t[1].length <5) {
			t[1] = "<sup>nota</sup>";
		} else {
			t[1] = "<ref>" + t[1] + "</ref>";
		}
		//scriviBox(t.join(""));
		scriviSelAlt(t);
	};
	
	// Crea il codice thumbnail per una serie di pagine
	// Istruzioni: andare su una pagina sandbox, scrivere il nome base della pagina, il numero iniziale, il numero finale 
	// separati da caratteri "|", selezionare e premere il pulsante
	thumbs = function() {
		t = selection();
		lista = t[1].split("|");
		lista[1] = lista[1] * 1;
		lista[2] = lista[2] * 1;
		base = "[[File:#base|200px|page=#page|link=Pagina:#base/#page]] ".replace(/#base/g, lista[0]);
		t[1] = t[1] + "\n\n";
		for (i = lista[1]; i <= lista[2]; i += 1) {
			t[1] += base.replace(/#page/g, i);
		}
		//scriviBox(t[1]);
		scriviSel(t);
	};
	
	// trasforma la selezione di un copiaincolla  di tabella excel 
	// (campi: nome, titolo, from, delta) in serie di template Indice sommario
	
	tabSomMaker = function() {
		t = selection(2);
		tab = t[1].split("\n");
		var base = "{"+"{Indice sommario|nome=§1|titolo=§2|from=§3|delta=§4}}";
		var testo = [];
		for (i = 0; i < tab.length; i++) {
			tab[i] = tab[i].split("\t");
			testo.push(base.replace("§1", tab[i][0]).replace("§2", tab[i][1]).replace("§3", tab[i][2]).replace("§4", tab[i][3]));
		}
		t[1] = testo.join("\n");
		scriviBox(t.join("\n"), 2);
	};
	
	noImg1 = function() {
		cella = $(".prp-page-image");
		cellaDisplay = $(cella).css("display");
		if (cellaDisplay === "none") {
			$(cella).css("display", "block");
			$("div.prp-page-content").css("width","50%");
		} else {
			$(cella).css("display", "none");
			$("div.prp-page-content").css("width","100%");
		}
	};
	
	ThPurge = function() {
		window.open("//commons.wikimedia.org/w/thumb.php?f=#base#&w=#width#&page=#page#".replace("#base#", mw.config.get("wgPageName").split("/")[0].replace("Pagina:", "")).replace("#page#", mw.config.get("wgPageName").split("/")[1]).replace("#width#", $("#ProofReadImage").attr("width")));
		window.open("//commons.wikimedia.org/w/thumb.php?f=#base#&w=#width#&page=#page#".replace("#base#", mw.config.get("wgPageName").split("/")[0].replace("Pagina:", "")).replace("#page#", mw.config.get("wgPageName").split("/")[1]).replace("#width#", "1024"));
	};
	/*	
	incapsula = function(pre, post) {
		mw.toolbar.insertTags(pre,post);
	};

	function incapsula(pre, post) {
		t = sel()[1];
		t[0] = t[0] + pre.replace(/&quote;/g, '"');
		t[2] = post.replace(/&quote;/g, '"') + t[2];
		scriviSel(t);
	}
	
	function incapsula(pre, post) {
		t = selection();
		t[0] = t[0] + pre.replace(/&quote;/g, '"');
		t[2] = post.replace(/&quote;/g, '"') + t[2];
		scriviBox(t.join(""));
	}
	*/
	
	preOCR = function() {
		testo = leggiBox();
		testo = testo.replace(/<poem>/g, "#poem#")
		.replace(/<\/poem>/g, "#/poem#")
		.replace(/</g, "")
		.replace(/\>/g, "")
		.replace(/\{/g, "")
		.replace(/\}/g, "")
		.replace(/\[/g, "")
		.replace(/\]/g, "")
		.replace(/\#poem\#/g, "<poem>")
		.replace(/\#\/poem\#/g, "</poem>");
		scriviBox(testo);
	};
	
	splitPagina = function(tpp) {
		var testo = ["", "", ""];
		testo[0] = tpp.substring(0, tpp.indexOf("</noinclude>") + 12);
		testo[2] = tpp.substring(tpp.lastIndexOf("<noinclude>"));
		testo[1] = tpp.substring(testo[0].length, tpp.length - testo[2].length);
		return testo;
	};
	testoPagCorr = ["","",""];
	// se siamo in nsPage carico comunque testoPagCorr
	if  (mw.config.get("wgCanonicalNamespace") === "Page" && mw.config.get("wgAction")==="view") {
		// solo se siamo in view esamina se la pagina può essere portata a SAL 100%
		testoPagCorr=splitPagina(mw.getWikitext(mw.config.get("wgPageName")));
		if (mw.config.get("wgUserName")!==null 
			&&  find_stringa(testoPagCorr[0],'user="','"',0)!==mw.config.get("wgUserName") 
		    && find_stringa(testoPagCorr[0],'level="','"',0)==="3") {
				var html= $(".prp-page-content .quality-msg-text").html();  
				var msg=" <b>Tu puoi rileggerla</b>.";
				if (html.indexOf(msg)===-1) {
					$(".prp-page-content .quality-msg-text").html(html+msg);
				}
		}
	}
	testoPagPrec = ["", "", ""];
	testo2PagPrec = ["", "", ""];
	var npp
	lpp = function() {
		var pn = mw.config.get("wgPageName").split("/");
		if (pn[1] > 1) {
			npp = pn[0] + "/" + (pn[1] - 1);
			$.ajax({
				url: "/w/api.php?action=parse&page="+npp+"&prop=wikitext&format=json",
			}).done(function(response) {
    			if (response.parse !== undefined) {
    				contenuto = response.parse.wikitext["*"];
					testoPagPrec = splitPagina(contenuto);
    			}
			});
		}
		if (pn[1] > 2) {
			npp = pn[0] + "/" + (pn[1] - 2);
			
			$.ajax({
				url: "/w/api.php?action=parse&page="+npp+"&prop=wikitext&format=json",
			}).done(function(response) {
    			if (response.parse !== undefined) {
    				contenuto = response.parse.wikitext["*"];
					testo2PagPrec = splitPagina(contenuto);
    			}
			});
			
			npd = pn[0].replace("Pagina:", "Discussioni indice:");
			$.ajax({
				url: mw.config.get("wgServer")+"/w/index.php?action=raw&title=" + npd + "&" + Math.random(),
			}).done(function(testoPagDati) {
				var x = $.trim(find_stringa(testoPagDati, '<pre class="abbreviazioni">', '</pre', 0)).split("\n");
				$.each(x, function(index) {
					x[index] = x[index].split("==");
				});
				var d = {};
				for (i = 0; i < x.length; i += 1) {
					d[x[i][0]] = x[i].slice(1);
				}
				$(".ourDiv").data("abbrOpera", d);
				// qui inserire gestione memoRegex
			});
		}
	};
	
	if (mw.config.get("wgAction") === "edit" && 
	(mw.config.get("wgCanonicalNamespace") === "Pagina" ||
	mw.config.get("wgCanonicalNamespace") === "Page")) {
		$(document).ready(lpp);
	}
	
	
	tableMaker = function() {
		var t = selection();
		
		tabella = selection()[1];
		tabella=tabella.replace(/\|\|/g,"\t");
		tabella=tabella.split("\n");
		for (i = 0; i < tabella.length; i += 1) {
			tabella[i] = "|-\n|" + tabella[i].replace(/\t/g, "||")
		}
		t[1] = "{|\n" + tabella.join("\n") + "\n|}\n";
		//scriviBox(t.join(""));
		scriviSel(t);
	};
	
	ottavaGl = function() {
		t = selection();
		if (t[0].indexOf("\n") === -1) {
			t[1] = t[0] + t[1];
			t[0] = "";
		} else {
			pn = t[0].lastIndexOf("\n");
			t[1] = t[0].substring(pn + 1) + t[1];
			t[0] = t[0].substring(0, pn + 1);
		}
		t[1] = t[1].replace(/ú/g, "ù").replace(/í/g, "ì").replace(/é/g, "è").replace(/\'/g, "’").replace("{"+"{o|", "{"+"{O|");
	
	
		not = find_stringa(t[1], "{"+"{O|", "}}", 1);
		t[1] = t[1].replace(not, "");
		not = find_stringa(not, "{"+"{O|", "}}", 0);
		var t1 = t[1].split("\n");
		for (i = 0; i < t1.length; i += 1) {
			//trimmo
			t1[i] = t1[i].trim();
	
	
			// maiuscolizzo
			t1[i] = t1[i].substring(0, 1).toLocaleUpperCase() + t1[i].substring(1);
			//versifico
			if (i === 3 || i === 7) {
				nv = (not - 1) * 8 + i + 1;
				t1[i] = "{"+"{R|nv}}".replace("nv", nv) + t1[i]
			}
			// aggiungo nr in testa e indento verso 1
			if (i === 0) {
				t1[i] = "{"+"{Centrato|l=18em|{"+"{§|" + n2r(not * 1) + "|" + n2r(not * 1) + ".}}}}\n     " + t1[i];
			}
	
		}
		t[1] = t1.join("\n");
		//scriviBox(t.join(""));
		scriviSel(t);
	};
	
	r2n = function(numeroRomano) {
		// minuscolizzo
		nr = numeroRomano.toLocaleLowerCase();
		cv = {
			"m": 1000,
			"d": 500,
			"c": 100,
			"l": 50,
			"x": 10,
			"v": 5,
			"i": 1
		};
		n = 0;
		// per ognuna delle lettere incremento l'accumulatore sulla base del dizionario cv
		for (i = 0; i < nr.length; i += 1) {
			n += cv[nr.substring(i, i + 1)];
		}
		// sporco trucco per la gestione di ix, xc, cm :-) (l'algoritmo precedente conteggia 21 in caso di xix...)
		if (nr.indexOf("ix") > -1 || nr.indexOf("iv") > -1) n -= 2;
		if (nr.indexOf("xc") > -1 || nr.indexOf("xl") > -1) n -= 20;
		if (nr.indexOf("cm") > -1 || nr.indexOf("cd") > -1) n -= 200;
		return n;
	};
	
	// accetta un numero arabo
	n2r = function(n) {
		var narr = ["1000000", "900000", "500000", "400000", "100000", "90000", "50000", "40000", "10000", "9000", "5000", "4000", "1000", "900", "500", "400", "100", "90", "50", "40", "10", "9", "5", "4", "1"];
		var rarr = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"];
		var num = n;
		var result = "";
		var chk = num;
		while (chk > 0) {
			var i;
			for (i = 0; i < narr.length; i++) {
				if (chk >= narr[i]) {
					result += rarr[i];
					chk -= narr[i];
					break;
				}
			}
		}
		return result; // restituisce il numero romano
	};
	
	
	// Rimuove dalla selezione corrente i tags wiki ''' e '' e tutti i tag html
	// da fare: organizzare rimozione di alcuni comuni template salvando il testo passato come parametro
	
	rtg = function() {
		var t = selection();
		var tagsHtml = produciLista(t[1], "<", ">", 1);
		for (i = 0; i < tagsHtml.length; i += 1) {
			t[1] = t[1].replace(tagsHtml[i], "");
		}
		t[1] = t[1].replace(/\'\'\'/g, "").replace(/\'\'/g, "", "");
		//scriviBox(t.join(""));
		scriviSel(t);
	}
	
	
	verificaNote = function() {
		serie = "a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,x,y,z,aa,bb,cc,dd,ee,ff,gg,hh,ii,ll,mm".split(",");
		var editbox = document.getElementsByName('wpTextbox1')[0];
		var testo = editbox.value;
		n = testo.count("<sup>");
		alert("Ultima nota: " + serie[n - 1]);
	};
	
	
	eraseWl = function() {
		t = leggiBox().split("\n");
		t1 = [];
		for (i = 0; i < t.length; i += 1) {
			if (t[i].length > 3) t1.push(t[i]);
		}
		scriviBox(t1.join("\n"));
	};
	
	tq = function() {
		$.ajax({
			url: mw.config.get("wgServer")+"/w/index.php?action=render&title=" + mw.config.get("wgPageName"),
		}).done(function(html) {
			q = "0%";
			if ($("a.quality4", html).length > 0 || $('span.ws-noexport a img[alt^="100%"]', html).length > 0) q = "100%";
			if ($("a.quality3", html).length > 0 || $('span.ws-noexport a img[alt^="75%"]', html).length > 0) q = "75%";
			if ($("a.quality2", html).length > 0 || $('span.ws-noexport a img[alt^="50%"]', html).length > 0) q = "50%";
			if ($("a.quality1", html).length > 0 || $('span.ws-noexport a img[alt^="25%"]', html).length > 0) q = "25%";
			scriviBox(leggiBox().replace(/(\|avz=)\d+%(\|)/, "$1" + q + "$2"));
			if (/SAL \d+%/.test(wpSummary.value)) wpSummary.value = wpSummary.value.replace(/SAL \d+%/, "SAL " + q);
		});
	};
	
	oggi = function() {
		var d = new Date();
		return d.getDate() + " " + ["gennaio", "febbraio", "marzo", "aprile", "maggio", "giugno", "luglio", "agosto", "settembre", "ottobre", "novembre", "dicembre"][d.getMonth()] + " " + d.getFullYear();
	};
	/*
	// rimuove il box di visualizzazione
	function delShow() {
		$("#showCode").remove();
	}
	
	//apre un box fixed in cui visualizzare il wikicode e ci aggiunge una barra e il wikicode
	metadati = {};
	
	function show(option) {
		if (option === undefined) option = "wiki text";
	
		if (option === "wiki text") {
			var wt = acchiappaWikicode(mw.config.get("wgPageName"));
			$("#showboxContent").html("");
			if (wt[0] != "") $('<div style="white-space:pre-wrap; width:97%; padding:5px;  background-color:#D9FFFF;">' + wt[0] + '</div>').appendTo($("#showboxContent"));
			$('<div style="white-space:pre-wrap; width:97%; padding:5px; background-color:#FCFCFC;">' + wt[1] + '</div>').appendTo($("#showboxContent"));
			if (wt[2] != "") $('<div style="white-space:pre-wrap; width:97%; padding:5px; background-color:#CCFFFF;">' + wt[2] + ' </div>').appendTo($("#showboxContent"));
			$("#showbox").show();
		}
		if (option === "metadata") {
			parseMetadata();
			$("#showboxContent").html("");
			$(".hproduct").clone().appendTo($("#showboxContent"));
			$("#showbox").show();
		}
		if (option === "lista") {
			// la funzione viene chiamata dentro un callback di getPage e dispone di una variabile lista
			// che contiene un oggetto jQuery lista
			$("#showboxContent").html("");
			$(lista).appendTo($("#showboxContent"));
			$("#showbox").show();
		}
		if (option === "wikidata") {
			// la funzione viene chiamata dentro un callback di getPage e dispone di una variabile lista
			// che contiene un oggetto jQuery lista
			$("#showboxContent").html("");
			wikidatalinks();
			$("#showbox").show();
		}
	
	}
	*/
	//SEZIONE BIBBIA
	//Seguono tutti gli script dedicati al Progetto Bibbia
	
	findchapter = function(n, from, to) {
		z = 0
		found = []
		for (i = from; i <= to; i++) {
			testo = acchiappaWikicode('Pagina:La_Sacra_Bibbia_(Diodati_1885).djvu/' + i);
			arraymatched = testo[1].match(/section \D+(\d+)/g);
			arraymatched2 = []
			for (e = 0; e <= arraymatched.length - 1; e++) {
				arraymatched2[e] = arraymatched[e].replace(/section end\D/, '')
			}
			if (arraymatched2.indexOf('' + n + '') != -1) {
				found[z] = i
				z = z + 1
			}
		}
		return '<pages index="La Sacra Bibbia (Diodati 1885).djvu" from=' + found[0] + ' to=' + found[z - 1] + ' fromsection="' + n + '" tosection="' + n + '" />';
	};
	
	setpageBibbia = function(cap, from, to) {
		testo = '{'+'{Qualità|avz=75%|data=26 febbraio 2012|arg=Da definire}}{"+"{IncludiIntestazione|sottotitolo=|prec=../capitolo_' + (cap - 1) + '|succ=../capitolo_' + (parseInt(cap) + 1) + '}}'
		testo += '\n'
		testo += findchapter(cap, from, to)
		testo += '\n'
		testo += '{'+'{Sezione note}}'
	
		scriviBox(testo)
		$('#bibbiatransbox').find('*').each(function() {
			$(this).remove()
		}).remove();
		$('#bibbiatransbox').remove();
	};
	
	BibbiaTrasBox = function() {
		$('body').append('<div id="bibbiatransbox"></div>');
		$('#bibbiatransbox').append('<label for="from">From:</label>');
		$('#bibbiatransbox').append('<input type="text" id="from" />');
		$('#bibbiatransbox').append('<br><label for="to">To:</label>');
		$('#bibbiatransbox').append('<input type="text" id="to" />');
		$('#bibbiatransbox').append('<br><label for="cap">Capitolo:</label>');
		$('#bibbiatransbox').append('<input type="text" id="cap" />');
		$('#bibbiatransbox').append('<input type="submit" id="bibbiaboxsub" value="Trova e fai" />');
		$('#bibbiatransbox').dialog();
		$('#bibbiaboxsub').on('click', function() {
			setpageBibbia($('#bibbiatransbox').children('#cap').val(), $('#bibbiatransbox').children('#from').val(), $('#bibbiatransbox').children('#to').val());
		});
	};
	
	
	bibbia3 = function() {
		var editbox = document.getElementsByName('wpTextbox1')[0];
		var testo = editbox.value;
		// Cattura elementi BibLink da OCR grezzo
		patt2 = /(\w+)\s*\.\s*(\d+)\s*\.\s*(\d+)/;
		while (patt2.test(testo)) {
			elemento = patt2.exec(testo)[0]; // elemento Biblink
			newElemento = elemento.replace(patt2, "{"+"{BibLink|$1|$2|$3}}");
			testo = testo.replace(elemento, newElemento);
		}
		// normalizzazione del contenuto dei template BibLink (sostituzione punti con |)
		var lista = produciLista(testo, "{"+"{BibLink|", "}}", 1);
		var patt1 = /(\{\{BibLink\|\d*\s*\w+)[\.\| ]*(\d+)[\.\| ]*(\d+)[\.\| ]*(.*\}\})/;
		for (i = 0; i < lista.length; i += 1) {
			elemento1 = lista[i];
			elemento2 = lista[i].replace(patt1, "$1|$2|$3|$4").replace("|}}", "}}");
			testo = testo.replace(elemento1, elemento2);
		}
		// Cattura di eventuali numeri d'ordine del libro (1,2,3)
		patt3 = /([123]\ )(\{\{BibLink\|)(\w+)/;
		while (patt3.test(testo)) {
			elemento = patt3.exec(testo)[0];
			newElemento = elemento.replace(patt3, "$2$1$3");
			testo = testo.replace(elemento, newElemento);
		}
		editbox.value = testo;
		return;
	};
	
	/*
	
	== bibbia4 ==
	ìP*/
	bibbia4 = function() {
		var editbox = document.getElementsByName('wpTextbox1')[0];
		var testo = editbox.value;
		var note = produciLista(testo, "\n{"+"{BibLink|", "\n", 1);
	
		for (i = 0; i < lista.length; i += 1) {
			riga = lista[i].trim()
			testo = testo.replace(lista[i], "\n<ref>" + riga + "</ref>\n");
		}
		editbox.value = testo;
		return;
	};
	/* cerca le evenienze {{BibLink|xxx|999|999}}; 77. 88. e le trasforma in {{BibLink|xxx|999|999}}; {{BibLink|xxx|77|88|77. 88}}.;
	   cerca le evenienze {{BibLink|xxx|999|999}}, 77 e le trasforma in {{BibLink|xxx|999|999}}, {{BibLink|xxx|999|77|77}}.
	ìP*/
	/*
	
	== bibbia5 ==
	ìP*/
	bibbia5 = function() {
		var editbox = document.getElementsByName('wpTextbox1')[0];
		var testo = editbox.value;
		//  pattern di un elemento tipo 2 CORRETTO
		patt = /(\{\{BibLink\|\d?\ ?\w*\|).{1,10}(\}\});\s*(\d+)\.\s*(\d+)\./;
		ps = /\{\{.+\}\}/;
		while (patt.test(testo)) {
			elemento = patt.exec(testo)[0]; // elemento Biblink; capitolo. versetto 
			newElemento = elemento.replace(patt, elemento.match(ps)[0] + "; $1$3|$4|$3. $4$2");
			testo = testo.replace(elemento, newElemento);
		}
		// elemento Biblink, versetto (lista o intervallo)
		patt = /(\{\{BibLink\|\d?\ ?\w*\|\d+\|)(\d+)(\}\})\s*(-)\s*(\d+)/;
		while (patt.test(testo)) {
			elemento = patt.exec(testo)[0];
			newElemento = elemento.replace(patt, elemento.match(ps)[0] + "$4$1$5|$5$3");
			testo = testo.replace(elemento, newElemento);
		}
		patt = /(\{\{BibLink\|\d?\ ?\w*\|\d+\|)(\d+)(\}\})\s*(,)\s*(\d+)/;
		while (patt.test(testo)) {
			elemento = patt.exec(testo)[0];
			newElemento = elemento.replace(patt, elemento.match(ps)[0] + "$4 $1$5|$5$3");
			testo = testo.replace(elemento, newElemento);
		}
		editbox.value = testo;
	};
	
	bibbia6 = function() {
		var t = selection();
		t[1] = "{"+"{Centrato|{"+"{smaller|''" + t[1] + "''}}}}";
		//scriviBox(t.join(""));
		scriviSel(t);
	};
	
	NewPP = function() { 
		var newpp1=find_stringa($("html").html(), "<!--\nNewPP", "-->", 1);
		var newpp0=find_stringa($("html").html(), "<!-- Served", "-->", 1);
		if (newpp1.length>0) newpp0=newpp0+"\n"+newpp1;
		alert(newpp0);
	};
	
	// funzioni per autoNs0
	
	parseSommario = function(basePagina) {
		if (basePagina === undefined && (mw.config.get("wgCanonicalNamespace") === "Pagina" || mw.config.get("wgCanonicalNamespace") === "Page")) {
			var basePagina = mw.config.get("wgPageName").substring(0, mw.config.get("wgPageName").indexOf("/"));
	
		}
		var s=getWikitext("Indice:"+basePagina+"&r=" + Math.random())
		
		var mdwTemplate=find_stringa(s, "{"+"{:MediaWiki","}}",1,"{"+"{"); 
		mdwTemplate=parseTemplate(":MediaWiki:Proofreadpage_index_template",mdwTemplate);
		$(".ourDiv").data("indexData",mdwTemplate);
		
		var infotesto=$.ajax({
			url: mw.config.get("wgServer")+"/w/index.php?action=raw&title=Discussioni indice:" + basePagina + "&r=" + Math.random(),
			async: false
		}).responseText;
		infotesto=find_stringa(infotesto, "{"+"{Infotesto","}}",1,"{"+"{"); 
		infotesto=parseTemplate("Infotesto",infotesto);
		$(".ourDiv").data("infotesto",infotesto);
	
		s = find_stringa(s, '|Sommario=', '|Volume=', 0);
		// normalizzazione Indice Sommario
		s=s.replace(/[\n ]*}/g,"}")
			.replace(/[\n ]*=[\n ]*/g,"=")
			.replace(/[\n ]*\|[\n ]*/g,"|");
		s = produciLista(s, "{"+"{Indice sommario|", "}}", 1);
		lcomm = produciLista(s, "<!--", "-->", 1);
		for (i = 0; i < lcomm.length; i += 1) {
			s = s.replace(lcomm[i], "");
		}
		for (i = 0; i < s.length; i += 1) {
			s[i] = find_stringa(s[i], "{"+"{Indice sommario|", "}}", 0, "{"+"{").split(/\s*\|\s*/);
			s[i] = JSON.stringify(s[i]).replace("[", "{").replace("]", "}").replace(/=/g, '":"');
			s[i] = JSON.parse(s[i]);
		}
		return s;
	};
	
	sommarioDaNs0 = function() {
		
		var urlPaginaBaseNs0 = mw.config.get("wgServer")+"/w/index.php?action=raw&title=" + mw.config.get("wgPageName").split("/")[0];
		if (leggiBox() === "") urlPaginaBaseNs0 += "&" + Math.random();
		var s = $.ajax({
			url: urlPaginaBaseNs0,
			async: false
		}).responseText;
		indice = $.trim(find_stringa(s.replace(/indice:/g, "Indice:"), '<section begin="URL della versione cartacea a fronte"/>Indice:', '<section end="URL della versione cartacea a fronte"/>', 0));
		
		//caso proofread (Indice presente)
		if (indice !== '') {
			
			// cerca l'indice che punta a questa pagina (nel caso di più volumi potrebbe essere diverso da quello trovato sopra!)
			backlinks = JSON.parse($.ajax({
				url: mw.config.get("wgServer") 
					+ '/w/api.php?action=query&list=backlinks&blnamespace=110&bltitle=' + mw.config.get("wgPageName") + '&format=json',
				async: false
			}).responseText).query.backlinks;

			if (backlinks != undefined && backlinks[0] != undefined) {
				indice = backlinks[0].title.replace('Indice:', '');
				console.info('ns0auto: trovato indice che punta qui: ' + indice);
			}
			s = Sommario(indice.replace(/ /g, "_"));
			var ss = {};
			for (i = 0; i < s.length; i += 1) {
				if (mw.config.get("wgPageName").replace(/ /g, "_") === s[i].nome.replace(/ /g, "_")) {
					ss = s[i];
					break;
				}
			}
			return {
				"sommario": s,
				"posizionePagina": i,
				"indice": indice
			};
		}
		//caso non proofread
		else {
			//costruisco una specie di sommario parsando l'indice della pagina base
			paginaBase = mw.config.get("wgPageName").split("/")[0];
			var urlPaginaBaseNs0 = mw.config.get("wgServer")+"/w/index.php?action=raw&title=" + paginaBase;
			if (leggiBox() === "") urlPaginaBaseNs0 += "&" + Math.random();
			var s = $.ajax({
				url: urlPaginaBaseNs0,
				async: false
			}).responseText;
			s = produciLista(s.replace(/\{\{testo/g, "{{Testo"), "{"+"{Testo|", "}}", 1);
			for (var i = 0; i < s.length; i++) {
				var ss = {}
				//questo funziona solo per max 2 livelli!
				ss.titolo = s[i].replace("{{Testo|/", "").replace("}}", "").split('|')[0];
				ss.nome = paginaBase.replace(/_/g, " ") + "/" + ss.titolo
				if (ss.titolo.indexOf('/') !== -1) {
					ss.titolo = "";
				}
				s[i] = ss
			}
			
			var posizionePagina;
			for (i = 0; i < s.length; i ++) {
				if (mw.config.get("wgPageName").replace(/ /g, "_") === s[i].nome.replace(/ /g, "_")) {
					posizionePagina = i;
					break;
				}
			}
			
			return {
				"sommario": s,
				"posizionePagina": posizionePagina
			};
		}
	};
	
	confirmReplaceText = function(testo, replaceText) {
		if (replaceText) {
			doWrite = mw.config.get("wgArticleId") === 0 || confirm("Il testo esistente verrà sostituito. Continuare?");
			if (doWrite) {
				scriviBox(testo);
				$('#wpSummary').val('Creo pagina con [[Wikisource:La fabbrica dei giocattoli/autoNs0()|autoNs0]]');
			}
		} else {
			var curPos = document.getElementById("wpTextbox1").selectionStart; 
			textBefore = $("#wpTextbox1").val();
            $("#wpTextbox1").val(textBefore.slice(0, curPos) + testo + textBefore.slice(curPos));
		}
	};
	
	ns0Auto = function(replaceText) {
		if (replaceText === undefined)
			replaceText = true; // se false, inserisce solo il tag pages e lascia invariato il resto
		
		// ns0 pagina-base
		pagename = mw.config.get("wgTitle");
		if (pagename.indexOf('/') === -1) {
			
			//recupera l'indice
			var api_url=["/w/api.php?action=query",
				"format=json",
				"list=backlinks",
				"blnamespace=110",
				"bltitle=" + mw.config.get("wgPageName")].join("&");
			var result = JSON.parse($.ajax( {url: api_url, async: false}).responseText);
			backlinks = result['query']['backlinks'];
			indiceSorgente = null;
			if (backlinks.length > 0) {
				indiceSorgente = backlinks[0]['title'];
			} else {
				console.log("ns0Auto: nessun Indice punta a questa pagina, impossibile precompilare");
			}
			
			if (indiceSorgente !== null) {
				
				// array di tutti gli indici
				indici = backlinks.map(function(value, index, array) {
					return value.title;
				});
				
				new mw.Api().get({
					action: 'query', prop: 'revisions', rvprop: 'content', titles: indiceSorgente, format: 'json'
				}).done(function (data) {
					$.each(data.query.pages, function(index, element) {
						var ns0text = element.revisions[0]['*'].replace(/\n/g, '');
						var data = parseTemplate(":MediaWiki:Proofreadpage_index_template", ns0text)[0];
						
						//indice dei capitoli
						var capitoli = produciLista(data["Sommario"], "|nome=", "|", 0);
						
						//template qualità e intestazione
						var intestazione = '{'+'{Qualità|avz=25%|data=' + oggi() + '|arg=Da definire}}' 
							+ "{"+"{Intestazione\n| Nome e cognome dell'autore = #autore\n"
							+"| Nome e cognome del curatore = #curatore\n"
							+"| Titolo =#titolo\n"
							+"| Anno di pubblicazione = \n" //+"| Anno di pubblicazione = #anno\n"
							+"| Lingua originale del testo =\n"
							+"| Nome e cognome del traduttore = #traduttore\n"
							+"| Anno di traduzione =\n"
							+"| Progetto = #progetto\n"
							+"| Argomento =\n"+
							"| URL della versione cartacea a fronte = #url\n}}\n";

						var testo = '';
						if (replaceText) testo += intestazione.replace("#autore", data["Autore"])
							.replace("#curatore", data["Curatore"])
							.replace("#traduttore", data["Traduttore"]===undefined?'':data["Traduttore"] )
							.replace("#progetto", data["Progetto"])
							.replace("#url", indiceSorgente.replace(/_/g, " "));
						
						// caso di pagina di primo livello uguale alla pagina base dell'opera
						if (data["NomePagina"] == pagename) {
							
							var titolo = data["NomePagina"].replace(/\s*\(.*?\)/, "");
							if (data["Titolo"] !== "") titolo = data["Titolo"];
							if (replaceText) testo = testo.replace("#titolo", titolo);
							
							//trasclusione della pagina che si spera contenga il frontespizio
							frontespizio = data["Immagine"];
							if (frontespizio === undefined)
								frontespizio = '1';
							
							if (capitoli.length > 1) {
								// se ci sono almeno 2 capitoli metti l'indice
								testo += '\n\n<pages index="' + indiceSorgente.replace('Indice:', '') + '" from="' + frontespizio + '" to="' + frontespizio + '" />\n\n';
								testo += "\n\n==Indice==\n\n";
							
								// caso di più volumi: aggiungici il sommario dei successivi indici
								if (indici.length > 1) {
									for (var i = 1; i < indici.length; i++) {
										var api_url=["/w/api.php?action=query",
											"format=json",
											"prop=revisions",
											"rvprop=content",
											"titles="+indici[i]].join("&");
										var result=JSON.parse($.ajax({url:api_url,async:false}).responseText);
										$.each(result.query.pages, function(index, element) {
											var ns0text = element.revisions[0]['*'].replace(/\n/g, '');
											var data = parseTemplate(":MediaWiki:Proofreadpage_index_template", ns0text)[0];
											altriCapitoli = produciLista(data["Sommario"], "|nome=", "|", 0);
											for (j = 0; j < altriCapitoli.length; j++) {
												capitoli.push(altriCapitoli[j]);
											}
										});
									}
								}
								
								if (replaceText) {
									for (i = 0; i < capitoli.length; i++) {
										var capitolo = capitoli[i].replace(data["NomePagina"], "").trim();
										if (capitolo !== "") {
											var c = count(capitoli[i], "/");
											if (capitolo == capitoli[i].trim())
												c++;
											asterisk = "*******".substring(0, c);
											if (asterisk == '')
												asterisk = '*';
											testo += asterisk + " {"+"{testo|" + capitolo + "}}\n";
										}
									}
								}
								confirmReplaceText(testo, replaceText);
							} else {
								// se non ci sono dei capitoli 
								$.ajax({
									url: "/w/index.php?&title=" + indiceSorgente
								}).done(function(response) {
									content = $('.prp-index-pagelist', response);
									lastPageNum = content.find('a').last().attr('title').split('/')[1].replace(' (la pagina non esiste)','');
									testo += '\n\n<pages index="' + indiceSorgente.replace('Indice:', '') + '" from="' + frontespizio + '" to="' + lastPageNum + '" />\n\n';
									confirmReplaceText(testo, replaceText);
								});
							}
						} else {
							// caso di pagina di primo livello DIVERSA dalla pagina base dell'opera
							if (replaceText) testo = testo.replace("#titolo", pagename.replace(/\s*\(.*?\)/, ""));
							
							indiceSenzaNs = indiceSorgente.replace('Indice:', '');
							testo += '\n{{Raccolta|' + data["NomePagina"] + '}}';
							testo += '\n\n\n<pages index="' + indiceSenzaNs + '" from="#from" to="#to" fromsection="" tosection="" />';
							
							sommario = parseSommario(indiceSenzaNs);
							for (k = 0; k < sommario.length; k++) {
								if (sommario[k].nome == pagename) {
									from = parseInt(sommario[k].from);
									testo = testo.replace('#from', from);
									
									// se c'è una pagina successiva prendi il from di quella
									if (k + 1 < sommario.length) {
										to = parseInt(sommario[k+1].from);
										if (to > from)
											to--;
										testo = testo.replace('#to', to);
										
										// vedi se le pagine successive sono sottopagine di queste
										for (j = k + 1; j < sommario.length; j++) {
											if (sommario[j].nome.startsWith(pagename + '/')) {
												
												if (j == k + 1) {
													testo += "\n\n==Indice==\n\n";
												}
												
												var capit = capitoli[j].replace(pagename, "");
												if (capit !== "") {
													var cap = count(capitoli[j], "/");
													if (capit == capitoli[j])
														cap++;
													asterisk = "*******".substring(0, cap);
													if (asterisk == '')
														asterisk = '*';
													testo += asterisk + " {"+"{testo|" + capit.trim() + "}}\n";
												}
											}
										}
										confirmReplaceText(testo, replaceText);
									} else {
										// altrimenti cerca il numero dell'ultima pagina dell'indice
										$.ajax({
											url: "/w/index.php?title=" + indiceSorgente.replace(/\s/g, "_"),
										}).done(function(response) {
											content = $('.prp-index-pagelist', response);
											lastPageNum = content.find('a').last().attr('title').split('/')[1].replace(' (la pagina non esiste)','');
											testo = testo.replace("#to", lastPageNum);
											confirmReplaceText(testo, replaceText);
										});
									}
								}
							}
						}
					});
				});
			}
		}
		//sottopagina
		else {
			var dati = sommarioDaNs0();
			var titolo = "";
			thisPagina = dati.sommario[dati.posizionePagina];
			paginaPrec = dati.sommario[dati.posizionePagina - 1];
			paginaSucc = dati.sommario[dati.posizionePagina + 1];
			
			if (thisPagina == undefined) {
				console.error('ns0Auto: la pagina corrente non è stata trovata nel Sommario dell\'Indice:');
				console.info(dati);
			} else if (thisPagina.titolo !== undefined) {
				titolo = thisPagina.titolo;
				
				upperLevel = pagename.substring(0, pagename.lastIndexOf('/'));
				if (upperLevel.indexOf('/') != -1) {
					upperPage = upperLevel.substring(upperLevel.lastIndexOf('/') + 1);
					titolo = '[[../|' + upperPage + ']]' + ' - ' + titolo;
				}
			}
			var testo = '';
			if (replaceText) testo += (
				'{'+'{Qualità|avz=25%|data=' + oggi() + '|arg=Da definire}}' + 
				'{'+'{IncludiIntestazione|sottotitolo=#1|prec=../#2|succ=../#3}}\n\n')
				.replace("#1", titolo);
			
			if (dati.indice !== undefined && thisPagina !== undefined) {
				pageFrom = thisPagina.from;
				testo += '<pages index="#4" from="#5" to="#6" fromsection="" tosection="" />'
					.replace("#4", dati.indice)
					.replace("#5", pageFrom);
				
				if (paginaSucc != undefined) {
					pageTo = paginaSucc.from - 1;
					
					// controlla che il to non sia precedente al from  
					if (pageTo < pageFrom)
						pageTo = pageFrom;
					testo = testo.replace("#6", pageTo);
				} else {
					$.ajax({
						url: "/w/index.php?&title=Indice:" + dati.indice.replace(/\s/g, "_"),
					}).done(function(response) {
						content = $('.prp-index-pagelist', response);
						lastPageNum = content.find('a').last().attr('title').split('/')[1].replace(' (la pagina non esiste)','');
						testo = testo.replace("#6", lastPageNum);
						confirmReplaceText(testo, replaceText);
					});
				}
			}
			
			// es. titolo/parte1/capitolo3
			//     titolo/parte2/capitolo1		prec=../../parte1/capitolo3		succ=../capitolo2
			//     titolo/parte2/capitolo2		prec=../capitolo1
			
			//nome pagina al livello superiore
			nomeSup = mw.config.get("wgTitle").substring(0, mw.config.get("wgPageName").lastIndexOf("/") + 1);
			//nome pagina base
			baseNome = mw.config.get("wgTitle").substring(0, mw.config.get("wgPageName").indexOf("/") + 1);
			
			// caso primo della lista
			if (paginaPrec != undefined && thisPagina != undefined) {
				if (paginaPrec.nome.indexOf('/') == -1) {
					// link alla pagina base
					testo = testo.replace("../#2", "../");
				} else {
					testo = testo.replace("#2", paginaPrec.nome.replace(nomeSup, "").replace(baseNome, "../"));
				}
			} else testo = testo.replace("../#2", "");
			//caso ultimo della lista
			if (paginaSucc != undefined && paginaSucc.nome.indexOf('/') != -1) {
				testo = testo.replace("#3", paginaSucc.nome.replace(nomeSup, "").replace(baseNome, "../"));
			} else testo = testo.replace("../#3", "");
			
			confirmReplaceText(testo, replaceText);
		}
	};
	
	ns0AutoAddPagesTag = function() {
		ns0Auto(false);
	};
	
	mw.ns0Auto=ns0Auto;
	// da una pagina Indice in qualsiasi modalità  ricava un dizionario pagineDjvu:pagineCarta
	dictIndice = function() {
		if (mw.config.get("wgAction") === "edit") {
			var html = $.ajax({
				url: mw.config.get("wgServer")+"/w/index.php?action=render&title=" + mw.config.get("wgPageName"),
				async: false
			}).responseText;
			links = $(".pagineDellEdizione a", $(html));
		} else {
			links = $(".pagineDellEdizione a");
		}
		var lista = {};
		var pagdjvu = '';
		var pagcarta = '';
		for (i = 0; i < links.length; i += 1) {
			pagdjvu = $(links[i]).attr("title").split("/")[1].split(" ")[0];
			pagcarta = $(links[i]).text();
			while (pagcarta.substring(0, 1) === "0") pagcarta = pagcarta.substring(1);
			lista[pagdjvu] = pagcarta;
		}
		return lista;
	};
	
	autoSommario = function() {
		var djvu2page = dictIndice();
		var np = $("input[name='wpprpindex-NomePagina']").attr("value");
		var html = $.ajax({
			url: mw.config.get("wgServer")+"/w/index.php?action=raw&title=" + np + "&random=" + Math.random(),
			async: false
		}).responseText.replace(/\{\{Testo\|/g, "{"+"{testo|");
		var lista = produciLista(html, "{"+"{testo|", "}}", 0);
		//delta=prompt("delta:");
		//if (delta===null || delta==="") {alert("Operazione annullata"); return;}
		var sommario = "";
	
		for (i = 0; i < lista.length; i += 1) {
			lista[i] = lista[i].split("|");
			if (lista[i].length === 1) {
				lista[i][1] = lista[i][0].substring(lista[i][0].lastIndexOf("/") + 1);
			}
			if (lista[i][0].substring(0, 1) === "/") {
				lista[i][0] = np + lista[i][0];
			}
			html = $.ajax({
				url: mw.config.get("wgServer")+"/w/index.php?action=raw&title=" + lista[i][0] + "&random=" + Math.random(),
				async: false
			}).responseText;
			pages = find_stringa(html, "<pages", "/>", 0);
			from = find_stringa(pages, "from=", " ", 0);
			lista[i][2] = from;
			delta = djvu2page[from];
			if (/[0-9]+/.exec(delta) === delta) delta = from - delta;
			lista[i][3] = delta;
			sommario += ("{"+"{Indice sommario|nome=#0|titolo=#1|from=#2|delta=#3}}\n").replace("#0", lista[i][0]).replace("#1", lista[i][1]).replace("#2", lista[i][2]).replace("#3", lista[i][3]);
			$('textarea[name="wpprpindex-Sommario"]').val(sommario);
			$("#wpSummary").val("Sommario riscritto con il tool autoSommario()");
		}
	};
	
	autoIndice = function() {
		var s = sommarioDaNs0().sommario;
		t = "== Indice ==\n";
		p = mw.config.get("wgTitle");
		for (i = 0; i < s.length; i += 1) {
			if (s[i].nome.indexOf(p) === 0 && s[i].nome.length > p.length) {
				tt = "     {"+"{testo|" + s[i].nome.replace(p, "") + "|" + s[i].titolo + "}}\n";
				for (j = 0; j < count(tt, "/"); j += 1) {
					tt = "*" + tt;
				}
				t = t + tt;
			}
		}
		scriviBox(leggiBox() + "\n" + t);
	};
	
	// la funzione estrae i dati da una div.hproduct passatagli come parametro,
	// e se manca il parametro via ajax dalla pagina corrente,
	// e restituisce una tabella con il footer dell'id dei campi, il testo della prima cella, 
	// e il testo html della seconda. 
	
	parseMetadata = function() {
	
		if (mw.config.get("wgCanonicalNamespace") === "Indice" || mw.config.get("wgCanonicalNamespace") === "Index") fileUrl = mw.config.get("wgPageName").replace("Indice:", "File:");
		if (mw.config.get("wgCanonicalNamespace") === "Pagina" || mw.config.get("wgCanonicalNamespace") === "Page") fileUrl = mw.config.get("wgPageName").substring(0, mw.config.get('wgPageName').lastIndexOf("/")).replace("Pagina:", "File:");
		if (mw.config.get("wgCanonicalNamespace") === "" && mw.config.get("wgPageName").indexOf("/") === -1) fileUrl = $('a[title^="Indice:"]').attr("title").replace("Indice:", "File:");
	
		if (mw.config.get("wgCanonicalNamespace")  === "" && mw.config.get("wgPageName").indexOf("/") > -1) {
			fileUrl = $('a[title^="Pagina:"]').attr("title").replace("Pagina:", "File:");
			fileUrl = fileUrl.substring(0, fileUrl.lastIndexOf("/"));
		}
	
		$.ajax({
			url: mw.config.get("wgServer")+"/wiki/" + fileUrl,
		}).done(function(html) {
			divdata = $(".hproduct", html);
			// !! nuova
			if ($(".ourDiv .hproduct").length === 0) {
				divdata.appendTo($(".ourDiv"));
			} else {
				$(".ourDiv .hproduct").replaceWith(divdata);
			}
			$(".ourDiv").data("hproductData", parseInfo());
		});
	};
	
	/****
	add_spaces per aggiungere un numero di spazi vuoti a scelta
	
	**Parametri
	n: numero di spazi
	
	**Note aggiuntive
	Necessita di selection() per funzionare
	*/
	add_spaces = function(n) {
		t = selection()
		if (t[1] === "") {
			r = t[0]
			for (i = 0; i < n; i++) {
				r = r + " "
			}
			r = r + t[2]
			scriviBox(r)
		}
	};
	
	// activeTab(): progetto in corso (disabilitata)
	/* function activeTab(r) {
		// creazione box
		$('<div ondblclick="delShow()" style="line-height:1em; background-color:#FCFCFC; font-family:Courier; font-size:0.8pc; position:absolute; width:100%; height:100%; top:0px; right:0px; z-index:999; border:1px solid #bbb;" id="showCode"></div>').appendTo($("#mw-content-text"));
	 
		// creazione tabella
		$("#showCode").append($('<table class="tabella" border="1" cellspacing="0" cellpadding="2" width="100%" ></table'));
	 
		// aggiunta righe 1-5
		for (var i = 1; i < r[0].length + 1; i += 1) {
			html = '<tr class="riga' + i + '"></tr>';
			$(".tabella").append($(html));
		}
	 
		// aggiunta colonne 1-4
		$("tr", $(".tabella")).each(function () {
			for (var i = 1; i < r.length + 2; i += 1) {
				var classe = $(this).attr("class");
				var html = '<td class="' + classe + ' ' + 'colonna' + i + '"> </td>';
				$(this).append($(html));
			}
		})
	 
		// caricamento
		//for (var i=0; i<r.length; i+=1) {$.each(r[i+1], function(indice,valore) 
		//{$(".riga"+(indice+1)+" .colonna"+(i+2)).html(valore);});}
		for (var i = 0; i < r.length; i += 1) {
			for (var j = 0; j < r[0].length; j += 1) {
				$(".riga" + (j + 1) + " .colonna" + (i + 2)).html(r[i][j]);
			}
	 
		}
	 
	 
		// attivazione
	 
		$(".colonna1").append($("<textarea col='30' row='2' />"));
		$("td:not(.colonna1)", $(".tabella")).click(function () {
			$(this).siblings("td:not(.colonna1)").css("background-color", "white");
			$(this).css("background-color", "yellow");
			$("textarea", $(this).parent()).val($(this).text());
		});
		for (i = 1; i < r[0].length + 1; i += 1) {
			$(".riga" + i + " textarea").val($(".riga" + i + " .colonna2").text())
		}
	}
	*/
	
	// Creazione oggetto sommario da nome pagina indice
	// 1: Cattura testo pagina Indice da nomeIndice o base
	//produciLista(parseTemplate(":MediaWiki:Proofreadpage_index_template",acchiappaWikicode(mw.config.get("wgPageName"))[1])[0].Sommario,"{"+"{Indice sommario","}}",1,"}}")
	Sommario = function(nomePagina) {
		// caso 1: default nome pagina corrente
		if (nomePagina === undefined) {
			nomePagina = mw.config.get("wgPageName");
		}
		// caso 2: nome base
		if (nomePagina.indexOf("Indice") === -1) {
			nomePagina = "Indice:" + nomePagina;
		}
		// cattura testo
		var testo = acchiappaWikicode(nomePagina)[1];
		// estrazione campo Sommario dopo parseTemplate
		var Sommario = parseTemplate(":MediaWiki:Proofreadpage_index_template", testo)[0].Sommario;
		Sommario = Sommario.replace(/<br\s?\/>/g, '').replace(/\s*([\|=])\s*/g, '$1');
		// estrazione elementi Indice sommario e parsing
		Sommario = produciLista(Sommario, "{"+"{Indice sommario", "}}", 1, "}}");
		for (var i = 0; i < Sommario.length; i += 1) {
			Sommario[i] = parseTemplate("Indice sommario", Sommario[i])[0];
		}
		return Sommario;
	};
	
	autoMatch = function() {
		var s = sommarioDaNs0();
		for (i = 0; i < s.sommario.length; i += 1) {
			if (s.sommario[i].nome.replace(/_/g, " ") === mw.config.get("wgPageName").replace(/_/g, " ")) break;
		}
		var npagina = s.sommario[i].from;
		var pagina = "Pagina:" + s.indice;
		var match = "==__MATCH__:[[*]]==".replace("*", pagina + "/" + npagina);
		var testo = leggiBox();
		intest = find_stringa(testo, "{"+"{IncludiIntestazione", "}}", 1, "{"+"{");
		scriviBox(testo.replace(intest + "\n", intest + "\n" + match));
	};
	
	/*newSections = function() {
	    var s=selection();
	    if (s[2].indexOf("<section end=s2 />")===-1) {
	        s[0]="<section begin=s1 />"+s[0]+"<section end=s1 />";
	        s[2]="<section begin=s2 />"+s[2]+"<section end=s2 />"; 
	    }
	    else {
	        s[0]=s[0]+"<section end=s2 />";
	        s[2]="<section begin=s3 />"+s[2].replace("<section end=s2 />","<section end=s3 />");    
	    }
	    s[0].value=s[0]+s[1]+s[2];
	    //scriviBox(s.join(""));
	    scriviSel(s);
	}*/
	if ( mw.config.get("wgUserName") !== null ) {
		importScript("Utente:"+mw.config.get("wgUserName")+"/PersonalButtons.js");
	}
});
// </nowiki>