Merge "mediawiki.api: Make the result promise of #postWithToken abortable"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Mon, 9 May 2016 16:04:29 +0000 (16:04 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Mon, 9 May 2016 16:04:29 +0000 (16:04 +0000)
1  2 
resources/src/mediawiki/api.js

                 * @since 1.22
                 */
                postWithToken: function ( tokenType, params, ajaxOptions ) {
-                       var api = this;
+                       var api = this,
+                               abortable;
  
-                       return api.getToken( tokenType, params.assert ).then( function ( token ) {
+                       return ( abortable = api.getToken( tokenType, params.assert ) ).then( function ( token ) {
                                params.token = token;
-                               return api.post( params, ajaxOptions ).then(
+                               return ( abortable = api.post( params, ajaxOptions ) ).then(
                                        // If no error, return to caller as-is
                                        null,
                                        // Error handler
                                                        api.badToken( tokenType );
                                                        // Try again, once
                                                        params.token = undefined;
-                                                       return api.getToken( tokenType, params.assert ).then( function ( token ) {
+                                                       return ( abortable = api.getToken( tokenType, params.assert ) ).then( function ( token ) {
                                                                params.token = token;
-                                                               return api.post( params, ajaxOptions );
+                                                               return ( abortable = api.post( params, ajaxOptions ) ).promise();
                                                        } );
                                                }
  
                                                return this;
                                        }
                                );
-                       } );
+                       } ).promise( { abort: function () {
+                               abortable.abort();
+                       } } );
                },
  
                /**
                'fileexists-shared-forbidden',
                'invalidtitle',
                'notloggedin',
 +              'autoblocked',
 +              'blocked',
  
                // Stash-specific errors - expanded
                'stashfailed',