jenkins-bot has submitted this change and it was merged.
Change subject: Add abort method to mw.api
......................................................................
Add abort method to mw.api
The abort method allows you to cancel any requests currently pending
in the current class. Useful for cancelling no longer needed requests
due some user action (for example a user switching back to edit mode
from preview or a user cancelling multiple searches across different
lookup widgets)
Bug: T111245
Change-Id: Ie614b05fbfbddca38ea201e90053bebdd58da949
---
M resources/src/mediawiki/api.js
M tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
2 files changed, 43 insertions(+), 2 deletions(-)
Approvals:
Bartosz Dziewoński: Looks good to me, approved
jenkins-bot: Verified
diff --git a/resources/src/mediawiki/api.js b/resources/src/mediawiki/api.js
index 43b20b8..79aba77 100644
--- a/resources/src/mediawiki/api.js
+++ b/resources/src/mediawiki/api.js
@@ -79,9 +79,20 @@
options.ajax = $.extend( {}, defaultOptions.ajax, options.ajax
);
this.defaults = options;
+ this.requests = [];
};
mw.Api.prototype = {
+ /**
+ * Abort all unfinished requests issued by this Api object.
+ *
+ * @method
+ */
+ abort: function () {
+ $.each( this.requests, function ( index, request ) {
+ request.abort();
+ } );
+ },
/**
* Perform API get request
@@ -222,6 +233,7 @@
}
} );
+ this.requests.push( xhr );
// Return the Promise
return apiDeferred.promise( { abort: xhr.abort }
).fail( function ( code, details ) {
if ( !( code === 'http' && details &&
details.textStatus === 'abort' ) ) {
diff --git a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
index 8033458..56a346f 100644
--- a/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
+++ b/tests/qunit/suites/resources/mediawiki.api/mediawiki.api.test.js
@@ -1,4 +1,4 @@
-( function ( mw ) {
+( function ( mw, $ ) {
QUnit.module( 'mediawiki.api', QUnit.newMwEnvironment( {
setup: function () {
this.server = this.sandbox.useFakeServer();
@@ -346,4 +346,33 @@
assert.deepEqual( data, { example: { value: 'B'
} } );
} );
} );
-}( mediaWiki ) );
+
+ QUnit.module( 'mediawiki.api (2)', {
+ setup: function () {
+ var self = this,
+ requests = this.requests = [];
+ this.api = new mw.Api();
+ this.sandbox.stub( jQuery, 'ajax', function () {
+ var request = $.extend( {
+ abort: self.sandbox.spy()
+ }, $.Deferred() );
+ requests.push( request );
+ return request;
+ } );
+ }
+ } );
+
+ QUnit.test( '#abort', 3, function ( assert ) {
+ this.api.get( {
+ a: 1
+ } );
+ this.api.post( {
+ b: 2
+ } );
+ this.api.abort();
+ assert.ok( this.requests.length === 2, 'Check both requests
triggered' );
+ $.each( this.requests, function ( i, request ) {
+ assert.ok( request.abort.calledOnce, 'abort request
number ' + i );
+ } );
+ } );
+}( mediaWiki, jQuery ) );
--
To view, visit https://gerrit.wikimedia.org/r/236193
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie614b05fbfbddca38ea201e90053bebdd58da949
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/core
Gerrit-Branch: master
Gerrit-Owner: Jdlrobson <[email protected]>
Gerrit-Reviewer: Bartosz Dziewoński <[email protected]>
Gerrit-Reviewer: Edokter <[email protected]>
Gerrit-Reviewer: Jack Phoenix <[email protected]>
Gerrit-Reviewer: Jdlrobson <[email protected]>
Gerrit-Reviewer: Kaldari <[email protected]>
Gerrit-Reviewer: Krinkle <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits