MediaWiki:Gadget-diacritici.js
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)
- Edge: Hold Ctrl while clicking Refresh, or 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="$(".diacriticiGadget").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
}
}
}
});
});
}
});