Benutzer:Nastoshka/common.js

aus Wikisource, der freien Quellensammlung

Hinweis: Leere nach dem Veröffentlichen den Browser-Cache, um die Änderungen sehen zu können.

  • Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
  • Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
  • Internet Explorer/Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
  • Opera: Strg+F5
/*
HERZLICHEN DANK DEM ITALIENISCHEN WIKISOURCE FÜR DIESE SEHR NÜTZLICHE TOOLS
 und besonders dem [[Benutzer:Alex brollo]]
*/

function scriviNumero(line, num) {
	var str = line;
	var n = 0;
	//salta gli spazi ad inizio riga
	while (str.charAt(0) && str.charAt(0) == ' ') {
		str = str.substring(1);
		n++;
	}
	//salta gli ":" ad inizio riga
	while (str.charAt(0) && str.charAt(0) == ':') {
		str = str.substring(1);
		n++;
	}
	if (n > 0) line = line.substring(0, n) + "{{Zeile|" + num + "}}" + line.substring(n);
	else line = "{{Zeile|" + num + "}}" + line;
	return line;
}
/* aggiunge il numero di riga
 * con mod=1 mette il numero ogni ultimo verso del paragrafo
 * con mod=2 mette il numero ogni x righe
 * 
 * TODO: escludere le righe con {{Centrato}}
 */
 
function numeroRiga(mod, x) {
	var testoCasella = document.getElementById("wpTextbox1").value;
	// cancella tutti gli R //
	if (mod === 0) {
		while (find_stringa(testoCasella, "{{Zeile|", "}}", 1) !== "") {
			testoCasella = testoCasella.replace(find_stringa(testoCasella, "{{Zeile|", "}}", 1), '');
		}
		while (find_stringa(testoCasella, "{{zeile|", "}}", 1) !== "") {
			testoCasella = testoCasella.replace(find_stringa(testoCasella, "{{zeile|", "}}", 1), '');
		}
		document.getElementById("wpTextbox1").value = testoCasella;
		return;
	}
	//esci se manca il poem
	if (testoCasella.indexOf("<poem>") == -1 || testoCasella.indexOf("</poem>") == -1) {
		console.log("uscita 1");
		return;
	}
	//prende il poem in cui si trova il cursore
	var pos = document.getElementById("wpTextbox1").selectionStart;
	begin = testoCasella.substring(0, pos + 6).lastIndexOf("<poem>");
	if (begin == -1) {
		console.log("uscita 2");
		return;
	}
	end = testoCasella.substring(begin).indexOf("</poem>") + testoCasella.substring(0, begin).length;
	var prima = testoCasella.substring(0, begin + 6);
	var dopo = testoCasella.substring(end);
	//scomponi il testo in singole righe
	var lines = testoCasella.substring(begin + 6, end).split("\n");
	var num = 1;
	var center = false;
	//solo in namespace Pagina, fai scegliere all'utente da che numero partire (l'ultimo numero della pagina prima)
	if (mw.config.get("wgCanonicalNamespace") == "Page") {
		//se questo è il primo poem della pagina, proponi di continuare dall'ultimo numero; altrimenti proponi 1
		if (begin == testoCasella.indexOf("<poem>")) {
			verso = mw.util.getParamValue('verso');
			if (!verso) {
				if (typeof testoPagPrec != 'undefined' && typeof ultimoV != 'undefined') verso = ultimoV();
				else verso = "1";
			}
			// aggiunta di Alex brollo: si esegue solo se esistono la funzione ultimoV e la variabile testoPagPrec
		} else verso = "1";
		num = parseInt(prompt("da che numero parto?", verso));
	}
	num--;
	for (var i = 0; i < lines.length; i++) {
		//non considerare il testo dentro <center></center>
		if (lines[i].toLowerCase().lastIndexOf("<center>") > -1) center = true;
		//salta le righe vuote, o centrate, o marcate con {{r-}}
		if (!center && lines[i].replace(/\s/g, "") !== "" && lines[i].toLowerCase().indexOf("{{r-}}") == -1) {
			num++;
			//in modalita' 1, controlla che la prossima riga sia l'ultima o una riga bianca
			if (mod == 1 && (i + 1 >= lines.length || lines[i + 1].replace(/\s/g, "") === "")) {
				lines[i] = scriviNumero(lines[i], num);
			}
			if (mod == 2 && num % x === 0) {
				lines[i] = scriviNumero(lines[i], num);
			}
		}
		if (lines[i].toLowerCase().lastIndexOf("</center>") > -1) center = false;
	}
	//rimetti insieme le righe
	var out = lines[0];
	for (i = 1; i < lines.length; i++) {
		out = out + "\n" + lines[i];
	}
	document.getElementById("wpTextbox1").value = prima + out + dopo;
	//modifica il link alla prossima pagina, in modo da "ricordarsi" a che verso siamo arrivati
	if (mw.config.get("wgCanonicalNamespace") == "Page" && mw.config.get("wgAction") != 'history' && $("#ca-next span a").length) {
		mw.loader.using('ext.proofreadpage.page', function () {
			setURLVar($("#ca-next span a"), "verso", num + 1);
			act = $("#editform").attr("action");
		});
	}
}
 
/*
function newRegexTool(name, functionname, descrizione) {
	var link=$("<a>").attr("href","javascript:"+functionname).attr("title","descrizione").addClass("sidebar_link").text(name);
	var newLi=$("<li>").append(link);
	$("#p-tb ul").append(newLi);
}
 
$(document).ready(function () {
	if (mw.config.get("wgCanonicalNamespace")==="Page" 
	&& (mw.config.get("wgAction")==="edit" ||mw.config.get("wgAction")==="submit" )) {
	// regexTool("numero ogni 3 versi","numeroRiga(2,3)");
	// regexTool("numero ogni 4 versi","numeroRiga(2,4)");
	regexTool("numero ogni 5 versi","numeroRiga(2,5)");
	regexTool("numero a fine strofa","numeroRiga(1)");
	regexTool("elimina numeri","numeroRiga(0)");
	}
});
*/
 
/*
HERZLICHEN DANK DEM ITALIENISCHEN WIKISOURCE FÜR DIESE SEHR NÜTZLICHE TOOLS
 
*/
// inizializzazione di localStorage.memoRegex come oggetto vuoto se indefinito
if (localStorage.memoRegex===undefined) localStorage.memoRegex=JSON.stringify({});
 
function regexTool(name, functionname, descrizione) {
	if (!descrizione) {
		descrizione = name;
	}
	if  (mw.config.get("wgServer") === "//de.wikisource.org") {
           newButton({
		nome: name,
		funzione: functionname,
		messaggio: descrizione,
		classe: "buttonRfm",
		stile: "display:none",
		azione: "es"
	});
        }
	if (skin == "monobook") {
		var voce = $('<li><a href="javascript:' + functionname + '" title="' + descrizione + '">' + name + '</a></li>');
		$("#p-regex").append(voce);
		return;
	}
	var newline = document.createElement('li');
	var newlink = document.createElement('a');
	newlink.setAttribute('href', 'javascript:' + functionname);
	newlink.setAttribute('title', descrizione);
	newlink.setAttribute('class', 'sidebar-link');
	newlink.appendChild(document.createTextNode(name));
	newline.appendChild(newlink);
	toollist.appendChild(newline);
}
 
function leggiBox(area) {
	if (area === undefined) {
		if (mw.config.get('wgCanonicalNamespace') == "Page" || $("#editBox").length===1) area = 1;
		else area = 0;
	}
	return $('textarea')[area] === undefined ? '' : $('textarea')[area].value;
}
 
function creaBottoniera() {
	$('#' + (mw.user.options.get('skin') === 'modern' ? 'mw_' : '') + 'content')
	.append('<div id="newtattoo" align="right" style="position:fixed;bottom:0; right:0; background-color:white; border: 1px solid; border-color:#F0F0F0; z-index:1500;"></div>');
}
 
function applicaPoem() {
	var textbox = document.getElementsByName('wpTextbox1')[0];
	textbox.value = '<poem>' + textbox.value.replace(/\s+$/, "").replace(/^\s+/, "") + '</poem>\n';
}
function aggiustaParagrafi() {
	textbox = document.getElementsByName('wpTextbox1')[0];
	testo = textbox.value;
	poems = produciLista(testo, "<poem>", "</poem>", 1);
	for (i = 0; i < poems.length; i += 1) {
		testo = testo.replace(poems[i], "[#" + i + "#]");
	}
	testo = testo.replace(/ \n/g, "\n").replace(/([\.\?\!»]\n)([^\n])/g, '$1\n$2');
	for (i = 0; i < poems.length; i += 1) {
		testo = testo.replace("[#" + i + "#]", poems[i]);
	}
	textbox.value = testo;
}
 
function find_stringa(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;
}
function newButton(nome, funzione, azione, messaggio) { 
// azione è una stringa composta da v,e,s,h rispettivamente view,edit,submit,history
// se nome è un oggetto svolgilo
	var p;
	if (typeof(nome) === "string") {
		p = {
			nome: nome,
			funzione: funzione,
			azione: azione,
			messaggio: messaggio
		};
	} else {
		p = nome;
	}
	if (p.messaggio===undefined) p.messaggio="Keine Hilfe";
	if (p.classe===undefined) p.classe="baseButton";
	if (p.stile===undefined) p.stile="display:inline";
	if (p.namespaces!==undefined) {
		var listaNamespaces=p.namespaces.split("|");
		for (var i=0; i<listaNamespaces.length; i+=1) {
			listaNamespaces[i]=$.trim(listaNamespaces[i]); 
			if (["ns0", "Main", "Haupt"].indexOf(listaNamespaces[i]) !== -1) {
				listaNamespaces[i] == "";
			}
		}
		if ($.inArray(mw.config.get('wgCanonicalNamespace'),p.namespaces.split(","))==-1) return;
	}
// Passo 1: se newtatooo non esiste, lo crea
	if ($("#newtattoo").length==0) creaBottoniera();
	// fine se azione=history
	if (mw.config.get('wgAction') === "history") {
		return;
	}
	// normalizzazione function
	if (p.funzione.indexOf("(") === -1 && p.funzione.indexOf(")") === -1) {
		p.funzione += "()";
	}
	// default: bottone presente in view, edit, 
	if (p.azione === undefined) {
		p.azione = "ves";
	}
		// messaggio di default
	if (p.messaggio === undefined) {
		p.messaggio = "Keine Hilfe";
	}
	// valutazione condizione di visualizzazione
	if (mw.config.get('wgAction') === "edit" && p.azione.indexOf("e") === -1) {
		return;
	}
	if (mw.config.get('wgAction') === "view" && p.azione.indexOf("v") === -1) {
		return;
	}
	if (mw.config.get('wgAction') === "submit" && p.azione.indexOf("s") === -1) {
		return;
	}
	// caso pulsante=immagine
	if (p.nome.substring(0, 2) == "//") {
		var html = '<img class="'+p.classe+'" style="'+p.stile+'" src="' + p.nome + '" onclick="' + p.funzione + '" title="' + p.messaggio +'"';
		if (p.ondblclick!==undefined) html+=' ondblclick="'+p.ondblclick+'"';
		html+='/>';
	}
	// caso pulsante=label
	else {
		var html = '<button class="'+p.classe+'" style="'+p.stile+'" type="button" title="' + p.messaggio + '" onclick="' + p.funzione +'"';
		if (p.ondblclick!==undefined) html+=' ondblclick="'+p.ondblclick+'"';
		html+='><small>' + p.nome + '</small></button>';                
	}
	$("#newtattoo").append($(html));
	return false;
}
function produciLista(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;
}
 
/* conta il numero di occorrenze di stringa dentro testo*/
function count(testo, stringa) {
	n = 0;
	while (testo.indexOf(stringa) > -1) {
		n = n + 1;
		testo = testo.replace(stringa, "");
	}
	return n;
}
 
function joinLines() {
	// eliminazione acapo che esclude sia i testi <poem> che le righe che iniziano con  ";:#*" (liste html)
	var editbox = document.getElementsByName('wpTextbox1')[0];
	// fase 1: codifica
	if (editbox.value.indexOf("<poem") != -1) {
		lista = produciLista(editbox.value, "<poem", "</poem>", 1);
		for (i = 0; i <= lista.length - 1; i = i + 1) {
			marcatore = "###" + i + "###";
			editbox.value = editbox.value.replace(lista[i], marcatore);
		}
	}
	// fase2: eliminazione acapo singoli, con conservazione dei multipli
	//if (mw.config.get("wgTitle").indexOf("Trattato di archeologia (Gentile).djvu")==-1) {
	editbox.value = editbox.value.replace(/([^>}\n])\n([^<\n\:\;\*\#\|\{])/g, '$1 $2'); //linux
	editbox.value = editbox.value.replace(/([^>}\r\n])\r\n([^<\r\n\:\;\*\#\|\{])/g, '$1 $2'); //windows
	//    }
	// eliminazione sequenze di spazi, sostituiti da spazio singolo
	editbox.value = editbox.value.replace(/  +/g, ' ');
	// fase 3: decodifica
	if (editbox.value.indexOf("###0###") != -1) {
		for (i = 0; i <= lista.length - 1; i = i + 1) {
			marcatore = "###" + i + "###";
			editbox.value = editbox.value.replace(marcatore, lista[i]);
		}
	}
}
 
newButton("join", "joinLines()");
newButton("Sistema","aggiustaParagrafi()");
newButton("Poema", "applicaPoem()");
newButton("ogni 5","numeroRiga(2,5)");
newButton("fine strofa","numeroRiga(1)");
newButton("pulisci zeile","numeroRiga(0)");
 
// WIKIWÖRTERBUCH NACHSCHLAGEN
mw.loader.load('//en.wikinews.org/w/index.php?title=MediaWiki%3AGadget-dictionaryLookupHover.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');

// Links
mw.util.addPortletLink('p-navigation','/wiki/Wikisource:Verlinkungen','LinkBiblioteche');
mw.util.addPortletLink('p-navigation','/wiki/Wikisource:Tipps_und_Tricks_für_Korrektoren','KorrekturenTips');

// Buttons

/**
 * Extra buttons in toolbar
 * @stats [[File:Krinkle_InsertWikiEditorButton.js]]
 */
$.ajax({
	dataType: 'script',
	cache: true,
	url: '//meta.wikimedia.org/w/index.php?title=User:Krinkle/Scripts/InsertWikiEditorButton.js&action=raw&ctype=text/javascript'
}).done(function () {

	// Happy face
	krInsertWikiEditorButton({
		id: "mw-customeditbutton-myspecialbutton",
		icon: "//upload.wikimedia.org/wikipedia/commons/0/02/Gnome-stock_person_KA.svg",
		label: 'PERSONDATA',
		insertBefore: '{{Personendaten |NACHNAME=',
		insertAfter: '|VORNAMEN= |ALTERNATIVNAMEN= |SORTIERUNG= |PERSON= |KURZBESCHREIBUNG= |SONSTIGES= |GEBURTSDATUM= |GEBURTSORT=[[]] |STERBEDATUM= |STERBEORT=[[]]  |STERBEPRÄPO= |BILD= |WIKIQUOTE= |COMMONS=  |PND= }}',
		sampleText: 'Nastoshka/common.js'
	});
 
});