mediawiki-extensions-AbuseF.../modules/ext.abuseFilter.examine.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

103 lines
2.4 KiB
JavaScript

/**
* Check a filter against a change
*
* @author John Du Hart
* @author Marius Hoch <hoo@online.de>
*/
( function( mw, $ ) {
'use strict';
// Syntax result div
// @type {jQuery}
var $syntaxResult;
/**
* Tests the filter against an rc event or abuse log entry.
*
* @context HTMLElement
* @param {jQuery.Event} e
*/
function examinerTestFilter() {
/*jshint validthis:true */
var filter = $( '#wpTestFilter' ).val(),
examine = mw.config.get( 'abuseFilterExamine' ),
params = {
action: 'abusefiltercheckmatch',
filter: filter
},
api = new mw.Api();
$( this ).injectSpinner( 'filter-check' );
if ( examine.type === 'rc' ) {
params.rcid = examine.id;
} else {
params.logid = examine.id;
}
// Use post due to the rather large amount of data
api.post( params )
.done( examinerTestProcess )
.fail( examinerTestProcessFailure );
}
/**
* Processes the results of the filter test
*
* @param {Object} data
*/
function examinerTestProcess( data ) {
var msg, exClass;
$.removeSpinner( 'filter-check' );
if ( data.abusefiltercheckmatch.result ) {
exClass = 'mw-abusefilter-examine-match';
msg = 'abusefilter-examine-match';
} else {
exClass = 'mw-abusefilter-examine-nomatch';
msg = 'abusefilter-examine-nomatch';
}
$syntaxResult
.attr( 'class', exClass )
.text( mw.msg( msg ) )
.show();
}
/**
* Processes the results of the filter test in case of an error
*
* @param {string} error Error code returned from the AJAX request
* @param {Object} details Details about the error
*/
function examinerTestProcessFailure( error, details ) {
var msg;
$.removeSpinner( 'filter-check' );
if ( error === 'badsyntax' ) {
$syntaxResult.attr(
'class', 'mw-abusefilter-syntaxresult-error'
);
msg = 'abusefilter-examine-syntaxerror';
} else if ( error === 'nosuchrcid' || error === 'nosuchlogid' ) {
msg = 'abusefilter-examine-notfound';
} else if ( error === 'permissiondenied' ) {
// The 'abusefilter-modify' right is needed to use this API
msg = 'abusefilter-mustbeeditor';
} else if ( error === 'http' ) {
msg = 'abusefilter-http-error';
} else {
msg = 'unknown-error';
}
$syntaxResult
.text( mw.msg( msg, details && details.exception ) )
.show();
}
$( document ).ready( function() {
$syntaxResult = $( '#mw-abusefilter-syntaxresult' );
$( '#mw-abusefilter-examine-test' ).click( examinerTestFilter );
} );
} ( mediaWiki, jQuery ) );