MediaWiki:Gadget-mediawiki.api.ptwiki.js

Nota: Após publicar, você pode ter que limpar o "cache" do seu navegador para ver as alterações.

  • Firefox / 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)
  • Edge: Pressione Ctrl enquanto clica Recarregar, ou pressione Ctrl-F5.
  • Opera: Pressione Ctrl-F5.
/** 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(),
			requestData = {
				ok: 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 );
					}
				},

				err: 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 );
					}
				}
			};

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

		delete parametersAPI.done;

		this.post( parametersAPI, requestData );

		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 ) );