Utente:Valcio/Script/NonFirmato.js

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca

Questa pagina definisce alcuni parametri di aspetto e comportamento generale di tutte le pagine. Per personalizzarli vedi Aiuto:Stile utente.


Nota: dopo aver salvato è necessario pulire la cache del proprio browser per vedere i cambiamenti (per le pagine globali è comunque necessario attendere qualche minuto). Per Mozilla / Firefox / Safari: fare clic su Ricarica tenendo premuto il tasto delle maiuscole, oppure premere Ctrl-F5 o Ctrl-R (Command-R su Mac); per Chrome: premere Ctrl-Shift-R (Command-Shift-R su un Mac); per Konqueror: premere il pulsante Ricarica o il tasto F5; per Opera può essere necessario svuotare completamente la cache dal menù Strumenti → Preferenze; per Internet Explorer: mantenere premuto il tasto Ctrl mentre si preme il pulsante Aggiorna o premere Ctrl-F5.

/**
 * Inserisce un collegamento 'non firmato' alla barra laterale che, se premuto,
 * aggiunge un tasto 'non firmato' accanto ad ogni titolo di sezione.
 * Premendolo, è possibile selezionare una modifica dalla cronologia ed inserire
 * automaticamente il template non firmato.
 * 
 * @author [[User:Valcio]] and contributors. Strongly inspired by [[MediaWiki:Gadget-cambusa.js]]
 */
 
 ( function ( mw, $ ) {
	'use strict';
	
	function createDropdown(array, then, obj){
		var dropdown = new OO.ui.DropdownInputWidget( {
			$overlay: obj.$overlay,
			label: '',
			text: "Seleziona la modifica che non è stata firmata",
			options: array
		} );
		dropdown.on( 'change', function (value) {
				then(value);
		} );
		obj.content.$element.append( dropdown.$element );
		obj.$body.append( obj.content.$element );
	}
	
	function createHTML(html, obj){
		obj.content.$element.append( html );
    	obj.$body.append( obj.content.$element );
	}
	
	function createButton(Label, onclick, obj,ico=null, accesskey=null, css=null){
		var button = new OO.ui.ButtonWidget( {
		    label: Label
		} );
		button.on( 'click', function () {
			onclick();
		} );
		if(ico!=null)
			button.setIcon(ico);
		if(accesskey!=null)
			button.setAccessKey(accesskey);

		if(css!=null)
			button.$element.css(css);
		obj.content.$element.append( button.$element );
		obj.$body.append( obj.content.$element );
	}
	
	function createDialog(funct){
		function MyDialog( config ) {
	    	MyDialog.super.call( this, config );
		}
		OO.inheritClass( MyDialog, OO.ui.Dialog );
		MyDialog.static.name = 'myDialog';
		MyDialog.prototype.initialize = function () {
			MyDialog.super.prototype.initialize.call( this );
			this.content = new OO.ui.PanelLayout( { padded: true, expanded: false } );
			funct(this);
		};
		MyDialog.prototype.getBodyHeight = function () {
	    	return this.content.$element.outerHeight( true );
		};
		var myDialog = new MyDialog( {
		    size: 'medium'
		} );
		var windowManager = new OO.ui.WindowManager();
		$( document.body ).append( windowManager.$element );
		windowManager.addWindows( [ myDialog ] );
		windowManager.openWindow( myDialog );
	}
	

	function getDate(timestamp){
		var month=timestamp[5]+timestamp[6];
		switch(month){
			case "01": month="gen"; break;
			case "02": month="feb"; break;
			case "03": month="mar"; break; 
			case "04": month="apr"; break;
			case "05": month="mag"; break;
			case "06": month="giu"; break;
			case "07": month="lug"; break;
			case "08": month="ago"; break;
			case "09": month="set"; break;
			case "10": month="ott"; break;
			case "11": month="nov"; break;
			case "12": month="dic"; break;
		}
		var d = new Date();
		var hour="";
		for(var i=11; i<=15; i++)
			hour=hour+timestamp[i];
		var day=timestamp[8]+timestamp[9];
		var year=timestamp[0]+timestamp[1]+timestamp[2]+timestamp[3];
		var n = new Date(Number(year), Number(timestamp[5]+timestamp[6])-1, Number(day), Number(timestamp[11]+timestamp[12])+1, Number(timestamp[14]+timestamp[15])-d.getTimezoneOffset());
		day=String(n.getUTCDate());
		year=String(n.getUTCFullYear());
		hour=("0"+(n.getUTCHours())).slice(-2)+":"+("0"+n.getMinutes()).slice(-2);
		return hour+", "+day+" "+month+" "+year;
	}
	function ISODateString(d){
			function pad(n){return n<10 ? '0'+n : n}
			return d.getUTCFullYear()+'-'
			    + pad(d.getUTCMonth()+1)+'-'
			    + pad(d.getUTCDate())+'T'
			    + pad(d.getUTCHours())+':'
			    + pad(d.getUTCMinutes())+':'
			    + pad(d.getUTCSeconds())+'Z'}
	
	function creaPulsanti(){
		$( 'span.mw-editsection > a:last-of-type' ).each( function ( i, el ) {
			var $link, sectitle = $( el ).attr( 'title' ).replace( /^(Modifica|Cancella) la sezione /g, '' ), sectionnumber = i+1;			$link = $( '<a>' )
				.attr( 'href', '#' )
				.attr( {'title': 'Aggiungi il template non firmato alla discussione ' + sectitle,
				'id': sectionnumber})
				.text( 'non firmato' )
				.click( function ( event ) {
					sectionnumber=$(this).attr('id');
					event.preventDefault();
					createDialog(function(obj){
						createDropdown(options, function(value){
							var d = new Date();
							d=ISODateString(d);
							params= {
							    action: 'edit',
							    title: mw.config.get('wgPageName'),
							    summary: 'Non firmato',
							    minor: true,
							    appendtext: '{{nf|'+value+'}}',
							    section: sectionnumber,
							    basetimestamp:queryresult[0].timestamp,
							    starttimestamp: d,
							    format: 'json'
							};
							api.postWithToken( 'csrf', params ).done( function ( data ) {
								  createDialog(function(obj){
								  	createHTML("<p>Fatto!</p>", obj);
								  	createButton("Ricarica la pagina", function(){location.reload();}, obj);
								  });
							} )
							.fail(function(error){
								var msg;
								switch(String(error)){
									case "editconflict": msg="Nel modificare la pagina si è verificato un conflitto di modifiche: ricaricare la pagina e riprovare."; break;
									default: msg="Si è verificato un errore dal codice: "+error; break;
								}
								alert(msg);
								//@todo Dialog OOui, verificare autore e oggetto medifica e dare possibilità di aggiungere comunque il template
							});
						}, obj);
					});
				});
			$( el ).after( '<span> | </span>', $link );
		});
	}
	
	const options=[];
	var queryresult, api = new mw.Api();
	var params={
		"action": "query",
		"format": "json",
		"prop": "revisions",
		"titles": mw.config.get('wgPageName'),
		"rvprop": "timestamp|comment|user",
		"formatversion": "2",
		"rvlimit": "15"
	};
	api.postWithToken( 'csrf', params ).done( function ( data ) {
		queryresult=data.query.pages[0].revisions;
		options[0]='';
		for(var i=0; i< 15; i++){
			options[i+1]={
				label: getDate(queryresult[i].timestamp)+" "+queryresult[i].user+" ("+queryresult[i].comment+")",
				data: getDate(queryresult[i].timestamp)+"‎ "+queryresult[i].user
			};
		}
	});
	var node = mw.util.addPortletLink(
    'p-tb',
    '#',
    "Non firmato"
	);
	$( node ).on( 'click', function () {
		creaPulsanti();
	} );
	
}( mediaWiki, jQuery ) );