mediawiki-extensions-AbuseF.../modules/ext.abuseFilter.tools.js
helderwiki 20dabefe22 Improve error handling for HTTP requests
The API provides more details about HTTP errors, so show these to
the user instead of a generic "An unknown error occurred."

Bug: 68767
Change-Id: I3188b9729c815a07c65a7dbef4d40deebe29b87d
2014-08-02 11:56:32 +00:00

112 lines
2.6 KiB
JavaScript

/**
* JavaScript for AbuseFilter tools
*
* @author John Du Hart
* @author Marius Hoch <hoo@online.de>
*/
( function( mw, $ ) {
'use strict';
/**
* Submits the expression to be evaluated.
* @context HTMLElement
* @param {jQuery.Event} e
*/
function doExprSubmit() {
/*jshint validthis:true */
var expr = $( '#wpTestExpr' ).val(),
api = new mw.Api();
$( this ).injectSpinner( 'abusefilter-expr' );
api.post( {
action: 'abusefilterevalexpression',
expression: expr
} )
.fail( function( error, details ) {
var msg = error === 'http' ? 'abusefilter-http-error' : 'unknown-error';
$.removeSpinner( 'abusefilter-expr' );
$( '#mw-abusefilter-expr-result' )
.text( mw.msg( msg, details.exception ) );
} )
.done( function( data ) {
$.removeSpinner( 'abusefilter-expr' );
$( '#mw-abusefilter-expr-result' )
.text( data.abusefilterevalexpression.result );
} );
}
/**
* Submits a call to reautoconfirm a user.
* @context HTMLElement
* @param {jQuery.Event} e
*/
function doReautoSubmit() {
/*jshint validthis:true */
var name = $( '#reautoconfirm-user' ).val(),
api;
if ( name === '' ) {
return;
}
$( this ).injectSpinner( 'abusefilter-reautoconfirm' );
api = new mw.Api();
api.post( {
action: 'abusefilterunblockautopromote',
user: name,
token: mw.user.tokens.get( 'editToken' )
} )
.done( processReautoconfirm )
.fail( processReautoconfirmFailure );
}
/**
* Processes the result of the unblocking autopromotions for a user
*
* @param {Object} data
*/
function processReautoconfirm( data ) {
mw.notify(
mw.message( 'abusefilter-reautoconfirm-done', data.abusefilterunblockautopromote.user ).toString()
);
$.removeSpinner( 'abusefilter-reautoconfirm' );
}
/**
* Processes the result of the unblocking autopromotions for a user in case of an error
*
* @param {string} errorCode
* @param {Object} data
*/
function processReautoconfirmFailure( errorCode, data ) {
var msg;
switch ( errorCode ) {
case 'permissiondenied':
msg = mw.msg( 'abusefilter-reautoconfirm-notallowed' );
break;
case 'http':
msg = mw.msg( 'abusefilter-http-error', data && data.exception );
break;
case 'notsuspended':
msg = data.error.info;
break;
default:
msg = mw.msg( 'unknown-error' );
break;
}
mw.notify( msg );
$.removeSpinner( 'abusefilter-reautoconfirm' );
}
$( document ).ready( function() {
$( '#mw-abusefilter-submitexpr' ).click( doExprSubmit );
$( '#mw-abusefilter-reautoconfirmsubmit' ).click( doReautoSubmit );
} );
} ( mediaWiki, jQuery ) );