MediaWiki:Gadget-RegexMenuFramework.js
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.
if (mw.config.get('wgCanonicalNamespace') != 'Index' && (mw.config.get("wgAction") == 'edit' || mw.config.get("wgAction") == 'submit')) {
$(document).ready(function() {
// importazione di xml2text - chiamato da cleanup()
//importScript("Utente:Alex brollo/xml2text.js");
// inizializzazione di localStorage.memoRegex come oggetto vuoto se indefinito
if (localStorage.memoRegex===undefined) {
localStorage.memoRegex=JSON.stringify({});
}
if (localStorage.memoRegexEdited===undefined) {
localStorage.memoRegexEdited=false; // nota: viene salvato come stringa "false"
}
/*****************************/
/* Script: [[m:User:Pathoschild/Scripts/Regex menu framework]]
* RegexMenuFramework: creates a sidebar menu of user-defined regex tools
* Documentation: [[m:User:Pathoschild/Scripts/Regex menu framework]]
* Written by: Pathoschild
*
<source lang="javascript"><nowiki>
*/
lt = function(testo, caratteri) {
if (caratteri===undefined) caratteri = " ;:*#'-—(";
while (testo.length > 0 && (caratteri.indexOf(testo.substr(0, 1)) > -1 || testo.substr(0, 4) == "{{R|")) {
if (testo.substr(0, 4) == "{{R|") {
var r = find_stringa(testo, "{{R|", "}}", 1, "{{");
testo = testo.replace(r, "");
} else {
testo = testo.substr(1);
}
}
return testo;
};
inizialeMaiuscola = function() {
var txt = leggiBox();
txt = txt.split("\n");
for (var i = 0; i < txt.length; i += 1) {
var riga = lt(txt[i]);
var rigaNew = riga.substr(0, 1).toLocaleUpperCase() + riga.substr(1);
if (riga != rigaNew) {
txt[i] = txt[i].replace(riga, rigaNew);
}
}
txt = txt.join("\n");
scriviBox(txt);
};
rmflinks = function() {
if (mw.config.get("wgServer") === "//it.wikisource.org") {
$("#p-regex h3").html('Strumenti per la rilettura (<a href="//it.wikisource.org/wiki/Aiuto:Strumenti_per_la_rilettura" target="_blank">Aiuto</a>)');
/* disattivo "importa dati"
if (mw.config.get("wgPageName").indexOf("Modulo:Dati/") === 0) {
regexTool('importa dati', 'parseIndice()', 'Importa i dati dalla pagina Indice');
}
*/
var sh_bold=function() {incapsula("'''","'''");};
var sh_ital=function() {incapsula("''","''");};
var sh_center=function() {incapsula("{{centrato|","}}");};
var sh_right=function() {incapsula("{{a destra|","}}");};
var sh_apostrofo=function() {incapsula("","’");};
var sistema=function () {
var t=selection();
var l1=[];
var l2=[];
var testo=t[1].split("\n");
for (i=0;i<testo.length;i+=1) {
var l=testo[i].split("|");
l1.push(l[0]);
l2.push(l[1]);
}
t[1]=l1.join("\n")+"\n"+l2.join("\n");
scriviBox(t.join("\n"));
return false;
};
shortcut.add("Ctrl+B",sh_bold);
shortcut.add("Ctrl+I",sh_ital);
shortcut.add("Ctrl+E",sh_center);
shortcut.add("Ctrl+R",sh_right);
shortcut.add("Ctrl+Alt+D",sistema);
shortcut.add("Ctrl+Alt+'",sh_apostrofo);
// nuova funzione switch toggle box immagine
shortcut.add("Ctrl+Down",function() {$(".prp-page-image").toggle();});
//nuova funzione switch altezza box di edit
shortcut.add("Ctrl+Up",function () {
if ($("#wpTextbox1").attr("rows")==="8")
$("#wpTextbox1").attr("rows","25");
else
$("#wpTextbox1").attr("rows","8");
});
regexTool('Trova & sostituisci', 'mostraTrovaSostituisci()', 'Trova e sostituisci');
// regexTool('AutoreCitato', 'acrepl()', "normalizza AutoreCitato trasformandolo in chiamata a due parametri");
regexTool('Elimina riga 1 Alt+5', 'rimuoviPrimaRiga()', 'Cancella la prima riga della pagina');
shortcut.add("Alt+5", rimuoviPrimaRiga);
regexTool('Aggiusta paragrafi Alt+6', 'aggiustaParagrafi()',
"Aggiunge una riga vuota dopo le righe che terminano con punteggiatura di fine paragrafo");
shortcut.add("Alt+6", aggiustaParagrafi);
regexTool('PostOCR Alt+7', 'cleanup()', "Corregge piccole imperfezioni del testo prodotto da OCR e riunisce le parole spezzate a fine riga");
shortcut.add("Alt+7", cleanup);
regexTool('Unisci linee Alt+8', 'joinLines()', "Riunione delle linee dei paragrafi esclusi alcuni casi speciali (poem e altri)");
shortcut.add("Alt+8", joinLines);
regexTool('AutoPt', 'autoPt()', "Aggiunge il template Pt, prevalentemente utilizzato per le parole spezzate a fine pagina");
shortcut.add("Alt+9", newRi);
regexTool('Converti é ->è', 'convertiAcuti()',
"Converte le lettere é in lettere è, rispettando le convenzioni ortografiche correnti nei testi non recenti");
regexTool('Spostamento note', 'toggleNote()', "Sposta le note dal corpo del testo a fine testo e viceversa per facilitare la rilettura");
regexTool('Numero riga ogni 3', 'numeroRiga(2, 3)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, inserendo il numero ogni 3 versi");
regexTool('Numero riga ogni 4', 'numeroRiga(2, 4)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, inserendo il numero ogni 4 versi");
regexTool('Numero riga ogni 5', 'numeroRiga(2, 5)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, inserendo il numero ogni 5 versi");
regexTool('Num. riga ogni fine strofa', 'numeroRiga(1)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, numerando il verso finale di ogni strofa.");
regexTool('Elimina tutti gli {{R}}', 'numeroRiga(0)', "Rimuove la numerazione dei versi");
regexTool('Virgolette', 'Virgolette()',
'Converte le doppie virgolette dattilografiche "" in doppie virgolette tipografiche “” (una seconda chiamata alla funzione inverte le virgolette)');
regexTool('Iniziale maiuscola', 'inizialeMaiuscola()', "Rende maiuscola la lettera iniziale di versi e righe");
} else { // fuori da it.wikisource.org
regexTool('trova & sostituisci', 'mostraTrovaSostituisci()', 'Trova e sostituisci');
regexTool('elimina riga 1 Alt+5', 'rimuoviPrimaRiga()', 'Cancella la prima riga della pagina');
shortcut.add("Alt+5", rimuoviPrimaRiga);
regexTool('aggiusta paragrafi Alt+6', 'aggiustaParagrafi()',
"Aggiunge una riga vuota dopo le righe che terminano con punteggiatura di fine paragrafo");
shortcut.add("Alt+6", aggiustaParagrafi);
regexTool('postOCR Alt+7', 'cleanup()', "Corregge piccole imperfezioni del testo prodotto da OCR e riunisce le parole spezzate a fine riga");
shortcut.add("Alt+7", cleanup);
regexTool('unisci linee Alt+8', 'joinLines()', "Riunione delle linee dei paragrafi esclusi alcuni casi speciali (poem e altri)");
shortcut.add("Alt+8", joinLines);
regexTool('RigaIntestazione Alt+9', 'newRi()', "Aggiunge il template RigaIntestazione");
shortcut.add("Alt+9", newRi);
/*regexTool('Numero riga ogni 3', 'numeroRiga(2, 3)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, inserendo il numero ogni 3 versi");
regexTool('Numero riga ogni 4', 'numeroRiga(2, 4)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, inserendo il numero ogni 4 versi");
regexTool('Numero riga ogni 5', 'numeroRiga(2, 5)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, inserendo il numero ogni 5 versi");
regexTool('Num. riga ogni fine strofa', 'numeroRiga(1)',
"Aggiunge la numerazione dei versi al <poem></poem> in cui ti trovi, numerando il verso finale di ogni strofa.");
regexTool('Elimina tutti gli {{R}}', 'numeroRiga(0)', "Rimuove la numerazione dei versi");
regexTool('converti é ->è', 'convertiAcuti()',
"Converte le lettere é in lettere è, rispettando le convenzioni ortografiche correnti nei testi non recenti");
regexTool('virgolette', 'Virgolette()',
'Converte le doppie virgolette dattilografiche "" in doppie virgolette tipografiche “” (una seconda chiamata alla funzione inverte le virgolette)');
*/
regexTool('spostamento note', 'toggleNote()', "Sposta le note dal corpo del testo a fine testo e viceversa per facilitare la rilettura");
regexTool('iniziale maiuscola', 'inizialeMaiuscola()', "Rende maiuscola la lettera iniziale di versi e righe");
}
};
addTemplateTesto = function() {
var textbox = document.getElementsByName('wpTextbox1')[0];
r = textbox.value.split("\n");
for (i = 0; i < r.length; i += 1) {
if (r[i].indexOf(" ") === 0) {
r[i] = r[i].replace(" ", "* {{testo|") + "}}";
}
}
textbox.value = r.join("\n");
};
/* sposto apostrofi() in Common.js per renderla disponibile globalmente */
/* alterna due visualizzazioni delle note in edit: "normale" e "a fondo pagina" */
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 = jQuery.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 delle <br />note (" + marks + ") e numero dei segnaposti (" + refs + "). Controllare!");
return;
}
lista = produciLista(editbox.value, "<ref", '</' + 'ref>', 1);
lista = jQuery.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], "");
}
for (i = 0; i < lista.length; i += 1) {
editbox.value = editbox.value.replace("<sup>nota</sup>", lista[i]);
}
}
};
applicaPoem = function() {
var textbox = document.getElementsByName('wpTextbox1')[0];
textbox.value = '<poem>' + textbox.value.replace(/\s+$/, "").replace(/^\s+/, "") + '</poem>\n';
};
convertiAcuti = function() {
textbox = document.getElementsByName('wpTextbox1')[0];
textbox.value = textbox.value.replace(/é/g, "è");
};
//escape all punctuation!!!!!!
// = / < >
// Sperimentale. Per i testi in prosa: aggiunge un secondo acapo alle righe che terminano con i caratteri .?!
aggiustaParagrafi = function() {
textbox = document.getElementsByName('wpTextbox1')[0];
testo = textbox.value;
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]);
}
textbox.value = testo;
updatePreview();
};
// rimuovi prima riga della pagina
rimuoviPrimaRiga = function() {
var editbox = document.getElementsByName('wpTextbox1')[0];
if (editbox.value.substring(0, 6) == "<poem>") {
editbox.value = editbox.value.replace(/<poem\>.+\n/, "<poem>");
} else {
editbox.value = editbox.value.replace(/.+\n+/, "\n");
}
};
mhy = function() {
var editbox = document.getElementsByName('wpTextbox1')[0];
testo = editbox.value;
if (testo.indexOf("\u200d") != -1) {
testo = testo.replace(/\u200d/g, "-\n");
} else {
testo = testo.replace(/-\n/g, "\u200d");
}
editbox.value = testo;
};
joinLines= 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();
};
cleanup = function() {
newRi();
var tl="";
var testo="";
if (mw.memoRegexRun!==undefined) mw.memoRegexRun();
var editbox = document.getElementsByName('wpTextbox1')[0];
/* converte l'eventuale xml in testo - SPERIMENTALE
if (mw.config.get("wgCanonicalNamespace")==="Page")
try {testoXml();}
catch(err) {console.log("Errore in chiamata testoXml");}
*/
console.log("cleanup modificato");
if(count(leggiBox(),"{")!==count(leggiBox(),"}")) {
alert("Caratteri {} sbilanciati: correggi e ripeti");return;
}
if(count(leggiBox(),"<")!==count(leggiBox(),">")) {
alert("Caratteri <> sbilanciati: correggi e ripeti (sostituisci eventuali <> necessarti con entità html)");return;
}
if(count(leggiBox(),"[")!==count(leggiBox(),"]")) {
alert("Caratteri [] sbilanciati: correggi e ripeti");return;
}
// elimina il soft hyphen C£ AD
editbox.value = editbox.value.replace(//g, '');
// sostituisce i caratteri ― (unicode & #8213;) (tossico) con — (unicode & #8212;)
editbox.value = editbox.value.replace(/―/g, '—');
// sostituisce i caratteri -- con —
editbox.value = editbox.value.replace(/--/g, '—');
// recupero dei codici commento html
editbox.value = editbox.value.replace(/<!—/g, '<!--');
editbox.value = editbox.value.replace(/—>/g, '-->');
// remove trailing whitespace at the end of each line
editbox.value = editbox.value.replace(/ +\n/g, '\n');
// remove trailing whitespace at the end of input
editbox.value = editbox.value.replace(/\s+$/g, '');
//join words that are hyphenated across a line break as -,¬
dehyphen();
// remove unwanted spaces around punctuation marks
editbox.value = editbox.value.replace(/ ([;:\?!,])/g, '$1');
//OCR fixes
// convert i9 to 19, etc.
// editbox.value = editbox.value.replace(/[il]([0-9])/g, '1$1');
// "^V", "AV", "\\" to "W"
editbox.value = editbox.value.replace(/\^V/g, 'W');
editbox.value = editbox.value.replace(/\AV[a-z]/g, 'W');
editbox.value = editbox.value.replace(/\\\\/g, 'W');
// remove "\ufffd" and "^"
//editbox.value = editbox.value.replace(/[\ufffd^]/g, '');
// remove "\ufffd" only
editbox.value = editbox.value.replace(/[\ufffd]/g, '');
// "U" -> "ll" when preceded by a lowercase letter.
editbox.value = editbox.value.replace(/([a-z])U/g, '$1ll').replace(/([bcdfghlmnprstvzBCDFGHLMNPRSTV]’)([^\s])/g, "$1 $2"); //aggiungo uno spazio dopo gli apostrofi tipografici
// apostrofi dattilografici->tipografici
apostrofi(editbox);
// 1’ in l’, spazio adiacente ad apostrofo dopo consonante, lista di scannos comuni
editbox.value = editbox.value.replace(/([^\d]+)1’/g, '$1l’')
.replace(/ clie /g, ' che ')
.replace(/ »/g, '»')
.replace(/« /g, '«')
.replace(/([bcdfghlmnprstvz])’ ([^bcdfglmnprstvz])/gi, '$1’$2')
.replace(/ r /g, ' l’')
.replace(/ ’1 /g, ' ’l ')
// .replace(/ T /g, ' l’')
.replace(/eh’/g, 'ch’')
.replace(/eh’ /g, 'ch’')
.replace(/ alia /g, ' alla ')
.replace(/ delia /g, ' della ')
//.replace(/ cosi /g,' così ')
.replace(/ deir /g, ' dell’')
// .replace(/ air /g, ' all’')
.replace(/ neir /g, ' nell’')
//.replace(/ piu /g, ' più ')
//.replace(/Piu /g, 'Più ')
.replace(/fi/g, 'fi')
.replace(/`/g, '’')
.replace(/“ /g, '“')
.replace(/ ”/g, '”');
//RunningHeader(false);
updatePreview();
};
mw.cleanup=cleanup;
/* 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;
};
/* 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 vecchio
//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
if (begin == testoCasella.indexOf("<poem>")) {
verso = mw.util.getParamValue('verso');
if (!verso) {
if (typeof testoPagPrec != 'undefined' && typeof ultimoV != 'undefined') verso = ultimoV();
else verso = "1";
}
// aggiunta di Alex brollo: si esegue solo se esistono la funzione ultimoV e la variabile testoPagPrec
} else verso = "1";
num = parseInt(prompt("da che numero parto?", verso));
}*/
/* 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(testoPagPrec[1])+1;
num = parseInt(prompt("da che numero parto?", verso));
}
num--;
/* algoritmo vecchio
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 (!center && lines[i].replace(/\s/g, "") !== "" && lines[i].toLowerCase().indexOf("{{r-}}") == -1) {
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;
} */
/* 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");
});
}
};
Virgolette = function(av, cv) {
if (av === undefined) {
av = "“";
}
if (cv === undefined) {
cv = "”";
}
// if (! ("editbox" in window)) {
editbox = document.getElementsByName('wpTextbox1')[0];
// }
/* codifico editbox e carico il testo codificato in testo*/
var tl = codifica(editbox.value);
var testo = tl[0];
/* qui routine virgolette */
// virgolette rette - virgolette tipografiche
if (testo.indexOf('\"') > -1) {
testo = testo.replace(/[“„”«»‘‚]/g, '"'); // trasformo tutte le virgolette in rette
apri = true;
while (testo.indexOf('\"') != -1) {
if (apri) {
testo = testo.replace('\"', av);
apri = false;
} else {
testo = testo.replace('\"', cv);
apri = true;
}
}
} else {
posAperta = testo.indexOf(av);
if (posAperta == -1) {
posAperta = 10000;
}
posChiusa = testo.indexOf(cv);
if (posChiusa == -1) {
posAperta = 10000;
}
if (posAperta < posChiusa) {
apri = false;
} else {
apri = true;
}
testo = testo.replace(/[“„”«»‘‚]/g, '"');
while (testo.indexOf('\"') != -1) {
if (apri) {
testo = testo.replace('\"', av);
apri = false;
} else {
testo = testo.replace('\"', cv);
apri = true;
}
}
}
editbox.value = decodifica(testo, tl[1]);
};
//TROVA E SOSTITUISCI
//Edit Alex versione 25.01.13
$('body').append(
'<div id="findReplace_box" class="box" style="display:none;">' +
'<div class="box-title">Trova & Sostituisci<span class="icon-close findReplace_box_close"></span></div>' +
'<div class="box-main">' +
'<div class="width-50">Cerca (testo o espressione regolare):</div>' +
'<div class="width-50"><input type="text" id="findReplace_find" size="30"/></div>' +
'<div class="width-50">Sostituisci con: </div>' +
'<div class="width-50"><input type="text" id="findReplace_replace" size="30"/></div>' +
'<div class="width-50">Commento: </div>'+
'<div class="width-50"><input type="text" id="findReplace_doc" size="30"/></div>' +
'<div>' +
'<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 (<a target="_blank" href="/wiki/Aiuto:MemoRegex">MemoRegex</a>)</label></div>' +
'<div class="text-right">'+
'<input id="findReplace_next" type="button" class="btn blue" value="Trova successivo" /> '+
'<input id="findReplace_box_ok" type="button" class="btn blue" value="Applica" /> '+
'<input type="button" class="btn blue findReplace_box_close" value="Chiudi" /></div></div>');
$('#findReplace_box_ok').click(function(e) {
trovaSostituisci();
});
$('#findReplace_next').click(function(e) {
//try {trovasucc();} catch {mw.alertMessage("Pulsante non abilitato (test)");}
if ( window.trovaSucc == undefined) {mw.alertMessage("Pulsante non abilitato (test)");}
else trovaSucc();
});
$('.findReplace_box_close').click(function(e) {
nascondiTrovaSostituisci();
});
$('#findReplace_box').draggable({
create: function( event, ui ) {
$(this).css({
right: '10px',
top: '10px'
});
}
});
mostraTrovaSostituisci = function() {
$('#findReplace_box').css("display", "block");
var t = selection();
$("#findReplace_find").attr("value", t[1]);
$("#findReplace_replace").attr("value", t[1]).click();
};
nascondiTrovaSostituisci = function() {
$('#findReplace_box').css("display", "none");
};
regexRepl = function(trova, sostituisci, modificatori) {
if (modificatori === undefined) modificatori = 'g';
var regex = new RegExp(trova, modificatori);
var testo = $('[name=wpTextbox1]').val();
$('[name=wpTextbox1]').val(testo.replace(regex, sostituisci));
};
trovaSostituisci = function() {
var trova = $('#findReplace_find').val();
var sostituisci = $('#findReplace_replace').val()
.replace(/\\n/g, '\n').replace(/\\t/g, '\t'); //abilita \n e \t come caratteri speciali newline e tab
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 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
regex = new RegExp(trova, regexParams);
/* testo = $('[name=wpTextbox1]').val();
$('[name=wpTextbox1]').val(testo.replace(regex, sostituisci)); */
// attivazione su tutti i tre campi se in nsPagina
if (mw.config.get("wgCanonicalNamespace")==="Page") {
for (i=0;i<3;i+=1) {
scriviBox(leggiBox(i).replace(regex,sostituisci),i);
}
} else {
scriviBox(leggiBox().replace(regex,sostituisci));
}
updatePreview();
/* da sostituire con localStorage*/
//se l'utente ha spuntato "Ricorda", salva in un cookie
if (isRicorda) {
// se localStorage.memoRegex esiste lo carico in mw.memoRegex
if (localStorage.memoRegex!==undefined) mw.memoRegex=JSON.parse(localStorage.memoRegex);
if (mw.memoRegex===undefined) mw.memoRegex={};
commento=commento.replace("(regex)","");
if (isRegex) {
commento+="(regex)";
}
// aggiorno localStorage["regex"]
mw.memoRegex[trova]=[commento,sostituisci,regexParams]; console.log("Passato per riga 549");
localStorage.memoRegex=JSON.stringify(mw.memoRegex);
localStorage.memoRegexEdited=true;
}
};
// funzioni generali per la creazione del menu
var rmf_globals = {};
/****************
*** config tools
****************/
regexTool = function(name, functionname, descrizione) {
if (!descrizione) {
descrizione = name;
}
if (mw.config.get("wgServer") === "//it.wikisource.org") {
newButton({
nome: name,
funzione: functionname,
messaggio: descrizione,
classe: "buttonRfm",
stile: "display:none",
azione: "es"
});
}
if (mw.config.get('skin') == "monobook") {
var voce = $('<li><a href="javascript:' + functionname + '" title="' + descrizione + '">' + name + '</a></li>');
$("#p-regex").append(voce);
return;
}
var newline = document.createElement('li');
var newlink = document.createElement('a');
newlink.setAttribute('href', 'javascript:' + functionname);
newlink.setAttribute('title', descrizione);
newlink.setAttribute('class', 'sidebar-link');
newlink.appendChild(document.createTextNode(name));
newline.appendChild(newlink);
toollist.appendChild(newline);
};
/*** create menu
****************/
rfmenu = function(rfmconfig) {
/* get elements */
// note: these must be global.
editbox = document.getElementById('wpTextbox1');
editreason = document.getElementById('wpSummary');
if (mw.config.get('skin') == 'monobook') {
$('<div class="portlet"><h3><a href="javascript:rmflinks()">Strumenti accessori</a></h3><div class="pBody"><ul id="p-regex"></ul></div>').insertAfter(
$("#p-tb"));
return;
}
try {
//sidebar = document.getElementById('p-logo').parentNode;
sidebar = document.getElementById('p-navigation').parentNode;
} catch (err) {
console.log('Regex menu framework rfmenu() aborted due to unknown error. This (rare) issue will be fixed in the eventual rewrite.');
return;
}
/* create menu */
var container = document.createElement('div');
if (mw.config.get('skin') == 'vector'||mw.config.get('skin') == 'vector-2022') container.setAttribute('class', 'portal persistent vector-menu vector-menu-portal');
container.setAttribute('id', 'p-regex');
sidebar.appendChild(container);
var header = document.createElement('h3');
header.setAttribute('class','vector-menu-heading vector-menu-heading-label');
header.appendChild(document.createTextNode('Strumenti per la rilettura'));
container.appendChild(header);
var toolbox = document.createElement('div');
toolbox.setAttribute('class', 'vector-menu-content');
container.appendChild(toolbox);
toollist = document.createElement('ul');
toollist.setAttribute('class', 'vector-menu-content-list');
toolbox.appendChild(toollist);
/* load user-defined sidebar links */
rmflinks();
};
rfmenu();
});
}