mw.Upload.BookletLayout: Don't show file extension in the filename input
authorBartosz Dziewoński <matma.rex@gmail.com>
Mon, 28 Dec 2015 20:48:30 +0000 (21:48 +0100)
committerBartosz Dziewoński <matma.rex@gmail.com>
Mon, 28 Dec 2015 21:15:45 +0000 (22:15 +0100)
Also:
* Strip/replace characters that are invalid in MediaWiki page titles
  from the default file name using mw.Title.newFromFileName
* Upload files with the canonical extension for given file type (e.g.
  map '.JPEG' to '.jpg') using mw.Title.normalizeExtension

Change-Id: Ied06682a61581303b720096bb087fc2d9ae4fdbe

resources/Resources.php
resources/src/mediawiki/mediawiki.Upload.BookletLayout.js

index ad2f12c..ca82c84 100644 (file)
@@ -1186,6 +1186,7 @@ return array(
                ),
                'dependencies' => array(
                        'oojs-ui',
+                       'mediawiki.Title',
                        'mediawiki.user',
                        'mediawiki.Upload',
                        'mediawiki.jqueryMsg',
index 54f3ab6..3f04bb1 100644 (file)
                        layout = this,
                        file = this.getFile();
 
-               this.filenameWidget.setValue( file.name );
+               this.setFilename( file.name );
+
                this.setPage( 'info' );
 
                if ( this.shouldRecordBucket ) {
                }
 
                this.upload.setFile( file );
-               // Explicitly set the filename so that the old filename isn't used in case of retry
-               this.upload.setFilenameFromFile();
+               // The original file name might contain invalid characters, so use our sanitized one
+               this.upload.setFilename( this.getFilename() );
 
                this.uploadPromise = this.upload.uploadToStash();
                this.uploadPromise.then( function () {
                        } else if ( warnings.badfilename !== undefined ) {
                                // Change the name if the current name isn't acceptable
                                // TODO This might not really be the best place to do this
-                               this.filenameWidget.setValue( warnings.badfilename );
+                               this.setFilename( warnings.badfilename );
                                return new OO.ui.Error(
                                        $( '<p>' ).msg( 'badfilename', warnings.badfilename )
                                );
         * @return {string}
         */
        mw.Upload.BookletLayout.prototype.getFilename = function () {
-               return this.filenameWidget.getValue();
+               var filename = this.filenameWidget.getValue();
+               if ( this.filenameExtension ) {
+                       filename += '.' + this.filenameExtension;
+               }
+               return filename;
+       };
+
+       /**
+        * Prefills the {@link #infoForm information form} with the given filename.
+        *
+        * @protected
+        * @param {string} filename
+        */
+       mw.Upload.BookletLayout.prototype.setFilename = function ( filename ) {
+               var title = mw.Title.newFromFileName( filename );
+
+               if ( title ) {
+                       this.filenameWidget.setValue( title.getNameText() );
+                       this.filenameExtension = mw.Title.normalizeExtension( title.getExtension() );
+               } else {
+                       // Seems to happen for files with no extension, which should fail some checks anyway...
+                       this.filenameWidget.setValue( filename );
+                       this.filenameExtension = null;
+               }
        };
 
        /**