mediawiki.api.upload: Correct response handling of #uploadWithFormData
authorBartosz Dziewoński <matma.rex@gmail.com>
Mon, 13 Jul 2015 18:14:21 +0000 (20:14 +0200)
committerBartosz Dziewoński <matma.rex@gmail.com>
Thu, 16 Jul 2015 14:42:28 +0000 (14:42 +0000)
* Reject instead of resolving when API reports errors, like #uploadWithIframe
* Purge bad tokens correctly, like #uploadWithIframe

Change-Id: I42fe6f6e921fe29dd96ce5b75ad61014a7346fc9

resources/src/mediawiki.api/mediawiki.api.upload.js

index b398f98..c2d6989 100644 (file)
                        }, false );
 
                        xhr.addEventListener( 'load', function ( e ) {
-                               deferred.resolve( parseXHRResponse( e ) );
+                               var result = parseXHRResponse( e );
+
+                               if ( result.error || result.warnings ) {
+                                       if ( result.error && result.error.code === 'badtoken' ) {
+                                               api.badToken( 'edit' );
+                                       }
+
+                                       deferred.reject( result.error || result.warnings );
+                               } else {
+                                       deferred.notify( 1 );
+                                       deferred.resolve( result );
+                               }
                        }, false );
 
                        xhr.addEventListener( 'error', function ( e ) {
                                this.getEditToken().then( function ( token ) {
                                        formData.append( 'token', token );
                                        xhr.send( formData );
-                               }, function () {
-                                       // Mark the edit token as bad, it's been used.
-                                       api.badToken( 'edit' );
                                } );
                        } else {
                                xhr.send( formData );