summaryrefslogtreecommitdiff
path: root/resources/mediawiki.api/mediawiki.api.titleblacklist.js
blob: 1f7e275aa8f915ccbead796594969b0630f089fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/**
 * Additional mw.Api methods to assist with API calls to the API module of the TitleBlacklist extension.
 */

( function ( mw, $ ) {

	$.extend( mw.Api.prototype, {
		/**
		 * Convinience method for 'action=titleblacklist'.
		 * Note: This action is not provided by MediaWiki core, but as part of the TitleBlacklist extension.
		 *
		 * @param title {mw.Title}
		 * @param success {Function} Called on successfull request. First argument is false if title wasn't blacklisted,
		 *  object with 'reason', 'line' and 'message' properties if title was blacklisted.
		 * @param err {Function} optional callback to run if api error
		 * @return {jqXHR}
		 */
		isBlacklisted: function ( title, success, err ) {
			var	params = {
					action: 'titleblacklist',
					tbaction: 'create',
					tbtitle: title.toString()
				},
				ok = function ( data ) {
					var result;

					// this fails open (if nothing valid is returned by the api, allows the title)
					// also fails open when the API is not present, which will be most of the time
					// as this API module is part of the TitleBlacklist extension.
					if ( data.titleblacklist && data.titleblacklist.result && data.titleblacklist.result === 'blacklisted') {
						if ( data.titleblacklist.reason ) {
							result = {
								reason: data.titleblacklist.reason,
								line: data.titleblacklist.line,
								message: data.titleblacklist.message
							};
						} else {
							mw.log('mw.Api.titleblacklist::isBlacklisted> no reason data for blacklisted title', 'debug');
							result = { reason: 'Blacklisted, but no reason supplied', line: 'Unknown', message: null };
						}
						success( result );
					} else {
						success ( false );
					}
				};

			return this.get( params, { ok: ok, err: err } );
		}

	} );

}( mediaWiki, jQuery ) );