MediaWiki:Gadget-mediawiki.api.ptwiki.js: diferenças entre revisões

Origem: Wikipédia, a enciclopédia livre.
Conteúdo apagado Conteúdo adicionado
Migração: "Use of mediawiki.api callback params is deprecated. Use the Promise instead."
Remoção de variável inexistente desde a edição anterior: requestData (ver WP:Café dos programadores#Botões não funcionam)
Linha 27: Linha 27:
delete parametersAPI.done;
delete parametersAPI.done;


this.post( parametersAPI, requestData )
this.post( parametersAPI )
.done( function( data ) {
.done( function( data ) {
apiDeferred.resolve( data.edit );
apiDeferred.resolve( data.edit );

Revisão das 14h13min de 29 de julho de 2014

/** API estendida
* @data 08/out/2012
* @since MW 1.19
*/
/*jshint laxbreak: true */
/*global jQuery, mediaWiki*/
( function( mw, $ ) {
'use strict';

$.extend( mw.Api.prototype, {

	/**
	 * Edita uma página
	 * @author [[pt:user:!Silent]]
	 */
	editPage: function( info ) {
		var parametersAPI = {},
			apiDeferred = $.Deferred();

		$.extend( parametersAPI, info, {
			format: 'json',
			action: 'edit',
			title: info.title || mw.config.get( 'wgPageName' ),
			token: mw.user.tokens.get( 'editToken' )
		} );

		delete parametersAPI.done;

		this.post( parametersAPI )
			.done( function( data ) {
				apiDeferred.resolve( data.edit );
	
				if ( !info.done ) {
					return;
				}
	
				if ( $.isFunction( info.done ) ) {
					info.done( data.edit );
				} else if ( $.isFunction( info.done.success ) ) {
					info.done.success( data.edit );
				}
			} )
			.fail( function( code, result ) {
				if ( !result && $.isFunction( info.done.unknownError ) ) {
					info.done.unknownError();
				} else if ( result.error && $.isFunction( info.done.apiError ) ) {
					info.done.apiError( result.error );
				}
			} );

		return apiDeferred.promise();
	},

	/**
	 * Pega o conteúdo de uma página
	 * @author [[pt:user:Helder.wiki]]
	 */
	getCurrentPageText: function( title ) {
		var query, revisions,
			apiDeferred = $.Deferred();

		$.ajax( {
			url: mw.util.wikiScript( 'api' ),
			dataType: 'json',
			data: {
				'format': 'json',
				'action': 'query',
				'titles': title || mw.config.get( 'wgPageName' ),
				'prop': 'revisions',
				'rvprop': 'content',
				'indexpageids': '1'
			}
		} ).done( function( data ) {
			query = data.query;

			if ( data.error !== undefined ) {
				mw.notify( 'Erro ao usar a API: ' + data.error.code + '. ' + data.error.info );
				apiDeferred.reject();
			} else if ( query && query.pages && query.pageids ) {
				revisions = query.pages[ query.pageids[ 0 ] ].revisions;
				apiDeferred.resolve( revisions && revisions[ 0 ][ '*' ] );
			} else {
				mw.notify( 'Houve um erro inesperado ao usar a API.' );
				apiDeferred.reject();
			}
		} ).fail( function() {
			// FIXME: Remove spinner? Cancel other requests?
			mw.notify( 'Houve um erro ao tentar usar a API para acessar a página atual.' );
			apiDeferred.reject();
		} );

		// Return the promise
		return apiDeferred.promise();
	},

	/**
	 * Pega a lista de usuários de um determinado grupo
	 * @author [[pt:user:Helder.wiki]]
	 */
	getUsersInGroup: function( group ) {
		var apiDeferred = $.Deferred();

		this.get( {
			list: 'allusers',
			augroup: group,
			aulimit: 500
		} )
		.done( function ( data ) {
			apiDeferred.resolve(
				$.map( data.query.allusers, function( user ) {
					return user.name;
				} )
			);
		} )
		.fail( apiDeferred.reject );

		return apiDeferred.promise();
	},

	/**
	 * Pega o número de edições de um usuário em um determinado período de tempo
	 * @author [[pt:user:Helder.wiki]]
	 */
	getTotalEditsByUser: function( userName, from, to ) {
		var apiDeferred = $.Deferred(),
			mwAPI = this,
			params = {
				list: 'usercontribs',
				ucstart: from,
				ucend: to,
				ucuser: userName,
				ucdir: 'newer',
				ucprop: 'sizediff',
				uclimit: 500
			},
			total = 0,
			doRequest = function( ucstart ) {
				if ( ucstart ) {
					params.ucstart = ucstart;
				}

				mwAPI.get( params )
					.done( function ( data ) {
						total += data.query.usercontribs.length;

						if ( data[ 'query-continue' ] ) {
							doRequest( data[ 'query-continue' ].usercontribs.ucstart );
						} else {
							apiDeferred.resolve( total );
						}
					} )
					.fail( apiDeferred.reject );
			};

		doRequest();

		return apiDeferred.promise();
	}
} );

}( mediaWiki, jQuery ) );