diff options
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js')
-rw-r--r-- | www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js new file mode 100644 index 00000000..e51becf6 --- /dev/null +++ b/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js @@ -0,0 +1,101 @@ +/** + * 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; + + /** + * 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(); + } + + /** + * Tests the filter against an rc event or abuse log entry. + * + * @context HTMLElement + * @param {jQuery.Event} e + */ + function examinerTestFilter() { + var filter = $( '#wpTestFilter' ).val(), + examine = mw.config.get( 'abuseFilterExamine' ), + params = { + action: 'abusefiltercheckmatch', + filter: filter + }, + api = new mw.Api(); + + $( this ).injectSpinner( { id: 'filter-check', size: 'large' } ); + + 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 ); + } + + $( document ).ready( function () { + $syntaxResult = $( '#mw-abusefilter-syntaxresult' ); + $( '#mw-abusefilter-examine-test' ).click( examinerTestFilter ); + } ); +}( mediaWiki, jQuery ) ); |