summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js')
-rw-r--r--www/wiki/extensions/AbuseFilter/modules/ext.abuseFilter.examine.js101
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 ) );