MediaWiki:Gadget-UploadForm.js

Fonte: Wikinotícias

Nota: Depois de publicar, deve limpar o cachê do seu navegador para ver as alterações.

  • Firefox e Safari: Pressione Shift enquanto clica Recarregar, ou pressione Ctrl-F5 ou Ctrl-R (⌘-R no Mac)
  • Google Chrome: Pressione Ctrl-Shift-R (⌘-Shift-R no Mac)
  • Internet Explorer e Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5
  • Opera: Pressione Ctrl-F5.
/* jshint laxbreak: true, evil: true */
/* global mediaWiki, jQuery */
( function ( mw, $ ) {
'use strict';

mw.messages.set( {
	'uf-fillField': 'Existem campos obrigatórios que não foram preenchidos.'
} );

var uf = {};

uf.fields = [ {
		rows: 3,
		cols: 80,
		desc: 'Descrição',
		tip: 'Descreva brevemente a imagem.'
	}, {
		rows: 2,
		cols: 80,
		desc: 'Fonte',
		tip: 'Qual é a fonte deste arquivo?'
	}, {
		rows: 2,
		cols: 80,
		desc: 'Autor',
		tip: 'Quem é o detentor dos direitos autorais?'
	}, {
		rows: 2,
		cols: 80,
		desc: 'Data',
		tip: 'Em que data foi criado ou publicado?',
		optional: true
	}, {
		cols: 50,
		desc: 'Notícias',
		tip: 'Para qual página do Wikinotícias essa imagem é necessária?'
	}, {
		desc: 'Tipo de carregamento',
		list: [ ' - ', [
			'1 - Pessoas que já morreram ou estão no corredor da morte',
			'2 - Pessoas vivas cuja licença permita, sob o selo não comercial, o carregamento',
			'3 - Eventos históricos ou de última hora que receberam ampla cobertura',
			'4 - Capas em geral, incluindo CD, DVD, jogos, livros, jornais, etc',
			'5 - Logotipos e marcas em geral, incluindo de produtos, eventos, empresas, etc',
			'6 - Captura de tela de cinema, televisão, jogos, software e páginas da internet',
			'7 - Cédulas, moedas, brasões e selos oficiais',
			'8 - Estilos musicais, canções ou singles',
			'9 - Discursos históricos de pessoas públicas'
		] ],
		tip: 'Qual das categorias permitidas este fichero cumpre?'
	}, {
		cols: 50,
		desc: 'Integral ou parte',
		tip: 'Essa é a obra integral citada na fonte ou parte dela?'
	}, {
		rows: 2,
		cols: 60,
		desc: 'Insubstituível',
		tip: 'Não existe material semelhante sob licença livre? Você procurou?',
		defaultText: 'Não há versões da imagem sob licença livre.'
	}, {
		rows: 3,
		cols: 60,
		desc: 'Outras informações',
		tip: 'Se tiver alguma consideração adicional coloque aqui.',
		optional: true
	}, {
		desc: 'Licença',
		list: [ ' - ', [
			'nenhuma - Todos os direitos reservados',
			'cc-by-nd - Creative Commons Atribuição SemDerivações',
			'cc-by-nc - Creative Commons Atribuição NãoComercial',
			'cc-by-nc-sa - Creative Commons Atribuição NãoComercial CompartilharIgual',
			'cc-by-nc-nd - Creative Commons Atribuição NãoComercial SemDerivações',
			'cc-by - Creative Commons Atribuição',
			'cc-by-sa - Creative Commons Atribuição CompartilharIgual',
			'fal - Licença da Arte Livre',
			'dp - Creative Commons Zero ou Domínio Público'
		] ],
		tip: 'Sob qual licença esse arquivo está sendo carregado?'
	}
];

/**
 * Creates the form
 */
uf.setupForm = function () {
	var i, j, currentField, listValues, tagName,
		$loading = $( '#mw-upload-form' ),
		$table = $( '#mw-htmlform-description tbody' );

	$( '.mw-htmlform-field-HTMLTextAreaField' ).remove();
	$( '.mw-htmlform-field-Licenses' ).remove();
	$( '#editpage-specialchars' ).parent().parent().parent().remove();

	$( '<input />', {
		'type': 'hidden',
		'name': 'wpUploadDescription',
		'id': 'wpUploadDescription'
	} ).appendTo( $table );

	$loading.submit( ( function ( oldSubmit ) {
		return function () {
			// First, let's construct the information template
			var doSubmit = uf.upload();

			if ( doSubmit && oldSubmit ) {
				if ( typeof oldSubmit === 'string') {
					doSubmit = eval( oldSubmit );
				} else if ( typeof oldSubmit === 'function' ) {
					doSubmit = oldSubmit.apply( $loading[ 0 ], arguments );
				}
			}

			return doSubmit;
		};
	}( $loading[ 0 ].onsubmit ) ) );

	for ( i = 0; i < uf.fields.length; i++ ) {
		currentField = uf.fields[ i ];

		if ( currentField.condition !== undefined
			&& !currentField.condition
		) {
			continue;
		}

		if ( currentField.list ) {
			$( '<tr></tr>' ).append(
				$( '<td class="mw-label"></td>' ).append(
					$( '<label class="uf-label" for="uf-field-' + i + '"></label>' )
						.html( currentField.desc + ': ' )
				),
				$( '<td class="mw-input"></td>' ).append(
					$( '<select class="uf-field" id="uf-field-' + i + '"></select>' )
						.append( $( '<option></option>' ) )
				)
			).appendTo( $table );

			for ( j = 0; j < currentField.list[ 1 ].length; j++ ) {
				listValues = currentField.list[ 1 ][ j ].split( currentField.list[ 0 ] );

				$( '<option></option>' )
					.val( listValues[ 0 ] )
					.html( currentField.list[ 0 ] === ' - '
						? currentField.list[ 1 ][ j ]
						: listValues[ 1 ]
					).appendTo( $( '#uf-field-' + i  ) );
			}
		} else {
			tagName = ( !currentField.rows || currentField.rows === 1 ) ? 'input' : 'textarea';

			$( '<tr></tr>' ).append(
				$( '<td class="mw-label"></td>' ).append(
					$( '<label class="uf-label" for="uf-field-' + i + '"></label>' )
						.html( currentField.desc + ': ' )
				),
				$( '<td class="mw-input"></td>' ).append(
					$( '<' + tagName + '></' + tagName + '>' )
						.css( 'width', 'auto' )
						.attr( {
							'class': 'uf-field',
							'id': 'uf-field-' + i,
							'rows': currentField.rows || 1
						} ).attr( ( ( tagName === 'input' ) ? 'size' : 'cols' ), currentField.cols )
				)
			).appendTo( $table );

			if ( currentField.defaultText ) {
				$( '#uf-field-' + i ).val( currentField.defaultText );
			}
		}

		if ( currentField.tip ) {
			$( '#uf-field-' + i ).parent().append(
				$( '<div></div>' ).css( {
					'font-size': 'smaller',
					'minHeight': '25px'
				} )
			);
		}
	}
};

uf.upload = function () {
	var $this,
		text = '{' + '{Informação\n';

	$( '.uf-field' ).each( function ( i ) {
		$this = $( this );

		if ( !uf.fields[ i ].optional && $this.val() === '' ) {
			$this.addClass( 'uf-fill-field' );
		} else {
			$this.removeClass( 'uf-fill-field' );
		}

		text += '| '
			+ ( uf.fields[ i ]
				? uf.fields[ i ].desc
				: $( '.uf-label' ).eq( i ).html()
			).replace( /[\/():].*/g, '' ).toLowerCase()
			+ ' = '
			+ $this.val()
			+ '\n';
	} );

	if ( $( '.uf-field' ).hasClass( 'uf-fill-field' ) ) {
		alert( mw.message( 'uf-fillField' ).plain() );

		return false;
	}

	text += '}' + '}\n';

	$( '#wpUploadDescription' ).val( text );

	return true;
};

if ( mw.config.get( 'wgCanonicalSpecialPageName' ) === 'Upload'
	&& !mw.util.getParamValue( 'wpForReUpload' )
) {
	$( uf.setupForm );
}

}( mediaWiki, jQuery ) );