MediaWiki:Gadget-pulsanti-diacritici.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.
/***************   funzioni specifiche per diacritici **************/


(function($,mw) {

	function ss(){
		var textarea=mw.activeElement; // elemento dom wpTextbox1
		var txt=$(textarea).val();
		var s=[];
		s[0]=txt.substring(0,textarea.selectionStart);
		s[1]=txt.substring(textarea.selectionStart,textarea.selectionEnd);
		s[2]=txt.substring(textarea.selectionEnd);
		return s;
	} 
	
		// riscrive wpTextbox1 e ristabilisce il focus/la selezione attiva
		// riceve un array tipo [testo precedente, testo selezionato, testo seguente]
	function sw(t) {
		var textarea=mw.activeElement; // elemento dom wpTextbox1=$("#wpTextbox1")[0]; // elemento dom wpTextbox1
		textarea.value=t.join("");
		textarea.selectionStart=t[0].length;
		textarea.selectionEnd= t[0].length + t[1].length;
		textarea.focus();
	}
	function apply(span) {
		var curDiac=$(span).text().normalize("NFD");
		if (curDiac.length==3) curDiac=curDiac.substring(1,2); else curDiac="";
		var t=ss();
		// ricerca all'indietro del primo carattere non combining
		if ($(".diacriticiGadget input").eq(0).is(":checked")) {
			var n=1;
			while (t[0].codePointAt(t[0].length-n) >= 768 && t[0].codePointAt(t[0].length-n) <879) {n+=1;}
			var car=t[0].substring(t[0].length-n,t[0].length).normalize("NFD");
			if (car.length>1) car=car.substring(0,1);
			car=(car+curDiac).normalize("NFC");
			t[0]=t[0].substring(0,t[0].length-n)+car;
			sw(t);
		} else {
			t[0]+=curDiac;
			sw(t);
		}
		
	}
	
	// CODICE IN ESECUZIONE 	
	
	// console.log("diacritici nuova versione");
	
	var diac=$("<div>")
		.attr("class","diacriticiGadget")
		.appendTo($("#content"))
		.draggable(); 
	var spanSelector=$('<form action="">  <input type="radio" name="action" value="Replace" checked> Replace<input type="radio" name="action" value="add"> Add</form>');
	var closeButton=$('<input type="button" value="Close" id="diacriticiClose" onclick="$(&quot;.diacriticiGadget&quot;).toggle()">');
	// costruzione caratteri con diacritico
	// elenco diacritici separati da |
	var diacritici=("\u25cc|\u25cc\u0300|\u25cc\u0301|\u25cc\u0302|\u25cc\u0303|\u25cc\u0304|\u25cc\u0305|\u25cc\u0306"+
	"|\u25cc\u0307|\u25cc\u0308|\u25cc\u0309|\u25cc\u030a|\u25cc\u030b|\u25cc\u030c|\u25cc\u030d|\u25cc\u0311|\u25cc\u0312"+
	"|\u25cc\u0313|\u25cc\u0314|\u25cc\u0320|\u25cc\u0323|\u25cc\u0324|\u25cc\u0326|\u25cc\u0327|\u25cc\u0330|\u25cc\u0331"+
	"|\u25cc\u0335|\u25cc\u0345|\u25cc\u0361").normalize("NFC").split("|");
	// ogni diacritico viene inserito in uno span e al click viene collegata una funzione di scambio diacritico
	for (i=0;i<diacritici.length;i+=1) {
		diac.append($("<span>").text(diacritici[i]+" ")  // chiusura funzione click
		); // chiusura append
	}  // chiusura for
	
	$(".diacriticiGadget span").click(function() { apply(this);});
	spanSelector.insertBefore( $(".diacriticiGadget span").eq(0));
	closeButton.insertAfter( $(".diacriticiGadget form").eq(0));
	


})($,mw);

/* diacritici */
if ( typeof $ != 'undefined' && typeof $.fn.wikiEditor != 'undefined' ) {
	$( function() {
		function toggleDiacritici() {
			if ($(".diacriticiGadget").length==2) $(".diacriticiGadget").eq(0).remove();
			$(".diacriticiGadget").toggle();
		}
		
		$( '#wpTextbox1' ).wikiEditor( 'addToToolbar', {
			'section': 'advanced',
			'group': 'insert',
			'tools': {
				'diacritici': {
					label: 'Inserisci diacritici',
					type: 'button',
					icon: '//upload.wikimedia.org/wikipedia/commons/thumb/d/da/Tilde_overlay.svg/20px-Tilde_overlay.svg.png',
					action: {
						type: 'callback',
						execute: toggleDiacritici
					}
				}
			}
		});
	});
}