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