MediaWiki:Gadget-sectionEdit.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.
// legge wgTextbox1 e lo trasforma in una "lista di section" t
if (mw.config.get("wgCanonicalNamespace")=="Page") {
mw.sectionEdit={};
mw.sectionEdit.status="all";
mw.sectionEdit.section=0;
mw.sectionEdit.t=[];
mw.sectionEdit.name="";
var buttonAll=$("<button>").attr("class","button").attr("type","button").text("all").attr("id","buttonAll").text("all");
var buttonNext=$("<button>").attr("class","button").attr("type","button").attr("id","buttonNext").text(">");
var buttonPrev=$("<button>").attr("class","button").attr("type","button").attr("id","buttonPrev").text("<");
buttonAll.click(function(){
if (mw.sectionEdit.status==="all") {
if ($("#wpTextbox1").val().indexOf("<section ")>-1) {
mw.sectionEdit.status="sect";
mw.sectionEdit.t=sectSplit();
mw.sectionEdit.section=0;
mw.sectionEdit.name=mw.sectionEdit.t[0][0];
$("#wpTextbox1").val(mw.sectionEdit.t[0][1]);
}
} else {
mw.sectionEdit.status="all";
mw.sectionEdit.t[mw.sectionEdit.section][1]=$("#wpTextbox1").val();
$("#wpTextbox1").val(sectMerge(mw.sectionEdit.t));
mw.sectionEdit.t=[];
mw.sectionEdit.name="";
}
});
buttonNext.click(function(){
if (mw.sectionEdit.status==="all")
buttonAll.click();
if (mw.sectionEdit.status==="sect"){
mw.sectionEdit.t[mw.sectionEdit.section][1]=$("#wpTextbox1").val();
mw.sectionEdit.section+=1;
if (mw.sectionEdit.section===mw.sectionEdit.t.length)
mw.sectionEdit.section=0;
$("#wpTextbox1").val(mw.sectionEdit.t[mw.sectionEdit.section][1]);
mw.sectionEdit.name=mw.sectionEdit.t[mw.sectionEdit.section][0];
}
});
buttonPrev.click(function(){
if (mw.sectionEdit.status==="all")
buttonAll.click();
if (mw.sectionEdit.status==="sect"){
mw.sectionEdit.t[mw.sectionEdit.section][1]=$("#wpTextbox1").val();
if (mw.sectionEdit.section>0)
mw.sectionEdit.section-=1;
else
mw.sectionEdit.section=mw.sectionEdit.t.length-1;
$("#wpTextbox1").val(mw.sectionEdit.t[mw.sectionEdit.section][1]);
mw.sectionEdit.name=mw.sectionEdit.t[mw.sectionEdit.section][0];
}
});
function sectSplit() {
var tl=[];
var s_begin="";
var s_end="";
var s_all="";
var s_tail="";
s_name="";
t=$("#wpTextbox1").val().split("<section begin");
for (i=0;i<t.length;i+=1) {
if (t[i].indexOf("<section end")>-1) {
t[i]="<section begin"+t[i];
s_begin=find_stringa(t[i],"<section begin","/>",1);
s_end=find_stringa(t[i],"<section end","/>",1);
s_all=find_stringa(t[i],s_begin,s_end,1);
s_tail=t[i].replace(s_all,"");
s_name=find_stringa(s_begin,'"','"',0);
if (s_name==="") s_name=$.trim(find_stringa(s_begin,"=","/>",0));
tl.push([s_name,find_stringa(s_all,s_begin,s_end,0)]);
if (s_tail!=="") tl.push(["",s_tail]);
} else {
if (t[i]!=="") tl.push(["",t[i]]);
}
}
return tl;
}
// ricostruisce dalla lista t
function sectMerge(t) {
testo=""
for (i=0;i<t.length;i+=1) {
if (t[i][0]==="")
testo+=t[i][1];
else
testo+='<section begin="s_name" />'.replace('s_name',t[i][0])
+t[i][1]
+'<section end="s_name" />'.replace('s_name',t[i][0]);
}
return testo;
}
$(document).ready(function() {
$(".tabs").append(buttonAll,buttonNext,buttonPrev);
})
}
/*
Pulsanti minimi in div class="tabs"
- all
- next
- prev
Alternativa: un pulsante Stato + radiobutton (tanti quante le section)
Stati
- all: edit normale. L'oggetto t non esiste.
- sect: il testo normale non esiste, è stato trasformato in un oggetto t. In editbox è visualizzato solo un t[n][1].
Il valore n (elemento corrente) è memorizzato in una variabile currentSection
Eventi
- stato all, pressione su all: nulla.
- stato all, pressione su next o prev: il testo viene trasformato in oggetto t; lo stato passa a sect; viene attivata currentSection e in editbox
viene caricato il t[n][1].
- stato sect, pressione su all: t[n][1] viene salvato dopodichè il testo viene ricostruito e visualizzato in editbox. Lo stato passa ad all.
- stato sect, pressione su next o prev: t[n][1] viene aggiornato, in editbox viene visualizzato t[n+1][1] oppure t[n-1][1], viene aggiornata currentSection,
lo stato permane sect.
Modifica struttura section
- click su all, normale inserimento di section, poi eventualmente click su next o prev.
- salvataggio: click virtuale su all, poi normale salvataggio.
*/