From 55255ccd63d5726a59a245e0b8a6ce72778c8232 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Wed, 23 Nov 2016 12:13:06 -0800 Subject: [PATCH] mediawiki.api: Fix getToken() incompat with jQuery 3.0 * getToken()'s fail() handler deletes property from promiseGroup. However sometimes this doesn't exist yet for the current api url. Move the block that creates this object higher up. * Deferred.then() used to have an undocumented 'this' context. No longer exists in jQuery 3.0, but we weren't supposed to be using returning it as-is anyway. Return a new Deferred instead, like we do elsewhere. Bug: T124742 Change-Id: I52c6bb779c5e79161e38a5d0c7c2cb3b458be9ba --- resources/src/mediawiki/api.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/resources/src/mediawiki/api.js b/resources/src/mediawiki/api.js index b9e05c368f..0c08ca4b69 100644 --- a/resources/src/mediawiki/api.js +++ b/resources/src/mediawiki/api.js @@ -334,8 +334,8 @@ } ); } - // Different error, pass on to let caller handle the error code - return this; + // Let caller handle the error code + return $.Deferred().rejectWith( this, arguments ); } ); } ).promise( { abort: function () { @@ -363,6 +363,10 @@ promiseGroup = promises[ this.defaults.ajax.url ]; d = promiseGroup && promiseGroup[ type + 'Token' ]; + if ( !promiseGroup ) { + promiseGroup = promises[ this.defaults.ajax.url ] = {}; + } + if ( !d ) { apiPromise = this.get( { action: 'query', @@ -382,16 +386,13 @@ // Clear promise. Do not cache errors. delete promiseGroup[ type + 'Token' ]; - // Pass on to allow the caller to handle the error - return this; + // Let caller handle the error code + return $.Deferred().rejectWith( this, arguments ); } ) // Attach abort handler .promise( { abort: apiPromise.abort } ); // Store deferred now so that we can use it again even if it isn't ready yet - if ( !promiseGroup ) { - promiseGroup = promises[ this.defaults.ajax.url ] = {}; - } promiseGroup[ type + 'Token' ] = d; } -- 2.20.1