summaryrefslogtreecommitdiff
path: root/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js
diff options
context:
space:
mode:
Diffstat (limited to 'extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js')
-rw-r--r--extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js67
1 files changed, 67 insertions, 0 deletions
diff --git a/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js b/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js
new file mode 100644
index 00000000..63d12294
--- /dev/null
+++ b/extensions/TitleBlacklist/modules/mediawiki.api.titleblacklist.js
@@ -0,0 +1,67 @@
+/**
+ * @class mw.Api.plugin.titleblacklist
+ */
+( function ( mw, $ ) {
+
+ $.extend( mw.Api.prototype, {
+ /**
+ * Convinience 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()
+ } )
+ .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
+ * @mixins mw.Api.plugin.titleblacklist
+ */
+
+}( mediaWiki, jQuery ) );