jQuery.ajax does the same internally to extend the promise.
Change-Id: I3a8ae7a4c92dda5038cf7722ebd1d41dab0a7ef9
* @return {boolean} return.done.isCategory Whether the category exists.
*/
isCategory: function ( title, ok, err ) {
- var d = $.Deferred();
+ var d = $.Deferred(),
+ apiPromise;
// Backwards compatibility (< MW 1.20)
d.done( ok );
d.fail( err );
- this.get( {
+ apiPromise = this.get( {
prop: 'categoryinfo',
titles: title.toString()
} )
})
.fail( d.reject );
- return d.promise();
+ return d.promise( { abort: apiPromise.abort } );
},
/**
* @return {String[]} return.done.categories Matched categories
*/
getCategoriesByPrefix: function ( prefix, ok, err ) {
- var d = $.Deferred();
+ var d = $.Deferred(),
+ apiPromise;
// Backwards compatibility (< MW 1.20)
d.done( ok );
d.fail( err );
// Fetch with allpages to only get categories that have a corresponding description page.
- this.get( {
+ apiPromise = this.get( {
list: 'allpages',
apprefix: prefix,
apnamespace: mw.config.get('wgNamespaceIds').category
})
.fail( d.reject );
- return d.promise();
+ return d.promise( { abort: apiPromise.abort } );
},
* if title was not found.
*/
getCategories: function ( title, ok, err, async ) {
- var d = $.Deferred();
+ var d = $.Deferred(),
+ apiPromise;
// Backwards compatibility (< MW 1.20)
d.done( ok );
d.fail( err );
- this.get( {
+ apiPromise = this.get( {
prop: 'categories',
titles: title.toString()
}, {
} );
}
d.resolve( ret );
- })
+ } )
.fail( d.reject );
- return d.promise();
+ return d.promise( { abort: apiPromise.abort } );
}
} );
* @return {string} return.done.token Received token.
*/
getEditToken: function ( ok, err ) {
- var d = $.Deferred();
+ var d = $.Deferred(),
+ apiPromise;
// Backwards compatibility (< MW 1.20)
d.done( ok );
d.fail( err );
- this.get( {
+ apiPromise = this.get( {
action: 'tokens',
type: 'edit'
}, {
})
.fail( d.reject );
- return d.promise();
+ return d.promise( { abort: apiPromise.abort } );
},
/**
*/
ajax: function ( parameters, ajaxOptions ) {
var token,
- apiDeferred = $.Deferred();
+ apiDeferred = $.Deferred(),
+ xhr;
parameters = $.extend( {}, this.defaults.parameters, parameters );
ajaxOptions = $.extend( {}, this.defaults.ajax, ajaxOptions );
}
// Make the AJAX request
- $.ajax( ajaxOptions )
+ xhr = $.ajax( ajaxOptions )
// If AJAX fails, reject API call with error code 'http'
// and details in second argument.
.fail( function ( xhr, textStatus, exception ) {
} );
// Return the Promise
- return apiDeferred.promise().fail( function ( code, details ) {
+ return apiDeferred.promise( { abort: xhr.abort } ).fail( function ( code, details ) {
mw.log( 'mw.Api error: ', code, details );
- });
+ } );
}
};
* @return {string} return.done.data Parsed HTML of `wikitext`.
*/
parse: function ( wikitext, ok, err ) {
- var d = $.Deferred();
+ var d = $.Deferred(),
+ apiPromise;
// Backwards compatibility (< MW 1.20)
d.done( ok );
d.fail( err );
- this.get( {
+ apiPromise = this.get( {
action: 'parse',
text: wikitext
} )
} )
.fail( d.reject );
- return d.promise();
+ return d.promise( { abort: apiPromise.abort } );
}
} );
* @return {string} return.done.watch.message Parsed HTML of the confirmational interface message
*/
function doWatchInternal( page, ok, err, addParams ) {
- var params, d = $.Deferred();
+ var params,
+ d = $.Deferred(),
+ apiPromise;
// Backwards compatibility (< MW 1.20)
d.done( ok );
d.fail( err );
$.extend( params, addParams );
}
- this.post( params )
+ apiPromise = this.post( params )
.done( function ( data ) {
d.resolve( data.watch );
} )
.fail( d.reject );
- return d.promise();
+ return d.promise( { abort: apiPromise.abort } );
}
$.extend( mw.Api.prototype, {