MediaWiki:Gadget-nav-requisiti.js

Versione del 15 mag 2015 alle 08:27 di Rotpunkt (discussione | contributi) (+ucprop, meno dati trasmessi)

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.

/**
 * Gadget-nav-requisiti.js
 * Aggiunge un link "Verifica requisiti di voto" con il quale è possibile visualizzare
 * le informazioni su data di registrazione, primo, 50esimo e 500esimo edit di un utente.
 * 
 * Questa è una riscrittura da zero a partire da:
 * http://it.wikipedia.org/w/index.php?title=Wikipedia:Monobook.js/Requisiti.js&oldid=38597188
 *
 * @author [[Utente:Rotpunkt]]
 */
/*global mediaWiki, jQuery */

( function ( mw, $ ) {
	'use strict';

	var $dialog;

	// Ritorna la data di registrazione dell'utente
	function getRegistration( user, registrationHandler ) {
		$.ajax( {
			url: mw.util.wikiScript( 'api' ),
			data: {
				action: 'query',
				list: 'users',
				ususers: user,
				usprop: 'registration',
				format: 'json'
			},
			dataType: 'json'
		} )
			.done( function ( data ) {
				registrationHandler( data.query.users[0].registration );
			} );
	}

	// Ritorna i contributi dell'utente in formato JSON
	function getUserContribs( user, start, contribsHandler ) {
		$.ajax( {
			url: mw.util.wikiScript( 'api' ),
			data: {
				action: 'query',
				list: 'usercontribs',
				ucuser: user,
				ucprop: 'timestamp',
				ucstart: start,
				ucdir: 'newer',
				uclimit: '500',
				format: 'json'
			},
			dataType: 'json'
		} )
			.done( function ( data ) {
				contribsHandler( data.query.usercontribs );
			} );
	}

	// Parsifica un timestamp in date (1 gen 2001) e time (01:23)
	function parseTimestamp( timestamp ) {
		var date, hours, minutes, months;

		date = new Date( timestamp );
		hours = date.getHours();
		minutes = date.getMinutes();
		months = [
			'gen', 'feb', 'mar', 'apr', 'mag', 'giu',
			'lug', 'ago', 'set', 'ott', 'nov', 'dic'
		];

		return date.getDate() + ' ' + months[date.getMonth()] + ' ' +
			   date.getFullYear() + ' alle ' +
			   ( hours < 10 ? '0' + hours : hours ) + ':' +
			   ( minutes < 10 ? '0' + minutes : minutes );
	}

	function buildResult( registration, contribs ) {
		var info = '', totcontribs = 'l\'utente ha fatto solo ' + contribs.length + ' modifiche';
		info += 'Registrazione: ' + parseTimestamp( registration ) + '<br/>';
		info += 'Prima modifica: ' + ( contribs.length > 0 ? parseTimestamp( contribs[0].timestamp ) : totcontribs ) + '<br/>';
		info += '50esima modifica: ' + ( contribs.length >= 50 ? parseTimestamp( contribs[49].timestamp ) : totcontribs ) + '<br/>';
		info += '500esima modifica: ' + ( contribs.length >= 500 ? parseTimestamp( contribs[499].timestamp ) : totcontribs );
		return info;
	}
	
	/**
	 * Richiede il nome utente.
	 */
	function showDialog() {
		var $label, $inputText, $spinner, $result;
		if ( !$dialog ) {
			$dialog = $( '<div>' ).attr( 'id', 'gds-dialog' ).appendTo( 'body' );
		}
		$label = $( '<label>' ).css( { display: 'block', 'margin': '10px 0 2px 0' } )
			.text( 'Nome utente:' );
		$inputText = $( '<input/>' ).attr( 'type', 'text' ).attr( 'size', 40 );
		$result = $( '<p>' );
		$spinner = $.createSpinner( { size: 'large', type: 'block' } ).css( 'margin', '10px' ).hide();
		$dialog.empty().append( $label, $inputText, $result, $spinner );
 
		$dialog.dialog( {
			title: 'Accessorio verifica requisiti di voto',
			position: { my: 'center', at: 'center', of: window },
			buttons: {
				'Cerca': function () {
					if ( $spinner.is( ':visible' ) ) {
						return;
					}
					var user = $.trim( $inputText.val() );
					if ( user.length === 0 ) {
						alert( 'Il nome utente è obbligatorio.' );
					} else {
						$result.html( 'Ricerca in corso...' );
						$spinner.show();
						getRegistration( user, function ( registration ) {
							if ( registration ) {
								getUserContribs( user, registration, function ( contribs ) {
									$spinner.hide();
									$result.html( buildResult( registration, contribs ) );
								} );
							} else {
								$spinner.hide();
								$result.empty();
								alert( 'L\'utente ' + user + ' non è registrato' );
							}
						} );
					}
				},
				'Annulla': function () {
					$( this ).dialog( 'close' );
				}
			}
		} );
	}

	$( function () {
		var portletLink = mw.util.addPortletLink( 'p-navigation', '#', 'Verifica requisiti di voto' );
		$( portletLink ).click( function ( event ) {
			event.preventDefault();
			mw.loader.using( [ 'jquery.ui.dialog', 'jquery.spinner' ], function () {
				showDialog();
			} );
		} );
	} );
}( mediaWiki, jQuery ) );