User:Alex brollo bis/memoRegex.js
Jump to navigation
Jump to search
Note: After publishing, you may have to bypass your browser's cache to see the changes.
- Firefox / Safari: Hold Shift while clicking Reload, or press either Ctrl-F5 or Ctrl-R (⌘-R on a Mac)
- Google Chrome: Press Ctrl-Shift-R (⌘-Shift-R on a Mac)
- Edge: Hold Ctrl while clicking Refresh, or press Ctrl-F5.
(function (mw, $) {
/* creazione box F&R */
// var alex={};
// Caricamento da pagina di default: Index talk
var alex={};
if(mw.alex===undefined) {
mw.alex={};
}
// funzione accessibile in namespace globale
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 = mw.alex.findStringa(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 o memoRegex presenta errori"
);
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();
}
}
};
// funzione globale
mw.alex.mostraTrovaSostituisci= function () {
$('#findReplace_box').css("display", "block");
var t = mw.alex.getSelection();
// 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();
}
};
alex.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");
}
});
};
// 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) {
localStorage.currentRegexBasePage=localStorage.currentBasePage;
localStorage.memoRegex=JSON.stringify({});
alex.caricaRegexRemoto();
}
}
$('body').append(
'<div id="findReplace_box" style="display:none;font-size:90%;width:500px;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:0">'+
'<input id="trovaSostituisci" type="button" value="Esegui" />' +
'<input id="memoRegexRun" type="button" value="Esegui tutte" />' +
'<input id="salvaRegexRemoto" type="button" value="Salva" />' +
'<input id="caricaRegexRemoto" type="button" value="Carica" />' +
'<input id="nascondiTrovaSostituisci" type="button" value="Chiudi" /></div>'
);
/* attivazione - funzioni bottoni */
$("#memoRegexRun").click(function () {
alex.memoRegexRun();
});
$("#salvaRegexRemoto").click(function () {
alex.salvaRegexRemoto();
});
$("#caricaRegexRemoto").click(function () {
alex.caricaRegexRemoto();
});
$("#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 =mw.alex.getSelection();
// 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(mw.alex.getSelection()[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 =mw.alex.getSelection();
testo[1] = testo[1].replace(regex, sostituisci);
mw.alex.writeSelection(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 () {
var testo =mw.alex.getSelection();
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]);
});
mw.alex.writeSelection(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);
}
}
};
// 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");
};
// salvataggio regex remoto
alex.salvaRegexRemoto = function () {
if(mw.config.get("wgCanonicalNamespace") === "Page") {
var paginaFonte = localStorage.currentBasePage;
var regexOld = ""
var testoPaginaFonte = "";
var regexFormattato = ""
paginaFonte = "Index talk:" + paginaFonte;
try {
testoPaginaFonte = $.ajax({
url: mw.config.get("wgServer") +
"/w/index.php?title=" + paginaFonte+"&action=raw",
async: false
}).responseText;
} catch (err) {
console.log("No Index talk page");
testoPaginaFonte="";
}
regexFormattato = localStorage.memoRegex.replace(/("\],)/g, "$1\n")
var regexOld = mw.alex.findStringa(testoPaginaFonte, '{"', '"]}', 1);
if(regexOld !== "") {
testoPaginaFonte = testoPaginaFonte.replace(regexOld, regexFormattato);
} else {
testoPaginaFonte += "\n== memoRegex ==\n<nowiki>" + regexFormattato +
"</nowiki>\n"
}
alex.save(paginaFonte, testoPaginaFonte, "salvataggio memoregex");
alert("Regex have been saved into " + paginaFonte);
} else {
alert("Routine can only be called from nsPage");
}
}
})(mediaWiki,jQuery);