diff --git a/modules/ve-mw/init/targets/ve.init.mw.ArticleTarget.js b/modules/ve-mw/init/targets/ve.init.mw.ArticleTarget.js index bbcee816cf..cad168d44a 100644 --- a/modules/ve-mw/init/targets/ve.init.mw.ArticleTarget.js +++ b/modules/ve-mw/init/targets/ve.init.mw.ArticleTarget.js @@ -1545,11 +1545,14 @@ ve.init.mw.ArticleTarget.prototype.getWikitextDiffPromise = function ( doc ) { oldid: this.revid, etag: this.etag }, 'diff' ).then( function ( data ) { - if ( data.result === 'nochanges' ) { + return data.diff; + }, function ( code, response ) { + // ArticleTargetSaver treats this as an error, this is silly + if ( response.visualeditoredit && response.visualeditoredit.result === 'nochanges' ) { target.emit( 'noChanges' ); return null; } - return data.diff; + return ve.createDeferred().reject( code, response ).promise(); } ); this.wikitextDiffPromise .done( this.emit.bind( this, 'showChanges' ) ) diff --git a/modules/ve-mw/preinit/ve.init.mw.ArticleTargetSaver.js b/modules/ve-mw/preinit/ve.init.mw.ArticleTargetSaver.js index a6f9cb2d85..7b61379ad7 100644 --- a/modules/ve-mw/preinit/ve.init.mw.ArticleTargetSaver.js +++ b/modules/ve-mw/preinit/ve.init.mw.ArticleTargetSaver.js @@ -256,11 +256,11 @@ html: 'Invalid response from server' }; } else if ( data.result !== 'success' ) { - // Note, this could be any of db failure, hookabort, badtoken or even a captcha - error = { - code: 'failure', - html: 'Save failure: ' + mw.html.escape( data.result ) - }; + // This can only happen when: + // * viewing a diff with no changes (`data.result === 'nochanges'`) + // * saving an edit and getting a captcha (`data.result === 'error'`) + // It's a silly special case... + return $.Deferred().reject( 'no-error-no-success', response ).promise(); } else { // paction specific errors switch ( data.paction ) {