From 6e38324ac0073336e335c763b56ef1dcc53ba732 Mon Sep 17 00:00:00 2001 From: Alex Monk Date: Wed, 27 Mar 2013 21:52:00 +0000 Subject: [PATCH] mediawiki.api: Add xhr.abort method to promise object jQuery.ajax does the same internally to extend the promise. Change-Id: I3a8ae7a4c92dda5038cf7722ebd1d41dab0a7ef9 --- .../mediawiki.api/mediawiki.api.category.js | 23 +++++++++++-------- resources/mediawiki.api/mediawiki.api.edit.js | 7 +++--- resources/mediawiki.api/mediawiki.api.js | 9 ++++---- .../mediawiki.api/mediawiki.api.parse.js | 7 +++--- .../mediawiki.api/mediawiki.api.watch.js | 8 ++++--- 5 files changed, 31 insertions(+), 23 deletions(-) diff --git a/resources/mediawiki.api/mediawiki.api.category.js b/resources/mediawiki.api/mediawiki.api.category.js index 4de52911c1..8bba1fca0e 100644 --- a/resources/mediawiki.api/mediawiki.api.category.js +++ b/resources/mediawiki.api/mediawiki.api.category.js @@ -14,12 +14,13 @@ * @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() } ) @@ -36,7 +37,7 @@ }) .fail( d.reject ); - return d.promise(); + return d.promise( { abort: apiPromise.abort } ); }, /** @@ -50,13 +51,14 @@ * @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 @@ -72,7 +74,7 @@ }) .fail( d.reject ); - return d.promise(); + return d.promise( { abort: apiPromise.abort } ); }, @@ -88,12 +90,13 @@ * 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() }, { @@ -114,10 +117,10 @@ } ); } d.resolve( ret ); - }) + } ) .fail( d.reject ); - return d.promise(); + return d.promise( { abort: apiPromise.abort } ); } } ); diff --git a/resources/mediawiki.api/mediawiki.api.edit.js b/resources/mediawiki.api/mediawiki.api.edit.js index 3c775ad0e6..2cd1b9295a 100644 --- a/resources/mediawiki.api/mediawiki.api.edit.js +++ b/resources/mediawiki.api/mediawiki.api.edit.js @@ -57,12 +57,13 @@ * @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' }, { @@ -87,7 +88,7 @@ }) .fail( d.reject ); - return d.promise(); + return d.promise( { abort: apiPromise.abort } ); }, /** diff --git a/resources/mediawiki.api/mediawiki.api.js b/resources/mediawiki.api/mediawiki.api.js index cf7443f3b3..142c454183 100644 --- a/resources/mediawiki.api/mediawiki.api.js +++ b/resources/mediawiki.api/mediawiki.api.js @@ -115,7 +115,8 @@ */ ajax: function ( parameters, ajaxOptions ) { var token, - apiDeferred = $.Deferred(); + apiDeferred = $.Deferred(), + xhr; parameters = $.extend( {}, this.defaults.parameters, parameters ); ajaxOptions = $.extend( {}, this.defaults.ajax, ajaxOptions ); @@ -147,7 +148,7 @@ } // 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 ) { @@ -172,9 +173,9 @@ } ); // 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 ); - }); + } ); } }; diff --git a/resources/mediawiki.api/mediawiki.api.parse.js b/resources/mediawiki.api/mediawiki.api.parse.js index ea0388c103..4044655edb 100644 --- a/resources/mediawiki.api/mediawiki.api.parse.js +++ b/resources/mediawiki.api/mediawiki.api.parse.js @@ -15,12 +15,13 @@ * @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 } ) @@ -31,7 +32,7 @@ } ) .fail( d.reject ); - return d.promise(); + return d.promise( { abort: apiPromise.abort } ); } } ); diff --git a/resources/mediawiki.api/mediawiki.api.watch.js b/resources/mediawiki.api/mediawiki.api.watch.js index c86a90a781..e2be5c783f 100644 --- a/resources/mediawiki.api/mediawiki.api.watch.js +++ b/resources/mediawiki.api/mediawiki.api.watch.js @@ -19,7 +19,9 @@ * @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 ); @@ -35,13 +37,13 @@ $.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, { -- 2.20.1