MediaWiki:Gadget-compilaSommario.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.
/** 
 * Vedi la guida alla pagina Aiuto:Gadget_CompilaSommario
*/
$(function() {
	var versione = 'v. 1.4';
	var alertIndiceSommario = false;
	var counter = 0;
	var alertCounter = 0;
	var onSaveCheck = false;
	var alertShown = false;
	var pagelists;
	var templateVi = [];
	console.log('Compila sommario ' + versione);
	
	legenda = '<div class="legenda">Usare le <b>frecce</b> per cambiare il livello.'
		+ '<br>Indicare il <b>numero pagina del file djvu o pdf</b>, non quello stampato sulle pagine.'
		+ '<br>Compilare prima il campo <b>Lista delle pagine</b>.'
		+ '</div>';
	
	leftMargin = $('#content').outerWidth(true) - $('#content').innerWidth() - 20;
	boxWidth = leftMargin + $('.oo-ui-fieldLayout-header:first').width();
	
	aggiungiRiga = function(livello, titolo, from) {
		$('#compilaSommarioBox ul').append('<li class="livello' + livello + '"></li>');
		li = $('#compilaSommarioBox ul li:last');
		
		inputTitolo = $('<textarea class="titolo" rows="1" placeholder="Inserisci qui il titolo del capitolo o sezione"/>');
		inputTitolo.on('input', function () {
			$(this).css('height', 'auto');
			$(this).css('height', this.scrollHeight + 'px');
		});
		if (titolo !== undefined)
			inputTitolo.val(titolo);
		inputFrom = $('<input type="text" class="numPag" />');
		if (inputFrom !== undefined)
			inputFrom.val(from);
		
		if (!li.is(':first-child')) {
			arrowLeft = $('<a href="#" class="arrowLeft" tabindex="-1" title="Porta al livello superiore">&larr;</a>');
			arrowRight = $('<a href="#" class="arrowRight" tabindex="-1" title="Porta al livello inferiore">&rarr;</a>');
			li.append(arrowLeft);
			li.append(arrowRight);
			arrowLeft.click(function(e) {
				e.preventDefault();
				cambiaLivello($(this), false);
			});
			arrowRight.click(function(e) {
				e.preventDefault();
				cambiaLivello($(this), true);
			});
		}
		li.append(inputTitolo);
		li.append(inputFrom);
		
		addNewLine = $('<a href="#" class="addNewLine" tabindex="-1" title="Inserisci nuova riga sotto di questa">&#9913;</a>');
		li.append(addNewLine);
		addNewLine.click(function(e) {
			e.preventDefault();
			var level = parseInt($(this).parent('li').attr('class').replace('livello', ''));
			if (level == 1)
				level = 2;
			aggiungiRiga(level);
			$(this).parent().after($('#compilaSommarioBox ul li:last'));
		});
		
		inputTitolo.keyup(function() {
			titolo = $(this).val();
			titolo = titolo.charAt(0).toUpperCase() + titolo.slice(1);
			titolo = titolo.replace(/’/g, "'").replace(/^\s+/, '').replace(/[\r\n]+/g, ' ').replace(/  /, ' ').replace(/''/, "'");
			$(this).val(titolo);
			
			// quando l'ultima riga viene compilata, crea una riga nuova
			li = $(this).parents('li');
			if ($(this).val() !== '' && li.is(':last-child')) {
				var level = parseInt(li.attr('class').replace('livello', ''));
				aggiungiRiga(level);
			}
		});
		inputFrom.keyup(function() {
			$(this).val($(this).val().replace(/[^\d]/g, ''));
		});
		setLarghezza(li, livello);
		inputTitolo.trigger('input');
	};
	
	setLarghezza = function(li, livello) {
		li.find('.titolo').css('width', boxWidth-70 - (livello * 15));
	};
	
	getTitolo = function() {
		titolo = $('#wpprpindex-Titolo').val();
		if (titolo === '')
			titolo = $('#wpprpindex-NomePagina').val();
		return titolo;
	};
	
	getFrontespizio = function() {
		num = $('#wpprpindex-Immagine').val();
		if (num === '')
			num = 1;
		return num;
	};
	
	cambiaLivello = function(obj, inc) {
		li = obj.parents('li');
		livello = parseInt(li.attr('class').substr(-1)) + (inc ? 1 : -1);
		if (livello > 0 && livello < 7) {
			livelloSopra = parseInt(li.prev().attr('class').substr(-1));
			diff = livello - livelloSopra;
			// non si può mettere a più di un livello di distanza rispetto alla riga superiore
			if (!inc || diff < 2) {
				li.attr('class', 'livello' + livello);
				setLarghezza(li, livello);
				/*
				li.find('.arrowRight, .arrowLeft').show();
				if (diff == 1 || livello == 5) {
					li.find('.arrowRight').hide();
				} else if (diff == -1 || livello === 1) {
					li.find('.arrowLeft').hide();
				}
				*/
			}
		}
		li.find('textarea').focus();
	};
	
	scriviRiga = function(nome, titolo, from) {
		testoPrec = $('#wpprpindex-Sommario').val();
		if (testoPrec.length > 0)
			testoPrec += '\n';
		
		$('#wpprpindex-Sommario').val(
			 testoPrec + '{{Indice sommario|nome=' + nome + '|titolo=' + titolo + '|from=' + from + '|delta=' + calcolaDelta(from) + '}}'
		);
		$('#wpSummary').val('Gadget [[Aiuto:Gadget CompilaSommario|CompilaSommario]]');
	};
   
	initCompilaSommario = function() {
		etichetta = $("[for='wpprpindex-Sommario']");
		etichetta.append(' <a id="compilaSommarioBtn" href="#" class="btn blue" title="Compilazione semplificata tramite il gadget CompilaSommario">Compilazione assistita</a>');
		etichetta.append('<p>Si consiglia di <b>compilare completamente il Sommario prima di creare le pagine in ns0</b>!</p>');
	
		$('#compilaSommarioBtn').click(function(e) {
			e.preventDefault();
	
			if ($('#compilaSommarioBox').length > 0) {
				$('#compilaSommarioCloseBtn').click();
			} else {
				$('#wpprpindex-Sommario').prop('readonly', true);
				
				pagelists = parsePagelist();
				
				etichetta.after('<div id="compilaSommarioBox"></div>');
				box = $('#compilaSommarioBox');
				box.append('<div id="compilaSommarioButtons"></div>');
				buttons = $('#compilaSommarioButtons');
				buttons.append('<div id="compilaSommarioVersion">' + versione + '</div>');
				buttons.append('<div id="compilaSommarioGuida"><a href="/wiki/Aiuto:Gadget_CompilaSommario" target="_new" title="Guida (si apre in una nuova pagina)">Guida</a></div>');
				box.append('<div id="compilaSommarioHeader">Titolo<div style="float: right">pag.</div></div>');
				
				// sfruttiamo tutto lo spazio a sinistra
				box.css('left', -leftMargin);
				box.css('width', boxWidth);
				
				buttons.append('<a id="compilaSommarioApplyBtn" href="#" class="btn blue" title="Applica le modifiche senza chiudere questo box">Applica</a>');
				buttons.append('<a id="compilaSommarioConfirmBtn" href="#" class="btn blue" title="Conferma le modifiche e chiudi questo box">Conferma e chiudi</a>');
				buttons.append('<a id="compilaSommarioCloseBtn" href="#" class="btn blue" title="Chiudi questo box senza applicare le modifiche">Annulla</a>');
				box.append('<ul></ul>');
				
				$('#compilaSommarioApplyBtn').click(function(e) {
					e.preventDefault();
					scriviIndiceSommario();
				});
				
				$('#compilaSommarioConfirmBtn').click(function(e) {
					e.preventDefault();
					$('#compilaSommarioApplyBtn').click();
					$('#compilaSommarioCloseBtn').click();
				});
				
				$('#compilaSommarioCloseBtn').click(function(e) {
					e.preventDefault();
					$('#compilaSommarioBox').remove();
					$('#wpprpindex-Sommario').prop('readonly', false);
				});
				
				$('#compilaSommarioBox').draggable({
					create: function( event, ui ) {
						$(this).css({
							top: $(this).position().top,
							left: $(this).position().left
						});
					}
				});
				
				box.append(legenda);
				
				// se il Sommario è vuoto, inizia a scrivere la prima riga con il titolo dell'opera
				if ($('#wpprpindex-Sommario').val() === '') {
					nomePagina = $('#wpprpindex-NomePagina').val();
					if (nomePagina === '') {
						$('#compilaSommarioCloseBtn').click();
						alert('Compila almeno il campo "Nome della pagina nel namespace principale", poi riapri la Compilazione assistita');
						return;
					}
					scriviRiga(nomePagina, getTitolo(), getFrontespizio());
				} else {
					$('#compilaSommarioButtons').append('<div style="color: red"><b>Attenzione: verificare le modifiche prima di salvare!</b></div>');
				}
				parseIndiceSommario();
				// preparo un po' di righe vuote a disposizione
				for (i = 0; i < 3; i++)
					aggiungiRiga(2);
			}
		});
	};

	function importVi() {
		
		if (templateVi.length == 0)
			alert('Non è stato trovato nessun template Vi. Trascrivi prima le pagine del sommario usando il template Vi, poi esegui nuovamente l\'import');
		
		for (var i = 0; i < templateVi.length; i++) {
			titolo = templateVi[i].sezione + ' ' + templateVi[i].titolo;
			$($('#compilaSommarioBox ul').find('.titolo')[i + 1]).html(titolo);
			
			// se manca il numero per questa pagina (es. perché c'è scritto "ivi"), riportalo da quella precedente
			if (templateVi[i].pagina === '' && i > 0) {
				templateVi[i].pagina = templateVi[i-1].pagina;
			}
			var paginaFile = trovaPaginaFile(templateVi[i].pagina);
			$($('#compilaSommarioBox ul').find('.numPag')[i + 1]).val(paginaFile);
			//console.log("import " + templateVi[i].titolo + ', pag. ' + paginaFile);
			aggiungiRiga(2);
		}
	}

	function loadSommarioPages(pageNum) {
		console.log('load sommario page ' + pageNum);
		$.ajax({
			url: "/w/index.php?&title=Pagina:" + mw.config.get("wgTitle") + "/" + pageNum
		}).always(function(response) {
			$('.voceindice-riga', response).each(function(index) {
				var vi = {};
				vi.sezione = $(this).find('.voceindice-sezione').text();
				vi.titolo = $(this).find('.voceindice-titolo').text();
				vi.titolo = vi.titolo.substring(0, 1).toUpperCase() + vi.titolo.substring(1).toLowerCase();
				vi.pagina = $(this).find('.voceindice-pagina').text().replace(/[^0-9]/g, '');
				templateVi.push(vi);
			});
			if ($('.voceindice-riga', response).length) {
				loadSommarioPages(pageNum + 1);
			} else {
				importVi();
			}
		});
	}
	
	function loadSommarioNs0() {
		paginaNs0 = $('#wpprpindex-NomePagina').val();
		console.log('load sommario from ns0 page: ' +  paginaNs0);
		$.ajax({
			url: "/w/index.php?&title=" + paginaNs0
		}).done(function(response) {
			$('.tl-testo', response).each(function(index) {
				titolo = $(this).find('i a').attr('title').replace(' (la pagina non esiste)', '');
				livello = titolo.split('/').length;
				titolo = titolo.substring(titolo.lastIndexOf('/') + 1);
				console.log('add title: ' + titolo);
				aggiungiRiga(livello, titolo);
			});
			aggiungiRiga(2);
		});
	}

	parseIndiceSommario = function() {
		sommarioText = $('#wpprpindex-Sommario').val();
		nomebase = $('#wpprpindex-NomePagina').val();
		
		// estrazione elementi Indice sommario e parsing
		sommario = produciLista(sommarioText, "{"+"{Indice sommario", "}}", 1, "}}");
		titoliCambiati = 0;
		
		for (var i = 0; i < sommario.length; i += 1) {
			riga = parseTemplate("Indice sommario", sommario[i])[0];
			if (riga.nome == undefined) {
				console.log("Errore nel parsing di Indice sommario: " + sommario[i]);
				continue;
			}
			livello = (riga.nome.match(/\//g)||[]).length + 1;
			
			// aggiungi riga con il titolo generale, se non c'era già
			if (i === 0 && (livello > 1 || riga.nome != nomebase)) {
				titolo = $('#wpprpindex-Titolo').val();
				if (titolo === '')
					titolo = nomebase;
				aggiungiRiga(1, titolo, getFrontespizio());
			}
			titoloBefore = riga.titolo;
			if (riga.nome == nomebase)
				titolo = getTitolo();
			else 
				titolo = riga.nome.substring(riga.nome.lastIndexOf('/')+1);
			if (titoloBefore != titolo)
				titoliCambiati++;
			aggiungiRiga(livello, titolo, riga.from);
		}
		
		if (titoliCambiati > 0) {
			msg = "Il gadget CompilaSommario modificherà un titolo per adeguarlo al nome della pagina. ";
			if (titoliCambiati > 1) {
				msg = "Il gadget CompilaSommario modificherà " + titoliCambiati + " titoli per adeguarli al nome della pagina. ";
			}
			msg += ' Controlla che le modifiche siano corrette prima di salvare.';
			alert(msg);
		}
		
		$('#compilaSommarioCloseBtn').after('<a id="compilaSommarioImportBtn" href="#" class="btn blue" title="Importa dal sommario del libro (che devi avere già trascritto)">Importa il sommario del libro</a>');
		$('#compilaSommarioImportBtn').click(function(e) {
			e.preventDefault();
			var ok = true;
			if (sommario.length > 1) {
				ok = confirm('L\'attuale sommario sarà cancellato e sovrascritto importandolo dalle pagine del libro. Confermi?');
				
				if (ok) {
					$('#compilaSommarioBox ul li:not(:first-child)').remove();
					aggiungiRiga(2);
				}
			}
			if (ok) {
				paginaSommario = prompt("Da quale pagina comincia il sommario del libro? (inserire solo il numero)");
				if (paginaSommario) {
					$('#compilaSommarioImportBtn').attr('disabled',true);
					templateVi = [];
					loadSommarioPages(parseInt(paginaSommario));
				}
			}
		});
		
		$('#compilaSommarioImportBtn').after('<a id="compilaSommarioImportNs0Btn" href="#" class="btn blue" title="Importa dal sommario già presente nella pagina principale del testo in in ns0">Importa il sommario da ns0</a>');
		$('#compilaSommarioImportNs0Btn').click(function(e) {
			e.preventDefault();
			var ok = true;
			if (sommario.length > 1) {
				ok = confirm('L\'attuale sommario sarà cancellato e sovrascritto importandolo dalla pagina ns0. Confermi?');
			}
			if (ok) {
				$('#compilaSommarioBox ul li:not(:first-child)').remove();
				$('#compilaSommarioImportNs0Btn').attr('disabled',true);
				loadSommarioNs0();
			}
		});
	};
	
	scriviIndiceSommario = function() {
		nomebase = $('#wpprpindex-NomePagina').val();
		if (nomebase === '') {
			$('#compilaSommarioCloseBtn').click();
			alert('Compila almeno il campo "Nome della pagina nel namespace principale", poi riapri la Compilazione assistita');
			return;
		}
		
		$('#wpprpindex-Sommario').val('');
		alberoNomi = [nomebase, '', '', '', ''];
		$('#compilaSommarioBox ul li').each(function(index) {
			titolo = $(this).find('.titolo').val();
			if (titolo !== '') {
				nome = alberoNomi[0];
				from = $(this).find('.numPag').val();
				livello = $(this).attr('class').substr(-1);
				
				if (/^\:[a-z]+\:/.test(titolo)) {
					nome = titolo;
					titolo = titolo.replace(/^\:[a-z]+\:/, '');
					scriviRiga(nome, titolo, from);
				} else {
					if (livello > 1) {
						alberoNomi[livello-1] = titolo;
						nome = '';
						for (i = 0; i < livello - 1; i++) {
							nome += alberoNomi[i] + '/';
						}
						nome += titolo;
					} else if (index > 0) {
						alberoNomi[0] = titolo;
						nome = titolo;
						titolo = titolo.replace(/ \([A-Z][\s\S]+\)/, '');
					}
					scriviRiga(nome, titolo, from);
				}
			}
		});
	};
	
	/** calcola partendo dal numero di pagina del file */
	calcolaDelta = function(numPag) {
		//console.log("calcola delta per pagina " + numPag);
		if (!isNaN(numPag)) {
			numPag = parseInt(numPag);
			for (var i = 0; i < pagelists.length; i++) {
				if (pagelists[i].from <= numPag && numPag <= pagelists[i].to) {
					num = pagelists[i][numPag];
					if (num === undefined)
						return 0;
					if (isNaN(num))
						return num;
					return numPag - num;
				}
			}
		}
		return 0;
	};
	
	/** calcola partendo dal numero stampato sulle pagine */
	trovaPaginaFile = function(numPag) {
		for (var i = 0; i < pagelists.length; i++) {
			var pagelist = pagelists[i];
			for (var j in pagelist) {
				if (pagelist[j] == numPag || pagelist[j] == parseInt(numPag)) {
					//console.log('la pagina ' + numPag + ' corrisponde alla pagina ' + j + ' del file');
					return j;
				}
			}
		}
		return '';
	};
	
	parsePagelist = function() {
		pagelistTags = $('#wpprpindex-Pagine').val().match(/<pagelist[\s\S]*?\/>/igm);
		pagelists = [];
		for (i = 0; i < pagelistTags.length; i++) {
			pagelist = { from: 1, to: 10000 };
			for (j = 1; j < 10000; j++)
				pagelist[j] = j;
			
			parts = Array.from(pagelistTags[i].replace('/>', '').matchAll(/(\S+)\=(\S+)/gm));
			for (j = 0; j < parts.length; j++) {
				par = parts[j][1];
				val = parts[j][2].replace(/"/g, '');
				
				if (par == 'from')
					pagelist.from = parseInt(val);
				else if (par == 'to')
					pagelist.to = parseInt(val);
				else if (!isNaN(val)) {
					val = parseInt(val);
					for (l = parseInt(par); l <= 10000; l++) {
						pagelist[l] = val++;
					}
				}
				else if (par.includes('to') && !val.match(/^(?:roman|highroman|folio|folioroman|foliohighroman)$/gm)) {
					m = Array.from(par.matchAll(/(\d+)to(\d+)(\S*)/gm));
					start = m[0][1];
					end = m[0][2];
					oddEven = m[0][3];
					for (l = start; l <= end; l++) {
						if (oddEven === '' || (oddEven == 'odd' && l % 2 == 1) || (oddEven == 'even' && l % 2 == 0))
							pagelist[l] = val;
					}
				} else if (val == 'empty') {
					// ignore
				} else {
					pagelist[par] = val;
				}
			}
			
			for (j = 0; j < parts.length; j++) {
				par = parts[j][1];
				val = parts[j][2].replace(/"/g, '');
				
				if (val == 'roman' || val == 'highroman') {
					m = Array.from(par.matchAll(/(\d+)to(\d+)(\S*)/gm));
					start = parseInt(m[0][1]);
					end = parseInt(m[0][2]);
					oddEven = m[0][3];
					for (l = start; l <= end; l++) {
						if (oddEven === '' || (oddEven == 'odd' && l % 2 == 1) || (oddEven == 'even' && l % 2 == 0)) {
							pagelist[l] = romanize(pagelist[l]);
							if (val == 'roman')
								pagelist[l] = pagelist[l].toLowerCase();
						}
					}
				} else if (val == 'folio' || val == 'folioroman' || val == 'foliohighroman') {
					m = Array.from(par.matchAll(/(\d+)to(\d+)/gm));
					start = parseInt(m[0][1]);
					end = parseInt(m[0][2]);
					n = pagelist[start];
					folio = 'r';
					for (l = start; l <= end; l++) {
						pagelist[l] = n + folio;
						folio = folio == 'r' ? 'v': 'r';
						if (folio == 'r')
							n++;
					}
				}
			}
			
			pagelists.push(pagelist);
		}
		return pagelists;
	};
	
	romanize = function (num) {
		var lookup = {M:1000,CM:900,D:500,CD:400,C:100,XC:90,L:50,XL:40,X:10,IX:9,V:5,IV:4,I:1}, roman = '', i;
			for (i in lookup) {
				while (num >= lookup[i]) {
				roman += i;
				num -= lookup[i];
			}
		}
		return roman;
	};
	
	showPagelistInfo = function() {
		$("#wpprpindex-Pagine").parents('.oo-ui-fieldLayout-body').find('.oo-ui-fieldLayout-header .oo-ui-labelElement-label').first().append(
			' <span id="pagelistInfo">'
			+ '(<a target="_new" href="https://it.wikisource.org/wiki/Aiuto:Pagelist" title="Istruzioni all\'uso del tag pagelist (si apre in una nuova pagina)">Istruzioni</a>)'
			+ '<p><b>NOTA</b>: il pagelist deve mostrare <b>tutte le pagine</b>, anche quelle bianche all\'inizio e alla fine del libro!'
			+ '<br>I parametri "from" e "to" non vanno usati per nascondere le pagine!'
			+ '<br>Eventuali note o altre informazioni non vanno qui, ma nel campo "Note / Altro".</p>'
			+ '</span>');
		$("#wpprpindex-Note").parents('.oo-ui-fieldLayout-body').find('.oo-ui-fieldLayout-header .oo-ui-labelElement-label').first().append(
			'<br><b>Non mettere qui eventuali categorie</b>, usare il campo Categorie.'
		);
	};
	
	templatizeSource = function() {
		source = $('#wpprpindex-Fonte').val().replace("[//", "[http://");
		if (
			(source.indexOf("http") != -1) &&
			(source.indexOf("archive.org") != -1 || source.indexOf("google") != -1 || source.indexOf("beic") != -1) 
		) {
			source = source.replace(/\/?$/, "")
				.replace("[//", "[http://")
				.replace(/\/mode\/2up/, "")
				.replace(/https?:\/\/archive\.org\/(details|download)\/(\S+)/, '{{IA|$2}}')
				.replace(/#\S+/, "")
				.replace(/https?:\/\/books\.google\.[a-z]+\/books\?id\=(\S+)/, '{{GB|$1}}')
				.replace(/https?:\/\/www.google.it\/books\/edition\/(\S+)\/(\S+)\?(\S+)/, '{{GB|$2}}')
				.replace(/https?:\/\/gutenberg\.beic\.it(\S+)pid=(\d+)&(\S+)/, '{{BEIC|$2}}')
				.replace(/https?:\/\/gutenberg\.beic\.it(\S+)DOCCHOICE=(\d+)\.xml(\S+)/, '{{BEIC|$2}}')
				.replace("[{{", "{{").replace(/\}\} .*?\]/, "}}")
				.replace(/&\S+\}\}/, "}}");
			$('#wpprpindex-Fonte').val(source);
		}
	};
	
	loadSourceFromCommons = function() {
		if ($('#wpprpindex-Fonte').val() == '') {
			$.ajax({
				url: "/w/index.php?&title=" + mw.config.get('wgPageName').replace('Indice:', 'File:')
			}).done(function(response) {
				content = $('#mw-content-text', response);
				link = content.find('#fileinfotpl_src').next().find('a.external,a.extiw').first().attr('href');
				if (link && link.indexOf('wikipedia') == -1 && link.indexOf('wikimedia') == -1 && link.indexOf('wikisource') == -1) {
					if (link.startsWith('//'))
						link = 'http:' + link;
					hostname = $('<a>').prop('href', link).prop('hostname');
					$('#wpprpindex-Fonte').val('[' + link + ' ' + hostname + ']');
				}
			});
		}
	};
	loadSourceFromCommons();
	
	// mostra un alert se ci sono errori in Indice Sommario
	checkIndiceSommario = function(direct) {
		if (direct || !alertIndiceSommario) {
			var sommarioText = $('#wpprpindex-Sommario').val();
			
			// estrazione elementi Indice sommario e parsing
			var sommario = produciLista(sommarioText, "{"+"{Indice sommario", "}}", 1, "}}");
			var list = [];
			for (var j = 0; j < sommario.length; j++) {
				var riga = parseTemplate("Indice sommario", sommario[j])[0];
				if (list.includes(riga.nome)) {
					alertIndiceSommario = true;
					alertCounter++;
					// la prima volta non mostro l'alert (per dare tempo all'utente di modificare dopo un copia-incolla)
					if (direct || alertCounter > 1) {
						alert('Ci sono due o più righe di Indice Sommario che puntano alla stessa pagina: ' + riga.nome +
							'. Si ricorda che il campo nome= deve contenere il nome completo della pagina. È possibile comunque salvare e correggere in un secondo momento.');
						alertShown = true;
					}
					return true;
				} else if (riga.nome != undefined && riga.nome.trim() != '') {
					list.push(riga.nome);
				}
			}
		}
		return false;
	};
	
	/* prende i tooltip che appaiono cliccando "i" e li aggiunge anche su label e campi */
	addTooltips = function() {
		$('.prp-index-fieldLayout .oo-ui-fieldLayout-header .oo-ui-labelElement-label').each(function(index) {
			fieldName = $(this).attr('for');
			tooltipId = $('[name="' + fieldName + '"').attr('aria-describedby');
			tooltipText = $('#' + tooltipId).html();
			$(this).attr('title', tooltipText);
			$('[name="' + fieldName + '"').attr('title', tooltipText);
		});
	};
	
	normalizeApostrofi = function() {
		$('#wpprpindex-Sommario').val($('#wpprpindex-Sommario').val().replace(/’/g, "'").replace(/—/g, "-"));
	};
		
	window.setInterval(function() {
		counter++;
		addTooltips();
		normalizeApostrofi();
		if ($('#compilaSommarioBtn').length === 0)
			initCompilaSommario();
		if ($('#pagelistInfo').length === 0)
			showPagelistInfo();
		templatizeSource();
		// ogni 2 minuti ripropone l'alert
		if (counter % 120 == 0)
			alertIndiceSommario = false;
		checkIndiceSommario(false);
		
		if ($('#wpSave, #wpPreview').length && !onSaveCheck) {
			$('#wpSave, #wpPreview').click(function(e) {
				if (!alertShown && checkIndiceSommario(true)) {
					e.preventDefault();
				}
			});
			onSaveCheck = true;
		}
	}, 1000);
});