User:Alex brollo bis/diacritici.js

From Wikisource
Jump to navigation Jump to search

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.
(function (mw, $) {
	/***************   funzioni specifiche per diacritici **************/
	// range combining: 768-879 (0x0300-0x036f)
	// Crea un contenitore contenitore draggabile
	// attuali dipendenze: mw.alex.getSelection(), mw.alex.writeSelection(),mw.alex.activeElement
	function apply(span) {
		var curDiac = $(span).text().normalize("NFD");
		var t = mw.alex.getSelection();
		var n, car;
		if (curDiac.length === 3) {curDiac = curDiac.substring(1, 2); } else {curDiac = ""; }

		// ricerca all'indietro del primo carattere non combining
		if ($(".diacritici span").eq(0).text() === "REP ") {
			n = 1;
			while (t[0].codePointAt(t[0].length - n) >= 768 && t[0].codePointAt(t[0].length - n) < 879) {n += 1; }
			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;
			mw.alex.writeSelection(t);
		} else {
			t[0] += curDiac;
			mw.alex.writeSelection(t);
		}
	}

	// CODICE IN ESECUZIONE
	var diac = $("<div>")
		.attr("class", "diacritici")
		.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 = $("<span>").text("REP ").css("font-size", "1pc").click(function () {
		if ($(this).text() === "ADD ") {
			$(this).text("REP ").css("color", "red");
		} else {
			$(this).text("ADD ").css("color", "green");
		}
	});
	var closeButton = $("<span>").text("CLOSE ").css("font-size", "1pc").click(function () {
		$(".diacritici").toggle();
	});
	// costruzione caratteri con diacritico
	// elenco diacritici separati da |
	var i;
	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 for
	//$("#newtattoo").css("position", "").appendTo($(".diacritici"));
	$(".diacritici span").click(function () { apply(this); });
	spanSelector.insertBefore($(".diacritici span").eq(0));
	closeButton.insertAfter($(".diacritici span").eq(0));
	$("<br>").insertAfter($(".diacritici span").eq(1));
}(mw, jQuery));