MediaWiki:Gadget-memoRegex.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.
mw.memoRegex=JSON.parse(localStorage.memoRegex);
// caricamento dell'oggetto memoRegex per selezione di codice in modalità edit
mw.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);
mw.memoRegex=JSON.parse(localStorage.memoRegex);
// alert("Le sostituzioni selezionate sono state caricate");
};
// lancio della serie di regex su header. body, footer
mw.memoRegexRun=function () {
var testo="";
testo=$("#wpTextbox1").val();
$.each(mw.memoRegex,function(index,value) {
// verifica se corre sectionEdit e se è attiva una section con nome
if (mw.sectionEdit && mw.sectionEdit.name!=="") {
// verifica se nel commento esiste un prefisso/suffisso, e se corrisponde alla section attiva
if (test(value[0],mw.sectionEdit.name)) {
testo=testo.replace(RegExp(index,value[2]),value[1]);
}
// altrimenti esegui
} else {
testo=testo.replace(RegExp(index,value[2]),value[1]);
}
});
$("#wpTextbox1").val(testo);
if (mw.config.get("wgCanonicalNamespace")==="Page") {
testo=$("#wpHeaderTextbox").val();
$.each(mw.memoRegex,function(index,value) {
testo=testo.replace(RegExp(index,value[2]),value[1]);
});
$("#wpHeaderTextbox").val(testo);
testo=$("#wpFooterTextbox").val();
$.each(mw.memoRegex,function(index,value) {
testo=testo.replace(RegExp(index,value[2]),value[1]);
});
$("#wpFooterTextbox").val(testo);
}
};
// caricamento dell'oggetto memoRegex da pagina remota di default (nDiscussioni_indice correlato alla pagina corrente)
mw.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");
paginaFonte = "Index_talk:"+(/.+:(.+)\//).exec(paginaFonte)[1]; //console.log(paginaFonte);
$.ajax({
url: "//it.wikisource.org/w/index.php?action=raw&title="+paginaFonte+"&r="+Math.random(),
}).done(function(paginaFonte) {
//console.log(paginaFonte);
var codiceMemoregex = find_stringa(paginaFonte,'{"','"]}',1); //console.log(codiceMemoregex);
var memo = {};
try {
memo = JSON.parse(codiceMemoregex);
localStorage.memoRegex = JSON.stringify(memo);
mw.memoRegex = JSON.parse(localStorage.memoRegex);
mw.alertMessage("MemoRegex", "Le sostituzioni correlate alla pagina sono state caricate");
}
catch(err) {
mw.alertMessage("MemoRegex", "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]!=="") {
mw.caricaRegex();
}
}
};
// funzione generica di salvataggio di pagina remota
mw.salvaPagina = function (title,text,summary) {
new mw.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");
}
});
};
mw.doSalvaRegex = function(paginaFonte, testoPaginaFonte) {
regexFormattato = localStorage.memoRegex.replace(/("\],)/g,"$1\n");
regexOld = find_stringa(testoPaginaFonte,'{"','"]}',1);
if (regexOld !== "") {
testoPaginaFonte = testoPaginaFonte.replace(regexOld,regexFormattato);
} else {
testoPaginaFonte += "\n== memoRegex ==\n<nowiki>"+regexFormattato+"</nowiki>\n";
}
mw.salvaPagina(paginaFonte, testoPaginaFonte, "salvataggio memoregex");
mw.alertMessage("MemoRegex", "Regex have been saved into "+paginaFonte);
};
// salvataggio memoRegex su pagina remota (nsDiscussioni_indice)
mw.salvaRegexRemoto = function() {
if (mw.config.get("wgCanonicalNamespace") == "Page") {
var paginaFonte = mw.config.get("wgPageName");
paginaFonte = "Index talk:"+(/.+:(.+)\//).exec(paginaFonte)[1]; //console.log(paginaFonte);
$.ajax({
url: mw.config.get("wgServer")+"/w/index.php?action=raw&title="+paginaFonte
}).done(function(response) {
mw.doSalvaRegex(paginaFonte, response);
}).fail(function() {
mw.doSalvaRegex(paginaFonte, "");
});
} else {
mw.alertMessage("MemoRegex", "Routine can only be called from nsPage");
}
};
// funzione generica di creazione di bottoni in "bottoniera"
function newButton(nome, funzione, azione, messaggio) {
// azione è una stringa composta da v,e,s,h rispettivamente view,edit,submit,history
// se nome è un oggetto svolgilo
var p;
if (typeof(nome) === "string") {
p = {
nome: nome,
funzione: funzione,
azione: azione,
messaggio: messaggio
};
} else {
p = nome;
}
if (p.messaggio===undefined) p.messaggio="Nessun aiuto registrato";
if (p.classe===undefined) p.classe="baseButton";
if (p.stile===undefined) p.stile="background-color: #f0f0f0; border: 1px solid #d0d0d0; padding: 3px 6px;"+
"display: inline-block; font-size: 12px; margin: 0; cursor: pointer; border-radius:4px;";
if (p.namespaces!==undefined) {
var listaNamespaces=p.namespaces.split("|");
for (var i=0; i<listaNamespaces.length; i+=1) {
listaNamespaces[i]=$.trim(listaNamespaces[i]);
if (["ns0", "Main", "Principale"].indexOf(listaNamespaces[i]) !== -1) {
listaNamespaces[i] === "";
}
}
if ($.inArray(mw.config.get('wgCanonicalNamespace'),p.namespaces.split(","))==-1) return;
}
// Passo 1: se newtatooo non esiste, lo crea
if ($("#newtattoo").length===0) creaBottoniera();
// fine se azione=history
if (mw.config.get('wgAction') === "history") {
return;
}
// normalizzazione function
if (p.funzione.indexOf("(") === -1 && p.funzione.indexOf(")") === -1) {
p.funzione += "()";
}
// default: bottone presente in view, edit,
if (p.azione === undefined) {
p.azione = "ves";
}
// messaggio di default
if (p.messaggio === undefined) {
p.messaggio = "Nessun messaggio di aiuto registrato";
}
// valutazione condizione di visualizzazione
if (mw.config.get('wgAction') === "edit" && p.azione.indexOf("e") === -1) {
return;
}
if (mw.config.get('wgAction') === "view" && p.azione.indexOf("v") === -1) {
return;
}
if (mw.config.get('wgAction') === "submit" && p.azione.indexOf("s") === -1) {
return;
}
// caso pulsante=immagine
var html = "";
if (p.nome.substring(0, 2) == "//") {
html = '<img class="'+p.classe+'" style="'+p.stile+'" src="' + p.nome + '" onclick="' + p.funzione + '" title="' + p.messaggio +'"';
if (p.ondblclick!==undefined) html+=' ondblclick="'+p.ondblclick+'"';
html+='/>';
}
// caso pulsante=label
else {
html = '<button class="'+p.classe+'" style="'+p.stile+'" type="button" title="' + p.messaggio + '" onclick="' + p.funzione +'"';
if (p.ondblclick!==undefined) html+=' ondblclick="'+p.ondblclick+'"';
html+='><small>' + p.nome + '</small></button>';
}
$("#newtattoo").append($(html));
return false;
}
/* funzione di creazione della bottoniera
Dopo l'esecuzione, esiste #newtattoo */
function creaBottoniera() {
$('#' + (mw.user.options.get('skin') === 'modern' ? 'mw_' : '') + 'content')
.append('<div id="newtattoo" align="right" style="position:fixed;bottom:0; right:0; background-color:white; border: 1px solid; border-color:#F0F0F0; z-index:1500;"></div>');
}
/*
Confronta il suffisso o il prefisso di un nome di sezione nel commento
di una regex, con il nome della sezione corrente; restituisce true o false.
Per indicare un prefisso: --testo
Per indicare un suffisso: testo--
*/
function test(commento,sezione) {
var r_pref=/ (\w+)--/;
var r_suff=/--(\w+)/;
var ok=false;
if (r_pref.test(commento) || r_suff.test(commento)) {
if (r_pref.test(commento)) {
if (RegExp("^"+r_pref.exec(commento)[1]).test(sezione)) ok=true;
} else {
if (r_suff.test(commento)) {
if (RegExp(r_suff.exec(commento)[1]+"$").test(sezione)) ok=true;
}
}
} else ok=true;
return ok;
}
// comandi lanciati al momento del caricamento della pagina corrente
// newButton("regex up","mw.caricaRegex","es","Carica le sostituzioni selezionate");
newButton("salva regex", "mw.salvaRegexRemoto","es","Scarica sulla pagina Discussioni indice le sostituzioni attive");
newButton("carica regex", "mw.caricaRegexRemoto","es","Allinea memoRegex alla pagina Discussioni indice");
newButton("esegui regex", "mw.memoRegexRun","es","Esegue le sostituzioni memorizzate");
if (mw.config.get("wgCanonicalNamespace")==="Page" && mw.config.get("wgAction")==="edit" ) {
// caricamento del nome base pagina corrente
localStorage.currentBasePage=(/.+?:(.+)\/\d+$/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;
mw.caricaRegexRemoto();
}
}