mediawiki-extensions-TitleB.../modules/mediawiki.api.titleblacklist.js
Umherirrender 4290e114d4 Show titleblacklist error message in html when using js api module
Parse the message in html according to the errorformat= in the url,
fallback to wikitext to avoid a breaking change.

Bug: T369244
Change-Id: I58b995b3663b7dd286267e640d8d56164bd9be0b
2024-07-16 22:57:46 +02:00

73 lines
2 KiB
JavaScript

/**
* @class mw.Api.plugin.titleblacklist
*/
( function () {
Object.assign( mw.Api.prototype, {
/**
* Convenience method for `action=titleblacklist`.
*
* @param {mw.Title|string} title
* @param {Function} [ok] Success callback (deprecated)
* @param {Function} [err] Error callback (deprecated)
* @return {jQuery.Promise}
* @return {Function} return.done
* @return {Object|boolean} return.done.result False if title wasn't blacklisted, an object
* with 'reason', 'line'
* and 'message' properties if title was blacklisted.
*/
isBlacklisted: function ( title, ok, err ) {
var d = $.Deferred();
// Backwards compatibility (< MW 1.20)
d.done( ok );
d.fail( err );
this.get( {
action: 'titleblacklist',
tbaction: 'create',
tbtitle: title.toString(),
errorformat: 'html',
errorlang: mw.config.get( 'wgUserLanguage' ),
errorsuselocal: '',
formatversion: 2
} )
.done( 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
};
}
d.resolve( result );
} else {
d.resolve( false );
}
} )
.fail( d.reject );
return d.promise();
}
} );
/**
* @class mw.Api
* @mixes mw.Api.plugin.titleblacklist
*/
}() );