mw.Upload.BookletLayout: Show errors and try to recover from warnings
[lhc/web/wiklou.git] / resources / src / mediawiki / mediawiki.Upload.BookletLayout.js
index d1e01b1..b574a5d 100644 (file)
                this.upload.setFilename( this.getFilename() );
                this.upload.setText( this.getText() );
 
-               this.uploadPromise.always( function () {
-                       layout.upload.finishStashUpload().always( function () {
+               this.uploadPromise.then( function () {
+                       layout.upload.finishStashUpload().then( function () {
                                var name;
 
+                               // Normalize page name and localise the 'File:' prefix
+                               name = new mw.Title( 'File:' + layout.upload.getFilename() ).toString();
+                               layout.filenameUsageWidget.setValue( '[[' + name + ']]' );
+                               layout.setPage( 'insert' );
+
+                               deferred.resolve();
+                               layout.emit( 'fileSaved' );
+                       }, function () {
+                               var stateDetails = layout.upload.getStateDetails();
+
                                if ( layout.upload.getState() === mw.Upload.State.ERROR ) {
-                                       deferred.reject( new OO.ui.Error( mw.msg( 'upload-process-error' ), {
+                                       deferred.reject( new OO.ui.Error( stateDetails, {
                                                recoverable: false
                                        } ) );
                                        return false;
                                }
 
                                if ( layout.upload.getState() === mw.Upload.State.WARNING ) {
-                                       deferred.reject( new OO.ui.Error( mw.msg( 'upload-process-warning' ), {
-                                               recoverable: false
-                                       } ) );
+                                       if ( stateDetails.exists !== undefined ) {
+                                               deferred.reject( new OO.ui.Error(
+                                                       $( '<p>' ).html(
+                                                               mw.message( 'filepageexists', stateDetails.exists ).parse()
+                                                       ),
+                                                       { recoverable: false }
+                                               ) );
+                                       } else if ( stateDetails.duplicate !== undefined ) {
+                                               deferred.reject( new OO.ui.Error(
+                                                       $( '<p>' ).html(
+                                                               mw.message( 'fileexists', stateDetails.duplicate[ 0 ] ).parse()
+                                                       ),
+                                                       { recoverable: false }
+                                               ) );
+                                       } else if ( stateDetails[ 'thumb-name' ] !== undefined ) {
+                                               deferred.reject( new OO.ui.Error(
+                                                       $( '<p>' ).html(
+                                                               mw.message( 'filename-thumb-name' ).parse()
+                                                       ),
+                                                       { recoverable: false }
+                                               ) );
+                                       } else if ( stateDetails[ 'bad-prefix' ] !== undefined ) {
+                                               deferred.reject( new OO.ui.Error(
+                                                       $( '<p>' ).html(
+                                                               mw.message( 'filename-bad-prefix', stateDetails[ 'bad-prefix' ] ).parse()
+                                                       ),
+                                                       { recoverable: false }
+                                               ) );
+                                       } else if ( stateDetails[ 'duplicate-archive' ] !== undefined ) {
+                                               deferred.reject( new OO.ui.Error(
+                                                       $( '<p>' ).html(
+                                                               mw.message( 'api-error-duplicate-archive', stateDetails[ 'duplicate-archive' ] ).parse()
+                                                       ),
+                                                       { recoverable: false }
+                                               ) );
+                                       } else if ( stateDetails.badfilename !== undefined ) {
+                                               // Change the name if the current name isn't acceptable
+                                               layout.filenameWidget.setValue( stateDetails.badfilename );
+                                               deferred.reject( new OO.ui.Error(
+                                                       $( '<p>' ).html(
+                                                               mw.message( 'badfilename', stateDetails.badfilename ).parse()
+                                                       )
+                                               ) );
+                                       }
+
                                        return false;
                                }
-
-                               // Normalize page name and localise the 'File:' prefix
-                               name = new mw.Title( 'File:' + layout.upload.getFilename() ).toString();
-                               layout.filenameUsageWidget.setValue( '[[' + name + ']]' );
-                               layout.setPage( 'insert' );
-
-                               deferred.resolve();
-                               layout.emit( 'fileSaved' );
                        } );
                } );