MediaWiki:Gadget-sectionEdit.js

Da Wikisource.

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. 

*/