User:Alex brollo/bat.js
Appearance
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.
// ViewInSequence (vis) activation
//importScript("User:Alex brollo/vis.js");
//importStylesheet("User:Alex brollo/vis.css");
// creo un'unica variabile globale, non si sa mai che mi serva; anzi proviamo senza
// var alex={};
// mw.loader.load("jquery.ui");
$("head").append($('<style>/*.poem {position:relative;} .poem p {margin-left:3em;}*/ .quote:target {background-color:#DEF;}</style>'));
// funzioni pagina.js
//mw.loader.using(['mw.Api',"jquery.ui"]).then(function() {
mw.loader.using(['mw.Api']).then(function() {
console.log("passo 1");
if (mw.config.get("wgServer")!=="//it.wikisource.org") {
mw.loader.load('//wikisource.org/w/index.php?title=User:Alex_brollo/eis.js&action=raw&ctype=text/javascript' );
}
(function ($,mw,alex) {
// riceve un template RigaIntestazione e incrementa di 2 il numero pagina
// template è il nome del template di cui fare il parsing (es. RigaIntestazione )
// restituisce un oggetto costituito da un dizionario e una lista
// testo è il testo dove ricercare il template (default leggiBox() )♀
// il dizionario contiene le coppie nome paramtro - valore
// la lista contiene i nomi dei parametri, o cifre (in stringa) per i parametri posizionali
// il nome del template è associato al parametro con chiave "0" )
// esempio: da Pagina:Eneide (Caro).djvu/91 ilcomando:
// parseTemplate("RigaIntestazione",leggiBox(0))
// restituisce [{"0":"RigaIntestazione","1":"48","2":"{{Sc|l'eneide.}}","3":"[1158-1182]"},["0","1","2","3"]]
console.log("Passo 2");
alex.parseTemplate=function (template, testo) {
function cod(testo) {
var l = produciLista(testo, "{"+"{", "}}", 1, "{{");
for (var i = 0; i < l.length; i += 1) {
testo = testo.replace(l[i], l[i].replace(/\|/g, "__!__").replace(/=/g, "__eq__"));
}
l = produciLista(testo, "[[", "]]", 1, "[[");
for (i = 0; i < l.length; i += 1) {
testo = testo.replace(l[i], l[i].replace(/\|/g, "__!__"));
}
return testo;
}
function decod(testo) {
testo = testo.replace(/__!__/g, "|").replace(/__eq__/g, "=");
return testo;
}
if (testo === undefined) testo = leggiBox();
var cap=template.substring(0,1).toLocaleUpperCase()+template.substring(1);
testo=testo.replace("{{"+cap,"{{"+template);
var t = find_stringa(testo, "{"+"{" + template, "}}", 1, "{{");
var l = []; // lista delle keys
t = "0=" + t.substring(2, t.length - 2); // nome del template in parametro "0"
l.push["0"];
var ts = {};
var n = 1;
t = cod(t);
t = t.split("|");
// element for element
for (i = 0; i < t.length; i += 1) {
// case param is positional
if (t[i].indexOf("=") == -1) {
t[i] = n + "=" + t[i];
n = n + 1;
}
var els = [];
els[0] = t[i].substring(0, t[i].indexOf("=")).trim();
els[1] = t[i].substring(t[i].indexOf("=") + 1).trim();
if (els[1][els[1].length - 1] == "\n") els[1] = els[1].substring(0, els[1].length - 1);
ts[els[0]] = decod(els[1]);
l.push(els[0]);
}
return [ts, l];
};
alex.rewriteTemplate=function (x,mini) {
if (mini===undefined) mini=true;
var testo = "";
if (mini) {
$.each(x[1], function (indice, valore) {
if ((/^\d+$/).test(valore))
testo += "|" + x[0][valore];
else
testo += "|" + valore + "=" + x[0][valore];
});
testo = "{{" + testo.substring(1) + "}}";
} else {
$.each(x[1], function (indice, valore) {
if (valore != "0") testo += " | " + valore + " = " + x[0][valore] + "\n";
});
testo = "{{" + x[0]["0"] + "\n" + testo + "}}\n";
testo = testo.replace(/\n\s\|\s\d*\s=\s/g, "\n | ");
}
return testo;
}
alex.newAutoRi=function(header) {
function incrementa(t){
var pagina=/(\d+)/.exec(t)[1];var pnew=(pagina*1+2)+""; return t.replace(pagina,pnew);
}
// normalizzazione RigaIntestazione
header=header.replace("{{Ri|","{{RigaIntestazione|").replace("{{ri|","{{RigaIntestazione|").replace("{{rigaIntestazione|","{{RigaIntestazione|");
var oldRi=find_stringa(header,"{{RigaIntestazione|","}}",1,"{{");
if (oldRi==="") return header;
var parsedRi=parseTemplate("RigaIntestazione",oldRi);
// analisi
var valido=[];
var pagina="";
for (i=1;i<4;i+=1) {
if (/^\d+$/.test(parsedRi[0][i]) || /— \d+ —/.test(parsedRi[0][i]) || /\|\d+}/.test(parsedRi[0][i])) valido.push(i);
}
console.log(valido,parsedRi);
switch (valido.length) {
case 0:
break;
case 1:
// pagina=/(\d+)/.exec(parsedRi[0][valido[0]])[1];
parsedRi[0][valido[0]]=incrementa(parsedRi[0][valido[0]]);
break;
default:
break;
}
return header.replace(oldRi,rewriteTemplate(parsedRi));
};
alex.moveRi=function() {
var ri=find_stringa($("#wpTextbox1").val(),"{{RigaIntestazione|","}}",1,"{{");
var pp=find_stringa($("#wpTextbox1").val(),"{{PieDiPagina|","}}",1,"{{");
var ri1=find_stringa($("#wpHeaderTextbox").val(),"{{RigaIntestazione|","}}",1,"{{");
var pp1=find_stringa($("#wpFooterTextbox").val(),"{{PieDiPagina|","}}",1,"{{");
var header=$("#wpHeaderTextbox").val();
var body=$("#wpTextbox1").val();
var footer=$("#wpFooterTextbox").val();
if (ri!=="") {
if (ri1!=="") header=header.replace(ri1,"");
header=ri+header;
$("#wpHeaderTextbox").val(header);
body=body.replace(ri,"");
$("#wpTextbox1").val(body);
}
if (pp!=="") {
if (pp1!=="") footer=footer.replace(pp1,"");
footer=footer+pp;
$("#wpFooterTextbox").val(footer);
body=body.replace(pp,"");
$("#wpTextbox1").val(body);
}
};
/**
* http://www.openjs.com/scripts/events/keyboard_shortcuts/
* Version : 2.01.B
* By Binny V A
* License : BSD
*/
alex.shortcut = {
'all_shortcuts':{},//All the shortcuts are stored in this array
'add': function(shortcut_combination,callback,opt) {
if (alex.shortcut.all_shortcuts[shortcut_combination.toLowerCase()]!==undefined) {
console.log(shortcut_combination.toLowerCase()+" già registrata");
return false;
}
//Provide a set of default options
var default_options = {
'type':'keydown',
'propagate':false,
'disable_in_input':false,
'target':document,
'keycode':false
};
if(!opt) opt = default_options;
else {
for(var dfo in default_options) {
if(typeof opt[dfo] == 'undefined') opt[dfo] = default_options[dfo];
}
}
var ele = opt.target;
if(typeof opt.target == 'string') ele = document.getElementById(opt.target);
var ths = this;
shortcut_combination = shortcut_combination.toLowerCase();
//The function to be called at keypress
var func = function(e) {
e = e || window.event;
if(opt.disable_in_input) { //Don't enable shortcut keys in Input, Textarea fields
var element;
if(e.target) element=e.target;
else if(e.srcElement) element=e.srcElement;
if(element.nodeType==3) element=element.parentNode;
if(element.tagName == 'INPUT' || element.tagName == 'TEXTAREA') return;
}
//Find Which key is pressed
if (e.keyCode) code = e.keyCode;
else if (e.which) code = e.which;
var character = String.fromCharCode(code).toLowerCase();
if(code == 188) character=","; //If the user presses , when the type is onkeydown
if(code == 190) character="."; //If the user presses , when the type is onkeydown
var keys = shortcut_combination.split("+");
//Key Pressed - counts the number of valid keypresses - if it is same as the number of keys, the shortcut function is invoked
var kp = 0;
//Work around for stupid Shift key bug created by using lowercase - as a result the shift+num combination was broken
var shift_nums = {
"`":"~",
"1":"!",
"2":"@",
"3":"#",
"4":"$",
"5":"%",
"6":"^",
"7":"&",
"8":"*",
"9":"(",
"0":")",
"-":"_",
"=":"+",
";":":",
"'":"\"",
",":"<",
".":">",
"/":"?",
"\\":"|"
};
//Special Keys - and their codes
var special_keys = {
'esc':27,
'escape':27,
'tab':9,
'space':32,
'return':13,
'enter':13,
'backspace':8,
'scrolllock':145,
'scroll_lock':145,
'scroll':145,
'capslock':20,
'caps_lock':20,
'caps':20,
'numlock':144,
'num_lock':144,
'num':144,
'pause':19,
'break':19,
'insert':45,
'home':36,
'delete':46,
'end':35,
'pageup':33,
'page_up':33,
'pu':33,
'pagedown':34,
'page_down':34,
'pd':34,
'left':37,
'up':38,
'right':39,
'down':40,
'f1':112,
'f2':113,
'f3':114,
'f4':115,
'f5':116,
'f6':117,
'f7':118,
'f8':119,
'f9':120,
'f10':121,
'f11':122,
'f12':123
};
var modifiers = {
shift: { wanted:false, pressed:false},
ctrl : { wanted:false, pressed:false},
alt : { wanted:false, pressed:false},
meta : { wanted:false, pressed:false} //Meta is Mac specific
};
if(e.ctrlKey) modifiers.ctrl.pressed = true;
if(e.shiftKey) modifiers.shift.pressed = true;
if(e.altKey) modifiers.alt.pressed = true;
if(e.metaKey) modifiers.meta.pressed = true;
for(var i=0; k=keys[i],i<keys.length; i++) {
//Modifiers
if(k == 'ctrl' || k == 'control') {
kp++;
modifiers.ctrl.wanted = true;
} else if(k == 'shift') {
kp++;
modifiers.shift.wanted = true;
} else if(k == 'alt') {
kp++;
modifiers.alt.wanted = true;
} else if(k == 'meta') {
kp++;
modifiers.meta.wanted = true;
} else if(k.length > 1) { //If it is a special key
if(special_keys[k] == code) kp++;
} else if(opt.keycode) {
if(opt.keycode == code) kp++;
} else { //The special keys did not match
if(character == k) kp++;
else {
if(shift_nums[character] && e.shiftKey) { //Stupid Shift key bug created by using lowercase
character = shift_nums[character];
if(character == k) kp++;
}
}
}
}
if(kp == keys.length &&
modifiers.ctrl.pressed == modifiers.ctrl.wanted &&
modifiers.shift.pressed == modifiers.shift.wanted &&
modifiers.alt.pressed == modifiers.alt.wanted &&
modifiers.meta.pressed == modifiers.meta.wanted) {
callback(e);
if(!opt['propagate']) { //Stop the event
//e.cancelBubble is supported by IE - this will kill the bubbling process.
e.cancelBubble = true;
e.returnValue = false;
//e.stopPropagation works in Firefox.
if (e.stopPropagation) {
e.stopPropagation();
e.preventDefault();
}
return false;
}
}
}
this.all_shortcuts[shortcut_combination] = {
'callback':func,
'target':ele,
'event': opt['type']
};
//Attach the function with the event
if(ele.addEventListener) ele.addEventListener(opt['type'], func, false);
else if(ele.attachEvent) ele.attachEvent('on'+opt['type'], func);
else ele['on'+opt['type']] = func;
},
//Remove the shortcut - just specify the shortcut and I will remove the binding
'remove':function(shortcut_combination) {
shortcut_combination = shortcut_combination.toLowerCase();
var binding = this.all_shortcuts[shortcut_combination];
delete(this.all_shortcuts[shortcut_combination])
if(!binding) return;
var type = binding['event'];
var ele = binding['target'];
var callback = binding['callback'];
if(ele.detachEvent) ele.detachEvent('on'+type, callback);
else if(ele.removeEventListener) ele.removeEventListener(type, callback, false);
else ele['on'+type] = false;
}
}
// funzioni per il caricamento rapido di testoPagPrec e testo2PagPrec
// pp: carica l'ultima revisione delle 2 pagine precedenti e restituisce alex.p_2 e alex.p_1
// ognuna: [titolo pagina, [header,body,footer]]
alex.p_0=[];
alex.p_1=[];
alex.p_2=[];
var bengali="০১২৩৪৫৬৭৮৯"
function b2l(bengaliDigits) {
var b=bengaliDigits.split("");
var result="";
for (i=0;i<b.length;i+=1){
result+=(bengali.indexOf(b[i])+"");
}
return result;
}
function l2b(latinDigits) {
var l=latinDigits.split("");
var result="";
for (i=0;i<l.length;i+=1){
result+=(bengali.substring(l[i]*1,l[i]*1+1));
}
return result;
}
function pp() {
var p=[];
var t=(/(.+\/)(.+)$/).exec(mw.config.get("wgPageName"));
var t1="";
var t2="";
if (mw.config.get("wgServer")==="//bn.wikisource.org") {
t1=l2b((b2l(t[2])-1)+"");
t2=l2b((b2l(t[2])-2)+"");
} else {
t1=t[2]*1-1
t2=t[2]*1-2
}
var api = new mw.Api();
api.get( {
action: 'query',
prop: 'revisions',
titles:t[1]+t2+"|"+t[1]+t1+"|"+t[1]+t[2],
rvprop:"content"
} ).done( function ( data ) {
$.each(data.query.pages, function(index,value) {
try {p.push([value.title,value.revisions[0]["*"]]);}
catch(err) {p.push([value.title,""]);}
});
localStorage.p=p;
try {
alex.p_2=[p[0][0],splitPagina(p[0][1])];}
catch(err) {alex.p_2=["",[[],[],[]] ];}
try {
alex.p_1=[p[1][0],splitPagina(p[1][1])];}
catch(err) {alex.p_1=["",[[],[],[]] ];}
try {
alex.p_0=[p[2][0],splitPagina(p[2][1])];}
catch(err) {alex.p_0=["",[[],[],[]] ];}
} );
}
function sal3() {
$(".quality3 input").click();
$("#handle button[title='Salva le modifiche']").click();
}
function sal4() {
$(".quality4 input").click();
$("#handle button[title='Salva le modifiche']").click();
}
function lp(pagina) {
//var testo=$.ajax({
// url: mw.config.get("wgServer")+"/w/index.php?action=raw&title=" + pagina+ "&" + Math.random(),
// async: false
// }).responseText;
return alex.p_0[1];
}
function splitPagina(tpp) {
var testo = ["", "", ""];
testo[0] = tpp.substring(0, tpp.indexOf("</noinclude>") + 12);
testo[2] = tpp.substring(tpp.lastIndexOf("<noinclude>"));
testo[1] = tpp.substring(testo[0].length, tpp.length - testo[2].length);
return testo;
}
function lpprec(pagina) {
//var pn = pagina.split("/");
// alex.testoPagPrec = lp(pn[0] + "/" + (pn[1] - 1));
// testo2PagPrec = lp(pn[0] + "/" + (pn[1] - 2));
return alex.p_1[1];
}
function inkapsula(pre, post) {
t = selection();
t[0] = t[0] + pre.replace(/"e;/g, '"');
t[2] = post.replace(/"e;/g, '"') + t[2];
scriviSel(t);
}
/*
Ambiente per EditInView
oggetto pubblico: alex.eiv
metodi:
* alex.eiv.pageRead (pagina): legge il codice wiki di una pagina
* alex.eiv.pageParse (mw.contenuto): esegue il parsing di mw.contenuto.codice in header, body, footer, user, level
* alex.eiv.pageBuild (mw.contenuto): ricostruisce il nuovo mw.contenuto dai sottocampi
* alex.eiv.pageSave (mw.contenuto) : salva l'oggetto mw.contenuto nella pagina corrente
* alex.eiv.pageEdit (mw.contenuto): copia i campi di mw.contenuto in editbox
argomenti:
* alex.eiv.pagina :nome della pagina (default pagina aperta in view)
* alex.eiv.sommario :sommario (default "Javascript edit")
* alex.eiv.contenuto.user :utente registrato in header
* alex.eiv.contenuto.level :level (0 - 4) registrato in header
* alex.eiv.contenuto.header :parte variabile di header
* alex.eiv.contenuto.user :parte variabile di footer
* alex.eiv.contenuto.body :corpo della pagina
* alex.eiv.contenuto.codice :raw code completo della pagina (come è letto o come va salvato)
*/
// ambiente globale editinview
alex.eiv = {};
// contenitore per wikicode
alex.eiv.contenuto={};
// la funzione pageRead inserisce il raw code della pagina in mw.eiw.contenuto.codice
alex.eiv.pageRead = function (pagina) {
if (pagina === undefined) pagina = mw.config.get('wgPageName');
/* chiamata ajax sincrona: eliminare! */
alex.eiv.contenuto.codice= $.ajax({
url: "/w/index.php?action=raw&title=" + pagina,
async: false
}).responseText;
alex.eiv.pagina=pagina;
alex.eiv.numeroPagina=pagina.substr(pagina.indexOf("/")+1)*1;
alex.eiv.thumb=$(".thumbPage").eq(alex.eiv.numeroPagina-1);
alex.eiv.sommario="Javascript edit";
alex.eiv.pageParse();
// chiamo lpprec
lpprec(pagina);
if ($("#editBox").length===1) {
$("textarea").eq(0).val(alex.eiv.contenuto.header);
$("textarea").eq(1).val(alex.eiv.contenuto.body);
$("textarea").eq(2).val(alex.eiv.contenuto.footer);
$("#radiobuttons input[value='"+alex.eiv.contenuto.level+"']").click();
}
};
// la funzione pageParse suddivide codice in campi e dati; il campo pagina non viene modificato
alex.eiv.pageParse = function (oggetto) {
if (oggetto === undefined) oggetto = alex.eiv.contenuto;
var headerEnd = alex.eiv.contenuto.codice.indexOf("</noinclude>") + "</noinclude>".length;
var footerStart = alex.eiv.contenuto.codice.lastIndexOf("<noinclude>");
alex.eiv.contenuto.body = alex.eiv.contenuto.codice.substring(headerEnd,footerStart);
alex.eiv.contenuto.header= alex.eiv.contenuto.codice.substring(0, headerEnd);
alex.eiv.contenuto.footer= alex.eiv.contenuto.codice.substring(footerStart);
try {
alex.eiv.contenuto.level =alex.eiv.contenuto.codice.match(/level=\"(\d+)\" /)[1];
}
catch(err) {
alex.eiv.contenuto.level ="1";
}
try {
alex.eiv.contenuto.user =alex.eiv.contenuto.codice.match(/user=\"([^"]+)\" \/>/)[1];
}
catch(err) {
alex.eiv.contenuto.user =mw.config.get("wgUserName");
}
alex.eiv.contenuto.header=$.trim(alex.eiv.contenuto.header.replace(/<noinclude\><pagequality.+?>/,"").replace(/<div class\=\"pagetext\"\>/,"").replace("</noinclude>",""));
alex.eiv.contenuto.footer=$.trim(alex.eiv.contenuto.footer.replace("<noinclude>","").replace("<references/>","").replace("</div>","").replace("</noinclude>",""));
};
// la funzione pageBuild è reciproca di pageParse e ricostruisce il codice raw della pagina dai campi
alex.eiv.pageBuild = function (oggetto) {
var template= '<noinclude><pagequality level="#LEVEL#" user="#USER#" />#HEADER#</noinclude>' +
'#BODY#<noinclude>#FOOTER#\n</noinclude>';
alex.eiv.contenuto.codice= template.replace("#LEVEL#",alex.eiv.contenuto.level)
.replace("#USER#",alex.eiv.contenuto.user)
.replace("#HEADER#",alex.eiv.contenuto.header)
.replace("#BODY#",alex.eiv.contenuto.body)
.replace("#FOOTER#",alex.eiv.contenuto.footer);
};
/*
Se data è stringa, viene usato come commento (summary) per la pagina corrente
Se data è oggetto, allora:
data.pagenum viene usato come numero di pagina (default indice corrente)
data.base viene usato come base nome pagina
In ogni caso viene ottenuto prima del salvataggio var pagename=base+"/"+pagenum; che è il nome della pagina
su cui salvare
Se alla fine del parsing dei parametri wgPageName === pagename allora la pagina corrente viene ricaricata
Al momento vengono utilizzati i dati contenuti nell'oggetto wm.eiv.contenuto; l'aggiunta di ulteriori campi
all'oggetto data permetterà di forzare contenuti diversi per ciascuno dei campi dell'oggetto .contenuto
*/
alex.eiv.save = function (title,text,summary) {
var api = new mw.Api();
api.postWithToken( 'edit', {
action: 'edit',
title: title,
summary: summary,
text: text,
}).done(function( data ) {
if ( data && data.edit && data.edit.result == 'Success' ) {
console.log("OK, pagina " + title + "salvata");
} else {
alert("Errore nel salvataggio della pagina");
}
});
};
alex.eiv.pageSave = function () {
alex.eiv.pageBuild();
var api = new mw.Api();
api.postWithToken( 'edit', {
action: 'edit',
title: alex.eiv.pagina,
summary: alex.eiv.sommario,
text: alex.eiv.contenuto.codice,
}).done(function( data ) {
if ( data && data.edit && data.edit.result == 'Success' ) {
console.log("OK, pagina " + alex.eiv.pagina + "salvata");
window.location.reload();
} else {
alert("Errore nel salvataggio della pagina");
}
});
};
alex.creaBox=function () {
if (mw.config.get("wgAction")!=="view") {
return;
}
if ($("#sfondoEiv").length>0) {
$("#sfondoEiv").toggle();
return;
}
$('<div id="sfondoEiv" style="width: 100%; height: 100%; position: fixed; z-index: 100; top: 0px; left: 0px; background-color: rgb(250, 250, 250);"></div>').appendTo($("#content"));
$(".prp-page-image").clone().appendTo($("#sfondoEiv"));
$("#sfondoEiv .prp-page-image").css("width","40%");
$("#sfondoEiv .prp-page-image img").draggable();
var box=$('<div style="display:block; border:1px solid black; position:fixed; top:10px; left:10px; /* z-index:999; */ background-color:#efefef;padding:6px;" id="editBox"></div>');
box.append($("<div id='handle' style='width:100%; background-color:#dfdfdf; min-height:10px;' ><div id='areaBottoni' style='float:left;max-width:400px'></div> </div>"))
box.append($("<textarea name='wpHeaderTextbox' id='wpHeaderTextbox' style='width:100%; height:30px; border:1px solid gray;' />"));
box.append($("<textarea name='wpTextbox1' id='wpTextbox1' rows='35' style='width:550px; border:1px solid gray;' />"));
box.append($("<textarea name='wpFooterTextbox' id='wpFooterTextbox' style='width:100%; height:30px; border:1px solid gray;' />"));
$("#sfondoEiv").append(box);
// attivazione alex.activeEleme
$("#editBox textarea").focusin(function () {alex.activeElement=this;})
$("#editBox").draggable({ handle: "areaBottoni" });
var qb='<span id="radiobuttons" style="float:right">'+
'<span class="quality0"><input tabindex="5" title="Pagine_SAL_00%" type="radio" value="0" name="wpQuality"></span>'+
'<span class="quality2"><input tabindex="6" title="Pagine_SAL_50%" type="radio" value="2" name="wpQuality"></span>'+
'<span class="quality1"><input tabindex="7" title="Pagine_SAL_25%" type="radio" value="1" name="wpQuality"></span>'+
'<span class="quality3"><input tabindex="8" title="Pagine_SAL_75%" checked="" type="radio" value="3" name="wpQuality"></span>';
if((alex.eiv.contenuto.level==="3" && alex.eiv.contenuto.user!==mw.config.get("wgUserName")) || alex.eiv.contenuto.level==="4" ) {
qb+='<span id="radioQuality4" class="quality4"><input tabindex="9" title="Pagine_SAL_100%" type="radio" value="4" name="wpQuality"></span></span>';
}
qb+='<br><span style="float:right">'+
'<button class="baseButton" id="wpSave" style="display: inline; padding: 1px 2px;" type="button" title="Salva le modifiche" onclick="alex.eiv.salvaPagina()"><small>Salva</small></button>'+
'<button class="baseButton" id="wpPreview" style="display: inline; padding: 1px 2px;" type="button" title="Visualizza anteprima" onclick="alex.eiv.pagePreview()"><small>Anteprima</small></button>'+
'<button class="baseButton" style="display: inline; padding: 1px 2px;" type="button" title="Annulla e chiudi" onclick="alex.eiv.chiudiEditBox()"><small>Annulla</small></button>'+
'</span>';
$("#handle").append($(qb));
$("textarea").eq(0).val(alex.eiv.contenuto.header);
$("textarea").eq(1).val(alex.eiv.contenuto.body);
$("textarea").eq(2).val(alex.eiv.contenuto.footer);
$("#radiobuttons input[value='"+alex.eiv.contenuto.level+"']").click();
var livello={
"0":"/* Pagine SAL 00% */",
"1":"/* Pagine SAL 25% */",
"2":"/* Pagine SAL 50% */",
"3":"/* Pagine SAL 75% */",
"4":"/* Pagine SAL 100% */"
};
$("#radiobuttons input").click(function() {
alex.eiv.contenuto.level=$(this).val();
alex.eiv.contenuto.user=mw.config.get("wgUserName");
alex.eiv.sommario=livello[alex.eiv.contenuto.level]+" da newThumbs";
});
}
alex.eiv.chiudiEditBox=function () {
$("#sfondoEiv").toggle();
}
alex.eiv.salvaPagina=function () {
alex.eiv.contenuto.header=$("textarea").eq(0).val();
alex.eiv.contenuto.body=$("textarea").eq(1).val();
alex.eiv.contenuto.footer=$("textarea").eq(2).val();
alex.eiv.pageSave();
// alex.eiv.chiudiEditBox();
//var pagina=alex.eiv.pagina.split("/");
//pagina=pagina[0]+"/"+(pagina[1]*1+1);
//alex.eiv.pageRead(pagina);
}
alex.eiv.pagePreview = function () {
alex.eiv.contenuto.header=$("textarea").eq(0).val();
alex.eiv.contenuto.body=$("textarea").eq(1).val();
alex.eiv.contenuto.footer=$("textarea").eq(2).val();
// closeButton generico (chiude parent())
var closeButton=$('<img>')
.attr("src","//upload.wikimedia.org/wikipedia/commons/f/f8/Tooltip-CloseButton.png")
.attr("style",'position:absolute; top:0;right:0;cursor:pointer; z-index:200;')
.click(function(){$(this).parent().remove();
})
//creazione box divPreview
var divPreview=$("<div>").css({
"position":"absolute",
"top":"100px",
"left":"100px",
"width":"580px",
"height":"700px",
"overflow":"scroll",
"padding":"20px",
"z-index":"150",
"background-color":"white",
"border":"1px dotted black"
}).attr("id","divPreview")
.append(closeButton);
$("#content").append(divPreview);
$("#divPreview").draggable();
//caricamento preview
alex.eiv.pageBuild();
$.ajax({
url: mw.util.wikiScript( 'api' ),
data: {
format: 'json',
action: 'parse',
contentmodel: 'proofread-page',
summary: alex.eiv.sommario,
text: alex.eiv.contenuto.codice,
},
dataType: 'json',
type: 'POST',
success: function( data ) {
if ( data && data.parse ) {
alex.eiv.previewHtml=data.parse.text["*"];
$("#divPreview").append($(alex.eiv.previewHtml));
} else if ( data && data.error ) {
alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
} else {
alert( 'Error: Unknown result from API.' );
}
},
error: function( xhr ) {
alert( 'Error: Request failed.' );
}
});
} // FINE FUNZIONE PREVIEW
if (mw.config.get("wgCanonicalNamespace")==="Page" && mw.config.get("wgAction")==="view") {
alex.eiv.pageRead();
}
if (mw.config.get("wgCanonicalNamespace")==="Page") pp();
/* }) ($,mw,alex);
// funzioni BAT
(function($,mw) { */
// creo funzioni di base
/* conta il numero di occorrenze di stringa dentro testo*/
//var alex={};
function count(testo, stringa) {
n = 0;
while (testo.indexOf(stringa) > -1) {
n = n + 1;
testo = testo.replace(stringa, "");
}
return n;
}
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 = "";
}
if (vvalore.length < (idi + idf).length) {
vvalore = "";
}
return vvalore;
}
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;
}
function ss(){
var textarea=alex.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;
}
alex.ss=ss; //esporto la funzione
// riscrive wpTextbox1 e ristabilisce il focus/la selezione attiva
// riceve un array tipo [testo precedente, testo selezionato, testo seguente]
function sw(t) {
var textarea=alex.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();
}
alex.sw=sw; //esporto la funzione
// sel: oggetto selection
// regex: oggetto memoRegex {regexString:[commento,subst,modificatori],.....}
function sost(sel,listaregex) {
console.log(sel,listaregex);
// if there isn't any selection
if (sel[1]=="") {
sel[1]=sel[0]+sel[2];
sel[0]="";
sel[2]="";
}
$.each(listaregex,function(index,value) {
sel[1]=sel[1].replace(RegExp(index,value[2]),value[1]);
});
return sel;
}
alex.sost=sost; // esporto la funzione
/***************************************************/
// test autoPt
alex.autoPt=function() {
var t = [],
rFin = /\ (\w+’*\w+)-$/, // parola finale ifenata
rPtIniz = /^\{\{pt\|/i, // pt in testa sulla pagina corrente
rPtFin = /\{\{pt\|([^ ]+)-\|\}\}/i, // pt di tipo finale
rHyp2 = /^[^ \n]+/,
hyp = "",
hyp2 = "",
l = [],
prePt = "";
t = ss();
// se c'è una selezione di testo....
if (t[1].length > 0) {
if (t[0].length > t[2].length) { //allora va applicato un pt-before...
t[1] = "{{Pt|" + t[1] + "|}}";
} else {
alex.p_1[1][1] = alex.p_1[1][1].replace(/\{\{pt\|/g, "{{Pt|");
l = produciLista(alex.p_1[1][1], "{{Pt|", "}}", 1, "{{");
prePt = "";
if (l.length > 0) {
prePt = l[l.length - 1];
prePt = /{{Pt\|(.+[^\|}])/.exec(prePt)[1]
}
t[1] = "{{Pt|" + t[1] + "|" + prePt.substring(0, prePt.length - 1) + t[1] + "}}";
}
sw(t);
} else {// invece se non c'è alcuna selezione di testo...
//t = $.trim(leggiBox());
//textarea=alex.activeElement; // elemento dom wpTextbox1
t=$.trim($(alex.activeElement).val());
// se la pagina precedente ha un pt di tipo finale
// e la pagina corrente non ha un pt di tipo iniziale
// allora applica un pt iniziale
if (rPtFin.exec(alex.p_1[1][1]) !== null && rPtIniz.exec(t) === null) {
hyp = rPtFin.exec(alex.p_1[1][1])[1];
hyp2 = rHyp2.exec(t);
t = "{{Pt|" + hyp2 + "|" + hyp + hyp2 + "}}" + t.replace(hyp2, "");
}
// se la pagina corrente termina con parola ifenata
// allora applica pt finale sulla
if (rFin.exec(t) !== null) {
hyp = rFin.exec(t)[1]; //parola ifenata senza trattino
t = t.substr(0, t.search(rFin) + 1) +
"{{Pt|" + hyp + "-|}}";
}
//scriviBox(t);
$(alex.activeElement).val(t);}
}
/***************************************************/
/* funzione di creazione della bottoniera
Dopo l'esecuzione, esiste #newtattoo */
function creaBottoniera() {
$('#' + (mw.user.options.get('skin') === 'modern' ? 'mw_' : '') + 'content')
.append($('<div>').attr("id","newtattoo").attr("align","right").attr("style","position:fixed;bottom:0; right:0; background-color:white; border: 1px solid; border-color:#F0F0F0; z-index:1500;"));
}
// Syncronous requests are deprecated but very comfortable; I LOVE them :-)
function leggiPersonalButtons(){
var i=0;
/* chiamata ajax sincrona: eliminare! */
var testo=$.ajax({url:mw.config.get("wgServer")+"/w/index.php?action=raw&title=User:"+mw.config.get("wgUserName")+"/PersonalButtons",async:false});
if (testo.responseText==="") {
testo="<pre>eiv,es,EditInView *Ctrl+Alt+e*,creaBox\n"+
"diacritici, es, Mostra/nascondi diacritici *Alt+0*,diacriticiToggle\n"+
"postOCR, es, esegue postOCR *Alt+7*,postOCR\n"+
"parag,es,Separa i possibili paragrafi con una riga vuota *Alt+8*,aggiustaParagrafi\n"+
"linee,es,Riunisce le linee di testo di u paragrafo *Alt+6*,unisciLinee\n"+
"i, es, Applica markup corsivo *Ctrl+Alt+i*, incapsula,'',''\n"+
"Sc, es,Applica il template SmallCaps (maiuscoletto), incapsula,{{Sc|,}}\n"+
"c, es,Applica il template Center (centrato) *Ctrl+Alt+c*, incapsula,{{center|,}}\n"+
"ci, es,Applica il template Center (centrato) + italico, incapsula,{{center|'',''}}\n"+
"outd, es,Applica il template Outdent (indent inverso) *Ctrl+Alt+o*, incapsula,{{outdent|,}}\n"+
"larger, es,Applica il template larger, incapsula,{{larger|,}}\n"+
"----, es,Applica il template Rule (traccia una riga orixzzontale centrata), incapsula,{{Rule|4em}},\n"+
"Mm, es,Applica maiuscolo/minuscolo alla selezione alternandole *Ctrl+Alt+m*, up_low\n"+
"Rv,es,Elimina righe vuote,eliminaRigheVuote\n"+
"→, es,Indenta le righe della selezione (utile per i versi nelle poesie) *Alt+Right*, indentSelection\n"+
"←, es,Riduce l'indentazione delle righe *Alt+Left*, deIndentSelection\n"+
"note +,es,Facilita l'inserimento delle annotazioni *Ctrl+Alt+n*, note\n"+
"note ↑↓,es,Sposta le annotazioni *Ctrl+Alt+t*, toggleNote\n"+
"sect, es,Inserisce i tag section: posizionare il cursore alla fine della prima sezione *Ctrl+Alt+s*, newSections\n"+
"tabM, es,Trasforma in tabella wiki il codice copiaincollato da Excel (separatori di cella: tabulazioni; separatori di righe; a capo), tableMaker\n"+
"app,es,Taglia e incolla colonne da OCR,append\n"+
"appr,es,Riunisce elementi consecutivi in una riga *Ctrl+Alt+r*,append2\n"+
"poem,es,Applica poem alla selezione *Ctrl+Alt+p*,incapsula,<poem>,</poem>\n"+
"F&R,es,Regex box,mostraTrovaSostituisci\n"+
"r!!,es,Lancia tutte le regex memorizzate *Alt+9*,memoRegexRun\n"+
"r↓,es,Salva le regex in Index talk,salvaRegexRemoto\n"+
"r↑,es,C↑arica le regex in Index talk,caricaRegexRemoto\n"+
//"r=,es,Carica le regex memorizzate in Index Talk per l'opera corrente,caricaRegexRemoto\n"+
"TAB,es,inserisce un carattere TAB,incapsula, ,\n</pre>";
} else {testo=testo.responseText;}
testo=$.trim(find_stringa(testo,"<pre>","</pre>",0)).split("\n");
for (i=0;i<testo.length;i+=1) {
testo[i]=testo[i].split(",");
}
return testo;
}
/* Funzioni per la bottoniera */
//Sostituisce tutti gli apostrofi dattilografici in tipografici, ma rispetta gli apostrofi di marckup wiki e gli apostrofi
//contenuti in: math, {{{}}}, {{}}, [[]], [], http:.....
alex.apostrofi=function () {
var testo=$("#wpTextbox1").val();
var testoCod = codifica(testo);
testoCod[0] = testoCod[0].replace(/'/g, '’').replace(/’’’’’/g, "'''''").replace(/’’’’/g, "''''").replace(/’’’/g, "'''").replace(/’’/g, "''");
$("#wpTextbox1").val(decodifica(testoCod[0],testoCod[1]));
}
function codifica(testo) {
var l = [];
var res = fss(testo, l, "<math", "</math>", "");
res = fss(res[0], res[1], "<!--", "-->", "<");
res = fss(res[0], res[1], "{", "}", "{");
res = fss(res[0], res[1], "[", "]", "[");
res = fss(res[0], res[1], "<", ">", "<");
res = fss(res[0], res[1], "http://", " ", "");
res = fss(res[0], res[1], "https://", " ", "");
return res;
}
function fss(testo, l, tagi, tagf, x) {
while (find_stringa(testo, tagi, tagf, 1) > "") {
var el = find_stringa(testo, tagi, tagf, 1, tagi);
testo = testo.replace(el, "###el" + l.length + "###");
l.push(el);
}
return [testo, l];
}
// La funzione decodifica() riceve un testo codificato e la lista degli elementi protetti e restituisce un testo
// con gli elementi protetti risistemati al loro posto; è complementare a codifica()
function decodifica(testo, l) {
for (i = l.length - 1; i > -1; i = i - 1) {
testo = testo.replace("###el" + i + "###", l[i]);
}
return testo;
}
alex.autoRi=function() {
if (mw.config.get("wgServer")=="//it.wikisource.org") {
var header=find_stringa(alex.p_2[1][0],'/>',"</noinclude>",0);
scriviBox(alex.newAutoRi(header),"0");
var footer=find_stringa(alex.p_2[1][2],'<noinclude>',"</noinclude>",0);
scriviBox(alex.newAutoRi(footer),"2");
/*if (!(/\{\{RigaIntestazione\||\{\{Ri\|/i).test(leggiBox("0"))) {
alex.p_2[1][0]=alex.p_2[1][0].replace(/{{ri\|/i,"{{RigaIntestazione|").replace(/{{rigaintestazione\|/i,"{{RigaIntestazione|");
// var ri_in_header=true;
var ri_in_footer=false;
var header=find_stringa(alex.p_2[1][0],'/>',"</noinclude>",0);
var footer=find_stringa(alex.p_2[1][2],'<noinclude>',"</noinclude>",0);
var ri = find_stringa(alex.p_2[1][0], "{"+"{RigaIntestazione", "}}", 1, "{{");
if (ri==="") {
ri=find_stringa(alex.p_2[1][2], "{"+"{RigaIntestazione", "}}", 1, "{{");
if (ri!=="") ri_in_footer=true;
}
var r = /\d+/g;
var r1= /(\|\d+\|)/g;
var r2= /(\|\d+}})/g;
var r3=/— \d+ —/g;
var np="";
var riNew="";
if (ri.match(r)!==null && ri.match(r).length === 1) {
np=r.exec(ri)[0];
riNew=ri.replace(np,np*1+2);
if (ri_in_footer) scriviBox(footer.replace(ri,riNew),2); else scriviBox(header.replace(ri,riNew),0);
} else if (ri.match(r1)!==null && ri.match(r1).length === 1) {
np=r1.exec(ri)[0].replace(/\|/g,"");
riNew=ri.replace("|"+np+"|","|"+(np*1+2)+"|");
if (ri_in_footer) scriviBox(footer.replace(ri,riNew),2); else scriviBox(header.replace(ri,riNew),0);
} else if (ri.match(r2)!==null && ri.match(r2).length === 1) {
np=r2.exec(ri)[0].replace(/[|}]/g,"");
riNew=ri.replace("|"+np+"}}","|"+(np*1+2)+"}}");
if (ri_in_footer) scriviBox(footer.replace(ri,riNew),2); else scriviBox(header.replace(ri,riNew),0);
} else if (ri.match(r3)!==null && ri.match(r3).length === 1) {
np=r3.exec(ri)[0].replace(/[ —]/g,"");
riNew=ri.replace("— "+np+" —","— "+(np*1+2)+" —");
if (ri_in_footer) scriviBox(footer.replace(ri,riNew),2); else scriviBox(header.replace(ri,riNew),0);
} else {
console.log("RigaIntestazione ambiguo");
if (leggiBox(0)==="") {
scriviBox(header,0);
}
}
} */
}
}
if (mw.toolbar!==undefined) {
alex.incapsula = function (pre, post) {
mw.toolbar.insertTags(pre,post);
};
}
else {
alex.incapsula = function (pre, post) {
var testo=ss();
while (testo[1].slice(-1)==" ") {
testo[1]=testo[1].slice(0,-1);
testo[2]=" "+testo[2];
}
testo[0]+=pre;
testo[2]=post+testo[2];
sw(testo);
};
}
alex.diacriticiToggle=function(){
if (! $(".diacritici").hasClass("ui-draggable")) {
$(".diacritici").draggable();
}
$(".diacritici").toggle();
};
// Funzioni per gesione maiuscole/minuscole
function capitalize(testo) {
testo = testo.split(" ");
for (var i = 0; i < testo.length; i += 1) {
testo[i] = testo[i].substring(0, 1).toLocaleUpperCase() + testo[i].substring(1).toLocaleLowerCase();
}
return testo.join(" ");
}
function changeCase(testo) {
if (testo == testo.toLocaleUpperCase()) testo = testo.toLocaleLowerCase();
else testo = testo.toLocaleUpperCase();
return testo;
}
alex.capit=function() {
var t = selection();
t[1] = capitalize(t[1]);
//scriviBox(t.join(""));
scriviSel(t);
};
alex.up_low=function() {
var t = ss();
t[1] = changeCase(t[1]);
sw(t);
//scriviBox(t.join(""), "", t[0].length, t[0].length + t[1].length);
};
// Elimina righe vuote.
alex.eliminaRigheVuote = function() {
$("#wpTextbox1").val($("#wpTextbox1").val().replace(/\s+$/gm,"").replace(/\n\n/g,"\n"));
};
alex.aggiustaParagrafi = function() {
var i=0;
var testo=$('#wpTextbox1').val();
var 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]);
}
$('#wpTextbox1').val(testo);
};
alex.unisciLinee = function() {
// eliminazione acapo che esclude sia i testi <poem> che le righe che iniziano con ";:#*" (liste html)
var editbox = document.getElementsByName('wpTextbox1')[0];
var poemNumber=0;
var listaGlobale=[]
// fase 1: codifica
if (editbox.value.indexOf("<poem") != -1) {
lista = produciLista(editbox.value, "<poem", "</poem>", 1);
listaGlobale=[].concat(lista)
poemNumber=lista.length;
for (i = 0; i <= lista.length - 1; i = i + 1) {
marcatore = "###" + i + "###";
editbox.value = editbox.value.replace(lista[i], marcatore);
}
}
editbox.value=editbox.value.replace("{{Poem", "{{poem").replace("{{Mlb", "{{mlb");
if (editbox.value.indexOf("{{poem") != -1) {
lista = produciLista(editbox.value, "{" + "{poem", "}}", 1,"{{");
listaGlobale=listaGlobale.concat(lista);
for (i = 0; i <= lista.length - 1; i = i + 1) {
marcatore = "###" + (i+poemNumber) + "###";
editbox.value = editbox.value.replace(lista[i], marcatore);
}
}
if (editbox.value.indexOf("{{mlb") != -1) {
lista = produciLista(editbox.value, "{" + "{mlb", "}}", 1,"{{");
listaGlobale=listaGlobale.concat(lista);
for (i = 0; i <= lista.length - 1; i = i + 1) {
marcatore = "###" + (i+poemNumber) + "###";
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, ' ');
// sostituzione spazio dopo marcatore
editbox.value=editbox.value.replace(/### /g,"###\n");
// fase 3: decodifica
if (editbox.value.indexOf("###0###") != -1) {
for (i = 0; i <= listaGlobale.length - 1; i = i + 1) {
marcatore = "###" + i + "###";
editbox.value = editbox.value.replace(marcatore, listaGlobale[i]);
}
}
// fase 4: sistemazione a capo attorno a poem
//editbox.value=editbox.value.replace(/ <poem>/g,"\n<poem>").replace(/<\/poem> /g,"</poem>\n");
editbox.value=editbox.value.replace(/### /g,"###\n");
updatePreview();
};
// Funzioni per indentaVersi
alex.indentSelection=function () {
var t = ss();
if (t[0].indexOf("\n") == -1) {
t[1] = t[0] + t[1];
t[0] = "";
} else {
pn = t[0].lastIndexOf("\n");
t[1] = t[0].substring(pn + 1) + t[1];
t[0] = t[0].substring(0, pn + 1);
}
var t1 = t[1].split("\n");
for (var i = 0; i < t1.length; i += 1) {
t1[i] = " " + t1[i];
}
t[1] = t1.join("\n");
//scriviBox(t.join(""), "", t[0].length, t[0].length + t[1].length);
sw(t);
};
alex.deIndentSelection=function() {
var t = ss();
if (t[0].indexOf("\n") == -1) {
t[1] = t[0] + t[1];
t[0] = "";
} else {
pn = t[0].lastIndexOf("\n");
t[1] = t[0].substring(pn + 1) + t[1];
t[0] = t[0].substring(0, pn + 1);
}
var t1 = t[1].split("\n");
for (var i = 0; i < t1.length; i += 1) {
for (j = 0; j < 5; j += 1) {
if (t1[i].substring(0, 1) == " ") t1[i] = t1[i].substring(1);
else break;
}
}
t[1] = t1.join("\n");
//scriviBox(t.join(""), "", t[0].length, t[0].length + t[1].length);
sw(t);
};
function autoRi() {
var r=/({{rh\|)(\d+)(.+}})|({{rh\|.+\|)(\d+)(}})|({{rh\|[^\d]+)(\d+)(.+}})/i;
var prev_ri=r.exec(alex.p_2[1][0]);
var new_ri="";
var header=$("#wpHeaderTextbox").val();
if (header==="" || localStorage.saveHeader==false) {
if (prev_ri!==undefined) {
prev_ri = prev_ri.filter(function(n){ return n != undefined }); // "packing" della lista
new_ri=prev_ri[1]+(prev_ri[2]*1+2)+prev_ri[3];
$("#wpHeaderTextbox").val(new_ri);
}
}
}
// ct+
alex.ctPlus=function () {
var t=alex.ss();
t[1]=t[1].split("\n");
for (i=0;i<t[1].length;i+=1) {
t[1][i]="{{Ct|f=100%|v=1|L=0px|"+t[1][i]+"}}";
}
t[1]=t[1].join("\n");
alex.sw(t);
return false;
}
// esegue postOCR
// Gestisce l'inserimento di note
alex.postOCR=function() {
var footer=$("#wpFooterTextbox").val();
var cat="";
// testoXml();
alex.apostrofi();
dehyphen();
autoRi();
// sezione specifica per progetto
if (mw.config.get("wgServer")==="//wikisource.org") {
if (mw.config.get("wgCanonicalNamespace")==="Page" ) {
// aggiunta automatica di Category:Napulitano
cat=find_stringa(alex.p_1[1][2],"[[Category:","]]",1);
if (footer.indexOf(cat)===-1) $("#wpFooterTextbox").val(footer+cat);
}
}
alex.moveRi();
// newRi();
}
// deifenatore o_O
function dehyphen() {
var testo=$("#wpTextbox1").val();
testo=testo.replace(/[-¬] *\n([^ \n]*)[ ]*[\n]?/g,"$1\n");
$("#wpTextbox1").val(testo);
}
alex.note=function() {
var t = ss();
if (t[1].length === 0) {
t[1] = "<sup>nota</sup>";
} else {
t[1] = "<ref>" + t[1] + "</ref>";
}
//scriviBox(t.join(""));
sw(t);
};
alex.toggleNote =function () {
// alert("Versione prova su vector.js");
var editbox = document.getElementsByName('wpTextbox1')[0];
if (editbox.value.indexOf("<sup>nota</sup>") == -1) { // note in posizione regolare
lista = produciLista(editbox.value, "<ref", "</ref>", 1);
lista = $.grep(lista, function (n, i) {
return (n.indexOf('<ref follow=') == -1);
});
for (i = 0; i < lista.length; i += 1) {
editbox.value = editbox.value.replace(lista[i], "<sup>nota</sup>");
editbox.value = editbox.value + "\n" + lista[i];
}
} else { //presenza di marcatori
marks = count(editbox.value, "<ref>") + count(editbox.value, "<ref name=") + count(editbox.value, "<ref group=");
refs = count(editbox.value, "<sup>nota</sup>");
if (marks != refs) { // verifica parità
alert("ATTENZIONE: discordanza fra numero dei <br />segnaposti (" + marks + ") e numero delle note (" + refs + "). Controllare!");
return;
}
lista = produciLista(editbox.value, "<ref", "</ref>", 1);
lista = $.grep(lista, function (n, i) {
return (n.indexOf('<ref follow=') == -1);
});
editbox.value = editbox.value.replace(/\n<ref/g, "<ref");
for (i = 0; i < lista.length; i += 1) {
editbox.value = editbox.value.replace(lista[i], "").replace("<sup>nota</sup>", lista[i]);
}
}
};
alex.newSections=function () {
var s=ss();
if (s[2].indexOf("<section end=s2 />")==-1) {
s[0]="<section begin=s1 />"+s[0]+"<section end=s1 />";
s[2]="<section begin=s2 />"+s[2]+"<section end=s2 />";
}
else {
s[0]=s[0]+"<section end=s2 />";
s[2]="<section begin=s3 />"+s[2].replace("<section end=s2 />","<section end=s3 />");
}
s[0].value=s[0]+s[1]+s[2];
//scriviBox(s.join(""));
sw(s);
};
alex.tableMaker=function () {
var t = ss();
var tabella = ss()[1];
tabella=tabella.replace(/\|\|/g,"\t");
tabella=tabella.split("\n");
for (i = 0; i < tabella.length; i += 1) {
tabella[i] = "|-\n|" + tabella[i].replace(/\t/g, "||");
}
t[1] = "{|\n" + tabella.join("\n") + "\n|}\n";
sw(t);
};
// funzione per creare righe da elementi in colonna
alex.append2=function() {
var testo=ss();
testo[1]=testo[1].replace(/\n/g,"||");
sw(testo);
return;
}
// funzione per aggiungere colonne a colonne
alex.append=function () {
if (ss()[1].length>0) {
alex.a=ss(); // si memorizza in a gli elementi da aggiungere
sw([alex.a[0],"",alex.a[2]]);
return;
}
else {
alex.b=ss();
alex.a[1]=alex.a[1].split("\n");
alex.b[2]=alex.b[2].split("\n");
$.each(alex.a[1],function(index,value) {
alex.b[2][index]=alex.b[2][index]+"||"+value;
});
alex.b[2]=alex.b[2].join("\n");
sw(alex.b);
}
};
/*************** funzioni specifiche per diacritici **************/
// range combining: 768-879 (0x0300-0x036f)
// Crea un contenitore contenitore draggabile
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 ($(".diacritici span").eq(0).text()==="REP ") {
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","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 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
//$("#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));
// Creazione e popolamento di bottoniera
creaBottoniera();
// primo passo per nuovo newButton
alex.personalButtons=leggiPersonalButtons();
var html="";
var sh=null;
$.each(alex.personalButtons, function (index,value) {
sh=null;
html = $("<button>")
.attr("class","baseButton")
.attr("type","button")
.attr("id","button"+index)
.attr("title",value[2])
.css("display","inline")
.append($("<small>").text(value[0]));
if(value[2].match(/\*([^*]+)\*/)) {
sh=value[2].match(/\*([^*]+)\*/)[1];
}
// console.log(value.toString()+" "+value.length)
if ($.trim(value[3])!=="incapsula") {
html.click(function() {
/* if (alex[$.trim(value[3])]===undefined) {
window[$.trim(value[3])]();
} else {
alex[$.trim(value[3])]();
}*/
// chiudo l'accesso all'oggetto window
alex[$.trim(value[3])]();
});
} else {
html.click(function() {
alex.incapsula(value[4].replace(/\\n/g, '\n'),value[5].replace(/\\n/g, '\n'));
});
}
if (sh) alex.shortcut.add(sh,(function (){
$("#button"+index).click();
}));
$("#newtattoo").append(html);
});
//TROVA E SOSTITUISCI
//Edit Alex versione 25.01.13
$('body').append(
'<div id="findReplace_box" style="display:none;font-size:90%;width:500px;height:140px;position:fixed; z-index:1500;top:0px;right:0px;background-color:white;border:2px solid #0645AD;padding:10px">' +
'<div style="float:left">Cerca (testo o espressione regolare):</div>' +
'<div style="float:right"><input type="text" id="findReplace_find" size="30"/></div>' + '<div style="clear:both;float:left">Sostituisci con: </div>' +
'<div style="float:right"><input type="text" id="findReplace_replace" size="30"/></div>'
+ '<div style="clear:both;float:left">Commento: </div>' +
'<div style="float:right"><input type="text" id="findReplace_doc" size="50"/></div>' +
'<div style="clear:both;float:left">' +
'<input type="checkbox" id="findReplace_regex"/><label for="findReplace_regex">Espressione regolare</label><br/>' +
'<input type="checkbox" id="findReplace_maiusc"/><label for="findReplace_maiusc">Non distinguere maiuscole/minuscole</label><br/>' +
'<input type="checkbox" id="findReplace_multiriga"/><label for="findReplace_multiriga">Multiriga</label><br/>' +
'<input type="checkbox" id="findReplace_ricorda"/><label for="findReplace_ricorda">Ricorda questa sostituzione</label></div>' +
'<div style="float:right;margin-top:60px;"><input id="trovaSostituisci" type="button" value="OK" />' +
'<input id="nascondiTrovaSostituisci" type="button" value="Chiudi" /></div>');
$("#trovaSostituisci").click(function() {trovaSostituisci();});
$("#nascondiTrovaSostituisci").click(function() {$('#findReplace_box').toggle();});
$("#findReplace_replace").focus(function() {
// var find=$("#findReplace_find").val();
// caricamento valori se già memorizzati
if (alex.memoRegex[$("#findReplace_find").val()]!=undefined) {
$("#findReplace_replace").val(alex.memoRegex[$("#findReplace_find").val()][1]);
$("#findReplace_doc").val(alex.memoRegex[$("#findReplace_find").val()][0]);
$("#findReplace_maiusc").prop("checked",alex.memoRegex[$("#findReplace_find").val()][2].indexOf("i")!=-1);
$("#findReplace_multiriga").prop("checked",alex.memoRegex[$("#findReplace_find").val()][2].indexOf("m")!=-1);
$("#findReplace_regex").prop("checked",alex.memoRegex[$("#findReplace_find").val()][0].indexOf("(regex)")!=-1);
} else {
//$("#findReplace_replace").val($("#findReplace_find").val());
$("#findReplace_maiusc").prop("checked",false);
$("#findReplace_multiriga").prop("checked",false);
$("#findReplace_regex").prop("checked",false);
$("#findReplace_ricorda").prop("checked",false);
}
});
alex.mostraTrovaSostituisci= function () {
$('#findReplace_box').css("display", "block");
var t = ss();
// carica selezione in trova solo se breve (pewr evitare di caricarla in caso di sostituzioni selettive)
if (t[1].length<15) {
$("#findReplace_find").attr("value", t[1]);
$("#findReplace_replace").attr("value", t[1]).click();
} else {
$("#findReplace_find").click();
}
};
function regexRepl(trova, sostituisci, modificatori) {
if (modificatori === undefined) modificatori = 'g';
var regex = new RegExp(trova, modificatori);
var testo = $('#wpTextbox1').val();
$('#wpTextbox1').val(testo.replace(regex, sostituisci));
}
function trovaSostituisci () {
var trova = $('#findReplace_find').val();
var sostituisci = $('#findReplace_replace').val().replace(/\\n/g, '\n').replace(/\\t/g, '\t'); //trasforma il backslash-n in un "vero" newline
var commento=$('#findReplace_doc').val();
var isRegex = $('#findReplace_regex').is(':checked');
var isMaiusc = $('#findReplace_maiusc').is(':checked');
var isMultiriga = $('#findReplace_multiriga').is(':checked');
var isRicorda = $('#findReplace_ricorda').is(':checked');
var testo="";
var testoNew="";
var regexParams = 'g';
if (!isRegex) {
//escape dei caratteri speciali delle regex
trova = trova.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
}
if (isMaiusc) {
regexParams += 'i';
}
if (isMultiriga) {
regexParams += 'm';
}
//applica la sostituzione nella pagina corrente
var regex = new RegExp(trova, regexParams);
//var regexl ={"trova":[trova,sostituisci,regexParams]};
/// se non esiste selezione....
if (ss()[1]=="") {
testo=$("#wpTextbox1").val();
$("#wpTextbox1").val(testo.replace(regex,sostituisci));
testo=$("#wpHeaderTextbox").val();
$("#wpHeaderTextbox").val(testo.replace(regex,sostituisci));
testo=$("#wpFooterTextbox").val();
$("#wpFooterTextbox").val(testo.replace(regex,sostituisci));
} else {
testo=ss();
testo[1]=testo[1].replace(regex,sostituisci)
sw(testo);
console.log(testo,regex,alex.activeElement)
}
//se l'utente ha spuntato "Ricorda", salva in una variabile localStorage
if (isRicorda) {
// se localStorage.memoRegex esiste lo carico in alex.memoRegex
if (localStorage.memoRegex!==undefined) alex.memoRegex=JSON.parse(localStorage.memoRegex);
if (alex.memoRegex===undefined) alex.memoRegex={};
// aggiorno localStorage["regex"]
commento=commento.replace("(regex)","");
if (isRegex) {
commento+="(regex)";
}
alex.memoRegex[trova]=[commento,sostituisci,regexParams];
localStorage.memoRegex=JSON.stringify(alex.memoRegex);
localStorage.memoRegexEdited="true";
}
}
// funzione basePageName
alex.basePageName=function () {
var basePageName="";
if (mw.config.get("wgCanonicalNamespace")=="Page") basePageName=mw.config.get("wgPageName").match(/.*:(.+)\//)[1];
if (mw.config.get("wgCanonicalNamespace")=="Index" || mw.config.get("wgCanonicalNamespace")=="Index talk") basePageName=mw.config.get("wgPageName").match(/.*:(.+)/)[1];
return basePageName;
}
// lancio sostituzioni; le memoRegex sono riservate al nsPage
alex.memoRegexRun=function () {
/*if (localStorage.memoRegexCurrentPage!==alex.basePageName()) {
if (localStorage.memoRegexEdited==="true") {
alex.salvaRegexRemoto();
}
alex.caricaRegexRemoto();
} */
var testo=ss();
var partialSubs=true;
if (testo[1].length==0) {
testo=$("#wpTextbox1").val();
partialSubs=false;
}
if (partialSubs) {
$.each(alex.memoRegex,function(index,value) {
testo[1]=testo[1].replace(RegExp(index,value[2]),value[1]);
});
sw(testo);
} else {
$.each(alex.memoRegex,function(index,value) {
testo=testo.replace(RegExp(index,value[2]),value[1]);
});
$("#wpTextbox1").val(testo);
if (mw.config.get("wgCanonicalNamespace")==="Page") {
testo=$("#wpHeaderTextbox").val();
$.each(alex.memoRegex,function(index,value) {
testo=testo.replace(RegExp(index,value[2]),value[1]);
});
$("#wpHeaderTextbox").val(testo);
testo=$("#wpFooterTextbox").val();
$.each(alex.memoRegex,function(index,value) {
testo=testo.replace(RegExp(index,value[2]),value[1]);
});
$("#wpFooterTextbox").val(testo);
}
}
alex.moveRi();
};
// caricamento manuale da pagina
alex.caricaRegex=function () {
var memo=JSON.parse(localStorage.memoRegex);
var toAdd=JSON.parse(selection()[1]);
for (var m in toAdd) {
memo[m]=toAdd[m];
}
localStorage.memoRegex=JSON.stringify(memo);
alex.memoRegex=JSON.parse(localStorage.memoRegex);
// alert("Le sostituzioni selezionate sono state caricate");
};
// Caricamento da pagina di default: Index talk
/* alex.caricaRegexRemoto=function () {
if (mw.config.get("wgCanonicalNamespace")=="Page") {
var paginaFonte=mw.config.get("wgPageName");
paginaFonte="Index talk:"+(/.+:(.+)\//).exec(paginaFonte)[1];
// console.log(paginaFonte);
paginaFonte=$.ajax({url:mw.config.get("wgServer")+"/w/index.php?action=raw&title="+paginaFonte,async:false}).responseText;
// console.log(paginaFonte);
var codiceMemoregex=find_stringa(paginaFonte,'{"','"]}',1);
// console.log(codiceMemoregex);
var memo={};
try {
memo=JSON.parse(codiceMemoregex);
localStorage.memoRegex=JSON.stringify(memo);
alex.memoRegex=JSON.parse(localStorage.memoRegex);
alert("Stored regex for this work have been uploaded");
localStorage.memoRegexCurrentPage=alex.basePageName();
localStorage.memoRegexEdited="false";
}
catch(err) {
// svuoto memoRegex
alert("No regex into Index talk page");
localStorage.memoRegex=JSON.stringify({"alL ":["scanno frequente alL -> all’","all’","g"]});
localStorage.memoRegexEdited="true";
localStorage.memoRegexCurrentPage=alex.basePageName();
alex.memoRegex=JSON.parse(localStorage.memoRegex);
}
} else {
alert("Routine can only be called from nsPage");
}
}
*/
alex.caricaRegexRemoto=function () {
// se siamo in nsPagina tenta di caricare una memoRegex memorizzata in Discussioni indice
if (mw.config.get("wgCanonicalNamespace")=="Page") {
var paginaFonte=mw.config.get("wgPageName");
var indexTalkName="Index_talk:"+(/.+:(.+)\//).exec(paginaFonte)[1];
var indexTalkRaw=$.ajax({url:mw.config.get("wgServer")+"/w/index.php?action=raw&title="+indexTalkName,async:false}).responseText;console.log(paginaFonte);
var codiceMemoregex=find_stringa(indexTalkRaw,'{"','"]}',1);
// console.log(codiceMemoregex);
var memo={};
try {
memo=JSON.parse(codiceMemoregex);
localStorage.memoRegex=JSON.stringify(memo);
alex.memoRegex=JSON.parse(localStorage.memoRegex);
alert("Le sostituzioni correlate alla pagina sono state caricate");
}
catch(err) {
alert("La pagina Discussioni indice non esiste/non contiene memoRegex");
localStorage.memoRegex="{}";
}
// in ns diversi da nsPagina, tenta di caricare in modo additivo le regex contenuto in un testo selezionato
} else {
if (selection()[1]!=="") {
alex.caricaRegex();
}
}
};
// salvataggio regex remoto
alex.salvaRegexRemoto=function() {
if (mw.config.get("wgCanonicalNamespace")=="Page") {
var paginaFonte=localStorage.currentBasePage;
var regexOld=""
var testoPaginaFonte="";
var regexFormattato=""
var errore="";
paginaFonte="Index talk:"+paginaFonte;
try {
testoPaginaFonte = $.ajax({url:mw.config.get("wgServer")+"/w/index.php?action=raw&title="+paginaFonte,async:false}).responseText;
errore=find_stringa(testoPaginaFonte,"<!DOCTYPE html>","</html>",1);
if (errore!=="") {
testoPaginaFonte=testoPaginaFonte.replace(errore,"");
}
} catch(err) {
console.log("No Index talk page");
}
regexFormattato=localStorage.memoRegex.replace(/("\],)/g,"$1\n")
var regexOld=find_stringa(testoPaginaFonte,'{"','"]}',1);
if (regexOld!=="") {
testoPaginaFonte=testoPaginaFonte.replace(regexOld,regexFormattato);
} else {
testoPaginaFonte+="\n== memoRegex ==\n<nowiki>"+regexFormattato+"</nowiki>\n"
}
alex.eiv.save(paginaFonte,testoPaginaFonte,"salvataggio memoregex");
alert("Regex have been saved into "+paginaFonte);
} else {
alert("Routine can only be called from nsPage");
}
}
// test funzione abbr
function abbr(testo) {
var finale="";
var semifinale="";
//caso vocale + m,n
finale=testo.slice(-1);
semifinale=testo.slice(-2,-1).normalize("NFD").substr(0,1);
if (/[aeiou][mn]/.test(semifinale+finale))
return testo.slice(0,-2)+(semifinale+"\u0304").normalize("NFC");
// caso pre
if (testo.slice(-3)==="pre")
return testo.slice(0,-3)+("p"+"\u0304").normalize("NFC");
// caso per
if (testo.slice(-3)==="per")
return testo.slice(0,-3)+("<u>p</u>");
// caso paperini
if (["que","qua","qui"].indexOf(testo.slice(-3))!==-1)
return testo.slice(0,-3)+("q\u0304").normalize("NFC");
// caso quando
if (testo.slice(-6)==="quando")
return testo.slice(0,-6)+"qn\u0304".normalize("NFC");
// caso re
if (testo.slice(-2)==="re")
return testo.slice(0,-2)+("r"+"\u0304").normalize("NFC");
// caso re
if (testo.slice(-3)==="che")
return testo.slice(0,-3)+("cħ");
return testo;
}
alex.abbrRun=function() {
var t=ss();
t[0]=abbr(t[0]);
sw(t);
}
/****** funzioni per versi ***** /
/* 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}}
*/
numeroRiga = function(mod, x) {
var testoCasella = document.getElementById("wpTextbox1").value;
// cancella tutti gli R //
if (mod === 0) {
while (find_stringa(testoCasella, "{{R|", "}}", 1) !== "") {
testoCasella = testoCasella.replace(find_stringa(testoCasella, "{{R|", "}}", 1), '');
}
while (find_stringa(testoCasella, "{{r|", "}}", 1) !== "") {
testoCasella = testoCasella.replace(find_stringa(testoCasella, "{{r|", "}}", 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;
/* algoritmo nuovo Alex 13.07.2016 */
//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
verso=ultVerso(alex.p_1[1][1])+1;
num = parseInt(prompt("da che numero parto?", verso));
}
num--;
/* algoritmo nuovo Alex 13.07.2016 */
var r=/^ *<center>|^ *{{center\||^ *{{centrato\||^ *{{vc\|| *{{r-|^ *{{ct\|/i;
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 (!(r.test(lines[i]) || $.trim(lines[i])==="")) {
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");
});
}
};
/* nuova funzione per il recupero numero verso dalla pagina precedente */
function ultVerso(testo) {
var rigaUltimoPoem=0;
var rigaUltimoR=0;
var ultimoVerso=0;
var r=/^ *<center>|^ *{{center\||^ *{{centrato\||^ *{{vc\|| *{{r-|^ *{{ct\|/i;
// normalizzo </poem> su nuova riga
testo=testo.replace(/([^\n])(<\/poem>)/g,"$1\n$2");
// splitto in righe
testo=testo.split("\n");
// cerco l'ultimo </poem>
for (i=testo.length-1;i>-1;i-=1){
if ((/<\/poem>/).test(testo[i])) break;
}
if (i===-1) return 0;
// cerco indietro l'ultimo R
rigaUltimoPoem=i;
for (i=rigaUltimoPoem-1;i>-1;i-=1){
if ((/{{r\|/i).test(testo[i])) break;
}
if (i===-1) return 0;
rigaUltimoR=i;
ultimoVerso=testo[i].match(/{{r\|(\d+)/i)[1]*1;
// conto le righe verso fino a </poem>
for (i=rigaUltimoR+1;i<rigaUltimoPoem;i+=1) {
if (!(r.test(testo[i]) || $.trim(testo[i])==="")) ultimoVerso+=1;
}
return ultimoVerso;
}
/* sotto-funzione di numeroRiga()
* aggiunge il numero num alla riga line
*/
scriviNumero = function(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) + "{{R|" + num + "}}" + line.substring(n);
else line = "{{R|" + num + "}}" + line;
return line;
};
alex.v5=function() {numeroRiga(2,5);};
alex.v4=function() {numeroRiga(2,4);};
alex.v3=function() {numeroRiga(2,3);};
alex.v1=function() {numeroRiga(1);};
/*****fine funzioni per versi *******/
// Inizializzazione memoRegex
if (localStorage.memoRegex===undefined) {
localStorage.memoRegex=JSON.stringify({});
}
alex.memoRegex=JSON.parse(localStorage.memoRegex);
if (mw.config.get("wgCanonicalNamespace")==="Page" && mw.config.get("wgAction")==="edit" ) {
// caricamento del nome base pagina corrente
localStorage.currentBasePage=(/.+?:(.+)\/.+$/m).exec(mw.config.get("wgPageName"))[1];
// se localStorage.currentRegexBasePage non è definito definiscilo
if (localStorage.currentRegexBasePage===undefined) {
localStorage.currentRegexBasePage=localStorage.currentBasePage;
}
// se le regex memorizzate sono relative a un'altra BasePage carica le regex appropriate
if (localStorage.currentRegexBasePage!==localStorage.currentBasePage) {
localStorage.currentRegexBasePage=localStorage.currentBasePage;
alex.caricaRegexRemoto();
}
}
alex.shortcut.add("Alt+3", (function () {$("span.quality3 input").click();$("#wpSave").click();}));
alex.shortcut.add("Alt+0", (function () {$("span.quality0 input").click();$("#wpSave").click();}));
alex.shortcut.add("Alt+1", (function () {$("span.quality1 input").click();$("#wpSave").click();}));
alex.shortcut.add("Ctrl+Alt+4", (function () {$("span.quality4 input").click();$("#wpSave").click();}));
alex.shortcut.add("Alt+s", (function () {$("#wpSave").click(); return false;}));
// alex.shortcut=shortcut;
// attivazone della registrazione dei campi testo con focus
alex.activeElement=$("#wpTextbox1")[0];
$("input:text, textarea").not("#findReplace_box input:text").focusin(function () {alex.activeElement=this;});
importScript("User:Alex brollo/localScripts.js");
})($,mw,alex);
});