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' );
} );
} );