MediaWiki:Gadget-diacritici.js

E Wikisource

Note: After publishing, you may have to bypass your browser's cache to see the changes.

  • Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
  • Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
  • Internet Explorer / Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5
  • Opera: Press Ctrl-F5.
/***************   funzioni specifiche per diacritici **************/

mw.loader.using("jquery.ui").then( function() {
	(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 	
		
		
		
		var diac=$("<div>")
			.attr("class","diacriticiGadget")
			.css({"font-family":"Arial Unicode MS",
				"display":"none",
				"font-size":"140%",
				"line-height":"1",
				"width":"10em",
				"position":"fixed",
				"border":"3px solid black",
				"min-width":"50px",
				"min-height":"20px",
				"top":"50px",
				"left":"50px",
				"background-color":"rgb(230, 255, 230)",
				"z-index":"1000"})
			.appendTo($("#content")); 
		// diac.draggable().resizable(); 
		var spanSelector=$('<form action="" style="font-size:1pc;line-height:1.5em;">  <input type="radio" name="action" value="Replace" checked> Replace<input type="radio" name="action" value="add"> Add</form>')
		
	
		spanSelector.click(function(){
			mw.activeElement.focus();
		});
		
		
		var closeButton=$('<input type="button" value="Close" style="position:absolute; top:1px; right:1px; " 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").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));
	
		// attivazione memorizzazione elemento attivo
		mw.activeElement=$("#wpTextbox1")[0];
		$("textarea, input[type!='checkbox'][type!='button'][type!='search'][type!='hidden'][type!='submit'][type!='radio'][name!='wpAntispam']").focusin(function () {
			mw.activeElement=this;
		});
	
	
	})($,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': 'format',
				'tools': {
					'diacritici': {
						label: '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
						}
					}
				}
			});
		});
	}
});