MediaWiki:Gadget-EditInView.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.
/************************************
zona funzioni pubbliche utilizzate anche in altri gadget 
*/
function saveEditBox(level) {
	if (level===3) return savePage75;
	if (level===4) return savePage100;
}

function autoSAL100(testo) {
	pagequality=find_stringa(testo,"<pagequality ","/>",1);
	pagequalityNew=pagequality.replace('level="3"', 'level="4"');
	user=find_stringa(pagequality,'user="','"',1);
	userNew='user="'+mw.config.get("wgUserName")+'"';
	pagequalityNew=pagequalityNew.replace(user,userNew);
	testo=testo.replace(pagequality, pagequalityNew);
	mw.sommario="/* Pagine_SAL_100% */ (by eiv)";
	return testo;
}

function savePage0() {
	// var headerSchema='<noinclude><pagequality level="0" user="USER" /><div class="pagetext">TEXT\n\n\n</noinclude>';
	// var footerSchema='<noinclude>\n<references/></div></noinclude>' ;
	var headerSchema='<noinclude><pagequality level="0" user="USER" />TEXT</noinclude>';
	var footerSchema='<noinclude></noinclude>' ;
	headerSchema=headerSchema.replace("USER",mw.config.get("wgUserName")).replace("TEXT","");
    
	testo=headerSchema+" "+footerSchema;
	mw.sommario="/* Pagine_SAL_0% */ by eiv";
	return testo;
}

function savePage75() {
	// var headerSchema='<noinclude><pagequality level="LEVEL" user="USER" /><div class="pagetext">TEXT\n\n\n</noinclude>';
	// var footerSchema='<noinclude>TEXT</div></noinclude>' ;
	var headerSchema='<noinclude><pagequality level="LEVEL" user="USER" />TEXT</noinclude>';
	var footerSchema='<noinclude>TEXT</noinclude>' ;
	var contenuto=mw.contenuto;
	var level="3";
        if (level!==contenuto.level) {
	contenuto.header=headerSchema.replace("LEVEL",level).replace("USER",mw.config.get("wgUserName")).replace("TEXT",$.trim(leggiBox(0)));}
        else {
	contenuto.header=headerSchema.replace("LEVEL",contenuto.level).replace("USER",contenuto.user).replace("TEXT",$.trim(leggiBox(0)));}
         
	contenuto.footer=footerSchema.replace("TEXT",$.trim(leggiBox(2)));
	testo=contenuto.header+leggiBox(1)+contenuto.footer;
	mw.sommario="/* Pagine_SAL_75% */ by savePage75()";
	return testo;
}

function savePage100() {
	// var headerSchema='<noinclude><pagequality level="LEVEL" user="USER" /><div class="pagetext">TEXT\n\n\n</noinclude>';
	// var footerSchema='<noinclude>TEXT</div></noinclude>' ;
	var headerSchema='<noinclude><pagequality level="LEVEL" user="USER" />TEXT</noinclude>';
	var footerSchema='<noinclude>TEXT</noinclude>' ;
	var contenuto=mw.contenuto;
	var level="4";
        if (level!==contenuto.level) {
	contenuto.header=headerSchema.replace("LEVEL",level).replace("USER",mw.config.get("wgUserName")).replace("TEXT",$.trim(leggiBox(0)));}
        else {
	contenuto.header=headerSchema.replace("LEVEL",contenuto.level).replace("USER",contenuto.user).replace("TEXT",$.trim(leggiBox(0)));}
         
	contenuto.footer=footerSchema.replace("TEXT",$.trim(leggiBox(2)));
	var testo=contenuto.header+leggiBox(1)+contenuto.footer;
	mw.sommario="/* Pagine_SAL_100% */ by eiv";
	return testo;
}

// Variante di newButton(), aggiunge il bottone in areaBottoni di editBox. Funzione pubblica. 
function newButtonx(nome, funzione,messaggio) { 
	if ($("#areaBottoni").length===-1) {alert ("Errore: non c'è un regolare editBox"); return;}
	if (mw.config.get("wgAction")!=="view") {alert ("Errore: chiamata di newButtonx() in modalità diversa da view"); return;}

// se nome è un oggetto svolgilo
	var p;
    var html="";
	if (typeof(nome) === "string") {
		p = {
			nome: nome,
			funzione: funzione,
			messaggio: messaggio
		};
	} else {
		p = nome;
	}
	if (p.messaggio===undefined) p.messaggio="Nessun aiuto registrato";
	if (p.classe===undefined) p.classe="baseButton";
	if (p.stile===undefined) p.stile="display:inline";

	// normalizzazione function
	if (p.funzione.indexOf("(") === -1 && p.funzione.indexOf(")") === -1) {
		p.funzione += "()";
	}

	// messaggio di default
	if (p.messaggio === undefined) {
		p.messaggio = "Nessun messaggio di aiuto registrato";
	}

	// caso pulsante=immagine
	if (p.nome.substring(0, 2) == "//") {
		html = '<img class="'+p.classe+'" style="'+p.stile+'" src="' + p.nome + '" onclick="' + p.funzione + '" title="' + p.messaggio +'"';
				if (p.ondblclick!==undefined) html+=' ondblclick="'+p.ondblclick+'"';
				html+='/>';
	}
	
	// caso pulsante=label
	else {
		html = '<button class="'+p.classe+'" style="'+p.stile+'" type="button" title="' + p.messaggio + '" onclick="' + p.funzione +'"';
				if (p.ondblclick!==undefined) html+=' ondblclick="'+p.ondblclick+'"';
				html+='><small>' + p.nome + '</small></button>';                
	}
	$("#areaBottoni").append($(html));
	return false;
}
/**************************************** 
 * zona iffy 

*/
(function ($,mw) {

// crea un oggetto mw.editinview
mw.editinview= {};

mw.editinview.zoom_in = function () {
	immagine=$("#divImg").length>0 ? $("#divImg") : $(".prp-page-image img");
	var width=immagine.css("width").replace("px","");
	var height=immagine.css("height").replace("px","");
	fact=(width*1+50.0)/width;
	immagine.css("width",Math.round(width*fact)+"px");
	immagine.css("height",Math.round(height*fact)+"px");
};



mw.editinview.zoom_out = function () {
	immagine=$("#divImg").length>0 ? $("#divImg") : $(".prp-page-image img");
	var width=immagine.css("width").replace("px","");
	var height=immagine.css("height").replace("px","");
	fact=(width*1-50.0)/width;
	immagine.css("width",Math.round(width*fact)+"px");
	immagine.css("height",Math.round(height*fact)+"px");
};
mw.editinview.saveDefault = function () {
	if (isOdd(mw.config.get("wgPageName").substring(mw.config.get("wgPageName").lastIndexOf("/")+1))) {
		localStorage.imgStyleOdd=$(".prp-page-image img").attr("style");
	} else
	{
		localStorage.imgStyleEven=$(".prp-page-image img").attr("style");
	}
};
mw.editinview.deleteDefault =function () {
		localStorage.removeItem("imgStyleOdd");
		localStorage.removeItem("imgStyleEven");
		console.log("Cancellati imgStyleOdd e imgStyleEven");
};
mw.editinview.attivaEditBox =function (pagina) {
	if ($("#editBox").length===1) {
    if ($("#editBox").css("display")==="none") {
        $("#content").css("margin-left","0px");$("#mw-panel, #mw-head, #mw-page-base").css("display","none");
        $("#editBox").show();
        }
    else {
         $("#editBox").hide();
         }
    }
else {
   		// sospendo la chiamata a rfmenu
   		// rfmenu();
   		$("#content").css("margin-left","0px");$("#mw-panel, #mw-head, #mw-page-base").css("display","none");
   		mw.editinview.creaBoxEdit(pagina);
	}
};

mw.editinview.pvToggle=function () {
     $("#previewBox").toggle();
};

mw.editinview.disattivaEditBox =function () {
     $("#editBox").hide();
     $("#content").css("margin-left","10em");
     $("#mw-panel, #mw-head, #mw-page-base").css("display","block");
};

mw.editinview.editPage =function (callback, pagename) {
	var content;
    if (pagename===undefined) {
    	pagename = mw.config.get("wgPageName");
    }
    if(callback===savePage75 || callback===savePage100 || callback===savePage0) {
        content = callback();
    }
    else {
	    content = $.ajax({url:"/w/index.php?action=raw&title="+pagename,async:false}).responseText;
		content = callback(content);
    }
    if (mw.sommario===undefined) mw.sommario="Edit via eiv: "+callback.name;
	$.ajax({
        url: mw.util.wikiScript( 'api' ),
        data: {
            format: 'json',
            action: 'edit',
            title: pagename,
            summary: mw.sommario,
            text: content,
            token: mw.user.tokens.get('csrfToken')
        },
        dataType: 'json',
        type: 'POST',
        success: function( data ) {
            if ( data && data.edit && data.edit.result == 'Success' ) {
               if (callback !== savePage0 ) window.location.reload(); // reload page if edit was successful
            } 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.' );
        }
    });
};
// aggiunge due lentine zoom in - out
function zoom() {
	var bottoniEdit='<div style="position:fixed;top:100px;right:130px; z-index:1000; opacity:0.6; filter: alpha(opacity=60)">'+
        '<span id="zoomout" title="Riduci l\'immagine"></span> '+
        '<span id="zoomin" title="Ingrandisci l\'immagine"></span> ';

	if (mw.config.get("wgAction")==="edit") bottoniEdit=bottoniEdit+
        '<span id="previewToggle" title="Visualizza/nascondi preview"></span> ';

    if (mw.config.get("wgAction")==="view") bottoniEdit=bottoniEdit+
        '<span id="saveDefault" title="Click: memorizza posizione e grandezza dell\'immagine;\ndoppio click: cancella i dati (ricaricare la pagina!)"></span> '+
        '<span id="editButton" title="Attiva la modalità Edit In View"></span> '+
        '<span id="editButtonDelete" title="Disattiva la modalità Edit In View"></span> ';
    bottoniEdit=bottoniEdit+'</div>';
    
    //aggancia i bottoni solo se c'e' l'immagine della scansione
    if ($(".prp-page-image img").length)
		$("body").append(bottoniEdit);
       
	$("#zoomin").attr("onclick","mw.editinview.zoom_in()").append($("<img src='//upload.wikimedia.org/wikipedia/commons/thumb/9/95/Viewmag%2B.png/20px-Viewmag%2B.png'/>"));
        
    $("#previewToggle").attr("onclick","mw.editinview.pvToggle()").append($("<img src='//upload.wikimedia.org/wikipedia/commons/thumb/f/f2/Window_new.png/20px-Window_new.png'/>"));


	$("#zoomout").attr("onclick","mw.editinview.zoom_out()").append($("<img src='//upload.wikimedia.org/wikipedia/commons/thumb/a/ac/Viewmag-.png/20px-Viewmag-.png'/>"));
    $("#editButton").attr("onclick","mw.editinview.attivaEditBox()").append($("<img src='//upload.wikimedia.org/wikipedia/commons/thumb/4/4f/Farm-Fresh_pencil_add.png/20px-Farm-Fresh_pencil_add.png'/>"));
    $("#editButtonDelete").attr("onclick","mw.editinview.disattivaEditBox()").append($("<img src='//upload.wikimedia.org/wikipedia/commons/thumb/6/6d/Farm-Fresh_pencil_delete.png/20px-Farm-Fresh_pencil_delete.png'/>"));
	$("#saveDefault").attr("onclick","mw.editinview.saveDefault()").dblclick(function () {mw.editinview.deleteDefault();}  ).append($("<img src='//upload.wikimedia.org/wikipedia/commons/thumb/2/21/Nuvola_apps_knotes.png/20px-Nuvola_apps_knotes.png'/>"));

	if (mw.config.get("wgAction")==="view" && mw.config.get("wgCanonicalNamespace")=="Page") {
		height=Math.max(
			  /\d+/.exec($(".prp-page-content").css("height")),
			  /\d+/.exec($(".prp-page-image img").css("height")))+"px";
		
		$(".prp-page-image").css("height",height).css("overflow","hidden");
	    $(".prp-page-image img").draggable();
	    loadDefault();
	} 
}


/// funzioni per ajaxEdit

// restituisce il contenuto in JSON formattato della variabile mw.memoRegex (sostituzioni "ricordate")
// per salvare in Utente:Nome utente/memoRegex, chiamare: editPage(textMemoRegex,"Utente"+mw.config.get("wgUserName")+"/memoRegex")
function textMemoRegex() {
	return JSON.stringify(JSON.parse(localStorage.memoRegex),null,4);
}
	
// salva in localStorage.memoRegex il contenuto di Utente:Nome utente/memoRegex
function saveMemoRegex() {
	var testo=$.ajax({url:"//it.wikisource.org/w/index.php?action=raw&title=Utente:"+
	    mw.config.get("wgUserName")+"/memoRegex",async:false}).responseText;
	    mw.memoRegex=JSON.parse(testo);
	    localStorage.memoRegex=JSON.stringify(mw.memoRegex);
}

mw.editinview.leggiPagina= function (pagina) {
	if (pagina === undefined) pagina = mw.config.get('wgPageName');
	
	var contenuto = $.ajax({
		url: "/w/index.php?action=raw&title=" + pagina,
		async: false
	}).responseText;
		var noincludeList = produciLista(contenuto, '<noinclude>', '</noinclude>', 1);
		var header = noincludeList[0];
		var footer = noincludeList[noincludeList.length - 1];
		var body = find_stringa(contenuto, header, footer, 0);
		header=$.trim(header.replace("<noinclude>","")
		     .replace("</noinclude>","")
		     .replace('<div class="pagetext">',""));
		var pagequality=find_stringa(header,"<pagequality", "/>",1);
		header=header.replace(pagequality,"");
		footer=footer.replace("<noinclude>","").replace("</noinclude>","").replace("</div>","");

		var user=find_stringa(pagequality,'user="','"',0);
		var level=find_stringa(pagequality,'level="','"',0);
		mw.contenuto={};
		mw.contenuto.header=header;
		mw.contenuto.body=body;

		mw.contenuto.footer=footer;
		mw.contenuto.user=user;
		mw.contenuto.level=level;
	    mw.contenuto.pagina=pagina;
	return;
};

function isOdd(n) {
	if (n%2===0) {
		return false;
	} else {
	return true;
	}
}


 
function loadDefault() {
	if (isOdd(mw.config.get("wgPageName").substring(mw.config.get("wgPageName").lastIndexOf("/")+1))) {
		if (localStorage.imgStyleOdd) $(".prp-page-image img").attr("style",localStorage.imgStyleOdd);
	} else
	{
		if (localStorage.imgStyleEven) $(".prp-page-image img").attr("style",localStorage.imgStyleEven);
	}
}

mw.editinview.creaBoxEdit= function (pagina) {
	var box='<div style="display:none; border:1px solid black; position:absolute; top:50px; left:100px; z-index:99; background-color:#efefef;padding:3px;" id="editBox"></div>';
	$(box).appendTo($("body"));
	$("#editBox").append($("<div id='handle' style='width:100%; background-color:#dfdfdf; min-height:10px;' ><div id='areaBottoni' style='float:left;max-width:400px'></div> </div>"));

	//$("#handle").append($('<img src="//upload.wikimedia.org/wikipedia/commons/thumb/c/c7/100_percents.svg/20px-100_percents.svg.png" style="float:right;cursor:pointer;" onclick="mw.editinview.editPage(savePage100)" >'));
	//$("#handle").append($('<img src="//upload.wikimedia.org/wikipedia/commons/thumb/4/49/75%25.svg/20px-75%25.svg.png" style="float:right;cursor:pointer;" onclick="mw.editinview.editPage(savePage75)" >'));

	$("#editBox").draggable({ handle: "areaBottoni" });
	$("#editBox").append($("<textarea style='width:100%; height:30px;  border:1px solid gray;' />"));
	$("#editBox").append($("<textarea name='wpTextbox1' rows='30' style='width:500px; border:1px solid gray;' />"));
	$("#editBox").append($("<textarea style='width:100%; height:30px; border:1px solid gray;' />"));
	mw.editinview.leggiPagina(pagina);
	if((mw.contenuto.level==="3" && mw.contenuto.user!==mw.config.get("wgUserName")) || mw.contenuto.level==="4" ) {
	  	$("#handle").append($('<img src="//upload.wikimedia.org/wikipedia/commons/thumb/c/c7/100_percents.svg/20px-100_percents.svg.png" style="float:right;cursor:pointer;" onclick="mw.editinview.editPage(savePage100)" >'));
	}
	$("#handle").append($('<img src="//upload.wikimedia.org/wikipedia/commons/thumb/4/49/75%25.svg/20px-75%25.svg.png" style="float:right;cursor:pointer;" onclick="mw.editinview.editPage(savePage75)" >'));
	$("#handle").append($('<img src="//upload.wikimedia.org/wikipedia/commons/f/f8/Tooltip-CloseButton.png" style="float:right;cursor:pointer;" onclick="$(&quot;#editBox&quot;).hide()">'));
	importScript("Utente:"+mw.config.get("wgUserName")+"/PersonalButtonx.js");
	$("textarea").eq(0).val(mw.contenuto.header);
	$("textarea").eq(1).val(mw.contenuto.body);
	$("textarea").eq(2).val(mw.contenuto.footer);
	$("#editBox textarea").focusin(function () {mw.activeElement=this;});
};



$(document).ready(function() {
	if (mw.config.get("wgCanonicalNamespace")==="Page") {
		if ($(".iwpage").length===0) zoom();

		newButton("edit","mw.editinview.attivaEditBox()","v","Attivazione edit box");
	}
	if ($(".quality3.prp-page-qualityheader").length===1 && mw.config.get("wgCanonicalNamespace")==="Page") {
		newButton("autoSAL100","mw.editinview.editPage(autoSAL100)","v","porto SAL a 100%");
		//$("#p-tb ul").append($("<li><a href='javascript:mw.editinview.editPage(autoSAL100)'>auto SAL 100%</a></li>"));
	}
});
}) ($,mw);