Utente:Alex brollo bis/eis.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.
// mw.loader.load('//wikisource.org/w/index.php?title=User:Alex brollo/common.js&action=raw&ctype=text/javascript');
/*

Edit In Sequence, version 0.0 ottobre 2016
Alex brollo

Logics:
1. disable navigation and save/preview buttons
2. load a small new navigation + level setting tool 
3. use normal edit boxes uploading wikicode and saving edited wikicode from them by ajax statements


*/

mw.loader.load("jquery.ui");


// var alex={};
var eis={};
eis.cp={};
(function ($,mw) {
	console.log("passo 1");
	if(mw.config.get("wgCanonicalNamespace")!=="Page" || mw.config.get("wgAction")!=="edit") { console.log("eis non eseguito"); return false;}
	console.log("passo 2");
	activate();

	/* passo 1 :  costruire l'ambiente */
	
	
	// in nsPage, and in view mode, eis environment is built
	
	


function activate() {
	// access button
	
	
	if (mw.user.options.get("gadget-barbaforcutanew")===null) {
	$('<li id="ca-eis"><span><a href="#" title="Attiva eis" >eis</a></span></li>').click(function() {
			creaEis();
			pp();
		}).insertAfter($("#ca-view"));
	// loading wikitext of three pages

	} else {
			$('<button id="ca-eis" type="button">eis</button>').click(function() {
			creaEis();
			pp();
		}).appendTo($(".editButtons"));
	// loading wikitext of three pages
	}
	
	return false;
}

// initialòizing function, it disables some buttons, builds preview box, build action buttons
function creaEis() {
	    // disabilitazioni
		$("#ca-proofreadPagePrevLink a, #ca-proofreadPageNextLink a").remove();
		$("#wpSave, #wpPreview, #wpDiff").remove();
		$(".mw-summary, .editCheckboxes").remove();

	    //$('<div id="sfondoeis" style="position:fixed; top:0; left:0; z-index:100;"></div>').appendTo($("#content"));
		
	
		var box=$("<div id='editBox' style='background-color:#dfdfdf; min-height:10px; display:inline-block;position:fixed; top:0; left:0; z-index:100' ></div>");
		if (mw.user.options.get("gadget-barbaforcutanew")===null)  $("#content").append(box); else box.css("position","static").appendTo($(".editButtons"));

	    
		var qb='<span id="radiobuttons">'+
			'<span class="quality0"><input tabindex="5" title="Pagine_SAL_00%" type="radio" value="0" name="wpQuality"></span>'+
			'<span class="quality2"><input tabindex="6" title="Pagine_SAL_50%" type="radio" value="2" name="wpQuality"></span>'+
			'<span class="quality1"><input tabindex="7" title="Pagine_SAL_25%" type="radio" value="1" name="wpQuality"></span>'+
			'<span class="quality3"><input tabindex="8" title="Pagine_SAL_75%" checked="" type="radio" value="3" name="wpQuality"></span>'+
			'<span id="radioQuality4" class="quality4" style="display:none;"><input tabindex="9" title="Pagine_SAL_100%" type="radio" value="4" name="wpQuality">&nbsp;&nbsp;</span></span>';

		qb+='<span>&nbsp;&nbsp;'+
			'<button class="baseButton" id="wpPrev" style="display: inline; padding: 1px 2px;" type="button" title="Vai alla pagina precedente" ><small><</small></button>'+
			'<button class="baseButton" id="wpNext" style="display: inline; padding: 1px 2px;" type="button" title="Vai alla pagina successiva" ><small>></small></button>'+
			'<button class="baseButton" id="wpSave" style="display: inline; padding: 1px 2px;" type="button" title="Salva le modifiche" ><small>Salva</small></button>'+
			'<button class="baseButton" id="wpPreview" style="display: inline; padding: 1px 2px;" type="button" title="Visualizza anteprima" ><small>Anteprima</small></button>'+
			'<button class="baseButton" id="wpExit" style="display: inline; padding: 1px 2px;" type="button" title="Annulla e chiudi" ><small>Annulla</small></button>'+
			'&nbsp;<input type="text" id="wpComment" value="Ajax eis edit" size="50"></span>';
		$("#editBox").append($(qb));

		$("#wpExit").click(function(){
			window.open("/wiki/"+eis.cp.title,"_self"); 
		});
		$("#wpSave").click(function(){
			pageSave();
		});
		$("#wpPreview").click(function(){
			pagePreview();
		});
		$("#wpPrev").click(function(){
			pp(prevPage());
		});
		$("#wpNext").click(function(){
			pp(nextPage());
		});
		//creazione box divPreview
		var divPreview=$("<div>").css({
			"position":"absolute",
			"top":"20px",
			"left":"100px",
			"width":"580px",
			"height":"700px",
			"overflow":"scroll",
			"padding":"20px",
			"z-index":"150",
			"background-color":"white",
			"border":"1px dotted black",
			"display":"none"
			}).attr("id","divPreview");

		$("#content").append(divPreview);
		$("#divPreview").draggable();
		eis.baseImg=$(".prp-page-image img").attr("src").match(/(.+page)\d+(-\d+px.+)/);
		// eis.baseImg[1]+[numero pagina]+eis.baseImg[2] è l'url dell'immagine
		// della pagina [numero pagina)]
		// può essere caricato con 
		// $(".prp-page-image img").attr("src",eis.baseImg[1]+211+eis.baseImg[2]);
	}
	function nextPage() {
		var np=eis.cp.title.match(/(.+\/)(\d+)$/);
		return np[1]+(np[2]*1+1);
	}
	function prevPage() {
		var np=eis.cp.title.match(/(.+\/)(\d+)$/);
		return np[1]+(np[2]*1-1);
	}	
	// splits wiki code into header,body,footer
	function splitPagina(tpp) {
		var testo = ["", "", ""];
		testo[0] = tpp.substring(0, tpp.indexOf("</noinclude>") + 12);
		testo[2] = tpp.substring(tpp.lastIndexOf("<noinclude>"));
		testo[1] = tpp.substring(testo[0].length, tpp.length - testo[2].length);
		return testo;
	}
	// reads three pages code (current, previous, previous of previous)	
	function pp(pageName) {
		if (pageName===undefined) pageName=mw.config.get("wgPageName");
		eis.p_0=[];
		eis.p_1=[];
		eis.p_2=[];
		var p=[];
		var t=(/(.+\/)(.+)$/).exec(pageName);
		var	t1=t[2]*1-1;
		var	t2=t[2]*1-2;
		var api = new mw.Api();
		api.get( {
		    action: 'query',
		    prop: 'revisions',
			titles:t[1]+t2+"|"+t[1]+t1+"|"+t[1]+t[2],
			rvprop:"content"
		} ).done( function ( data ) {
			    $.each(data.query.pages, function(index,value) {
			    	try {p.push([value.title,value.revisions[0]["*"]]);}
			    	catch(err) {p.push([value.title,""]);}
			    	
			    });
				eis.p=p;
				try {
            		eis.p_2=[p[0][0],splitPagina(p[0][1])];
					
				}
				catch(err) {eis.p_2=["",[[],[],[]] ];}
				try {
				    eis.p_1=[p[1][0],splitPagina(p[1][1])];
					
				}
				catch(err) {eis.p_1=["",[[],[],[]] ];}
					try {
					eis.p_0=[p[2][0],splitPagina(p[2][1])];
					eis.cp.title=eis.p_0[0];
					var np=eis.cp.title.match(/(.+\/)(\d+)$/);
					eis.cp.basePageName=np[1];
					eis.cp.basePageNum=np[2];
					var urlImg=$(".prp-page-image img").attr("src").match(/(.+page)(\d+)(-.+)/);
					eis.cp.imageUrl=urlImg[1]+eis.cp.basePageNum+urlImg[3];
					eis.cp.user=eis.p_0[1][0].match(/user=\"([^"]*)\" \/>/)[1];
					eis.cp.level=eis.p_0[1][0].match(/level=\"(\d+)\" /)[1];
					eis.cp.header=$.trim(eis.p_0[1][0].replace(/<noinclude\><pagequality.+?>/,"").replace("</noinclude>",""));
					eis.cp.footer=$.trim(eis.p_0[1][2].replace("<noinclude>","").replace("<references/>","").replace("</noinclude>",""));
					$("#wpHeaderTextbox").val(eis.cp.header);
					$("#wpFooterTextbox").val(eis.cp.footer);
					$("#wpTextbox1").val(eis.p_0[1][1]);
					// assegno valori alle variabili globali testoPagPrec e testo2PagPrec per renderli visibili a autoPt e autoRi7
					testoPagPrec=p[1][1];
					testo2PagPrec=p[2][1];
					// if level=3 and user is another one, or if level=4 display radiobutton4
					if ( (eis.cp.level==="3" && eis.cp.user!==mw.config.get("wgUserName")) || eis.cp.level==="4") $("#radioQuality4").css("display","inline");
					
					$("#radiobuttons input[value='"+eis.cp.level+"']").click();
					$(".prp-page-image img").attr("src",eis.cp.imageUrl);
					$("#firstHeading").text("Modifica eis di "+eis.cp.title);
					
				}
				catch(err) {eis.p_0=["",[[],[],[]] ];}				
		} );
	}
	function chiudiEditBox () {
		$("#sfondoeis").toggle();
	}
	function pageBuild() {
		var template= '<noinclude><pagequality level="#LEVEL#" user="#USER#" />#HEADER#</noinclude>' + 
		'#BODY#<noinclude>#FOOTER#\n</noinclude>';
		var wikicode= template.replace("#HEADER#",$("#wpHeaderTextbox").val())
			.replace("#BODY#",$("#wpTextbox1").val())
			.replace("#FOOTER#",$("#wpFooterTextbox").val());
		if (eis.cp.level ===$("input:checked","#radiobuttons").val()) {
			 wikicode=wikicode.replace("#LEVEL#",eis.cp.level).replace("#USER#", eis.cp.user);
		} else {wikicode=wikicode.replace("#LEVEL#",$("input:checked","#radiobuttons").val())
		   	    	.replace("#USER#", mw.config.get("wgUserName"));
		}

		return wikicode;
	}
	
	
	function pageSave() {
		var wikicode=pageBuild();
		new mw.Api().postWithToken( 'edit', {
			action: 'edit',
			title: eis.cp.title,
			summary:$("#wpComment").val(),
			text: wikicode,
		}).done(function( data ) {
	        if ( data && data.edit && data.edit.result === 'Success' ) {
				console.log("OK, pagina " + eis.p_0[0] + "salvata");
				// window.location.reload(); 
			} else {
				alert("Errore nel salvataggio della pagina");
			}
		});
	}
	function pagePreview() {
		// toggleButton generico (nasconde parent())
		var toggleButton=$('<img>')
		    .attr("src","//upload.wikimedia.org/wikipedia/commons/f/f8/Tooltip-CloseButton.png") 
		    .attr("style",'position:absolute; top:0;right:0;cursor:pointer; z-index:200;')
			.click(function(){$(this).parent().toggle();});
		//caricamento preview
		var wikicode=pageBuild();
		$("#divPreview").toggle();
		$.ajax({
         	url: mw.util.wikiScript( 'api' ),
        	data: {
            	format: 'json',
            	action: 'parse',
				contentmodel: 'proofread-page',
				summary: "ajax preview",
            	text: wikicode,
            	time: $.now()
            	},
        	dataType: 'json',
        	type: 'POST',
        	success: function( data ) { 
        		if ( data && data.parse ) {
					
					$("#divPreview").html($(data.parse.text["*"])).append(toggleButton);

            	} else if ( data && data.error ) {
                		alert( 'Error: API returned error code "' + data.error.code + '": ' + data.error.info );
            			} else {
                			alert( 'Error: Unknown result from API.' );
						}
        		},
        		error: function( xhr ) {
        			alert( 'Error: Request failed.' );
			}
    	});
	}

})(jQuery,mw);