Utente:Alex brollo/memoRegex.js
Notarella: Aroppo pubbreca putisse necessità 'e pulezzà 'a caché d' 'o navigatóre pe vedé 'e cagnamienti.
- Firefox / Safari: Sprémme 'o buttóne maiuscole e ffà clic ncopp'a Recarreca, o pure spremme Ctrl-F5 o Ctrl-R (⌘-R ncopp'a Mac)
- Google Chrome: spremme Ctrl-Shift-R (⌘-Shift-R ncopp'a nu Mac)
- Internet Explorer/edge: Spremme 'o buttóne Ctrl pe' tramente ca faie click ncopp'a Refresh, o pure spremmere Ctrl-F5
- Opera: Vaje addò 'o Menu → Mpustaziune (Opera → Mpustaziune ncopp' 'o Mac) e po' ncopp'a Privacy & sicurezza → Pulezza date d' 'o browser → Immaggene e file d' 'a cache.
// pulsante
mw.loader.using( [ 'mediawiki.util',
'oojs-ui-core',
'ext.wikiEditor'
], function () {
// for any namespace
if ( mw.config.get("wgAction")==="edit" ||mw.config.get("wgAction")==="submit") {
$(document).ready(function() {
// bozza funzioni specifiche
if ( typeof $ != 'undefined' && typeof $.fn.wikiEditor != 'undefined' ) {
$( function() {
// CREA PULSANTE
var rhButton = new OO.ui.ButtonWidget( {
label: 'mR',
id: 'memoRegex-button-widget',
framed: false,
title: 'Attiva F & R con memorizzazione'
} );
rhButton.on( 'click', function ( context ) {
mostraTrovaSostituisci();
} );
$( '#wikiEditor-section-advanced' ).append( rhButton.$element );
// $('[accesskey=y]').removeAttr('accesskey');
// $('.wikiEditor-ui-toolbar [title="Indenta i versi selezionati [alt-shift-y]"]').attr('accesskey', 'y');
});}
});
}
});
// funzioni per Trova e sostituisci
function find_stringa (testo, idi, idf, dc, x) {
var idip, idfp, vvalore;
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 === false ) {
vvalore = testo.slice( idip + idi.length, idfp - idf.length );
} else {
vvalore = testo.slice( idip, idfp );
}
} else {
vvalore = "";
}
return vvalore;
}
function scriviBox(testo, area, ss, se) {
if (area === undefined || area === "") {
if (mw.config.get('wgCanonicalNamespace') == "Page" || $("#editBox").length===1) {
area = 1;
} else {
area = 0;
}
}
$('textarea')[area].value = testo;
// console.log("area:", area);
if (ss !== undefined && se !== undefined) {
$('textarea')[area].selectionStart = ss;
$('textarea')[area].selectionEnd = se;
}
}
function leggiBox(area) {
if (area === undefined) {
if (mw.config.get('wgCanonicalNamespace') == "Page" || $("#editBox").length===1) area = 1;
else area = 0;
}
return $('textarea')[area] === undefined ? '' : $('textarea')[area].value;
}
//TROVA E SOSTITUISCI
//Edit Alex versione 25.01.13
$('body').append($(
'<div id="findReplace_box" style="display:none;font-size:90%; width:500px;height:165px;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 type="button" id="findReplace_run" title="Esegui la sostituzione impostata" value="OK" onclick="trovaSostituisci()"/>' +
'<input type="button" id="findReplace_close" value="Chiudi" title="Nascondi il box" onclick="nascondiTrovaSostituisci()"/></div></div>'));
function mostraTrovaSostituisci() {
$('#findReplace_box').css("display", "block");
var t = selection();
$("#findReplace_find").attr("value", t[1]);
$("#findReplace_replace").attr("value", t[1]).click();
}
function nascondiTrovaSostituisci() {
$('#findReplace_box').css("display", "none");
};
function regexRepl(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));
};
function trovaSostituisci() {
var trova = $('#findReplace_find').val();
var sostituisci = $('#findReplace_replace').val().replace(/\\n/g, '\n'); //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 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));
}
/* 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 specifiche per memoRegex
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);
paginaFonte=$.ajax({url:"//nap.wikisource.org/w/index.php?action=raw&title="+paginaFonte+"&r="+Math.random(),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);
mw.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]!=="") {
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");
}
});
};
// 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);
var regexOld="";
var testoPaginaFonte="";
var regexFormattato="";
//paginaFonte="Index talk:"+paginaFonte;
testoPaginaFonte = $.ajax({url:mw.config.get("wgServer")+"/w/index.php?action=raw&title="+paginaFonte,async:false}).responseText;
var errore=find_stringa(testoPaginaFonte,"<!DOCTYPE html>","</html>",1);
if (errore!=="") {
testoPaginaFonte=testoPaginaFonte.replace(errore,"");
}
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");
alert("Regex have been saved into "+paginaFonte);
} else {
alert("Routine can only be called from nsPage");
}
};
/*'<div style="clear:both;float:left">Commento: </div>'+
'<div style="float:right"><input type="text" id="findReplace_doc" size="50"/></div> */
$("#findReplace_box").append($('<div style="clear:both;float:left">Gestione memoRegex </div>'+
'<div style="float:right"><input type="button" id="findReplace_save" title="Salva le sostituzioni correnti" value="save" onclick="mw.salvaRegexRemoto()"/>' +
' <input type="button" id="findReplace_load" value="load" title="Forza la ricarica delle sostituzioni memorizzate" onclick="mw.caricaRegexRemoto()"/>' +
' <input type="button" id="findReplace_run" value="run" title="Esegui tutte le sostituzioni correnti" onclick="mw.memoRegexRun()"/></div>'));
if (mw.config.get("wgCanonicalNamespace")==="Page" && (mw.config.get("wgAction")==="edit" || mw.config.get("wgAction")==="submit") ) {
// Elimino il find & replace rotto
$(".group-search").remove();
// 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();
}
}